@e-techsolutions/e-baas-sdk 1.2.0 → 1.2.2

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,2072 @@
1
- (function(stringArrayFunction,comparisonValue){const stringArray=stringArrayFunction();function _0x27fc1b(_0x13daec,_0x545080){return _0x46d3(_0x13daec-0x309,_0x545080);}while(!![]){try{const _0x7a8ed8=-parseInt(_0x27fc1b(0x482,0x446))/0x1+parseInt(_0x27fc1b(0x55d,0x5cf))/0x2*(-parseInt(_0x27fc1b(0x466,0x40c))/0x3)+-parseInt(_0x27fc1b(0x51c,0x589))/0x4+parseInt(_0x27fc1b(0x49e,0x50c))/0x5*(-parseInt(_0x27fc1b(0x4d7,0x507))/0x6)+-parseInt(_0x27fc1b(0x54a,0x54a))/0x7*(parseInt(_0x27fc1b(0x4b2,0x50a))/0x8)+parseInt(_0x27fc1b(0x4b1,0x4b7))/0x9+parseInt(_0x27fc1b(0x478,0x3f1))/0xa;if(_0x7a8ed8===comparisonValue)break;else stringArray['push'](stringArray['shift']());}catch(_0x498775){stringArray['push'](stringArray['shift']());}}}(_0x1ed3,0xb4896));import axios from'axios';function _0x46d3(_0x4b98e2,_0x4220ff){const _0x1ed34a=_0x1ed3();return _0x46d3=function(_0x46d366,_0x5a555f){_0x46d366=_0x46d366-0x14d;let _0x9f5936=_0x1ed34a[_0x46d366];if(_0x46d3['SWDoWb']===undefined){var _0x3a3327=function(_0x46e9df){const _0x2b9a15='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xd92010='',_0x39eb4e='';for(let _0x13b141=0x0,_0x49db59,_0x423aab,_0x1427ae=0x0;_0x423aab=_0x46e9df['charAt'](_0x1427ae++);~_0x423aab&&(_0x49db59=_0x13b141%0x4?_0x49db59*0x40+_0x423aab:_0x423aab,_0x13b141++%0x4)?_0xd92010+=String['fromCharCode'](0xff&_0x49db59>>(-0x2*_0x13b141&0x6)):0x0){_0x423aab=_0x2b9a15['indexOf'](_0x423aab);}for(let _0x4942ab=0x0,_0x24a908=_0xd92010['length'];_0x4942ab<_0x24a908;_0x4942ab++){_0x39eb4e+='%'+('00'+_0xd92010['charCodeAt'](_0x4942ab)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x39eb4e);};_0x46d3['IfoNgL']=_0x3a3327,_0x4b98e2=arguments,_0x46d3['SWDoWb']=!![];}const _0x3320aa=_0x1ed34a[0x0],_0x52b71f=_0x46d366+_0x3320aa,_0x5cd24b=_0x4b98e2[_0x52b71f];return!_0x5cd24b?(_0x9f5936=_0x46d3['IfoNgL'](_0x9f5936),_0x4b98e2[_0x52b71f]=_0x9f5936):_0x9f5936=_0x5cd24b,_0x9f5936;},_0x46d3(_0x4b98e2,_0x4220ff);}class EBaaSError extends Error{constructor(_0x46e9df,status=0x0,_0x2b9a15){super(_0x46e9df),this['name']='EBaaSError';function _0x2c88e2(_0x3af8ab,_0x5a60a0){return _0x46d3(_0x5a60a0-0x1b1,_0x3af8ab);}this[_0x2c88e2(0x358,0x309)]=status,this[_0x2c88e2(0x437,0x408)]=_0x2b9a15,Error['captureStackTrace']&&Error['captureStackTrace'](this,EBaaSError);}['toJSON'](){function _0x413905(_0x111034,_0x168b04){return _0x46d3(_0x111034- -0x143,_0x168b04);}return{'name':this[_0x413905(0x1b,0x9d)],'message':this['message'],'status':this[_0x413905(0x15,0x6e)],'details':this[_0x413905(0x114,0x96)],'stack':this[_0x413905(0x120,0x132)]};}[_0x294921(-0xa,-0x21)](){function _0x18650d(_0xc0e78d,_0x41d469){return _0x46d3(_0xc0e78d- -0x2f9,_0x41d469);}return this['name']+':\x20'+this['message']+_0x18650d(-0x134,-0xc7)+this['status']+')';}}class HttpClient{constructor(config){this['baseURL']=config[_0x19c64a(0x28a,0x2a7)],this[_0x19c64a(0x38d,0x35e)]=config[_0x19c64a(0x37d,0x35e)];function _0x19c64a(_0x17e5d4,_0x3eaad4){return _0x46d3(_0x3eaad4-0x151,_0x17e5d4);}this['client']=axios[_0x19c64a(0x3b6,0x39a)]({'baseURL':this['baseURL'],'timeout':config[_0x19c64a(0x33c,0x32b)]||0x2710,'headers':{'Content-Type':'application/json','apikey':this['apiKey'],...config['headers']}}),this[_0x19c64a(0x315,0x321)]();}[_0x294921(-0x4d,0x22)](){this['client']['interceptors']['request']['use'](config=>{return config;},_0xd92010=>{function _0xa174ec(_0x49b344,_0x455f87){return _0x46d3(_0x455f87- -0x2a5,_0x49b344);}return Promise[_0xa174ec(-0xa4,-0xe9)](new EBaaSError('Request\x20failed',0x0,_0xd92010));});function _0x30e2e3(_0x5df2b2,_0xc56c7f){return _0x46d3(_0x5df2b2- -0x3a7,_0xc56c7f);}this[_0x30e2e3(-0x1d4,-0x19c)]['interceptors']['response'][_0x30e2e3(-0x1de,-0x221)](response=>{return response;},_0x39eb4e=>{const status=_0x39eb4e[_0x45db50(0x19a,0x1e8)]?.['status']||0x0,_0x13b141=_0x39eb4e['response']?.['data']?.['message']||_0x39eb4e[_0x45db50(0x286,0x258)]||'Unknown\x20error',_0x49db59=_0x39eb4e['response']?.[_0x45db50(0x17a,0x1bd)]||_0x39eb4e;function _0x45db50(_0xf60450,_0x182318){return _0x46d3(_0x182318- -0x4,_0xf60450);}return Promise['reject'](new EBaaSError(_0x13b141,status,_0x49db59));});}async['get'](_0x423aab,config){function _0xce36d1(_0x51cb18,_0x19e0a7){return _0x46d3(_0x51cb18- -0xe3,_0x19e0a7);}try{const response=await this['client'][_0xce36d1(0x14c,0x169)](_0x423aab,config);return{'data':response[_0xce36d1(0xde,0x140)],'status':response[_0xce36d1(0x75,0xfd)],'statusText':response['statusText'],'headers':response['headers']};}catch(_0x1427ae){throw this['handleError'](_0x1427ae);}}async[_0x294921(-0x4f,-0x3d)](_0x4942ab,data,config){function _0x66bb5d(_0x10f6bf,_0x2edba4){return _0x46d3(_0x10f6bf- -0x229,_0x2edba4);}try{const response=await this[_0x66bb5d(-0x56,-0xba)]['post'](_0x4942ab,data,config);return{'data':response[_0x66bb5d(-0x68,-0x3e)],'status':response[_0x66bb5d(-0xd1,-0x14b)],'statusText':response[_0x66bb5d(-0x28,0xf)],'headers':response['headers']};}catch(_0x24a908){throw this[_0x66bb5d(-0x7a,-0x40)](_0x24a908);}}async[_0x294921(-0x33,-0x4e)](_0x5d9fc9,data,config){function _0x36b4eb(_0x39d0ec,_0x56bace){return _0x46d3(_0x56bace-0xaf,_0x39d0ec);}try{const response=await this[_0x36b4eb(0x27a,0x282)]['put'](_0x5d9fc9,data,config);return{'data':response[_0x36b4eb(0x287,0x270)],'status':response['status'],'statusText':response['statusText'],'headers':response['headers']};}catch(_0x51f9e5){throw this['handleError'](_0x51f9e5);}}async['patch'](_0x4b61cc,data,config){function _0x398b73(_0x5018d5,_0x8d6328){return _0x46d3(_0x5018d5- -0x301,_0x8d6328);}try{const response=await this['client']['patch'](_0x4b61cc,data,config);return{'data':response['data'],'status':response[_0x398b73(-0x1a9,-0x1e3)],'statusText':response[_0x398b73(-0x100,-0x8a)],'headers':response[_0x398b73(-0x1a7,-0x155)]};}catch(_0x6a438){throw this[_0x398b73(-0x152,-0x1c0)](_0x6a438);}}async[_0x294921(0x4b,-0x2a)](_0x24db05,config){function _0x1f0122(_0x54aa37,_0x2d3539){return _0x46d3(_0x2d3539- -0x37f,_0x54aa37);}try{const response=await this[_0x1f0122(-0x1a3,-0x1ac)][_0x1f0122(-0x179,-0x1fb)](_0x24db05,config);return{'data':response['data'],'status':response['status'],'statusText':response['statusText'],'headers':response[_0x1f0122(-0x279,-0x225)]};}catch(_0x55eace){throw this['handleError'](_0x55eace);}}[_0x294921(0x19,0x89)](_0x1fe112){function _0x888845(_0x4973db,_0x487777){return _0x46d3(_0x4973db-0x326,_0x487777);}this[_0x888845(0x4f9,0x48b)][_0x888845(0x56b,0x57a)][_0x888845(0x480,0x400)]['common']['Authorization']=_0x888845(0x4a9,0x502)+_0x1fe112;}[_0x294921(0x70,0x21)](){function _0x28d1c4(_0x221b8e,_0x2b9991){return _0x46d3(_0x2b9991- -0x13d,_0x221b8e);}delete this[_0x28d1c4(0x70,0x96)][_0x28d1c4(0xd9,0x108)]['headers'][_0x28d1c4(0x193,0x10b)]['Authorization'],this['client']['defaults'][_0x28d1c4(0x1f,0x1d)]['common']['Authorization']='Bearer\x20'+this[_0x28d1c4(0x12c,0xd0)];}['handleError'](_0x123f33){if(_0x123f33 instanceof EBaaSError)return _0x123f33;function _0x52f111(_0x15d296,_0x1f4e8e){return _0x46d3(_0x15d296-0x35c,_0x1f4e8e);}return new EBaaSError(_0x123f33[_0x52f111(0x5b8,0x52e)]||'HTTP\x20request\x20failed',_0x123f33[_0x52f111(0x4b4,0x464)]||0x0,_0x123f33);}}class AuthClient{constructor(_0x3454ed,_0x196b50){function _0x3795f6(_0x45ea0e,_0x377424){return _0x46d3(_0x377424-0x2b4,_0x45ea0e);}this['currentSession']=null,this[_0x3795f6(0x40e,0x467)]=_0x3454ed,this[_0x3795f6(0x44c,0x474)]=_0x196b50,this['loadSession']();}async['signUp'](data){function _0x507409(_0xcf53f4,_0xa77c86){return _0x46d3(_0xcf53f4-0x258,_0xa77c86);}try{const response=await this['httpClient'][_0x507409(0x3c9,0x455)]('/auth/v1/signup',data);return response[_0x507409(0x419,0x444)]['session']&&this['setSessionInternal'](response['data']['session']),response[_0x507409(0x419,0x4a3)];}catch(_0x51a8f7){throw this['handleAuthError'](_0x51a8f7);}}async[_0x294921(0x3a,0x55)](data){function _0x27137c(_0x583e22,_0x1e2cd1){return _0x46d3(_0x583e22- -0x313,_0x1e2cd1);}try{const headers={};this['workspaceId']&&(headers['X-Workspace-ID']=this['workspaceId']);const response=await this['httpClient']['post']('/auth/v1/sdk/signin',data,{'headers':headers});return response['data']['session']&&this[_0x27137c(-0x1b8,-0x133)](response['data']['session']),response[_0x27137c(-0x152,-0x174)];}catch(_0x45f9c3){throw this[_0x27137c(-0x10c,-0x13a)](_0x45f9c3);}}async['signOut'](){function _0x462eae(_0x258661,_0x1f2ad1){return _0x46d3(_0x1f2ad1-0x193,_0x258661);}try{await this['httpClient']['post']('/auth/v1/signout'),this[_0x462eae(0x3af,0x3d9)]();}catch(_0x2ca483){this[_0x462eae(0x36c,0x3d9)]();throw this['handleAuthError'](_0x2ca483);}}async[_0x294921(0x111,0xaa)](){if(!this[_0x43654b(0x352,0x34b)]?.['access_token'])return null;function _0x43654b(_0x1d5af1,_0x3d80cc){return _0x46d3(_0x3d80cc-0x1fc,_0x1d5af1);}try{const response=await this[_0x43654b(0x331,0x3af)]['get'](_0x43654b(0x426,0x39d));return response['data'][_0x43654b(0x42c,0x443)];}catch(_0x586832){if(_0x586832 instanceof EBaaSError&&_0x586832['status']===0x191)return this['clearSession'](),null;throw this[_0x43654b(0x41e,0x403)](_0x586832);}}async['refreshSession'](){function _0x39d02e(_0x53596,_0x58dc3d){return _0x46d3(_0x53596-0x2d4,_0x58dc3d);}if(!this['currentSession']?.[_0x39d02e(0x4ad,0x495)])return null;try{const response=await this['httpClient'][_0x39d02e(0x445,0x47b)]('/auth/v1/refresh',{'refresh_token':this[_0x39d02e(0x423,0x435)]['refresh_token']});if(response[_0x39d02e(0x495,0x49a)][_0x39d02e(0x4eb,0x4e2)])return this[_0x39d02e(0x4f7,0x580)](response[_0x39d02e(0x495,0x495)][_0x39d02e(0x4eb,0x517)]),response['data']['session'];return null;}catch(_0x5f1238){this[_0x39d02e(0x51a,0x592)]();throw this['handleAuthError'](_0x5f1238);}}async[_0x294921(0x23,0xaf)](_0x398042){function _0x546d19(_0x572d9e,_0x45d955){return _0x46d3(_0x572d9e- -0x365,_0x45d955);}try{await this['httpClient'][_0x546d19(-0x1f4,-0x1b0)](_0x546d19(-0x178,-0x140),{'email':_0x398042});}catch(_0x48860b){throw this['handleAuthError'](_0x48860b);}}async[_0x294921(0x18,0x50)](data){function _0x240698(_0x2c3616,_0x3bf6b1){return _0x46d3(_0x2c3616-0x1a0,_0x3bf6b1);}try{const response=await this['httpClient']['put']('/auth/v1/user',data);return response[_0x240698(0x361,0x3a2)]['user'];}catch(_0xfbdf38){throw this['handleAuthError'](_0xfbdf38);}}['getSession'](){function _0x316303(_0x5d6767,_0x26f4c7){return _0x46d3(_0x5d6767-0x2c,_0x26f4c7);}return this[_0x316303(0x17b,0x114)];}[_0x294921(0x68,0x75)](_0x58055b){this['currentSession']=_0x58055b,this['httpClient']['setAuthToken'](_0x58055b['access_token']);function _0x3f60e2(_0x127185,_0x399bcd){return _0x46d3(_0x127185-0x3b0,_0x399bcd);}typeof localStorage!==_0x3f60e2(0x582,0x5b6)&&localStorage[_0x3f60e2(0x572,0x54b)]('ebaas.auth.session',JSON['stringify'](_0x58055b));}[_0x294921(-0xa5,-0x2e)](_0x3aea47){return()=>{};}[_0x294921(0xa,-0x27)](_0x5c9cf5){function _0x3a2721(_0x2e8db3,_0x32c2a4){return _0x46d3(_0x32c2a4-0x213,_0x2e8db3);}this[_0x3a2721(0x399,0x3d3)]=_0x5c9cf5;}[_0x294921(-0x27,-0x53)](_0x11b980){function _0x396711(_0x360952,_0x4a2752){return _0x46d3(_0x4a2752- -0x384,_0x360952);}this[_0x396711(-0x1ab,-0x235)]=_0x11b980,this[_0x396711(-0x16a,-0x1d1)]['setAuthToken'](_0x11b980['access_token']),typeof localStorage!==_0x396711(-0x203,-0x1b2)&&localStorage['setItem'](_0x396711(-0x12f,-0x154),JSON[_0x396711(-0x262,-0x228)](_0x11b980));}[_0x294921(0x88,0x98)](){this[_0x1fd3bc(0xff,0xd6)]=null,this['httpClient'][_0x1fd3bc(0x1ac,0x156)]();function _0x1fd3bc(_0x3c81f8,_0x5cef3c){return _0x46d3(_0x5cef3c- -0x79,_0x3c81f8);}typeof localStorage!==_0x1fd3bc(0x18f,0x159)&&localStorage[_0x1fd3bc(0xaa,0x111)]('ebaas.auth.session');}['loadSession'](){function _0xd6881d(_0x91fdb2,_0x5ded93){return _0x46d3(_0x91fdb2- -0x121,_0x5ded93);}if(typeof localStorage!==_0xd6881d(0xb1,0x82)){const _0xf8e11f=localStorage['getItem']('ebaas.auth.session');if(_0xf8e11f)try{const _0x372407=JSON['parse'](_0xf8e11f);this[_0xd6881d(0x3a,0x7e)](_0x372407);}catch(_0x25b0b0){this[_0xd6881d(0x125,0xcc)]();}}}[_0x294921(0x6c,0x59)](_0x439fd6){if(_0x439fd6 instanceof EBaaSError)return _0x439fd6;return new EBaaSError(_0x439fd6['message']||'Authentication\x20failed',_0x439fd6['status']||0x0,_0x439fd6);}}class QueryBuilder{constructor(_0x4c616a,_0x2b18d3,_0x151c20,_0x461a59,_0x1e978c){this['httpClient']=_0x4c616a,this['table']=_0x2b18d3,this[_0x10f673(0x314,0x32e)]=_0x151c20,this['workspaceId']=_0x461a59;function _0x10f673(_0x36e538,_0x1b7206){return _0x46d3(_0x36e538-0xdc,_0x1b7206);}this[_0x10f673(0x24e,0x27d)]=_0x1e978c||'/sdk/v1',this[_0x10f673(0x2ed,0x2fc)]={'filters':[]};}[_0x294921(-0x44,-0x14)](_0x27c7d3='*',_0xa54851){function _0x537377(_0x54d9f9,_0x363a20){return _0x46d3(_0x363a20-0x6e,_0x54d9f9);}return this[_0x537377(0x2e5,0x27f)]['select']=_0x27c7d3,this;}[_0x294921(0x76,0x2)](data,_0x39fd46){function _0x4c376e(_0x30bfab,_0x14ee73){return _0x46d3(_0x30bfab-0x29c,_0x14ee73);}return this['executeQuery']('POST',this['restUrl']+'/'+this[_0x4c376e(0x498,0x461)]+_0x4c376e(0x453,0x429),{'data':data,'options':_0x39fd46});}[_0x294921(0x50,0x11)](data,_0x3e993c){this['query'][_0x30192b(-0x151,-0x196)]=data,this[_0x30192b(-0x18d,-0x1ec)]['updateOptions']=_0x3e993c;function _0x30192b(_0x107e1e,_0x6c451f){return _0x46d3(_0x107e1e- -0x39e,_0x6c451f);}return this;}['upsert'](data,_0x161097){function _0x4b0fe3(_0x14daeb,_0xbf18a5){return _0x46d3(_0xbf18a5-0x188,_0x14daeb);}return this[_0x4b0fe3(0x349,0x3c2)]('POST',this['restUrl']+'/'+this[_0x4b0fe3(0x3b0,0x384)]+_0x4b0fe3(0x355,0x38d),{'data':data,'options':{..._0x161097,'upsert':!![]}});}[_0x294921(0x38,-0x2a)](_0x245f16){function _0x2b9412(_0x2f7119,_0x3cee9a){return _0x46d3(_0x3cee9a- -0x21f,_0x2f7119);}return this[_0x2b9412(0x7e,-0xe)][_0x2b9412(-0x106,-0x87)]=_0x245f16,this['query'][_0x2b9412(-0x1a,-0x49)]=!![],this;}['eq'](_0x4024a0,_0x5422f5){this[_0x205e16(0x3c,-0x34)]['filters']['push']({'column':_0x4024a0,'operator':'eq','value':_0x5422f5});function _0x205e16(_0x56c20d,_0x182315){return _0x46d3(_0x56c20d- -0x1d5,_0x182315);}return this;}['neq'](_0x20b8e1,_0x4bb2bc){this[_0x4a8459(0x36c,0x383)][_0x4a8459(0x3d7,0x38b)][_0x4a8459(0x398,0x336)]({'column':_0x20b8e1,'operator':'neq','value':_0x4bb2bc});function _0x4a8459(_0x59d5d4,_0x4efd15){return _0x46d3(_0x4efd15-0x172,_0x59d5d4);}return this;}['gt'](_0x3c4032,_0x494e9f){this['query']['filters'][_0xbf7d3d(0x52d,0x58c)]({'column':_0x3c4032,'operator':'gt','value':_0x494e9f});function _0xbf7d3d(_0x4f7ad8,_0x14bdac){return _0x46d3(_0x14bdac-0x3c8,_0x4f7ad8);}return this;}[_0x294921(0xbf,0x7a)](_0x249400,_0x21a002){function _0x4dc382(_0x166111,_0x4af1fb){return _0x46d3(_0x166111- -0x1e5,_0x4af1fb);}return this[_0x4dc382(0x2c,0xa9)][_0x4dc382(0x34,0x58)]['push']({'column':_0x249400,'operator':_0x4dc382(0x43,-0x11),'value':_0x21a002}),this;}['lt'](_0x6d19c9,_0x7e86db){this[_0xff8829(0x235,0x2a6)]['filters'][_0xff8829(0x1e8,0x178)]({'column':_0x6d19c9,'operator':'lt','value':_0x7e86db});function _0xff8829(_0x168478,_0x25d628){return _0x46d3(_0x168478-0x24,_0x25d628);}return this;}['lte'](_0x1abe3f,_0x1eb1d4){function _0x935c19(_0x2fb795,_0x62ba07){return _0x46d3(_0x62ba07- -0x23a,_0x2fb795);}return this[_0x935c19(0x1f,-0x29)][_0x935c19(-0x16,-0x21)]['push']({'column':_0x1abe3f,'operator':_0x935c19(0x21,0x28),'value':_0x1eb1d4}),this;}['like'](_0x2112b7,_0x6ff611){function _0x1e72a4(_0x18257b,_0x34c9df){return _0x46d3(_0x34c9df-0xa4,_0x18257b);}return this['query']['filters'][_0x1e72a4(0x204,0x268)]({'column':_0x2112b7,'operator':_0x1e72a4(0x1ba,0x21c),'value':_0x6ff611}),this;}['ilike'](_0x5c8c35,_0x19b555){this[_0x526165(0x5e2,0x58c)]['filters']['push']({'column':_0x5c8c35,'operator':_0x526165(0x5b9,0x59d),'value':_0x19b555});function _0x526165(_0x28a756,_0x1fcc18){return _0x46d3(_0x28a756-0x3d1,_0x1fcc18);}return this;}['is'](_0x20b021,_0x5e78d5){this['query'][_0x44f8df(0x451,0x3f6)][_0x44f8df(0x3fc,0x410)]({'column':_0x20b021,'operator':'is','value':_0x5e78d5});function _0x44f8df(_0x276ffb,_0x369440){return _0x46d3(_0x276ffb-0x238,_0x369440);}return this;}['in'](_0x561173,_0x5b8d99){this[_0x183ce2(0xcf,0x129)][_0x183ce2(0x13b,0x131)]['push']({'column':_0x561173,'operator':'in','value':_0x5b8d99});function _0x183ce2(_0x2a8037,_0x4d7754){return _0x46d3(_0x4d7754- -0xe8,_0x2a8037);}return this;}[_0x294921(0x52,-0x2f)](_0x3af99b,_0xfdb906){this['query']['filters'][_0x41854f(0x5a1,0x600)]({'column':_0x3af99b,'operator':_0x41854f(0x55c,0x53f),'value':_0xfdb906});function _0x41854f(_0x15738a,_0x4a2974){return _0x46d3(_0x15738a-0x3dd,_0x4a2974);}return this;}[_0x294921(0x25,-0x61)](_0x9de57c){Object[_0x24ff13(0x388,0x34c)](_0x9de57c)['forEach'](([_0x1c03c0,_0x548139])=>{this['eq'](_0x1c03c0,_0x548139);});function _0x24ff13(_0x13984a,_0xce36e4){return _0x46d3(_0x13984a-0x18d,_0xce36e4);}return this;}[_0x294921(0xa3,0xa0)](_0x4f301d,_0x2f7ec4){!this['query'][_0x4b6114(-0x117,-0xc0)]&&(this['query']['order']=[]);this[_0x4b6114(-0x105,-0xfd)]['order']['push']({'column':_0x4f301d,'ascending':_0x2f7ec4?.['ascending']!==![]});function _0x4b6114(_0xf8871b,_0x2db352){return _0x46d3(_0x2db352- -0x30e,_0xf8871b);}return this;}[_0x294921(-0xcf,-0x5e)](count){return this['query']['limit']=count,this;}[_0x294921(0x29,-0x45)](from,_0x51c078){return this['query']['range']={'from':from,'to':_0x51c078},this;}async[_0x294921(0x7f,0x68)](){function _0x26f514(_0x243474,_0x766ee5){return _0x46d3(_0x766ee5-0x32b,_0x243474);}if(this[_0x26f514(0x5af,0x53c)]['updateData'])return this['executeQuery']('PATCH',this['restUrl']+'/'+this[_0x26f514(0x4f2,0x527)],{'data':this[_0x26f514(0x591,0x53c)]['updateData'],'options':this['query'][_0x26f514(0x582,0x53d)],'filters':this['query'][_0x26f514(0x516,0x544)]});else return this[_0x26f514(0x513,0x53c)][_0x26f514(0x4db,0x501)]?this['executeQuery']('DELETE',this[_0x26f514(0x41f,0x49d)]+'/'+this[_0x26f514(0x552,0x527)]+'?operation=delete',{'options':this['query'][_0x26f514(0x503,0x4c3)],'filters':this[_0x26f514(0x56c,0x53c)]['filters']}):this[_0x26f514(0x581,0x565)]('GET',this[_0x26f514(0x499,0x49d)]+'/'+this[_0x26f514(0x561,0x527)]+_0x26f514(0x57a,0x53f),{'select':this[_0x26f514(0x4fa,0x53c)][_0x26f514(0x4a5,0x4c5)],'filters':this['query'][_0x26f514(0x4fd,0x544)],'order':this['query']['order'],'limit':this['query']['limit'],'range':this[_0x26f514(0x504,0x53c)]['range']});}async[_0x294921(-0xad,-0x40)](){this['limit'](0x1);function _0x271d9c(_0x437dd9,_0x3fb1e8){return _0x46d3(_0x437dd9- -0x1e2,_0x3fb1e8);}const result=await this[_0x271d9c(0x34,0x26)]();return{'data':result['data']?.[0x0]||null,'error':result['error']};}async['executeQuery'](_0x3335f2,_0x16b908,_0x45771a){function _0x872c06(_0x493b71,_0x261836){return _0x46d3(_0x261836-0x264,_0x493b71);}try{let response;const headers={};this['workspaceId']&&(headers['x-workspace-id']=this['workspaceId']);if(_0x3335f2==='GET'){const _0x37681b=_0x16b908[_0x872c06(0x3d2,0x3e2)]('?'),_0x2187e7=_0x37681b[0x0],existingParams=new URLSearchParams(_0x37681b[0x1]||'');if(_0x45771a['select'])existingParams[_0x872c06(0x39d,0x416)](_0x872c06(0x3a5,0x3fe),_0x45771a[_0x872c06(0x375,0x3fe)]);_0x45771a[_0x872c06(0x4d8,0x47d)]?.['length']&&_0x45771a['filters']['forEach'](filter=>{function _0x56986f(_0x1102f5,_0x5d8117){return _0x46d3(_0x1102f5-0x368,_0x5d8117);}existingParams[_0x56986f(0x51a,0x4ae)](filter['column'],filter['operator']+'.'+filter[_0x56986f(0x532,0x4bf)]);});if(_0x45771a['order']?.[_0x872c06(0x3ef,0x403)]){const orderStr=_0x45771a[_0x872c06(0x4a4,0x4b2)][_0x872c06(0x40d,0x3c6)](_0x573b3d=>''+_0x573b3d['column']+(_0x573b3d['ascending']?_0x872c06(0x4ae,0x438):_0x872c06(0x484,0x402)))[_0x872c06(0x43e,0x45d)](',');existingParams[_0x872c06(0x433,0x416)](_0x872c06(0x475,0x4b2),orderStr);}if(_0x45771a['limit'])existingParams[_0x872c06(0x48b,0x416)](_0x872c06(0x421,0x3b4),_0x45771a['limit'][_0x872c06(0x393,0x3f1)]());_0x45771a['range']&&(existingParams[_0x872c06(0x459,0x416)]('offset',_0x45771a[_0x872c06(0x3d3,0x3cd)][_0x872c06(0x490,0x499)]['toString']()),existingParams[_0x872c06(0x43e,0x416)](_0x872c06(0x3b3,0x3b4),(_0x45771a[_0x872c06(0x44f,0x3cd)]['to']-_0x45771a['range']['from']+0x1)[_0x872c06(0x41b,0x3f1)]())),response=await this[_0x872c06(0x48b,0x417)]['get'](_0x2187e7+'?'+existingParams['toString'](),{'headers':headers});}else{if(_0x3335f2==='DELETE'){const _0x1710cb=_0x16b908['split']('?'),_0x5baa68=_0x1710cb[0x0],existingParams=new URLSearchParams(_0x1710cb[0x1]||'');!existingParams['has'](_0x872c06(0x41a,0x47c))&&existingParams['append']('operation','delete');_0x45771a['filters']?.[_0x872c06(0x37f,0x403)]&&_0x45771a['filters']['forEach'](filter=>{function _0x1c980e(_0x5e6e3a,_0x388b05){return _0x46d3(_0x388b05-0x1f2,_0x5e6e3a);}existingParams[_0x1c980e(0x341,0x3a4)](filter[_0x1c980e(0x3ae,0x383)],filter[_0x1c980e(0x3ab,0x3b5)]+'.'+filter[_0x1c980e(0x387,0x3bc)]);});const deleteUrl=_0x5baa68+'?'+existingParams['toString']();console[_0x872c06(0x460,0x46a)]('\uD83D\uDD27 DELETE URL construída:',deleteUrl),console[_0x872c06(0x4a5,0x46a)]('\uD83D\uDD27 DELETE headers:',headers),console['log']('\uD83D\uDD27 DELETE filtros originais:',_0x45771a['filters']),response=await this['httpClient'][_0x872c06(0x45e,0x3e8)](deleteUrl,{'headers':headers});}else{if(_0x3335f2==='PATCH'){const _0x5ef162=_0x16b908[_0x872c06(0x39b,0x3e2)]('?'),_0x5d4139=_0x5ef162[0x0],existingParams=new URLSearchParams(_0x5ef162[0x1]||'');!existingParams[_0x872c06(0x3b7,0x435)]('operation')&&existingParams[_0x872c06(0x3d1,0x416)]('operation',_0x872c06(0x3e2,0x423));_0x45771a['filters']?.['length']&&_0x45771a['filters'][_0x872c06(0x437,0x3c3)](filter=>{function _0x36aa56(_0x1826e2,_0x29797b){return _0x46d3(_0x29797b- -0x1df,_0x1826e2);}existingParams['append'](filter['column'],filter[_0x36aa56(0x62,-0x1c)]+'.'+filter[_0x36aa56(-0x34,-0x15)]);});_0x45771a['options']?.[_0x872c06(0x4f6,0x4c5)]&&(headers[_0x872c06(0x414,0x3e6)]=_0x45771a[_0x872c06(0x470,0x3f8)][_0x872c06(0x48e,0x4c5)]);const updateUrl=_0x5d4139+'?'+existingParams[_0x872c06(0x40a,0x3f1)]();response=await this['httpClient'][_0x872c06(0x40c,0x42a)](updateUrl,_0x45771a[_0x872c06(0x492,0x425)],{'headers':headers});}else{let _0x37b02b=_0x45771a[_0x872c06(0x436,0x425)];!headers['Prefer']&&(headers['Prefer']=_0x872c06(0x515,0x4b4)),_0x45771a['options']?.['upsert']&&(headers['Prefer']=_0x872c06(0x3a4,0x3e5)),_0x45771a[_0x872c06(0x3eb,0x3ef)]&&(_0x37b02b=_0x45771a[_0x872c06(0x3d0,0x3ef)]),response=await this[_0x872c06(0x3aa,0x417)][_0x872c06(0x34f,0x3d5)](_0x16b908,_0x37b02b,{'headers':headers});}}}return{'data':response['data'],'error':null,'count':response['headers']?.[_0x872c06(0x44b,0x3ff)]?parseInt(response[_0x872c06(0x347,0x3be)]['x-total-count']):undefined};}catch(_0x51de63){return{'data':null,'error':_0x51de63 instanceof EBaaSError?_0x51de63:new EBaaSError(_0x51de63 instanceof Error?_0x51de63[_0x872c06(0x526,0x4c0)]:_0x872c06(0x4c3,0x45c),0x0,_0x51de63)};}}}class CustomDatabaseManager{constructor(_0x1d3c77,_0x150e4c){this[_0x3a99df(0x149,0x1cd)]=_0x1d3c77;function _0x3a99df(_0x5872b1,_0xd61cb3){return _0x46d3(_0x5872b1- -0x6a,_0xd61cb3);}this['workspaceId']=_0x150e4c;}async[_0x294921(-0xc7,-0x46)](){function _0x4df875(_0x377714,_0x42a0c4){return _0x46d3(_0x377714-0x1e0,_0x42a0c4);}if(!this['workspaceId'])return{'hasCustomDatabase':![]};try{const response=await this['httpClient']['get']('/admin/v1/workspace/custom-database',{'headers':{'x-workspace-id':this[_0x4df875(0x3a0,0x360)]}});if(response['status']===0xc8&&response[_0x4df875(0x3a1,0x38a)]?.[_0x4df875(0x385,0x323)]){const config=response['data']['config'],_0x4f460f={'host':config[_0x4df875(0x35d,0x2f2)],'port':config[_0x4df875(0x40a,0x37f)],'database':config['postgresDatabase'],'username':config['postgresUsername'],'password':'','schema':config[_0x4df875(0x354,0x345)],'sslEnabled':config[_0x4df875(0x366,0x2f3)]};return this['detectedConfig']={'hasCustomDatabase':!![],'config':config,'credentials':_0x4f460f},this['detectedConfig'];}}catch(_0x51e3cd){if(_0x51e3cd?.[_0x4df875(0x338,0x2b5)]===0x194)return this['detectedConfig']={'hasCustomDatabase':![]},this[_0x4df875(0x43e,0x404)];console[_0x4df875(0x3d0,0x3b0)]('Failed to detect custom database configuration:',_0x51e3cd);}return this[_0x4df875(0x43e,0x43a)]={'hasCustomDatabase':![]},this['detectedConfig'];}async['testConnection'](_0x2dd835){function _0x4fbb1f(_0x2b6bbf,_0x3a2f9b){return _0x46d3(_0x2b6bbf- -0x170,_0x3a2f9b);}try{const response=await this[_0x4fbb1f(0x43,0x25)][_0x4fbb1f(0x1,-0x6)]('/admin/v1/workspace/custom-database/test-connection',_0x2dd835,{'headers':this['workspaceId']?{'X-Workspace-ID':this['workspaceId']}:{}});return response['data'];}catch(_0x4d2495){return{'success':![],'message':_0x4d2495?.['message']||'Failed\x20to\x20test\x20connection'};}}async['configureCustomDatabase'](_0x25f721){if(!this['workspaceId'])throw new Error('Workspace ID is required to configure custom database');const response=await this['httpClient'][_0x76b320(0x66,-0x1e)]('/admin/v1/workspace/custom-database',{'workspaceId':this[_0x76b320(-0x33,0x31)],..._0x25f721},{'headers':{'X-Workspace-ID':this[_0x76b320(0x66,0x31)]}});function _0x76b320(_0x376ec8,_0x27a3a5){return _0x46d3(_0x27a3a5- -0x18f,_0x376ec8);}const config=response[_0x76b320(0x79,0x32)][_0x76b320(0x6c,0x16)];return this['detectedConfig']={'hasCustomDatabase':!![],'config':config,'credentials':_0x25f721},config;}async[_0x294921(0x1a,-0xa)](){if(!this[_0x13fd17(0x98,0xe2)])throw new Error('Workspace ID is required to remove custom database');await this['httpClient'][_0x13fd17(0xf0,0xa6)]('/admin/v1/workspace/custom-database',{'headers':{'X-Workspace-ID':this[_0x13fd17(0xe2,0xe2)]}});function _0x13fd17(_0x422494,_0x29d9b6){return _0x46d3(_0x29d9b6- -0xde,_0x422494);}this[_0x13fd17(0x1e2,0x180)]={'hasCustomDatabase':![]};}[_0x294921(-0xc6,-0x3e)](){function _0x578cd0(_0xe53021,_0x2a8109){return _0x46d3(_0xe53021- -0x30e,_0x2a8109);}return this[_0x578cd0(-0xb0,-0xa6)];}['hasCustomDatabase'](){function _0x324c2c(_0x355d0a,_0x28f2d3){return _0x46d3(_0x355d0a-0x173,_0x28f2d3);}return this[_0x324c2c(0x3d1,0x43d)]?.[_0x324c2c(0x36a,0x32f)]??![];}[_0x294921(0x3b,0x73)](){function _0x12a9a7(_0x38a129,_0x1f1c5e){return _0x46d3(_0x38a129-0x22b,_0x1f1c5e);}return this[_0x12a9a7(0x489,0x4bb)]?.['credentials'];}['setWorkspaceId'](_0xbb9bab){this['workspaceId']=_0xbb9bab;function _0x3c26c0(_0x17a2cb,_0x36119a){return _0x46d3(_0x36119a-0x3e1,_0x17a2cb);}this[_0x3c26c0(0x687,0x63f)]=undefined;}['getWorkspaceId'](){return this['workspaceId'];}[_0x294921(-0x15,-0x4a)](){function _0x144d1b(_0x512e72,_0x558aec){return _0x46d3(_0x512e72-0x3ab,_0x558aec);}return{'workspaceId':this['workspaceId'],'hasConfig':this['hasCustomDatabase'](),'configDetails':this['detectedConfig']?.['credentials']?{'host':this['detectedConfig'][_0x144d1b(0x5cb,0x60e)]['host'],'port':this[_0x144d1b(0x609,0x618)]['credentials']['port'],'database':this['detectedConfig'][_0x144d1b(0x5cb,0x56f)][_0x144d1b(0x59c,0x601)],'schema':this[_0x144d1b(0x609,0x5d0)]['credentials']['schema']||_0x144d1b(0x4f9,0x4a8),'sslEnabled':this['detectedConfig']['credentials'][_0x144d1b(0x531,0x597)]||![]}:undefined};}}class DatabaseClient{constructor(_0x4fd1e8,_0x98aff3,_0x17c0b9){this['httpClient']=_0x4fd1e8,this['customDatabaseManager']=new CustomDatabaseManager(_0x4fd1e8,_0x98aff3);function _0x23beb2(_0x30cd44,_0x60fd57){return _0x46d3(_0x60fd57-0x80,_0x30cd44);}this[_0x23beb2(0x1de,0x1f2)]=_0x17c0b9||'/sdk/v1';}[_0x294921(0x81,0x87)](_0x1d2846){function _0x155545(_0x2aee9b,_0xf3202){return _0x46d3(_0x2aee9b-0x361,_0xf3202);}return new QueryBuilder(this['httpClient'],_0x1d2846,this[_0x155545(0x55b,0x59b)],this['customDatabaseManager'][_0x155545(0x55e,0x5d4)](),this[_0x155545(0x4d3,0x475)]);}[_0x294921(-0x94,-0xb)](_0x4087e1,_0x59f4b5){return this['httpClient']['post']('/rpc/'+_0x4087e1,_0x59f4b5);}[_0x294921(0x53,0x8a)](_0x4b1fca){const _0x23b900=new DatabaseClient(this['httpClient'],this[_0x3f8beb(0x2d1,0x2e5)]['getWorkspaceId'](),this[_0x3f8beb(0x2a3,0x291)]);_0x23b900[_0x3f8beb(0x32b,0x325)]=_0x4b1fca;function _0x3f8beb(_0x32c5cc,_0x3d784a){return _0x46d3(_0x32c5cc-0x131,_0x3d784a);}return _0x23b900[_0x3f8beb(0x2d1,0x2fb)]=this['customDatabaseManager'],_0x23b900;}async[_0x294921(-0x85,-0x46)](){function _0x20c2fc(_0x55e833,_0x225978){return _0x46d3(_0x225978- -0xd2,_0x55e833);}return this[_0x20c2fc(0xee,0xce)]['detectCustomDatabase']();}async['testCustomConnection'](_0xb4cad9){function _0x166339(_0x4a68b8,_0x43fbe5){return _0x46d3(_0x4a68b8- -0x8a,_0x43fbe5);}return this[_0x166339(0x116,0x184)][_0x166339(0x15a,0x112)](_0xb4cad9);}async[_0x294921(0x27,0x48)](_0x46f577){function _0x56db48(_0x4fa32e,_0x4b6961){return _0x46d3(_0x4b6961-0x348,_0x4fa32e);}return this['customDatabaseManager'][_0x56db48(0x581,0x53e)](_0x46f577);}async['removeCustomDatabase'](){function _0x2f6e70(_0x11882a,_0x2fa683){return _0x46d3(_0x11882a-0x1e7,_0x2fa683);}return this[_0x2f6e70(0x387,0x33e)]['removeCustomDatabase']();}[_0x294921(0x7f,0x5c)](){return this['customDatabaseManager']['hasCustomDatabase']();}['getCustomDatabaseStatus'](){function _0x1df653(_0x1c4517,_0x221011){return _0x46d3(_0x221011- -0xa7,_0x1c4517);}return this[_0x1df653(0x70,0xf9)]['getStatus']();}['setWorkspaceId'](_0x55b584){function _0x5888dd(_0x1b34d1,_0x3bb5ac){return _0x46d3(_0x3bb5ac-0x56,_0x1b34d1);}this[_0x5888dd(0x275,0x1f6)]['setWorkspaceId'](_0x55b584);}async['initialize'](){function _0x14a01f(_0x29898e,_0x3eb13b){return _0x46d3(_0x29898e-0x229,_0x3eb13b);}try{await this[_0x14a01f(0x3c9,0x3af)]['detectCustomDatabase']();}catch(_0x517453){console[_0x14a01f(0x419,0x38d)]('Failed to initialize custom database detection:',_0x517453);}}}class StorageBucket{constructor(_0x5eb694,bucketId){function _0x403b77(_0x3003ba,_0x381e0e){return _0x46d3(_0x3003ba- -0x3c,_0x381e0e);}this[_0x403b77(0x177,0x15e)]=_0x5eb694,this[_0x403b77(0x18c,0x1cd)]=bucketId;}async['upload'](_0xfcb033,_0x12b0fa,_0x27e882){function _0x1d3a18(_0xdfd1d9,_0x2e399a){return _0x46d3(_0x2e399a- -0x312,_0xdfd1d9);}try{const _0x36f057=new FormData();if(_0x12b0fa instanceof File)_0x36f057['append']('file',_0x12b0fa);else{if(_0x12b0fa instanceof Blob)_0x36f057[_0x1d3a18(-0x14e,-0x160)](_0x1d3a18(-0xfa,-0x13d),_0x12b0fa,_0xfcb033);else{if(_0x12b0fa instanceof ArrayBuffer)_0x36f057[_0x1d3a18(-0x160,-0x160)]('file',new Blob([_0x12b0fa]),_0xfcb033);else typeof _0x12b0fa==='string'&&_0x36f057['append']('file',new Blob([_0x12b0fa],{'type':'text/plain'}),_0xfcb033);}}_0x36f057['append']('path',_0xfcb033);_0x27e882?.['cacheControl']&&_0x36f057['append'](_0x1d3a18(-0x146,-0x133),_0x27e882[_0x1d3a18(-0x1bf,-0x133)]);_0x27e882?.[_0x1d3a18(-0x71,-0xd2)]&&_0x36f057[_0x1d3a18(-0xd5,-0x160)]('contentType',_0x27e882['contentType']);_0x27e882?.[_0x1d3a18(-0xb3,-0xeb)]&&_0x36f057['append'](_0x1d3a18(-0x8c,-0xeb),JSON[_0x1d3a18(-0x173,-0x1b6)](_0x27e882[_0x1d3a18(-0x13b,-0xeb)]));const _0x53d828='/storage/buckets/'+this[_0x1d3a18(-0xc3,-0x14a)]+'/files'+(_0x27e882?.['upsert']?_0x1d3a18(-0x124,-0xd5):''),response=await this[_0x1d3a18(-0x15b,-0x15f)][_0x1d3a18(-0x1cc,-0x1a1)](_0x53d828,_0x36f057,{'headers':{'Content-Type':_0x1d3a18(-0x1f8,-0x17c)}});return{'data':response[_0x1d3a18(-0x114,-0x151)],'error':null};}catch(_0x1e1e66){return{'data':null,'error':_0x1e1e66 instanceof EBaaSError?_0x1e1e66:new EBaaSError(_0x1e1e66 instanceof Error?_0x1e1e66['message']:_0x1d3a18(-0x11d,-0x102),0x0,_0x1e1e66)};}}async[_0x294921(0xb7,0x45)](_0x2abe66,_0x225a79){function _0x1d7f87(_0x539e06,_0x2f15d8){return _0x46d3(_0x2f15d8-0xe,_0x539e06);}try{const _0x1b1f85=new URLSearchParams();_0x225a79?.['transform']&&Object[_0x1d7f87(0x1a0,0x209)](_0x225a79[_0x1d7f87(0x21b,0x23a)])['forEach'](([_0x3d13fc,_0x6c562b])=>{_0x6c562b!==undefined&&_0x1b1f85['append'](_0x3d13fc,String(_0x6c562b));});const _0x168a63='/storage/buckets/'+this['bucketId']+_0x1d7f87(0x1da,0x263)+_0x2abe66+(_0x1b1f85[_0x1d7f87(0x1a8,0x19b)]()?'?'+_0x1b1f85['toString']():''),response=await this[_0x1d7f87(0x237,0x1c1)][_0x1d7f87(0x1dc,0x23d)](_0x168a63,{'responseType':'blob'});return{'data':response['data'],'error':null};}catch(_0x24bf86){return{'data':null,'error':_0x24bf86 instanceof EBaaSError?_0x24bf86:new EBaaSError(_0x24bf86 instanceof Error?_0x24bf86[_0x1d7f87(0x272,0x26a)]:_0x1d7f87(0x22d,0x1d5),0x0,_0x24bf86)};}}async[_0x294921(-0x6c,0x8)](_0x2d802a,_0x3111ad){function _0x54ff48(_0x1a4c9d,_0x32dc2c){return _0x46d3(_0x1a4c9d- -0x63,_0x32dc2c);}try{const _0x4b1a60=new URLSearchParams();_0x2d802a&&_0x4b1a60['append']('prefix',_0x2d802a);_0x3111ad?.['limit']&&_0x4b1a60[_0x54ff48(0x14f,0xfc)](_0x54ff48(0xed,0x113),String(_0x3111ad['limit']));_0x3111ad?.['offset']&&_0x4b1a60['append'](_0x54ff48(0x104,0x88),String(_0x3111ad[_0x54ff48(0x104,0x146)]));_0x3111ad?.[_0x54ff48(0x184,0x1f7)]&&_0x4b1a60[_0x54ff48(0x14f,0x1c4)]('sortBy',JSON['stringify'](_0x3111ad['sortBy']));_0x3111ad?.['search']&&_0x4b1a60[_0x54ff48(0x14f,0x167)]('search',_0x3111ad['search']);const _0x3b8cf8='/storage/buckets/'+this['bucketId']+'/files'+(_0x4b1a60['toString']()?'?'+_0x4b1a60['toString']():''),response=await this[_0x54ff48(0x150,0x103)]['get'](_0x3b8cf8);return{'data':response['data'],'error':null};}catch(_0x2fbe07){return{'data':null,'error':_0x2fbe07 instanceof EBaaSError?_0x2fbe07:new EBaaSError(_0x2fbe07 instanceof Error?_0x2fbe07['message']:'Failed\x20to\x20list\x20files',0x0,_0x2fbe07)};}}async[_0x294921(0xa,0x88)](_0x103f3a){function _0x22c37b(_0x28d780,_0x1eb27a){return _0x46d3(_0x1eb27a-0x4c,_0x28d780);}try{const response=await this['httpClient']['delete'](_0x22c37b(0x185,0x1dc)+this['bucketId']+_0x22c37b(0x282,0x27d),{'data':{'paths':_0x103f3a}});return{'data':response['data'],'error':null};}catch(_0x2dc9ff){return{'data':null,'error':_0x2dc9ff instanceof EBaaSError?_0x2dc9ff:new EBaaSError(_0x2dc9ff instanceof Error?_0x2dc9ff[_0x22c37b(0x325,0x2a8)]:_0x22c37b(0x226,0x1d8),0x0,_0x2dc9ff)};}}async[_0x294921(0x5b,0x7)](fromPath,_0x351076){function _0x2a5ab0(_0x479594,_0x530879){return _0x46d3(_0x530879-0x398,_0x479594);}try{const response=await this[_0x2a5ab0(0x5ae,0x54b)]['post']('/storage/buckets/'+this[_0x2a5ab0(0x5d5,0x560)]+_0x2a5ab0(0x5ca,0x5eb),{'sourceKey':fromPath,'destinationKey':_0x351076});return{'data':response[_0x2a5ab0(0x5c9,0x559)],'error':null};}catch(_0x441e42){return{'data':null,'error':_0x441e42 instanceof EBaaSError?_0x441e42:new EBaaSError(_0x441e42 instanceof Error?_0x441e42[_0x2a5ab0(0x62a,0x5f4)]:'Failed\x20to\x20move\x20file',0x0,_0x441e42)};}}async[_0x294921(-0x55,0x1e)](fromPath,_0x292289){function _0xab4545(_0xae8b6f,_0x1f6da0){return _0x46d3(_0x1f6da0-0x19e,_0xae8b6f);}try{const response=await this['httpClient'][_0xab4545(0x306,0x30f)](_0xab4545(0x380,0x32e)+this['bucketId']+'/files/copy',{'sourceKey':fromPath,'destinationKey':_0x292289});return{'data':response['data'],'error':null};}catch(_0x5372b3){return{'data':null,'error':_0x5372b3 instanceof EBaaSError?_0x5372b3:new EBaaSError(_0x5372b3 instanceof Error?_0x5372b3['message']:_0xab4545(0x328,0x2f1),0x0,_0x5372b3)};}}async['createSignedUrl'](_0x121faa,_0x270372,_0x233a24){function _0x5c3bc3(_0x2c4c6e,_0x4e5f17){return _0x46d3(_0x4e5f17- -0xf8,_0x2c4c6e);}try{const response=await this[_0x5c3bc3(0x37,0xbb)]['post']('/storage/buckets/'+this[_0x5c3bc3(0x122,0xd0)]+_0x5c3bc3(0x1cb,0x15d)+_0x121faa+_0x5c3bc3(0x128,0xa1),{'expiresIn':_0x270372,..._0x233a24});return{'data':response['data'],'error':null};}catch(_0x2aa398){return{'data':null,'error':_0x2aa398 instanceof EBaaSError?_0x2aa398:new EBaaSError(_0x2aa398 instanceof Error?_0x2aa398['message']:_0x5c3bc3(0x51,0x9f),0x0,_0x2aa398)};}}['getPublicUrl'](_0x1b3615,_0xf71ed5){const _0x521b9f=new URLSearchParams();function _0x358fbe(_0x519f9f,_0x2d273a){return _0x46d3(_0x519f9f- -0x267,_0x2d273a);}_0xf71ed5?.['transform']&&Object['entries'](_0xf71ed5[_0x358fbe(-0x3b,0x2)])[_0x358fbe(-0x108,-0x12e)](([_0x4111eb,_0x1deec9])=>{_0x1deec9!==undefined&&_0x521b9f['append'](_0x4111eb,String(_0x1deec9));});const _0x377305=this['httpClient'][_0x358fbe(-0x2c,-0x6e)]||'',_0x6bb8fe=_0x377305+_0x358fbe(-0xd7,-0x13a)+this['bucketId']+_0x358fbe(-0x12,0x20)+_0x1b3615+(_0x521b9f['toString']()?'?'+_0x521b9f[_0x358fbe(-0xda,-0xe5)]():'');return{'data':{'publicUrl':_0x6bb8fe}};}async[_0x294921(0xe5,0x85)](_0x184d7a){function _0x3a3791(_0xbc1b95,_0x578ac3){return _0x46d3(_0x578ac3- -0x1a6,_0xbc1b95);}try{const response=await this[_0x3a3791(0x16,0xd)][_0x3a3791(0x31,0x89)](_0x3a3791(0x49,-0x16)+this['bucketId']+'/files/'+_0x184d7a+'/info');return{'data':response[_0x3a3791(0x3d,0x1b)],'error':null};}catch(_0x24df5f){return{'data':null,'error':_0x24df5f instanceof EBaaSError?_0x24df5f:new EBaaSError(_0x24df5f instanceof Error?_0x24df5f['message']:'Failed\x20to\x20get\x20file\x20info',0x0,_0x24df5f)};}}async['updateFileMetadata'](_0x3aa78b,metadata){function _0x33d6f6(_0x5f1208,_0x1057f6){return _0x46d3(_0x1057f6- -0x287,_0x5f1208);}try{const response=await this[_0x33d6f6(-0x7f,-0xd4)]['put'](_0x33d6f6(-0xf7,-0xf7)+this['bucketId']+_0x33d6f6(0x2f,-0x32)+_0x3aa78b+'/metadata',{'metadata':metadata});return{'data':response[_0x33d6f6(-0x12e,-0xc6)],'error':null};}catch(_0x44192c){return{'data':null,'error':_0x44192c instanceof EBaaSError?_0x44192c:new EBaaSError(_0x44192c instanceof Error?_0x44192c['message']:_0x33d6f6(-0xb8,-0xbc),0x0,_0x44192c)};}}}class StorageClient{constructor(_0x3348d3){this['httpClient']=_0x3348d3;}[_0x294921(0xd1,0x87)](bucketId){return new StorageBucket(this['httpClient'],bucketId);}async[_0x294921(-0xce,-0x48)](_0x3d6209,_0x406b4b){function _0x1594b6(_0x25a4bc,_0x12e362){return _0x46d3(_0x25a4bc-0x2ab,_0x12e362);}try{const response=await this['httpClient']['post']('/storage/buckets',{'id':_0x3d6209,..._0x406b4b});return{'data':response['data'],'error':null};}catch(_0x20dc7d){return{'data':null,'error':_0x20dc7d instanceof EBaaSError?_0x20dc7d:new EBaaSError(_0x20dc7d instanceof Error?_0x20dc7d[_0x1594b6(0x507,0x4de)]:'Failed\x20to\x20create\x20bucket',0x0,_0x20dc7d)};}}async['getBucket'](_0x58f659){function _0x1fe553(_0x4eaf2c,_0x5ca4df){return _0x46d3(_0x4eaf2c-0xd5,_0x5ca4df);}try{const response=await this[_0x1fe553(0x288,0x293)]['get'](_0x1fe553(0x265,0x232)+_0x58f659);return{'data':response['data'],'error':null};}catch(_0xd6e9bb){return{'data':null,'error':_0xd6e9bb instanceof EBaaSError?_0xd6e9bb:new EBaaSError(_0xd6e9bb instanceof Error?_0xd6e9bb['message']:_0x1fe553(0x2b2,0x25b),0x0,_0xd6e9bb)};}}async[_0x294921(-0xa4,-0x44)](){function _0x13979d(_0x34cc56,_0x5072b1){return _0x46d3(_0x34cc56- -0x203,_0x5072b1);}try{const response=await this[_0x13979d(-0x50,0x20)][_0x13979d(0x2c,0xaa)]('/storage/buckets');return{'data':response['data'],'error':null};}catch(_0x5aa400){return{'data':null,'error':_0x5aa400 instanceof EBaaSError?_0x5aa400:new EBaaSError(_0x5aa400 instanceof Error?_0x5aa400['message']:_0x13979d(-0xa0,-0x113),0x0,_0x5aa400)};}}async['updateBucket'](_0x39c42a,_0x480b9e){function _0x4cc340(_0x1fc3e4,_0x55a2d2){return _0x46d3(_0x1fc3e4- -0x341,_0x55a2d2);}try{const response=await this[_0x4cc340(-0x18e,-0x138)][_0x4cc340(-0x1e1,-0x1f3)](_0x4cc340(-0x1b1,-0x195)+_0x39c42a,_0x480b9e);return{'data':response[_0x4cc340(-0x180,-0x170)],'error':null};}catch(_0x34f550){return{'data':null,'error':_0x34f550 instanceof EBaaSError?_0x34f550:new EBaaSError(_0x34f550 instanceof Error?_0x34f550['message']:_0x4cc340(-0x19b,-0x185),0x0,_0x34f550)};}}async['deleteBucket'](_0x2980d2){function _0x150d64(_0x55243b,_0x1e49fa){return _0x46d3(_0x55243b-0x68,_0x1e49fa);}try{const response=await this['httpClient']['delete'](_0x150d64(0x1f8,0x1f4)+_0x2980d2);return{'data':response['data'],'error':null};}catch(_0x2bce25){return{'data':null,'error':_0x2bce25 instanceof EBaaSError?_0x2bce25:new EBaaSError(_0x2bce25 instanceof Error?_0x2bce25[_0x150d64(0x2c4,0x2ca)]:'Failed\x20to\x20delete\x20bucket',0x0,_0x2bce25)};}}async['getUsage'](){function _0x44d3b4(_0x2e8d1e,_0x152b56){return _0x46d3(_0x2e8d1e-0xcf,_0x152b56);}try{const response=await this[_0x44d3b4(0x282,0x2df)]['get'](_0x44d3b4(0x2d7,0x30d));return{'data':response['data'],'error':null};}catch(_0x47d104){return{'data':null,'error':_0x47d104 instanceof EBaaSError?_0x47d104:new EBaaSError(_0x47d104 instanceof Error?_0x47d104['message']:_0x44d3b4(0x224,0x1ae),0x0,_0x47d104)};}}}class EventManager{constructor(){function _0x13c229(_0x81c0a8,_0x265b52){return _0x46d3(_0x81c0a8- -0x332,_0x265b52);}this['events']=new Map(),this[_0x13c229(-0x1cd,-0x15f)]=0xa;}['on'](_0x961cd2,_0x315750){function _0x16956e(_0x104046,_0x34d592){return _0x46d3(_0x104046- -0x9b,_0x34d592);}!this[_0x16956e(0x1bf,0x137)][_0x16956e(0x136,0x155)](_0x961cd2)&&this['events']['set'](_0x961cd2,new Set()),this[_0x16956e(0x1bf,0x1ed)]['get'](_0x961cd2)[_0x16956e(0x173,0x169)](_0x315750);}[_0x294921(0xb4,0x2e)](_0x31e2c2,_0x66f0c0){function _0xf81f7f(_0x473ff8,_0x2bcf42){return _0x46d3(_0x473ff8- -0x71,_0x2bcf42);}if(!this['events']['has'](_0x31e2c2))return;const _0xe04138=this[_0xf81f7f(0x1e9,0x256)][_0xf81f7f(0x1be,0x1ba)](_0x31e2c2);_0x66f0c0?_0xe04138[_0xf81f7f(0x113,0x103)](_0x66f0c0):_0xe04138['clear'](),_0xe04138[_0xf81f7f(0x1cd,0x238)]===0x0&&this[_0xf81f7f(0x1e9,0x216)][_0xf81f7f(0x113,0x136)](_0x31e2c2);}['emit'](_0x1459c5,..._0x32483e){if(!this[_0x2d89ff(0x5be,0x541)]['has'](_0x1459c5))return![];const _0x58ebb4=this[_0x2d89ff(0x5be,0x5df)][_0x2d89ff(0x593,0x510)](_0x1459c5);function _0x2d89ff(_0x29f04f,_0x219d19){return _0x46d3(_0x29f04f-0x364,_0x219d19);}for(const _0xf74873 of _0x58ebb4){try{_0xf74873(..._0x32483e);}catch(_0x5431b5){console['error']('Error\x20in\x20event\x20listener\x20for\x20\x22'+_0x1459c5+'\x22:',_0x5431b5);}}return _0x58ebb4[_0x2d89ff(0x5a2,0x5f7)]>0x0;}['removeAllListeners'](_0x32bded){function _0x5e0fc3(_0x5e34c0,_0xd8eb19){return _0x46d3(_0x5e34c0- -0x308,_0xd8eb19);}_0x32bded?this[_0x5e0fc3(-0xae,-0x97)]['delete'](_0x32bded):this['events']['clear']();}['listenerCount'](_0x260b12){function _0x8121ec(_0x537a69,_0x4d4b36){return _0x46d3(_0x537a69-0x3b3,_0x4d4b36);}return this['events'][_0x8121ec(0x5e2,0x5ff)](_0x260b12)?.['size']??0x0;}['eventNames'](){function _0x2695c3(_0x276d07,_0x4bd95b){return _0x46d3(_0x276d07-0x1a1,_0x4bd95b);}return Array['from'](this['events'][_0x2695c3(0x326,0x3a4)]());}['listeners'](_0x780f1c){function _0x55c835(_0x563d3e,_0x48c971){return _0x46d3(_0x48c971- -0xf,_0x563d3e);}return Array[_0x55c835(0x2a8,0x226)](this[_0x55c835(0x22f,0x24b)][_0x55c835(0x24e,0x220)](_0x780f1c)??[]);}[_0x294921(0x46,0x6e)](_0x31eccf,_0x50ec08){this['on'](_0x31eccf,_0x50ec08);}['removeListener'](_0x3701e3,_0x32b89f){this['off'](_0x3701e3,_0x32b89f);}['once'](_0x4b9d4f,_0x233769){const _0x126db7=(..._0x473e96)=>{this['off'](_0x4b9d4f,_0x126db7),_0x233769(..._0x473e96);};this['on'](_0x4b9d4f,_0x126db7);}['prependListener'](_0x5ab693,_0x4de130){this['on'](_0x5ab693,_0x4de130);}[_0x294921(0x7b,0x33)](_0x4e75a8,_0x4139c6){const _0x3f9cb6=(..._0x4e63cd)=>{this['off'](_0x4e75a8,_0x3f9cb6),_0x4139c6(..._0x4e63cd);};this['on'](_0x4e75a8,_0x3f9cb6);}[_0x294921(0x58,-0xc)](_0x382185){this[_0x3319f4(0x23c,0x28f)]=_0x382185;function _0x3319f4(_0x373cca,_0x4ee421){return _0x46d3(_0x4ee421-0x12a,_0x373cca);}return this;}[_0x294921(-0x6e,-0x1b)](){function _0xd7a4e2(_0x46903e,_0x10b347){return _0x46d3(_0x46903e-0xe5,_0x10b347);}return this[_0xd7a4e2(0x24a,0x2ac)];}['rawListeners'](_0x452110){return this['listeners'](_0x452110);}}function _0x294921(_0x1e8750,_0x5d58be){return _0x46d3(_0x5d58be- -0x1ae,_0x1e8750);}class RealtimeChannel extends EventManager{constructor(_0x13cb2f,_0x3034d0){super(),this[_0x4d77d0(0x3b1,0x343)]=![],this[_0x4d77d0(0x3b5,0x36b)]=_0x4d77d0(0x349,0x327);function _0x4d77d0(_0x1fce69,_0x530a01){return _0x46d3(_0x1fce69-0x1cf,_0x530a01);}this['subscriptions']=new Map(),this['topic']=_0x13cb2f,this[_0x4d77d0(0x328,0x2de)]=_0x3034d0;}['subscribe'](_0x3b65f9){!this[_0x18472d(-0xda,-0xcb)]&&(this['joinedOnce']=!![],this['_join']());_0x3b65f9&&this['on'](_0x18472d(-0x17f,-0x155),_0x3b65f9);function _0x18472d(_0x15d3e8,_0x233e15){return _0x46d3(_0x233e15- -0x2ad,_0x15d3e8);}return this;}['onPostgresChanges'](filter,_0xf4243b){const _0x138da1='postgres_changes:'+JSON['stringify'](filter);this['on'](_0x138da1,_0xf4243b);function _0x2f1936(_0x1e3638,_0x288791){return _0x46d3(_0x288791-0x124,_0x1e3638);}const _0x11ef56={'unsubscribe':()=>{function _0x2736d7(_0x44a4a8,_0x15fc7f){return _0x46d3(_0x15fc7f- -0x35c,_0x44a4a8);}this['off'](_0x138da1,_0xf4243b),this[_0x2736d7(-0x156,-0x168)]['delete'](_0x138da1);}};return this[_0x2f1936(0x335,0x318)]['set'](_0x138da1,_0x11ef56),this['socket']?.[_0x2f1936(0x2f5,0x33f)]&&this['state']==='joined'&&this['socket']['emit']('subscribe_postgres_changes',{'topic':this[_0x2f1936(0x2f3,0x342)],'filter':filter,'ref':this['makeRef']()}),_0x11ef56;}[_0x294921(0x7d,0x35)](filter,_0x5f17bf){const _0x47bf8b='broadcast:'+JSON['stringify'](filter);this['on'](_0x47bf8b,_0x5f17bf);const _0x3734b9={'unsubscribe':()=>{this[_0x42bd34(0x42a,0x467)](_0x47bf8b,_0x5f17bf);function _0x42bd34(_0x51ea37,_0x25644d){return _0x46d3(_0x51ea37-0x24e,_0x25644d);}this['subscriptions']['delete'](_0x47bf8b);}};this['subscriptions'][_0x146f85(-0x274,-0x1ed)](_0x47bf8b,_0x3734b9);function _0x146f85(_0x2ac0fa,_0x35725a){return _0x46d3(_0x35725a- -0x360,_0x2ac0fa);}return _0x3734b9;}[_0x294921(-0x7e,-0x20)](filter,_0x1682ac){const _0x4e3ec9=_0x528273(-0x1c8,-0x1f8)+JSON['stringify'](filter);this['on'](_0x4e3ec9,_0x1682ac);function _0x528273(_0x30bdde,_0x3ab3ce){return _0x46d3(_0x3ab3ce- -0x3a2,_0x30bdde);}const _0x1275f2={'unsubscribe':()=>{this['off'](_0x4e3ec9,_0x1682ac);function _0x5df842(_0xc9cd97,_0x5b7dc1){return _0x46d3(_0xc9cd97- -0x28a,_0x5b7dc1);}this['subscriptions'][_0x5df842(-0x106,-0x176)](_0x4e3ec9);}};return this[_0x528273(-0x225,-0x1ae)][_0x528273(-0x24c,-0x22f)](_0x4e3ec9,_0x1275f2),_0x1275f2;}[_0x294921(0x2e,0x7b)](_0x5a4ba2){return new Promise(_0x179ca5=>{function _0x2714ab(_0x581ce4,_0x35df6b){return _0x46d3(_0x581ce4-0x163,_0x35df6b);}this['socket']?.[_0x2714ab(0x37e,0x305)]&&this[_0x2714ab(0x349,0x30c)]==='joined'?(this[_0x2714ab(0x2bc,0x2b8)]['emit'](_0x2714ab(0x34d,0x364),{'topic':this[_0x2714ab(0x381,0x353)],'event':_0x5a4ba2['event'],'payload':_0x5a4ba2,'ref':this[_0x2714ab(0x33e,0x38d)]()}),_0x179ca5('ok')):_0x179ca5(_0x2714ab(0x2d8,0x35f));});}['track'](_0x75e26d){return new Promise(_0x14353b=>{function _0x433747(_0x2527a1,_0x184cdd){return _0x46d3(_0x2527a1-0xbc,_0x184cdd);}this['socket']?.['connected']&&this[_0x433747(0x2a2,0x2ef)]===_0x433747(0x263,0x233)?(this['socket']['emit'](_0x433747(0x213,0x254),{'topic':this[_0x433747(0x2da,0x30c)],'event':'track','payload':_0x75e26d,'ref':this[_0x433747(0x297,0x265)]()}),_0x14353b('ok')):_0x14353b('error');});}['untrack'](){return new Promise(_0x16f6ee=>{function _0x2226f6(_0x164dc0,_0x1f739b){return _0x46d3(_0x164dc0- -0x395,_0x1f739b);}this['socket']?.[_0x2226f6(-0x17a,-0xf9)]&&this['state']===_0x2226f6(-0x1ee,-0x271)?(this['socket'][_0x2226f6(-0x15c,-0x122)](_0x2226f6(-0x23e,-0x2c6),{'topic':this['topic'],'event':'untrack','ref':this['makeRef']()}),_0x16f6ee('ok')):_0x16f6ee(_0x2226f6(-0x220,-0x21d));});}[_0x294921(0x7c,0xa3)](){return new Promise(_0x1a6bd4=>{function _0x195c7c(_0x1ec16b,_0x327db0){return _0x46d3(_0x327db0-0xe2,_0x1ec16b);}this['state']=_0x195c7c(0x2ee,0x2cb),this['subscriptions'][_0x195c7c(0x261,0x241)](_0x4ce858=>{function _0x10ea1c(_0xaafdf4,_0x195b57){return _0x46d3(_0xaafdf4- -0x196,_0x195b57);}_0x4ce858[_0x10ea1c(0xbb,0xb3)]();}),this['subscriptions'][_0x195c7c(0x2c0,0x2d1)](),this['socket']?.[_0x195c7c(0x32e,0x2fd)]&&this['socket']['emit'](_0x195c7c(0x354,0x32e),{'topic':this[_0x195c7c(0x284,0x300)],'ref':this[_0x195c7c(0x2de,0x2bd)]()}),this[_0x195c7c(0x31b,0x2c8)]='closed',this[_0x195c7c(0x2f2,0x2ee)](),_0x1a6bd4('ok');});}[_0x294921(0xa6,0x9c)](){function _0xe8a895(_0x5ccea9,_0xb96e3b){return _0x46d3(_0xb96e3b- -0x17d,_0x5ccea9);}if(this[_0xe8a895(0x35,0x69)]==='leaving')return;this['state']=_0xe8a895(0x73,0xce),this[_0xe8a895(-0x50,-0x24)]?.['connected']&&(this['socket']['emit']('join',{'topic':this['topic'],'ref':this['makeRef']()}),setTimeout(()=>{function _0x437638(_0x498426,_0x429068){return _0x46d3(_0x429068- -0x2e7,_0x498426);}this[_0x437638(-0x181,-0x101)]==='joining'&&(this[_0x437638(-0x186,-0x101)]=_0x437638(-0x13b,-0x140),this[_0x437638(-0x40,-0xae)]('status',_0x437638(-0xdc,-0xde)));},0x64));}['_rejoin'](){function _0x41875c(_0x37a692,_0x2bc96d){return _0x46d3(_0x37a692-0x220,_0x2bc96d);}this[_0x41875c(0x402,0x38c)]&&(this['_join'](),this[_0x41875c(0x414,0x3f8)]['forEach']((_0x2fa2b8,_0x45c10a)=>{function _0x1d9a00(_0x412894,_0x448faf){return _0x46d3(_0x412894- -0x34a,_0x448faf);}if(_0x45c10a['startsWith'](_0x1d9a00(-0x1de,-0x1a6))){const filter=JSON['parse'](_0x45c10a['replace']('postgres_changes:',''));this['socket']?.[_0x1d9a00(-0x111,-0x8c)](_0x1d9a00(-0x148,-0xf6),{'topic':this['topic'],'filter':filter,'ref':this['makeRef']()});}}));}['_trigger'](_0x2760fc,_0x4de603){if(_0x2760fc==='postgres_changes'){const _0x1b9144=_0x139743(0x4b8,0x52a)+JSON['stringify'](_0x4de603[_0x139743(0x590,0x616)]||{});this[_0x139743(0x585,0x5e3)](_0x1b9144,_0x4de603);}else{if(_0x2760fc===_0x139743(0x536,0x552)){const _0x58681c='broadcast:'+JSON[_0x139743(0x4a8,0x458)]({'event':_0x4de603[_0x139743(0x4db,0x482)]});this['emit'](_0x58681c,_0x4de603);}else{if(_0x2760fc===_0x139743(0x4a3,0x461)){const _0x406293='presence:'+JSON['stringify']({'event':_0x4de603['event']});this['emit'](_0x406293,_0x4de603);}}}function _0x139743(_0x20b8cd,_0x2be4bb){return _0x46d3(_0x20b8cd-0x34c,_0x2be4bb);}this['emit'](_0x2760fc,_0x4de603);}[_0x294921(0x10,0x56)](_0x105763){function _0x2b6e32(_0x4b4001,_0x5a6a99){return _0x46d3(_0x5a6a99- -0x3aa,_0x4b4001);}this[_0x2b6e32(-0x149,-0x1c4)]=_0x105763;let status;switch(_0x105763){case'joined':status='SUBSCRIBED';break;case'errored':status='CHANNEL_ERROR';break;case'closed':status='CLOSED';break;default:return;}this[_0x2b6e32(-0x13d,-0x171)]('status',status);}[_0x294921(0x8,0x2d)](){function _0x4a67f0(_0x1b4a18,_0x38e669){return _0x46d3(_0x1b4a18-0x297,_0x38e669);}return Math[_0x4a67f0(0x4f6,0x582)]()['toString'](0x24)['substring'](0x2,0xf);}[_0x294921(0x27,0x80)](){return this['state'];}}function getEnvironment(){function _0x20683f(_0x3986e9,_0x3a81cd){return _0x46d3(_0x3986e9- -0xcd,_0x3a81cd);}if(typeof navigator!==_0x20683f(0x105,0x122)&&navigator['product']==='ReactNative')return _0x20683f(0xa0,0x7e);if(typeof window!==_0x20683f(0x105,0x102)&&typeof document!==_0x20683f(0x105,0x190))return _0x20683f(0x14d,0xc8);if(typeof global!==_0x20683f(0x105,0x12b)&&typeof process!==_0x20683f(0x105,0xc7)&&process[_0x20683f(0xde,0x114)]?.[_0x20683f(0x189,0x181)])return _0x20683f(0x189,0x1eb);return _0x20683f(0x14d,0x12c);}function _0x1ed3(){const _0x297fbe=['C29JA2v0qwrHChrLCG','z2v0twf4tgLZDgvUzxjZ','B3b0Aw9UCW','nuL4tgv6Bq','BxvSDgLWyxj0l2zVCM0Tzgf0yq','rMfPBgvKihrVignYzwf0zsbZAwDUzwqGvvjm','zgvSzxrLt3b0Aw9UCW','l3nPz24','C2vSzwn0','Ec10B3rHBc1JB3vUDa','Aw52B2TL','DMfSDwvZ','lMrLC2m','BgvUz3rO','y3vZDg9Trgf0ywjHC2vnyw5Hz2vY','l2f1DgGVDJeVDxnLCG','C2v0twf4tgLZDgvUzxjZ','CNbJ','CMvTB3zLq3vZDg9Trgf0ywjHC2u','y29UzMLN','rMfPBgvKihrVihvWzgf0zsbIDwnRzxq','AM9PBMvK','ota5mtG2m2TyrKz3za','mta0DfPZwvn0','ChjLC2vUy2u6','DMvYC2LVBNm','CMvHBhrPBwu','y29UBMvJDf9LCNjVCG','D2vIC29JA2v0','AgfUzgXLrxjYB3i','Aw5Zzxj0','C3rVCMfNzq','yxbWzw5K','Ahr0CenSAwvUDa','zgvWBg95','Bw92zq','BgLZDa','p29WzxjHDgLVBJ1PBNnLCNq','z2v0q29UBMvJDgLVBLn0yxrL','Cg9ZDgDYzxnFy2HHBMDLCW','zgLZy29UBMvJDgvK','z2XVyMfS','CMvQzwn0','yM9KEq','DxbKyxrLrw52','DxbKyxrL','D29YA3nWywnLswq','zgf0yq','C2v0sxrLBq','B3bLCMf0B3i','ChvZAa','icHtDgf0Dxm6ia','Cgf0y2G','rMfPBgvKihrVigrVD25SB2fKigzPBgu','yNvJA2v0swq','DxnL','DMfSDwu','rMfPBgvKihrVihvWzgf0zsbMAwXLig1LDgfKyxrH','y29WEq','Aw5KzxGUDhm','nJy3nZm0D3z2DhPq','CMvTB3zLqxv0AfrVA2vU','C2v0DxbjBNrLCMnLChrVCNm','AgfZ','Dw5KzwzPBMvK','y2XPzw50','lMfZyW','zMLSzq','AxnezwXLDgu','y29UBMvJDgLUzW','C29JA2v0t3b0Aw9UCW','CMvMCMvZAf90B2TLBG','DgLTzw91Da','BwfRzvjLzG','B2zM','rMfPBgvKihrVigDLDcbIDwnRzxq','zw50CNLWB2LUDa','y2fJAgvdB250CM9S','rMfPBgvKihrVigrLCgXVEsbMDw5JDgLVBG','ChjLCgvUze9Uy2vmAxn0zw5LCG','AM9PBMvKt25Jzq','B25cCM9HzgnHC3q','DgvZDenVBM5Ly3rPB24','rMfPBgvKihrVigDLDcbMDw5JDgLVBIbTzxrYAwnZ','C3rHDgu','C29YDej5','AwXPA2u','BgvHDMLUzW','yNjVywrJyxn0','rNvUy3rPB24GAw52B2nHDgLVBIbMywLSzwq','CMvZCg9UC2u','l2f1DgGVDJeVCMvZzxqTCgfZC3DVCMq','Aw5PDgLHBgL6zq','y2XLyxi','D2fYBG','zgf0ywjHC2u','z2v0tg9NCW','zg93BMXVywq','C3vIC2nYAxb0Aw9UCW','u29JA2v0lMLVlwnSAwvUDcbUW6nVigvZDmoHigrPC3bVBSoTDMvSlIbqyxjHifjLywn0ie5HDgL2zsWGAw5ZDgfSztOGBNbTigLUC3rHBgWGC29JA2v0lMLVlwnSAwvUDa','y29UzMLNDxjLq3vZDg9Trgf0ywjHC2u','AgfZq3vZDg9Trgf0ywjHC2u','rgf0ywjHC2uGB3bLCMf0Aw9UigzHAwXLza','AM9PBG','y3vYCMvUDfnJAgvTyq','zw50CMLLCW','DgfIBgu','z2v0v29YA3nWywnLswq','DxbKyxrLvxnLCG','rMfPBgvKihrVigXPC3qGzNvUy3rPB25Z','zgLZy29UBMvJDa','C3rHDhvZvgv4Da','C3vIC2nYAwjLx3bVC3rNCMvZx2nOyw5Nzxm','C2LNBKLU','x3nLDfn0yxrL','p29WzxjHDgLVBJ11ChnLCNq','Bg9N','AgfUzgXLqxv0AevYCM9Y','l3n0B3jHz2uVDxnHz2u','u1vcu0nssujfra','AxnvC2LUz0n1C3rVBurHDgfIyxnL','x3rYAwDNzxi','CMvTB3zLqwXStgLZDgvUzxjZ','yxbPs2v5','ywrK','CMvTB3zLq2HHBM5LBa','rMfPBgvKihrVihvWBg9HzcbMAwXL','CxvLCNK','DxbKyxrLt3b0Aw9UCW','ntG0odu0nhr1Eej4DW','p29WzxjHDgLVBJ1ZzwXLy3q','z2v0twv0CMLJCW','zxHLy3v0zq','C2vZC2LVBG','B3bLCMf0Aw9U','zMLSDgvYCW','yNjVD3nLCG','y29UBMvJDgvK','ywrKtgLZDgvUzxi','l2z1BMn0Aw9UCY92ms8','Dg9WAwm','y29UBMvJDa','y3jLzgvUDgLHBhm','z2v0q3vZDg9Tq3jLzgvUDgLHBhm','Aw5PDgLHBgL6zun1C3rVBurHDgfIyxnL','C2v0u2vZC2LVBG','CMvTB3zLqwXSq2HHBM5LBhm','l2XVz3m','CgvYAw9K','Bwv0ywrHDge','z3rL','C2vUza','Cg9ZDgDYzxnqB3j0','ms4XlJG','DhjHBNnMB3jT','C29JA2v0lMLVlwnSAwvUDcbUB3qGyxzHAwXHyMXL','z2v0u3rHDgu','z2v0','zwjHyxmUyxv0Ac5ZzxnZAw9U','l2zPBgvZ','x2DLDfnVy2TLDa','z2v0rMLSzuLUzM8','DMvYAwz5','zNjVBq','CMvTB3zL','C2v0qxv0AfrVA2vU','C2nOzw1H','zw1PDa','zxHLy3v0zvf1zxj5','yMfZzvvsta','rMfPBgvKihrVigrLBgv0zsbMDw5JDgLVBG','p3vWC2vYDd10CNvL','C2L6zq','CMvJB25Uzwn0qxr0zw1WDhm','y29UDgvUDfr5Cgu','mZq3mJe0z3HRCg1e','y2HHBM5LBa','yxv0Aa','zMLSDgvY','zgvMyxvSDhm','y2XLyxjtzxnZAw9U','DxnLCG','y29TBw9U','y3jLyxrL','x2PVAw4','AM9PBMLUzW','BgvHDMu','DxbKyxrLrgf0yq','B3jKzxi','Dgv4Dc9WBgfPBG','CMv0DxjUpxjLChjLC2vUDgf0Aw9U','Dw5ZDwjZy3jPyMu','BM93','l2zPBgvZl21VDMu','mtbOs0HWvuK','l2zPBgvZlW','BM9Kzq','zgv0ywLSCW','z2v0vxnLCG','y2HHBM5LBhm','zxzLBNrZ','Aw1WB3j0twfW','BwvZC2fNzq','CMvZzxrqyxnZD29Yza','zgv0zwn0zwrdB25MAwC','CMfUzg9T','zw52','ChjLzMvY','BhrL','C3rHy2S','Bwf0y2G','ChvIBgLJ','y3vYCMvUDfnLC3nPB24','BgLTAxq','rMfPBgvKihrVigDLDcbMDw5JDgLVBG','Bgv2zwW','rMfPBgvKihrVignVChKGzMLSzq','AgvHCNrIzwf0sw50zxj2ywW','rMfPBgvKihrVigDLDcbZDg9YywDLihvZywDL','DxjS','ChjLC2vUy2u','C3rHDhvZ','C29JA2v0','AgvHzgvYCW','C2v0u2vZC2LVBKLUDgvYBMfS','C3rYAw5NAwz5','ndi1mZfcvNflqxq','BMfTzq','zM9YrwfJAa','Chv0','yxv0B0rLDgvJDen1C3rVBurHDgfIyxnL','BwfW','rMfPBgvKihrVigXPC3qGyNvJA2v0CW','z2v0u3rHDhvZ','Bwf4tgLZDgvUzxjZ','y3jLyxrLqNvJA2v0','B2zMC2v0','zgv0zwn0q3vZDg9Trgf0ywjHC2u','CMfUz2u','BgLZDej1y2TLDhm','vw5ZDxbWB3j0zwqGsfruucbTzxrOB2q6ia','Cg9ZDgDYzxnFy2HHBMDLCZO','CMvHy3qTBMf0AxzL','C2LUz2XL','mZaWmda2mdbLB3jLAfC','z2v0rgv0zwn0zwrdB25MAwC','Cg9ZDa','CMvZDfvYBa','C2v0','Cg9ZDgDYzxnty2HLBwe','zxjYB3i','y29Kzq','x3jLAM9PBG','BgLRzq','otGXnJuZBfHpEKX1','y2XVC2vK','C29JA2v0lMLVlwnSAwvUDa','CMvZB2X2zq','Cg9ZDgDYzxniB3n0','C3bSAxq','y29UDgfPBNm','B25bDxrOu3rHDgvdAgfUz2u','CMvZB2X1DgLVBJ1TzxjNzs1KDxbSAwnHDgvZlhjLDhvYBJ1YzxbYzxnLBNrHDgLVBG','uhjLzMvY','qMvHCMvYia','zgvSzxrL','A2v5CW','C3nSrw5HyMXLza','C2v0v29YA3nWywnLswq','y29UBMvJDgLVBLn0yxrL','z2v0q3vZDg9Trgf0ywjHC2vtDgf0Dxm','CMvTB3zLsxrLBq','zgf0yufYCMf5','rMfPBgvKihrVihjLBw92zsbMAwXLCW','Dg9tDhjPBMC','B25qCMvZzw5Jzq','zxzLBNq','l3n0B3jHz2uVyNvJA2v0CY8','y29SDw1U'];_0x1ed3=function(){return _0x297fbe;};return _0x1ed3();}function isSocketIOAvailable(){function _0xb8216(_0x3ec052,_0x247668){return _0x46d3(_0x3ec052- -0x390,_0x247668);}try{const _0x1be534=getEnvironment();switch(_0x1be534){case'node':return typeof require!=='undefined'&&require[_0xb8216(-0x214,-0x26e)]&&!!require['resolve'](_0xb8216(-0x215,-0x18b));case'browser':if(typeof globalThis!==_0xb8216(-0x1be,-0x1e3)&&'io'in globalThis)return!![];return typeof require!==_0xb8216(-0x1be,-0x1f9)&&require['resolve']&&!!require['resolve']('socket.io-client');case'react-native':try{return typeof require!==_0xb8216(-0x1be,-0x1de)&&!!require(_0xb8216(-0x215,-0x1a4));}catch{return![];}default:return![];}}catch{return![];}}function getSocketIO(){function _0x59fed0(_0x15c0da,_0x269a52){return _0x46d3(_0x269a52- -0x203,_0x15c0da);}try{if(typeof require!=='undefined')return require(_0x59fed0(-0x99,-0x88));if(typeof globalThis!=='undefined'&&'io'in globalThis)return{'io':globalThis['io']};throw new Error(_0x59fed0(0x1e,0x2a));}catch(_0x369ce2){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 _0x57cbec(_0x52c14f,_0x14ef29){return _0x46d3(_0x14ef29- -0x4a,_0x52c14f);}this[_0x57cbec(0x15b,0x10f)]=null;}async[_0x294921(0xd1,0x71)](_0x52695f,_0x23ca10){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:_0x624c6b}=getSocketIO();return new Promise((_0x361b3f,_0x547b12)=>{function _0x581aec(_0x18fad5,_0x1983c3){return _0x46d3(_0x1983c3-0x36d,_0x18fad5);}this[_0x581aec(0x4f1,0x4c6)]=_0x624c6b(_0x52695f,_0x23ca10),this[_0x581aec(0x47d,0x4c6)]['on']('connect',()=>_0x361b3f()),this['socket']['on'](_0x581aec(0x4a1,0x51a),_0xbbd33d=>_0x547b12(_0xbbd33d));});}['disconnect'](){function _0x31b20c(_0x5b75a0,_0x1c061f){return _0x46d3(_0x1c061f-0x23b,_0x5b75a0);}this[_0x31b20c(0x40e,0x394)]&&(this[_0x31b20c(0x384,0x394)][_0x31b20c(0x4a7,0x43b)](),this['socket']=null);}[_0x294921(0x56,0x8b)](_0x4cd7fb,data){function _0x104e5c(_0x3f699d,_0x30a739){return _0x46d3(_0x3f699d- -0x31d,_0x30a739);}this[_0x104e5c(-0x1c4,-0x186)]?.[_0x104e5c(-0xe4,-0xb1)](_0x4cd7fb,data);}['on'](_0x13e26b,_0x1eaf32){function _0x45520d(_0x26ba07,_0x15a03d){return _0x46d3(_0x15a03d- -0xc,_0x26ba07);}this[_0x45520d(0x17e,0x14d)]?.['on'](_0x13e26b,_0x1eaf32);}[_0x294921(-0x5b,0x2e)](_0x159da3,_0x5e66b2){function _0x4c5cba(_0x24ff0e,_0x314e85){return _0x46d3(_0x24ff0e-0x23f,_0x314e85);}_0x5e66b2?this[_0x4c5cba(0x398,0x311)]?.[_0x4c5cba(0x41b,0x3ae)](_0x159da3,_0x5e66b2):this[_0x4c5cba(0x398,0x409)]?.['off'](_0x159da3);}get['connected'](){return this['socket']?.['connected']??![];}}class ReactNativeSocketAdapter{constructor(){this['socket']=null;}async['connect'](_0x4e7316,_0x2c64a6){function _0x1fa6e2(_0x115434,_0x4614f8){return _0x46d3(_0x4614f8-0xce,_0x115434);}if(!isSocketIOAvailable())throw new Error(_0x1fa6e2(0x293,0x2c3));const {io:_0x9aebf7}=getSocketIO();return new Promise((_0x215ec1,_0x10b4f9)=>{this[_0x27a83a(0x47c,0x478)]=_0x9aebf7(_0x4e7316,{..._0x2c64a6,'transports':['websocket'],'upgrade':![],'autoConnect':!![]});function _0x27a83a(_0x2b8e85,_0x25d461){return _0x46d3(_0x2b8e85-0x323,_0x25d461);}this[_0x27a83a(0x47c,0x418)]['on']('connect',()=>_0x215ec1()),this['socket']['on'](_0x27a83a(0x4d0,0x500),_0x497fb9=>_0x10b4f9(_0x497fb9));});}['disconnect'](){function _0x284ac6(_0x1a4433,_0x5a008a){return _0x46d3(_0x1a4433- -0x280,_0x5a008a);}this['socket']&&(this['socket'][_0x284ac6(-0x80,-0x93)](),this['socket']=null);}['emit'](_0x182934,data){function _0x119f23(_0x530f0a,_0x2d1942){return _0x46d3(_0x530f0a- -0x1c0,_0x2d1942);}this[_0x119f23(-0x67,-0xe7)]?.['emit'](_0x182934,data);}['on'](_0x4439bb,_0x583b26){this['socket']?.['on'](_0x4439bb,_0x583b26);}[_0x294921(0x1a,0x2e)](_0x483985,_0x319422){function _0x5390a5(_0x261e1d,_0x28ccdb){return _0x46d3(_0x28ccdb- -0x20,_0x261e1d);}_0x319422?this['socket']?.['off'](_0x483985,_0x319422):this[_0x5390a5(0xf6,0x139)]?.['off'](_0x483985);}get[_0x294921(0xe6,0x6d)](){function _0x1ff5ab(_0x44e9c8,_0x45a6db){return _0x46d3(_0x44e9c8-0x122,_0x45a6db);}return this[_0x1ff5ab(0x27b,0x223)]?.['connected']??![];}}function createSocketAdapter(){const _0x484206=getEnvironment();switch(_0x484206){case'react-native':return new ReactNativeSocketAdapter();case'browser':case'node':default:return new WebSocketAdapter();}}class RealtimeClient{constructor(_0x489ace,_0x46a5ab,_0x381b38={}){this[_0x56d7bd(0x141,0x169)]=null,this[_0x56d7bd(0x241,0x1dc)]=new Map(),this[_0x56d7bd(0x170,0x15c)]='disconnected',this[_0x56d7bd(0x227,0x23c)]=0x0,this['maxReconnectAttempts']=0x5,this[_0x56d7bd(0x13e,0x110)]=_0x489ace;function _0x56d7bd(_0x98d8e3,_0x34e347){return _0x46d3(_0x98d8e3- -0x18,_0x34e347);}this['apiKey']=_0x46a5ab,this['options']={'heartbeatInterval':0x7530,'reconnectInterval':0x1388,'maxReconnectAttempts':0x5,..._0x381b38},this['socketAdapter']=createSocketAdapter();}['connect'](){return new Promise(async(_0x14b604,_0x5b7014)=>{if(this['socketAdapter'][_0x498830(0x5e0,0x639)]){_0x14b604();return;}this[_0x498830(0x54d,0x545)]=_0x498830(0x59c,0x52f);function _0x498830(_0x3ebb3c,_0x3b6ec0){return _0x46d3(_0x3ebb3c-0x3c5,_0x3b6ec0);}try{await this[_0x498830(0x557,0x5a9)][_0x498830(0x5e4,0x5dc)](this['url'],{'auth':{'apikey':this[_0x498830(0x5d2,0x64e)]},'transports':[_0x498830(0x573,0x593)],'reconnection':!![],'reconnectionDelay':this[_0x498830(0x559,0x501)]['reconnectInterval'],'reconnectionAttempts':this[_0x498830(0x559,0x51d)]['maxReconnectAttempts'],...this['options'][_0x498830(0x59d,0x577)]}),this[_0x498830(0x51e,0x58b)]=this[_0x498830(0x557,0x4cf)]['socket'],this['socketAdapter']['on'](_0x498830(0x5e4,0x65d),()=>{this['connectionState']=_0x1def2a(0x3d1,0x357),this['reconnectAttempts']=0x0;function _0x1def2a(_0xf75bce,_0x2118d3){return _0x46d3(_0x2118d3-0x13c,_0xf75bce);}this['setupHeartbeat'](),_0x14b604();}),this[_0x498830(0x557,0x592)]['on'](_0x498830(0x5c5,0x5de),()=>{function _0x276738(_0x1a8c40,_0x1aef93){return _0x46d3(_0x1aef93- -0x3cd,_0x1a8c40);}this[_0x276738(-0x21c,-0x245)]='disconnected',this['channels'][_0x276738(-0x1ef,-0x26e)](channel=>{channel['_setState']('closed');});}),this[_0x498830(0x557,0x4ec)]['on'](_0x498830(0x572,0x5b4),_0x313c19=>{this['connectionState']='error',this[_0x1be2dd(0x44a,0x46a)]++;function _0x1be2dd(_0x1603dd,_0x2b781a){return _0x46d3(_0x2b781a-0x22b,_0x1603dd);}this[_0x1be2dd(0x470,0x46a)]>=this['maxReconnectAttempts']&&_0x5b7014(new Error('Failed\x20to\x20connect\x20after\x20'+this['maxReconnectAttempts']+'\x20attempts:\x20'+_0x313c19['message']));}),this['socketAdapter']['on']('reconnect',()=>{function _0x364fcf(_0x3ab677,_0x4eb0fc){return _0x46d3(_0x4eb0fc- -0x2f8,_0x3ab677);}this['connectionState']=_0x364fcf(-0xe6,-0xdd),this['reconnectAttempts']=0x0,this['channels']['forEach'](channel=>{function _0x894248(_0x4e7040,_0xf4d9d9){return _0x46d3(_0x4e7040-0xef,_0xf4d9d9);}channel[_0x894248(0x266,0x218)]();});}),this['socketAdapter']['on']('postgres_changes',_0x25751f=>{const channel=this[_0x4a3deb(0x401,0x47f)]['get'](_0x25751f['topic']);function _0x4a3deb(_0x3bef47,_0x54eea1){return _0x46d3(_0x54eea1-0x226,_0x3bef47);}channel&&channel['_trigger'](_0x4a3deb(0x3b7,0x3df),_0x25751f);}),this['socketAdapter']['on'](_0x498830(0x5af,0x5c8),_0x36f63f=>{function _0xa42cd7(_0x4025f7,_0x144da8){return _0x46d3(_0x4025f7-0xb0,_0x144da8);}const channel=this['channels']['get'](_0x36f63f[_0xa42cd7(0x2ce,0x268)]);channel&&channel[_0xa42cd7(0x2bb,0x2a2)](_0xa42cd7(0x29a,0x261),_0x36f63f);}),this[_0x498830(0x557,0x511)]['on']('presence',_0x4edb06=>{function _0x190301(_0x21727d,_0x4498e7){return _0x46d3(_0x4498e7-0x2f6,_0x21727d);}const channel=this[_0x190301(0x562,0x54f)][_0x190301(0x585,0x525)](_0x4edb06['topic']);channel&&channel[_0x190301(0x4c7,0x501)]('presence',_0x4edb06);});}catch(_0x4949a9){this['connectionState']='error',_0x5b7014(_0x4949a9);}});}[_0x294921(0x4c,0x52)](){this['socketAdapter']&&(this['socketAdapter']['disconnect'](),this['socket']=null);function _0x41c845(_0x115318,_0x3b80d2){return _0x46d3(_0x3b80d2-0x101,_0x115318);}this['connectionState']='disconnected',this['channels'][_0x41c845(0x2ec,0x2f0)]();}[_0x294921(0x10d,0x94)](_0x5e8092){if(this['channels']['has'](_0x5e8092))return this[_0x133a79(0x2e,-0x1d)][_0x133a79(0x4,0x7b)](_0x5e8092);const channel=new RealtimeChannel(_0x5e8092,this['socket']);function _0x133a79(_0x143f60,_0x54ca7b){return _0x46d3(_0x143f60- -0x22b,_0x54ca7b);}return this['channels'][_0x133a79(-0xb8,-0xfd)](_0x5e8092,channel),this[_0x133a79(-0xa3,-0xac)]==='connected'&&channel[_0x133a79(0x1f,0x9b)](),channel;}[_0x294921(0x8a,0x61)](channel){function _0xe21546(_0x4ca9fa,_0x1176cb){return _0x46d3(_0x1176cb-0x189,_0x4ca9fa);}const _0x7c8fb4=channel[_0xe21546(0x41d,0x3a7)];this[_0xe21546(0x3b5,0x3e2)]['has'](_0x7c8fb4)&&(this['channels']['delete'](_0x7c8fb4),channel[_0xe21546(0x43d,0x3da)]());}[_0x294921(0xe3,0x76)](){this['channels'][_0x19dbdd(-0x10e,-0x14f)](channel=>{function _0x47c8b5(_0x343841,_0xfed7d9){return _0x46d3(_0x343841- -0x2d9,_0xfed7d9);}channel[_0x47c8b5(-0x88,-0x73)]();});function _0x19dbdd(_0x5ac880,_0x49ee3f){return _0x46d3(_0x49ee3f- -0x2ae,_0x5ac880);}this['channels']['clear']();}['getChannels'](){function _0x2d7a47(_0x17e078,_0x133eee){return _0x46d3(_0x17e078-0x14,_0x133eee);}return Array['from'](this['channels'][_0x2d7a47(0x1b1,0x179)]());}['isConnected'](){function _0x3728ee(_0x12d254,_0x5cc987){return _0x46d3(_0x5cc987-0x37d,_0x12d254);}return this[_0x3728ee(0x543,0x505)]==='connected'&&this[_0x3728ee(0x4cc,0x50f)][_0x3728ee(0x59b,0x598)];}[_0x294921(0x37,0xa)](){return this['connectionState'];}['onConnectionStateChange'](_0x2ebda7){const _0x2c6761=()=>_0x2ebda7(this['connectionState']);this[_0x4546d1(0x14a,0x10d)]&&(this[_0x4546d1(0x103,0x10d)]['on'](_0x4546d1(0x1d1,0x19a),()=>{this[_0x4d1104(0x547,0x5cf)]=_0x4d1104(0x5da,0x552);function _0x4d1104(_0x3c073b,_0xc92bd2){return _0x46d3(_0x3c073b-0x3bf,_0xc92bd2);}_0x2c6761();}),this[_0x4546d1(0xa9,0x10d)]['on'](_0x4546d1(0x114,0x17b),()=>{function _0xfd843a(_0x12757d,_0x2605bb){return _0x46d3(_0x12757d- -0x3ac,_0x2605bb);}this[_0xfd843a(-0x224,-0x1e6)]=_0xfd843a(-0x1f2,-0x186),_0x2c6761();}),this['socketAdapter']['on'](_0x4546d1(0x164,0x128),()=>{function _0x56b12a(_0x1fa703,_0x33f44e){return _0x46d3(_0x33f44e- -0x1d7,_0x1fa703);}this[_0x56b12a(-0xbf,-0x4f)]=_0x56b12a(-0x1e,-0x62),_0x2c6761();}));function _0x4546d1(_0x57dc30,_0x497bae){return _0x46d3(_0x497bae- -0x85,_0x57dc30);}return()=>{function _0x4e6a6d(_0x595aeb,_0x385e74){return _0x46d3(_0x385e74- -0x37f,_0x595aeb);}this[_0x4e6a6d(-0x1b7,-0x1ed)]&&(this[_0x4e6a6d(-0x171,-0x1ed)][_0x4e6a6d(-0x156,-0x1a3)](_0x4e6a6d(-0x101,-0x160),_0x2c6761),this[_0x4e6a6d(-0x165,-0x1ed)][_0x4e6a6d(-0x1d0,-0x1a3)]('disconnect',_0x2c6761),this['socketAdapter'][_0x4e6a6d(-0x204,-0x1a3)]('connect_error',_0x2c6761));};}['setupHeartbeat'](){if(!this[_0x21bbaf(0x498,0x4e9)][_0x21bbaf(0x534,0x4a9)]||!this[_0x21bbaf(0x53e,0x4e7)])return;function _0x21bbaf(_0x3bbc59,_0x53c663){return _0x46d3(_0x53c663-0x355,_0x3bbc59);}const interval=setInterval(()=>{function _0x122900(_0xacfb5a,_0x5c5ad0){return _0x46d3(_0xacfb5a- -0x20,_0x5c5ad0);}this[_0x122900(0x172,0x16b)]?.[_0x122900(0x1fb,0x20b)]?this[_0x122900(0x172,0x138)][_0x122900(0x219,0x26f)]('heartbeat',{'timestamp':Date[_0x122900(0x232,0x1f0)]()}):clearInterval(interval);},this['options'][_0x21bbaf(0x4e0,0x4a9)]);}[_0x294921(0x28,0x84)](){function _0xa5e03b(_0x5d9589,_0x1aa6a5){return _0x46d3(_0x1aa6a5-0x372,_0x5d9589);}return this[_0xa5e03b(0x4b1,0x4cb)];}}class FunctionsClient{constructor(_0x423a59){this['httpClient']=_0x423a59;}async[_0x294921(-0x77,-0x12)](_0x4bed82,_0x5674fe){function _0x305526(_0x11016d,_0x4998c7){return _0x46d3(_0x4998c7- -0x386,_0x11016d);}try{const _0x423b59=_0x5674fe?.['method']||'POST',headers={'Content-Type':'application/json',..._0x5674fe?.['headers']};let response;const _0x4e155d='/functions/v1/'+_0x4bed82;switch(_0x423b59['toUpperCase']()){case'GET':response=await this['httpClient'][_0x305526(-0xdd,-0x157)](_0x4e155d,{'headers':headers,'params':_0x5674fe?.['body']});break;case'POST':response=await this[_0x305526(-0x22e,-0x1d3)]['post'](_0x4e155d,_0x5674fe?.[_0x305526(-0x17e,-0x1c9)],{'headers':headers});break;case'PUT':response=await this[_0x305526(-0x24e,-0x1d3)]['put'](_0x4e155d,_0x5674fe?.['body'],{'headers':headers});break;case'PATCH':response=await this['httpClient'][_0x305526(-0x16e,-0x1c0)](_0x4e155d,_0x5674fe?.[_0x305526(-0x18b,-0x1c9)],{'headers':headers});break;case'DELETE':response=await this['httpClient'][_0x305526(-0x1f7,-0x202)](_0x4e155d,{'headers':headers,'data':_0x5674fe?.['body']});break;default:throw new EBaaSError(_0x305526(-0x19d,-0x21b)+_0x423b59,0x190);}return{'data':response[_0x305526(-0x1cd,-0x1c5)],'error':null};}catch(_0x207d90){return{'data':null,'error':_0x207d90 instanceof EBaaSError?_0x207d90:new EBaaSError(_0x207d90 instanceof Error?_0x207d90['message']:_0x305526(-0x201,-0x19b),0x0,_0x207d90)};}}async[_0x294921(-0x83,0x8)](){function _0x22dde7(_0x4aa28d,_0x3329e7){return _0x46d3(_0x4aa28d-0x1ed,_0x3329e7);}try{const response=await this[_0x22dde7(0x3a0,0x41e)]['get']('/functions/v1');return{'data':response['data'],'error':null};}catch(_0x1a1f7f){return{'data':null,'error':_0x1a1f7f instanceof EBaaSError?_0x1a1f7f:new EBaaSError(_0x1a1f7f instanceof Error?_0x1a1f7f['message']:_0x22dde7(0x3ec,0x3ab),0x0,_0x1a1f7f)};}}async[_0x294921(-0xa,0x81)](_0x57146d){function _0x359150(_0x47df13,_0x1f678a){return _0x46d3(_0x47df13-0x323,_0x1f678a);}try{const response=await this['httpClient']['get'](_0x359150(0x540,0x511)+_0x57146d+'/info');return{'data':response[_0x359150(0x4e4,0x4a5)],'error':null};}catch(_0x41fd6e){return{'data':null,'error':_0x41fd6e instanceof EBaaSError?_0x41fd6e:new EBaaSError(_0x41fd6e instanceof Error?_0x41fd6e[_0x359150(0x57f,0x5e2)]:_0x359150(0x474,0x43e),0x0,_0x41fd6e)};}}async[_0x294921(-0x33,0x6)](_0x51de24,_0x566572){function _0x110dc3(_0x241df4,_0x4ad443){return _0x46d3(_0x241df4- -0x16b,_0x4ad443);}try{const _0x37051c=new FormData();if(_0x566572['code']instanceof File)_0x37051c[_0x110dc3(0x47,0x13)]('code',_0x566572['code']);else typeof _0x566572['code']==='string'&&_0x37051c['append']('code',new Blob([_0x566572[_0x110dc3(0xb,0x8f)]],{'type':_0x110dc3(0xe4,0x10f)}),_0x110dc3(0x62,0x44));_0x566572['entrypoint']&&_0x37051c[_0x110dc3(0x47,0xcf)]('entrypoint',_0x566572[_0x110dc3(0x73,0xfc)]);_0x566572['env']&&_0x37051c[_0x110dc3(0x47,0x71)](_0x110dc3(0xf5,0x17c),JSON['stringify'](_0x566572[_0x110dc3(0xf5,0x136)]));_0x566572['importMap']&&_0x37051c[_0x110dc3(0x47,0x5a)](_0x110dc3(0xf0,0x138),JSON['stringify'](_0x566572['importMap']));_0x566572['verify']!==undefined&&_0x37051c['append']('verify',String(_0x566572[_0x110dc3(0xc9,0xb4)]));const response=await this[_0x110dc3(0x48,0x96)]['post'](_0x110dc3(0xb2,0x56)+_0x51de24+'/deploy',_0x37051c,{'headers':{'Content-Type':_0x110dc3(0x2b,0x57)}});return{'data':response['data'],'error':null};}catch(_0x3d1f8f){return{'data':null,'error':_0x3d1f8f instanceof EBaaSError?_0x3d1f8f:new EBaaSError(_0x3d1f8f instanceof Error?_0x3d1f8f[_0x110dc3(0xf1,0x10b)]:_0x110dc3(0x75,0x64),0x0,_0x3d1f8f)};}}async[_0x294921(-0x74,-0x2a)](_0x2a49a8){function _0x5c8838(_0x22b811,_0x18014d){return _0x46d3(_0x18014d- -0x18a,_0x22b811);}try{const response=await this['httpClient'][_0x5c8838(-0x81,-0x6)]('/functions/v1/'+_0x2a49a8);return{'data':response['data'],'error':null};}catch(_0x4babc4){return{'data':null,'error':_0x4babc4 instanceof EBaaSError?_0x4babc4:new EBaaSError(_0x4babc4 instanceof Error?_0x4babc4['message']:_0x5c8838(0x31,0xb2),0x0,_0x4babc4)};}}async[_0x294921(0x11,0x10)](_0xca8a7a,_0x57875a){function _0x3addc9(_0x1e8309,_0x7ca6de){return _0x46d3(_0x7ca6de-0x224,_0x1e8309);}try{const response=await this[_0x3addc9(0x423,0x3d7)]['put']('/functions/v1/'+_0xca8a7a+'/env',{'env':_0x57875a});return{'data':response['data'],'error':null};}catch(_0x23d20b){return{'data':null,'error':_0x23d20b instanceof EBaaSError?_0x23d20b:new EBaaSError(_0x23d20b instanceof Error?_0x23d20b[_0x3addc9(0x450,0x480)]:'Failed\x20to\x20update\x20function\x20environment',0x0,_0x23d20b)};}}async[_0x294921(-0x28,0x44)](_0x4f1b58,_0x1e2154){function _0xe5fa59(_0x4a45ec,_0x4c2f2e){return _0x46d3(_0x4a45ec- -0x19e,_0x4c2f2e);}try{const _0x3684eb=new URLSearchParams();_0x1e2154?.[_0xe5fa59(-0x4e,0x1e)]&&_0x3684eb['append'](_0xe5fa59(-0x4e,-0xc),String(_0x1e2154[_0xe5fa59(-0x4e,-0x9b)]));_0x1e2154?.['offset']&&_0x3684eb[_0xe5fa59(0x14,-0x3f)]('offset',String(_0x1e2154[_0xe5fa59(-0x37,0x1f)]));_0x1e2154?.[_0xe5fa59(-0x4c,-0xc0)]&&_0x3684eb['append'](_0xe5fa59(-0x4c,-0x1d),_0x1e2154['level']);const _0x17e229=_0xe5fa59(0x7f,0xab)+_0x4f1b58+_0xe5fa59(0x87,0xb6)+(_0x3684eb[_0xe5fa59(-0x11,-0x9a)]()?'?'+_0x3684eb[_0xe5fa59(-0x11,-0x59)]():''),response=await this[_0xe5fa59(0x15,0x5)]['get'](_0x17e229);return{'data':response['data'],'error':null};}catch(_0x4a0413){return{'data':null,'error':_0x4a0413 instanceof EBaaSError?_0x4a0413:new EBaaSError(_0x4a0413 instanceof Error?_0x4a0413[_0xe5fa59(0xbe,0x133)]:'Failed\x20to\x20get\x20function\x20logs',0x0,_0x4a0413)};}}async[_0x294921(0x87,0x67)](_0x12ff7e,_0x3e2836){function _0x338da5(_0xa9b286,_0x48741c){return _0x46d3(_0xa9b286-0x28b,_0x48741c);}try{const _0x3e4497=new URLSearchParams();_0x3e2836?.[_0x338da5(0x4b1,0x4e2)]&&_0x3e4497['append'](_0x338da5(0x4b1,0x43c),_0x3e2836['period']);const _0x5e7f86='/functions/v1/'+_0x12ff7e+'/metrics'+(_0x3e4497['toString']()?'?'+_0x3e4497['toString']():''),response=await this['httpClient'][_0x338da5(0x4ba,0x46e)](_0x5e7f86);return{'data':response[_0x338da5(0x44c,0x47f)],'error':null};}catch(_0x1fe20e){return{'data':null,'error':_0x1fe20e instanceof EBaaSError?_0x1fe20e:new EBaaSError(_0x1fe20e instanceof Error?_0x1fe20e['message']:_0x338da5(0x470,0x450),0x0,_0x1fe20e)};}}}class EBaaSClient{constructor(_0x359039,_0x4379b9,_0x5ef557){this['options']=_0x5ef557,this[_0x21d965(-0x107,-0x188)]=new HttpClient({'url':_0x359039,'apiKey':_0x4379b9,'timeout':0x7530,'headers':_0x5ef557?.[_0x21d965(-0x18f,-0x180)]?.[_0x21d965(-0x161,-0x1e1)]});function _0x21d965(_0x54bc02,_0x20ed7e){return _0x46d3(_0x20ed7e- -0x33b,_0x54bc02);}this['auth']=new AuthClient(this[_0x21d965(-0xfe,-0x188)],_0x5ef557?.[_0x21d965(-0xf4,-0x14a)]?.['workspaceId']),this['database']=new DatabaseClient(this[_0x21d965(-0x15c,-0x188)],_0x5ef557?.['database']?.[_0x21d965(-0x116,-0x17b)],_0x5ef557?.['rest']?.[_0x21d965(-0x245,-0x1e5)]),this[_0x21d965(-0x1b5,-0x18a)]=new StorageClient(this['httpClient']),this['realtime']=new RealtimeClient(_0x359039,_0x4379b9,_0x5ef557?.['realtime']),this['functions']=new FunctionsClient(this[_0x21d965(-0x116,-0x188)]),this[_0x21d965(-0x9b,-0x119)]();}[_0x294921(0x112,0x87)](_0x235c61){return this['database']['from'](_0x235c61);}[_0x294921(-0x12,-0xb)](_0x255405,_0x5a752c){function _0x30df0a(_0x5b81c3,_0x49a558){return _0x46d3(_0x49a558-0x3b3,_0x5b81c3);}return this[_0x30df0a(0x58d,0x5a4)][_0x30df0a(0x5d1,0x556)](_0x255405,_0x5a752c);}['bucket'](_0x380c28){function _0x5c0d54(_0x55fa4f,_0x333451){return _0x46d3(_0x55fa4f-0x24f,_0x333451);}return this[_0x5c0d54(0x400,0x3de)]['from'](_0x380c28);}[_0x294921(0x66,0x94)](_0x1c5a03){function _0x28122c(_0x12e69d,_0x3395c4){return _0x46d3(_0x12e69d-0x2f5,_0x3395c4);}return this[_0x28122c(0x4a1,0x4ea)][_0x28122c(0x537,0x528)](_0x1c5a03);}[_0x294921(-0x23,-0x12)](_0xbd6f4e,_0x1d3f74){function _0x444f3c(_0x33c233,_0x1ff99a){return _0x46d3(_0x33c233- -0x3b5,_0x1ff99a);}return this['functions'][_0x444f3c(-0x219,-0x1ef)](_0xbd6f4e,_0x1d3f74);}async[_0x294921(0x4d,0x74)](){function _0x346898(_0xdaf922,_0x302491){return _0x46d3(_0x302491- -0x109,_0xdaf922);}if(this['options']?.[_0x346898(0xde,0xe8)]?.[_0x346898(0xc0,0x58)])try{await this['database'][_0x346898(0xf5,0xe5)]();}catch(_0x18e8d1){console['warn']('Failed to initialize custom database detection:',_0x18e8d1);}}async['setWorkspaceId'](_0x220d07){this[_0x18ec09(0x248,0x1f5)][_0x18ec09(0x113,0x139)](_0x220d07);function _0x18ec09(_0x205218,_0x2dc748){return _0x46d3(_0x2dc748- -0x4e,_0x205218);}this[_0x18ec09(0x1f9,0x1a3)]['setWorkspaceId'](_0x220d07),this['options']?.['database']?.[_0x18ec09(0x157,0x113)]&&await this[_0x18ec09(0x191,0x1a3)][_0x18ec09(0x11e,0x1a0)]();}async[_0x294921(0x72,0x48)](_0x229d99){function _0x4d6253(_0x3fb4e9,_0x21b4ec){return _0x46d3(_0x3fb4e9-0x6c,_0x21b4ec);}await this[_0x4d6253(0x25d,0x278)]['configureCustomDatabase'](_0x229d99);}[_0x294921(-0x93,-0x25)](){function _0x248f3e(_0x5dcb7c,_0x397b9a){return _0x46d3(_0x5dcb7c-0x4a,_0x397b9a);}return this[_0x248f3e(0x23b,0x28a)]['getCustomDatabaseStatus']();}}function createClient(_0x493407,_0x2fca66,_0x371adf){return new EBaaSClient(_0x493407,_0x2fca66,_0x371adf);}const version=_0x294921(0xa0,0x7d);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 payload = this.buildSignUpPayload(data);
165
+ const response = await this.httpClient.post('/auth/v1/signup', payload, {
166
+ headers
167
+ });
168
+ if (response.data.session) {
169
+ this.setSessionInternal(response.data.session);
170
+ }
171
+ return response.data;
172
+ }
173
+ catch (error) {
174
+ throw this.handleAuthError(error);
175
+ }
176
+ }
177
+ async signIn(data) {
178
+ try {
179
+ const headers = {};
180
+ // Incluir x-workspace-id se workspaceId foi fornecido
181
+ if (this.workspaceId) {
182
+ headers['x-workspace-id'] = this.workspaceId;
183
+ }
184
+ const response = await this.httpClient.post('/auth/v1/sdk/signin', data, {
185
+ headers
186
+ });
187
+ if (response.data.session) {
188
+ this.setSessionInternal(response.data.session);
189
+ }
190
+ return response.data;
191
+ }
192
+ catch (error) {
193
+ throw this.handleAuthError(error);
194
+ }
195
+ }
196
+ async signOut() {
197
+ try {
198
+ await this.httpClient.post('/auth/v1/signout');
199
+ this.clearSession();
200
+ }
201
+ catch (error) {
202
+ this.clearSession();
203
+ throw this.handleAuthError(error);
204
+ }
205
+ }
206
+ async getUser() {
207
+ if (!this.currentSession?.access_token) {
208
+ return null;
209
+ }
210
+ try {
211
+ const response = await this.httpClient.get('/auth/v1/user');
212
+ return response.data.user;
213
+ }
214
+ catch (error) {
215
+ if (error instanceof EBaaSError && error.status === 401) {
216
+ this.clearSession();
217
+ return null;
218
+ }
219
+ throw this.handleAuthError(error);
220
+ }
221
+ }
222
+ async refreshSession() {
223
+ if (!this.currentSession?.refresh_token) {
224
+ return null;
225
+ }
226
+ try {
227
+ const response = await this.httpClient.post('/auth/v1/refresh', {
228
+ refresh_token: this.currentSession.refresh_token
229
+ });
230
+ if (response.data.session) {
231
+ this.setSession(response.data.session);
232
+ return response.data.session;
233
+ }
234
+ return null;
235
+ }
236
+ catch (error) {
237
+ this.clearSession();
238
+ throw this.handleAuthError(error);
239
+ }
240
+ }
241
+ async resetPassword(email) {
242
+ try {
243
+ await this.httpClient.post('/auth/v1/reset-password', { email });
244
+ }
245
+ catch (error) {
246
+ throw this.handleAuthError(error);
247
+ }
248
+ }
249
+ async updateUser(data) {
250
+ try {
251
+ const response = await this.httpClient.put('/auth/v1/user', data);
252
+ return response.data.user;
253
+ }
254
+ catch (error) {
255
+ throw this.handleAuthError(error);
256
+ }
257
+ }
258
+ getSession() {
259
+ return this.currentSession;
260
+ }
261
+ setSession(session) {
262
+ this.currentSession = session;
263
+ this.httpClient.setAuthToken(session.access_token);
264
+ // Persist session
265
+ if (typeof localStorage !== 'undefined') {
266
+ localStorage.setItem('ebaas.auth.session', JSON.stringify(session));
267
+ }
268
+ }
269
+ onAuthStateChange(callback) {
270
+ // Implementation for auth state change listener
271
+ // This would integrate with the actual auth state management system
272
+ return () => { };
273
+ }
274
+ /**
275
+ * Atualiza o workspace ID (útil quando o usuário troca de workspace)
276
+ */
277
+ setWorkspaceId(workspaceId) {
278
+ this.workspaceId = workspaceId;
279
+ }
280
+ buildSignUpPayload(data) {
281
+ const { metadata, ...rest } = data;
282
+ const payload = { ...rest };
283
+ if (metadata) {
284
+ payload.metadata = metadata;
285
+ }
286
+ const { firstName, lastName } = this.resolveNamesFromMetadata(rest.firstName, rest.lastName, metadata);
287
+ if (firstName && !payload.firstName) {
288
+ payload.firstName = firstName;
289
+ }
290
+ if (lastName && !payload.lastName) {
291
+ payload.lastName = lastName;
292
+ }
293
+ return payload;
294
+ }
295
+ resolveNamesFromMetadata(baseFirstName, baseLastName, metadata) {
296
+ const result = {};
297
+ if (baseFirstName) {
298
+ result.firstName = this.getStringValue(baseFirstName);
299
+ }
300
+ if (baseLastName) {
301
+ result.lastName = this.getStringValue(baseLastName);
302
+ }
303
+ const metadataFirstName = this.getStringValue(metadata?.['first_name'] ?? metadata?.firstName);
304
+ const metadataLastName = this.getStringValue(metadata?.['last_name'] ?? metadata?.lastName);
305
+ const metadataName = this.getStringValue(metadata?.name);
306
+ if (!result.firstName) {
307
+ result.firstName = metadataFirstName ?? (metadataName ? metadataName.split(/\s+/)[0] : undefined);
308
+ }
309
+ if (!result.lastName) {
310
+ if (metadataLastName) {
311
+ result.lastName = metadataLastName;
312
+ }
313
+ else if (metadataName) {
314
+ const parts = metadataName.split(/\s+/);
315
+ if (parts.length > 1) {
316
+ result.lastName = parts.slice(1).join(' ');
317
+ }
318
+ }
319
+ }
320
+ return result;
321
+ }
322
+ getStringValue(value) {
323
+ if (typeof value !== 'string') {
324
+ return undefined;
325
+ }
326
+ const trimmed = value.trim();
327
+ return trimmed.length > 0 ? trimmed : undefined;
328
+ }
329
+ setSessionInternal(session) {
330
+ this.currentSession = session;
331
+ this.httpClient.setAuthToken(session.access_token);
332
+ // Persist session
333
+ if (typeof localStorage !== 'undefined') {
334
+ localStorage.setItem('ebaas.auth.session', JSON.stringify(session));
335
+ }
336
+ }
337
+ clearSession() {
338
+ this.currentSession = null;
339
+ this.httpClient.removeAuthToken();
340
+ // Clear persisted session
341
+ if (typeof localStorage !== 'undefined') {
342
+ localStorage.removeItem('ebaas.auth.session');
343
+ }
344
+ }
345
+ loadSession() {
346
+ if (typeof localStorage !== 'undefined') {
347
+ const storedSession = localStorage.getItem('ebaas.auth.session');
348
+ if (storedSession) {
349
+ try {
350
+ const session = JSON.parse(storedSession);
351
+ this.setSessionInternal(session);
352
+ }
353
+ catch (error) {
354
+ this.clearSession();
355
+ }
356
+ }
357
+ }
358
+ }
359
+ handleAuthError(error) {
360
+ if (error instanceof EBaaSError) {
361
+ return error;
362
+ }
363
+ return new EBaaSError(error.message || 'Authentication failed', error.status || 0, error);
364
+ }
365
+ }
366
+
367
+ class QueryBuilder {
368
+ constructor(httpClient, table, schema, workspaceId, restUrl) {
369
+ this.httpClient = httpClient;
370
+ this.table = table;
371
+ this.schema = schema;
372
+ this.workspaceId = workspaceId;
373
+ this.restUrl = restUrl || '/sdk/v1';
374
+ this.query = {
375
+ filters: []
376
+ };
377
+ }
378
+ select(columns = '*', options) {
379
+ this.query.select = columns;
380
+ return this;
381
+ }
382
+ insert(data, options) {
383
+ return this.executeQuery('POST', `${this.restUrl}/${this.table}?operation=insert`, { data, options });
384
+ }
385
+ update(data, options) {
386
+ this.query.updateData = data;
387
+ this.query.updateOptions = options;
388
+ return this;
389
+ }
390
+ upsert(data, options) {
391
+ return this.executeQuery('POST', `${this.restUrl}/${this.table}?operation=upsert`, {
392
+ data,
393
+ options: { ...options, upsert: true }
394
+ });
395
+ }
396
+ delete(options) {
397
+ this.query.deleteOptions = options;
398
+ this.query.isDelete = true;
399
+ return this;
400
+ }
401
+ // Filter methods
402
+ eq(column, value) {
403
+ this.query.filters.push({ column, operator: 'eq', value });
404
+ return this;
405
+ }
406
+ neq(column, value) {
407
+ this.query.filters.push({ column, operator: 'neq', value });
408
+ return this;
409
+ }
410
+ gt(column, value) {
411
+ this.query.filters.push({ column, operator: 'gt', value });
412
+ return this;
413
+ }
414
+ gte(column, value) {
415
+ this.query.filters.push({ column, operator: 'gte', value });
416
+ return this;
417
+ }
418
+ lt(column, value) {
419
+ this.query.filters.push({ column, operator: 'lt', value });
420
+ return this;
421
+ }
422
+ lte(column, value) {
423
+ this.query.filters.push({ column, operator: 'lte', value });
424
+ return this;
425
+ }
426
+ like(column, pattern) {
427
+ this.query.filters.push({ column, operator: 'like', value: pattern });
428
+ return this;
429
+ }
430
+ ilike(column, pattern) {
431
+ this.query.filters.push({ column, operator: 'ilike', value: pattern });
432
+ return this;
433
+ }
434
+ is(column, value) {
435
+ this.query.filters.push({ column, operator: 'is', value });
436
+ return this;
437
+ }
438
+ in(column, values) {
439
+ this.query.filters.push({ column, operator: 'in', value: values });
440
+ return this;
441
+ }
442
+ contains(column, value) {
443
+ this.query.filters.push({ column, operator: 'contains', value });
444
+ return this;
445
+ }
446
+ match(query) {
447
+ Object.entries(query).forEach(([column, value]) => {
448
+ this.eq(column, value);
449
+ });
450
+ return this;
451
+ }
452
+ // Ordering methods
453
+ order(column, options) {
454
+ if (!this.query.order) {
455
+ this.query.order = [];
456
+ }
457
+ this.query.order.push({
458
+ column,
459
+ ascending: options?.ascending !== false
460
+ });
461
+ return this;
462
+ }
463
+ // Limiting methods
464
+ limit(count) {
465
+ this.query.limit = count;
466
+ return this;
467
+ }
468
+ range(from, to) {
469
+ this.query.range = { from, to };
470
+ return this;
471
+ }
472
+ // Execution method for SELECT, UPDATE, or DELETE
473
+ async execute() {
474
+ // Detectar tipo de operação baseado nos dados do query
475
+ if (this.query.updateData) {
476
+ // UPDATE operation
477
+ return this.executeQuery('PATCH', `${this.restUrl}/${this.table}`, {
478
+ data: this.query.updateData,
479
+ options: this.query.updateOptions,
480
+ filters: this.query.filters
481
+ });
482
+ }
483
+ else if (this.query.isDelete) {
484
+ // DELETE operation
485
+ return this.executeQuery('DELETE', `${this.restUrl}/${this.table}?operation=delete`, {
486
+ options: this.query.deleteOptions,
487
+ filters: this.query.filters
488
+ });
489
+ }
490
+ else {
491
+ // SELECT operation (default)
492
+ return this.executeQuery('GET', `${this.restUrl}/${this.table}?operation=select`, {
493
+ select: this.query.select,
494
+ filters: this.query.filters,
495
+ order: this.query.order,
496
+ limit: this.query.limit,
497
+ range: this.query.range
498
+ });
499
+ }
500
+ }
501
+ // Single row execution
502
+ async single() {
503
+ this.limit(1);
504
+ const result = await this.execute();
505
+ return {
506
+ data: result.data?.[0] || null,
507
+ error: result.error,
508
+ };
509
+ }
510
+ async executeQuery(method, url, payload) {
511
+ try {
512
+ let response;
513
+ // Configurar headers obrigatórios
514
+ const headers = {};
515
+ if (this.workspaceId) {
516
+ headers['x-workspace-id'] = this.workspaceId;
517
+ }
518
+ if (method === 'GET') {
519
+ // Extrair parâmetros existentes da URL (como operation=select)
520
+ const urlParts = url.split('?');
521
+ const baseUrl = urlParts[0];
522
+ const existingParams = new URLSearchParams(urlParts[1] || '');
523
+ // Adicionar novos parâmetros de query
524
+ if (payload.select)
525
+ existingParams.append('select', payload.select);
526
+ // Converter filtros para formato PostgREST
527
+ if (payload.filters?.length) {
528
+ payload.filters.forEach((filter) => {
529
+ existingParams.append(filter.column, `${filter.operator}.${filter.value}`);
530
+ });
531
+ }
532
+ // Converter ordenação para formato PostgREST
533
+ if (payload.order?.length) {
534
+ const orderStr = payload.order.map((ord) => `${ord.column}${ord.ascending ? '.asc' : '.desc'}`).join(',');
535
+ existingParams.append('order', orderStr);
536
+ }
537
+ if (payload.limit)
538
+ existingParams.append('limit', payload.limit.toString());
539
+ if (payload.range) {
540
+ existingParams.append('offset', payload.range.from.toString());
541
+ existingParams.append('limit', (payload.range.to - payload.range.from + 1).toString());
542
+ }
543
+ response = await this.httpClient.get(`${baseUrl}?${existingParams.toString()}`, { headers });
544
+ }
545
+ else if (method === 'DELETE') {
546
+ // Para DELETE, os filtros devem estar na URL (query string), não no body
547
+ // Extrair parâmetros existentes da URL (como operation=delete)
548
+ const urlParts = url.split('?');
549
+ const baseUrl = urlParts[0];
550
+ const existingParams = new URLSearchParams(urlParts[1] || '');
551
+ // Adicionar parâmetro operation=delete se não estiver presente
552
+ if (!existingParams.has('operation')) {
553
+ existingParams.append('operation', 'delete');
554
+ }
555
+ if (payload.filters?.length) {
556
+ // Converter filtros para formato PostgREST
557
+ payload.filters.forEach((filter) => {
558
+ existingParams.append(filter.column, `${filter.operator}.${filter.value}`);
559
+ });
560
+ }
561
+ const deleteUrl = `${baseUrl}?${existingParams.toString()}`;
562
+ console.log('🔧 DELETE URL construída:', deleteUrl);
563
+ console.log('🔧 DELETE headers:', headers);
564
+ console.log('🔧 DELETE filtros originais:', payload.filters);
565
+ response = await this.httpClient.delete(deleteUrl, { headers });
566
+ }
567
+ else if (method === 'PATCH') {
568
+ // Para UPDATE (PATCH), os filtros também devem estar na URL
569
+ // Extrair parâmetros existentes da URL (como operation=update)
570
+ const urlParts = url.split('?');
571
+ const baseUrl = urlParts[0];
572
+ const existingParams = new URLSearchParams(urlParts[1] || '');
573
+ // Adicionar parâmetro operation=update se não estiver presente
574
+ if (!existingParams.has('operation')) {
575
+ existingParams.append('operation', 'update');
576
+ }
577
+ if (payload.filters?.length) {
578
+ // Converter filtros para formato PostgREST
579
+ payload.filters.forEach((filter) => {
580
+ existingParams.append(filter.column, `${filter.operator}.${filter.value}`);
581
+ });
582
+ }
583
+ // Adicionar headers Prefer se necessário
584
+ if (payload.options?.prefer) {
585
+ headers['Prefer'] = payload.options.prefer;
586
+ }
587
+ const updateUrl = `${baseUrl}?${existingParams.toString()}`;
588
+ response = await this.httpClient.patch(updateUrl, payload.data, { headers });
589
+ }
590
+ else {
591
+ // POST mantém o payload no body (para INSERT)
592
+ let postData = payload.data;
593
+ // Sempre retornar dados inseridos por padrão
594
+ if (!headers['Prefer']) {
595
+ headers['Prefer'] = 'return=representation';
596
+ }
597
+ // Se for upsert, adicionar header Prefer
598
+ if (payload.options?.upsert) {
599
+ headers['Prefer'] = 'resolution=merge-duplicates,return=representation';
600
+ }
601
+ // Se for inserção múltipla, usar dataArray
602
+ if (payload.dataArray) {
603
+ postData = payload.dataArray;
604
+ }
605
+ response = await this.httpClient.post(url, postData, { headers });
606
+ }
607
+ return {
608
+ data: response.data,
609
+ error: null,
610
+ count: response.headers?.['x-total-count'] ? parseInt(response.headers['x-total-count']) : undefined
611
+ };
612
+ }
613
+ catch (error) {
614
+ return {
615
+ data: null,
616
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Database operation failed', 0, error)
617
+ };
618
+ }
619
+ }
620
+ }
621
+
622
+ class CustomDatabaseManager {
623
+ constructor(httpClient, workspaceId) {
624
+ this.httpClient = httpClient;
625
+ this.workspaceId = workspaceId;
626
+ }
627
+ /**
628
+ * Detecta automaticamente se o workspace usa banco customizado
629
+ */
630
+ async detectCustomDatabase() {
631
+ if (!this.workspaceId) {
632
+ return { hasCustomDatabase: false };
633
+ }
634
+ try {
635
+ // Busca a configuração do workspace
636
+ const response = await this.httpClient.get('/admin/v1/workspace/custom-database', {
637
+ headers: {
638
+ 'x-workspace-id': this.workspaceId,
639
+ },
640
+ });
641
+ if (response.status === 200 && response.data?.config) {
642
+ const config = response.data.config;
643
+ // Converte para formato de credenciais do SDK
644
+ const credentials = {
645
+ host: config.postgresHost,
646
+ port: config.postgresPort,
647
+ database: config.postgresDatabase,
648
+ username: config.postgresUsername,
649
+ password: '', // Senha não é retornada pela API por segurança
650
+ schema: config.postgresSchema,
651
+ sslEnabled: config.sslEnabled,
652
+ };
653
+ this.detectedConfig = {
654
+ hasCustomDatabase: true,
655
+ config,
656
+ credentials,
657
+ };
658
+ return this.detectedConfig;
659
+ }
660
+ }
661
+ catch (error) {
662
+ // Se erro 404, significa que não há configuração customizada
663
+ if (error?.status === 404) {
664
+ this.detectedConfig = { hasCustomDatabase: false };
665
+ return this.detectedConfig;
666
+ }
667
+ console.warn('Failed to detect custom database configuration:', error);
668
+ }
669
+ this.detectedConfig = { hasCustomDatabase: false };
670
+ return this.detectedConfig;
671
+ }
672
+ /**
673
+ * Testa conexão com banco customizado
674
+ */
675
+ async testConnection(credentials) {
676
+ try {
677
+ const response = await this.httpClient.post('/admin/v1/workspace/custom-database/test-connection', credentials, {
678
+ headers: this.workspaceId ? { 'X-Workspace-ID': this.workspaceId } : {},
679
+ });
680
+ return response.data;
681
+ }
682
+ catch (error) {
683
+ return {
684
+ success: false,
685
+ message: error?.message || 'Failed to test connection',
686
+ };
687
+ }
688
+ }
689
+ /**
690
+ * Configura credenciais customizadas para o workspace
691
+ */
692
+ async configureCustomDatabase(credentials) {
693
+ if (!this.workspaceId) {
694
+ throw new Error('Workspace ID is required to configure custom database');
695
+ }
696
+ const response = await this.httpClient.post('/admin/v1/workspace/custom-database', {
697
+ workspaceId: this.workspaceId,
698
+ ...credentials,
699
+ }, {
700
+ headers: {
701
+ 'X-Workspace-ID': this.workspaceId,
702
+ },
703
+ });
704
+ const config = response.data.config;
705
+ // Atualiza a configuração detectada
706
+ this.detectedConfig = {
707
+ hasCustomDatabase: true,
708
+ config,
709
+ credentials,
710
+ };
711
+ return config;
712
+ }
713
+ /**
714
+ * Remove configuração de banco customizado
715
+ */
716
+ async removeCustomDatabase() {
717
+ if (!this.workspaceId) {
718
+ throw new Error('Workspace ID is required to remove custom database');
719
+ }
720
+ await this.httpClient.delete('/admin/v1/workspace/custom-database', {
721
+ headers: {
722
+ 'X-Workspace-ID': this.workspaceId,
723
+ },
724
+ });
725
+ // Limpa a configuração detectada
726
+ this.detectedConfig = { hasCustomDatabase: false };
727
+ }
728
+ /**
729
+ * Retorna a configuração detectada em cache
730
+ */
731
+ getDetectedConfig() {
732
+ return this.detectedConfig;
733
+ }
734
+ /**
735
+ * Verifica se tem configuração customizada em cache
736
+ */
737
+ hasCustomDatabase() {
738
+ return this.detectedConfig?.hasCustomDatabase ?? false;
739
+ }
740
+ /**
741
+ * Retorna as credenciais customizadas se disponíveis
742
+ */
743
+ getCustomCredentials() {
744
+ return this.detectedConfig?.credentials;
745
+ }
746
+ /**
747
+ * Atualiza o workspace ID
748
+ */
749
+ setWorkspaceId(workspaceId) {
750
+ this.workspaceId = workspaceId;
751
+ // Limpa configuração anterior quando workspace muda
752
+ this.detectedConfig = undefined;
753
+ }
754
+ /**
755
+ * Retorna o workspace ID atual
756
+ */
757
+ getWorkspaceId() {
758
+ return this.workspaceId;
759
+ }
760
+ /**
761
+ * Retorna informações sobre o status do banco customizado
762
+ */
763
+ getStatus() {
764
+ return {
765
+ workspaceId: this.workspaceId,
766
+ hasConfig: this.hasCustomDatabase(),
767
+ configDetails: this.detectedConfig?.credentials ? {
768
+ host: this.detectedConfig.credentials.host,
769
+ port: this.detectedConfig.credentials.port,
770
+ database: this.detectedConfig.credentials.database,
771
+ schema: this.detectedConfig.credentials.schema || 'public',
772
+ sslEnabled: this.detectedConfig.credentials.sslEnabled || false,
773
+ } : undefined,
774
+ };
775
+ }
776
+ }
777
+
778
+ class DatabaseClient {
779
+ constructor(httpClient, workspaceId, restUrl) {
780
+ this.httpClient = httpClient;
781
+ this.customDatabaseManager = new CustomDatabaseManager(httpClient, workspaceId);
782
+ this.restUrl = restUrl || '/sdk/v1';
783
+ }
784
+ from(table) {
785
+ return new QueryBuilder(this.httpClient, table, this.currentSchema, this.customDatabaseManager.getWorkspaceId(), this.restUrl);
786
+ }
787
+ rpc(fn, args) {
788
+ return this.httpClient.post(`/rpc/${fn}`, args);
789
+ }
790
+ schema(schema) {
791
+ const client = new DatabaseClient(this.httpClient, this.customDatabaseManager.getWorkspaceId(), this.restUrl);
792
+ client.currentSchema = schema;
793
+ client.customDatabaseManager = this.customDatabaseManager;
794
+ return client;
795
+ }
796
+ // Métodos para gerenciar banco customizado
797
+ /**
798
+ * Detecta automaticamente se o workspace usa banco customizado
799
+ */
800
+ async detectCustomDatabase() {
801
+ return this.customDatabaseManager.detectCustomDatabase();
802
+ }
803
+ /**
804
+ * Testa conexão com credenciais customizadas
805
+ */
806
+ async testCustomConnection(credentials) {
807
+ return this.customDatabaseManager.testConnection(credentials);
808
+ }
809
+ /**
810
+ * Configura banco customizado para o workspace
811
+ */
812
+ async configureCustomDatabase(credentials) {
813
+ return this.customDatabaseManager.configureCustomDatabase(credentials);
814
+ }
815
+ /**
816
+ * Remove configuração de banco customizado
817
+ */
818
+ async removeCustomDatabase() {
819
+ return this.customDatabaseManager.removeCustomDatabase();
820
+ }
821
+ /**
822
+ * Verifica se o workspace está usando banco customizado
823
+ */
824
+ isUsingCustomDatabase() {
825
+ return this.customDatabaseManager.hasCustomDatabase();
826
+ }
827
+ /**
828
+ * Retorna informações sobre o banco customizado
829
+ */
830
+ getCustomDatabaseStatus() {
831
+ return this.customDatabaseManager.getStatus();
832
+ }
833
+ /**
834
+ * Atualiza o workspace ID (útil quando o usuário troca de workspace)
835
+ */
836
+ setWorkspaceId(workspaceId) {
837
+ this.customDatabaseManager.setWorkspaceId(workspaceId);
838
+ }
839
+ /**
840
+ * Inicializa a detecção automática do banco customizado
841
+ * Deve ser chamado após a autenticação se autoDetectCustomDatabase estiver habilitado
842
+ */
843
+ async initialize() {
844
+ try {
845
+ await this.customDatabaseManager.detectCustomDatabase();
846
+ }
847
+ catch (error) {
848
+ console.warn('Failed to initialize custom database detection:', error);
849
+ }
850
+ }
851
+ }
852
+
853
+ class StorageBucket {
854
+ constructor(httpClient, bucketId) {
855
+ this.httpClient = httpClient;
856
+ this.bucketId = bucketId;
857
+ }
858
+ async upload(path, file, options) {
859
+ try {
860
+ const formData = new FormData();
861
+ if (file instanceof File) {
862
+ formData.append('file', file);
863
+ }
864
+ else if (file instanceof Blob) {
865
+ formData.append('file', file, path);
866
+ }
867
+ else if (file instanceof ArrayBuffer) {
868
+ formData.append('file', new Blob([file]), path);
869
+ }
870
+ else if (typeof file === 'string') {
871
+ formData.append('file', new Blob([file], { type: 'text/plain' }), path);
872
+ }
873
+ formData.append('path', path);
874
+ if (options?.cacheControl) {
875
+ formData.append('cacheControl', options.cacheControl);
876
+ }
877
+ if (options?.contentType) {
878
+ formData.append('contentType', options.contentType);
879
+ }
880
+ if (options?.metadata) {
881
+ formData.append('metadata', JSON.stringify(options.metadata));
882
+ }
883
+ const url = `/storage/buckets/${this.bucketId}/files${options?.upsert ? '?upsert=true' : ''}`;
884
+ const response = await this.httpClient.post(url, formData, {
885
+ headers: {
886
+ 'Content-Type': 'multipart/form-data'
887
+ }
888
+ });
889
+ return {
890
+ data: response.data,
891
+ error: null
892
+ };
893
+ }
894
+ catch (error) {
895
+ return {
896
+ data: null,
897
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to upload file', 0, error)
898
+ };
899
+ }
900
+ }
901
+ async download(path, options) {
902
+ try {
903
+ const params = new URLSearchParams();
904
+ if (options?.transform) {
905
+ Object.entries(options.transform).forEach(([key, value]) => {
906
+ if (value !== undefined) {
907
+ params.append(key, String(value));
908
+ }
909
+ });
910
+ }
911
+ const url = `/storage/buckets/${this.bucketId}/files/${path}${params.toString() ? `?${params.toString()}` : ''}`;
912
+ const response = await this.httpClient.get(url, {
913
+ responseType: 'blob'
914
+ });
915
+ return {
916
+ data: response.data,
917
+ error: null
918
+ };
919
+ }
920
+ catch (error) {
921
+ return {
922
+ data: null,
923
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to download file', 0, error)
924
+ };
925
+ }
926
+ }
927
+ async list(prefix, options) {
928
+ try {
929
+ const params = new URLSearchParams();
930
+ if (prefix) {
931
+ params.append('prefix', prefix);
932
+ }
933
+ if (options?.limit) {
934
+ params.append('limit', String(options.limit));
935
+ }
936
+ if (options?.offset) {
937
+ params.append('offset', String(options.offset));
938
+ }
939
+ if (options?.sortBy) {
940
+ params.append('sortBy', JSON.stringify(options.sortBy));
941
+ }
942
+ if (options?.search) {
943
+ params.append('search', options.search);
944
+ }
945
+ const url = `/storage/buckets/${this.bucketId}/files${params.toString() ? `?${params.toString()}` : ''}`;
946
+ const response = await this.httpClient.get(url);
947
+ return {
948
+ data: response.data,
949
+ error: null
950
+ };
951
+ }
952
+ catch (error) {
953
+ return {
954
+ data: null,
955
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to list files', 0, error)
956
+ };
957
+ }
958
+ }
959
+ async remove(paths) {
960
+ try {
961
+ const response = await this.httpClient.delete(`/storage/buckets/${this.bucketId}/files`, {
962
+ data: { paths }
963
+ });
964
+ return {
965
+ data: response.data,
966
+ error: null
967
+ };
968
+ }
969
+ catch (error) {
970
+ return {
971
+ data: null,
972
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to remove files', 0, error)
973
+ };
974
+ }
975
+ }
976
+ async move(fromPath, toPath) {
977
+ try {
978
+ const response = await this.httpClient.post(`/storage/buckets/${this.bucketId}/files/move`, {
979
+ sourceKey: fromPath,
980
+ destinationKey: toPath
981
+ });
982
+ return {
983
+ data: response.data,
984
+ error: null
985
+ };
986
+ }
987
+ catch (error) {
988
+ return {
989
+ data: null,
990
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to move file', 0, error)
991
+ };
992
+ }
993
+ }
994
+ async copy(fromPath, toPath) {
995
+ try {
996
+ const response = await this.httpClient.post(`/storage/buckets/${this.bucketId}/files/copy`, {
997
+ sourceKey: fromPath,
998
+ destinationKey: toPath
999
+ });
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 copy file', 0, error)
1009
+ };
1010
+ }
1011
+ }
1012
+ async createSignedUrl(path, expiresIn, options) {
1013
+ try {
1014
+ const response = await this.httpClient.post(`/storage/buckets/${this.bucketId}/files/${path}/sign`, {
1015
+ expiresIn,
1016
+ ...options
1017
+ });
1018
+ return {
1019
+ data: response.data,
1020
+ error: null
1021
+ };
1022
+ }
1023
+ catch (error) {
1024
+ return {
1025
+ data: null,
1026
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to create signed URL', 0, error)
1027
+ };
1028
+ }
1029
+ }
1030
+ getPublicUrl(path, options) {
1031
+ const params = new URLSearchParams();
1032
+ if (options?.transform) {
1033
+ Object.entries(options.transform).forEach(([key, value]) => {
1034
+ if (value !== undefined) {
1035
+ params.append(key, String(value));
1036
+ }
1037
+ });
1038
+ }
1039
+ const baseUrl = this.httpClient['baseURL'] || '';
1040
+ const publicUrl = `${baseUrl}/storage/buckets/${this.bucketId}/files/${path}${params.toString() ? `?${params.toString()}` : ''}`;
1041
+ return {
1042
+ data: {
1043
+ publicUrl
1044
+ }
1045
+ };
1046
+ }
1047
+ async getFileInfo(path) {
1048
+ try {
1049
+ const response = await this.httpClient.get(`/storage/buckets/${this.bucketId}/files/${path}/info`);
1050
+ return {
1051
+ data: response.data,
1052
+ error: null
1053
+ };
1054
+ }
1055
+ catch (error) {
1056
+ return {
1057
+ data: null,
1058
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get file info', 0, error)
1059
+ };
1060
+ }
1061
+ }
1062
+ async updateFileMetadata(path, metadata) {
1063
+ try {
1064
+ const response = await this.httpClient.put(`/storage/buckets/${this.bucketId}/files/${path}/metadata`, {
1065
+ metadata
1066
+ });
1067
+ return {
1068
+ data: response.data,
1069
+ error: null
1070
+ };
1071
+ }
1072
+ catch (error) {
1073
+ return {
1074
+ data: null,
1075
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to update file metadata', 0, error)
1076
+ };
1077
+ }
1078
+ }
1079
+ }
1080
+
1081
+ class StorageClient {
1082
+ constructor(httpClient) {
1083
+ this.httpClient = httpClient;
1084
+ }
1085
+ from(bucketId) {
1086
+ return new StorageBucket(this.httpClient, bucketId);
1087
+ }
1088
+ async createBucket(id, options) {
1089
+ try {
1090
+ const response = await this.httpClient.post('/storage/buckets', {
1091
+ id,
1092
+ ...options
1093
+ });
1094
+ return {
1095
+ data: response.data,
1096
+ error: null
1097
+ };
1098
+ }
1099
+ catch (error) {
1100
+ return {
1101
+ data: null,
1102
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to create bucket', 0, error)
1103
+ };
1104
+ }
1105
+ }
1106
+ async getBucket(id) {
1107
+ try {
1108
+ const response = await this.httpClient.get(`/storage/buckets/${id}`);
1109
+ return {
1110
+ data: response.data,
1111
+ error: null
1112
+ };
1113
+ }
1114
+ catch (error) {
1115
+ return {
1116
+ data: null,
1117
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get bucket', 0, error)
1118
+ };
1119
+ }
1120
+ }
1121
+ async listBuckets() {
1122
+ try {
1123
+ const response = await this.httpClient.get('/storage/buckets');
1124
+ return {
1125
+ data: response.data,
1126
+ error: null
1127
+ };
1128
+ }
1129
+ catch (error) {
1130
+ return {
1131
+ data: null,
1132
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to list buckets', 0, error)
1133
+ };
1134
+ }
1135
+ }
1136
+ async updateBucket(id, options) {
1137
+ try {
1138
+ const response = await this.httpClient.put(`/storage/buckets/${id}`, options);
1139
+ return {
1140
+ data: response.data,
1141
+ error: null
1142
+ };
1143
+ }
1144
+ catch (error) {
1145
+ return {
1146
+ data: null,
1147
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to update bucket', 0, error)
1148
+ };
1149
+ }
1150
+ }
1151
+ async deleteBucket(id) {
1152
+ try {
1153
+ const response = await this.httpClient.delete(`/storage/buckets/${id}`);
1154
+ return {
1155
+ data: response.data,
1156
+ error: null
1157
+ };
1158
+ }
1159
+ catch (error) {
1160
+ return {
1161
+ data: null,
1162
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to delete bucket', 0, error)
1163
+ };
1164
+ }
1165
+ }
1166
+ async getUsage() {
1167
+ try {
1168
+ const response = await this.httpClient.get('/storage/usage');
1169
+ return {
1170
+ data: response.data,
1171
+ error: null
1172
+ };
1173
+ }
1174
+ catch (error) {
1175
+ return {
1176
+ data: null,
1177
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get storage usage', 0, error)
1178
+ };
1179
+ }
1180
+ }
1181
+ }
1182
+
1183
+ class EventManager {
1184
+ constructor() {
1185
+ this.events = new Map();
1186
+ this.maxListeners = 10;
1187
+ }
1188
+ on(event, callback) {
1189
+ if (!this.events.has(event)) {
1190
+ this.events.set(event, new Set());
1191
+ }
1192
+ this.events.get(event).add(callback);
1193
+ }
1194
+ off(event, callback) {
1195
+ if (!this.events.has(event))
1196
+ return;
1197
+ const eventCallbacks = this.events.get(event);
1198
+ if (callback) {
1199
+ eventCallbacks.delete(callback);
1200
+ }
1201
+ else {
1202
+ eventCallbacks.clear();
1203
+ }
1204
+ if (eventCallbacks.size === 0) {
1205
+ this.events.delete(event);
1206
+ }
1207
+ }
1208
+ emit(event, ...args) {
1209
+ if (!this.events.has(event))
1210
+ return false;
1211
+ const eventCallbacks = this.events.get(event);
1212
+ for (const callback of eventCallbacks) {
1213
+ try {
1214
+ callback(...args);
1215
+ }
1216
+ catch (error) {
1217
+ console.error(`Error in event listener for "${event}":`, error);
1218
+ }
1219
+ }
1220
+ return eventCallbacks.size > 0;
1221
+ }
1222
+ removeAllListeners(event) {
1223
+ if (event) {
1224
+ this.events.delete(event);
1225
+ }
1226
+ else {
1227
+ this.events.clear();
1228
+ }
1229
+ }
1230
+ listenerCount(event) {
1231
+ return this.events.get(event)?.size ?? 0;
1232
+ }
1233
+ eventNames() {
1234
+ return Array.from(this.events.keys());
1235
+ }
1236
+ listeners(event) {
1237
+ return Array.from(this.events.get(event) ?? []);
1238
+ }
1239
+ addListener(event, callback) {
1240
+ this.on(event, callback);
1241
+ }
1242
+ removeListener(event, callback) {
1243
+ this.off(event, callback);
1244
+ }
1245
+ once(event, callback) {
1246
+ const onceWrapper = (...args) => {
1247
+ this.off(event, onceWrapper);
1248
+ callback(...args);
1249
+ };
1250
+ this.on(event, onceWrapper);
1251
+ }
1252
+ prependListener(event, callback) {
1253
+ this.on(event, callback);
1254
+ }
1255
+ prependOnceListener(event, callback) {
1256
+ const onceWrapper = (...args) => {
1257
+ this.off(event, onceWrapper);
1258
+ callback(...args);
1259
+ };
1260
+ this.on(event, onceWrapper);
1261
+ }
1262
+ setMaxListeners(max) {
1263
+ this.maxListeners = max;
1264
+ return this;
1265
+ }
1266
+ getMaxListeners() {
1267
+ return this.maxListeners;
1268
+ }
1269
+ rawListeners(event) {
1270
+ return this.listeners(event);
1271
+ }
1272
+ }
1273
+
1274
+ class RealtimeChannel extends EventManager {
1275
+ constructor(topic, socket) {
1276
+ super();
1277
+ this.joinedOnce = false;
1278
+ this.state = 'closed';
1279
+ this.subscriptions = new Map();
1280
+ this.topic = topic;
1281
+ this.socket = socket;
1282
+ }
1283
+ subscribe(callback) {
1284
+ if (!this.joinedOnce) {
1285
+ this.joinedOnce = true;
1286
+ this._join();
1287
+ }
1288
+ if (callback) {
1289
+ this.on('status', callback);
1290
+ }
1291
+ return this;
1292
+ }
1293
+ onPostgresChanges(filter, callback) {
1294
+ const eventKey = `postgres_changes:${JSON.stringify(filter)}`;
1295
+ this.on(eventKey, callback);
1296
+ const subscription = {
1297
+ unsubscribe: () => {
1298
+ this.off(eventKey, callback);
1299
+ this.subscriptions.delete(eventKey);
1300
+ }
1301
+ };
1302
+ this.subscriptions.set(eventKey, subscription);
1303
+ if (this.socket?.connected && this.state === 'joined') {
1304
+ this.socket.emit('subscribe_postgres_changes', {
1305
+ topic: this.topic,
1306
+ filter,
1307
+ ref: this.makeRef()
1308
+ });
1309
+ }
1310
+ return subscription;
1311
+ }
1312
+ onBroadcast(filter, callback) {
1313
+ const eventKey = `broadcast:${JSON.stringify(filter)}`;
1314
+ this.on(eventKey, callback);
1315
+ const subscription = {
1316
+ unsubscribe: () => {
1317
+ this.off(eventKey, callback);
1318
+ this.subscriptions.delete(eventKey);
1319
+ }
1320
+ };
1321
+ this.subscriptions.set(eventKey, subscription);
1322
+ return subscription;
1323
+ }
1324
+ onPresence(filter, callback) {
1325
+ const eventKey = `presence:${JSON.stringify(filter)}`;
1326
+ this.on(eventKey, callback);
1327
+ const subscription = {
1328
+ unsubscribe: () => {
1329
+ this.off(eventKey, callback);
1330
+ this.subscriptions.delete(eventKey);
1331
+ }
1332
+ };
1333
+ this.subscriptions.set(eventKey, subscription);
1334
+ return subscription;
1335
+ }
1336
+ send(payload) {
1337
+ return new Promise((resolve) => {
1338
+ if (this.socket?.connected && this.state === 'joined') {
1339
+ this.socket.emit('broadcast', {
1340
+ topic: this.topic,
1341
+ event: payload.event,
1342
+ payload: payload,
1343
+ ref: this.makeRef()
1344
+ });
1345
+ resolve('ok');
1346
+ }
1347
+ else {
1348
+ resolve('error');
1349
+ }
1350
+ });
1351
+ }
1352
+ track(payload) {
1353
+ return new Promise((resolve) => {
1354
+ if (this.socket?.connected && this.state === 'joined') {
1355
+ this.socket.emit('presence', {
1356
+ topic: this.topic,
1357
+ event: 'track',
1358
+ payload: payload,
1359
+ ref: this.makeRef()
1360
+ });
1361
+ resolve('ok');
1362
+ }
1363
+ else {
1364
+ resolve('error');
1365
+ }
1366
+ });
1367
+ }
1368
+ untrack() {
1369
+ return new Promise((resolve) => {
1370
+ if (this.socket?.connected && this.state === 'joined') {
1371
+ this.socket.emit('presence', {
1372
+ topic: this.topic,
1373
+ event: 'untrack',
1374
+ ref: this.makeRef()
1375
+ });
1376
+ resolve('ok');
1377
+ }
1378
+ else {
1379
+ resolve('error');
1380
+ }
1381
+ });
1382
+ }
1383
+ unsubscribe() {
1384
+ return new Promise((resolve) => {
1385
+ this.state = 'leaving';
1386
+ this.subscriptions.forEach(subscription => {
1387
+ subscription.unsubscribe();
1388
+ });
1389
+ this.subscriptions.clear();
1390
+ if (this.socket?.connected) {
1391
+ this.socket.emit('leave', {
1392
+ topic: this.topic,
1393
+ ref: this.makeRef()
1394
+ });
1395
+ }
1396
+ this.state = 'closed';
1397
+ this.removeAllListeners();
1398
+ resolve('ok');
1399
+ });
1400
+ }
1401
+ _join() {
1402
+ if (this.state === 'leaving')
1403
+ return;
1404
+ this.state = 'joining';
1405
+ if (this.socket?.connected) {
1406
+ this.socket.emit('join', {
1407
+ topic: this.topic,
1408
+ ref: this.makeRef()
1409
+ });
1410
+ setTimeout(() => {
1411
+ if (this.state === 'joining') {
1412
+ this.state = 'joined';
1413
+ this.emit('status', 'SUBSCRIBED');
1414
+ }
1415
+ }, 100);
1416
+ }
1417
+ }
1418
+ _rejoin() {
1419
+ if (this.joinedOnce) {
1420
+ this._join();
1421
+ this.subscriptions.forEach((_subscription, eventKey) => {
1422
+ if (eventKey.startsWith('postgres_changes:')) {
1423
+ const filter = JSON.parse(eventKey.replace('postgres_changes:', ''));
1424
+ this.socket?.emit('subscribe_postgres_changes', {
1425
+ topic: this.topic,
1426
+ filter,
1427
+ ref: this.makeRef()
1428
+ });
1429
+ }
1430
+ });
1431
+ }
1432
+ }
1433
+ _trigger(event, payload) {
1434
+ if (event === 'postgres_changes') {
1435
+ const eventKey = `postgres_changes:${JSON.stringify(payload.filter || {})}`;
1436
+ this.emit(eventKey, payload);
1437
+ }
1438
+ else if (event === 'broadcast') {
1439
+ const eventKey = `broadcast:${JSON.stringify({ event: payload.event })}`;
1440
+ this.emit(eventKey, payload);
1441
+ }
1442
+ else if (event === 'presence') {
1443
+ const eventKey = `presence:${JSON.stringify({ event: payload.event })}`;
1444
+ this.emit(eventKey, payload);
1445
+ }
1446
+ this.emit(event, payload);
1447
+ }
1448
+ _setState(state) {
1449
+ this.state = state;
1450
+ let status;
1451
+ switch (state) {
1452
+ case 'joined':
1453
+ status = 'SUBSCRIBED';
1454
+ break;
1455
+ case 'errored':
1456
+ status = 'CHANNEL_ERROR';
1457
+ break;
1458
+ case 'closed':
1459
+ status = 'CLOSED';
1460
+ break;
1461
+ default:
1462
+ return;
1463
+ }
1464
+ this.emit('status', status);
1465
+ }
1466
+ makeRef() {
1467
+ return Math.random().toString(36).substring(2, 15);
1468
+ }
1469
+ getState() {
1470
+ return this.state;
1471
+ }
1472
+ }
1473
+
1474
+ function getEnvironment() {
1475
+ if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
1476
+ return 'react-native';
1477
+ }
1478
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
1479
+ return 'browser';
1480
+ }
1481
+ if (typeof global !== 'undefined' && typeof process !== 'undefined' && process.versions?.node) {
1482
+ return 'node';
1483
+ }
1484
+ return 'browser';
1485
+ }
1486
+ function isSocketIOAvailable() {
1487
+ try {
1488
+ const env = getEnvironment();
1489
+ switch (env) {
1490
+ case 'node':
1491
+ return typeof require !== 'undefined' && require.resolve && !!require.resolve('socket.io-client');
1492
+ case 'browser':
1493
+ if (typeof globalThis !== 'undefined' && 'io' in globalThis) {
1494
+ return true;
1495
+ }
1496
+ return typeof require !== 'undefined' && require.resolve && !!require.resolve('socket.io-client');
1497
+ case 'react-native':
1498
+ try {
1499
+ return typeof require !== 'undefined' && !!require('socket.io-client');
1500
+ }
1501
+ catch {
1502
+ return false;
1503
+ }
1504
+ default:
1505
+ return false;
1506
+ }
1507
+ }
1508
+ catch {
1509
+ return false;
1510
+ }
1511
+ }
1512
+ function getSocketIO() {
1513
+ try {
1514
+ if (typeof require !== 'undefined') {
1515
+ return require('socket.io-client');
1516
+ }
1517
+ if (typeof globalThis !== 'undefined' && 'io' in globalThis) {
1518
+ return { io: globalThis.io };
1519
+ }
1520
+ throw new Error('socket.io-client not available');
1521
+ }
1522
+ catch (error) {
1523
+ throw new Error(`Socket.io-client não está disponível neste ambiente. Para usar funcionalidades de realtime, instale: npm install socket.io-client`);
1524
+ }
1525
+ }
1526
+ class WebSocketAdapter {
1527
+ constructor() {
1528
+ this.socket = null;
1529
+ }
1530
+ async connect(url, options) {
1531
+ if (!isSocketIOAvailable()) {
1532
+ throw new Error('Socket.io-client não está disponível. Para usar funcionalidades de realtime, instale: npm install socket.io-client');
1533
+ }
1534
+ const { io } = getSocketIO();
1535
+ return new Promise((resolve, reject) => {
1536
+ this.socket = io(url, options);
1537
+ this.socket.on('connect', () => resolve());
1538
+ this.socket.on('connect_error', (error) => reject(error));
1539
+ });
1540
+ }
1541
+ disconnect() {
1542
+ if (this.socket) {
1543
+ this.socket.disconnect();
1544
+ this.socket = null;
1545
+ }
1546
+ }
1547
+ emit(event, data) {
1548
+ this.socket?.emit(event, data);
1549
+ }
1550
+ on(event, callback) {
1551
+ this.socket?.on(event, callback);
1552
+ }
1553
+ off(event, callback) {
1554
+ if (callback) {
1555
+ this.socket?.off(event, callback);
1556
+ }
1557
+ else {
1558
+ this.socket?.off(event);
1559
+ }
1560
+ }
1561
+ get connected() {
1562
+ return this.socket?.connected ?? false;
1563
+ }
1564
+ }
1565
+ class ReactNativeSocketAdapter {
1566
+ constructor() {
1567
+ this.socket = null;
1568
+ }
1569
+ async connect(url, options) {
1570
+ if (!isSocketIOAvailable()) {
1571
+ throw new Error('Socket.io-client não está disponível. Para React Native, instale: npm install socket.io-client');
1572
+ }
1573
+ const { io } = getSocketIO();
1574
+ return new Promise((resolve, reject) => {
1575
+ this.socket = io(url, {
1576
+ ...options,
1577
+ transports: ['websocket'],
1578
+ upgrade: false,
1579
+ autoConnect: true,
1580
+ });
1581
+ this.socket.on('connect', () => resolve());
1582
+ this.socket.on('connect_error', (error) => reject(error));
1583
+ });
1584
+ }
1585
+ disconnect() {
1586
+ if (this.socket) {
1587
+ this.socket.disconnect();
1588
+ this.socket = null;
1589
+ }
1590
+ }
1591
+ emit(event, data) {
1592
+ this.socket?.emit(event, data);
1593
+ }
1594
+ on(event, callback) {
1595
+ this.socket?.on(event, callback);
1596
+ }
1597
+ off(event, callback) {
1598
+ if (callback) {
1599
+ this.socket?.off(event, callback);
1600
+ }
1601
+ else {
1602
+ this.socket?.off(event);
1603
+ }
1604
+ }
1605
+ get connected() {
1606
+ return this.socket?.connected ?? false;
1607
+ }
1608
+ }
1609
+ function createSocketAdapter() {
1610
+ const env = getEnvironment();
1611
+ switch (env) {
1612
+ case 'react-native':
1613
+ return new ReactNativeSocketAdapter();
1614
+ case 'browser':
1615
+ case 'node':
1616
+ default:
1617
+ return new WebSocketAdapter();
1618
+ }
1619
+ }
1620
+
1621
+ class RealtimeClient {
1622
+ constructor(url, apiKey, options = {}) {
1623
+ this.socket = null;
1624
+ this.channels = new Map();
1625
+ this.connectionState = 'disconnected';
1626
+ this.reconnectAttempts = 0;
1627
+ this.maxReconnectAttempts = 5;
1628
+ this.url = url;
1629
+ this.apiKey = apiKey;
1630
+ this.options = {
1631
+ heartbeatInterval: 30000,
1632
+ reconnectInterval: 5000,
1633
+ maxReconnectAttempts: 5,
1634
+ ...options
1635
+ };
1636
+ this.socketAdapter = createSocketAdapter();
1637
+ }
1638
+ connect() {
1639
+ return new Promise(async (resolve, reject) => {
1640
+ if (this.socketAdapter.connected) {
1641
+ resolve();
1642
+ return;
1643
+ }
1644
+ this.connectionState = 'connecting';
1645
+ try {
1646
+ await this.socketAdapter.connect(this.url, {
1647
+ auth: {
1648
+ apikey: this.apiKey
1649
+ },
1650
+ transports: ['websocket'],
1651
+ reconnection: true,
1652
+ reconnectionDelay: this.options.reconnectInterval,
1653
+ reconnectionAttempts: this.options.maxReconnectAttempts,
1654
+ ...this.options.socketOptions
1655
+ });
1656
+ this.socket = this.socketAdapter.socket;
1657
+ this.socketAdapter.on('connect', () => {
1658
+ this.connectionState = 'connected';
1659
+ this.reconnectAttempts = 0;
1660
+ this.setupHeartbeat();
1661
+ resolve();
1662
+ });
1663
+ this.socketAdapter.on('disconnect', () => {
1664
+ this.connectionState = 'disconnected';
1665
+ this.channels.forEach(channel => {
1666
+ channel._setState('closed');
1667
+ });
1668
+ });
1669
+ this.socketAdapter.on('connect_error', (error) => {
1670
+ this.connectionState = 'error';
1671
+ this.reconnectAttempts++;
1672
+ if (this.reconnectAttempts >= this.maxReconnectAttempts) {
1673
+ reject(new Error(`Failed to connect after ${this.maxReconnectAttempts} attempts: ${error.message}`));
1674
+ }
1675
+ });
1676
+ this.socketAdapter.on('reconnect', () => {
1677
+ this.connectionState = 'connected';
1678
+ this.reconnectAttempts = 0;
1679
+ this.channels.forEach(channel => {
1680
+ channel._rejoin();
1681
+ });
1682
+ });
1683
+ this.socketAdapter.on('postgres_changes', (payload) => {
1684
+ const channel = this.channels.get(payload.topic);
1685
+ if (channel) {
1686
+ channel._trigger('postgres_changes', payload);
1687
+ }
1688
+ });
1689
+ this.socketAdapter.on('broadcast', (payload) => {
1690
+ const channel = this.channels.get(payload.topic);
1691
+ if (channel) {
1692
+ channel._trigger('broadcast', payload);
1693
+ }
1694
+ });
1695
+ this.socketAdapter.on('presence', (payload) => {
1696
+ const channel = this.channels.get(payload.topic);
1697
+ if (channel) {
1698
+ channel._trigger('presence', payload);
1699
+ }
1700
+ });
1701
+ }
1702
+ catch (error) {
1703
+ this.connectionState = 'error';
1704
+ reject(error);
1705
+ }
1706
+ });
1707
+ }
1708
+ disconnect() {
1709
+ if (this.socketAdapter) {
1710
+ this.socketAdapter.disconnect();
1711
+ this.socket = null;
1712
+ }
1713
+ this.connectionState = 'disconnected';
1714
+ this.channels.clear();
1715
+ }
1716
+ channel(topic) {
1717
+ if (this.channels.has(topic)) {
1718
+ return this.channels.get(topic);
1719
+ }
1720
+ const channel = new RealtimeChannel(topic, this.socket);
1721
+ this.channels.set(topic, channel);
1722
+ if (this.connectionState === 'connected') {
1723
+ channel._join();
1724
+ }
1725
+ return channel;
1726
+ }
1727
+ removeChannel(channel) {
1728
+ const topic = channel.topic;
1729
+ if (this.channels.has(topic)) {
1730
+ this.channels.delete(topic);
1731
+ channel.unsubscribe();
1732
+ }
1733
+ }
1734
+ removeAllChannels() {
1735
+ this.channels.forEach(channel => {
1736
+ channel.unsubscribe();
1737
+ });
1738
+ this.channels.clear();
1739
+ }
1740
+ getChannels() {
1741
+ return Array.from(this.channels.values());
1742
+ }
1743
+ isConnected() {
1744
+ return this.connectionState === 'connected' && this.socketAdapter.connected;
1745
+ }
1746
+ getConnectionState() {
1747
+ return this.connectionState;
1748
+ }
1749
+ onConnectionStateChange(callback) {
1750
+ const handler = () => callback(this.connectionState);
1751
+ if (this.socketAdapter) {
1752
+ this.socketAdapter.on('connect', () => {
1753
+ this.connectionState = 'connected';
1754
+ handler();
1755
+ });
1756
+ this.socketAdapter.on('disconnect', () => {
1757
+ this.connectionState = 'disconnected';
1758
+ handler();
1759
+ });
1760
+ this.socketAdapter.on('connect_error', () => {
1761
+ this.connectionState = 'error';
1762
+ handler();
1763
+ });
1764
+ }
1765
+ return () => {
1766
+ if (this.socketAdapter) {
1767
+ this.socketAdapter.off('connect', handler);
1768
+ this.socketAdapter.off('disconnect', handler);
1769
+ this.socketAdapter.off('connect_error', handler);
1770
+ }
1771
+ };
1772
+ }
1773
+ setupHeartbeat() {
1774
+ if (!this.options.heartbeatInterval || !this.socketAdapter)
1775
+ return;
1776
+ const interval = setInterval(() => {
1777
+ if (this.socketAdapter?.connected) {
1778
+ this.socketAdapter.emit('heartbeat', { timestamp: Date.now() });
1779
+ }
1780
+ else {
1781
+ clearInterval(interval);
1782
+ }
1783
+ }, this.options.heartbeatInterval);
1784
+ }
1785
+ _getSocket() {
1786
+ return this.socket;
1787
+ }
1788
+ }
1789
+
1790
+ class FunctionsClient {
1791
+ constructor(httpClient) {
1792
+ this.httpClient = httpClient;
1793
+ }
1794
+ async invoke(functionName, options) {
1795
+ try {
1796
+ const method = options?.method || 'POST';
1797
+ const headers = {
1798
+ 'Content-Type': 'application/json',
1799
+ ...options?.headers
1800
+ };
1801
+ let response;
1802
+ const url = `/functions/v1/${functionName}`;
1803
+ switch (method.toUpperCase()) {
1804
+ case 'GET':
1805
+ response = await this.httpClient.get(url, {
1806
+ headers,
1807
+ params: options?.body
1808
+ });
1809
+ break;
1810
+ case 'POST':
1811
+ response = await this.httpClient.post(url, options?.body, { headers });
1812
+ break;
1813
+ case 'PUT':
1814
+ response = await this.httpClient.put(url, options?.body, { headers });
1815
+ break;
1816
+ case 'PATCH':
1817
+ response = await this.httpClient.patch(url, options?.body, { headers });
1818
+ break;
1819
+ case 'DELETE':
1820
+ response = await this.httpClient.delete(url, {
1821
+ headers,
1822
+ data: options?.body
1823
+ });
1824
+ break;
1825
+ default:
1826
+ throw new EBaaSError(`Unsupported HTTP method: ${method}`, 400);
1827
+ }
1828
+ return {
1829
+ data: response.data,
1830
+ error: null
1831
+ };
1832
+ }
1833
+ catch (error) {
1834
+ return {
1835
+ data: null,
1836
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Function invocation failed', 0, error)
1837
+ };
1838
+ }
1839
+ }
1840
+ async list() {
1841
+ try {
1842
+ const response = await this.httpClient.get('/functions/v1');
1843
+ return {
1844
+ data: response.data,
1845
+ error: null
1846
+ };
1847
+ }
1848
+ catch (error) {
1849
+ return {
1850
+ data: null,
1851
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to list functions', 0, error)
1852
+ };
1853
+ }
1854
+ }
1855
+ async get(functionName) {
1856
+ try {
1857
+ const response = await this.httpClient.get(`/functions/v1/${functionName}/info`);
1858
+ return {
1859
+ data: response.data,
1860
+ error: null
1861
+ };
1862
+ }
1863
+ catch (error) {
1864
+ return {
1865
+ data: null,
1866
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get function', 0, error)
1867
+ };
1868
+ }
1869
+ }
1870
+ async deploy(functionName, options) {
1871
+ try {
1872
+ const formData = new FormData();
1873
+ if (options.code instanceof File) {
1874
+ formData.append('code', options.code);
1875
+ }
1876
+ else if (typeof options.code === 'string') {
1877
+ formData.append('code', new Blob([options.code], { type: 'text/plain' }), 'index.ts');
1878
+ }
1879
+ if (options.entrypoint) {
1880
+ formData.append('entrypoint', options.entrypoint);
1881
+ }
1882
+ if (options.env) {
1883
+ formData.append('env', JSON.stringify(options.env));
1884
+ }
1885
+ if (options.importMap) {
1886
+ formData.append('importMap', JSON.stringify(options.importMap));
1887
+ }
1888
+ if (options.verify !== undefined) {
1889
+ formData.append('verify', String(options.verify));
1890
+ }
1891
+ const response = await this.httpClient.post(`/functions/v1/${functionName}/deploy`, formData, {
1892
+ headers: {
1893
+ 'Content-Type': 'multipart/form-data'
1894
+ }
1895
+ });
1896
+ return {
1897
+ data: response.data,
1898
+ error: null
1899
+ };
1900
+ }
1901
+ catch (error) {
1902
+ return {
1903
+ data: null,
1904
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to deploy function', 0, error)
1905
+ };
1906
+ }
1907
+ }
1908
+ async delete(functionName) {
1909
+ try {
1910
+ const response = await this.httpClient.delete(`/functions/v1/${functionName}`);
1911
+ return {
1912
+ data: response.data,
1913
+ error: null
1914
+ };
1915
+ }
1916
+ catch (error) {
1917
+ return {
1918
+ data: null,
1919
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to delete function', 0, error)
1920
+ };
1921
+ }
1922
+ }
1923
+ async updateEnv(functionName, env) {
1924
+ try {
1925
+ const response = await this.httpClient.put(`/functions/v1/${functionName}/env`, { env });
1926
+ return {
1927
+ data: response.data,
1928
+ error: null
1929
+ };
1930
+ }
1931
+ catch (error) {
1932
+ return {
1933
+ data: null,
1934
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to update function environment', 0, error)
1935
+ };
1936
+ }
1937
+ }
1938
+ async getLogs(functionName, options) {
1939
+ try {
1940
+ const params = new URLSearchParams();
1941
+ if (options?.limit) {
1942
+ params.append('limit', String(options.limit));
1943
+ }
1944
+ if (options?.offset) {
1945
+ params.append('offset', String(options.offset));
1946
+ }
1947
+ if (options?.level) {
1948
+ params.append('level', options.level);
1949
+ }
1950
+ const url = `/functions/v1/${functionName}/logs${params.toString() ? `?${params.toString()}` : ''}`;
1951
+ const response = await this.httpClient.get(url);
1952
+ return {
1953
+ data: response.data,
1954
+ error: null
1955
+ };
1956
+ }
1957
+ catch (error) {
1958
+ return {
1959
+ data: null,
1960
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get function logs', 0, error)
1961
+ };
1962
+ }
1963
+ }
1964
+ async getMetrics(functionName, options) {
1965
+ try {
1966
+ const params = new URLSearchParams();
1967
+ if (options?.period) {
1968
+ params.append('period', options.period);
1969
+ }
1970
+ const url = `/functions/v1/${functionName}/metrics${params.toString() ? `?${params.toString()}` : ''}`;
1971
+ const response = await this.httpClient.get(url);
1972
+ return {
1973
+ data: response.data,
1974
+ error: null
1975
+ };
1976
+ }
1977
+ catch (error) {
1978
+ return {
1979
+ data: null,
1980
+ error: error instanceof EBaaSError ? error : new EBaaSError(error instanceof Error ? error.message : 'Failed to get function metrics', 0, error)
1981
+ };
1982
+ }
1983
+ }
1984
+ }
1985
+
1986
+ class EBaaSClient {
1987
+ constructor(supabaseUrl, supabaseKey, options) {
1988
+ this.options = options;
1989
+ // Initialize HTTP client
1990
+ this.httpClient = new HttpClient({
1991
+ url: supabaseUrl,
1992
+ apiKey: supabaseKey,
1993
+ timeout: 30000,
1994
+ headers: options?.global?.headers
1995
+ });
1996
+ // Initialize all modules
1997
+ this.auth = new AuthClient(this.httpClient, options?.database?.workspaceId);
1998
+ this.database = new DatabaseClient(this.httpClient, options?.database?.workspaceId, options?.rest?.url);
1999
+ this.storage = new StorageClient(this.httpClient);
2000
+ this.realtime = new RealtimeClient(supabaseUrl, supabaseKey, options?.realtime);
2001
+ this.functions = new FunctionsClient(this.httpClient);
2002
+ // Initialize custom database detection if enabled
2003
+ this.initializeCustomDatabase();
2004
+ }
2005
+ // Convenience method for database access
2006
+ from(table) {
2007
+ return this.database.from(table);
2008
+ }
2009
+ // Convenience method for RPC calls
2010
+ rpc(fn, args) {
2011
+ return this.database.rpc(fn, args);
2012
+ }
2013
+ // Convenience method for storage bucket access
2014
+ bucket(id) {
2015
+ return this.storage.from(id);
2016
+ }
2017
+ // Convenience method for realtime channel access
2018
+ channel(name) {
2019
+ return this.realtime.channel(name);
2020
+ }
2021
+ // Convenience method for edge functions
2022
+ invoke(functionName, options) {
2023
+ return this.functions.invoke(functionName, options);
2024
+ }
2025
+ /**
2026
+ * Inicializa a detecção automática de banco customizado
2027
+ */
2028
+ async initializeCustomDatabase() {
2029
+ if (this.options?.database?.autoDetectCustomDatabase) {
2030
+ try {
2031
+ await this.database.initialize();
2032
+ }
2033
+ catch (error) {
2034
+ console.warn('Failed to initialize custom database detection:', error);
2035
+ }
2036
+ }
2037
+ }
2038
+ /**
2039
+ * Atualiza o workspace ID para todos os módulos que precisam
2040
+ */
2041
+ async setWorkspaceId(workspaceId) {
2042
+ this.auth.setWorkspaceId(workspaceId);
2043
+ this.database.setWorkspaceId(workspaceId);
2044
+ // Se auto-detecção estiver habilitada, re-detecta configuração para o novo workspace
2045
+ if (this.options?.database?.autoDetectCustomDatabase) {
2046
+ await this.database.initialize();
2047
+ }
2048
+ }
2049
+ /**
2050
+ * Configura credenciais customizadas diretamente
2051
+ */
2052
+ async configureCustomDatabase(credentials) {
2053
+ await this.database.configureCustomDatabase(credentials);
2054
+ }
2055
+ /**
2056
+ * Retorna informações sobre o banco customizado
2057
+ */
2058
+ getCustomDatabaseStatus() {
2059
+ return this.database.getCustomDatabaseStatus();
2060
+ }
2061
+ }
2062
+ // Factory function similar to Supabase's createClient
2063
+ function createClient(supabaseUrl, supabaseKey, options) {
2064
+ return new EBaaSClient(supabaseUrl, supabaseKey, options);
2065
+ }
2066
+
2067
+ // Main client export
2068
+ // Version
2069
+ const version = "1.1.8";
2070
+
2071
+ export { AuthClient, CustomDatabaseManager, DatabaseClient, EBaaSClient, EBaaSError, FunctionsClient, HttpClient, QueryBuilder, RealtimeChannel, RealtimeClient, StorageBucket, StorageClient, createClient, version };
2072
+ //# sourceMappingURL=index.esm.js.map