@univerjs-pro/collaboration-endpoint 1.0.1 → 1.0.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.cjs CHANGED
@@ -1 +1 @@
1
- Object['defineProperty'](exports,Symbol['toStringTag'],{'value':'Module'});let e=require('node:crypto'),t=require('@univerjs-pro/collaboration-service'),n=require('@univerjs/protocol'),r=require('@univerjs-pro/collaboration-transport-node');var i={'CHANGESET_ACK':'changeset_ack','CHANGESET_REJ':'changeset_rej','CHANGESET_SHOULD_RETRY':'changeset_should_retry','NEW_CHANGESETS':'new_changesets','PERMISSION_REJ':'permission_rej','UPDATE_CURSOR':'update_cursor','USERS_ENTER':'users_enter','USERS_LEAVE':'users_leave'};function a(_0x3b5a25,_0x199040,_0x1d8ac0=''){return{'cmd':_0x3b5a25,'code':n['CmdRspCode']['OK'],'reason':'success','routeKey':_0x1d8ac0,'infoRsp':{'memberID':_0x199040}};}function o(_0x2459fc,_0x520050,_0x3ad4dc,_0xb220cd){return{'cmd':n['CombCmd']['JOIN'],'code':_0x520050,'reason':_0xb220cd,'routeKey':_0x2459fc,'joinRsp':{'roomInfos':_0x3ad4dc}};}function s(_0x44d46e){return{'memberID':_0x44d46e['memberID'],'userID':_0x44d46e['userID'],'name':_0x44d46e['name'],..._0x44d46e['avatar']===void 0x0?{}:{'avatar':_0x44d46e['avatar']}};}function c(_0x525f65,_0x57e5d7){return{'cmd':n['CombCmd']['RECV'],'code':n['CmdRspCode']['OK'],'reason':'success','routeKey':_0x525f65,'collaMsg':_0x57e5d7};}function l(_0x2929bf,_0x1a3d15){return c(_0x2929bf,{'eventID':i['USERS_ENTER'],'joinEvent':{..._0x1a3d15,'avatar':_0x1a3d15['avatar']??''}});}function u(_0x191492,_0x4c4f10){return c(_0x191492,{'eventID':i['USERS_LEAVE'],'leaveEvent':_0x4c4f10});}function d(_0xc6479f,_0x1d19c3){return c(_0xc6479f,{'eventID':i['UPDATE_CURSOR'],'updateCursorEvent':_0x1d19c3});}function f(_0x226f9e,_0x3b8867,_0xeb8d20){let _0x5b639b={[i['CHANGESET_ACK']]:'csAckEvent',[i['CHANGESET_REJ']]:'csRejEvent',[i['CHANGESET_SHOULD_RETRY']]:'csShouldRetryEvent',[i['NEW_CHANGESETS']]:'newCsEvent',[i['PERMISSION_REJ']]:'permissionRejEvent'}[_0x3b8867];return c(_0x226f9e,{'eventID':_0x3b8867,[_0x5b639b]:{'cs':_0xeb8d20}});}function p(_0x22cc61,_0x2c2faf,_0x4dfebc){return c(_0x22cc61,{..._0x4dfebc,'eventID':_0x2c2faf});}var m=class{['_middlewares']=new Map();['use'](_0x5ed542,_0x9ba20d){let _0x1a43c7=this['_middlewares']['get'](_0x5ed542)??[],_0x48e132=_0x9ba20d;_0x1a43c7['push'](_0x48e132),this['_middlewares']['set'](_0x5ed542,_0x1a43c7);let _0x1e5433=!0x1;return{'dispose':()=>{if(_0x1e5433)return;_0x1e5433=!0x0;let _0x34fa0a=_0x1a43c7['indexOf'](_0x48e132);_0x34fa0a>=0x0&&_0x1a43c7['splice'](_0x34fa0a,0x1);}};}async['run'](_0x588a67,_0x19f9e5,_0x15ab38){let _0x10fa65=[...this['_middlewares']['get'](_0x588a67)??[]],_0x2ece91=async _0x33c27e=>{let _0x20f2a1=_0x10fa65[_0x33c27e];if(!_0x20f2a1){await _0x15ab38();return;}let _0x5a1fc8=!0x1,_0x4d68ec,_0x5c94b8=()=>{if(_0x5a1fc8)throw Error('Endpoint\x20middleware\x20for\x20'+String(_0x588a67)+'\x20called\x20next()\x20more\x20than\x20once');return _0x5a1fc8=!0x0,_0x4d68ec=_0x2ece91(_0x33c27e+0x1),_0x4d68ec;};try{await _0x20f2a1(_0x19f9e5,_0x5c94b8);}catch(_0x17f583){if(_0x4d68ec)try{await _0x4d68ec;}catch{}throw _0x17f583;}if(!_0x5a1fc8)throw Error('Endpoint\x20middleware\x20for\x20'+String(_0x588a67)+'\x20completed\x20without\x20calling\x20next()');await _0x4d68ec;};await _0x2ece91(0x0);}['clear'](){this['_middlewares']['clear']();}},h={'code':n['ErrorCode']['OK'],'message':''};function g(_0x51f9c8,_0x58efa7){if(!/^-?\d+$/['test'](_0x51f9c8))throw new t['CollabError']('INVALID_REQUEST',_0x58efa7+'\x20must\x20be\x20an\x20integer');let _0x47a01e=Number(_0x51f9c8);if(!Number['isSafeInteger'](_0x47a01e))throw new t['CollabError']('INVALID_REQUEST',_0x58efa7+'\x20is\x20outside\x20the\x20safe\x20integer\x20range');return _0x47a01e;}function _(_0x40d03c){if(_0x40d03c instanceof r['NodeTransportError'])return _0x40d03c['code']==='REQUEST_BODY_TOO_LARGE'?{'status':0x19d,'error':{'code':n['ErrorCode']['INVALID_ARGUMENT'],'message':_0x40d03c['message']}}:_0x40d03c['code']==='INVALID_JSON'||_0x40d03c['code']==='REQUEST_ABORTED'?{'status':0x190,'error':{'code':n['ErrorCode']['INVALID_ARGUMENT'],'message':_0x40d03c['message']}}:{'status':0x1f7,'error':{'code':n['ErrorCode']['INTERNAL_ERROR'],'message':'Transport\x20unavailable'}};if(!(_0x40d03c instanceof t['CollabError']))return{'status':0x1f4,'error':{'code':n['ErrorCode']['INTERNAL_ERROR'],'message':'Internal\x20server\x20error'}};let _0x42c7c5={'UNAUTHENTICATED':{'status':0x191,'code':n['ErrorCode']['UNAUTHENTICATED']},'INVALID_REQUEST':{'status':0x190,'code':n['ErrorCode']['INVALID_ARGUMENT']},'UNIT_NOT_FOUND':{'status':0x194,'code':n['ErrorCode']['NOT_FOUND']},'PERMISSION_DENIED':{'status':0x193,'code':n['ErrorCode']['PERMISSION_DENIED']},'OT_CONFLICT':{'status':0x199,'code':n['ErrorCode']['APPLY_REJECT']},'REVISION_MISMATCH':{'status':0x199,'code':n['ErrorCode']['CHANGESET_REVISION_CONFILICT']},'ADAPTER_FAILURE':{'status':0x1f7,'code':n['ErrorCode']['INTERNAL_ERROR']},'INTERNAL_ERROR':{'status':0x1f4,'code':n['ErrorCode']['INTERNAL_ERROR']}}[_0x40d03c['code']];return{'status':_0x42c7c5['status'],'error':{'code':_0x42c7c5['code'],'message':_0x40d03c['message']}};}function v(_0x33f483,_0x5a486f,_0x367b1a){_0x33f483['writableEnded']||_0x33f483['destroyed']||(_0x33f483['statusCode']=_0x5a486f,_0x33f483['setHeader']('content-type','application/json;\x20charset=utf-8'),_0x33f483['end'](JSON['stringify'](_0x367b1a,(_0x35bc9f,_0x262ac2)=>_0x262ac2 instanceof Uint8Array?Buffer['from'](_0x262ac2)['toString']('base64'):_0x262ac2)));}var y=class{['_tickets']=new Map();['_disposed']=!0x1;async['issue'](_0x4459ef,_0x2a1565){if(this['_disposed'])throw Error('Session\x20ticket\x20store\x20is\x20disposed');if(!Number['isSafeInteger'](_0x2a1565)||_0x2a1565<=0x0)throw TypeError('Session\x20ticket\x20TTL\x20must\x20be\x20a\x20positive\x20safe\x20integer');this['_purgeExpired']();let _0x3c314d;do _0x3c314d=(0x0,e['randomBytes'])(0x20)['toString']('base64url');while(this['_tickets']['has'](_0x3c314d));return this['_tickets']['set'](_0x3c314d,{'record':_0x4459ef,'expiresAt':Date['now']()+_0x2a1565}),_0x3c314d;}async['consume'](_0x502f22){if(this['_disposed']||!_0x502f22)return null;let _0x20a659=this['_tickets']['get'](_0x502f22);return!_0x20a659||(this['_tickets']['delete'](_0x502f22),_0x20a659['expiresAt']<=Date['now']())?null:_0x20a659['record'];}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_tickets']['clear']());}['_purgeExpired'](){let _0x1c75a6=Date['now']();for(let [_0xab4b10,_0x141204]of this['_tickets'])_0x141204['expiresAt']<=_0x1c75a6&&this['_tickets']['delete'](_0xab4b10);}},b=0x5*0xea60;function x(_0x518816){if(!_0x518816['startsWith']('/')||_0x518816==='/'||_0x518816['endsWith']('/')||_0x518816['includes']('?')||_0x518816['includes']('#'))throw TypeError('protocolBasePath\x20must\x20be\x20an\x20absolute\x20path\x20without\x20a\x20trailing\x20slash');return _0x518816;}function S(_0x878ba4){if(!_0x878ba4||typeof _0x878ba4!='object')throw new t['CollabError']('INVALID_REQUEST','Request\x20body\x20must\x20be\x20an\x20object');let _0x224fa8=_0x878ba4;if(typeof _0x224fa8['unitID']!='string'||typeof _0x224fa8['memberID']!='string'||!Number['isSafeInteger'](_0x224fa8['type'])||!_0x224fa8['changeset']||typeof _0x224fa8['changeset']!='object')throw new t['CollabError']('INVALID_REQUEST','Invalid\x20new\x20changes\x20request');}function C(_0x344579){if(!Array['isArray'](_0x344579)||_0x344579['length']===0x0||_0x344579['some'](_0x59bbdb=>typeof _0x59bbdb!='string'||_0x59bbdb['trim']()['length']===0x0))throw new t['CollabError']('INVALID_REQUEST','unitIds\x20must\x20be\x20a\x20non-empty\x20string\x20array');}function w(_0x3db7f4){let _0x427f59=_0x3db7f4['getAll']('unitIds');C(_0x427f59);let _0x13818d=_0x3db7f4['getAll']('hardDelete');if(_0x13818d['length']>0x1||_0x13818d['length']===0x1&&_0x13818d[0x0]!=='true'&&_0x13818d[0x0]!=='false')throw new t['CollabError']('INVALID_REQUEST','hardDelete\x20must\x20be\x20true\x20or\x20false');return{'unitIds':_0x427f59,'hardDelete':_0x13818d[0x0]==='true'};}function T(_0x158580){if(!_0x158580||typeof _0x158580!='object')throw new t['CollabError']('INVALID_REQUEST','Request\x20body\x20must\x20be\x20an\x20object');C(_0x158580['unitIds']);}var E=class{['_service'];['_middleware']=new m();['_listeners']=new Map();['_bindingsByConnection']=new Map();['_bindingsByMember']=new Map();['_rooms']=new Map();['_outboundQueues']=new Map();['_ticketStore'];['_ownsTicketStore'];['_ticketTtlMs'];['_protocolBasePath'];['_serviceSubscriptions'];['_deletedUnitIDs']=new Set();['_disposed']=!0x1;constructor(_0x8cdb0a,_0x2b8221={}){if(this['_service']=_0x8cdb0a,!_0x8cdb0a)throw TypeError('UniverCollabEndpoint\x20requires\x20a\x20service');if(this['_ticketStore']=_0x2b8221['ticketStore']??new y(),this['_ownsTicketStore']=_0x2b8221['ticketStore']===void 0x0,this['_ticketTtlMs']=_0x2b8221['sessionTicketTtlMs']??b,!Number['isSafeInteger'](this['_ticketTtlMs'])||this['_ticketTtlMs']<=0x0)throw TypeError('sessionTicketTtlMs\x20must\x20be\x20a\x20positive\x20safe\x20integer');this['_protocolBasePath']=x(_0x2b8221['protocolBasePath']??'/universer-api'),this['_serviceSubscriptions']=[this['_service']['on']('changesetCommitted',_0x53bba4=>{this['_enqueueCommittedChangeset'](_0x53bba4['changeset'],_0x53bba4['memberID']);}),this['_service']['on']('unitsDeleted',_0x525d03=>{for(let _0x4e5bf3 of _0x525d03['request']['unitIDs'])this['_deletedUnitIDs']['add'](_0x4e5bf3);for(let _0x172d32 of _0x525d03['request']['unitIDs'])this['_enqueueUnitOutbound'](_0x172d32,async()=>{this['_evictUnitRoom'](_0x172d32);});}),this['_service']['on']('unitsRecovered',async _0x32a7fd=>{await Promise['all'](_0x32a7fd['request']['unitIDs']['map'](_0x41f5e8=>this['_enqueueUnitOutbound'](_0x41f5e8,async()=>{this['_deletedUnitIDs']['delete'](_0x41f5e8);})));})];}['use'](_0xdbb03f,_0x1c2b59){return this['_assertRunning'](),this['_middleware']['use'](_0xdbb03f,_0x1c2b59);}['on'](_0x3f471d,_0x5ca038){this['_assertRunning']();let _0x174162=this['_listeners']['get'](_0x3f471d)??new Set(),_0xdc590e=_0x5ca038;_0x174162['add'](_0xdc590e),this['_listeners']['set'](_0x3f471d,_0x174162);let _0x2e647e=!0x1;return{'dispose':()=>{_0x2e647e||(_0x2e647e=!0x0,_0x174162['delete'](_0xdc590e));}};}['findJoinedSession'](_0x5b7c47){if(this['_disposed'])return null;let _0x5addb1=this['_bindingsByMember']['get'](_0x5b7c47['memberID']);return!_0x5addb1||_0x5addb1['session']['userID']!==_0x5b7c47['authenticatedUserID']||!_0x5addb1['joinedUnitIDs']['has'](_0x5b7c47['unitID'])?null:_0x5addb1['session'];}['findJoinedSessionByUser'](_0x5e66d1){if(this['_disposed'])return null;for(let _0xaecc05 of this['_rooms']['get'](_0x5e66d1['unitID'])?.['values']()??[])if(_0xaecc05['session']['userID']===_0x5e66d1['authenticatedUserID'])return _0xaecc05['session'];return null;}async['invalidateUnitSessions'](_0x136c8e){if(this['_assertRunning'](),typeof _0x136c8e['unitID']!='string'||!_0x136c8e['unitID'])throw TypeError('unitID\x20must\x20be\x20a\x20non-empty\x20string');if(_0x136c8e['userID']!==void 0x0&&(typeof _0x136c8e['userID']!='string'||!_0x136c8e['userID']))throw TypeError('userID\x20must\x20be\x20a\x20non-empty\x20string\x20when\x20provided');await this['_enqueueUnitOutbound'](_0x136c8e['unitID'],async()=>{let _0x4f017c=[...this['_rooms']['get'](_0x136c8e['unitID'])?.['values']()??[]]['filter'](_0x3e5cc8=>_0x136c8e['userID']===void 0x0||_0x3e5cc8['session']['userID']===_0x136c8e['userID']);for(let _0x128712 of _0x4f017c)_0x128712['connection']['close'](0xfa3,'Unit\x20access\x20changed'),await this['_disconnectBinding'](_0x128712,'session-evicted');});}async['publishTrustedUnitEvent'](_0x28e226){this['_assertRunning']();let _0x3dfa4f=[...this['_rooms']['get'](_0x28e226['unitID'])?.['keys']()??[]],_0x312045=this['_bindingsByMember']['get'](_0x28e226['memberID'])?.['joinedUnitIDs']['has'](_0x28e226['unitID'])?_0x28e226['memberID']:void 0x0,_0x26a25a=p(_0x28e226['unitID'],_0x28e226['eventID'],_0x28e226['data']);this['_enqueueUnitOutbound'](_0x28e226['unitID'],async()=>{for(let _0x577b4f of _0x3dfa4f){if(_0x577b4f===_0x312045)continue;let _0x239dd4=this['_bindingsByMember']['get'](_0x577b4f);_0x239dd4?.['joinedUnitIDs']['has'](_0x28e226['unitID'])&&await this['_safeSend'](_0x239dd4['connection'],_0x26a25a);}});}['register'](_0x53172d){this['_assertRunning']();let _0x3834eb=this['_protocolBasePath'],_0x685892=_0x31a2f2=>_0x4f522c=>this['_handleHttp'](_0x4f522c,_0x31a2f2);_0x53172d['get'](_0x3834eb+'/user/session-ticket',_0x685892('ticket')),_0x53172d['delete'](_0x3834eb+'/snapshot/-/units',_0x685892('delete-units')),_0x53172d['post'](_0x3834eb+'/snapshot/-/units/recover',_0x685892('recover-units')),_0x53172d['post'](_0x3834eb+'/comb/:type/unit/:unitID/new_changes',_0x685892('new-changes')),_0x53172d['get'](_0x3834eb+'/snapshot/block/:type/unit/:unitID/block/:blockID',_0x685892('deserialized-block')),_0x53172d['get'](_0x3834eb+'/snapshot/:type/unit/:unitID/rev/:revision',_0x685892('unit')),_0x53172d['get'](_0x3834eb+'/snapshot/:type/unit/:unitID/block/:blockID',_0x685892('block')),_0x53172d['get'](_0x3834eb+'/snapshot/:type/unit/:unitID/fetchmissing',_0x685892('fetch-missing')),_0x53172d['upgrade'](_0x3834eb+'/comb/connect',_0x507f51=>this['_handleUpgrade'](_0x507f51));}async['_handleUpgrade'](_0x36e227){if(this['_disposed']){_0x36e227['reject'](0x1f7,'Endpoint\x20is\x20disposed');return;}let _0x43dee5=new URL(_0x36e227['incomingMessage']['url']??'/','http://localhost'),_0x2653ae=await this['_ticketStore']['consume'](_0x43dee5['searchParams']['get']('sessionTicket')??'');if(!_0x2653ae){_0x36e227['reject'](0x191,'Invalid\x20or\x20expired\x20session\x20ticket');return;}_0x36e227['accept']({'open':({connection:_0x82dbf5})=>this['_openConnection'](_0x2653ae,_0x82dbf5),'message':_0x2ffe2f=>this['_handleMessage'](_0x2ffe2f),'close':({connection:_0x402c12})=>this['_disconnectConnection'](_0x402c12,'connection-closed')});}async['dispose'](){if(this['_disposed'])return;this['_disposed']=!0x0;for(let _0x233d57 of this['_serviceSubscriptions'])_0x233d57['dispose']();await Promise['allSettled']([...this['_outboundQueues']['values']()]);let _0xe1b72a=[...this['_bindingsByConnection']['values']()];for(let _0x36cde3 of _0xe1b72a)await this['_disconnectBinding'](_0x36cde3,'endpoint-disposed'),_0x36cde3['connection']['close'](0x3e9,'Endpoint\x20disposed');this['_bindingsByConnection']['clear'](),this['_bindingsByMember']['clear'](),this['_rooms']['clear'](),this['_outboundQueues']['clear'](),this['_middleware']['clear'](),this['_listeners']['clear'](),this['_ownsTicketStore']&&await this['_ticketStore']['dispose']?.();}async['_handleHttp'](_0x6a10cb,_0x5070f0){try{this['_assertRunning']();let _0x2547ab=new URL(_0x6a10cb['incomingMessage']['url']??'/','http://localhost');if(!_0x6a10cb['userID'])throw new t['CollabError']('UNAUTHENTICATED','HTTP\x20user\x20is\x20not\x20authenticated');if(_0x5070f0==='ticket'){let _0x50d0cd=await this['_ticketStore']['issue']({'userID':_0x6a10cb['userID'],'customData':_0x6a10cb['customData']},this['_ticketTtlMs']);v(_0x6a10cb['response'],0xc8,{'error':h,'ticket':_0x50d0cd});return;}let _0x287baa={'userID':_0x6a10cb['userID'],'customData':_0x6a10cb['customData']};if(_0x5070f0==='delete-units'){let _0x32704c=w(_0x2547ab['searchParams']);await this['_service']['deleteUnits']({'unitIDs':_0x32704c['unitIds'],'hardDelete':_0x32704c['hardDelete']},_0x287baa),v(_0x6a10cb['response'],0xc8,{'error':h});return;}if(_0x5070f0==='recover-units'){let _0x2c3dd3=await _0x6a10cb['readJson']();T(_0x2c3dd3),await this['_service']['recoverUnits']({'unitIDs':_0x2c3dd3['unitIds']},_0x287baa),v(_0x6a10cb['response'],0xc8,{'error':h});return;}let _0xc07bb8=g(_0x6a10cb['params']['type'],'type'),_0x2185db=_0x6a10cb['params']['unitID'];if(_0x5070f0==='new-changes'){await this['_handleNewChanges'](_0x6a10cb,_0x2185db,_0xc07bb8);return;}switch(_0x5070f0){case'unit':{let _0x5ba9d9=g(_0x6a10cb['params']['revision'],'revision'),_0xc88e77=await this['_service']['getUnitLoadData']({'unitID':_0x2185db,'type':_0xc07bb8,'revision':_0x5ba9d9},_0x287baa);v(_0x6a10cb['response'],0xc8,{'error':h,'snapshot':_0xc88e77['snapshot'],'changesets':_0xc88e77['changesets']});return;}case'block':case'deserialized-block':{let _0x4b0a01=await this['_service']['getSheetBlock']({'unitID':_0x2185db,'type':_0xc07bb8,'blockID':_0x6a10cb['params']['blockID']},_0x287baa);if(!_0x4b0a01['block'])throw new t['CollabError']('UNIT_NOT_FOUND','Sheet\x20block\x20was\x20not\x20found');let _0x10ef30=_0x5070f0==='deserialized-block'?{..._0x4b0a01['block'],'data':JSON['parse'](new TextDecoder()['decode'](_0x4b0a01['block']['data']))}:_0x4b0a01['block'];v(_0x6a10cb['response'],0xc8,{'error':h,'block':_0x10ef30});return;}case'fetch-missing':{let _0x5a0781=g(_0x2547ab['searchParams']['get']('from')??'','from'),_0x165678=g(_0x2547ab['searchParams']['get']('to')??'','to'),_0x32e650=await this['_service']['getChangesets']({'unitID':_0x2185db,'type':_0xc07bb8,'from':_0x5a0781,'to':_0x165678},_0x287baa);v(_0x6a10cb['response'],0xc8,{'error':h,'changesets':_0x32e650['changesets']});return;}}}catch(_0x406a6c){let _0x20fedc=_(_0x406a6c instanceof SyntaxError?new t['CollabError']('INTERNAL_ERROR','Stored\x20sheet\x20block\x20is\x20not\x20valid\x20JSON',{'cause':_0x406a6c}):_0x406a6c);v(_0x6a10cb['response'],_0x20fedc['status'],{'error':_0x20fedc['error']});}}async['_openConnection'](_0x2326dd,_0x1ceee7){try{let _0x81ef9c=(0x0,e['randomUUID'])(),_0x63f255={'memberID':_0x81ef9c,'userID':_0x2326dd['userID'],'customData':_0x2326dd['customData']},_0x1a9c2d={'memberID':_0x81ef9c,'userID':_0x2326dd['userID'],'name':_0x2326dd['userID']},_0x3786a8={'connection':_0x1ceee7,'session':_0x63f255,'member':_0x1a9c2d};await this['_middleware']['run']('connect',_0x3786a8,()=>void 0x0);let _0x58d86c={'connection':_0x1ceee7,'session':_0x63f255,'member':_0x1a9c2d,'joinedUnitIDs':new Set()};this['_bindingsByConnection']['set'](_0x1ceee7['id'],_0x58d86c),this['_bindingsByMember']['set'](_0x81ef9c,_0x58d86c);}catch(_0x25e7ec){_0x1ceee7['close'](_0x25e7ec instanceof t['CollabError']?0x3f0:0x3f3,_0x25e7ec instanceof t['CollabError']?'Connection\x20rejected':'Endpoint\x20failure');}}async['_handleMessage'](_0x389734){let _0x314e44=this['_bindingsByConnection']['get'](_0x389734['connection']['id']);if(!_0x314e44){_0x389734['connection']['close'](0x3f0,'WebSocket\x20Session\x20is\x20not\x20established');return;}if(typeof _0x389734['data']!='string'){_0x389734['connection']['close'](0x3eb,'Comb\x20messages\x20must\x20be\x20JSON\x20text');return;}let _0x3397e1;try{let _0x4d02d4=JSON['parse'](_0x389734['data']);if(!_0x4d02d4||typeof _0x4d02d4!='object')throw Error('invalid');_0x3397e1=_0x4d02d4;}catch{_0x389734['connection']['close'](0x3eb,'Invalid\x20Comb\x20JSON\x20message');return;}let _0x50a37c=typeof _0x3397e1['routeKey']=='string'?_0x3397e1['routeKey']:'';switch(_0x3397e1['cmd']){case n['CombCmd']['HELLO']:case n['CombCmd']['HEARTBEAT']:await _0x389734['connection']['send'](JSON['stringify'](a(_0x3397e1['cmd'],_0x314e44['member']['memberID'],_0x50a37c)));return;case n['CombCmd']['JOIN']:await this['_handleJoin'](_0x314e44,_0x3397e1,_0x50a37c);return;case n['CombCmd']['LEAVE']:await this['_handleLeave'](_0x314e44,_0x3397e1,_0x50a37c);return;case n['CombCmd']['INGEST']:if(_0x3397e1['collaMsg']?.['eventID']!==i['UPDATE_CURSOR'])return;await this['_handlePresence'](_0x314e44,_0x3397e1,_0x389734['customData']);return;default:return;}}async['_handleJoin'](_0x3761a3,_0x330366,_0x1c0dd5){let _0x21834d=_0x330366['joinReq']?.['rooms'],_0x1566ee=_0x21834d?.['length']?_0x21834d['map'](_0x53c904=>_0x53c904['roomID']):_0x1c0dd5?[_0x1c0dd5]:[];if(_0x1566ee['length']===0x0||_0x1566ee['some'](_0x2d2875=>typeof _0x2d2875!='string'||!_0x2d2875)){await _0x3761a3['connection']['send'](JSON['stringify'](o(_0x1c0dd5,n['CmdRspCode']['FAIL'],{},'Invalid\x20JOIN\x20request')));return;}let _0x1c8ccb=[...new Set(_0x1566ee)],_0x14f51e=_0x1c8ccb['filter'](_0x522a97=>!_0x3761a3['joinedUnitIDs']['has'](_0x522a97));try{for(let _0x3003a0 of _0x1c8ccb)this['_assertJoinable'](_0x3003a0);for(let _0x5bbfbb of _0x14f51e)await this['_middleware']['run']('joinUnit',{'session':_0x3761a3['session'],'unitID':_0x5bbfbb},()=>void 0x0);for(let _0x596909 of _0x1c8ccb)this['_assertJoinable'](_0x596909);}catch(_0x259d3f){let _0x225d25=_0x259d3f instanceof t['CollabError']&&_0x259d3f['code']==='UNIT_NOT_FOUND'?n['CmdRspCode']['JOIN_ROOM_NOT_EXISTS']:_0x259d3f instanceof t['CollabError']&&(_0x259d3f['code']==='PERMISSION_DENIED'||_0x259d3f['code']==='UNAUTHENTICATED')?n['CmdRspCode']['JOIN_ROOM_PERMISSION_DENIED']:n['CmdRspCode']['FAIL'];await _0x3761a3['connection']['send'](JSON['stringify'](o(_0x1c0dd5||_0x1c8ccb[0x0],_0x225d25,{},_0x259d3f instanceof t['CollabError']?_0x259d3f['message']:'JOIN\x20failed')));return;}for(let _0x13028f of _0x14f51e){let _0x1764c7=this['_rooms']['get'](_0x13028f)??new Map();_0x1764c7['set'](_0x3761a3['member']['memberID'],_0x3761a3),this['_rooms']['set'](_0x13028f,_0x1764c7),_0x3761a3['joinedUnitIDs']['add'](_0x13028f);}let _0x5b65ff={};for(let _0x8e888a of _0x1c8ccb)_0x5b65ff[_0x8e888a]={'roomID':_0x8e888a,'members':[...this['_rooms']['get'](_0x8e888a)?.['values']()??[]]['map'](_0x27e363=>s(_0x27e363['member']))};await _0x3761a3['connection']['send'](JSON['stringify'](o(_0x1c0dd5||_0x1c8ccb[0x0],n['CmdRspCode']['OK'],_0x5b65ff,'success')));for(let _0x4a0232 of _0x14f51e)await this['_broadcastToRoom'](_0x4a0232,l(_0x4a0232,s(_0x3761a3['member'])),_0x3761a3['member']['memberID']);}async['_handleLeave'](_0x45df9b,_0x340ca8,_0x2aa2a9){let _0x407a7c=typeof _0x340ca8['leaveReq']?.['roomID']=='string'?_0x340ca8['leaveReq']['roomID']:_0x2aa2a9;_0x407a7c&&await this['_leaveUnit'](_0x45df9b,_0x407a7c,'client-leave');}async['_handlePresence'](_0x2978af,_0x346a60,_0x3a2e28){let _0x5137aa=typeof _0x346a60['routeKey']=='string'?_0x346a60['routeKey']:'',_0x5e7121=_0x346a60['collaMsg']?.['updateCursorEvent']?.['selection'];if(!_0x5137aa||!_0x2978af['joinedUnitIDs']['has'](_0x5137aa)||typeof _0x5e7121!='string')return;let _0x223973={'unitID':_0x5137aa,'memberID':_0x2978af['member']['memberID'],'selection':_0x5e7121};try{await this['_middleware']['run']('receivePresence',{'session':_0x2978af['session'],'unitID':_0x5137aa,'payload':_0x223973,'customData':_0x3a2e28},()=>void 0x0);}catch(_0x5bc4af){if(_0x5bc4af instanceof t['CollabError'])return;throw _0x5bc4af;}if(typeof _0x223973['selection']!='string')return;let _0x3bce8a=[...this['_rooms']['get'](_0x5137aa)?.['values']()??[]]['filter'](_0x4a27ae=>_0x4a27ae!==_0x2978af);for(let _0x1c840a of _0x3bce8a){let _0x3a43e2={'unitID':_0x5137aa,'memberID':_0x2978af['member']['memberID'],'selection':_0x223973['selection']};try{await this['_middleware']['run']('sendPresence',{'session':_0x2978af['session'],'unitID':_0x5137aa,'payload':_0x3a43e2,'customData':_0x3a2e28,'targetMemberID':_0x1c840a['member']['memberID']},()=>void 0x0);}catch{continue;}typeof _0x3a43e2['selection']=='string'&&await this['_safeSend'](_0x1c840a['connection'],d(_0x5137aa,{'unitID':_0x5137aa,'memberID':_0x2978af['member']['memberID'],'selection':_0x3a43e2['selection']}));}}async['_handleNewChanges'](_0x5f330e,_0x1ae8f6,_0x433822){let _0x1032af=await _0x5f330e['readJson']();if(S(_0x1032af),_0x1032af['unitID']!==_0x1ae8f6||_0x1032af['type']!==_0x433822||_0x1032af['changeset']?.['unitID']!==_0x1ae8f6||_0x1032af['changeset']['type']!==_0x433822)throw new t['CollabError']('INVALID_REQUEST','Route,\x20request\x20and\x20changeset\x20identity\x20must\x20match');let _0x139af=this['_bindingsByMember']['get'](_0x1032af['memberID']);if(!_0x139af||_0x139af['session']['userID']!==_0x5f330e['userID'])throw new t['CollabError']('PERMISSION_DENIED','memberID\x20does\x20not\x20belong\x20to\x20the\x20authenticated\x20user');if(!_0x139af['joinedUnitIDs']['has'](_0x1ae8f6))throw new t['CollabError']('PERMISSION_DENIED','Session\x20has\x20not\x20joined\x20this\x20unit');let _0x3a02ce=await this['_service']['submitChangeset']({'changeset':_0x1032af['changeset']},{'userID':_0x5f330e['userID'],'memberID':_0x139af['session']['memberID'],'customData':_0x5f330e['customData']});if(_0x3a02ce['status']==='already-committed')await this['_safeSend'](_0x139af['connection'],f(_0x1ae8f6,i['CHANGESET_ACK'],_0x3a02ce['changeset']));else{if(_0x3a02ce['status']==='rejected'){let _0x2f2bfd=_0x3a02ce['error']['code']==='PERMISSION_DENIED'||_0x3a02ce['error']['code']==='UNAUTHENTICATED'?i['PERMISSION_REJ']:i['CHANGESET_REJ'];await this['_safeSend'](_0x139af['connection'],f(_0x1ae8f6,_0x2f2bfd,this['_trustedClientChangeset'](_0x1032af['changeset'],_0x139af)));}else _0x3a02ce['status']==='retry'&&await this['_safeSend'](_0x139af['connection'],f(_0x1ae8f6,i['CHANGESET_SHOULD_RETRY'],this['_trustedClientChangeset'](_0x1032af['changeset'],_0x139af)));}v(_0x5f330e['response'],0xc8,{'error':h});}['_trustedClientChangeset'](_0x1912af,_0x55b319){return{..._0x1912af,'userID':_0x55b319['session']['userID'],'memberID':_0x55b319['session']['memberID']};}['_enqueueCommittedChangeset'](_0x46201d,_0x1471c6){if(this['_disposed'])return;let _0x2f767a=_0x46201d['unitID'],_0x5807de=[...this['_rooms']['get'](_0x2f767a)?.['keys']()??[]];this['_enqueueUnitOutbound'](_0x2f767a,async()=>{for(let _0xfd8ce8 of _0x5807de){let _0x32a7f3=this['_bindingsByMember']['get'](_0xfd8ce8);if(!_0x32a7f3?.['joinedUnitIDs']['has'](_0x2f767a))continue;let _0x9752ed=_0xfd8ce8===_0x1471c6?i['CHANGESET_ACK']:i['NEW_CHANGESETS'];await this['_safeSend'](_0x32a7f3['connection'],f(_0x2f767a,_0x9752ed,_0x46201d));}});}['_evictUnitRoom'](_0x291ddb){let _0xac128f=this['_rooms']['get'](_0x291ddb);if(_0xac128f){this['_rooms']['delete'](_0x291ddb);for(let _0x3eed06 of _0xac128f['values']())_0x3eed06['joinedUnitIDs']['delete'](_0x291ddb);}}['_enqueueUnitOutbound'](_0xe2f37d,_0x25eeca){let _0x55a2cb=(this['_outboundQueues']['get'](_0xe2f37d)??Promise['resolve']())['catch'](()=>void 0x0)['then'](_0x25eeca);return this['_outboundQueues']['set'](_0xe2f37d,_0x55a2cb),_0x55a2cb['finally'](()=>{this['_outboundQueues']['get'](_0xe2f37d)===_0x55a2cb&&this['_outboundQueues']['delete'](_0xe2f37d);}),_0x55a2cb;}async['_disconnectConnection'](_0x3da702,_0x264e66){let _0x2122c3=this['_bindingsByConnection']['get'](_0x3da702['id']);_0x2122c3&&await this['_disconnectBinding'](_0x2122c3,_0x264e66);}async['_disconnectBinding'](_0xd4caa2,_0x33c016){this['_bindingsByConnection']['delete'](_0xd4caa2['connection']['id']),this['_bindingsByMember']['delete'](_0xd4caa2['member']['memberID']);let _0x2093dc=[..._0xd4caa2['joinedUnitIDs']];for(let _0x597ef0 of _0x2093dc)await this['_leaveUnit'](_0xd4caa2,_0x597ef0,_0x33c016);}async['_leaveUnit'](_0x34133b,_0x5be34e,_0x113a15){if(!_0x34133b['joinedUnitIDs']['delete'](_0x5be34e))return!0x1;let _0x21d44a=this['_rooms']['get'](_0x5be34e);return _0x21d44a?.['delete'](_0x34133b['member']['memberID']),_0x21d44a?.['size']===0x0&&this['_rooms']['delete'](_0x5be34e),await this['_broadcastToRoom'](_0x5be34e,u(_0x5be34e,{'memberID':_0x34133b['member']['memberID'],'name':_0x34133b['member']['name']}),_0x34133b['member']['memberID']),await this['_emit']('memberLeftUnit',{'session':_0x34133b['session'],'unitID':_0x5be34e,'reason':_0x113a15}),!0x0;}async['_broadcastToRoom'](_0x36c05d,_0x1f81ca,_0x189a1f){let _0x12568a=[...this['_rooms']['get'](_0x36c05d)?.['values']()??[]];await Promise['allSettled'](_0x12568a['filter'](_0x277f69=>_0x277f69['member']['memberID']!==_0x189a1f)['map'](_0x4cc5f3=>this['_safeSend'](_0x4cc5f3['connection'],_0x1f81ca)));}async['_safeSend'](_0x5ab2e3,_0x2c4131){try{await _0x5ab2e3['send'](JSON['stringify'](_0x2c4131));}catch{}}async['_emit'](_0x5a7f38,_0xd93087){let _0x4a465f=[...this['_listeners']['get'](_0x5a7f38)??[]];for(let _0x257243 of _0x4a465f)try{await _0x257243(_0xd93087);}catch{}}['_assertRunning'](){if(this['_disposed'])throw Error('UniverCollabEndpoint\x20is\x20disposed');}['_assertJoinable'](_0x3190c5){if(this['_deletedUnitIDs']['has'](_0x3190c5))throw new t['CollabError']('UNIT_NOT_FOUND','Unit\x20has\x20been\x20deleted');}};exports['MemorySessionTicketStore']=y,exports['UniverCollabEndpoint']=E;
1
+ Object['defineProperty'](exports,Symbol['toStringTag'],{'value':'Module'});let e=require('node:crypto'),t=require('@univerjs-pro/collaboration-service'),n=require('@univerjs/protocol'),r=require('@univerjs-pro/collaboration-transport-node');var i={'CHANGESET_ACK':'changeset_ack','CHANGESET_REJ':'changeset_rej','CHANGESET_SHOULD_RETRY':'changeset_should_retry','NEW_CHANGESETS':'new_changesets','PERMISSION_REJ':'permission_rej','UPDATE_CURSOR':'update_cursor','USERS_ENTER':'users_enter','USERS_LEAVE':'users_leave'};function a(_0x10135a,_0x260c9f,_0x37566b=''){return{'cmd':_0x10135a,'code':n['CmdRspCode']['OK'],'reason':'success','routeKey':_0x37566b,'infoRsp':{'memberID':_0x260c9f}};}function o(_0x1710e8,_0x2bc65d,_0x56f600,_0x2f8673){return{'cmd':n['CombCmd']['JOIN'],'code':_0x2bc65d,'reason':_0x2f8673,'routeKey':_0x1710e8,'joinRsp':{'roomInfos':_0x56f600}};}function s(_0x23f47f){return{'memberID':_0x23f47f['memberID'],'userID':_0x23f47f['userID'],'name':_0x23f47f['name'],..._0x23f47f['avatar']===void 0x0?{}:{'avatar':_0x23f47f['avatar']}};}function c(_0x3e666d,_0x314293){return{'cmd':n['CombCmd']['RECV'],'code':n['CmdRspCode']['OK'],'reason':'success','routeKey':_0x3e666d,'collaMsg':_0x314293};}function l(_0x4f9671,_0x343fea){return c(_0x4f9671,{'eventID':i['USERS_ENTER'],'joinEvent':{..._0x343fea,'avatar':_0x343fea['avatar']??''}});}function u(_0x402228,_0x3c6f77){return c(_0x402228,{'eventID':i['USERS_LEAVE'],'leaveEvent':_0x3c6f77});}function d(_0x553f49,_0x2b577b){return c(_0x553f49,{'eventID':i['UPDATE_CURSOR'],'updateCursorEvent':_0x2b577b});}function f(_0x520b81,_0x324c8b,_0x45a3a9){let _0x54ab98={[i['CHANGESET_ACK']]:'csAckEvent',[i['CHANGESET_REJ']]:'csRejEvent',[i['CHANGESET_SHOULD_RETRY']]:'csShouldRetryEvent',[i['NEW_CHANGESETS']]:'newCsEvent',[i['PERMISSION_REJ']]:'permissionRejEvent'}[_0x324c8b];return c(_0x520b81,{'eventID':_0x324c8b,[_0x54ab98]:{'cs':_0x45a3a9}});}function p(_0x5a920b,_0x46a49e,_0x4246cc){return c(_0x5a920b,{..._0x4246cc,'eventID':_0x46a49e});}var m=class{['_middlewares']=new Map();['use'](_0x2b491f,_0x3e0ca6){let _0x5d04cb=this['_middlewares']['get'](_0x2b491f)??[],_0x2bab0b=_0x3e0ca6;_0x5d04cb['push'](_0x2bab0b),this['_middlewares']['set'](_0x2b491f,_0x5d04cb);let _0x2bceac=!0x1;return{'dispose':()=>{if(_0x2bceac)return;_0x2bceac=!0x0;let _0x36b319=_0x5d04cb['indexOf'](_0x2bab0b);_0x36b319>=0x0&&_0x5d04cb['splice'](_0x36b319,0x1);}};}async['run'](_0x3ba22c,_0x26b665,_0x5d50db){let _0x45a027=[...this['_middlewares']['get'](_0x3ba22c)??[]],_0x3baef6=async _0x26af8d=>{let _0x397395=_0x45a027[_0x26af8d];if(!_0x397395){await _0x5d50db();return;}let _0x4162a0=!0x1,_0x17fdc4,_0x43be49=()=>{if(_0x4162a0)throw Error('Endpoint\x20middleware\x20for\x20'+String(_0x3ba22c)+'\x20called\x20next()\x20more\x20than\x20once');return _0x4162a0=!0x0,_0x17fdc4=_0x3baef6(_0x26af8d+0x1),_0x17fdc4;};try{await _0x397395(_0x26b665,_0x43be49);}catch(_0x22a8be){if(_0x17fdc4)try{await _0x17fdc4;}catch{}throw _0x22a8be;}if(!_0x4162a0)throw Error('Endpoint\x20middleware\x20for\x20'+String(_0x3ba22c)+'\x20completed\x20without\x20calling\x20next()');await _0x17fdc4;};await _0x3baef6(0x0);}['clear'](){this['_middlewares']['clear']();}},h={'code':n['ErrorCode']['OK'],'message':''};function g(_0x2ae0ac,_0x7f6384){if(!/^-?\d+$/['test'](_0x2ae0ac))throw new t['CollabError']('INVALID_REQUEST',_0x7f6384+'\x20must\x20be\x20an\x20integer');let _0x543017=Number(_0x2ae0ac);if(!Number['isSafeInteger'](_0x543017))throw new t['CollabError']('INVALID_REQUEST',_0x7f6384+'\x20is\x20outside\x20the\x20safe\x20integer\x20range');return _0x543017;}function _(_0x41aa31){if(_0x41aa31 instanceof r['NodeTransportError'])return _0x41aa31['code']==='REQUEST_BODY_TOO_LARGE'?{'status':0x19d,'error':{'code':n['ErrorCode']['INVALID_ARGUMENT'],'message':_0x41aa31['message']}}:_0x41aa31['code']==='INVALID_JSON'||_0x41aa31['code']==='REQUEST_ABORTED'?{'status':0x190,'error':{'code':n['ErrorCode']['INVALID_ARGUMENT'],'message':_0x41aa31['message']}}:{'status':0x1f7,'error':{'code':n['ErrorCode']['INTERNAL_ERROR'],'message':'Transport\x20unavailable'}};if(!(_0x41aa31 instanceof t['CollabError']))return{'status':0x1f4,'error':{'code':n['ErrorCode']['INTERNAL_ERROR'],'message':'Internal\x20server\x20error'}};let _0x31f00e={'UNAUTHENTICATED':{'status':0x191,'code':n['ErrorCode']['UNAUTHENTICATED']},'INVALID_REQUEST':{'status':0x190,'code':n['ErrorCode']['INVALID_ARGUMENT']},'UNIT_NOT_FOUND':{'status':0x194,'code':n['ErrorCode']['NOT_FOUND']},'PERMISSION_DENIED':{'status':0x193,'code':n['ErrorCode']['PERMISSION_DENIED']},'OT_CONFLICT':{'status':0x199,'code':n['ErrorCode']['APPLY_REJECT']},'REVISION_MISMATCH':{'status':0x199,'code':n['ErrorCode']['CHANGESET_REVISION_CONFILICT']},'ADAPTER_FAILURE':{'status':0x1f7,'code':n['ErrorCode']['INTERNAL_ERROR']},'INTERNAL_ERROR':{'status':0x1f4,'code':n['ErrorCode']['INTERNAL_ERROR']}}[_0x41aa31['code']];return{'status':_0x31f00e['status'],'error':{'code':_0x31f00e['code'],'message':_0x41aa31['message']}};}function v(_0xb361aa,_0x23aa50,_0xe5bfe3){_0xb361aa['writableEnded']||_0xb361aa['destroyed']||(_0xb361aa['statusCode']=_0x23aa50,_0xb361aa['setHeader']('content-type','application/json;\x20charset=utf-8'),_0xb361aa['end'](JSON['stringify'](_0xe5bfe3,(_0x5b0027,_0x752f4f)=>_0x752f4f instanceof Uint8Array?Buffer['from'](_0x752f4f)['toString']('base64'):_0x752f4f)));}var y=class{['_tickets']=new Map();['_disposed']=!0x1;async['issue'](_0x1382e5,_0x203abd){if(this['_disposed'])throw Error('Session\x20ticket\x20store\x20is\x20disposed');if(!Number['isSafeInteger'](_0x203abd)||_0x203abd<=0x0)throw TypeError('Session\x20ticket\x20TTL\x20must\x20be\x20a\x20positive\x20safe\x20integer');this['_purgeExpired']();let _0x302c9d;do _0x302c9d=(0x0,e['randomBytes'])(0x20)['toString']('base64url');while(this['_tickets']['has'](_0x302c9d));return this['_tickets']['set'](_0x302c9d,{'record':_0x1382e5,'expiresAt':Date['now']()+_0x203abd}),_0x302c9d;}async['consume'](_0x3730c2){if(this['_disposed']||!_0x3730c2)return null;let _0xb92a12=this['_tickets']['get'](_0x3730c2);return!_0xb92a12||(this['_tickets']['delete'](_0x3730c2),_0xb92a12['expiresAt']<=Date['now']())?null:_0xb92a12['record'];}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_tickets']['clear']());}['_purgeExpired'](){let _0x179f69=Date['now']();for(let [_0x1d901b,_0x6dcc89]of this['_tickets'])_0x6dcc89['expiresAt']<=_0x179f69&&this['_tickets']['delete'](_0x1d901b);}},b=0x5*0xea60;function x(_0x32d99e){if(!_0x32d99e['startsWith']('/')||_0x32d99e==='/'||_0x32d99e['endsWith']('/')||_0x32d99e['includes']('?')||_0x32d99e['includes']('#'))throw TypeError('protocolBasePath\x20must\x20be\x20an\x20absolute\x20path\x20without\x20a\x20trailing\x20slash');return _0x32d99e;}function S(_0x991fda){if(!_0x991fda||typeof _0x991fda!='object')throw new t['CollabError']('INVALID_REQUEST','Request\x20body\x20must\x20be\x20an\x20object');let _0x2cce57=_0x991fda;if(typeof _0x2cce57['unitID']!='string'||typeof _0x2cce57['memberID']!='string'||!Number['isSafeInteger'](_0x2cce57['type'])||!_0x2cce57['changeset']||typeof _0x2cce57['changeset']!='object')throw new t['CollabError']('INVALID_REQUEST','Invalid\x20new\x20changes\x20request');}function C(_0x31b947){if(!Array['isArray'](_0x31b947)||_0x31b947['length']===0x0||_0x31b947['some'](_0x280718=>typeof _0x280718!='string'||_0x280718['trim']()['length']===0x0))throw new t['CollabError']('INVALID_REQUEST','unitIds\x20must\x20be\x20a\x20non-empty\x20string\x20array');}function w(_0x244526){let _0x272796=_0x244526['getAll']('unitIds');C(_0x272796);let _0x31113d=_0x244526['getAll']('hardDelete');if(_0x31113d['length']>0x1||_0x31113d['length']===0x1&&_0x31113d[0x0]!=='true'&&_0x31113d[0x0]!=='false')throw new t['CollabError']('INVALID_REQUEST','hardDelete\x20must\x20be\x20true\x20or\x20false');return{'unitIds':_0x272796,'hardDelete':_0x31113d[0x0]==='true'};}function T(_0x4330df){if(!_0x4330df||typeof _0x4330df!='object')throw new t['CollabError']('INVALID_REQUEST','Request\x20body\x20must\x20be\x20an\x20object');C(_0x4330df['unitIds']);}var E=class{['_service'];['_middleware']=new m();['_listeners']=new Map();['_bindingsByConnection']=new Map();['_bindingsByMember']=new Map();['_rooms']=new Map();['_outboundQueues']=new Map();['_ticketStore'];['_ownsTicketStore'];['_ticketTtlMs'];['_protocolBasePath'];['_serviceSubscriptions'];['_deletedUnitIDs']=new Set();['_disposed']=!0x1;constructor(_0x54f277,_0x5591ae={}){if(this['_service']=_0x54f277,!_0x54f277)throw TypeError('UniverCollabEndpoint\x20requires\x20a\x20service');if(this['_ticketStore']=_0x5591ae['ticketStore']??new y(),this['_ownsTicketStore']=_0x5591ae['ticketStore']===void 0x0,this['_ticketTtlMs']=_0x5591ae['sessionTicketTtlMs']??b,!Number['isSafeInteger'](this['_ticketTtlMs'])||this['_ticketTtlMs']<=0x0)throw TypeError('sessionTicketTtlMs\x20must\x20be\x20a\x20positive\x20safe\x20integer');this['_protocolBasePath']=x(_0x5591ae['protocolBasePath']??'/universer-api'),this['_serviceSubscriptions']=[this['_service']['on']('changesetCommitted',_0x14f52b=>{this['_enqueueCommittedChangeset'](_0x14f52b['changeset'],_0x14f52b['memberID']);}),this['_service']['on']('unitsDeleted',_0x28519e=>{for(let _0xc38564 of _0x28519e['request']['unitIDs'])this['_deletedUnitIDs']['add'](_0xc38564);for(let _0x111dbe of _0x28519e['request']['unitIDs'])this['_enqueueUnitOutbound'](_0x111dbe,async()=>{this['_evictUnitRoom'](_0x111dbe);});}),this['_service']['on']('unitsRecovered',async _0x181b76=>{await Promise['all'](_0x181b76['request']['unitIDs']['map'](_0x42ae89=>this['_enqueueUnitOutbound'](_0x42ae89,async()=>{this['_deletedUnitIDs']['delete'](_0x42ae89);})));})];}['use'](_0x13378f,_0x1556d4){return this['_assertRunning'](),this['_middleware']['use'](_0x13378f,_0x1556d4);}['on'](_0x25ca16,_0x3e2274){this['_assertRunning']();let _0x485ac8=this['_listeners']['get'](_0x25ca16)??new Set(),_0x49ae1c=_0x3e2274;_0x485ac8['add'](_0x49ae1c),this['_listeners']['set'](_0x25ca16,_0x485ac8);let _0x1c7b96=!0x1;return{'dispose':()=>{_0x1c7b96||(_0x1c7b96=!0x0,_0x485ac8['delete'](_0x49ae1c));}};}['findJoinedSession'](_0x4b08c6){if(this['_disposed'])return null;let _0x2cf643=this['_bindingsByMember']['get'](_0x4b08c6['memberID']);return!_0x2cf643||_0x2cf643['session']['userID']!==_0x4b08c6['authenticatedUserID']||!_0x2cf643['joinedUnitIDs']['has'](_0x4b08c6['unitID'])?null:_0x2cf643['session'];}['findJoinedSessionByUser'](_0x5e763f){if(this['_disposed'])return null;for(let _0xdcc6a of this['_rooms']['get'](_0x5e763f['unitID'])?.['values']()??[])if(_0xdcc6a['session']['userID']===_0x5e763f['authenticatedUserID'])return _0xdcc6a['session'];return null;}async['invalidateUnitSessions'](_0x25d980){if(this['_assertRunning'](),typeof _0x25d980['unitID']!='string'||!_0x25d980['unitID'])throw TypeError('unitID\x20must\x20be\x20a\x20non-empty\x20string');if(_0x25d980['userID']!==void 0x0&&(typeof _0x25d980['userID']!='string'||!_0x25d980['userID']))throw TypeError('userID\x20must\x20be\x20a\x20non-empty\x20string\x20when\x20provided');await this['_enqueueUnitOutbound'](_0x25d980['unitID'],async()=>{let _0x57acc8=[...this['_rooms']['get'](_0x25d980['unitID'])?.['values']()??[]]['filter'](_0x5be725=>_0x25d980['userID']===void 0x0||_0x5be725['session']['userID']===_0x25d980['userID']);for(let _0x26ddd5 of _0x57acc8)_0x26ddd5['connection']['close'](0xfa3,'Unit\x20access\x20changed'),await this['_disconnectBinding'](_0x26ddd5,'session-evicted');});}async['publishTrustedUnitEvent'](_0x2568a2){this['_assertRunning']();let _0xfa2748=[...this['_rooms']['get'](_0x2568a2['unitID'])?.['keys']()??[]],_0x141182=this['_bindingsByMember']['get'](_0x2568a2['memberID'])?.['joinedUnitIDs']['has'](_0x2568a2['unitID'])?_0x2568a2['memberID']:void 0x0,_0x1b7408=p(_0x2568a2['unitID'],_0x2568a2['eventID'],_0x2568a2['data']);this['_enqueueUnitOutbound'](_0x2568a2['unitID'],async()=>{for(let _0x6d6859 of _0xfa2748){if(_0x6d6859===_0x141182)continue;let _0x11ca5a=this['_bindingsByMember']['get'](_0x6d6859);_0x11ca5a?.['joinedUnitIDs']['has'](_0x2568a2['unitID'])&&await this['_safeSend'](_0x11ca5a['connection'],_0x1b7408);}});}['register'](_0x55faa1){this['_assertRunning']();let _0x28590d=this['_protocolBasePath'],_0x32d9b6=_0x57fd3c=>_0x509815=>this['_handleHttp'](_0x509815,_0x57fd3c);_0x55faa1['get'](_0x28590d+'/user/session-ticket',_0x32d9b6('ticket')),_0x55faa1['delete'](_0x28590d+'/snapshot/-/units',_0x32d9b6('delete-units')),_0x55faa1['post'](_0x28590d+'/snapshot/-/units/recover',_0x32d9b6('recover-units')),_0x55faa1['post'](_0x28590d+'/comb/:type/unit/:unitID/new_changes',_0x32d9b6('new-changes')),_0x55faa1['get'](_0x28590d+'/snapshot/block/:type/unit/:unitID/block/:blockID',_0x32d9b6('deserialized-block')),_0x55faa1['get'](_0x28590d+'/snapshot/:type/unit/:unitID/rev/:revision',_0x32d9b6('unit')),_0x55faa1['get'](_0x28590d+'/snapshot/:type/unit/:unitID/block/:blockID',_0x32d9b6('block')),_0x55faa1['get'](_0x28590d+'/snapshot/:type/unit/:unitID/fetchmissing',_0x32d9b6('fetch-missing')),_0x55faa1['upgrade'](_0x28590d+'/comb/connect',_0x5893e8=>this['_handleUpgrade'](_0x5893e8));}async['_handleUpgrade'](_0x143f09){if(this['_disposed']){_0x143f09['reject'](0x1f7,'Endpoint\x20is\x20disposed');return;}let _0x2b5441=new URL(_0x143f09['incomingMessage']['url']??'/','http://localhost'),_0x435eb2=await this['_ticketStore']['consume'](_0x2b5441['searchParams']['get']('sessionTicket')??'');if(!_0x435eb2){_0x143f09['reject'](0x191,'Invalid\x20or\x20expired\x20session\x20ticket');return;}_0x143f09['accept']({'open':({connection:_0x5f8381})=>this['_openConnection'](_0x435eb2,_0x5f8381),'message':_0x2eea76=>this['_handleMessage'](_0x2eea76),'close':({connection:_0xa35ac3})=>this['_disconnectConnection'](_0xa35ac3,'connection-closed')});}async['dispose'](){if(this['_disposed'])return;this['_disposed']=!0x0;for(let _0x37c6de of this['_serviceSubscriptions'])_0x37c6de['dispose']();await Promise['allSettled']([...this['_outboundQueues']['values']()]);let _0x1f9995=[...this['_bindingsByConnection']['values']()];for(let _0x70529f of _0x1f9995)await this['_disconnectBinding'](_0x70529f,'endpoint-disposed'),_0x70529f['connection']['close'](0x3e9,'Endpoint\x20disposed');this['_bindingsByConnection']['clear'](),this['_bindingsByMember']['clear'](),this['_rooms']['clear'](),this['_outboundQueues']['clear'](),this['_middleware']['clear'](),this['_listeners']['clear'](),this['_ownsTicketStore']&&await this['_ticketStore']['dispose']?.();}async['_handleHttp'](_0x568fa4,_0x5c7478){try{this['_assertRunning']();let _0xe9f615=new URL(_0x568fa4['incomingMessage']['url']??'/','http://localhost');if(!_0x568fa4['userID'])throw new t['CollabError']('UNAUTHENTICATED','HTTP\x20user\x20is\x20not\x20authenticated');if(_0x5c7478==='ticket'){let _0xe63bab=await this['_ticketStore']['issue']({'userID':_0x568fa4['userID'],'customData':_0x568fa4['customData']},this['_ticketTtlMs']);v(_0x568fa4['response'],0xc8,{'error':h,'ticket':_0xe63bab});return;}let _0x82f7c={'userID':_0x568fa4['userID'],'customData':_0x568fa4['customData']};if(_0x5c7478==='delete-units'){let _0x2add53=w(_0xe9f615['searchParams']);await this['_service']['deleteUnits']({'unitIDs':_0x2add53['unitIds'],'hardDelete':_0x2add53['hardDelete']},_0x82f7c),v(_0x568fa4['response'],0xc8,{'error':h});return;}if(_0x5c7478==='recover-units'){let _0x4115ee=await _0x568fa4['readJson']();T(_0x4115ee),await this['_service']['recoverUnits']({'unitIDs':_0x4115ee['unitIds']},_0x82f7c),v(_0x568fa4['response'],0xc8,{'error':h});return;}let _0x544ed8=g(_0x568fa4['params']['type'],'type'),_0x16f3ff=_0x568fa4['params']['unitID'];if(_0x5c7478==='new-changes'){await this['_handleNewChanges'](_0x568fa4,_0x16f3ff,_0x544ed8);return;}switch(_0x5c7478){case'unit':{let _0x53a9f3=g(_0x568fa4['params']['revision'],'revision'),_0x764bff=await this['_service']['getUnitLoadData']({'unitID':_0x16f3ff,'type':_0x544ed8,'revision':_0x53a9f3},_0x82f7c);v(_0x568fa4['response'],0xc8,{'error':h,'snapshot':_0x764bff['snapshot'],'changesets':_0x764bff['changesets']});return;}case'block':case'deserialized-block':{let _0x1b58cd=await this['_service']['getSheetBlock']({'unitID':_0x16f3ff,'type':_0x544ed8,'blockID':_0x568fa4['params']['blockID']},_0x82f7c);if(!_0x1b58cd['block'])throw new t['CollabError']('UNIT_NOT_FOUND','Sheet\x20block\x20was\x20not\x20found');let _0x1fa03a=_0x5c7478==='deserialized-block'?{..._0x1b58cd['block'],'data':JSON['parse'](new TextDecoder()['decode'](_0x1b58cd['block']['data']))}:_0x1b58cd['block'];v(_0x568fa4['response'],0xc8,{'error':h,'block':_0x1fa03a});return;}case'fetch-missing':{let _0x2e45e3=g(_0xe9f615['searchParams']['get']('from')??'','from'),_0x520c5a=g(_0xe9f615['searchParams']['get']('to')??'','to'),_0x1cbd9d=await this['_service']['getChangesets']({'unitID':_0x16f3ff,'type':_0x544ed8,'from':_0x2e45e3,'to':_0x520c5a},_0x82f7c);v(_0x568fa4['response'],0xc8,{'error':h,'changesets':_0x1cbd9d['changesets']});return;}}}catch(_0x1b1bb8){let _0x5623ee=_(_0x1b1bb8 instanceof SyntaxError?new t['CollabError']('INTERNAL_ERROR','Stored\x20sheet\x20block\x20is\x20not\x20valid\x20JSON',{'cause':_0x1b1bb8}):_0x1b1bb8);v(_0x568fa4['response'],_0x5623ee['status'],{'error':_0x5623ee['error']});}}async['_openConnection'](_0x3cf08c,_0x62636f){try{let _0xc4d2eb=(0x0,e['randomUUID'])(),_0x5dc36c={'memberID':_0xc4d2eb,'userID':_0x3cf08c['userID'],'customData':_0x3cf08c['customData']},_0x2837ca={'memberID':_0xc4d2eb,'userID':_0x3cf08c['userID'],'name':_0x3cf08c['userID']},_0x2b8db5={'connection':_0x62636f,'session':_0x5dc36c,'member':_0x2837ca};await this['_middleware']['run']('connect',_0x2b8db5,()=>void 0x0);let _0x34a27a={'connection':_0x62636f,'session':_0x5dc36c,'member':_0x2837ca,'joinedUnitIDs':new Set()};this['_bindingsByConnection']['set'](_0x62636f['id'],_0x34a27a),this['_bindingsByMember']['set'](_0xc4d2eb,_0x34a27a);}catch(_0x175a7f){_0x62636f['close'](_0x175a7f instanceof t['CollabError']?0x3f0:0x3f3,_0x175a7f instanceof t['CollabError']?'Connection\x20rejected':'Endpoint\x20failure');}}async['_handleMessage'](_0x53538e){let _0x306245=this['_bindingsByConnection']['get'](_0x53538e['connection']['id']);if(!_0x306245){_0x53538e['connection']['close'](0x3f0,'WebSocket\x20Session\x20is\x20not\x20established');return;}if(typeof _0x53538e['data']!='string'){_0x53538e['connection']['close'](0x3eb,'Comb\x20messages\x20must\x20be\x20JSON\x20text');return;}let _0x34051e;try{let _0x84e791=JSON['parse'](_0x53538e['data']);if(!_0x84e791||typeof _0x84e791!='object')throw Error('invalid');_0x34051e=_0x84e791;}catch{_0x53538e['connection']['close'](0x3eb,'Invalid\x20Comb\x20JSON\x20message');return;}let _0x5382fb=typeof _0x34051e['routeKey']=='string'?_0x34051e['routeKey']:'';switch(_0x34051e['cmd']){case n['CombCmd']['HELLO']:case n['CombCmd']['HEARTBEAT']:await _0x53538e['connection']['send'](JSON['stringify'](a(_0x34051e['cmd'],_0x306245['member']['memberID'],_0x5382fb)));return;case n['CombCmd']['JOIN']:await this['_handleJoin'](_0x306245,_0x34051e,_0x5382fb);return;case n['CombCmd']['LEAVE']:await this['_handleLeave'](_0x306245,_0x34051e,_0x5382fb);return;case n['CombCmd']['INGEST']:if(_0x34051e['collaMsg']?.['eventID']!==i['UPDATE_CURSOR'])return;await this['_handlePresence'](_0x306245,_0x34051e,_0x53538e['customData']);return;default:return;}}async['_handleJoin'](_0x3fd702,_0x5609f1,_0x32160b){let _0x4ce2ad=_0x5609f1['joinReq']?.['rooms'],_0x49139c=_0x4ce2ad?.['length']?_0x4ce2ad['map'](_0x4bc36a=>_0x4bc36a['roomID']):_0x32160b?[_0x32160b]:[];if(_0x49139c['length']===0x0||_0x49139c['some'](_0x5cac7f=>typeof _0x5cac7f!='string'||!_0x5cac7f)){await _0x3fd702['connection']['send'](JSON['stringify'](o(_0x32160b,n['CmdRspCode']['FAIL'],{},'Invalid\x20JOIN\x20request')));return;}let _0x367091=[...new Set(_0x49139c)],_0x318a91=_0x367091['filter'](_0x15d6d0=>!_0x3fd702['joinedUnitIDs']['has'](_0x15d6d0));try{for(let _0x51527f of _0x367091)this['_assertJoinable'](_0x51527f);for(let _0x1ae082 of _0x318a91)await this['_middleware']['run']('joinUnit',{'session':_0x3fd702['session'],'unitID':_0x1ae082},()=>void 0x0);for(let _0x282d2d of _0x367091)this['_assertJoinable'](_0x282d2d);}catch(_0x225426){let _0x4b0880=_0x225426 instanceof t['CollabError']&&_0x225426['code']==='UNIT_NOT_FOUND'?n['CmdRspCode']['JOIN_ROOM_NOT_EXISTS']:_0x225426 instanceof t['CollabError']&&(_0x225426['code']==='PERMISSION_DENIED'||_0x225426['code']==='UNAUTHENTICATED')?n['CmdRspCode']['JOIN_ROOM_PERMISSION_DENIED']:n['CmdRspCode']['FAIL'];await _0x3fd702['connection']['send'](JSON['stringify'](o(_0x32160b||_0x367091[0x0],_0x4b0880,{},_0x225426 instanceof t['CollabError']?_0x225426['message']:'JOIN\x20failed')));return;}for(let _0x343477 of _0x318a91){let _0x290494=this['_rooms']['get'](_0x343477)??new Map();_0x290494['set'](_0x3fd702['member']['memberID'],_0x3fd702),this['_rooms']['set'](_0x343477,_0x290494),_0x3fd702['joinedUnitIDs']['add'](_0x343477);}let _0x301493={};for(let _0x46be52 of _0x367091)_0x301493[_0x46be52]={'roomID':_0x46be52,'members':[...this['_rooms']['get'](_0x46be52)?.['values']()??[]]['map'](_0x5919ab=>s(_0x5919ab['member']))};await _0x3fd702['connection']['send'](JSON['stringify'](o(_0x32160b||_0x367091[0x0],n['CmdRspCode']['OK'],_0x301493,'success')));for(let _0x5a25d5 of _0x318a91)await this['_broadcastToRoom'](_0x5a25d5,l(_0x5a25d5,s(_0x3fd702['member'])),_0x3fd702['member']['memberID']);}async['_handleLeave'](_0x2e4022,_0x501e6a,_0x1f6c6b){let _0xcb64dd=typeof _0x501e6a['leaveReq']?.['roomID']=='string'?_0x501e6a['leaveReq']['roomID']:_0x1f6c6b;_0xcb64dd&&await this['_leaveUnit'](_0x2e4022,_0xcb64dd,'client-leave');}async['_handlePresence'](_0x20f7ff,_0x23d491,_0x328f4b){let _0x4f752a=typeof _0x23d491['routeKey']=='string'?_0x23d491['routeKey']:'',_0x17ec2b=_0x23d491['collaMsg']?.['updateCursorEvent']?.['selection'];if(!_0x4f752a||!_0x20f7ff['joinedUnitIDs']['has'](_0x4f752a)||typeof _0x17ec2b!='string')return;let _0x4041dd={'unitID':_0x4f752a,'memberID':_0x20f7ff['member']['memberID'],'selection':_0x17ec2b};try{await this['_middleware']['run']('receivePresence',{'session':_0x20f7ff['session'],'unitID':_0x4f752a,'payload':_0x4041dd,'customData':_0x328f4b},()=>void 0x0);}catch(_0x4ba79f){if(_0x4ba79f instanceof t['CollabError'])return;throw _0x4ba79f;}if(typeof _0x4041dd['selection']!='string')return;let _0x532351=[...this['_rooms']['get'](_0x4f752a)?.['values']()??[]]['filter'](_0x184f88=>_0x184f88!==_0x20f7ff);for(let _0x5cac86 of _0x532351){let _0x2b4c48={'unitID':_0x4f752a,'memberID':_0x20f7ff['member']['memberID'],'selection':_0x4041dd['selection']};try{await this['_middleware']['run']('sendPresence',{'session':_0x20f7ff['session'],'unitID':_0x4f752a,'payload':_0x2b4c48,'customData':_0x328f4b,'targetMemberID':_0x5cac86['member']['memberID']},()=>void 0x0);}catch{continue;}typeof _0x2b4c48['selection']=='string'&&await this['_safeSend'](_0x5cac86['connection'],d(_0x4f752a,{'unitID':_0x4f752a,'memberID':_0x20f7ff['member']['memberID'],'selection':_0x2b4c48['selection']}));}}async['_handleNewChanges'](_0xd95458,_0x3df772,_0x1cdb7b){let _0x52e2f9=await _0xd95458['readJson']();if(S(_0x52e2f9),_0x52e2f9['unitID']!==_0x3df772||_0x52e2f9['type']!==_0x1cdb7b||_0x52e2f9['changeset']?.['unitID']!==_0x3df772||_0x52e2f9['changeset']['type']!==_0x1cdb7b)throw new t['CollabError']('INVALID_REQUEST','Route,\x20request\x20and\x20changeset\x20identity\x20must\x20match');let _0x5486e4=this['_bindingsByMember']['get'](_0x52e2f9['memberID']);if(!_0x5486e4||_0x5486e4['session']['userID']!==_0xd95458['userID'])throw new t['CollabError']('PERMISSION_DENIED','memberID\x20does\x20not\x20belong\x20to\x20the\x20authenticated\x20user');if(!_0x5486e4['joinedUnitIDs']['has'](_0x3df772))throw new t['CollabError']('PERMISSION_DENIED','Session\x20has\x20not\x20joined\x20this\x20unit');let _0x4af9fd=await this['_service']['submitChangeset']({'changeset':_0x52e2f9['changeset']},{'userID':_0xd95458['userID'],'memberID':_0x5486e4['session']['memberID'],'customData':_0xd95458['customData']});if(_0x4af9fd['status']==='already-committed')await this['_safeSend'](_0x5486e4['connection'],f(_0x3df772,i['CHANGESET_ACK'],_0x4af9fd['changeset']));else{if(_0x4af9fd['status']==='rejected'){let _0x1631ef=_0x4af9fd['error']['code']==='PERMISSION_DENIED'||_0x4af9fd['error']['code']==='UNAUTHENTICATED'?i['PERMISSION_REJ']:i['CHANGESET_REJ'];await this['_safeSend'](_0x5486e4['connection'],f(_0x3df772,_0x1631ef,this['_trustedClientChangeset'](_0x52e2f9['changeset'],_0x5486e4)));}else _0x4af9fd['status']==='retry'&&await this['_safeSend'](_0x5486e4['connection'],f(_0x3df772,i['CHANGESET_SHOULD_RETRY'],this['_trustedClientChangeset'](_0x52e2f9['changeset'],_0x5486e4)));}v(_0xd95458['response'],0xc8,{'error':h});}['_trustedClientChangeset'](_0x4c7ad5,_0x58c938){return{..._0x4c7ad5,'userID':_0x58c938['session']['userID'],'memberID':_0x58c938['session']['memberID']};}['_enqueueCommittedChangeset'](_0x34e63f,_0x57d022){if(this['_disposed'])return;let _0xf05e6c=_0x34e63f['unitID'],_0x4ea990=[...this['_rooms']['get'](_0xf05e6c)?.['keys']()??[]];this['_enqueueUnitOutbound'](_0xf05e6c,async()=>{for(let _0x21db8c of _0x4ea990){let _0x3094d0=this['_bindingsByMember']['get'](_0x21db8c);if(!_0x3094d0?.['joinedUnitIDs']['has'](_0xf05e6c))continue;let _0x1b2e19=_0x21db8c===_0x57d022?i['CHANGESET_ACK']:i['NEW_CHANGESETS'];await this['_safeSend'](_0x3094d0['connection'],f(_0xf05e6c,_0x1b2e19,_0x34e63f));}});}['_evictUnitRoom'](_0x1e7d0d){let _0x5b1d48=this['_rooms']['get'](_0x1e7d0d);if(_0x5b1d48){this['_rooms']['delete'](_0x1e7d0d);for(let _0x137655 of _0x5b1d48['values']())_0x137655['joinedUnitIDs']['delete'](_0x1e7d0d);}}['_enqueueUnitOutbound'](_0xfbedd9,_0x5df74b){let _0xf923b2=(this['_outboundQueues']['get'](_0xfbedd9)??Promise['resolve']())['catch'](()=>void 0x0)['then'](_0x5df74b);return this['_outboundQueues']['set'](_0xfbedd9,_0xf923b2),_0xf923b2['finally'](()=>{this['_outboundQueues']['get'](_0xfbedd9)===_0xf923b2&&this['_outboundQueues']['delete'](_0xfbedd9);}),_0xf923b2;}async['_disconnectConnection'](_0x368126,_0x5416a8){let _0xb6188b=this['_bindingsByConnection']['get'](_0x368126['id']);_0xb6188b&&await this['_disconnectBinding'](_0xb6188b,_0x5416a8);}async['_disconnectBinding'](_0x2c13ab,_0x449548){this['_bindingsByConnection']['delete'](_0x2c13ab['connection']['id']),this['_bindingsByMember']['delete'](_0x2c13ab['member']['memberID']);let _0x7410e9=[..._0x2c13ab['joinedUnitIDs']];for(let _0x4d3693 of _0x7410e9)await this['_leaveUnit'](_0x2c13ab,_0x4d3693,_0x449548);}async['_leaveUnit'](_0x31898a,_0x572e9f,_0x3684b1){if(!_0x31898a['joinedUnitIDs']['delete'](_0x572e9f))return!0x1;let _0x54ac24=this['_rooms']['get'](_0x572e9f);return _0x54ac24?.['delete'](_0x31898a['member']['memberID']),_0x54ac24?.['size']===0x0&&this['_rooms']['delete'](_0x572e9f),await this['_broadcastToRoom'](_0x572e9f,u(_0x572e9f,{'memberID':_0x31898a['member']['memberID'],'name':_0x31898a['member']['name']}),_0x31898a['member']['memberID']),await this['_emit']('memberLeftUnit',{'session':_0x31898a['session'],'unitID':_0x572e9f,'reason':_0x3684b1}),!0x0;}async['_broadcastToRoom'](_0x2c368a,_0x27742e,_0x188704){let _0x43bd34=[...this['_rooms']['get'](_0x2c368a)?.['values']()??[]];await Promise['allSettled'](_0x43bd34['filter'](_0x17f380=>_0x17f380['member']['memberID']!==_0x188704)['map'](_0x4d3a55=>this['_safeSend'](_0x4d3a55['connection'],_0x27742e)));}async['_safeSend'](_0x26303c,_0x460056){try{await _0x26303c['send'](JSON['stringify'](_0x460056));}catch{}}async['_emit'](_0x2a3530,_0x22167a){let _0xcede21=[...this['_listeners']['get'](_0x2a3530)??[]];for(let _0x625fc8 of _0xcede21)try{await _0x625fc8(_0x22167a);}catch{}}['_assertRunning'](){if(this['_disposed'])throw Error('UniverCollabEndpoint\x20is\x20disposed');}['_assertJoinable'](_0x58e85d){if(this['_deletedUnitIDs']['has'](_0x58e85d))throw new t['CollabError']('UNIT_NOT_FOUND','Unit\x20has\x20been\x20deleted');}};exports['MemorySessionTicketStore']=y,exports['UniverCollabEndpoint']=E;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- function _0x24f6(_0x293d99,_0x2c3c54){_0x293d99=_0x293d99-0xbe;const _0xacf3a5=_0xacf3();let _0x24f6bb=_0xacf3a5[_0x293d99];return _0x24f6bb;}const _0x1b0d91=_0x24f6;function _0xacf3(){const _0x1e4029=['1185270cVsjnp','242bnEqRt','242976TpknZO','192vIqmoQ','1374590oczrog','3AMCCyG','UniverCollabEndpoint','9589380zWPCKD','6594uTFZuv','12LwunSM','63873YVxrdd','20XPUChF','604518HSvhMu','MemorySessionTicketStore'];_0xacf3=function(){return _0x1e4029;};return _0xacf3();}(function(_0x5a2c4f,_0x31af75){const _0x5e04ba=_0x24f6,_0x2ccf14=_0x5a2c4f();while(!![]){try{const _0x321560=parseInt(_0x5e04ba(0xc8))/0x1*(-parseInt(_0x5e04ba(0xcb))/0x2)+-parseInt(_0x5e04ba(0xc1))/0x3*(-parseInt(_0x5e04ba(0xc0))/0x4)+parseInt(_0x5e04ba(0xc3))/0x5*(parseInt(_0x5e04ba(0xbe))/0x6)+-parseInt(_0x5e04ba(0xc7))/0x7+-parseInt(_0x5e04ba(0xc6))/0x8*(parseInt(_0x5e04ba(0xbf))/0x9)+-parseInt(_0x5e04ba(0xca))/0xa+-parseInt(_0x5e04ba(0xc4))/0xb*(-parseInt(_0x5e04ba(0xc5))/0xc);if(_0x321560===_0x31af75)break;else _0x2ccf14['push'](_0x2ccf14['shift']());}catch(_0x2fcdcb){_0x2ccf14['push'](_0x2ccf14['shift']());}}}(_0xacf3,0x906cf));import _0x5ab885 from'./index.cjs';const facadeExport0=_0x5ab885[_0x1b0d91(0xc2)],facadeExport1=_0x5ab885[_0x1b0d91(0xc9)];export{facadeExport0 as MemorySessionTicketStore,facadeExport1 as UniverCollabEndpoint};
1
+ const _0x42a26c=_0x2ea4;(function(_0x274d10,_0x32d250){const _0x161f8d=_0x2ea4,_0x1031d0=_0x274d10();while(!![]){try{const _0x4c1041=parseInt(_0x161f8d(0x7c))/0x1+parseInt(_0x161f8d(0x7e))/0x2*(-parseInt(_0x161f8d(0x74))/0x3)+-parseInt(_0x161f8d(0x73))/0x4*(-parseInt(_0x161f8d(0x7f))/0x5)+parseInt(_0x161f8d(0x7d))/0x6*(parseInt(_0x161f8d(0x7b))/0x7)+parseInt(_0x161f8d(0x75))/0x8+parseInt(_0x161f8d(0x7a))/0x9*(parseInt(_0x161f8d(0x78))/0xa)+-parseInt(_0x161f8d(0x79))/0xb*(parseInt(_0x161f8d(0x80))/0xc);if(_0x4c1041===_0x32d250)break;else _0x1031d0['push'](_0x1031d0['shift']());}catch(_0x55889b){_0x1031d0['push'](_0x1031d0['shift']());}}}(_0x34fb,0x21a6d));function _0x2ea4(_0x4607ad,_0x5d280b){_0x4607ad=_0x4607ad-0x73;const _0x34fb7a=_0x34fb();let _0x2ea462=_0x34fb7a[_0x4607ad];return _0x2ea462;}function _0x34fb(){const _0x5cf028=['1907640FwRYSE','UniverCollabEndpoint','MemorySessionTicketStore','2409810aqphgp','8925400RpRevo','9fgKtZI','898331qQQjKi','225598YzrgMW','6TePNKZ','52846tiDnpA','237155YFcJvf','12OCjilk','12chuURF','3AKWKzt'];_0x34fb=function(){return _0x5cf028;};return _0x34fb();}import _0x2e72b5 from'./index.cjs';const facadeExport0=_0x2e72b5[_0x42a26c(0x77)],facadeExport1=_0x2e72b5[_0x42a26c(0x76)];export{facadeExport0 as MemorySessionTicketStore,facadeExport1 as UniverCollabEndpoint};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@univerjs-pro/collaboration-endpoint",
3
3
  "type": "module",
4
- "version": "1.0.1",
4
+ "version": "1.0.2",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
@@ -16,8 +16,8 @@
16
16
  "dist"
17
17
  ],
18
18
  "dependencies": {
19
- "@univerjs-pro/collaboration-service": "1.0.1",
20
- "@univerjs-pro/collaboration-transport-node": "1.0.1",
21
- "@univerjs/protocol": "1.0.1"
19
+ "@univerjs-pro/collaboration-service": "1.0.2",
20
+ "@univerjs-pro/collaboration-transport-node": "1.0.2",
21
+ "@univerjs/protocol": "1.0.2"
22
22
  }
23
23
  }