@e-techsolutions/e-baas-sdk 1.1.9 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -1 +1,2022 @@
1
- (function(stringArrayFunction,comparisonValue){const stringArray=stringArrayFunction();function _0x510194(_0x3a8e5d,_0x55d84a){return _0x30c5(_0x3a8e5d-0x1d5,_0x55d84a);}while(!![]){try{const _0x59c24e=parseInt(_0x510194(0x3d8,0x352))/0x1+parseInt(_0x510194(0x387,0x3b1))/0x2*(-parseInt(_0x510194(0x3eb,0x3f7))/0x3)+-parseInt(_0x510194(0x37f,0x3ed))/0x4+-parseInt(_0x510194(0x397,0x384))/0x5*(parseInt(_0x510194(0x3e0,0x372))/0x6)+parseInt(_0x510194(0x3b2,0x3ce))/0x7*(parseInt(_0x510194(0x3fc,0x469))/0x8)+parseInt(_0x510194(0x3d7,0x3b9))/0x9+-parseInt(_0x510194(0x3c5,0x423))/0xa;if(_0x59c24e===comparisonValue)break;else stringArray['push'](stringArray['shift']());}catch(_0x464f08){stringArray['push'](stringArray['shift']());}}}(_0x5035,0xe93cb));function _0x30c5(_0x2d85c0,_0x3e6822){const _0x50359b=_0x5035();return _0x30c5=function(_0x30c563,_0x89ef48){_0x30c563=_0x30c563-0x15d;let _0x51eb1a=_0x50359b[_0x30c563];if(_0x30c5['gDoLDn']===undefined){var _0x523de9=function(_0x26b5d7){const _0x33cf35='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x48483f='',_0x45e808='';for(let _0xc6a3d8=0x0,_0x949364,_0xa96bf5,_0x11ecee=0x0;_0xa96bf5=_0x26b5d7['charAt'](_0x11ecee++);~_0xa96bf5&&(_0x949364=_0xc6a3d8%0x4?_0x949364*0x40+_0xa96bf5:_0xa96bf5,_0xc6a3d8++%0x4)?_0x48483f+=String['fromCharCode'](0xff&_0x949364>>(-0x2*_0xc6a3d8&0x6)):0x0){_0xa96bf5=_0x33cf35['indexOf'](_0xa96bf5);}for(let _0xd12b69=0x0,_0x46c884=_0x48483f['length'];_0xd12b69<_0x46c884;_0xd12b69++){_0x45e808+='%'+('00'+_0x48483f['charCodeAt'](_0xd12b69)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x45e808);};_0x30c5['mirDYz']=_0x523de9,_0x2d85c0=arguments,_0x30c5['gDoLDn']=!![];}const _0xa95629=_0x50359b[0x0],_0x308bf5=_0x30c563+_0xa95629,_0x24661b=_0x2d85c0[_0x308bf5];return!_0x24661b?(_0x51eb1a=_0x30c5['mirDYz'](_0x51eb1a),_0x2d85c0[_0x308bf5]=_0x51eb1a):_0x51eb1a=_0x24661b,_0x51eb1a;},_0x30c5(_0x2d85c0,_0x3e6822);}import axios from'axios';class EBaaSError extends Error{constructor(_0x26b5d7,status=0x0,_0x33cf35){super(_0x26b5d7),this[_0x1c73fe(-0x180,-0x1dc)]='EBaaSError',this[_0x1c73fe(-0x13b,-0xb4)]=status;function _0x1c73fe(_0x3b1156,_0x4a6a55){return _0x30c5(_0x3b1156- -0x350,_0x4a6a55);}this[_0x1c73fe(-0x199,-0x1e0)]=_0x33cf35,Error[_0x1c73fe(-0x1db,-0x219)]&&Error['captureStackTrace'](this,EBaaSError);}['toJSON'](){function _0x728abd(_0x6a54c5,_0x19a594){return _0x30c5(_0x19a594- -0x20,_0x6a54c5);}return{'name':this['name'],'message':this[_0x728abd(0x1aa,0x1ea)],'status':this['status'],'details':this['details'],'stack':this[_0x728abd(0x1eb,0x231)]};}['toString'](){return this['name']+':\x20'+this['message']+'\x20(Status:\x20'+this['status']+')';}}class HttpClient{constructor(config){this[_0x17643a(0x410,0x489)]=config[_0x17643a(0x39e,0x352)];function _0x17643a(_0x476798,_0x468fc3){return _0x30c5(_0x476798-0x216,_0x468fc3);}this[_0x17643a(0x44f,0x4c3)]=config['apiKey'],this['client']=axios[_0x17643a(0x386,0x314)]({'baseURL':this['baseURL'],'timeout':config[_0x17643a(0x3ba,0x42a)]||0x2710,'headers':{'Content-Type':'application/json','apikey':this[_0x17643a(0x44f,0x3f7)],...config[_0x17643a(0x403,0x46e)]}}),this['setupInterceptors']();}['setupInterceptors'](){function _0x1fe32c(_0x3cd200,_0x5bf09d){return _0x30c5(_0x3cd200-0x33a,_0x5bf09d);}this[_0x1fe32c(0x4bc,0x542)]['interceptors'][_0x1fe32c(0x588,0x5ce)]['use'](config=>{return config;},_0x48483f=>{function _0x4b2879(_0x419a30,_0x5e8f4d){return _0x30c5(_0x5e8f4d-0x5,_0x419a30);}return Promise[_0x4b2879(0x212,0x1a4)](new EBaaSError('Request\x20failed',0x0,_0x48483f));}),this[_0x1fe32c(0x4bc,0x521)]['interceptors']['response'][_0x1fe32c(0x4e3,0x4a7)](response=>{return response;},_0x45e808=>{const status=_0x45e808[_0xde271f(0x105,0x179)]?.['status']||0x0;function _0xde271f(_0x2dcffb,_0x4e315d){return _0x30c5(_0x4e315d- -0xf2,_0x2dcffb);}const _0xc6a3d8=_0x45e808['response']?.[_0xde271f(0x42,0xbe)]?.['message']||_0x45e808[_0xde271f(0x15b,0x118)]||_0xde271f(0x10f,0xd9),_0x949364=_0x45e808['response']?.[_0xde271f(0xb3,0xbe)]||_0x45e808;return Promise['reject'](new EBaaSError(_0xc6a3d8,status,_0x949364));});}async['get'](_0xa96bf5,config){function _0x2c347e(_0x9a492d,_0x1350e5){return _0x30c5(_0x9a492d- -0x1fb,_0x1350e5);}try{const response=await this['client']['get'](_0xa96bf5,config);return{'data':response['data'],'status':response['status'],'statusText':response[_0x2c347e(0x1c,0x51)],'headers':response[_0x2c347e(-0xe,0x30)]};}catch(_0x11ecee){throw this['handleError'](_0x11ecee);}}async['post'](_0xd12b69,data,config){function _0x171bf8(_0x2067b2,_0xe25ea5){return _0x30c5(_0x2067b2- -0x220,_0xe25ea5);}try{const response=await this['client']['post'](_0xd12b69,data,config);return{'data':response['data'],'status':response['status'],'statusText':response[_0x171bf8(-0x9,-0x16)],'headers':response['headers']};}catch(_0x46c884){throw this[_0x171bf8(-0x38,-0xf)](_0x46c884);}}async[_0x684fad(0x4db,0x465)](_0x1588e3,data,config){try{const response=await this['client']['put'](_0x1588e3,data,config);return{'data':response['data'],'status':response['status'],'statusText':response['statusText'],'headers':response['headers']};}catch(_0x4f79b5){throw this['handleError'](_0x4f79b5);}}async[_0x684fad(0x4c4,0x4a7)](_0x26826a,data,config){function _0x128f14(_0xbe2855,_0x1bffeb){return _0x30c5(_0xbe2855-0x110,_0x1bffeb);}try{const response=await this['client']['patch'](_0x26826a,data,config);return{'data':response['data'],'status':response[_0x128f14(0x325,0x343)],'statusText':response[_0x128f14(0x327,0x2ba)],'headers':response[_0x128f14(0x2fd,0x2b6)]};}catch(_0x1a1592){throw this[_0x128f14(0x2f8,0x29b)](_0x1a1592);}}async['delete'](_0x57ab20,config){function _0x21b9bb(_0x1c3cbf,_0x2c2251){return _0x30c5(_0x2c2251-0xc1,_0x1c3cbf);}try{const response=await this['client']['delete'](_0x57ab20,config);return{'data':response['data'],'status':response[_0x21b9bb(0x26f,0x2d6)],'statusText':response[_0x21b9bb(0x31c,0x2d8)],'headers':response['headers']};}catch(_0x5de01e){throw this[_0x21b9bb(0x32a,0x2a9)](_0x5de01e);}}[_0x684fad(0x4e7,0x47c)](_0x3b930b){function _0x2246cb(_0x3a4c80,_0x3b70ee){return _0x30c5(_0x3b70ee- -0xf0,_0x3a4c80);}this[_0x2246cb(0x44,0x92)][_0x2246cb(0x110,0xe6)][_0x2246cb(0xa5,0xfd)]['common']['Authorization']=_0x2246cb(0x1da,0x16f)+_0x3b930b;}['removeAuthToken'](){delete this[_0x5ade67(-0x6,-0x35)]['defaults']['headers']['common']['Authorization'];function _0x5ade67(_0x425698,_0x303d87){return _0x30c5(_0x425698- -0x188,_0x303d87);}this[_0x5ade67(-0x6,-0x23)]['defaults']['headers'][_0x5ade67(0x6a,-0x1e)]['Authorization']='Bearer\x20'+this['apiKey'];}['handleError'](_0x42dbe8){function _0x4dfb0f(_0x1d76b3,_0x5b3e2f){return _0x30c5(_0x1d76b3- -0x36d,_0x5b3e2f);}if(_0x42dbe8 instanceof EBaaSError)return _0x42dbe8;return new EBaaSError(_0x42dbe8[_0x4dfb0f(-0x163,-0x123)]||_0x4dfb0f(-0x15d,-0x148),_0x42dbe8[_0x4dfb0f(-0x158,-0xe4)]||0x0,_0x42dbe8);}}class AuthClient{constructor(_0x2d5ee9,_0x211ce0){this['currentSession']=null,this['httpClient']=_0x2d5ee9;function _0x2414d1(_0x25b8e0,_0x49d40a){return _0x30c5(_0x49d40a- -0x97,_0x25b8e0);}this['workspaceId']=_0x211ce0,this[_0x2414d1(0x204,0x1d3)]();}async[_0x684fad(0x546,0x500)](data){function _0x26cda3(_0x1fece1,_0x347d04){return _0x30c5(_0x1fece1-0x1c,_0x347d04);}try{const response=await this[_0x26cda3(0x1c9,0x198)]['post'](_0x26cda3(0x1d5,0x223),data);return response['data']['session']&&this['setSessionInternal'](response['data']['session']),response[_0x26cda3(0x1cc,0x22c)];}catch(_0x36979a){throw this[_0x26cda3(0x1b1,0x1f3)](_0x36979a);}}async[_0x684fad(0x563,0x5cb)](data){function _0x1d83b7(_0x3274ed,_0x47cc32){return _0x30c5(_0x47cc32- -0x170,_0x3274ed);}try{const headers={};this['workspaceId']&&(headers[_0x1d83b7(0x14c,0xf2)]=this['workspaceId']);const response=await this['httpClient']['post'](_0x1d83b7(0x61,0xc8),data,{'headers':headers});return response[_0x1d83b7(0x59,0x40)][_0x1d83b7(-0x7a,0x2)]&&this['setSessionInternal'](response['data']['session']),response['data'];}catch(_0x3d9ed8){throw this['handleAuthError'](_0x3d9ed8);}}async[_0x684fad(0x4f2,0x470)](){function _0xb568d6(_0x3b4559,_0x2924da){return _0x30c5(_0x2924da-0x108,_0x3b4559);}try{await this['httpClient']['post'](_0xb568d6(0x2bf,0x2a4)),this[_0xb568d6(0x312,0x29b)]();}catch(_0x2dfe93){this['clearSession']();throw this['handleAuthError'](_0x2dfe93);}}async['getUser'](){if(!this['currentSession']?.[_0xecf5e9(0x93,0xa7)])return null;function _0xecf5e9(_0x13cb9d,_0x3026a2){return _0x30c5(_0x3026a2- -0x14c,_0x13cb9d);}try{const response=await this['httpClient'][_0xecf5e9(0x13c,0xfc)](_0xecf5e9(0x13f,0xf6));return response['data']['user'];}catch(_0x3e7f23){if(_0x3e7f23 instanceof EBaaSError&&_0x3e7f23[_0xecf5e9(0x14f,0xc9)]===0x191)return this['clearSession'](),null;throw this['handleAuthError'](_0x3e7f23);}}async[_0x684fad(0x573,0x547)](){function _0x4997e5(_0x1c3e21,_0x1c0ad8){return _0x30c5(_0x1c0ad8-0x5a,_0x1c3e21);}if(!this[_0x4997e5(0x302,0x29b)]?.[_0x4997e5(0x2c3,0x2b0)])return null;try{const response=await this[_0x4997e5(0x1ba,0x207)]['post'](_0x4997e5(0x294,0x227),{'refresh_token':this[_0x4997e5(0x2fe,0x29b)]['refresh_token']});if(response['data'][_0x4997e5(0x1ec,0x1cc)])return this[_0x4997e5(0x205,0x24f)](response['data'][_0x4997e5(0x1c6,0x1cc)]),response['data']['session'];return null;}catch(_0x13f10){this['clearSession']();throw this['handleAuthError'](_0x13f10);}}async[_0x684fad(0x579,0x589)](_0x53620f){function _0x3c2218(_0x1353f8,_0x522047){return _0x30c5(_0x1353f8- -0x36c,_0x522047);}try{await this['httpClient']['post']('/auth/v1/reset-password',{'email':_0x53620f});}catch(_0x48e4de){throw this[_0x3c2218(-0x1d7,-0x19b)](_0x48e4de);}}async['updateUser'](data){function _0x3a2e2c(_0x35a5fe,_0x35c5ed){return _0x30c5(_0x35c5ed- -0x105,_0x35a5fe);}try{const response=await this[_0x3a2e2c(0xc9,0xa8)][_0x3a2e2c(0xf3,0xaa)]('/auth/v1/user',data);return response[_0x3a2e2c(0xc7,0xab)]['user'];}catch(_0x4d21a4){throw this['handleAuthError'](_0x4d21a4);}}['getSession'](){return this['currentSession'];}['setSession'](_0x5a18db){this['currentSession']=_0x5a18db,this['httpClient'][_0x22b02f(0x3f6,0x38a)](_0x5a18db[_0x22b02f(0x34c,0x3c2)]);function _0x22b02f(_0x1422f3,_0x1efbc7){return _0x30c5(_0x1efbc7-0x1cf,_0x1422f3);}typeof localStorage!=='undefined'&&localStorage['setItem'](_0x22b02f(0x31a,0x34d),JSON['stringify'](_0x5a18db));}['onAuthStateChange'](_0x50a9f4){return()=>{};}['setWorkspaceId'](_0x53d1cb){function _0x1ed560(_0x2ac1f5,_0x280971){return _0x30c5(_0x280971-0x102,_0x2ac1f5);}this[_0x1ed560(0x21c,0x28b)]=_0x53d1cb;}['setSessionInternal'](_0x34c598){this['currentSession']=_0x34c598,this['httpClient'][_0x2a2c14(0x12e,0x18e)](_0x34c598[_0x2a2c14(0x229,0x1c6)]);function _0x2a2c14(_0x4cc36f,_0x4098d3){return _0x30c5(_0x4098d3- -0x2d,_0x4cc36f);}typeof localStorage!==_0x2a2c14(0x1ff,0x194)&&localStorage[_0x2a2c14(0x180,0x14b)](_0x2a2c14(0x151,0x151),JSON[_0x2a2c14(0x274,0x227)](_0x34c598));}['clearSession'](){this['currentSession']=null;function _0x352933(_0x5988e7,_0x30b15d){return _0x30c5(_0x5988e7-0x176,_0x30b15d);}this['httpClient'][_0x352933(0x2d4,0x35a)](),typeof localStorage!==_0x352933(0x337,0x2b7)&&localStorage['removeItem']('ebaas.auth.session');}[_0x684fad(0x596,0x5d7)](){function _0x443fd6(_0x2f6eca,_0x26a941){return _0x30c5(_0x2f6eca-0x1ae,_0x26a941);}if(typeof localStorage!=='undefined'){const _0x4300da=localStorage[_0x443fd6(0x3dc,0x3ff)](_0x443fd6(0x32c,0x322));if(_0x4300da)try{const _0x41530d=JSON['parse'](_0x4300da);this[_0x443fd6(0x329,0x363)](_0x41530d);}catch(_0x311ef3){this['clearSession']();}}}[_0x684fad(0x4c1,0x513)](_0x1f78ad){if(_0x1f78ad instanceof EBaaSError)return _0x1f78ad;return new EBaaSError(_0x1f78ad['message']||'Authentication\x20failed',_0x1f78ad['status']||0x0,_0x1f78ad);}}class QueryBuilder{constructor(_0x144c4a,_0x167d83,_0x422ce6,_0x18a4c7){this['httpClient']=_0x144c4a,this[_0x342211(0x8e,0x7c)]=_0x167d83,this['schema']=_0x422ce6,this['workspaceId']=_0x18a4c7;function _0x342211(_0x206405,_0x24953d){return _0x30c5(_0x24953d- -0x19c,_0x206405);}this['query']={'filters':[]};}['select'](_0x124209='*',_0x431477){this[_0x3cee0a(0x48a,0x4ae)]['select']=_0x124209;function _0x3cee0a(_0x2500b0,_0x4d7f44){return _0x30c5(_0x2500b0-0x28b,_0x4d7f44);}return this;}['insert'](data,_0x137e12){function _0x21ace9(_0x4e8ac5,_0xa9d229){return _0x30c5(_0x4e8ac5-0x326,_0xa9d229);}return this[_0x21ace9(0x535,0x580)]('POST',_0x21ace9(0x48d,0x4f3)+this['table']+_0x21ace9(0x49c,0x4b8),{'data':data,'options':_0x137e12});}['update'](data,_0x2235f9){function _0x4d9591(_0x641fec,_0x597003){return _0x30c5(_0x597003- -0xb2,_0x641fec);}return this[_0x4d9591(0x162,0x14d)]['updateData']=data,this[_0x4d9591(0xf6,0x14d)]['updateOptions']=_0x2235f9,this;}['upsert'](data,_0x7fddb0){function _0x2bc767(_0x3a3967,_0x20e629){return _0x30c5(_0x20e629-0xa1,_0x3a3967);}return this['executeQuery']('POST','/sdk/v1/'+this[_0x2bc767(0x2f2,0x2b9)]+'?operation=upsert',{'data':data,'options':{..._0x7fddb0,'upsert':!![]}});}['delete'](_0x37ed3e){this[_0x31b60a(0x55d,0x56e)][_0x31b60a(0x52d,0x56e)]=_0x37ed3e,this[_0x31b60a(0x55d,0x514)]['isDelete']=!![];function _0x31b60a(_0x295b74,_0x402314){return _0x30c5(_0x295b74-0x35e,_0x402314);}return this;}['eq'](_0x36bce3,_0x30c004){this[_0x3d7396(0x107,0x13b)][_0x3d7396(0x6a,-0x1e)]['push']({'column':_0x36bce3,'operator':'eq','value':_0x30c004});function _0x3d7396(_0xf677c5,_0xba2a87){return _0x30c5(_0xf677c5- -0xf8,_0xba2a87);}return this;}['neq'](_0x5f0c80,_0x3b0883){function _0x33e323(_0x495ff0,_0x4c5b4a){return _0x30c5(_0x495ff0-0x10a,_0x4c5b4a);}return this[_0x33e323(0x309,0x304)][_0x33e323(0x26c,0x29f)]['push']({'column':_0x5f0c80,'operator':'neq','value':_0x3b0883}),this;}['gt'](_0x535dc4,_0x854ed4){this['query']['filters'][_0x18285d(0x1f2,0x1d5)]({'column':_0x535dc4,'operator':'gt','value':_0x854ed4});function _0x18285d(_0x1d2c11,_0x476886){return _0x30c5(_0x1d2c11-0xd,_0x476886);}return this;}['gte'](_0x105399,_0x3b7714){function _0x5d1598(_0x13afbc,_0x1916d0){return _0x30c5(_0x13afbc- -0xff,_0x1916d0);}return this[_0x5d1598(0x100,0xa3)]['filters']['push']({'column':_0x105399,'operator':'gte','value':_0x3b7714}),this;}['lt'](_0x21d2a6,_0x5b2815){function _0x186dae(_0x285d8e,_0x26cd06){return _0x30c5(_0x26cd06- -0x14a,_0x285d8e);}return this[_0x186dae(0x113,0xb5)][_0x186dae(-0x3,0x18)][_0x186dae(0x44,0x9b)]({'column':_0x21d2a6,'operator':'lt','value':_0x5b2815}),this;}[_0x684fad(0x50b,0x519)](_0x5c8583,_0x5c35f0){function _0x50b918(_0x5b5439,_0x3e7d66){return _0x30c5(_0x3e7d66- -0x2c6,_0x5b5439);}return this[_0x50b918(-0x6b,-0xc7)][_0x50b918(-0x132,-0x164)]['push']({'column':_0x5c8583,'operator':'lte','value':_0x5c35f0}),this;}[_0x684fad(0x560,0x516)](_0x33ee2c,_0x34399f){this[_0x59697e(0x15e,0x18d)][_0x59697e(0xc1,0x110)][_0x59697e(0x144,0x185)]({'column':_0x33ee2c,'operator':_0x59697e(0x193,0x18d),'value':_0x34399f});function _0x59697e(_0x2d3951,_0x1b635a){return _0x30c5(_0x2d3951- -0xa1,_0x1b635a);}return this;}[_0x684fad(0x505,0x49c)](_0x12d3a8,_0x20ca8c){this[_0xed491a(0x5e8,0x570)][_0xed491a(0x46d,0x4d3)]['push']({'column':_0x12d3a8,'operator':'ilike','value':_0x20ca8c});function _0xed491a(_0x7c5f5e,_0x1941e9){return _0x30c5(_0x1941e9-0x371,_0x7c5f5e);}return this;}['is'](_0x4505f8,_0x1e1ab8){function _0x21463a(_0x44dca2,_0x471e2c){return _0x30c5(_0x471e2c- -0x1c1,_0x44dca2);}return this['query'][_0x21463a(-0x40,-0x5f)]['push']({'column':_0x4505f8,'operator':'is','value':_0x1e1ab8}),this;}['in'](_0x4b5b9c,_0x42bd49){function _0x3312c3(_0x4b76e8,_0x1f0204){return _0x30c5(_0x4b76e8- -0xb3,_0x1f0204);}return this['query'][_0x3312c3(0xaf,0x12a)][_0x3312c3(0x132,0xb8)]({'column':_0x4b5b9c,'operator':'in','value':_0x42bd49}),this;}['contains'](_0x394782,_0x38aa33){function _0x2374c1(_0x9ff409,_0x3cf4c4){return _0x30c5(_0x9ff409-0xda,_0x3cf4c4);}return this[_0x2374c1(0x2d9,0x253)][_0x2374c1(0x23c,0x241)]['push']({'column':_0x394782,'operator':_0x2374c1(0x2bc,0x245),'value':_0x38aa33}),this;}[_0x684fad(0x4a9,0x42a)](_0x1d8a1e){function _0x51bb59(_0x5b2e5a,_0x5adec9){return _0x30c5(_0x5adec9- -0xc7,_0x5b2e5a);}return Object[_0x51bb59(0x108,0xf3)](_0x1d8a1e)[_0x51bb59(0x128,0x10a)](([_0x5acdf6,_0x4e9a57])=>{this['eq'](_0x5acdf6,_0x4e9a57);}),this;}[_0x684fad(0x568,0x4ea)](_0x1be3c6,_0x5afe30){function _0xfce785(_0x51b5be,_0x1d9bcf){return _0x30c5(_0x51b5be-0xb3,_0x1d9bcf);}return!this['query'][_0xfce785(0x2ef,0x357)]&&(this[_0xfce785(0x2b2,0x2cc)][_0xfce785(0x2ef,0x2b9)]=[]),this[_0xfce785(0x2b2,0x2fd)]['order'][_0xfce785(0x298,0x2fb)]({'column':_0x1be3c6,'ascending':_0x5afe30?.['ascending']!==![]}),this;}[_0x684fad(0x52d,0x5b3)](count){function _0x5a92cd(_0xe1ec22,_0x5b2c9f){return _0x30c5(_0x5b2c9f- -0xc1,_0xe1ec22);}return this[_0x5a92cd(0x1a4,0x13e)]['limit']=count,this;}[_0x684fad(0x495,0x50f)](from,_0x339d6b){this[_0x5f0023(0x562,0x58a)]['range']={'from':from,'to':_0x339d6b};function _0x5f0023(_0x450ce3,_0x5aeb36){return _0x30c5(_0x5aeb36-0x38b,_0x450ce3);}return this;}async[_0x684fad(0x507,0x4dd)](){function _0x56f846(_0x13a576,_0x4c08c5){return _0x30c5(_0x4c08c5-0x6e,_0x13a576);}if(this[_0x56f846(0x1f2,0x26d)]['updateData'])return this['executeQuery']('PATCH','/sdk/v1/'+this[_0x56f846(0x2d7,0x286)],{'data':this['query'][_0x56f846(0x19d,0x1f5)],'options':this[_0x56f846(0x2cd,0x26d)][_0x56f846(0x23c,0x1dd)],'filters':this[_0x56f846(0x24f,0x26d)][_0x56f846(0x151,0x1d0)]});else return this['query']['isDelete']?this['executeQuery']('DELETE',_0x56f846(0x1e6,0x1d5)+this[_0x56f846(0x264,0x286)]+'?operation=delete',{'options':this['query']['deleteOptions'],'filters':this['query']['filters']}):this['executeQuery']('GET',_0x56f846(0x20d,0x1d5)+this[_0x56f846(0x257,0x286)]+'?operation=select',{'select':this['query'][_0x56f846(0x2f2,0x272)],'filters':this[_0x56f846(0x1f1,0x26d)][_0x56f846(0x14a,0x1d0)],'order':this[_0x56f846(0x23c,0x26d)]['order'],'limit':this[_0x56f846(0x2d1,0x26d)][_0x56f846(0x1f8,0x26f)],'range':this[_0x56f846(0x233,0x26d)]['range']});}async['single'](){this['limit'](0x1);function _0x4447b2(_0x14c462,_0x4395a3){return _0x30c5(_0x4395a3-0x28e,_0x14c462);}const result=await this[_0x4447b2(0x415,0x469)]();return{'data':result['data']?.[0x0]||null,'error':result['error']};}async['executeQuery'](_0x4b03fe,_0xa4aff9,_0x1591a4){function _0x3f558b(_0x2a52c4,_0x3a3e44){return _0x30c5(_0x3a3e44- -0x25e,_0x2a52c4);}try{let response;const headers={};this['workspaceId']&&(headers['x-workspace-id']=this['workspaceId']);if(_0x4b03fe==='GET'){const _0xff3063=_0xa4aff9['split']('?'),_0x132de1=_0xff3063[0x0],existingParams=new URLSearchParams(_0xff3063[0x1]||'');if(_0x1591a4[_0x3f558b(-0x66,-0x5a)])existingParams['append']('select',_0x1591a4['select']);_0x1591a4['filters']?.['length']&&_0x1591a4[_0x3f558b(-0xbf,-0xfc)]['forEach'](filter=>{function _0x37e697(_0x2be5a6,_0x251218){return _0x30c5(_0x2be5a6-0xdf,_0x251218);}existingParams['append'](filter['column'],filter['operator']+'.'+filter[_0x37e697(0x2ce,0x2b8)]);});if(_0x1591a4[_0x3f558b(0x3c,-0x22)]?.[_0x3f558b(-0x77,-0x4d)]){const orderStr=_0x1591a4['order']['map'](_0x264bbf=>''+_0x264bbf[_0x3f558b(-0x140,-0xe5)]+(_0x264bbf['ascending']?_0x3f558b(-0x4e,-0x56):_0x3f558b(-0x63,-0x28)))[_0x3f558b(-0xa5,-0x1e)](',');existingParams['append']('order',orderStr);}if(_0x1591a4[_0x3f558b(-0x58,-0x5d)])existingParams[_0x3f558b(-0x21,-0x9e)](_0x3f558b(0x0,-0x5d),_0x1591a4[_0x3f558b(-0xb,-0x5d)]['toString']());_0x1591a4['range']&&(existingParams['append']('offset',_0x1591a4['range']['from'][_0x3f558b(-0xd9,-0xb0)]()),existingParams[_0x3f558b(-0xe5,-0x9e)](_0x3f558b(-0xc1,-0x5d),(_0x1591a4['range']['to']-_0x1591a4[_0x3f558b(-0x7f,-0xf5)][_0x3f558b(-0x13a,-0xc4)]+0x1)[_0x3f558b(-0x10b,-0xb0)]())),response=await this[_0x3f558b(-0x76,-0xb1)][_0x3f558b(-0x5b,-0x16)](_0x132de1+'?'+existingParams['toString'](),{'headers':headers});}else{if(_0x4b03fe==='DELETE'){const _0x5ce6e2=_0xa4aff9[_0x3f558b(-0x67,-0xa9)]('?'),_0x179a9a=_0x5ce6e2[0x0],existingParams=new URLSearchParams(_0x5ce6e2[0x1]||'');!existingParams[_0x3f558b(-0xf2,-0x9a)]('operation')&&existingParams['append'](_0x3f558b(-0x6e,-0x34),'delete');_0x1591a4['filters']?.['length']&&_0x1591a4['filters'][_0x3f558b(-0x1a,-0x8d)](filter=>{function _0x451264(_0x141af2,_0x1b86f2){return _0x30c5(_0x1b86f2- -0x306,_0x141af2);}existingParams[_0x451264(-0x190,-0x146)](filter['column'],filter[_0x451264(-0x144,-0xde)]+'.'+filter[_0x451264(-0xe1,-0x117)]);});const deleteUrl=_0x179a9a+'?'+existingParams['toString']();console['log']('\uD83D\uDD27 DELETE URL construída:',deleteUrl),console['log']('\uD83D\uDD27 DELETE headers:',headers),console[_0x3f558b(-0xf8,-0xfa)]('\uD83D\uDD27 DELETE filtros originais:',_0x1591a4['filters']),response=await this['httpClient']['delete'](deleteUrl,{'headers':headers});}else{if(_0x4b03fe==='PATCH'){const _0x75d956=_0xa4aff9['split']('?'),_0x24f4f5=_0x75d956[0x0],existingParams=new URLSearchParams(_0x75d956[0x1]||'');!existingParams[_0x3f558b(-0x1e,-0x9a)](_0x3f558b(-0x39,-0x34))&&existingParams[_0x3f558b(-0x16,-0x9e)](_0x3f558b(-0x9c,-0x34),'update');_0x1591a4[_0x3f558b(-0x11e,-0xfc)]?.['length']&&_0x1591a4['filters']['forEach'](filter=>{function _0x3b8e6c(_0x3027a7,_0x1579a7){return _0x30c5(_0x1579a7- -0x134,_0x3027a7);}existingParams[_0x3b8e6c(0xa,0x8c)](filter['column'],filter['operator']+'.'+filter['value']);});_0x1591a4['options']?.['prefer']&&(headers['Prefer']=_0x1591a4['options']['prefer']);const updateUrl=_0x24f4f5+'?'+existingParams['toString']();response=await this['httpClient'][_0x3f558b(-0x144,-0xc6)](updateUrl,_0x1591a4[_0x3f558b(-0xe0,-0xae)],{'headers':headers});}else{let _0x28a867=_0x1591a4[_0x3f558b(-0xb6,-0xae)];!headers['Prefer']&&(headers['Prefer']=_0x3f558b(-0x34,-0x2d)),_0x1591a4['options']?.['upsert']&&(headers['Prefer']='resolution=merge-duplicates,return=representation'),_0x1591a4['dataArray']&&(_0x28a867=_0x1591a4[_0x3f558b(-0x51,-0x15)]),response=await this[_0x3f558b(-0x78,-0xb1)][_0x3f558b(-0x139,-0xf3)](_0xa4aff9,_0x28a867,{'headers':headers});}}}return{'data':response['data'],'error':null,'count':response[_0x3f558b(-0x7b,-0x71)]?.[_0x3f558b(-0x61,-0x62)]?parseInt(response[_0x3f558b(-0x50,-0x71)]['x-total-count']):undefined};}catch(_0x36e816){return{'data':null,'error':_0x36e816 instanceof EBaaSError?_0x36e816:new EBaaSError(_0x36e816 instanceof Error?_0x36e816['message']:_0x3f558b(-0x19,-0x8a),0x0,_0x36e816)};}}}class CustomDatabaseManager{constructor(_0x56724d,_0x3ee3eb){this[_0x5ddab5(0x9b,0x63)]=_0x56724d;function _0x5ddab5(_0x111dcb,_0x3566e4){return _0x30c5(_0x3566e4- -0x14a,_0x111dcb);}this['workspaceId']=_0x3ee3eb;}async[_0x684fad(0x4fe,0x4bf)](){if(!this['workspaceId'])return{'hasCustomDatabase':![]};try{const response=await this['httpClient'][_0x37f313(0x555,0x521)]('/admin/v1/workspace/custom-database',{'headers':{'x-workspace-id':this[_0x37f313(0x496,0x474)]}});if(response['status']===0xc8&&response[_0x37f313(0x4bd,0x479)]?.[_0x37f313(0x499,0x471)]){const config=response[_0x37f313(0x4bd,0x448)]['config'],_0x845471={'host':config[_0x37f313(0x520,0x57f)],'port':config['postgresPort'],'database':config[_0x37f313(0x4b0,0x4ab)],'username':config['postgresUsername'],'password':'','schema':config['postgresSchema'],'sslEnabled':config['sslEnabled']};return this['detectedConfig']={'hasCustomDatabase':!![],'config':config,'credentials':_0x845471},this[_0x37f313(0x530,0x4f5)];}}catch(_0x31d94e){if(_0x31d94e?.[_0x37f313(0x522,0x4bd)]===0x194)return this[_0x37f313(0x530,0x5b1)]={'hasCustomDatabase':![]},this['detectedConfig'];console['warn']('Failed to detect custom database configuration:',_0x31d94e);}this[_0x37f313(0x530,0x4df)]={'hasCustomDatabase':![]};function _0x37f313(_0x176848,_0x8a9b12){return _0x30c5(_0x176848-0x30d,_0x8a9b12);}return this[_0x37f313(0x530,0x53f)];}async['testConnection'](_0x551881){try{const response=await this['httpClient']['post']('/admin/v1/workspace/custom-database/test-connection',_0x551881,{'headers':this['workspaceId']?{'X-Workspace-ID':this['workspaceId']}:{}});return response['data'];}catch(_0x45edc4){return{'success':![],'message':_0x45edc4?.['message']||'Failed\x20to\x20test\x20connection'};}}async['configureCustomDatabase'](_0x467196){if(!this[_0x130298(0x191,0x1a7)])throw new Error('Workspace ID is required to configure custom database');const response=await this['httpClient'][_0x130298(0x173,0xf5)]('/admin/v1/workspace/custom-database',{'workspaceId':this['workspaceId'],..._0x467196},{'headers':{'X-Workspace-ID':this['workspaceId']}}),config=response[_0x130298(0x1b8,0x14e)][_0x130298(0x194,0x1ca)];this['detectedConfig']={'hasCustomDatabase':!![],'config':config,'credentials':_0x467196};function _0x130298(_0x3827a4,_0x1048a8){return _0x30c5(_0x3827a4-0x8,_0x1048a8);}return config;}async[_0x684fad(0x48f,0x49d)](){if(!this['workspaceId'])throw new Error('Workspace ID is required to remove custom database');function _0x5404e5(_0xb17610,_0x4dfe68){return _0x30c5(_0x4dfe68-0xc5,_0xb17610);}await this[_0x5404e5(0x23f,0x272)]['delete']('/admin/v1/workspace/custom-database',{'headers':{'X-Workspace-ID':this['workspaceId']}}),this['detectedConfig']={'hasCustomDatabase':![]};}['getDetectedConfig'](){function _0x566aa2(_0x540e76,_0x46bf21){return _0x30c5(_0x540e76- -0x2a,_0x46bf21);}return this[_0x566aa2(0x1f9,0x1d2)];}['hasCustomDatabase'](){return this['detectedConfig']?.['hasCustomDatabase']??![];}[_0x684fad(0x4b0,0x4b4)](){return this['detectedConfig']?.['credentials'];}['setWorkspaceId'](_0x3e149d){function _0x122cae(_0x32b9f3,_0x2ff81c){return _0x30c5(_0x32b9f3- -0x15c,_0x2ff81c);}this['workspaceId']=_0x3e149d,this[_0x122cae(0xc7,0x68)]=undefined;}[_0x684fad(0x48c,0x4d8)](){function _0xbc62ee(_0x4dc3c4,_0x391bfd){return _0x30c5(_0x4dc3c4-0x348,_0x391bfd);}return this[_0xbc62ee(0x4d1,0x503)];}['getStatus'](){function _0x409864(_0x50e5e5,_0x4048cf){return _0x30c5(_0x4048cf- -0xec,_0x50e5e5);}return{'workspaceId':this['workspaceId'],'hasConfig':this[_0x409864(0x1f,0x97)](),'configDetails':this[_0x409864(0x156,0x137)]?.[_0x409864(0x1c1,0x13f)]?{'host':this[_0x409864(0xf1,0x137)]['credentials']['host'],'port':this[_0x409864(0x14d,0x137)][_0x409864(0x107,0x13f)]['port'],'database':this[_0x409864(0x13d,0x137)][_0x409864(0x17a,0x13f)][_0x409864(0x87,0xde)],'schema':this[_0x409864(0x180,0x137)]['credentials'][_0x409864(0xd2,0x87)]||_0x409864(0x37,0x80),'sslEnabled':this[_0x409864(0x1a4,0x137)][_0x409864(0x12b,0x13f)][_0x409864(0xe4,0xa6)]||![]}:undefined};}}class DatabaseClient{constructor(_0x114ac7,_0x1237da){this[_0x37a8cc(-0x1df,-0x264)]=_0x114ac7;function _0x37a8cc(_0x5315ed,_0x1e4e8d){return _0x30c5(_0x5315ed- -0x38c,_0x1e4e8d);}this[_0x37a8cc(-0x148,-0x14c)]=new CustomDatabaseManager(_0x114ac7,_0x1237da);}[_0x684fad(0x4c6,0x51b)](_0x266071){function _0x389505(_0x2d02bb,_0x1966a4){return _0x30c5(_0x2d02bb- -0x195,_0x1966a4);}return new QueryBuilder(this[_0x389505(0x18,0x80)],_0x266071,this['currentSchema'],this['customDatabaseManager'][_0x389505(-0x35,0x53)]());}['rpc'](_0x21e2a7,_0x56ea1c){function _0x1fb885(_0x220798,_0x49e816){return _0x30c5(_0x220798-0x40,_0x49e816);}return this[_0x1fb885(0x1ed,0x25b)]['post'](_0x1fb885(0x23d,0x232)+_0x21e2a7,_0x56ea1c);}[_0x684fad(0x49f,0x485)](_0xf40fd5){const _0xa64e9d=new DatabaseClient(this['httpClient'],this['customDatabaseManager']['getWorkspaceId']());function _0x180fee(_0x4ca35e,_0x195217){return _0x30c5(_0x4ca35e- -0x10,_0x195217);}return _0xa64e9d[_0x180fee(0x184,0x1b8)]=_0xf40fd5,_0xa64e9d[_0x180fee(0x234,0x1ca)]=this[_0x180fee(0x234,0x287)],_0xa64e9d;}async['detectCustomDatabase'](){return this['customDatabaseManager']['detectCustomDatabase']();}async['testCustomConnection'](_0x312c4f){function _0x138930(_0x5cb105,_0x57bbd9){return _0x30c5(_0x5cb105- -0x8,_0x57bbd9);}return this[_0x138930(0x23c,0x225)][_0x138930(0x24d,0x201)](_0x312c4f);}async[_0x684fad(0x548,0x4eb)](_0x461a3a){function _0x376118(_0xd9c829,_0x56d781){return _0x30c5(_0xd9c829- -0xb2,_0x56d781);}return this[_0x376118(0x192,0x16d)]['configureCustomDatabase'](_0x461a3a);}async['removeCustomDatabase'](){return this['customDatabaseManager']['removeCustomDatabase']();}[_0x684fad(0x594,0x603)](){function _0x5c45cf(_0x1235f8,_0x104600){return _0x30c5(_0x104600- -0x10b,_0x1235f8);}return this['customDatabaseManager'][_0x5c45cf(0xbf,0x78)]();}['getCustomDatabaseStatus'](){function _0x7a7a52(_0x41be6a,_0x13b295){return _0x30c5(_0x13b295- -0x2a6,_0x41be6a);}return this['customDatabaseManager'][_0x7a7a52(-0x163,-0xde)]();}['setWorkspaceId'](_0x4bf979){function _0x14d6c3(_0xceb578,_0x4499b1){return _0x30c5(_0xceb578-0x3e2,_0x4499b1);}this['customDatabaseManager'][_0x14d6c3(0x5c0,0x598)](_0x4bf979);}async['initialize'](){try{await this['customDatabaseManager']['detectCustomDatabase']();}catch(_0x3fa6ae){console['warn']('Failed to initialize custom database detection:',_0x3fa6ae);}}}function _0x684fad(_0x75299c,_0x4d824c){return _0x30c5(_0x75299c-0x32c,_0x4d824c);}class StorageBucket{constructor(_0x899482,bucketId){function _0x359f8a(_0x52b651,_0x32421a){return _0x30c5(_0x32421a- -0x8b,_0x52b651);}this[_0x359f8a(0xfd,0x122)]=_0x899482,this['bucketId']=bucketId;}async['upload'](_0x3c5613,_0x35de88,_0x26cadd){function _0x2c6981(_0x362d90,_0x2693ad){return _0x30c5(_0x2693ad- -0x1c3,_0x362d90);}try{const _0x4281ab=new FormData();if(_0x35de88 instanceof File)_0x4281ab['append']('file',_0x35de88);else{if(_0x35de88 instanceof Blob)_0x4281ab[_0x2c6981(-0x1f,-0x3)]('file',_0x35de88,_0x3c5613);else{if(_0x35de88 instanceof ArrayBuffer)_0x4281ab['append'](_0x2c6981(-0x56,-0x12),new Blob([_0x35de88]),_0x3c5613);else typeof _0x35de88==='string'&&_0x4281ab['append']('file',new Blob([_0x35de88],{'type':_0x2c6981(0xf7,0x80)}),_0x3c5613);}}_0x4281ab['append']('path',_0x3c5613);_0x26cadd?.['cacheControl']&&_0x4281ab[_0x2c6981(-0x63,-0x3)]('cacheControl',_0x26cadd[_0x2c6981(-0x16,0x63)]);_0x26cadd?.[_0x2c6981(-0x6f,0x6)]&&_0x4281ab['append'](_0x2c6981(0x89,0x6),_0x26cadd['contentType']);_0x26cadd?.['metadata']&&_0x4281ab['append'](_0x2c6981(0x85,0x44),JSON['stringify'](_0x26cadd['metadata']));const _0x35786c='/storage/buckets/'+this[_0x2c6981(0x8,0x2b)]+'/files'+(_0x26cadd?.['upsert']?'?upsert=true':''),response=await this[_0x2c6981(0x5e,-0x16)]['post'](_0x35786c,_0x4281ab,{'headers':{'Content-Type':_0x2c6981(0x6a,0x4f)}});return{'data':response['data'],'error':null};}catch(_0xcd4e27){return{'data':null,'error':_0xcd4e27 instanceof EBaaSError?_0xcd4e27:new EBaaSError(_0xcd4e27 instanceof Error?_0xcd4e27[_0x2c6981(0x71,0x47)]:_0x2c6981(0x54,0xa9),0x0,_0xcd4e27)};}}async[_0x684fad(0x527,0x589)](_0x21b82f,_0x30c244){function _0x3cd4e5(_0x1668b9,_0x4745cd){return _0x30c5(_0x4745cd- -0x158,_0x1668b9);}try{const _0x2da49b=new URLSearchParams();_0x30c244?.['transform']&&Object['entries'](_0x30c244[_0x3cd4e5(-0x21,0x35)])['forEach'](([_0x174aa2,_0x5392e1])=>{function _0x1b6aae(_0x571332,_0x4497c1){return _0x30c5(_0x4497c1- -0x7a,_0x571332);}_0x5392e1!==undefined&&_0x2da49b[_0x1b6aae(0xc8,0x146)](_0x174aa2,String(_0x5392e1));});const _0x5a470f='/storage/buckets/'+this['bucketId']+_0x3cd4e5(0xbb,0x65)+_0x21b82f+(_0x2da49b[_0x3cd4e5(-0x20,0x56)]()?'?'+_0x2da49b['toString']():''),response=await this[_0x3cd4e5(0xc6,0x55)]['get'](_0x5a470f,{'responseType':_0x3cd4e5(0x139,0x10f)});return{'data':response['data'],'error':null};}catch(_0x4119ad){return{'data':null,'error':_0x4119ad instanceof EBaaSError?_0x4119ad:new EBaaSError(_0x4119ad instanceof Error?_0x4119ad[_0x3cd4e5(0x93,0xb2)]:_0x3cd4e5(0xcc,0x5b),0x0,_0x4119ad)};}}async['list'](_0x381016,_0x23eac5){function _0x7ee452(_0x2f6d7f,_0x13acb3){return _0x30c5(_0x13acb3- -0x336,_0x2f6d7f);}try{const _0x1b6c14=new URLSearchParams();_0x381016&&_0x1b6c14['append'](_0x7ee452(-0x19f,-0x11d),_0x381016);_0x23eac5?.[_0x7ee452(-0x1a0,-0x135)]&&_0x1b6c14[_0x7ee452(-0x111,-0x176)]('limit',String(_0x23eac5['limit']));_0x23eac5?.['offset']&&_0x1b6c14['append'](_0x7ee452(-0xd2,-0x14a),String(_0x23eac5[_0x7ee452(-0x1ca,-0x14a)]));_0x23eac5?.[_0x7ee452(-0xfc,-0xd3)]&&_0x1b6c14['append']('sortBy',JSON[_0x7ee452(-0xc6,-0xe2)](_0x23eac5[_0x7ee452(-0xb2,-0xd3)]));_0x23eac5?.['search']&&_0x1b6c14['append']('search',_0x23eac5['search']);const _0xb630a7=_0x7ee452(-0x168,-0x12d)+this['bucketId']+_0x7ee452(-0x14e,-0x10d)+(_0x1b6c14[_0x7ee452(-0x120,-0x188)]()?'?'+_0x1b6c14[_0x7ee452(-0x1b3,-0x188)]():''),response=await this[_0x7ee452(-0x1cd,-0x189)][_0x7ee452(-0xde,-0xee)](_0xb630a7);return{'data':response['data'],'error':null};}catch(_0x3c3fa7){return{'data':null,'error':_0x3c3fa7 instanceof EBaaSError?_0x3c3fa7:new EBaaSError(_0x3c3fa7 instanceof Error?_0x3c3fa7[_0x7ee452(-0x11e,-0x12c)]:'Failed\x20to\x20list\x20files',0x0,_0x3c3fa7)};}}async['remove'](_0x18ff70){function _0xf94f4d(_0x34906a,_0x538100){return _0x30c5(_0x538100- -0x1a7,_0x34906a);}try{const response=await this[_0xf94f4d(-0x21,0x6)]['delete']('/storage/buckets/'+this[_0xf94f4d(0x49,0x47)]+'/files',{'data':{'paths':_0x18ff70}});return{'data':response['data'],'error':null};}catch(_0x499c67){return{'data':null,'error':_0x499c67 instanceof EBaaSError?_0x499c67:new EBaaSError(_0x499c67 instanceof Error?_0x499c67['message']:_0xf94f4d(0x12b,0xa4),0x0,_0x499c67)};}}async[_0x684fad(0x54c,0x5ca)](fromPath,_0x534abc){function _0x2bcb8d(_0x435062,_0x17f6dd){return _0x30c5(_0x435062- -0xf3,_0x17f6dd);}try{const response=await this[_0x2bcb8d(0xba,0x12a)][_0x2bcb8d(0x78,0xd)](_0x2bcb8d(0x116,0xb6)+this[_0x2bcb8d(0xfb,0xb5)]+'/files/move',{'sourceKey':fromPath,'destinationKey':_0x534abc});return{'data':response['data'],'error':null};}catch(_0x591885){return{'data':null,'error':_0x591885 instanceof EBaaSError?_0x591885:new EBaaSError(_0x591885 instanceof Error?_0x591885['message']:_0x2bcb8d(0x128,0x18a),0x0,_0x591885)};}}async['copy'](fromPath,_0x24a1f7){function _0x52dc6f(_0x1e37a4,_0x52bffb){return _0x30c5(_0x1e37a4-0x36e,_0x52bffb);}try{const response=await this['httpClient']['post'](_0x52dc6f(0x577,0x50e)+this['bucketId']+_0x52dc6f(0x533,0x576),{'sourceKey':fromPath,'destinationKey':_0x24a1f7});return{'data':response['data'],'error':null};}catch(_0x295224){return{'data':null,'error':_0x295224 instanceof EBaaSError?_0x295224:new EBaaSError(_0x295224 instanceof Error?_0x295224[_0x52dc6f(0x578,0x5ee)]:'Failed\x20to\x20copy\x20file',0x0,_0x295224)};}}async[_0x684fad(0x57e,0x576)](_0x362bc7,_0x23cd3f,_0x4efd1d){function _0x37b72e(_0x497572,_0x30ab10){return _0x30c5(_0x497572-0x1a9,_0x30ab10);}try{const response=await this['httpClient'][_0x37b72e(0x314,0x36f)]('/storage/buckets/'+this[_0x37b72e(0x397,0x329)]+'/files/'+_0x362bc7+_0x37b72e(0x3d5,0x377),{'expiresIn':_0x23cd3f,..._0x4efd1d});return{'data':response['data'],'error':null};}catch(_0x192908){return{'data':null,'error':_0x192908 instanceof EBaaSError?_0x192908:new EBaaSError(_0x192908 instanceof Error?_0x192908[_0x37b72e(0x3b3,0x3bc)]:_0x37b72e(0x402,0x46d),0x0,_0x192908)};}}['getPublicUrl'](_0x59e159,_0x1b9812){function _0x226c57(_0x339a0d,_0x4d4b8a){return _0x30c5(_0x339a0d- -0xc5,_0x4d4b8a);}const _0x39fc1d=new URLSearchParams();_0x1b9812?.['transform']&&Object[_0x226c57(0xf5,0x12b)](_0x1b9812['transform'])[_0x226c57(0x10c,0x155)](([_0x5e94ad,_0x1dffb8])=>{_0x1dffb8!==undefined&&_0x39fc1d['append'](_0x5e94ad,String(_0x1dffb8));});const _0x553033=this[_0x226c57(0xe8,0xa6)][_0x226c57(0x135,0x155)]||'',_0x419bc6=_0x553033+_0x226c57(0x144,0x145)+this[_0x226c57(0x129,0x1a8)]+'/files/'+_0x59e159+(_0x39fc1d[_0x226c57(0xe9,0x94)]()?'?'+_0x39fc1d[_0x226c57(0xe9,0x153)]():'');return{'data':{'publicUrl':_0x419bc6}};}async['getFileInfo'](_0x4e4391){function _0x35dac3(_0x5f1eed,_0x32c378){return _0x30c5(_0x5f1eed-0x3b4,_0x32c378);}try{const response=await this['httpClient']['get'](_0x35dac3(0x5bd,0x62c)+this[_0x35dac3(0x5a2,0x595)]+_0x35dac3(0x571,0x518)+_0x4e4391+'/info');return{'data':response[_0x35dac3(0x564,0x58a)],'error':null};}catch(_0x43bd0f){return{'data':null,'error':_0x43bd0f instanceof EBaaSError?_0x43bd0f:new EBaaSError(_0x43bd0f instanceof Error?_0x43bd0f['message']:_0x35dac3(0x55b,0x530),0x0,_0x43bd0f)};}}async[_0x684fad(0x494,0x45e)](_0x25cc4f,metadata){function _0x4f5dff(_0x575205,_0x4571a0){return _0x30c5(_0x575205- -0x25e,_0x4571a0);}try{const response=await this[_0x4f5dff(-0xb1,-0xc3)][_0x4f5dff(-0xaf,-0xab)](_0x4f5dff(-0x55,0xf)+this['bucketId']+'/files/'+_0x25cc4f+_0x4f5dff(-0xe2,-0x7e),{'metadata':metadata});return{'data':response['data'],'error':null};}catch(_0x51d2cb){return{'data':null,'error':_0x51d2cb instanceof EBaaSError?_0x51d2cb:new EBaaSError(_0x51d2cb instanceof Error?_0x51d2cb['message']:_0x4f5dff(-0x3c,-0x58),0x0,_0x51d2cb)};}}}class StorageClient{constructor(_0x139b86){function _0x316611(_0x3b1d93,_0x50fd21){return _0x30c5(_0x50fd21-0x24,_0x3b1d93);}this[_0x316611(0x1ac,0x1d1)]=_0x139b86;}[_0x684fad(0x4c6,0x52b)](bucketId){function _0x32a2b1(_0x52d6c8,_0x1e7d9f){return _0x30c5(_0x52d6c8- -0x30a,_0x1e7d9f);}return new StorageBucket(this[_0x32a2b1(-0x15d,-0x12d)],bucketId);}async[_0x684fad(0x53a,0x540)](_0x1d9f36,_0x4343f0){function _0x10d61a(_0x4b23bb,_0x269042){return _0x30c5(_0x269042- -0x1dc,_0x4b23bb);}try{const response=await this[_0x10d61a(-0xb6,-0x2f)]['post']('/storage/buckets',{'id':_0x1d9f36,..._0x4343f0});return{'data':response['data'],'error':null};}catch(_0x5555f3){return{'data':null,'error':_0x5555f3 instanceof EBaaSError?_0x5555f3:new EBaaSError(_0x5555f3 instanceof Error?_0x5555f3['message']:_0x10d61a(-0x56,-0x4b),0x0,_0x5555f3)};}}async['getBucket'](_0x4201a1){function _0x532386(_0x40d927,_0x2c83e8){return _0x30c5(_0x40d927- -0x2d2,_0x2c83e8);}try{const response=await this[_0x532386(-0x125,-0x114)][_0x532386(-0x8a,-0x77)]('/storage/buckets/'+_0x4201a1);return{'data':response['data'],'error':null};}catch(_0x242572){return{'data':null,'error':_0x242572 instanceof EBaaSError?_0x242572:new EBaaSError(_0x242572 instanceof Error?_0x242572[_0x532386(-0xc8,-0xb6)]:'Failed\x20to\x20get\x20bucket',0x0,_0x242572)};}}async[_0x684fad(0x513,0x49a)](){function _0x203bbc(_0x5787b6,_0x485aee){return _0x30c5(_0x485aee-0x23c,_0x5787b6);}try{const response=await this[_0x203bbc(0x453,0x3e9)]['get']('/storage/buckets');return{'data':response[_0x203bbc(0x3b2,0x3ec)],'error':null};}catch(_0x4e9b9d){return{'data':null,'error':_0x4e9b9d instanceof EBaaSError?_0x4e9b9d:new EBaaSError(_0x4e9b9d instanceof Error?_0x4e9b9d[_0x203bbc(0x432,0x446)]:_0x203bbc(0x49d,0x416),0x0,_0x4e9b9d)};}}async['updateBucket'](_0x1c9c0d,_0x32b4ae){function _0x1875c3(_0x5cc284,_0x4b2d65){return _0x30c5(_0x5cc284-0x1dc,_0x4b2d65);}try{const response=await this[_0x1875c3(0x389,0x3ae)]['put']('/storage/buckets/'+_0x1c9c0d,_0x32b4ae);return{'data':response['data'],'error':null};}catch(_0x567f28){return{'data':null,'error':_0x567f28 instanceof EBaaSError?_0x567f28:new EBaaSError(_0x567f28 instanceof Error?_0x567f28[_0x1875c3(0x3e6,0x3a1)]:_0x1875c3(0x3aa,0x35b),0x0,_0x567f28)};}}async['deleteBucket'](_0x5882f1){function _0x3e42f7(_0x41959c,_0x25fdd0){return _0x30c5(_0x41959c- -0x16f,_0x25fdd0);}try{const response=await this[_0x3e42f7(0x3e,0xa7)]['delete']('/storage/buckets/'+_0x5882f1);return{'data':response['data'],'error':null};}catch(_0x1ed502){return{'data':null,'error':_0x1ed502 instanceof EBaaSError?_0x1ed502:new EBaaSError(_0x1ed502 instanceof Error?_0x1ed502[_0x3e42f7(0x9b,0xb2)]:_0x3e42f7(0x45,0xaa),0x0,_0x1ed502)};}}async['getUsage'](){try{const response=await this['httpClient']['get']('/storage/usage');return{'data':response['data'],'error':null};}catch(_0xcae998){return{'data':null,'error':_0xcae998 instanceof EBaaSError?_0xcae998:new EBaaSError(_0xcae998 instanceof Error?_0xcae998['message']:'Failed\x20to\x20get\x20storage\x20usage',0x0,_0xcae998)};}}}class EventManager{constructor(){function _0x2bfe90(_0x24f6d4,_0x37108d){return _0x30c5(_0x24f6d4- -0xf3,_0x37108d);}this[_0x2bfe90(0x169,0x1f1)]=new Map(),this['maxListeners']=0xa;}['on'](_0x2e0bae,_0x2e6fbc){!this['events']['has'](_0x2e0bae)&&this[_0x1c8cce(0x578,0x567)]['set'](_0x2e0bae,new Set());function _0x1c8cce(_0x12fc4c,_0x2308d8){return _0x30c5(_0x12fc4c-0x31c,_0x2308d8);}this['events']['get'](_0x2e0bae)['add'](_0x2e6fbc);}['off'](_0x3cd215,_0x2399d3){if(!this['events']['has'](_0x3cd215))return;function _0x31d09b(_0x24908e,_0x16b70c){return _0x30c5(_0x16b70c- -0xa0,_0x24908e);}const _0x5dd375=this['events'][_0x31d09b(0x211,0x1a8)](_0x3cd215);_0x2399d3?_0x5dd375[_0x31d09b(0x1ba,0x190)](_0x2399d3):_0x5dd375['clear'](),_0x5dd375[_0x31d09b(0x128,0x195)]===0x0&&this['events'][_0x31d09b(0x12f,0x190)](_0x3cd215);}['emit'](_0x39d9e4,..._0xc27fd3){if(!this[_0x2a7115(0xba,0xcf)]['has'](_0x39d9e4))return![];function _0x2a7115(_0x1f86b9,_0x50dccb){return _0x30c5(_0x1f86b9- -0x1a2,_0x50dccb);}const _0x444772=this['events']['get'](_0x39d9e4);for(const _0xb28fcd of _0x444772){try{_0xb28fcd(..._0xc27fd3);}catch(_0x4a58b3){console['error'](_0x2a7115(0xa,0x66)+_0x39d9e4+'\x22:',_0x4a58b3);}}return _0x444772[_0x2a7115(0x93,0x4c)]>0x0;}['removeAllListeners'](_0x174de7){function _0x2b3768(_0xae50a6,_0xb9cfa0){return _0x30c5(_0xae50a6-0x38f,_0xb9cfa0);}_0x174de7?this['events'][_0x2b3768(0x5bf,0x572)](_0x174de7):this['events']['clear']();}['listenerCount'](_0x52d382){function _0x5922c1(_0x3e2528,_0x466656){return _0x30c5(_0x3e2528-0x272,_0x466656);}return this['events'][_0x5922c1(0x4ba,0x4ad)](_0x52d382)?.['size']??0x0;}['eventNames'](){function _0x186aa3(_0x177ce1,_0x429765){return _0x30c5(_0x177ce1-0x103,_0x429765);}return Array[_0x186aa3(0x29d,0x276)](this['events']['keys']());}[_0x684fad(0x512,0x498)](_0x2a53cc){function _0x229d45(_0x229b83,_0x555f8a){return _0x30c5(_0x229b83-0x9e,_0x555f8a);}return Array[_0x229d45(0x238,0x284)](this[_0x229d45(0x2fa,0x2a2)]['get'](_0x2a53cc)??[]);}['addListener'](_0x4dae67,_0x3abf53){this['on'](_0x4dae67,_0x3abf53);}['removeListener'](_0x645e99,_0x394ad7){this['off'](_0x645e99,_0x394ad7);}[_0x684fad(0x504,0x48a)](_0x17be6e,_0x14b231){const _0x93878e=(..._0x153bb5)=>{function _0x45f239(_0x3cce78,_0x47dd10){return _0x30c5(_0x3cce78- -0x1e2,_0x47dd10);}this[_0x45f239(-0x24,-0x4d)](_0x17be6e,_0x93878e),_0x14b231(..._0x153bb5);};this['on'](_0x17be6e,_0x93878e);}[_0x684fad(0x52c,0x4ab)](_0x4de672,_0x13188a){this['on'](_0x4de672,_0x13188a);}['prependOnceListener'](_0x588b2b,_0xf221fd){const _0x209be0=(..._0xaec049)=>{this['off'](_0x588b2b,_0x209be0),_0xf221fd(..._0xaec049);};this['on'](_0x588b2b,_0x209be0);}[_0x684fad(0x525,0x5ab)](_0x15640e){return this['maxListeners']=_0x15640e,this;}[_0x684fad(0x4bc,0x4c6)](){function _0x41f076(_0x40c632,_0xa6bd00){return _0x30c5(_0xa6bd00-0x38a,_0x40c632);}return this[_0x41f076(0x56a,0x509)];}['rawListeners'](_0x4675a4){function _0x4f6fb3(_0x36bdf0,_0x5712e6){return _0x30c5(_0x5712e6-0x18a,_0x36bdf0);}return this[_0x4f6fb3(0x34a,0x370)](_0x4675a4);}}class RealtimeChannel extends EventManager{constructor(_0x1952f7,_0x25e2d8){super();function _0x345c96(_0x3a018c,_0xfe0f62){return _0x30c5(_0xfe0f62-0x20b,_0x3a018c);}this[_0x345c96(0x42b,0x45a)]=![],this['state']='closed',this[_0x345c96(0x3e7,0x3ab)]=new Map(),this[_0x345c96(0x3ea,0x3ec)]=_0x1952f7,this[_0x345c96(0x407,0x399)]=_0x25e2d8;}['subscribe'](_0x30e4fd){!this[_0x1c0d6b(0x10f,0xe3)]&&(this[_0x1c0d6b(0xfd,0xe3)]=!![],this['_join']());function _0x1c0d6b(_0x22bd8c,_0x4759f0){return _0x30c5(_0x4759f0- -0x16c,_0x22bd8c);}return _0x30e4fd&&this['on']('status',_0x30e4fd),this;}[_0x684fad(0x591,0x533)](filter,_0x541f54){const _0x6769ad='postgres_changes:'+JSON['stringify'](filter);this['on'](_0x6769ad,_0x541f54);const _0x2035cb={'unsubscribe':()=>{function _0x432209(_0x38ff80,_0x114b47){return _0x30c5(_0x114b47-0xe6,_0x38ff80);}this[_0x432209(0x2d4,0x2a4)](_0x6769ad,_0x541f54),this[_0x432209(0x2b2,0x286)]['delete'](_0x6769ad);}};this[_0xd9210d(-0x23b,-0x1ff)][_0xd9210d(-0x27c,-0x26d)](_0x6769ad,_0x2035cb);function _0xd9210d(_0x4bf96c,_0x365999){return _0x30c5(_0x4bf96c- -0x3db,_0x365999);}return this['socket']?.['connected']&&this['state']===_0xd9210d(-0x26e,-0x1f6)&&this[_0xd9210d(-0x24d,-0x1f5)]['emit'](_0xd9210d(-0x244,-0x1f3),{'topic':this[_0xd9210d(-0x1fa,-0x260)],'filter':filter,'ref':this['makeRef']()}),_0x2035cb;}[_0x684fad(0x4b6,0x4cd)](filter,_0x5120c1){const _0x4b34da='broadcast:'+JSON[_0x357b46(0x46a,0x4c0)](filter);this['on'](_0x4b34da,_0x5120c1);function _0x357b46(_0x563aea,_0x3a5cd4){return _0x30c5(_0x563aea-0x216,_0x3a5cd4);}const _0x3495dd={'unsubscribe':()=>{this['off'](_0x4b34da,_0x5120c1),this['subscriptions']['delete'](_0x4b34da);}};return this[_0x357b46(0x3b6,0x3b4)]['set'](_0x4b34da,_0x3495dd),_0x3495dd;}[_0x684fad(0x599,0x5a8)](filter,_0x1e5956){const _0x522b03='presence:'+JSON['stringify'](filter);this['on'](_0x522b03,_0x1e5956);function _0x445406(_0x22ab82,_0x9b6606){return _0x30c5(_0x22ab82-0x1cf,_0x9b6606);}const _0x2b8fe6={'unsubscribe':()=>{this[_0x4a41a4(0xf7,0xad)](_0x522b03,_0x1e5956);function _0x4a41a4(_0xed1921,_0xf27306){return _0x30c5(_0xed1921- -0xc7,_0xf27306);}this[_0x4a41a4(0xd9,0x117)]['delete'](_0x522b03);}};return this['subscriptions'][_0x445406(0x32e,0x333)](_0x522b03,_0x2b8fe6),_0x2b8fe6;}['send'](_0x28be1c){return new Promise(_0x3382cf=>{function _0x8ea1a1(_0x1ad8fa,_0x4dd258){return _0x30c5(_0x4dd258- -0x2bf,_0x1ad8fa);}this['socket']?.['connected']&&this['state']===_0x8ea1a1(-0x11f,-0x152)?(this[_0x8ea1a1(-0x11b,-0x131)]['emit'](_0x8ea1a1(-0xb8,-0x139),{'topic':this['topic'],'event':_0x28be1c[_0x8ea1a1(-0x14,-0x8c)],'payload':_0x28be1c,'ref':this['makeRef']()}),_0x3382cf('ok')):_0x3382cf('error');});}[_0x684fad(0x57f,0x56f)](_0x47e8f9){return new Promise(_0x112aad=>{function _0x11b6b4(_0x506dcb,_0x277c76){return _0x30c5(_0x506dcb-0x21f,_0x277c76);}this[_0x11b6b4(0x3ad,0x3ce)]?.[_0x11b6b4(0x3f4,0x3aa)]&&this['state']===_0x11b6b4(0x38c,0x33d)?(this[_0x11b6b4(0x3ad,0x375)][_0x11b6b4(0x3fb,0x42a)]('presence',{'topic':this[_0x11b6b4(0x400,0x436)],'event':'track','payload':_0x47e8f9,'ref':this['makeRef']()}),_0x112aad('ok')):_0x112aad(_0x11b6b4(0x393,0x39a));});}['untrack'](){return new Promise(_0x59fac5=>{function _0x3b0902(_0x2dd050,_0x43527b){return _0x30c5(_0x43527b-0x84,_0x2dd050);}this['socket']?.[_0x3b0902(0x1ec,0x259)]&&this[_0x3b0902(0x1b1,0x1f5)]==='joined'?(this[_0x3b0902(0x223,0x212)]['emit'](_0x3b0902(0x1db,0x23c),{'topic':this['topic'],'event':_0x3b0902(0x2ee,0x2bf),'ref':this[_0x3b0902(0x299,0x267)]()}),_0x59fac5('ok')):_0x59fac5('error');});}['unsubscribe'](){return new Promise(_0x375bff=>{this[_0x4500c8(0x2c4,0x2a0)]='leaving',this['subscriptions'][_0x4500c8(0x2e9,0x300)](_0x4de785=>{function _0x1b28a8(_0x2dcf77,_0x47b89d){return _0x30c5(_0x2dcf77-0x240,_0x47b89d);}_0x4de785[_0x1b28a8(0x46f,0x4b0)]();}),this[_0x4500c8(0x345,0x2cf)][_0x4500c8(0x38f,0x38d)]();this['socket']?.[_0x4500c8(0x2f7,0x304)]&&this['socket'][_0x4500c8(0x35c,0x30b)](_0x4500c8(0x2a5,0x306),{'topic':this[_0x4500c8(0x304,0x310)],'ref':this[_0x4500c8(0x320,0x312)]()});this[_0x4500c8(0x2e8,0x2a0)]=_0x4500c8(0x33d,0x375),this[_0x4500c8(0x27a,0x2f2)]();function _0x4500c8(_0x49211e,_0x50cdc6){return _0x30c5(_0x50cdc6-0x12f,_0x49211e);}_0x375bff('ok');});}['_join'](){function _0x21db74(_0x5cf96c,_0x374bce){return _0x30c5(_0x5cf96c- -0x11e,_0x374bce);}if(this[_0x21db74(0x53,0x28)]==='leaving')return;this['state']=_0x21db74(0x7d,0xd4),this['socket']?.['connected']&&(this['socket'][_0x21db74(0xbe,0x4d)](_0x21db74(0x122,0x135),{'topic':this['topic'],'ref':this['makeRef']()}),setTimeout(()=>{function _0x3a67e2(_0x38820e,_0x35054c){return _0x30c5(_0x35054c- -0x246,_0x38820e);}this[_0x3a67e2(-0x13a,-0xd5)]==='joining'&&(this['state']=_0x3a67e2(-0x137,-0xd9),this[_0x3a67e2(-0xd8,-0x6a)]('status',_0x3a67e2(-0x63,-0x7f)));},0x64));}['_rejoin'](){function _0x327e80(_0x5b7cb1,_0x28d13c){return _0x30c5(_0x28d13c- -0x3c9,_0x5b7cb1);}this[_0x327e80(-0x1c9,-0x17a)]&&(this['_join'](),this[_0x327e80(-0x266,-0x229)]['forEach']((_0x3ac344,_0x22114e)=>{function _0x398e94(_0x2e1e1b,_0x231296){return _0x30c5(_0x2e1e1b- -0x7,_0x231296);}if(_0x22114e['startsWith']('postgres_changes:')){const filter=JSON[_0x398e94(0x15f,0x1df)](_0x22114e[_0x398e94(0x251,0x2a8)](_0x398e94(0x17e,0x1bb),''));this[_0x398e94(0x187,0x176)]?.['emit'](_0x398e94(0x190,0x1ee),{'topic':this[_0x398e94(0x1da,0x157)],'filter':filter,'ref':this['makeRef']()});}}));}[_0x684fad(0x4d2,0x4f3)](_0x41800f,_0x245698){function _0x1a3563(_0x4495a8,_0x3879f0){return _0x30c5(_0x3879f0-0x3a9,_0x4495a8);}if(_0x41800f==='postgres_changes'){const _0x43eb58=_0x1a3563(0x572,0x52e)+JSON[_0x1a3563(0x5b4,0x5fd)](_0x245698[_0x1a3563(0x594,0x5ca)]||{});this['emit'](_0x43eb58,_0x245698);}else{if(_0x41800f==='broadcast'){const _0x4f98d3='broadcast:'+JSON['stringify']({'event':_0x245698[_0x1a3563(0x5ff,0x5dc)]});this[_0x1a3563(0x5ca,0x585)](_0x4f98d3,_0x245698);}else{if(_0x41800f==='presence'){const _0x33dd37=_0x1a3563(0x66c,0x600)+JSON['stringify']({'event':_0x245698['event']});this['emit'](_0x33dd37,_0x245698);}}}this['emit'](_0x41800f,_0x245698);}['_setState'](_0x543fb7){function _0x3b4e4a(_0x2e1222,_0x219f16){return _0x30c5(_0x219f16- -0x33e,_0x2e1222);}this['state']=_0x543fb7;let status;switch(_0x543fb7){case'joined':status='SUBSCRIBED';break;case _0x3b4e4a(-0x159,-0xf9):status='CHANNEL_ERROR';break;case'closed':status=_0x3b4e4a(-0x12f,-0x15a);break;default:return;}this[_0x3b4e4a(-0x1e1,-0x162)](_0x3b4e4a(-0xfc,-0x129),status);}[_0x684fad(0x50f,0x49b)](){function _0xf5b85f(_0x3443e6,_0x3cea22){return _0x30c5(_0x3443e6-0x29f,_0x3cea22);}return Math['random']()[_0xf5b85f(0x44d,0x406)](0x24)[_0xf5b85f(0x508,0x501)](0x2,0xf);}[_0x684fad(0x520,0x591)](){return this['state'];}}function _0x5035(){const _0x39a6b2=['l2vUDG','l2f1DgGVDJeVCMvMCMvZAa','rMfPBgvKihrVihvWzgf0zsbIDwnRzxq','zgvSzxrLt3b0Aw9UCW','BMfTzq','zM9YrwfJAa','zgv0zwn0q3vZDg9Trgf0ywjHC2u','y2HHBM5LBa','rgf0ywjHC2uGB3bLCMf0Aw9UigzHAwXLza','y29UBMvJDgvK','zgvMyxvSDhm','BgvHDMu','B25Jzq','AwXPA2u','rMfPBgvKihrVigXPC3qGyNvJA2v0CW','zxHLy3v0zq','zw1PDa','nJm3tM1htfDM','C2v0v29YA3nWywnLswq','BhrL','DxbKyxrLrw52','Dg9WAwm','y29UDgfPBNm','BwfRzvjLzG','q0Xpu0ve','ChvZAa','BgLZDgvUzxjZ','BgLZDej1y2TLDhm','AgfUzgXLrxjYB3i','rMfPBgvKihrVigDLDcbMDw5JDgLVBG','Bgv2zwW','yxv0Aa','B2zMC2v0','AgvHzgvYCW','yNvJA2v0swq','DMfSDwu','mty1nduXmZbpzMTbCwm','C29JA2v0lMLVlwnSAwvUDa','y29TBw9U','ywnJzxnZx3rVA2vU','z2v0u3rHDgu','C2v0u2vZC2LVBG','yNjVD3nLCG','z2XVyMfS','zw50CNLWB2LUDa','C2v0twf4tgLZDgvUzxjZ','yMfZzvvsta','zg93BMXVywq','Ec10B3rHBc1JB3vUDa','l3jWyY8','y29UBMvJDa','CxvLCNK','ChjLCgvUzeXPC3rLBMvY','BgLTAxq','ntG5mty0m2HkCe9Yva','mtmZmdK3oer0CfHpvW','C2vSzwn0','y29UBMvJDgLVBLn0yxrL','Dg9vChbLCKnHC2u','Bwv0ywrHDge','lMfZyW','l3n0B3jHz2uVyNvJA2v0CY8','BwvZC2fNzq','nNfPsKz1DW','CgvYAw9K','ChjVzhvJDa','y3jLyxrLqNvJA2v0','zxHLy3v0zvf1zxj5','sfruucbYzxf1zxn0igzHAwXLza','BgvUz3rO','BxvSDgLWyxj0l2zVCM0Tzgf0yq','Cg9ZDgDYzxniB3n0','Aw1WB3j0twfW','C3rHDhvZ','nZuXmdi2zuHgsgvM','C3rHDhvZvgv4Da','DgfIBgu','ChjLzML4','C2LNBLvW','rMfPBgvKihrVig1VDMuGzMLSzq','y29UzMLNDxjLq3vZDg9Trgf0ywjHC2u','l2z1BMn0Aw9UCY92ms8','D2fYBG','yxv0B0rLDgvJDen1C3rVBurHDgfIyxnL','Bw92zq','zMLSDgvY','rMfPBgvKihrVihvWzgf0zsbMAwXLig1LDgfKyxrH','zgv0zwn0zwrdB25MAwC','rMfPBgvKihrVigDLDcbMDw5JDgLVBIbSB2DZ','rMfPBgvKihrVigrLBgv0zsbMDw5JDgLVBG','y2fJAgvdB250CM9S','mtm5ndK2vhDYtfPc','B3bLCMf0B3i','l2zPBgvZ','B3bLCMf0Aw9U','y3jLzgvUDgLHBhm','l3nPz24','C2v0DxbizwfYDgjLyxq','z2v0sxrLBq','Dw5ZDwjZy3jPyMu','zgvSzxrL','CMv0DxjUpxjLChjLC2vUDgf0Aw9U','x3nLDfn0yxrL','zxzLBNq','BgLRzq','C2L6zq','lMrLC2m','C2LNBKLU','l2f1DgGVDJeVC2rRl3nPz25PBG','yxbPs2v5','l21LDhjPy3m','Dw50CMfJAW','B3jKzxi','CMvJB25Uzwn0qxr0zw1WDhm','C29JA2v0qwrHChrLCG','DMfSDwvZ','AM9PBG','y3vYCMvUDfnLC3nPB24','l2f1DgGVDJeVDxnLCG','Dgv4Dc9WBgfPBG','y3vZDg9Trgf0ywjHC2vnyw5Hz2vY','zxjYB3jLza','y2XVC2vK','CMvMCMvZAfnLC3nPB24','z2v0','zgf0yufYCMf5','zw52','rMfPBgvKihrVihjLBw92zsbMAwXLCW','rMfPBgvKihrVihvWzgf0zsbMDw5JDgLVBIbLBNzPCM9UBwvUDa','CMvZzxrqyxnZD29Yza','CMvXDwvZDa','AM9PBMvKt25Jzq','Bwf4uMvJB25Uzwn0qxr0zw1WDhm','C3rHy2S','y3jLyxrLu2LNBMvKvxjS','DhjHy2S','C3rYAw5NAwz5','DgvZDenVBM5Ly3rPB24','CMvMCMvZAf90B2TLBG','ChjLC2vUy2u6','CMvWBgfJzq','rMfPBgvKihrVignYzwf0zsbZAwDUzwqGvvjm','igf0DgvTChrZoIa','yNvJA2v0','zxzLBNrZ','z2v0tg9NCW','y2XLyxi','qMvHCMvYia','ms4XlJG','C3rYAw5N','wc1xB3jRC3bHy2uTsuq','C29YDej5','Aw52B2TL','B25qB3n0z3jLC0nOyw5Nzxm','D2vIC29JA2v0','yMXVyG','AxnvC2LUz0n1C3rVBurHDgfIyxnL','C3vIC3rYAw5N','Bg9HzfnLC3nPB24','CMvZCg9UC2u','rMfPBgvKihrVihvWBg9HzcbMAwXL','B25qCMvZzw5Jzq','z2v0twv0CMLJCW','CMvTB3zLqxv0AfrVA2vU','C2v0','z2v0v29YA3nWywnLswq','C3rVCMfNzq','zMLSDgvYCW','CMvTB3zLq3vZDg9Trgf0ywjHC2u','Bg9N','z2v0q3vZDg9Trgf0ywjHC2vtDgf0Dxm','CgfYC2u','l3nKAY92ms8','DxbKyxrLrMLSzu1LDgfKyxrH','CMfUz2u','l2z1BMn0Aw9UCY92mq','Cg9ZDa','ChvIBgLJ','AM9PBMvK','BM9Kzq','DxbKyxrLt3b0Aw9UCW','y3jLyxrL','C3rHDgu','C2vZC2LVBG','C2nOzw1H','zxjYB3i','y2fWDhvYzvn0ywnRvhjHy2u','p29WzxjHDgLVBJ1PBNnLCNq','yM9KEq','C2v0sxrLBq','y29SDw1U','y29UBMvJDf9LCNjVCG','C2v0u2vZC2LVBKLUDgvYBMfS','l21LDgfKyxrH','Bwf0y2G','zwjHyxmUyxv0Ac5ZzxnZAw9U','Bwf4tgLZDgvUzxjZ','z2v0q2HHBM5LBhm','x2DLDfnVy2TLDa','y2XPzw50','AgfZq3vZDg9Trgf0ywjHC2u','z2v0q3vZDg9Tq3jLzgvUDgLHBhm','Cg9ZDgDYzxnFy2HHBMDLCZO','yNjVywrJyxn0','DxbKyxrLrgf0yq','DxjS','D29YA3nWywnLswq','B25cCM9HzgnHC3q','zgLZy29UBMvJDa','y29UzMLN','DhjHBNnMB3jT','C29JA2v0','B3b0Aw9UCW','z2v0twf4tgLZDgvUzxjZ','rMfPBgvKihrVignYzwf0zsbIDwnRzxq','C3nSrw5HyMXLza','y2XLyxjtzxnZAw9U','y3vYCMvUDfnJAgvTyq','AgfUzgXLqxv0AevYCM9Y','Cg9ZDgDYzxnFy2HHBMDLCW','C3vIC2nYAwjLx3bVC3rNCMvZx2nOyw5Nzxm','Cgf0y2G','y2HHBM5LBhm','zNjVBq','AM9PBMLUzW','l2f1DgGVDJeVC2LNBM91Da','zgLZy29UBMvJDgvK','Aw5PDgLHBgL6zun1C3rVBurHDgfIyxnL','CMvQzwn0','C3vIC2nYAxb0Aw9UCW','DMvYAwz5','CNbJ','Cg9ZDgDYzxneyxrHyMfZzq','DgLTzw91Da','zNvUy3rPB25Z','x3rYAwDNzxi','rMfPBgvKihrVigDLDcbMAwXLigLUzM8','AxndB25Uzwn0zwq','DxnL','mJe4mJe2uMPxEfb1','CMvHy3qTBMf0AxzL','rxjYB3iGAw4GzxzLBNqGBgLZDgvUzxiGzM9Yici','Ahr0CenSAwvUDa','Dg9tDhjPBMC','Chv0','zgf0yq','zMLSzq','ngzrzejbvW','rMfPBgvKihrVigrVD25SB2fKigzPBgu','rMfPBgvKihrVigrLBgv0zsbIDwnRzxq','C3bSAxq','CMvZB2X2zq','zgv0ywLSCW','ChjLC2vUy2u','l2f1DgGVDJeVC2LNBNvW','zw50CMLLCW','C2v0qxv0AfrVA2vU','DMvYC2LVBNm','l2zPBgvZlW','B2zM','y29Kzq','yxbWzw5K','Dw5KzwzPBMvK','mJaZnJqXmgPRENPqsG','CMvTB3zLqwXStgLZDgvUzxjZ','AgfZ','l2zPBgvZl2nVChK','C2LNBK91Da','u1vcu0nssujfra','z2v0u3rHDhvZ','y29UDgvUDfr5Cgu','zgf0ywjHC2u','vw5RBM93BIbLCNjVCG'];_0x5035=function(){return _0x39a6b2;};return _0x5035();}function getEnvironment(){if(typeof navigator!=='undefined'&&navigator[_0x5e0f19(-0x77,-0xc2)]==='ReactNative')return _0x5e0f19(-0xd9,-0x55);if(typeof window!==_0x5e0f19(-0xc3,-0x139)&&typeof document!==_0x5e0f19(-0xc3,-0x77))return _0x5e0f19(-0x8e,-0x9b);function _0x5e0f19(_0x3e0575,_0x210cff){return _0x30c5(_0x3e0575- -0x284,_0x210cff);}if(typeof global!==_0x5e0f19(-0xc3,-0x4d)&&typeof process!==_0x5e0f19(-0xc3,-0x101)&&process[_0x5e0f19(-0xc8,-0x44)]?.['node'])return _0x5e0f19(-0x116,-0xaa);return _0x5e0f19(-0x8e,-0x38);}function isSocketIOAvailable(){function _0x243993(_0x28fa42,_0x28577d){return _0x30c5(_0x28577d-0x1b6,_0x28fa42);}try{const _0x420812=getEnvironment();switch(_0x420812){case _0x243993(0x2cd,0x324):return typeof require!==_0x243993(0x366,0x377)&&require['resolve']&&!!require[_0x243993(0x2ee,0x36c)](_0x243993(0x3cf,0x3a7));case _0x243993(0x3aa,0x3ac):if(typeof globalThis!==_0x243993(0x300,0x377)&&'io'in globalThis)return!![];return typeof require!==_0x243993(0x343,0x377)&&require[_0x243993(0x2f8,0x36c)]&&!!require['resolve']('socket.io-client');case'react-native':try{return typeof require!=='undefined'&&!!require('socket.io-client');}catch{return![];}default:return![];}}catch{return![];}}function getSocketIO(){function _0x1eef33(_0x11a61f,_0x31f697){return _0x30c5(_0x11a61f- -0x295,_0x31f697);}try{if(typeof require!==_0x1eef33(-0xd4,-0xfe))return require(_0x1eef33(-0xa4,-0xf0));if(typeof globalThis!=='undefined'&&'io'in globalThis)return{'io':globalThis['io']};throw new Error('socket.io-client\x20not\x20available');}catch(_0x3f1840){throw new Error('Socket.io-client\x20não\x20está\x20disponível\x20neste\x20ambiente.\x20Para\x20usar\x20funcionalidades\x20de\x20realtime,\x20instale:\x20npm\x20install\x20socket.io-client');}}class WebSocketAdapter{constructor(){function _0x4d6290(_0x2caf29,_0x44088d){return _0x30c5(_0x44088d-0x19c,_0x2caf29);}this[_0x4d6290(0x2cf,0x32a)]=null;}async['connect'](_0x311f16,_0x41c251){if(!isSocketIOAvailable())throw new Error('Socket.io-client não está disponível. Para usar funcionalidades de realtime, instale: npm install socket.io-client');const {io:_0x2fbb6e}=getSocketIO();return new Promise((_0x4d832b,_0x4b1e54)=>{function _0x3c7237(_0x128811,_0x9b0da2){return _0x30c5(_0x9b0da2-0x306,_0x128811);}this['socket']=_0x2fbb6e(_0x311f16,_0x41c251),this[_0x3c7237(0x4e3,0x494)]['on']('connect',()=>_0x4d832b()),this['socket']['on'](_0x3c7237(0x452,0x480),_0x33ba83=>_0x4b1e54(_0x33ba83));});}[_0x684fad(0x4b7,0x44b)](){function _0x43be1a(_0x59c2e1,_0x1623f9){return _0x30c5(_0x1623f9- -0x27b,_0x59c2e1);}this[_0x43be1a(-0x11a,-0xed)]&&(this[_0x43be1a(-0x10c,-0xed)][_0x43be1a(-0x8a,-0xf0)](),this[_0x43be1a(-0x8c,-0xed)]=null);}['emit'](_0x5c2ba2,data){function _0xdedf0b(_0x4952b2,_0x14a518){return _0x30c5(_0x14a518-0x137,_0x4952b2);}this[_0xdedf0b(0x310,0x2c5)]?.['emit'](_0x5c2ba2,data);}['on'](_0x8bb0af,_0x42c832){this['socket']?.['on'](_0x8bb0af,_0x42c832);}['off'](_0x5b755d,_0x58e971){function _0x410588(_0x138463,_0x4ac6b4){return _0x30c5(_0x138463- -0x1dc,_0x4ac6b4);}_0x58e971?this[_0x410588(-0x4e,-0xb5)]?.[_0x410588(-0x1e,-0xd)](_0x5b755d,_0x58e971):this['socket']?.['off'](_0x5b755d);}get['connected'](){function _0x5705ea(_0x263f17,_0x454604){return _0x30c5(_0x263f17-0x35c,_0x454604);}return this[_0x5705ea(0x4ea,0x474)]?.[_0x5705ea(0x531,0x4f4)]??![];}}class ReactNativeSocketAdapter{constructor(){function _0x508dcd(_0x422719,_0x481417){return _0x30c5(_0x422719-0x26a,_0x481417);}this[_0x508dcd(0x3f8,0x472)]=null;}async['connect'](_0x3dd7ec,_0x5b3d15){if(!isSocketIOAvailable())throw new Error('Socket.io-client\x20não\x20está\x20disponível.\x20Para\x20React\x20Native,\x20instale:\x20npm\x20install\x20socket.io-client');const {io:_0x2583ec}=getSocketIO();return new Promise((_0x10ddab,_0x8d0b2d)=>{this[_0x11680e(0x25b,0x1dc)]=_0x2583ec(_0x3dd7ec,{..._0x5b3d15,'transports':['websocket'],'upgrade':![],'autoConnect':!![]});function _0x11680e(_0x4780f5,_0x376d26){return _0x30c5(_0x4780f5-0xcd,_0x376d26);}this[_0x11680e(0x25b,0x1d2)]['on'](_0x11680e(0x2cb,0x319),()=>_0x10ddab()),this[_0x11680e(0x25b,0x2b6)]['on']('connect_error',_0x10f902=>_0x8d0b2d(_0x10f902));});}[_0x684fad(0x4b7,0x462)](){function _0x45476(_0x4fd04e,_0x44d778){return _0x30c5(_0x44d778-0x1f,_0x4fd04e);}this[_0x45476(0x22d,0x1ad)]&&(this[_0x45476(0x164,0x1ad)][_0x45476(0x1e4,0x1aa)](),this['socket']=null);}['emit'](_0x2ae6aa,data){function _0x20b8d3(_0x46562a,_0x5dffc9){return _0x30c5(_0x46562a- -0x7d,_0x5dffc9);}this[_0x20b8d3(0x111,0x8e)]?.[_0x20b8d3(0x15f,0x1c8)](_0x2ae6aa,data);}['on'](_0x506e56,_0x39b854){this['socket']?.['on'](_0x506e56,_0x39b854);}['off'](_0x387442,_0x2d3d4d){function _0x3e103f(_0x357da4,_0x5df6be){return _0x30c5(_0x5df6be-0x31f,_0x357da4);}_0x2d3d4d?this['socket']?.[_0x3e103f(0x46b,0x4dd)](_0x387442,_0x2d3d4d):this[_0x3e103f(0x46f,0x4ad)]?.[_0x3e103f(0x4cc,0x4dd)](_0x387442);}get['connected'](){function _0x1ce830(_0x37b2fa,_0x313040){return _0x30c5(_0x37b2fa-0x23,_0x313040);}return this['socket']?.[_0x1ce830(0x1f8,0x20f)]??![];}}function createSocketAdapter(){const _0x2b8ff7=getEnvironment();function _0x2c8fc5(_0x5e8254,_0x154169){return _0x30c5(_0x5e8254- -0x279,_0x154169);}switch(_0x2b8ff7){case'react-native':return new ReactNativeSocketAdapter();case _0x2c8fc5(-0x83,-0xa0):case _0x2c8fc5(-0x10b,-0x151):default:return new WebSocketAdapter();}}class RealtimeClient{constructor(_0x170c7f,_0x2a2877,_0x11b778={}){this[_0x7c0117(0x4e8,0x55d)]=null,this['channels']=new Map(),this['connectionState']=_0x7c0117(0x4f7,0x4c0),this[_0x7c0117(0x597,0x59f)]=0x0,this[_0x7c0117(0x5aa,0x597)]=0x5;function _0x7c0117(_0xd8a976,_0xe0fdbb){return _0x30c5(_0xd8a976-0x35a,_0xe0fdbb);}this['url']=_0x170c7f,this[_0x7c0117(0x593,0x58a)]=_0x2a2877,this['options']={'heartbeatInterval':0x7530,'reconnectInterval':0x1388,'maxReconnectAttempts':0x5,..._0x11b778},this['socketAdapter']=createSocketAdapter();}[_0x684fad(0x52a,0x4f1)](){return new Promise(async(_0x2f8db7,_0x38f07b)=>{if(this['socketAdapter']['connected']){_0x2f8db7();return;}this[_0x3cdfd6(0x219,0x194)]='connecting';function _0x3cdfd6(_0x3d32b4,_0xf3aa1e){return _0x30c5(_0x3d32b4-0x14,_0xf3aa1e);}try{await this[_0x3cdfd6(0x252,0x2d5)][_0x3cdfd6(0x212,0x261)](this[_0x3cdfd6(0x19c,0x11e)],{'auth':{'apikey':this[_0x3cdfd6(0x24d,0x257)]},'transports':[_0x3cdfd6(0x27a,0x23c)],'reconnection':!![],'reconnectionDelay':this['options']['reconnectInterval'],'reconnectionAttempts':this[_0x3cdfd6(0x1a3,0x212)][_0x3cdfd6(0x264,0x239)],...this[_0x3cdfd6(0x1a3,0x215)]['socketOptions']}),this['socket']=this[_0x3cdfd6(0x252,0x259)]['socket'],this['socketAdapter']['on']('connect',()=>{this[_0x2c7625(-0x1ca,-0x228)]='connected',this['reconnectAttempts']=0x0;function _0x2c7625(_0x9bb862,_0x23fad8){return _0x30c5(_0x9bb862- -0x3cf,_0x23fad8);}this[_0x2c7625(-0x1a2,-0x12e)](),_0x2f8db7();}),this[_0x3cdfd6(0x252,0x1ef)]['on'](_0x3cdfd6(0x19f,0x1c7),()=>{function _0x35b411(_0x5a1ccb,_0x3c5537){return _0x30c5(_0x5a1ccb-0x3e7,_0x3c5537);}this['connectionState']=_0x35b411(0x584,0x5df),this[_0x35b411(0x580,0x5e9)][_0x35b411(0x5b8,0x56d)](channel=>{function _0x5f2a55(_0x3f4003,_0x31b01c){return _0x30c5(_0x31b01c-0x32a,_0x3f4003);}channel[_0x5f2a55(0x4df,0x55c)](_0x5f2a55(0x4ec,0x570));});}),this['socketAdapter']['on'](_0x3cdfd6(0x18e,0x112),_0x330b0d=>{this[_0x5adad9(-0xfa,-0xcf)]='error',this['reconnectAttempts']++;function _0x5adad9(_0x37b43d,_0x4f0387){return _0x30c5(_0x37b43d- -0x2ff,_0x4f0387);}this[_0x5adad9(-0xc2,-0xf8)]>=this['maxReconnectAttempts']&&_0x38f07b(new Error('Failed\x20to\x20connect\x20after\x20'+this[_0x5adad9(-0xaf,-0x80)]+_0x5adad9(-0xa5,-0x98)+_0x330b0d[_0x5adad9(-0xf5,-0xef)]));}),this[_0x3cdfd6(0x252,0x2d0)]['on']('reconnect',()=>{this[_0x2a748a(-0xb9,-0x96)]=_0x2a748a(-0xe9,-0x7f),this['reconnectAttempts']=0x0;function _0x2a748a(_0x2730f0,_0x54d9bd){return _0x30c5(_0x2730f0- -0x2be,_0x54d9bd);}this['channels'][_0x2a748a(-0xed,-0xeb)](channel=>{channel['_rejoin']();});}),this['socketAdapter']['on']('postgres_changes',_0x3f29a1=>{const channel=this[_0x5480fe(0xbc,0x8f)][_0x5480fe(0x16b,0x192)](_0x3f29a1['topic']);function _0x5480fe(_0x273ce8,_0x19b1da){return _0x30c5(_0x273ce8- -0xdd,_0x19b1da);}channel&&channel['_trigger'](_0x5480fe(0xb9,0x70),_0x3f29a1);}),this[_0x3cdfd6(0x252,0x29b)]['on'](_0x3cdfd6(0x19a,0x210),_0x1769ad=>{function _0x2593ba(_0x2c4af6,_0x29e9a0){return _0x30c5(_0x29e9a0- -0x15b,_0x2c4af6);}const channel=this['channels'][_0x2593ba(0x75,0xed)](_0x1769ad['topic']);channel&&channel['_trigger'](_0x2593ba(0x3a,0x2b),_0x1769ad);}),this['socketAdapter']['on']('presence',_0x429456=>{function _0xbad9fe(_0x1cc30b,_0x376bc5){return _0x30c5(_0x376bc5-0x2a1,_0x1cc30b);}const channel=this[_0xbad9fe(0x3fd,0x43a)][_0xbad9fe(0x56d,0x4e9)](_0x429456['topic']);channel&&channel[_0xbad9fe(0x405,0x447)](_0xbad9fe(0x4c0,0x459),_0x429456);});}catch(_0x32b9a3){this[_0x3cdfd6(0x219,0x1e4)]=_0x3cdfd6(0x188,0x167),_0x38f07b(_0x32b9a3);}});}['disconnect'](){function _0x40e08d(_0x17d43e,_0x6b3bd1){return _0x30c5(_0x6b3bd1-0x2f4,_0x17d43e);}this['socketAdapter']&&(this['socketAdapter'][_0x40e08d(0x474,0x47f)](),this[_0x40e08d(0x433,0x482)]=null),this['connectionState']='disconnected',this['channels'][_0x40e08d(0x55c,0x552)]();}[_0x684fad(0x4ff,0x49a)](_0x1d2e0a){function _0x3e1147(_0x453f34,_0x1595fa){return _0x30c5(_0x453f34-0x81,_0x1595fa);}if(this[_0x3e1147(0x21a,0x23c)]['has'](_0x1d2e0a))return this['channels'][_0x3e1147(0x2c9,0x29c)](_0x1d2e0a);const channel=new RealtimeChannel(_0x1d2e0a,this['socket']);return this['channels']['set'](_0x1d2e0a,channel),this['connectionState']===_0x3e1147(0x256,0x22d)&&channel['_join'](),channel;}['removeChannel'](channel){function _0x553237(_0xf6c977,_0x3b8063){return _0x30c5(_0xf6c977-0x9f,_0x3b8063);}const _0x4b8fff=channel['topic'];this[_0x553237(0x238,0x1f9)]['has'](_0x4b8fff)&&(this[_0x553237(0x238,0x1da)]['delete'](_0x4b8fff),channel[_0x553237(0x2ce,0x2b1)]());}['removeAllChannels'](){function _0x4142c2(_0x43bf4f,_0x452698){return _0x30c5(_0x43bf4f-0x79,_0x452698);}this[_0x4142c2(0x212,0x1d3)]['forEach'](channel=>{channel['unsubscribe']();}),this[_0x4142c2(0x212,0x1fb)]['clear']();}[_0x684fad(0x4ac,0x47f)](){function _0x388e0c(_0x53cadf,_0x36b430){return _0x30c5(_0x36b430-0x178,_0x53cadf);}return Array[_0x388e0c(0x39b,0x312)](this[_0x388e0c(0x398,0x311)][_0x388e0c(0x41f,0x3b7)]());}[_0x684fad(0x4d4,0x54d)](){function _0x3fcc56(_0x321821,_0xfd7427){return _0x30c5(_0xfd7427- -0x3b4,_0x321821);}return this[_0x3fcc56(-0x177,-0x1af)]==='connected'&&this['socketAdapter'][_0x3fcc56(-0x188,-0x1df)];}['getConnectionState'](){return this['connectionState'];}['onConnectionStateChange'](_0x300f99){function _0x592b92(_0x2e6e58,_0xace098){return _0x30c5(_0x2e6e58- -0x217,_0xace098);}const _0x4cecd1=()=>_0x300f99(this['connectionState']);return this['socketAdapter']&&(this['socketAdapter']['on'](_0x592b92(-0x19,-0x19),()=>{this['connectionState']='connected',_0x4cecd1();}),this[_0x592b92(0x27,0x7)]['on'](_0x592b92(-0x8c,-0xdd),()=>{function _0x34f9e4(_0x130046,_0x29ebda){return _0x30c5(_0x29ebda-0x3d7,_0x130046);}this['connectionState']=_0x34f9e4(0x5fb,0x574),_0x4cecd1();}),this[_0x592b92(0x27,-0x14)]['on']('connect_error',()=>{function _0x44a9f7(_0x37e2ea,_0x32dd3c){return _0x30c5(_0x37e2ea-0x2c3,_0x32dd3c);}this[_0x44a9f7(0x4c8,0x47a)]=_0x44a9f7(0x437,0x41f),_0x4cecd1();})),()=>{function _0x25df25(_0x4df9ef,_0x418628){return _0x30c5(_0x4df9ef- -0x28b,_0x418628);}this[_0x25df25(-0x4d,-0x1e)]&&(this[_0x25df25(-0x4d,-0x93)][_0x25df25(-0xcd,-0xe1)](_0x25df25(-0x8d,-0x109),_0x4cecd1),this['socketAdapter'][_0x25df25(-0xcd,-0xae)](_0x25df25(-0x100,-0x8b),_0x4cecd1),this[_0x25df25(-0x4d,-0x96)][_0x25df25(-0xcd,-0x144)]('connect_error',_0x4cecd1));};}[_0x684fad(0x559,0x5a8)](){if(!this[_0x38863d(-0x6c,-0x3a)]['heartbeatInterval']||!this['socketAdapter'])return;function _0x38863d(_0x48c965,_0x279c6a){return _0x30c5(_0x48c965- -0x1fb,_0x279c6a);}const interval=setInterval(()=>{function _0x815bed(_0x112fbc,_0x4b2b02){return _0x30c5(_0x112fbc- -0x159,_0x4b2b02);}this[_0x815bed(0xe5,0x128)]?.[_0x815bed(0x7c,0x1)]?this['socketAdapter']['emit']('heartbeat',{'timestamp':Date['now']()}):clearInterval(interval);},this[_0x38863d(-0x6c,-0x50)]['heartbeatInterval']);}[_0x684fad(0x4ad,0x502)](){return this['socket'];}}class FunctionsClient{constructor(_0x47f5f7){this['httpClient']=_0x47f5f7;}async[_0x684fad(0x590,0x602)](_0x5d3860,_0x35aee8){function _0x18b15b(_0x31860f,_0x269330){return _0x30c5(_0x31860f- -0x233,_0x269330);}try{const _0x4fd2b6=_0x35aee8?.['method']||'POST',headers={'Content-Type':'application/json',..._0x35aee8?.[_0x18b15b(-0x46,-0x9c)]};let response;const _0x6ba6f2=_0x18b15b(-0x16,-0x60)+_0x5d3860;switch(_0x4fd2b6[_0x18b15b(-0x2d,0x54)]()){case'GET':response=await this['httpClient'][_0x18b15b(0x15,0xc)](_0x6ba6f2,{'headers':headers,'params':_0x35aee8?.[_0x18b15b(-0xbc,-0x4f)]});break;case'POST':response=await this[_0x18b15b(-0x86,-0xf)][_0x18b15b(-0xc8,-0xc4)](_0x6ba6f2,_0x35aee8?.[_0x18b15b(-0xbc,-0x68)],{'headers':headers});break;case'PUT':response=await this['httpClient']['put'](_0x6ba6f2,_0x35aee8?.['body'],{'headers':headers});break;case'PATCH':response=await this[_0x18b15b(-0x86,-0x1c)][_0x18b15b(-0x9b,-0xf9)](_0x6ba6f2,_0x35aee8?.[_0x18b15b(-0xbc,-0x8b)],{'headers':headers});break;case'DELETE':response=await this['httpClient']['delete'](_0x6ba6f2,{'headers':headers,'data':_0x35aee8?.[_0x18b15b(-0xbc,-0xbc)]});break;default:throw new EBaaSError('Unsupported\x20HTTP\x20method:\x20'+_0x4fd2b6,0x190);}return{'data':response['data'],'error':null};}catch(_0x3d30ae){return{'data':null,'error':_0x3d30ae instanceof EBaaSError?_0x3d30ae:new EBaaSError(_0x3d30ae instanceof Error?_0x3d30ae[_0x18b15b(-0x29,-0x2b)]:'Function\x20invocation\x20failed',0x0,_0x3d30ae)};}}async['list'](){function _0x4fbfbe(_0x284e66,_0x472105){return _0x30c5(_0x284e66-0x83,_0x472105);}try{const response=await this['httpClient'][_0x4fbfbe(0x2cb,0x2ef)](_0x4fbfbe(0x1ed,0x1d3));return{'data':response[_0x4fbfbe(0x233,0x1c7)],'error':null};}catch(_0x39a4cb){return{'data':null,'error':_0x39a4cb instanceof EBaaSError?_0x39a4cb:new EBaaSError(_0x39a4cb instanceof Error?_0x39a4cb[_0x4fbfbe(0x28d,0x28c)]:'Failed\x20to\x20list\x20functions',0x0,_0x39a4cb)};}}async[_0x684fad(0x574,0x5f5)](_0x338b6b){function _0x2a4cfb(_0x3b1962,_0x386754){return _0x30c5(_0x3b1962- -0x3d4,_0x386754);}try{const response=await this[_0x2a4cfb(-0x227,-0x20b)]['get']('/functions/v1/'+_0x338b6b+'/info');return{'data':response[_0x2a4cfb(-0x224,-0x22d)],'error':null};}catch(_0x437cb8){return{'data':null,'error':_0x437cb8 instanceof EBaaSError?_0x437cb8:new EBaaSError(_0x437cb8 instanceof Error?_0x437cb8[_0x2a4cfb(-0x1ca,-0x1f8)]:_0x2a4cfb(-0x1eb,-0x268),0x0,_0x437cb8)};}}async['deploy'](_0x2f7acf,_0x318278){function _0xeec390(_0x5a05ed,_0x2a3102){return _0x30c5(_0x5a05ed- -0x366,_0x2a3102);}try{const _0x44a239=new FormData();if(_0x318278['code']instanceof File)_0x44a239[_0xeec390(-0x1a6,-0x13b)](_0xeec390(-0x1a7,-0x179),_0x318278[_0xeec390(-0x1a7,-0x1c3)]);else typeof _0x318278[_0xeec390(-0x1a7,-0x1f2)]===_0xeec390(-0x105,-0x123)&&_0x44a239['append'](_0xeec390(-0x1a7,-0x1a9),new Blob([_0x318278[_0xeec390(-0x1a7,-0x120)]],{'type':_0xeec390(-0x123,-0x155)}),'index.ts');_0x318278['entrypoint']&&_0x44a239['append']('entrypoint',_0x318278[_0xeec390(-0x16e,-0x109)]);_0x318278[_0xeec390(-0x11c,-0xa3)]&&_0x44a239[_0xeec390(-0x1a6,-0x1d5)](_0xeec390(-0x11c,-0x18a),JSON['stringify'](_0x318278[_0xeec390(-0x11c,-0x16d)]));_0x318278[_0xeec390(-0x152,-0x19e)]&&_0x44a239[_0xeec390(-0x1a6,-0x218)](_0xeec390(-0x152,-0x157),JSON['stringify'](_0x318278[_0xeec390(-0x152,-0xff)]));_0x318278['verify']!==undefined&&_0x44a239['append'](_0xeec390(-0x1c5,-0x24b),String(_0x318278[_0xeec390(-0x1c5,-0x1d6)]));const response=await this[_0xeec390(-0x1b9,-0x164)][_0xeec390(-0x1fb,-0x258)]('/functions/v1/'+_0x2f7acf+'/deploy',_0x44a239,{'headers':{'Content-Type':'multipart/form-data'}});return{'data':response['data'],'error':null};}catch(_0x326aaf){return{'data':null,'error':_0x326aaf instanceof EBaaSError?_0x326aaf:new EBaaSError(_0x326aaf instanceof Error?_0x326aaf['message']:'Failed\x20to\x20deploy\x20function',0x0,_0x326aaf)};}}async['delete'](_0x20b964){function _0x53c615(_0x2b6510,_0x2e19a7){return _0x30c5(_0x2b6510-0x20d,_0x2e19a7);}try{const response=await this[_0x53c615(0x3ba,0x40d)]['delete'](_0x53c615(0x42a,0x413)+_0x20b964);return{'data':response[_0x53c615(0x3bd,0x440)],'error':null};}catch(_0x269176){return{'data':null,'error':_0x269176 instanceof EBaaSError?_0x269176:new EBaaSError(_0x269176 instanceof Error?_0x269176[_0x53c615(0x417,0x3fb)]:_0x53c615(0x432,0x3ef),0x0,_0x269176)};}}async[_0x684fad(0x50c,0x560)](_0x35f981,_0x546349){function _0x17a1fb(_0x117050,_0x54cdd3){return _0x30c5(_0x117050- -0x34b,_0x54cdd3);}try{const response=await this['httpClient'][_0x17a1fb(-0x19c,-0x185)]('/functions/v1/'+_0x35f981+_0x17a1fb(-0x17f,-0x13d),{'env':_0x546349});return{'data':response[_0x17a1fb(-0x19b,-0x1f6)],'error':null};}catch(_0x2fed34){return{'data':null,'error':_0x2fed34 instanceof EBaaSError?_0x2fed34:new EBaaSError(_0x2fed34 instanceof Error?_0x2fed34[_0x17a1fb(-0x141,-0x19d)]:_0x17a1fb(-0xff,-0x86),0x0,_0x2fed34)};}}async[_0x684fad(0x589,0x524)](_0x1d314f,_0x2aca85){function _0x2f2b56(_0xe7fe4e,_0x24abd9){return _0x30c5(_0xe7fe4e-0x33,_0x24abd9);}try{const _0x276806=new URLSearchParams();_0x2aca85?.['limit']&&_0x276806[_0x2f2b56(0x1f3,0x1a1)](_0x2f2b56(0x234,0x1ff),String(_0x2aca85[_0x2f2b56(0x234,0x1f2)]));_0x2aca85?.[_0x2f2b56(0x21f,0x1ef)]&&_0x276806[_0x2f2b56(0x1f3,0x230)](_0x2f2b56(0x21f,0x244),String(_0x2aca85[_0x2f2b56(0x21f,0x246)]));_0x2aca85?.['level']&&_0x276806[_0x2f2b56(0x1f3,0x1a4)](_0x2f2b56(0x21d,0x1d8),_0x2aca85[_0x2f2b56(0x21d,0x208)]);const _0x5be271='/functions/v1/'+_0x1d314f+'/logs'+(_0x276806[_0x2f2b56(0x1e1,0x169)]()?'?'+_0x276806[_0x2f2b56(0x1e1,0x1b9)]():''),response=await this['httpClient']['get'](_0x5be271);return{'data':response[_0x2f2b56(0x1e3,0x25a)],'error':null};}catch(_0x32c0d5){return{'data':null,'error':_0x32c0d5 instanceof EBaaSError?_0x32c0d5:new EBaaSError(_0x32c0d5 instanceof Error?_0x32c0d5[_0x2f2b56(0x23d,0x1c7)]:_0x2f2b56(0x257,0x295),0x0,_0x32c0d5)};}}async[_0x684fad(0x489,0x46d)](_0x3bffad,_0x4ea1e7){function _0x1e926a(_0x4d8716,_0x1600bf){return _0x30c5(_0x1600bf- -0x98,_0x4d8716);}try{const _0x3cc3d1=new URLSearchParams();_0x4ea1e7?.['period']&&_0x3cc3d1[_0x1e926a(0xc2,0x128)](_0x1e926a(0x101,0x174),_0x4ea1e7['period']);const _0x32fce1=_0x1e926a(0x1c9,0x185)+_0x3bffad+_0x1e926a(0x20c,0x1a2)+(_0x3cc3d1[_0x1e926a(0x144,0x116)]()?'?'+_0x3cc3d1['toString']():''),response=await this[_0x1e926a(0x98,0x115)]['get'](_0x32fce1);return{'data':response['data'],'error':null};}catch(_0x312944){return{'data':null,'error':_0x312944 instanceof EBaaSError?_0x312944:new EBaaSError(_0x312944 instanceof Error?_0x312944['message']:'Failed\x20to\x20get\x20function\x20metrics',0x0,_0x312944)};}}}class EBaaSClient{constructor(_0x2881a0,_0x4831d4,_0x431906){this[_0xce304(0x22e,0x27c)]=_0x431906,this['httpClient']=new HttpClient({'url':_0x2881a0,'apiKey':_0x4831d4,'timeout':0x7530,'headers':_0x431906?.[_0xce304(0x296,0x2e0)]?.['headers']}),this['auth']=new AuthClient(this['httpClient'],_0x431906?.['database']?.['workspaceId']),this['database']=new DatabaseClient(this['httpClient'],_0x431906?.['database']?.[_0xce304(0x228,0x1f8)]),this[_0xce304(0x200,0x22b)]=new StorageClient(this[_0xce304(0x24c,0x1c8)]),this['realtime']=new RealtimeClient(_0x2881a0,_0x4831d4,_0x431906?.['realtime']),this['functions']=new FunctionsClient(this['httpClient']);function _0xce304(_0x216d32,_0x10c296){return _0x30c5(_0x216d32-0x9f,_0x10c296);}this[_0xce304(0x23d,0x1cd)]();}[_0x684fad(0x4c6,0x465)](_0x55181c){function _0x9cd8b(_0x6e6fc4,_0x676dd8){return _0x30c5(_0x6e6fc4-0x36a,_0x676dd8);}return this[_0x9cd8b(0x534,0x4f8)]['from'](_0x55181c);}[_0x684fad(0x4ce,0x46d)](_0x5765f2,_0x262114){function _0x39ff8b(_0x3f6810,_0x4a1654){return _0x30c5(_0x4a1654- -0x3e4,_0x3f6810);}return this[_0x39ff8b(-0x288,-0x21a)][_0x39ff8b(-0x2c4,-0x242)](_0x5765f2,_0x262114);}[_0x684fad(0x587,0x522)](_0x2b32ec){function _0x3c8b59(_0x4a3c47,_0x249fa6){return _0x30c5(_0x4a3c47-0x366,_0x249fa6);}return this[_0x3c8b59(0x4c7,0x527)][_0x3c8b59(0x500,0x4d1)](_0x2b32ec);}['channel'](_0x30cb27){return this['realtime']['channel'](_0x30cb27);}['invoke'](_0x35aebe,_0x3cbea4){function _0x4bece5(_0x5e938f,_0x18ab47){return _0x30c5(_0x18ab47-0x3d6,_0x5e938f);}return this[_0x4bece5(0x50a,0x57b)]['invoke'](_0x35aebe,_0x3cbea4);}async[_0x684fad(0x4ca,0x474)](){function _0x899056(_0x5f001a,_0x5cd332){return _0x30c5(_0x5cd332-0x151,_0x5f001a);}if(this['options']?.[_0x899056(0x2f1,0x31b)]?.[_0x899056(0x32f,0x370)])try{await this[_0x899056(0x2cb,0x31b)]['initialize']();}catch(_0x2aeea9){console[_0x899056(0x3a7,0x36f)]('Failed to initialize custom database detection:',_0x2aeea9);}}async['setWorkspaceId'](_0x2225cc){this[_0x6bce9d(-0x91,-0x12)][_0x6bce9d(-0x9e,-0x6a)](_0x2225cc);function _0x6bce9d(_0x74ec41,_0xf8a96f){return _0x30c5(_0x74ec41- -0x27c,_0xf8a96f);}this['database']['setWorkspaceId'](_0x2225cc),this['options']?.[_0x6bce9d(-0xb2,-0xce)]?.['autoDetectCustomDatabase']&&await this['database']['initialize']();}async['configureCustomDatabase'](_0x1210ee){function _0x3b0d99(_0x3e6850,_0xa0e44d){return _0x30c5(_0x3e6850- -0x2f2,_0xa0e44d);}await this[_0x3b0d99(-0x128,-0x102)][_0x3b0d99(-0xd6,-0xa9)](_0x1210ee);}['getCustomDatabaseStatus'](){function _0x2f2bb9(_0x1c222a,_0xdc9e8f){return _0x30c5(_0x1c222a- -0x2a,_0xdc9e8f);}return this['database'][_0x2f2bb9(0x13b,0x19c)]();}}function createClient(_0x44168b,_0x268a9a,_0x14d7ed){return new EBaaSClient(_0x44168b,_0x268a9a,_0x14d7ed);}const version=_0x684fad(0x58c,0x560);export{AuthClient,CustomDatabaseManager,DatabaseClient,EBaaSClient,EBaaSError,FunctionsClient,HttpClient,QueryBuilder,RealtimeChannel,RealtimeClient,StorageBucket,StorageClient,createClient,version};
1
+ import axios from 'axios';
2
+
3
+ class EBaaSError extends Error {
4
+ constructor(message, status = 0, details) {
5
+ super(message);
6
+ this.name = 'EBaaSError';
7
+ this.status = status;
8
+ this.details = details;
9
+ if (Error.captureStackTrace) {
10
+ Error.captureStackTrace(this, EBaaSError);
11
+ }
12
+ }
13
+ toJSON() {
14
+ return {
15
+ name: this.name,
16
+ message: this.message,
17
+ status: this.status,
18
+ details: this.details,
19
+ stack: this.stack
20
+ };
21
+ }
22
+ toString() {
23
+ return `${this.name}: ${this.message} (Status: ${this.status})`;
24
+ }
25
+ }
26
+
27
+ class HttpClient {
28
+ constructor(config) {
29
+ this.baseURL = config.url;
30
+ this.apiKey = config.apiKey;
31
+ this.client = axios.create({
32
+ baseURL: this.baseURL,
33
+ timeout: config.timeout || 10000,
34
+ headers: {
35
+ 'Content-Type': 'application/json',
36
+ 'apikey': this.apiKey,
37
+ ...config.headers,
38
+ },
39
+ });
40
+ this.setupInterceptors();
41
+ }
42
+ setupInterceptors() {
43
+ // Request interceptor
44
+ this.client.interceptors.request.use((config) => {
45
+ return config;
46
+ }, (error) => {
47
+ return Promise.reject(new EBaaSError('Request failed', 0, error));
48
+ });
49
+ // Response interceptor
50
+ this.client.interceptors.response.use((response) => {
51
+ return response;
52
+ }, (error) => {
53
+ const status = error.response?.status || 0;
54
+ const message = error.response?.data?.message || error.message || 'Unknown error';
55
+ const details = error.response?.data || error;
56
+ return Promise.reject(new EBaaSError(message, status, details));
57
+ });
58
+ }
59
+ async get(url, config) {
60
+ try {
61
+ const response = await this.client.get(url, config);
62
+ return {
63
+ data: response.data,
64
+ status: response.status,
65
+ statusText: response.statusText,
66
+ headers: response.headers,
67
+ };
68
+ }
69
+ catch (error) {
70
+ throw this.handleError(error);
71
+ }
72
+ }
73
+ async post(url, data, config) {
74
+ try {
75
+ const response = await this.client.post(url, data, config);
76
+ return {
77
+ data: response.data,
78
+ status: response.status,
79
+ statusText: response.statusText,
80
+ headers: response.headers,
81
+ };
82
+ }
83
+ catch (error) {
84
+ throw this.handleError(error);
85
+ }
86
+ }
87
+ async put(url, data, config) {
88
+ try {
89
+ const response = await this.client.put(url, data, config);
90
+ return {
91
+ data: response.data,
92
+ status: response.status,
93
+ statusText: response.statusText,
94
+ headers: response.headers,
95
+ };
96
+ }
97
+ catch (error) {
98
+ throw this.handleError(error);
99
+ }
100
+ }
101
+ async patch(url, data, config) {
102
+ try {
103
+ const response = await this.client.patch(url, data, config);
104
+ return {
105
+ data: response.data,
106
+ status: response.status,
107
+ statusText: response.statusText,
108
+ headers: response.headers,
109
+ };
110
+ }
111
+ catch (error) {
112
+ throw this.handleError(error);
113
+ }
114
+ }
115
+ async delete(url, config) {
116
+ try {
117
+ const response = await this.client.delete(url, config);
118
+ return {
119
+ data: response.data,
120
+ status: response.status,
121
+ statusText: response.statusText,
122
+ headers: response.headers,
123
+ };
124
+ }
125
+ catch (error) {
126
+ throw this.handleError(error);
127
+ }
128
+ }
129
+ setAuthToken(token) {
130
+ this.client.defaults.headers.common['Authorization'] = `Bearer ${token}`;
131
+ }
132
+ removeAuthToken() {
133
+ delete this.client.defaults.headers.common['Authorization'];
134
+ this.client.defaults.headers.common['Authorization'] = `Bearer ${this.apiKey}`;
135
+ }
136
+ handleError(error) {
137
+ if (error instanceof EBaaSError) {
138
+ return error;
139
+ }
140
+ return new EBaaSError(error.message || 'HTTP request failed', error.status || 0, error);
141
+ }
142
+ }
143
+
144
+ class AuthClient {
145
+ constructor(httpClient, workspaceId) {
146
+ this.currentSession = null;
147
+ this.httpClient = httpClient;
148
+ this.workspaceId = workspaceId;
149
+ this.loadSession();
150
+ }
151
+ async signUp(data) {
152
+ try {
153
+ const headers = {};
154
+ console.log('🔍 [SDK DEBUG] SignUp - workspaceId:', this.workspaceId);
155
+ // Incluir x-workspace-id se workspaceId foi fornecido (igual ao signIn)
156
+ if (this.workspaceId) {
157
+ headers['x-workspace-id'] = this.workspaceId;
158
+ console.log('✅ [SDK DEBUG] SignUp - header x-workspace-id adicionado:', this.workspaceId);
159
+ }
160
+ else {
161
+ console.log('❌ [SDK DEBUG] SignUp - workspaceId é undefined, header não adicionado');
162
+ }
163
+ console.log('🔍 [SDK DEBUG] SignUp - headers finais:', headers);
164
+ const response = await this.httpClient.post('/auth/v1/signup', data, {
165
+ headers
166
+ });
167
+ if (response.data.session) {
168
+ this.setSessionInternal(response.data.session);
169
+ }
170
+ return response.data;
171
+ }
172
+ catch (error) {
173
+ throw this.handleAuthError(error);
174
+ }
175
+ }
176
+ async signIn(data) {
177
+ try {
178
+ const headers = {};
179
+ // Incluir x-workspace-id se workspaceId foi fornecido
180
+ if (this.workspaceId) {
181
+ headers['x-workspace-id'] = this.workspaceId;
182
+ }
183
+ const response = await this.httpClient.post('/auth/v1/sdk/signin', data, {
184
+ headers
185
+ });
186
+ if (response.data.session) {
187
+ this.setSessionInternal(response.data.session);
188
+ }
189
+ return response.data;
190
+ }
191
+ catch (error) {
192
+ throw this.handleAuthError(error);
193
+ }
194
+ }
195
+ async signOut() {
196
+ try {
197
+ await this.httpClient.post('/auth/v1/signout');
198
+ this.clearSession();
199
+ }
200
+ catch (error) {
201
+ this.clearSession();
202
+ throw this.handleAuthError(error);
203
+ }
204
+ }
205
+ async getUser() {
206
+ if (!this.currentSession?.access_token) {
207
+ return null;
208
+ }
209
+ try {
210
+ const response = await this.httpClient.get('/auth/v1/user');
211
+ return response.data.user;
212
+ }
213
+ catch (error) {
214
+ if (error instanceof EBaaSError && error.status === 401) {
215
+ this.clearSession();
216
+ return null;
217
+ }
218
+ throw this.handleAuthError(error);
219
+ }
220
+ }
221
+ async refreshSession() {
222
+ if (!this.currentSession?.refresh_token) {
223
+ return null;
224
+ }
225
+ try {
226
+ const response = await this.httpClient.post('/auth/v1/refresh', {
227
+ refresh_token: this.currentSession.refresh_token
228
+ });
229
+ if (response.data.session) {
230
+ this.setSession(response.data.session);
231
+ return response.data.session;
232
+ }
233
+ return null;
234
+ }
235
+ catch (error) {
236
+ this.clearSession();
237
+ throw this.handleAuthError(error);
238
+ }
239
+ }
240
+ async resetPassword(email) {
241
+ try {
242
+ await this.httpClient.post('/auth/v1/reset-password', { email });
243
+ }
244
+ catch (error) {
245
+ throw this.handleAuthError(error);
246
+ }
247
+ }
248
+ async updateUser(data) {
249
+ try {
250
+ const response = await this.httpClient.put('/auth/v1/user', data);
251
+ return response.data.user;
252
+ }
253
+ catch (error) {
254
+ throw this.handleAuthError(error);
255
+ }
256
+ }
257
+ getSession() {
258
+ return this.currentSession;
259
+ }
260
+ setSession(session) {
261
+ this.currentSession = session;
262
+ this.httpClient.setAuthToken(session.access_token);
263
+ // Persist session
264
+ if (typeof localStorage !== 'undefined') {
265
+ localStorage.setItem('ebaas.auth.session', JSON.stringify(session));
266
+ }
267
+ }
268
+ onAuthStateChange(callback) {
269
+ // Implementation for auth state change listener
270
+ // This would integrate with the actual auth state management system
271
+ return () => { };
272
+ }
273
+ /**
274
+ * Atualiza o workspace ID (útil quando o usuário troca de workspace)
275
+ */
276
+ setWorkspaceId(workspaceId) {
277
+ this.workspaceId = workspaceId;
278
+ }
279
+ setSessionInternal(session) {
280
+ this.currentSession = session;
281
+ this.httpClient.setAuthToken(session.access_token);
282
+ // Persist session
283
+ if (typeof localStorage !== 'undefined') {
284
+ localStorage.setItem('ebaas.auth.session', JSON.stringify(session));
285
+ }
286
+ }
287
+ clearSession() {
288
+ this.currentSession = null;
289
+ this.httpClient.removeAuthToken();
290
+ // Clear persisted session
291
+ if (typeof localStorage !== 'undefined') {
292
+ localStorage.removeItem('ebaas.auth.session');
293
+ }
294
+ }
295
+ loadSession() {
296
+ if (typeof localStorage !== 'undefined') {
297
+ const storedSession = localStorage.getItem('ebaas.auth.session');
298
+ if (storedSession) {
299
+ try {
300
+ const session = JSON.parse(storedSession);
301
+ this.setSessionInternal(session);
302
+ }
303
+ catch (error) {
304
+ this.clearSession();
305
+ }
306
+ }
307
+ }
308
+ }
309
+ handleAuthError(error) {
310
+ if (error instanceof EBaaSError) {
311
+ return error;
312
+ }
313
+ return new EBaaSError(error.message || 'Authentication failed', error.status || 0, error);
314
+ }
315
+ }
316
+
317
+ class QueryBuilder {
318
+ constructor(httpClient, table, schema, workspaceId, restUrl) {
319
+ this.httpClient = httpClient;
320
+ this.table = table;
321
+ this.schema = schema;
322
+ this.workspaceId = workspaceId;
323
+ this.restUrl = restUrl || '/sdk/v1';
324
+ this.query = {
325
+ filters: []
326
+ };
327
+ }
328
+ select(columns = '*', options) {
329
+ this.query.select = columns;
330
+ return this;
331
+ }
332
+ insert(data, options) {
333
+ return this.executeQuery('POST', `${this.restUrl}/${this.table}?operation=insert`, { data, options });
334
+ }
335
+ update(data, options) {
336
+ this.query.updateData = data;
337
+ this.query.updateOptions = options;
338
+ return this;
339
+ }
340
+ upsert(data, options) {
341
+ return this.executeQuery('POST', `${this.restUrl}/${this.table}?operation=upsert`, {
342
+ data,
343
+ options: { ...options, upsert: true }
344
+ });
345
+ }
346
+ delete(options) {
347
+ this.query.deleteOptions = options;
348
+ this.query.isDelete = true;
349
+ return this;
350
+ }
351
+ // Filter methods
352
+ eq(column, value) {
353
+ this.query.filters.push({ column, operator: 'eq', value });
354
+ return this;
355
+ }
356
+ neq(column, value) {
357
+ this.query.filters.push({ column, operator: 'neq', value });
358
+ return this;
359
+ }
360
+ gt(column, value) {
361
+ this.query.filters.push({ column, operator: 'gt', value });
362
+ return this;
363
+ }
364
+ gte(column, value) {
365
+ this.query.filters.push({ column, operator: 'gte', value });
366
+ return this;
367
+ }
368
+ lt(column, value) {
369
+ this.query.filters.push({ column, operator: 'lt', value });
370
+ return this;
371
+ }
372
+ lte(column, value) {
373
+ this.query.filters.push({ column, operator: 'lte', value });
374
+ return this;
375
+ }
376
+ like(column, pattern) {
377
+ this.query.filters.push({ column, operator: 'like', value: pattern });
378
+ return this;
379
+ }
380
+ ilike(column, pattern) {
381
+ this.query.filters.push({ column, operator: 'ilike', value: pattern });
382
+ return this;
383
+ }
384
+ is(column, value) {
385
+ this.query.filters.push({ column, operator: 'is', value });
386
+ return this;
387
+ }
388
+ in(column, values) {
389
+ this.query.filters.push({ column, operator: 'in', value: values });
390
+ return this;
391
+ }
392
+ contains(column, value) {
393
+ this.query.filters.push({ column, operator: 'contains', value });
394
+ return this;
395
+ }
396
+ match(query) {
397
+ Object.entries(query).forEach(([column, value]) => {
398
+ this.eq(column, value);
399
+ });
400
+ return this;
401
+ }
402
+ // Ordering methods
403
+ order(column, options) {
404
+ if (!this.query.order) {
405
+ this.query.order = [];
406
+ }
407
+ this.query.order.push({
408
+ column,
409
+ ascending: options?.ascending !== false
410
+ });
411
+ return this;
412
+ }
413
+ // Limiting methods
414
+ limit(count) {
415
+ this.query.limit = count;
416
+ return this;
417
+ }
418
+ range(from, to) {
419
+ this.query.range = { from, to };
420
+ return this;
421
+ }
422
+ // Execution method for SELECT, UPDATE, or DELETE
423
+ async execute() {
424
+ // Detectar tipo de operação baseado nos dados do query
425
+ if (this.query.updateData) {
426
+ // UPDATE operation
427
+ return this.executeQuery('PATCH', `${this.restUrl}/${this.table}`, {
428
+ data: this.query.updateData,
429
+ options: this.query.updateOptions,
430
+ filters: this.query.filters
431
+ });
432
+ }
433
+ else if (this.query.isDelete) {
434
+ // DELETE operation
435
+ return this.executeQuery('DELETE', `${this.restUrl}/${this.table}?operation=delete`, {
436
+ options: this.query.deleteOptions,
437
+ filters: this.query.filters
438
+ });
439
+ }
440
+ else {
441
+ // SELECT operation (default)
442
+ return this.executeQuery('GET', `${this.restUrl}/${this.table}?operation=select`, {
443
+ select: this.query.select,
444
+ filters: this.query.filters,
445
+ order: this.query.order,
446
+ limit: this.query.limit,
447
+ range: this.query.range
448
+ });
449
+ }
450
+ }
451
+ // Single row execution
452
+ async single() {
453
+ this.limit(1);
454
+ const result = await this.execute();
455
+ return {
456
+ data: result.data?.[0] || null,
457
+ error: result.error,
458
+ };
459
+ }
460
+ async executeQuery(method, url, payload) {
461
+ try {
462
+ let response;
463
+ // Configurar headers obrigatórios
464
+ const headers = {};
465
+ if (this.workspaceId) {
466
+ headers['x-workspace-id'] = this.workspaceId;
467
+ }
468
+ if (method === 'GET') {
469
+ // Extrair parâmetros existentes da URL (como operation=select)
470
+ const urlParts = url.split('?');
471
+ const baseUrl = urlParts[0];
472
+ const existingParams = new URLSearchParams(urlParts[1] || '');
473
+ // Adicionar novos parâmetros de query
474
+ if (payload.select)
475
+ existingParams.append('select', payload.select);
476
+ // Converter filtros para formato PostgREST
477
+ if (payload.filters?.length) {
478
+ payload.filters.forEach((filter) => {
479
+ existingParams.append(filter.column, `${filter.operator}.${filter.value}`);
480
+ });
481
+ }
482
+ // Converter ordenação para formato PostgREST
483
+ if (payload.order?.length) {
484
+ const orderStr = payload.order.map((ord) => `${ord.column}${ord.ascending ? '.asc' : '.desc'}`).join(',');
485
+ existingParams.append('order', orderStr);
486
+ }
487
+ if (payload.limit)
488
+ existingParams.append('limit', payload.limit.toString());
489
+ if (payload.range) {
490
+ existingParams.append('offset', payload.range.from.toString());
491
+ existingParams.append('limit', (payload.range.to - payload.range.from + 1).toString());
492
+ }
493
+ response = await this.httpClient.get(`${baseUrl}?${existingParams.toString()}`, { headers });
494
+ }
495
+ else if (method === 'DELETE') {
496
+ // Para DELETE, os filtros devem estar na URL (query string), não no body
497
+ // Extrair parâmetros existentes da URL (como operation=delete)
498
+ const urlParts = url.split('?');
499
+ const baseUrl = urlParts[0];
500
+ const existingParams = new URLSearchParams(urlParts[1] || '');
501
+ // Adicionar parâmetro operation=delete se não estiver presente
502
+ if (!existingParams.has('operation')) {
503
+ existingParams.append('operation', 'delete');
504
+ }
505
+ if (payload.filters?.length) {
506
+ // Converter filtros para formato PostgREST
507
+ payload.filters.forEach((filter) => {
508
+ existingParams.append(filter.column, `${filter.operator}.${filter.value}`);
509
+ });
510
+ }
511
+ const deleteUrl = `${baseUrl}?${existingParams.toString()}`;
512
+ console.log('🔧 DELETE URL construída:', deleteUrl);
513
+ console.log('🔧 DELETE headers:', headers);
514
+ console.log('🔧 DELETE filtros originais:', payload.filters);
515
+ response = await this.httpClient.delete(deleteUrl, { headers });
516
+ }
517
+ else if (method === 'PATCH') {
518
+ // Para UPDATE (PATCH), os filtros também devem estar na URL
519
+ // Extrair parâmetros existentes da URL (como operation=update)
520
+ const urlParts = url.split('?');
521
+ const baseUrl = urlParts[0];
522
+ const existingParams = new URLSearchParams(urlParts[1] || '');
523
+ // Adicionar parâmetro operation=update se não estiver presente
524
+ if (!existingParams.has('operation')) {
525
+ existingParams.append('operation', 'update');
526
+ }
527
+ if (payload.filters?.length) {
528
+ // Converter filtros para formato PostgREST
529
+ payload.filters.forEach((filter) => {
530
+ existingParams.append(filter.column, `${filter.operator}.${filter.value}`);
531
+ });
532
+ }
533
+ // Adicionar headers Prefer se necessário
534
+ if (payload.options?.prefer) {
535
+ headers['Prefer'] = payload.options.prefer;
536
+ }
537
+ const updateUrl = `${baseUrl}?${existingParams.toString()}`;
538
+ response = await this.httpClient.patch(updateUrl, payload.data, { headers });
539
+ }
540
+ else {
541
+ // POST mantém o payload no body (para INSERT)
542
+ let postData = payload.data;
543
+ // Sempre retornar dados inseridos por padrão
544
+ if (!headers['Prefer']) {
545
+ headers['Prefer'] = 'return=representation';
546
+ }
547
+ // Se for upsert, adicionar header Prefer
548
+ if (payload.options?.upsert) {
549
+ headers['Prefer'] = 'resolution=merge-duplicates,return=representation';
550
+ }
551
+ // Se for inserção múltipla, usar dataArray
552
+ if (payload.dataArray) {
553
+ postData = payload.dataArray;
554
+ }
555
+ response = await this.httpClient.post(url, postData, { headers });
556
+ }
557
+ return {
558
+ data: response.data,
559
+ error: null,
560
+ count: response.headers?.['x-total-count'] ? parseInt(response.headers['x-total-count']) : undefined
561
+ };
562
+ }
563
+ catch (error) {
564
+ return {
565
+ data: null,
566
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Database operation failed', 0, error)
567
+ };
568
+ }
569
+ }
570
+ }
571
+
572
+ class CustomDatabaseManager {
573
+ constructor(httpClient, workspaceId) {
574
+ this.httpClient = httpClient;
575
+ this.workspaceId = workspaceId;
576
+ }
577
+ /**
578
+ * Detecta automaticamente se o workspace usa banco customizado
579
+ */
580
+ async detectCustomDatabase() {
581
+ if (!this.workspaceId) {
582
+ return { hasCustomDatabase: false };
583
+ }
584
+ try {
585
+ // Busca a configuração do workspace
586
+ const response = await this.httpClient.get('/admin/v1/workspace/custom-database', {
587
+ headers: {
588
+ 'x-workspace-id': this.workspaceId,
589
+ },
590
+ });
591
+ if (response.status === 200 && response.data?.config) {
592
+ const config = response.data.config;
593
+ // Converte para formato de credenciais do SDK
594
+ const credentials = {
595
+ host: config.postgresHost,
596
+ port: config.postgresPort,
597
+ database: config.postgresDatabase,
598
+ username: config.postgresUsername,
599
+ password: '', // Senha não é retornada pela API por segurança
600
+ schema: config.postgresSchema,
601
+ sslEnabled: config.sslEnabled,
602
+ };
603
+ this.detectedConfig = {
604
+ hasCustomDatabase: true,
605
+ config,
606
+ credentials,
607
+ };
608
+ return this.detectedConfig;
609
+ }
610
+ }
611
+ catch (error) {
612
+ // Se erro 404, significa que não há configuração customizada
613
+ if (error?.status === 404) {
614
+ this.detectedConfig = { hasCustomDatabase: false };
615
+ return this.detectedConfig;
616
+ }
617
+ console.warn('Failed to detect custom database configuration:', error);
618
+ }
619
+ this.detectedConfig = { hasCustomDatabase: false };
620
+ return this.detectedConfig;
621
+ }
622
+ /**
623
+ * Testa conexão com banco customizado
624
+ */
625
+ async testConnection(credentials) {
626
+ try {
627
+ const response = await this.httpClient.post('/admin/v1/workspace/custom-database/test-connection', credentials, {
628
+ headers: this.workspaceId ? { 'X-Workspace-ID': this.workspaceId } : {},
629
+ });
630
+ return response.data;
631
+ }
632
+ catch (error) {
633
+ return {
634
+ success: false,
635
+ message: error?.message || 'Failed to test connection',
636
+ };
637
+ }
638
+ }
639
+ /**
640
+ * Configura credenciais customizadas para o workspace
641
+ */
642
+ async configureCustomDatabase(credentials) {
643
+ if (!this.workspaceId) {
644
+ throw new Error('Workspace ID is required to configure custom database');
645
+ }
646
+ const response = await this.httpClient.post('/admin/v1/workspace/custom-database', {
647
+ workspaceId: this.workspaceId,
648
+ ...credentials,
649
+ }, {
650
+ headers: {
651
+ 'X-Workspace-ID': this.workspaceId,
652
+ },
653
+ });
654
+ const config = response.data.config;
655
+ // Atualiza a configuração detectada
656
+ this.detectedConfig = {
657
+ hasCustomDatabase: true,
658
+ config,
659
+ credentials,
660
+ };
661
+ return config;
662
+ }
663
+ /**
664
+ * Remove configuração de banco customizado
665
+ */
666
+ async removeCustomDatabase() {
667
+ if (!this.workspaceId) {
668
+ throw new Error('Workspace ID is required to remove custom database');
669
+ }
670
+ await this.httpClient.delete('/admin/v1/workspace/custom-database', {
671
+ headers: {
672
+ 'X-Workspace-ID': this.workspaceId,
673
+ },
674
+ });
675
+ // Limpa a configuração detectada
676
+ this.detectedConfig = { hasCustomDatabase: false };
677
+ }
678
+ /**
679
+ * Retorna a configuração detectada em cache
680
+ */
681
+ getDetectedConfig() {
682
+ return this.detectedConfig;
683
+ }
684
+ /**
685
+ * Verifica se tem configuração customizada em cache
686
+ */
687
+ hasCustomDatabase() {
688
+ return this.detectedConfig?.hasCustomDatabase ?? false;
689
+ }
690
+ /**
691
+ * Retorna as credenciais customizadas se disponíveis
692
+ */
693
+ getCustomCredentials() {
694
+ return this.detectedConfig?.credentials;
695
+ }
696
+ /**
697
+ * Atualiza o workspace ID
698
+ */
699
+ setWorkspaceId(workspaceId) {
700
+ this.workspaceId = workspaceId;
701
+ // Limpa configuração anterior quando workspace muda
702
+ this.detectedConfig = undefined;
703
+ }
704
+ /**
705
+ * Retorna o workspace ID atual
706
+ */
707
+ getWorkspaceId() {
708
+ return this.workspaceId;
709
+ }
710
+ /**
711
+ * Retorna informações sobre o status do banco customizado
712
+ */
713
+ getStatus() {
714
+ return {
715
+ workspaceId: this.workspaceId,
716
+ hasConfig: this.hasCustomDatabase(),
717
+ configDetails: this.detectedConfig?.credentials ? {
718
+ host: this.detectedConfig.credentials.host,
719
+ port: this.detectedConfig.credentials.port,
720
+ database: this.detectedConfig.credentials.database,
721
+ schema: this.detectedConfig.credentials.schema || 'public',
722
+ sslEnabled: this.detectedConfig.credentials.sslEnabled || false,
723
+ } : undefined,
724
+ };
725
+ }
726
+ }
727
+
728
+ class DatabaseClient {
729
+ constructor(httpClient, workspaceId, restUrl) {
730
+ this.httpClient = httpClient;
731
+ this.customDatabaseManager = new CustomDatabaseManager(httpClient, workspaceId);
732
+ this.restUrl = restUrl || '/sdk/v1';
733
+ }
734
+ from(table) {
735
+ return new QueryBuilder(this.httpClient, table, this.currentSchema, this.customDatabaseManager.getWorkspaceId(), this.restUrl);
736
+ }
737
+ rpc(fn, args) {
738
+ return this.httpClient.post(`/rpc/${fn}`, args);
739
+ }
740
+ schema(schema) {
741
+ const client = new DatabaseClient(this.httpClient, this.customDatabaseManager.getWorkspaceId(), this.restUrl);
742
+ client.currentSchema = schema;
743
+ client.customDatabaseManager = this.customDatabaseManager;
744
+ return client;
745
+ }
746
+ // Métodos para gerenciar banco customizado
747
+ /**
748
+ * Detecta automaticamente se o workspace usa banco customizado
749
+ */
750
+ async detectCustomDatabase() {
751
+ return this.customDatabaseManager.detectCustomDatabase();
752
+ }
753
+ /**
754
+ * Testa conexão com credenciais customizadas
755
+ */
756
+ async testCustomConnection(credentials) {
757
+ return this.customDatabaseManager.testConnection(credentials);
758
+ }
759
+ /**
760
+ * Configura banco customizado para o workspace
761
+ */
762
+ async configureCustomDatabase(credentials) {
763
+ return this.customDatabaseManager.configureCustomDatabase(credentials);
764
+ }
765
+ /**
766
+ * Remove configuração de banco customizado
767
+ */
768
+ async removeCustomDatabase() {
769
+ return this.customDatabaseManager.removeCustomDatabase();
770
+ }
771
+ /**
772
+ * Verifica se o workspace está usando banco customizado
773
+ */
774
+ isUsingCustomDatabase() {
775
+ return this.customDatabaseManager.hasCustomDatabase();
776
+ }
777
+ /**
778
+ * Retorna informações sobre o banco customizado
779
+ */
780
+ getCustomDatabaseStatus() {
781
+ return this.customDatabaseManager.getStatus();
782
+ }
783
+ /**
784
+ * Atualiza o workspace ID (útil quando o usuário troca de workspace)
785
+ */
786
+ setWorkspaceId(workspaceId) {
787
+ this.customDatabaseManager.setWorkspaceId(workspaceId);
788
+ }
789
+ /**
790
+ * Inicializa a detecção automática do banco customizado
791
+ * Deve ser chamado após a autenticação se autoDetectCustomDatabase estiver habilitado
792
+ */
793
+ async initialize() {
794
+ try {
795
+ await this.customDatabaseManager.detectCustomDatabase();
796
+ }
797
+ catch (error) {
798
+ console.warn('Failed to initialize custom database detection:', error);
799
+ }
800
+ }
801
+ }
802
+
803
+ class StorageBucket {
804
+ constructor(httpClient, bucketId) {
805
+ this.httpClient = httpClient;
806
+ this.bucketId = bucketId;
807
+ }
808
+ async upload(path, file, options) {
809
+ try {
810
+ const formData = new FormData();
811
+ if (file instanceof File) {
812
+ formData.append('file', file);
813
+ }
814
+ else if (file instanceof Blob) {
815
+ formData.append('file', file, path);
816
+ }
817
+ else if (file instanceof ArrayBuffer) {
818
+ formData.append('file', new Blob([file]), path);
819
+ }
820
+ else if (typeof file === 'string') {
821
+ formData.append('file', new Blob([file], { type: 'text/plain' }), path);
822
+ }
823
+ formData.append('path', path);
824
+ if (options?.cacheControl) {
825
+ formData.append('cacheControl', options.cacheControl);
826
+ }
827
+ if (options?.contentType) {
828
+ formData.append('contentType', options.contentType);
829
+ }
830
+ if (options?.metadata) {
831
+ formData.append('metadata', JSON.stringify(options.metadata));
832
+ }
833
+ const url = `/storage/buckets/${this.bucketId}/files${options?.upsert ? '?upsert=true' : ''}`;
834
+ const response = await this.httpClient.post(url, formData, {
835
+ headers: {
836
+ 'Content-Type': 'multipart/form-data'
837
+ }
838
+ });
839
+ return {
840
+ data: response.data,
841
+ error: null
842
+ };
843
+ }
844
+ catch (error) {
845
+ return {
846
+ data: null,
847
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to upload file', 0, error)
848
+ };
849
+ }
850
+ }
851
+ async download(path, options) {
852
+ try {
853
+ const params = new URLSearchParams();
854
+ if (options?.transform) {
855
+ Object.entries(options.transform).forEach(([key, value]) => {
856
+ if (value !== undefined) {
857
+ params.append(key, String(value));
858
+ }
859
+ });
860
+ }
861
+ const url = `/storage/buckets/${this.bucketId}/files/${path}${params.toString() ? `?${params.toString()}` : ''}`;
862
+ const response = await this.httpClient.get(url, {
863
+ responseType: 'blob'
864
+ });
865
+ return {
866
+ data: response.data,
867
+ error: null
868
+ };
869
+ }
870
+ catch (error) {
871
+ return {
872
+ data: null,
873
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to download file', 0, error)
874
+ };
875
+ }
876
+ }
877
+ async list(prefix, options) {
878
+ try {
879
+ const params = new URLSearchParams();
880
+ if (prefix) {
881
+ params.append('prefix', prefix);
882
+ }
883
+ if (options?.limit) {
884
+ params.append('limit', String(options.limit));
885
+ }
886
+ if (options?.offset) {
887
+ params.append('offset', String(options.offset));
888
+ }
889
+ if (options?.sortBy) {
890
+ params.append('sortBy', JSON.stringify(options.sortBy));
891
+ }
892
+ if (options?.search) {
893
+ params.append('search', options.search);
894
+ }
895
+ const url = `/storage/buckets/${this.bucketId}/files${params.toString() ? `?${params.toString()}` : ''}`;
896
+ const response = await this.httpClient.get(url);
897
+ return {
898
+ data: response.data,
899
+ error: null
900
+ };
901
+ }
902
+ catch (error) {
903
+ return {
904
+ data: null,
905
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to list files', 0, error)
906
+ };
907
+ }
908
+ }
909
+ async remove(paths) {
910
+ try {
911
+ const response = await this.httpClient.delete(`/storage/buckets/${this.bucketId}/files`, {
912
+ data: { paths }
913
+ });
914
+ return {
915
+ data: response.data,
916
+ error: null
917
+ };
918
+ }
919
+ catch (error) {
920
+ return {
921
+ data: null,
922
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to remove files', 0, error)
923
+ };
924
+ }
925
+ }
926
+ async move(fromPath, toPath) {
927
+ try {
928
+ const response = await this.httpClient.post(`/storage/buckets/${this.bucketId}/files/move`, {
929
+ sourceKey: fromPath,
930
+ destinationKey: toPath
931
+ });
932
+ return {
933
+ data: response.data,
934
+ error: null
935
+ };
936
+ }
937
+ catch (error) {
938
+ return {
939
+ data: null,
940
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to move file', 0, error)
941
+ };
942
+ }
943
+ }
944
+ async copy(fromPath, toPath) {
945
+ try {
946
+ const response = await this.httpClient.post(`/storage/buckets/${this.bucketId}/files/copy`, {
947
+ sourceKey: fromPath,
948
+ destinationKey: toPath
949
+ });
950
+ return {
951
+ data: response.data,
952
+ error: null
953
+ };
954
+ }
955
+ catch (error) {
956
+ return {
957
+ data: null,
958
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to copy file', 0, error)
959
+ };
960
+ }
961
+ }
962
+ async createSignedUrl(path, expiresIn, options) {
963
+ try {
964
+ const response = await this.httpClient.post(`/storage/buckets/${this.bucketId}/files/${path}/sign`, {
965
+ expiresIn,
966
+ ...options
967
+ });
968
+ return {
969
+ data: response.data,
970
+ error: null
971
+ };
972
+ }
973
+ catch (error) {
974
+ return {
975
+ data: null,
976
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to create signed URL', 0, error)
977
+ };
978
+ }
979
+ }
980
+ getPublicUrl(path, options) {
981
+ const params = new URLSearchParams();
982
+ if (options?.transform) {
983
+ Object.entries(options.transform).forEach(([key, value]) => {
984
+ if (value !== undefined) {
985
+ params.append(key, String(value));
986
+ }
987
+ });
988
+ }
989
+ const baseUrl = this.httpClient['baseURL'] || '';
990
+ const publicUrl = `${baseUrl}/storage/buckets/${this.bucketId}/files/${path}${params.toString() ? `?${params.toString()}` : ''}`;
991
+ return {
992
+ data: {
993
+ publicUrl
994
+ }
995
+ };
996
+ }
997
+ async getFileInfo(path) {
998
+ try {
999
+ const response = await this.httpClient.get(`/storage/buckets/${this.bucketId}/files/${path}/info`);
1000
+ return {
1001
+ data: response.data,
1002
+ error: null
1003
+ };
1004
+ }
1005
+ catch (error) {
1006
+ return {
1007
+ data: null,
1008
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get file info', 0, error)
1009
+ };
1010
+ }
1011
+ }
1012
+ async updateFileMetadata(path, metadata) {
1013
+ try {
1014
+ const response = await this.httpClient.put(`/storage/buckets/${this.bucketId}/files/${path}/metadata`, {
1015
+ metadata
1016
+ });
1017
+ return {
1018
+ data: response.data,
1019
+ error: null
1020
+ };
1021
+ }
1022
+ catch (error) {
1023
+ return {
1024
+ data: null,
1025
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to update file metadata', 0, error)
1026
+ };
1027
+ }
1028
+ }
1029
+ }
1030
+
1031
+ class StorageClient {
1032
+ constructor(httpClient) {
1033
+ this.httpClient = httpClient;
1034
+ }
1035
+ from(bucketId) {
1036
+ return new StorageBucket(this.httpClient, bucketId);
1037
+ }
1038
+ async createBucket(id, options) {
1039
+ try {
1040
+ const response = await this.httpClient.post('/storage/buckets', {
1041
+ id,
1042
+ ...options
1043
+ });
1044
+ return {
1045
+ data: response.data,
1046
+ error: null
1047
+ };
1048
+ }
1049
+ catch (error) {
1050
+ return {
1051
+ data: null,
1052
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to create bucket', 0, error)
1053
+ };
1054
+ }
1055
+ }
1056
+ async getBucket(id) {
1057
+ try {
1058
+ const response = await this.httpClient.get(`/storage/buckets/${id}`);
1059
+ return {
1060
+ data: response.data,
1061
+ error: null
1062
+ };
1063
+ }
1064
+ catch (error) {
1065
+ return {
1066
+ data: null,
1067
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get bucket', 0, error)
1068
+ };
1069
+ }
1070
+ }
1071
+ async listBuckets() {
1072
+ try {
1073
+ const response = await this.httpClient.get('/storage/buckets');
1074
+ return {
1075
+ data: response.data,
1076
+ error: null
1077
+ };
1078
+ }
1079
+ catch (error) {
1080
+ return {
1081
+ data: null,
1082
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to list buckets', 0, error)
1083
+ };
1084
+ }
1085
+ }
1086
+ async updateBucket(id, options) {
1087
+ try {
1088
+ const response = await this.httpClient.put(`/storage/buckets/${id}`, options);
1089
+ return {
1090
+ data: response.data,
1091
+ error: null
1092
+ };
1093
+ }
1094
+ catch (error) {
1095
+ return {
1096
+ data: null,
1097
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to update bucket', 0, error)
1098
+ };
1099
+ }
1100
+ }
1101
+ async deleteBucket(id) {
1102
+ try {
1103
+ const response = await this.httpClient.delete(`/storage/buckets/${id}`);
1104
+ return {
1105
+ data: response.data,
1106
+ error: null
1107
+ };
1108
+ }
1109
+ catch (error) {
1110
+ return {
1111
+ data: null,
1112
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to delete bucket', 0, error)
1113
+ };
1114
+ }
1115
+ }
1116
+ async getUsage() {
1117
+ try {
1118
+ const response = await this.httpClient.get('/storage/usage');
1119
+ return {
1120
+ data: response.data,
1121
+ error: null
1122
+ };
1123
+ }
1124
+ catch (error) {
1125
+ return {
1126
+ data: null,
1127
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get storage usage', 0, error)
1128
+ };
1129
+ }
1130
+ }
1131
+ }
1132
+
1133
+ class EventManager {
1134
+ constructor() {
1135
+ this.events = new Map();
1136
+ this.maxListeners = 10;
1137
+ }
1138
+ on(event, callback) {
1139
+ if (!this.events.has(event)) {
1140
+ this.events.set(event, new Set());
1141
+ }
1142
+ this.events.get(event).add(callback);
1143
+ }
1144
+ off(event, callback) {
1145
+ if (!this.events.has(event))
1146
+ return;
1147
+ const eventCallbacks = this.events.get(event);
1148
+ if (callback) {
1149
+ eventCallbacks.delete(callback);
1150
+ }
1151
+ else {
1152
+ eventCallbacks.clear();
1153
+ }
1154
+ if (eventCallbacks.size === 0) {
1155
+ this.events.delete(event);
1156
+ }
1157
+ }
1158
+ emit(event, ...args) {
1159
+ if (!this.events.has(event))
1160
+ return false;
1161
+ const eventCallbacks = this.events.get(event);
1162
+ for (const callback of eventCallbacks) {
1163
+ try {
1164
+ callback(...args);
1165
+ }
1166
+ catch (error) {
1167
+ console.error(`Error in event listener for "${event}":`, error);
1168
+ }
1169
+ }
1170
+ return eventCallbacks.size > 0;
1171
+ }
1172
+ removeAllListeners(event) {
1173
+ if (event) {
1174
+ this.events.delete(event);
1175
+ }
1176
+ else {
1177
+ this.events.clear();
1178
+ }
1179
+ }
1180
+ listenerCount(event) {
1181
+ return this.events.get(event)?.size ?? 0;
1182
+ }
1183
+ eventNames() {
1184
+ return Array.from(this.events.keys());
1185
+ }
1186
+ listeners(event) {
1187
+ return Array.from(this.events.get(event) ?? []);
1188
+ }
1189
+ addListener(event, callback) {
1190
+ this.on(event, callback);
1191
+ }
1192
+ removeListener(event, callback) {
1193
+ this.off(event, callback);
1194
+ }
1195
+ once(event, callback) {
1196
+ const onceWrapper = (...args) => {
1197
+ this.off(event, onceWrapper);
1198
+ callback(...args);
1199
+ };
1200
+ this.on(event, onceWrapper);
1201
+ }
1202
+ prependListener(event, callback) {
1203
+ this.on(event, callback);
1204
+ }
1205
+ prependOnceListener(event, callback) {
1206
+ const onceWrapper = (...args) => {
1207
+ this.off(event, onceWrapper);
1208
+ callback(...args);
1209
+ };
1210
+ this.on(event, onceWrapper);
1211
+ }
1212
+ setMaxListeners(max) {
1213
+ this.maxListeners = max;
1214
+ return this;
1215
+ }
1216
+ getMaxListeners() {
1217
+ return this.maxListeners;
1218
+ }
1219
+ rawListeners(event) {
1220
+ return this.listeners(event);
1221
+ }
1222
+ }
1223
+
1224
+ class RealtimeChannel extends EventManager {
1225
+ constructor(topic, socket) {
1226
+ super();
1227
+ this.joinedOnce = false;
1228
+ this.state = 'closed';
1229
+ this.subscriptions = new Map();
1230
+ this.topic = topic;
1231
+ this.socket = socket;
1232
+ }
1233
+ subscribe(callback) {
1234
+ if (!this.joinedOnce) {
1235
+ this.joinedOnce = true;
1236
+ this._join();
1237
+ }
1238
+ if (callback) {
1239
+ this.on('status', callback);
1240
+ }
1241
+ return this;
1242
+ }
1243
+ onPostgresChanges(filter, callback) {
1244
+ const eventKey = `postgres_changes:${JSON.stringify(filter)}`;
1245
+ this.on(eventKey, callback);
1246
+ const subscription = {
1247
+ unsubscribe: () => {
1248
+ this.off(eventKey, callback);
1249
+ this.subscriptions.delete(eventKey);
1250
+ }
1251
+ };
1252
+ this.subscriptions.set(eventKey, subscription);
1253
+ if (this.socket?.connected && this.state === 'joined') {
1254
+ this.socket.emit('subscribe_postgres_changes', {
1255
+ topic: this.topic,
1256
+ filter,
1257
+ ref: this.makeRef()
1258
+ });
1259
+ }
1260
+ return subscription;
1261
+ }
1262
+ onBroadcast(filter, callback) {
1263
+ const eventKey = `broadcast:${JSON.stringify(filter)}`;
1264
+ this.on(eventKey, callback);
1265
+ const subscription = {
1266
+ unsubscribe: () => {
1267
+ this.off(eventKey, callback);
1268
+ this.subscriptions.delete(eventKey);
1269
+ }
1270
+ };
1271
+ this.subscriptions.set(eventKey, subscription);
1272
+ return subscription;
1273
+ }
1274
+ onPresence(filter, callback) {
1275
+ const eventKey = `presence:${JSON.stringify(filter)}`;
1276
+ this.on(eventKey, callback);
1277
+ const subscription = {
1278
+ unsubscribe: () => {
1279
+ this.off(eventKey, callback);
1280
+ this.subscriptions.delete(eventKey);
1281
+ }
1282
+ };
1283
+ this.subscriptions.set(eventKey, subscription);
1284
+ return subscription;
1285
+ }
1286
+ send(payload) {
1287
+ return new Promise((resolve) => {
1288
+ if (this.socket?.connected && this.state === 'joined') {
1289
+ this.socket.emit('broadcast', {
1290
+ topic: this.topic,
1291
+ event: payload.event,
1292
+ payload: payload,
1293
+ ref: this.makeRef()
1294
+ });
1295
+ resolve('ok');
1296
+ }
1297
+ else {
1298
+ resolve('error');
1299
+ }
1300
+ });
1301
+ }
1302
+ track(payload) {
1303
+ return new Promise((resolve) => {
1304
+ if (this.socket?.connected && this.state === 'joined') {
1305
+ this.socket.emit('presence', {
1306
+ topic: this.topic,
1307
+ event: 'track',
1308
+ payload: payload,
1309
+ ref: this.makeRef()
1310
+ });
1311
+ resolve('ok');
1312
+ }
1313
+ else {
1314
+ resolve('error');
1315
+ }
1316
+ });
1317
+ }
1318
+ untrack() {
1319
+ return new Promise((resolve) => {
1320
+ if (this.socket?.connected && this.state === 'joined') {
1321
+ this.socket.emit('presence', {
1322
+ topic: this.topic,
1323
+ event: 'untrack',
1324
+ ref: this.makeRef()
1325
+ });
1326
+ resolve('ok');
1327
+ }
1328
+ else {
1329
+ resolve('error');
1330
+ }
1331
+ });
1332
+ }
1333
+ unsubscribe() {
1334
+ return new Promise((resolve) => {
1335
+ this.state = 'leaving';
1336
+ this.subscriptions.forEach(subscription => {
1337
+ subscription.unsubscribe();
1338
+ });
1339
+ this.subscriptions.clear();
1340
+ if (this.socket?.connected) {
1341
+ this.socket.emit('leave', {
1342
+ topic: this.topic,
1343
+ ref: this.makeRef()
1344
+ });
1345
+ }
1346
+ this.state = 'closed';
1347
+ this.removeAllListeners();
1348
+ resolve('ok');
1349
+ });
1350
+ }
1351
+ _join() {
1352
+ if (this.state === 'leaving')
1353
+ return;
1354
+ this.state = 'joining';
1355
+ if (this.socket?.connected) {
1356
+ this.socket.emit('join', {
1357
+ topic: this.topic,
1358
+ ref: this.makeRef()
1359
+ });
1360
+ setTimeout(() => {
1361
+ if (this.state === 'joining') {
1362
+ this.state = 'joined';
1363
+ this.emit('status', 'SUBSCRIBED');
1364
+ }
1365
+ }, 100);
1366
+ }
1367
+ }
1368
+ _rejoin() {
1369
+ if (this.joinedOnce) {
1370
+ this._join();
1371
+ this.subscriptions.forEach((_subscription, eventKey) => {
1372
+ if (eventKey.startsWith('postgres_changes:')) {
1373
+ const filter = JSON.parse(eventKey.replace('postgres_changes:', ''));
1374
+ this.socket?.emit('subscribe_postgres_changes', {
1375
+ topic: this.topic,
1376
+ filter,
1377
+ ref: this.makeRef()
1378
+ });
1379
+ }
1380
+ });
1381
+ }
1382
+ }
1383
+ _trigger(event, payload) {
1384
+ if (event === 'postgres_changes') {
1385
+ const eventKey = `postgres_changes:${JSON.stringify(payload.filter || {})}`;
1386
+ this.emit(eventKey, payload);
1387
+ }
1388
+ else if (event === 'broadcast') {
1389
+ const eventKey = `broadcast:${JSON.stringify({ event: payload.event })}`;
1390
+ this.emit(eventKey, payload);
1391
+ }
1392
+ else if (event === 'presence') {
1393
+ const eventKey = `presence:${JSON.stringify({ event: payload.event })}`;
1394
+ this.emit(eventKey, payload);
1395
+ }
1396
+ this.emit(event, payload);
1397
+ }
1398
+ _setState(state) {
1399
+ this.state = state;
1400
+ let status;
1401
+ switch (state) {
1402
+ case 'joined':
1403
+ status = 'SUBSCRIBED';
1404
+ break;
1405
+ case 'errored':
1406
+ status = 'CHANNEL_ERROR';
1407
+ break;
1408
+ case 'closed':
1409
+ status = 'CLOSED';
1410
+ break;
1411
+ default:
1412
+ return;
1413
+ }
1414
+ this.emit('status', status);
1415
+ }
1416
+ makeRef() {
1417
+ return Math.random().toString(36).substring(2, 15);
1418
+ }
1419
+ getState() {
1420
+ return this.state;
1421
+ }
1422
+ }
1423
+
1424
+ function getEnvironment() {
1425
+ if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
1426
+ return 'react-native';
1427
+ }
1428
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
1429
+ return 'browser';
1430
+ }
1431
+ if (typeof global !== 'undefined' && typeof process !== 'undefined' && process.versions?.node) {
1432
+ return 'node';
1433
+ }
1434
+ return 'browser';
1435
+ }
1436
+ function isSocketIOAvailable() {
1437
+ try {
1438
+ const env = getEnvironment();
1439
+ switch (env) {
1440
+ case 'node':
1441
+ return typeof require !== 'undefined' && require.resolve && !!require.resolve('socket.io-client');
1442
+ case 'browser':
1443
+ if (typeof globalThis !== 'undefined' && 'io' in globalThis) {
1444
+ return true;
1445
+ }
1446
+ return typeof require !== 'undefined' && require.resolve && !!require.resolve('socket.io-client');
1447
+ case 'react-native':
1448
+ try {
1449
+ return typeof require !== 'undefined' && !!require('socket.io-client');
1450
+ }
1451
+ catch {
1452
+ return false;
1453
+ }
1454
+ default:
1455
+ return false;
1456
+ }
1457
+ }
1458
+ catch {
1459
+ return false;
1460
+ }
1461
+ }
1462
+ function getSocketIO() {
1463
+ try {
1464
+ if (typeof require !== 'undefined') {
1465
+ return require('socket.io-client');
1466
+ }
1467
+ if (typeof globalThis !== 'undefined' && 'io' in globalThis) {
1468
+ return { io: globalThis.io };
1469
+ }
1470
+ throw new Error('socket.io-client not available');
1471
+ }
1472
+ catch (error) {
1473
+ throw new Error(`Socket.io-client não está disponível neste ambiente. Para usar funcionalidades de realtime, instale: npm install socket.io-client`);
1474
+ }
1475
+ }
1476
+ class WebSocketAdapter {
1477
+ constructor() {
1478
+ this.socket = null;
1479
+ }
1480
+ async connect(url, options) {
1481
+ if (!isSocketIOAvailable()) {
1482
+ throw new Error('Socket.io-client não está disponível. Para usar funcionalidades de realtime, instale: npm install socket.io-client');
1483
+ }
1484
+ const { io } = getSocketIO();
1485
+ return new Promise((resolve, reject) => {
1486
+ this.socket = io(url, options);
1487
+ this.socket.on('connect', () => resolve());
1488
+ this.socket.on('connect_error', (error) => reject(error));
1489
+ });
1490
+ }
1491
+ disconnect() {
1492
+ if (this.socket) {
1493
+ this.socket.disconnect();
1494
+ this.socket = null;
1495
+ }
1496
+ }
1497
+ emit(event, data) {
1498
+ this.socket?.emit(event, data);
1499
+ }
1500
+ on(event, callback) {
1501
+ this.socket?.on(event, callback);
1502
+ }
1503
+ off(event, callback) {
1504
+ if (callback) {
1505
+ this.socket?.off(event, callback);
1506
+ }
1507
+ else {
1508
+ this.socket?.off(event);
1509
+ }
1510
+ }
1511
+ get connected() {
1512
+ return this.socket?.connected ?? false;
1513
+ }
1514
+ }
1515
+ class ReactNativeSocketAdapter {
1516
+ constructor() {
1517
+ this.socket = null;
1518
+ }
1519
+ async connect(url, options) {
1520
+ if (!isSocketIOAvailable()) {
1521
+ throw new Error('Socket.io-client não está disponível. Para React Native, instale: npm install socket.io-client');
1522
+ }
1523
+ const { io } = getSocketIO();
1524
+ return new Promise((resolve, reject) => {
1525
+ this.socket = io(url, {
1526
+ ...options,
1527
+ transports: ['websocket'],
1528
+ upgrade: false,
1529
+ autoConnect: true,
1530
+ });
1531
+ this.socket.on('connect', () => resolve());
1532
+ this.socket.on('connect_error', (error) => reject(error));
1533
+ });
1534
+ }
1535
+ disconnect() {
1536
+ if (this.socket) {
1537
+ this.socket.disconnect();
1538
+ this.socket = null;
1539
+ }
1540
+ }
1541
+ emit(event, data) {
1542
+ this.socket?.emit(event, data);
1543
+ }
1544
+ on(event, callback) {
1545
+ this.socket?.on(event, callback);
1546
+ }
1547
+ off(event, callback) {
1548
+ if (callback) {
1549
+ this.socket?.off(event, callback);
1550
+ }
1551
+ else {
1552
+ this.socket?.off(event);
1553
+ }
1554
+ }
1555
+ get connected() {
1556
+ return this.socket?.connected ?? false;
1557
+ }
1558
+ }
1559
+ function createSocketAdapter() {
1560
+ const env = getEnvironment();
1561
+ switch (env) {
1562
+ case 'react-native':
1563
+ return new ReactNativeSocketAdapter();
1564
+ case 'browser':
1565
+ case 'node':
1566
+ default:
1567
+ return new WebSocketAdapter();
1568
+ }
1569
+ }
1570
+
1571
+ class RealtimeClient {
1572
+ constructor(url, apiKey, options = {}) {
1573
+ this.socket = null;
1574
+ this.channels = new Map();
1575
+ this.connectionState = 'disconnected';
1576
+ this.reconnectAttempts = 0;
1577
+ this.maxReconnectAttempts = 5;
1578
+ this.url = url;
1579
+ this.apiKey = apiKey;
1580
+ this.options = {
1581
+ heartbeatInterval: 30000,
1582
+ reconnectInterval: 5000,
1583
+ maxReconnectAttempts: 5,
1584
+ ...options
1585
+ };
1586
+ this.socketAdapter = createSocketAdapter();
1587
+ }
1588
+ connect() {
1589
+ return new Promise(async (resolve, reject) => {
1590
+ if (this.socketAdapter.connected) {
1591
+ resolve();
1592
+ return;
1593
+ }
1594
+ this.connectionState = 'connecting';
1595
+ try {
1596
+ await this.socketAdapter.connect(this.url, {
1597
+ auth: {
1598
+ apikey: this.apiKey
1599
+ },
1600
+ transports: ['websocket'],
1601
+ reconnection: true,
1602
+ reconnectionDelay: this.options.reconnectInterval,
1603
+ reconnectionAttempts: this.options.maxReconnectAttempts,
1604
+ ...this.options.socketOptions
1605
+ });
1606
+ this.socket = this.socketAdapter.socket;
1607
+ this.socketAdapter.on('connect', () => {
1608
+ this.connectionState = 'connected';
1609
+ this.reconnectAttempts = 0;
1610
+ this.setupHeartbeat();
1611
+ resolve();
1612
+ });
1613
+ this.socketAdapter.on('disconnect', () => {
1614
+ this.connectionState = 'disconnected';
1615
+ this.channels.forEach(channel => {
1616
+ channel._setState('closed');
1617
+ });
1618
+ });
1619
+ this.socketAdapter.on('connect_error', (error) => {
1620
+ this.connectionState = 'error';
1621
+ this.reconnectAttempts++;
1622
+ if (this.reconnectAttempts >= this.maxReconnectAttempts) {
1623
+ reject(new Error(`Failed to connect after ${this.maxReconnectAttempts} attempts: ${error.message}`));
1624
+ }
1625
+ });
1626
+ this.socketAdapter.on('reconnect', () => {
1627
+ this.connectionState = 'connected';
1628
+ this.reconnectAttempts = 0;
1629
+ this.channels.forEach(channel => {
1630
+ channel._rejoin();
1631
+ });
1632
+ });
1633
+ this.socketAdapter.on('postgres_changes', (payload) => {
1634
+ const channel = this.channels.get(payload.topic);
1635
+ if (channel) {
1636
+ channel._trigger('postgres_changes', payload);
1637
+ }
1638
+ });
1639
+ this.socketAdapter.on('broadcast', (payload) => {
1640
+ const channel = this.channels.get(payload.topic);
1641
+ if (channel) {
1642
+ channel._trigger('broadcast', payload);
1643
+ }
1644
+ });
1645
+ this.socketAdapter.on('presence', (payload) => {
1646
+ const channel = this.channels.get(payload.topic);
1647
+ if (channel) {
1648
+ channel._trigger('presence', payload);
1649
+ }
1650
+ });
1651
+ }
1652
+ catch (error) {
1653
+ this.connectionState = 'error';
1654
+ reject(error);
1655
+ }
1656
+ });
1657
+ }
1658
+ disconnect() {
1659
+ if (this.socketAdapter) {
1660
+ this.socketAdapter.disconnect();
1661
+ this.socket = null;
1662
+ }
1663
+ this.connectionState = 'disconnected';
1664
+ this.channels.clear();
1665
+ }
1666
+ channel(topic) {
1667
+ if (this.channels.has(topic)) {
1668
+ return this.channels.get(topic);
1669
+ }
1670
+ const channel = new RealtimeChannel(topic, this.socket);
1671
+ this.channels.set(topic, channel);
1672
+ if (this.connectionState === 'connected') {
1673
+ channel._join();
1674
+ }
1675
+ return channel;
1676
+ }
1677
+ removeChannel(channel) {
1678
+ const topic = channel.topic;
1679
+ if (this.channels.has(topic)) {
1680
+ this.channels.delete(topic);
1681
+ channel.unsubscribe();
1682
+ }
1683
+ }
1684
+ removeAllChannels() {
1685
+ this.channels.forEach(channel => {
1686
+ channel.unsubscribe();
1687
+ });
1688
+ this.channels.clear();
1689
+ }
1690
+ getChannels() {
1691
+ return Array.from(this.channels.values());
1692
+ }
1693
+ isConnected() {
1694
+ return this.connectionState === 'connected' && this.socketAdapter.connected;
1695
+ }
1696
+ getConnectionState() {
1697
+ return this.connectionState;
1698
+ }
1699
+ onConnectionStateChange(callback) {
1700
+ const handler = () => callback(this.connectionState);
1701
+ if (this.socketAdapter) {
1702
+ this.socketAdapter.on('connect', () => {
1703
+ this.connectionState = 'connected';
1704
+ handler();
1705
+ });
1706
+ this.socketAdapter.on('disconnect', () => {
1707
+ this.connectionState = 'disconnected';
1708
+ handler();
1709
+ });
1710
+ this.socketAdapter.on('connect_error', () => {
1711
+ this.connectionState = 'error';
1712
+ handler();
1713
+ });
1714
+ }
1715
+ return () => {
1716
+ if (this.socketAdapter) {
1717
+ this.socketAdapter.off('connect', handler);
1718
+ this.socketAdapter.off('disconnect', handler);
1719
+ this.socketAdapter.off('connect_error', handler);
1720
+ }
1721
+ };
1722
+ }
1723
+ setupHeartbeat() {
1724
+ if (!this.options.heartbeatInterval || !this.socketAdapter)
1725
+ return;
1726
+ const interval = setInterval(() => {
1727
+ if (this.socketAdapter?.connected) {
1728
+ this.socketAdapter.emit('heartbeat', { timestamp: Date.now() });
1729
+ }
1730
+ else {
1731
+ clearInterval(interval);
1732
+ }
1733
+ }, this.options.heartbeatInterval);
1734
+ }
1735
+ _getSocket() {
1736
+ return this.socket;
1737
+ }
1738
+ }
1739
+
1740
+ class FunctionsClient {
1741
+ constructor(httpClient) {
1742
+ this.httpClient = httpClient;
1743
+ }
1744
+ async invoke(functionName, options) {
1745
+ try {
1746
+ const method = options?.method || 'POST';
1747
+ const headers = {
1748
+ 'Content-Type': 'application/json',
1749
+ ...options?.headers
1750
+ };
1751
+ let response;
1752
+ const url = `/functions/v1/${functionName}`;
1753
+ switch (method.toUpperCase()) {
1754
+ case 'GET':
1755
+ response = await this.httpClient.get(url, {
1756
+ headers,
1757
+ params: options?.body
1758
+ });
1759
+ break;
1760
+ case 'POST':
1761
+ response = await this.httpClient.post(url, options?.body, { headers });
1762
+ break;
1763
+ case 'PUT':
1764
+ response = await this.httpClient.put(url, options?.body, { headers });
1765
+ break;
1766
+ case 'PATCH':
1767
+ response = await this.httpClient.patch(url, options?.body, { headers });
1768
+ break;
1769
+ case 'DELETE':
1770
+ response = await this.httpClient.delete(url, {
1771
+ headers,
1772
+ data: options?.body
1773
+ });
1774
+ break;
1775
+ default:
1776
+ throw new EBaaSError(`Unsupported HTTP method: ${method}`, 400);
1777
+ }
1778
+ return {
1779
+ data: response.data,
1780
+ error: null
1781
+ };
1782
+ }
1783
+ catch (error) {
1784
+ return {
1785
+ data: null,
1786
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Function invocation failed', 0, error)
1787
+ };
1788
+ }
1789
+ }
1790
+ async list() {
1791
+ try {
1792
+ const response = await this.httpClient.get('/functions/v1');
1793
+ return {
1794
+ data: response.data,
1795
+ error: null
1796
+ };
1797
+ }
1798
+ catch (error) {
1799
+ return {
1800
+ data: null,
1801
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to list functions', 0, error)
1802
+ };
1803
+ }
1804
+ }
1805
+ async get(functionName) {
1806
+ try {
1807
+ const response = await this.httpClient.get(`/functions/v1/${functionName}/info`);
1808
+ return {
1809
+ data: response.data,
1810
+ error: null
1811
+ };
1812
+ }
1813
+ catch (error) {
1814
+ return {
1815
+ data: null,
1816
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get function', 0, error)
1817
+ };
1818
+ }
1819
+ }
1820
+ async deploy(functionName, options) {
1821
+ try {
1822
+ const formData = new FormData();
1823
+ if (options.code instanceof File) {
1824
+ formData.append('code', options.code);
1825
+ }
1826
+ else if (typeof options.code === 'string') {
1827
+ formData.append('code', new Blob([options.code], { type: 'text/plain' }), 'index.ts');
1828
+ }
1829
+ if (options.entrypoint) {
1830
+ formData.append('entrypoint', options.entrypoint);
1831
+ }
1832
+ if (options.env) {
1833
+ formData.append('env', JSON.stringify(options.env));
1834
+ }
1835
+ if (options.importMap) {
1836
+ formData.append('importMap', JSON.stringify(options.importMap));
1837
+ }
1838
+ if (options.verify !== undefined) {
1839
+ formData.append('verify', String(options.verify));
1840
+ }
1841
+ const response = await this.httpClient.post(`/functions/v1/${functionName}/deploy`, formData, {
1842
+ headers: {
1843
+ 'Content-Type': 'multipart/form-data'
1844
+ }
1845
+ });
1846
+ return {
1847
+ data: response.data,
1848
+ error: null
1849
+ };
1850
+ }
1851
+ catch (error) {
1852
+ return {
1853
+ data: null,
1854
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to deploy function', 0, error)
1855
+ };
1856
+ }
1857
+ }
1858
+ async delete(functionName) {
1859
+ try {
1860
+ const response = await this.httpClient.delete(`/functions/v1/${functionName}`);
1861
+ return {
1862
+ data: response.data,
1863
+ error: null
1864
+ };
1865
+ }
1866
+ catch (error) {
1867
+ return {
1868
+ data: null,
1869
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to delete function', 0, error)
1870
+ };
1871
+ }
1872
+ }
1873
+ async updateEnv(functionName, env) {
1874
+ try {
1875
+ const response = await this.httpClient.put(`/functions/v1/${functionName}/env`, { env });
1876
+ return {
1877
+ data: response.data,
1878
+ error: null
1879
+ };
1880
+ }
1881
+ catch (error) {
1882
+ return {
1883
+ data: null,
1884
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to update function environment', 0, error)
1885
+ };
1886
+ }
1887
+ }
1888
+ async getLogs(functionName, options) {
1889
+ try {
1890
+ const params = new URLSearchParams();
1891
+ if (options?.limit) {
1892
+ params.append('limit', String(options.limit));
1893
+ }
1894
+ if (options?.offset) {
1895
+ params.append('offset', String(options.offset));
1896
+ }
1897
+ if (options?.level) {
1898
+ params.append('level', options.level);
1899
+ }
1900
+ const url = `/functions/v1/${functionName}/logs${params.toString() ? `?${params.toString()}` : ''}`;
1901
+ const response = await this.httpClient.get(url);
1902
+ return {
1903
+ data: response.data,
1904
+ error: null
1905
+ };
1906
+ }
1907
+ catch (error) {
1908
+ return {
1909
+ data: null,
1910
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get function logs', 0, error)
1911
+ };
1912
+ }
1913
+ }
1914
+ async getMetrics(functionName, options) {
1915
+ try {
1916
+ const params = new URLSearchParams();
1917
+ if (options?.period) {
1918
+ params.append('period', options.period);
1919
+ }
1920
+ const url = `/functions/v1/${functionName}/metrics${params.toString() ? `?${params.toString()}` : ''}`;
1921
+ const response = await this.httpClient.get(url);
1922
+ return {
1923
+ data: response.data,
1924
+ error: null
1925
+ };
1926
+ }
1927
+ catch (error) {
1928
+ return {
1929
+ data: null,
1930
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get function metrics', 0, error)
1931
+ };
1932
+ }
1933
+ }
1934
+ }
1935
+
1936
+ class EBaaSClient {
1937
+ constructor(supabaseUrl, supabaseKey, options) {
1938
+ this.options = options;
1939
+ // Initialize HTTP client
1940
+ this.httpClient = new HttpClient({
1941
+ url: supabaseUrl,
1942
+ apiKey: supabaseKey,
1943
+ timeout: 30000,
1944
+ headers: options?.global?.headers
1945
+ });
1946
+ // Initialize all modules
1947
+ this.auth = new AuthClient(this.httpClient, options?.database?.workspaceId);
1948
+ this.database = new DatabaseClient(this.httpClient, options?.database?.workspaceId, options?.rest?.url);
1949
+ this.storage = new StorageClient(this.httpClient);
1950
+ this.realtime = new RealtimeClient(supabaseUrl, supabaseKey, options?.realtime);
1951
+ this.functions = new FunctionsClient(this.httpClient);
1952
+ // Initialize custom database detection if enabled
1953
+ this.initializeCustomDatabase();
1954
+ }
1955
+ // Convenience method for database access
1956
+ from(table) {
1957
+ return this.database.from(table);
1958
+ }
1959
+ // Convenience method for RPC calls
1960
+ rpc(fn, args) {
1961
+ return this.database.rpc(fn, args);
1962
+ }
1963
+ // Convenience method for storage bucket access
1964
+ bucket(id) {
1965
+ return this.storage.from(id);
1966
+ }
1967
+ // Convenience method for realtime channel access
1968
+ channel(name) {
1969
+ return this.realtime.channel(name);
1970
+ }
1971
+ // Convenience method for edge functions
1972
+ invoke(functionName, options) {
1973
+ return this.functions.invoke(functionName, options);
1974
+ }
1975
+ /**
1976
+ * Inicializa a detecção automática de banco customizado
1977
+ */
1978
+ async initializeCustomDatabase() {
1979
+ if (this.options?.database?.autoDetectCustomDatabase) {
1980
+ try {
1981
+ await this.database.initialize();
1982
+ }
1983
+ catch (error) {
1984
+ console.warn('Failed to initialize custom database detection:', error);
1985
+ }
1986
+ }
1987
+ }
1988
+ /**
1989
+ * Atualiza o workspace ID para todos os módulos que precisam
1990
+ */
1991
+ async setWorkspaceId(workspaceId) {
1992
+ this.auth.setWorkspaceId(workspaceId);
1993
+ this.database.setWorkspaceId(workspaceId);
1994
+ // Se auto-detecção estiver habilitada, re-detecta configuração para o novo workspace
1995
+ if (this.options?.database?.autoDetectCustomDatabase) {
1996
+ await this.database.initialize();
1997
+ }
1998
+ }
1999
+ /**
2000
+ * Configura credenciais customizadas diretamente
2001
+ */
2002
+ async configureCustomDatabase(credentials) {
2003
+ await this.database.configureCustomDatabase(credentials);
2004
+ }
2005
+ /**
2006
+ * Retorna informações sobre o banco customizado
2007
+ */
2008
+ getCustomDatabaseStatus() {
2009
+ return this.database.getCustomDatabaseStatus();
2010
+ }
2011
+ }
2012
+ // Factory function similar to Supabase's createClient
2013
+ function createClient(supabaseUrl, supabaseKey, options) {
2014
+ return new EBaaSClient(supabaseUrl, supabaseKey, options);
2015
+ }
2016
+
2017
+ // Main client export
2018
+ // Version
2019
+ const version = "1.1.8";
2020
+
2021
+ export { AuthClient, CustomDatabaseManager, DatabaseClient, EBaaSClient, EBaaSError, FunctionsClient, HttpClient, QueryBuilder, RealtimeChannel, RealtimeClient, StorageBucket, StorageClient, createClient, version };
2022
+ //# sourceMappingURL=index.esm.js.map