@univerjs-pro/collaboration-endpoint 1.0.0-rc.0 → 1.0.0

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(_0x9d0d25,_0x4fdda9,_0x176a58=''){return{'cmd':_0x9d0d25,'code':n['CmdRspCode']['OK'],'reason':'success','routeKey':_0x176a58,'infoRsp':{'memberID':_0x4fdda9}};}function o(_0x2d4a59,_0x30b049,_0x5ddbd9,_0x197211){return{'cmd':n['CombCmd']['JOIN'],'code':_0x30b049,'reason':_0x197211,'routeKey':_0x2d4a59,'joinRsp':{'roomInfos':_0x5ddbd9}};}function s(_0x23b41c){return{'memberID':_0x23b41c['memberID'],'userID':_0x23b41c['userID'],'name':_0x23b41c['name'],..._0x23b41c['avatar']===void 0x0?{}:{'avatar':_0x23b41c['avatar']}};}function c(_0x463e2a,_0x3987c7){return{'cmd':n['CombCmd']['RECV'],'code':n['CmdRspCode']['OK'],'reason':'success','routeKey':_0x463e2a,'collaMsg':_0x3987c7};}function l(_0x532416,_0x48879a){return c(_0x532416,{'eventID':i['USERS_ENTER'],'joinEvent':{..._0x48879a,'avatar':_0x48879a['avatar']??''}});}function u(_0x86f062,_0x3efd61){return c(_0x86f062,{'eventID':i['USERS_LEAVE'],'leaveEvent':_0x3efd61});}function d(_0x2e321f,_0x68c2f9){return c(_0x2e321f,{'eventID':i['UPDATE_CURSOR'],'updateCursorEvent':_0x68c2f9});}function f(_0x40bad3,_0x342f3c,_0x1f28b0){let _0x1392e1={[i['CHANGESET_ACK']]:'csAckEvent',[i['CHANGESET_REJ']]:'csRejEvent',[i['CHANGESET_SHOULD_RETRY']]:'csShouldRetryEvent',[i['NEW_CHANGESETS']]:'newCsEvent',[i['PERMISSION_REJ']]:'permissionRejEvent'}[_0x342f3c];return c(_0x40bad3,{'eventID':_0x342f3c,[_0x1392e1]:{'cs':_0x1f28b0}});}function p(_0x12eaa3,_0x4b6352,_0x33cbf1){return c(_0x12eaa3,{..._0x33cbf1,'eventID':_0x4b6352});}var m=class{['_middlewares']=new Map();['use'](_0x501ebc,_0x2587b7){let _0x569e88=this['_middlewares']['get'](_0x501ebc)??[],_0x1bf03c=_0x2587b7;_0x569e88['push'](_0x1bf03c),this['_middlewares']['set'](_0x501ebc,_0x569e88);let _0x15e198=!0x1;return{'dispose':()=>{if(_0x15e198)return;_0x15e198=!0x0;let _0x1c5726=_0x569e88['indexOf'](_0x1bf03c);_0x1c5726>=0x0&&_0x569e88['splice'](_0x1c5726,0x1);}};}async['run'](_0x16f058,_0xe68604,_0x607d8){let _0x25aa2b=[...this['_middlewares']['get'](_0x16f058)??[]],_0x3b2475=async _0x120634=>{let _0x34b16f=_0x25aa2b[_0x120634];if(!_0x34b16f){await _0x607d8();return;}let _0x1e48ab=!0x1,_0x5531da,_0x4891e2=()=>{if(_0x1e48ab)throw Error('Endpoint\x20middleware\x20for\x20'+String(_0x16f058)+'\x20called\x20next()\x20more\x20than\x20once');return _0x1e48ab=!0x0,_0x5531da=_0x3b2475(_0x120634+0x1),_0x5531da;};try{await _0x34b16f(_0xe68604,_0x4891e2);}catch(_0x25795c){if(_0x5531da)try{await _0x5531da;}catch{}throw _0x25795c;}if(!_0x1e48ab)throw Error('Endpoint\x20middleware\x20for\x20'+String(_0x16f058)+'\x20completed\x20without\x20calling\x20next()');await _0x5531da;};await _0x3b2475(0x0);}['clear'](){this['_middlewares']['clear']();}},h={'code':n['ErrorCode']['OK'],'message':''};function g(_0x28225f,_0x141482){if(!/^-?\d+$/['test'](_0x28225f))throw new t['CollabError']('INVALID_REQUEST',_0x141482+'\x20must\x20be\x20an\x20integer');let _0x17f679=Number(_0x28225f);if(!Number['isSafeInteger'](_0x17f679))throw new t['CollabError']('INVALID_REQUEST',_0x141482+'\x20is\x20outside\x20the\x20safe\x20integer\x20range');return _0x17f679;}function _(_0x19934e){if(_0x19934e instanceof r['NodeTransportError'])return _0x19934e['code']==='REQUEST_BODY_TOO_LARGE'?{'status':0x19d,'error':{'code':n['ErrorCode']['INVALID_ARGUMENT'],'message':_0x19934e['message']}}:_0x19934e['code']==='INVALID_JSON'||_0x19934e['code']==='REQUEST_ABORTED'?{'status':0x190,'error':{'code':n['ErrorCode']['INVALID_ARGUMENT'],'message':_0x19934e['message']}}:{'status':0x1f7,'error':{'code':n['ErrorCode']['INTERNAL_ERROR'],'message':'Transport\x20unavailable'}};if(!(_0x19934e instanceof t['CollabError']))return{'status':0x1f4,'error':{'code':n['ErrorCode']['INTERNAL_ERROR'],'message':'Internal\x20server\x20error'}};let _0x15918d={'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']}}[_0x19934e['code']];return{'status':_0x15918d['status'],'error':{'code':_0x15918d['code'],'message':_0x19934e['message']}};}function v(_0x431720,_0x17a3b5,_0x46f5ba){_0x431720['writableEnded']||_0x431720['destroyed']||(_0x431720['statusCode']=_0x17a3b5,_0x431720['setHeader']('content-type','application/json;\x20charset=utf-8'),_0x431720['end'](JSON['stringify'](_0x46f5ba,(_0x55e4df,_0x363047)=>_0x363047 instanceof Uint8Array?Buffer['from'](_0x363047)['toString']('base64'):_0x363047)));}var y=class{['_tickets']=new Map();['_disposed']=!0x1;async['issue'](_0x1b2e50,_0x2538f0){if(this['_disposed'])throw Error('Session\x20ticket\x20store\x20is\x20disposed');if(!Number['isSafeInteger'](_0x2538f0)||_0x2538f0<=0x0)throw TypeError('Session\x20ticket\x20TTL\x20must\x20be\x20a\x20positive\x20safe\x20integer');this['_purgeExpired']();let _0x1a1bd4;do _0x1a1bd4=(0x0,e['randomBytes'])(0x20)['toString']('base64url');while(this['_tickets']['has'](_0x1a1bd4));return this['_tickets']['set'](_0x1a1bd4,{'record':_0x1b2e50,'expiresAt':Date['now']()+_0x2538f0}),_0x1a1bd4;}async['consume'](_0x2d3df7){if(this['_disposed']||!_0x2d3df7)return null;let _0x71be1=this['_tickets']['get'](_0x2d3df7);return!_0x71be1||(this['_tickets']['delete'](_0x2d3df7),_0x71be1['expiresAt']<=Date['now']())?null:_0x71be1['record'];}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_tickets']['clear']());}['_purgeExpired'](){let _0x4dd04b=Date['now']();for(let [_0x28ef1e,_0x40b149]of this['_tickets'])_0x40b149['expiresAt']<=_0x4dd04b&&this['_tickets']['delete'](_0x28ef1e);}},b=0x5*0xea60;function x(_0x52e101){if(!_0x52e101['startsWith']('/')||_0x52e101==='/'||_0x52e101['endsWith']('/')||_0x52e101['includes']('?')||_0x52e101['includes']('#'))throw TypeError('protocolBasePath\x20must\x20be\x20an\x20absolute\x20path\x20without\x20a\x20trailing\x20slash');return _0x52e101;}function S(_0x257e21){if(!_0x257e21||typeof _0x257e21!='object')throw new t['CollabError']('INVALID_REQUEST','Request\x20body\x20must\x20be\x20an\x20object');let _0x58972d=_0x257e21;if(typeof _0x58972d['unitID']!='string'||typeof _0x58972d['memberID']!='string'||!Number['isSafeInteger'](_0x58972d['type'])||!_0x58972d['changeset']||typeof _0x58972d['changeset']!='object')throw new t['CollabError']('INVALID_REQUEST','Invalid\x20new\x20changes\x20request');}function C(_0x9b2e52){if(!Array['isArray'](_0x9b2e52)||_0x9b2e52['length']===0x0||_0x9b2e52['some'](_0x4659b8=>typeof _0x4659b8!='string'||_0x4659b8['trim']()['length']===0x0))throw new t['CollabError']('INVALID_REQUEST','unitIds\x20must\x20be\x20a\x20non-empty\x20string\x20array');}function w(_0x1f72ad){let _0x852d96=_0x1f72ad['getAll']('unitIds');C(_0x852d96);let _0x3e86e0=_0x1f72ad['getAll']('hardDelete');if(_0x3e86e0['length']>0x1||_0x3e86e0['length']===0x1&&_0x3e86e0[0x0]!=='true'&&_0x3e86e0[0x0]!=='false')throw new t['CollabError']('INVALID_REQUEST','hardDelete\x20must\x20be\x20true\x20or\x20false');return{'unitIds':_0x852d96,'hardDelete':_0x3e86e0[0x0]==='true'};}function T(_0x276297){if(!_0x276297||typeof _0x276297!='object')throw new t['CollabError']('INVALID_REQUEST','Request\x20body\x20must\x20be\x20an\x20object');C(_0x276297['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(_0xeb7b5b,_0x39df1f={}){if(this['_service']=_0xeb7b5b,!_0xeb7b5b)throw TypeError('UniverCollabEndpoint\x20requires\x20a\x20service');if(this['_ticketStore']=_0x39df1f['ticketStore']??new y(),this['_ownsTicketStore']=_0x39df1f['ticketStore']===void 0x0,this['_ticketTtlMs']=_0x39df1f['sessionTicketTtlMs']??b,!Number['isSafeInteger'](this['_ticketTtlMs'])||this['_ticketTtlMs']<=0x0)throw TypeError('sessionTicketTtlMs\x20must\x20be\x20a\x20positive\x20safe\x20integer');this['_protocolBasePath']=x(_0x39df1f['protocolBasePath']??'/universer-api'),this['_serviceSubscriptions']=[this['_service']['on']('changesetCommitted',_0x3cfa68=>{this['_enqueueCommittedChangeset'](_0x3cfa68['changeset'],_0x3cfa68['memberID']);}),this['_service']['on']('unitsDeleted',_0x182027=>{for(let _0x888083 of _0x182027['request']['unitIDs'])this['_deletedUnitIDs']['add'](_0x888083);for(let _0x54fd31 of _0x182027['request']['unitIDs'])this['_enqueueUnitOutbound'](_0x54fd31,async()=>{this['_evictUnitRoom'](_0x54fd31);});}),this['_service']['on']('unitsRecovered',async _0x4ed20a=>{await Promise['all'](_0x4ed20a['request']['unitIDs']['map'](_0x59911=>this['_enqueueUnitOutbound'](_0x59911,async()=>{this['_deletedUnitIDs']['delete'](_0x59911);})));})];}['use'](_0x39dbb9,_0x4944ab){return this['_assertRunning'](),this['_middleware']['use'](_0x39dbb9,_0x4944ab);}['on'](_0x465d08,_0x3f6bab){this['_assertRunning']();let _0x57caef=this['_listeners']['get'](_0x465d08)??new Set(),_0x4ff04f=_0x3f6bab;_0x57caef['add'](_0x4ff04f),this['_listeners']['set'](_0x465d08,_0x57caef);let _0x11619e=!0x1;return{'dispose':()=>{_0x11619e||(_0x11619e=!0x0,_0x57caef['delete'](_0x4ff04f));}};}['findJoinedSession'](_0x4f91b6){if(this['_disposed'])return null;let _0x144f50=this['_bindingsByMember']['get'](_0x4f91b6['memberID']);return!_0x144f50||_0x144f50['session']['userID']!==_0x4f91b6['authenticatedUserID']||!_0x144f50['joinedUnitIDs']['has'](_0x4f91b6['unitID'])?null:_0x144f50['session'];}['findJoinedSessionByUser'](_0x31716f){if(this['_disposed'])return null;for(let _0x5d5351 of this['_rooms']['get'](_0x31716f['unitID'])?.['values']()??[])if(_0x5d5351['session']['userID']===_0x31716f['authenticatedUserID'])return _0x5d5351['session'];return null;}async['invalidateUnitSessions'](_0x2b46bf){if(this['_assertRunning'](),typeof _0x2b46bf['unitID']!='string'||!_0x2b46bf['unitID'])throw TypeError('unitID\x20must\x20be\x20a\x20non-empty\x20string');if(_0x2b46bf['userID']!==void 0x0&&(typeof _0x2b46bf['userID']!='string'||!_0x2b46bf['userID']))throw TypeError('userID\x20must\x20be\x20a\x20non-empty\x20string\x20when\x20provided');await this['_enqueueUnitOutbound'](_0x2b46bf['unitID'],async()=>{let _0x475e09=[...this['_rooms']['get'](_0x2b46bf['unitID'])?.['values']()??[]]['filter'](_0x371546=>_0x2b46bf['userID']===void 0x0||_0x371546['session']['userID']===_0x2b46bf['userID']);for(let _0x14b9d0 of _0x475e09)_0x14b9d0['connection']['close'](0xfa3,'Unit\x20access\x20changed'),await this['_disconnectBinding'](_0x14b9d0,'session-evicted');});}async['publishTrustedUnitEvent'](_0x5e8b93){this['_assertRunning']();let _0x369c03=[...this['_rooms']['get'](_0x5e8b93['unitID'])?.['keys']()??[]],_0x4ff8c0=this['_bindingsByMember']['get'](_0x5e8b93['memberID'])?.['joinedUnitIDs']['has'](_0x5e8b93['unitID'])?_0x5e8b93['memberID']:void 0x0,_0x520467=p(_0x5e8b93['unitID'],_0x5e8b93['eventID'],_0x5e8b93['data']);this['_enqueueUnitOutbound'](_0x5e8b93['unitID'],async()=>{for(let _0x8bfbea of _0x369c03){if(_0x8bfbea===_0x4ff8c0)continue;let _0x17d42b=this['_bindingsByMember']['get'](_0x8bfbea);_0x17d42b?.['joinedUnitIDs']['has'](_0x5e8b93['unitID'])&&await this['_safeSend'](_0x17d42b['connection'],_0x520467);}});}['register'](_0x5b33f1){this['_assertRunning']();let _0x4c1cea=this['_protocolBasePath'],_0x16891b=_0x25bf1b=>_0x16450b=>this['_handleHttp'](_0x16450b,_0x25bf1b);_0x5b33f1['get'](_0x4c1cea+'/user/session-ticket',_0x16891b('ticket')),_0x5b33f1['delete'](_0x4c1cea+'/snapshot/-/units',_0x16891b('delete-units')),_0x5b33f1['post'](_0x4c1cea+'/snapshot/-/units/recover',_0x16891b('recover-units')),_0x5b33f1['post'](_0x4c1cea+'/comb/:type/unit/:unitID/new_changes',_0x16891b('new-changes')),_0x5b33f1['get'](_0x4c1cea+'/snapshot/block/:type/unit/:unitID/block/:blockID',_0x16891b('deserialized-block')),_0x5b33f1['get'](_0x4c1cea+'/snapshot/:type/unit/:unitID/rev/:revision',_0x16891b('unit')),_0x5b33f1['get'](_0x4c1cea+'/snapshot/:type/unit/:unitID/block/:blockID',_0x16891b('block')),_0x5b33f1['get'](_0x4c1cea+'/snapshot/:type/unit/:unitID/fetchmissing',_0x16891b('fetch-missing')),_0x5b33f1['upgrade'](_0x4c1cea+'/comb/connect',_0x4dabb2=>this['_handleUpgrade'](_0x4dabb2));}async['_handleUpgrade'](_0x131316){if(this['_disposed']){_0x131316['reject'](0x1f7,'Endpoint\x20is\x20disposed');return;}let _0x53b6be=new URL(_0x131316['incomingMessage']['url']??'/','http://localhost'),_0x519284=await this['_ticketStore']['consume'](_0x53b6be['searchParams']['get']('sessionTicket')??'');if(!_0x519284){_0x131316['reject'](0x191,'Invalid\x20or\x20expired\x20session\x20ticket');return;}_0x131316['accept']({'open':({connection:_0x43ffae})=>this['_openConnection'](_0x519284,_0x43ffae),'message':_0x182ec4=>this['_handleMessage'](_0x182ec4),'close':({connection:_0xc9111})=>this['_disconnectConnection'](_0xc9111,'connection-closed')});}async['dispose'](){if(this['_disposed'])return;this['_disposed']=!0x0;for(let _0x5a8de2 of this['_serviceSubscriptions'])_0x5a8de2['dispose']();await Promise['allSettled']([...this['_outboundQueues']['values']()]);let _0x1ef64f=[...this['_bindingsByConnection']['values']()];for(let _0x3afb35 of _0x1ef64f)await this['_disconnectBinding'](_0x3afb35,'endpoint-disposed'),_0x3afb35['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'](_0x440cba,_0x54eb3d){try{this['_assertRunning']();let _0x18194f=new URL(_0x440cba['incomingMessage']['url']??'/','http://localhost');if(!_0x440cba['userID'])throw new t['CollabError']('UNAUTHENTICATED','HTTP\x20user\x20is\x20not\x20authenticated');if(_0x54eb3d==='ticket'){let _0x1528df=await this['_ticketStore']['issue']({'userID':_0x440cba['userID'],'customData':_0x440cba['customData']},this['_ticketTtlMs']);v(_0x440cba['response'],0xc8,{'error':h,'ticket':_0x1528df});return;}let _0x3e96ef={'userID':_0x440cba['userID'],'customData':_0x440cba['customData']};if(_0x54eb3d==='delete-units'){let _0x530abb=w(_0x18194f['searchParams']);await this['_service']['deleteUnits']({'unitIDs':_0x530abb['unitIds'],'hardDelete':_0x530abb['hardDelete']},_0x3e96ef),v(_0x440cba['response'],0xc8,{'error':h});return;}if(_0x54eb3d==='recover-units'){let _0x538afe=await _0x440cba['readJson']();T(_0x538afe),await this['_service']['recoverUnits']({'unitIDs':_0x538afe['unitIds']},_0x3e96ef),v(_0x440cba['response'],0xc8,{'error':h});return;}let _0x2372ef=g(_0x440cba['params']['type'],'type'),_0x356ec1=_0x440cba['params']['unitID'];if(_0x54eb3d==='new-changes'){await this['_handleNewChanges'](_0x440cba,_0x356ec1,_0x2372ef);return;}switch(_0x54eb3d){case'unit':{let _0x5035d6=g(_0x440cba['params']['revision'],'revision'),_0x516120=await this['_service']['getUnitLoadData']({'unitID':_0x356ec1,'type':_0x2372ef,'revision':_0x5035d6},_0x3e96ef);v(_0x440cba['response'],0xc8,{'error':h,'snapshot':_0x516120['snapshot'],'changesets':_0x516120['changesets']});return;}case'block':case'deserialized-block':{let _0x4fe298=await this['_service']['getSheetBlock']({'unitID':_0x356ec1,'type':_0x2372ef,'blockID':_0x440cba['params']['blockID']},_0x3e96ef);if(!_0x4fe298['block'])throw new t['CollabError']('UNIT_NOT_FOUND','Sheet\x20block\x20was\x20not\x20found');let _0x28cabe=_0x54eb3d==='deserialized-block'?{..._0x4fe298['block'],'data':JSON['parse'](new TextDecoder()['decode'](_0x4fe298['block']['data']))}:_0x4fe298['block'];v(_0x440cba['response'],0xc8,{'error':h,'block':_0x28cabe});return;}case'fetch-missing':{let _0x2d07bc=g(_0x18194f['searchParams']['get']('from')??'','from'),_0x1a511d=g(_0x18194f['searchParams']['get']('to')??'','to'),_0x56455a=await this['_service']['getChangesets']({'unitID':_0x356ec1,'type':_0x2372ef,'from':_0x2d07bc,'to':_0x1a511d},_0x3e96ef);v(_0x440cba['response'],0xc8,{'error':h,'changesets':_0x56455a['changesets']});return;}}}catch(_0x66152e){let _0x34ea1=_(_0x66152e instanceof SyntaxError?new t['CollabError']('INTERNAL_ERROR','Stored\x20sheet\x20block\x20is\x20not\x20valid\x20JSON',{'cause':_0x66152e}):_0x66152e);v(_0x440cba['response'],_0x34ea1['status'],{'error':_0x34ea1['error']});}}async['_openConnection'](_0x1eb53f,_0x2c5173){try{let _0x2b4cdc=(0x0,e['randomUUID'])(),_0x20c403={'memberID':_0x2b4cdc,'userID':_0x1eb53f['userID'],'customData':_0x1eb53f['customData']},_0x19dc6b={'memberID':_0x2b4cdc,'userID':_0x1eb53f['userID'],'name':_0x1eb53f['userID']},_0x2fda1b={'connection':_0x2c5173,'session':_0x20c403,'member':_0x19dc6b};await this['_middleware']['run']('connect',_0x2fda1b,()=>void 0x0);let _0x3b5143={'connection':_0x2c5173,'session':_0x20c403,'member':_0x19dc6b,'joinedUnitIDs':new Set()};this['_bindingsByConnection']['set'](_0x2c5173['id'],_0x3b5143),this['_bindingsByMember']['set'](_0x2b4cdc,_0x3b5143);}catch(_0x2f0a86){_0x2c5173['close'](_0x2f0a86 instanceof t['CollabError']?0x3f0:0x3f3,_0x2f0a86 instanceof t['CollabError']?'Connection\x20rejected':'Endpoint\x20failure');}}async['_handleMessage'](_0x110813){let _0x2b9741=this['_bindingsByConnection']['get'](_0x110813['connection']['id']);if(!_0x2b9741){_0x110813['connection']['close'](0x3f0,'WebSocket\x20Session\x20is\x20not\x20established');return;}if(typeof _0x110813['data']!='string'){_0x110813['connection']['close'](0x3eb,'Comb\x20messages\x20must\x20be\x20JSON\x20text');return;}let _0x4ef542;try{let _0x41c6b5=JSON['parse'](_0x110813['data']);if(!_0x41c6b5||typeof _0x41c6b5!='object')throw Error('invalid');_0x4ef542=_0x41c6b5;}catch{_0x110813['connection']['close'](0x3eb,'Invalid\x20Comb\x20JSON\x20message');return;}let _0x26db0c=typeof _0x4ef542['routeKey']=='string'?_0x4ef542['routeKey']:'';switch(_0x4ef542['cmd']){case n['CombCmd']['HELLO']:case n['CombCmd']['HEARTBEAT']:await _0x110813['connection']['send'](JSON['stringify'](a(_0x4ef542['cmd'],_0x2b9741['member']['memberID'],_0x26db0c)));return;case n['CombCmd']['JOIN']:await this['_handleJoin'](_0x2b9741,_0x4ef542,_0x26db0c);return;case n['CombCmd']['LEAVE']:await this['_handleLeave'](_0x2b9741,_0x4ef542,_0x26db0c);return;case n['CombCmd']['INGEST']:if(_0x4ef542['collaMsg']?.['eventID']!==i['UPDATE_CURSOR'])return;await this['_handlePresence'](_0x2b9741,_0x4ef542,_0x110813['customData']);return;default:return;}}async['_handleJoin'](_0x39c8e8,_0x16e662,_0x51ad45){let _0x492457=_0x16e662['joinReq']?.['rooms'],_0x49516a=_0x492457?.['length']?_0x492457['map'](_0x58ab87=>_0x58ab87['roomID']):_0x51ad45?[_0x51ad45]:[];if(_0x49516a['length']===0x0||_0x49516a['some'](_0x5e7d8a=>typeof _0x5e7d8a!='string'||!_0x5e7d8a)){await _0x39c8e8['connection']['send'](JSON['stringify'](o(_0x51ad45,n['CmdRspCode']['FAIL'],{},'Invalid\x20JOIN\x20request')));return;}let _0x5ce31b=[...new Set(_0x49516a)],_0x1d950=_0x5ce31b['filter'](_0x471e05=>!_0x39c8e8['joinedUnitIDs']['has'](_0x471e05));try{for(let _0x323f4f of _0x5ce31b)this['_assertJoinable'](_0x323f4f);for(let _0xbacdd7 of _0x1d950)await this['_middleware']['run']('joinUnit',{'session':_0x39c8e8['session'],'unitID':_0xbacdd7},()=>void 0x0);for(let _0x4847fd of _0x5ce31b)this['_assertJoinable'](_0x4847fd);}catch(_0x34ea52){let _0x4f85b8=_0x34ea52 instanceof t['CollabError']&&_0x34ea52['code']==='UNIT_NOT_FOUND'?n['CmdRspCode']['JOIN_ROOM_NOT_EXISTS']:_0x34ea52 instanceof t['CollabError']&&(_0x34ea52['code']==='PERMISSION_DENIED'||_0x34ea52['code']==='UNAUTHENTICATED')?n['CmdRspCode']['JOIN_ROOM_PERMISSION_DENIED']:n['CmdRspCode']['FAIL'];await _0x39c8e8['connection']['send'](JSON['stringify'](o(_0x51ad45||_0x5ce31b[0x0],_0x4f85b8,{},_0x34ea52 instanceof t['CollabError']?_0x34ea52['message']:'JOIN\x20failed')));return;}for(let _0x538478 of _0x1d950){let _0x29aa59=this['_rooms']['get'](_0x538478)??new Map();_0x29aa59['set'](_0x39c8e8['member']['memberID'],_0x39c8e8),this['_rooms']['set'](_0x538478,_0x29aa59),_0x39c8e8['joinedUnitIDs']['add'](_0x538478);}let _0x493bfd={};for(let _0x4bdd8d of _0x5ce31b)_0x493bfd[_0x4bdd8d]={'roomID':_0x4bdd8d,'members':[...this['_rooms']['get'](_0x4bdd8d)?.['values']()??[]]['map'](_0xd7780f=>s(_0xd7780f['member']))};await _0x39c8e8['connection']['send'](JSON['stringify'](o(_0x51ad45||_0x5ce31b[0x0],n['CmdRspCode']['OK'],_0x493bfd,'success')));for(let _0x46d7b2 of _0x1d950)await this['_broadcastToRoom'](_0x46d7b2,l(_0x46d7b2,s(_0x39c8e8['member'])),_0x39c8e8['member']['memberID']);}async['_handleLeave'](_0x56130a,_0x4a5a1c,_0x2b8dc7){let _0x53725b=typeof _0x4a5a1c['leaveReq']?.['roomID']=='string'?_0x4a5a1c['leaveReq']['roomID']:_0x2b8dc7;_0x53725b&&await this['_leaveUnit'](_0x56130a,_0x53725b,'client-leave');}async['_handlePresence'](_0x97595d,_0x5ee19a,_0x2dbb9c){let _0x2af950=typeof _0x5ee19a['routeKey']=='string'?_0x5ee19a['routeKey']:'',_0xf022b3=_0x5ee19a['collaMsg']?.['updateCursorEvent']?.['selection'];if(!_0x2af950||!_0x97595d['joinedUnitIDs']['has'](_0x2af950)||typeof _0xf022b3!='string')return;let _0x48d904={'unitID':_0x2af950,'memberID':_0x97595d['member']['memberID'],'selection':_0xf022b3};try{await this['_middleware']['run']('receivePresence',{'session':_0x97595d['session'],'unitID':_0x2af950,'payload':_0x48d904,'customData':_0x2dbb9c},()=>void 0x0);}catch(_0x5bbf3){if(_0x5bbf3 instanceof t['CollabError'])return;throw _0x5bbf3;}if(typeof _0x48d904['selection']!='string')return;let _0x128424=[...this['_rooms']['get'](_0x2af950)?.['values']()??[]]['filter'](_0x569ddb=>_0x569ddb!==_0x97595d);for(let _0x3b8264 of _0x128424){let _0x4dcd5f={'unitID':_0x2af950,'memberID':_0x97595d['member']['memberID'],'selection':_0x48d904['selection']};try{await this['_middleware']['run']('sendPresence',{'session':_0x97595d['session'],'unitID':_0x2af950,'payload':_0x4dcd5f,'customData':_0x2dbb9c,'targetMemberID':_0x3b8264['member']['memberID']},()=>void 0x0);}catch{continue;}typeof _0x4dcd5f['selection']=='string'&&await this['_safeSend'](_0x3b8264['connection'],d(_0x2af950,{'unitID':_0x2af950,'memberID':_0x97595d['member']['memberID'],'selection':_0x4dcd5f['selection']}));}}async['_handleNewChanges'](_0x2589e0,_0x24c86c,_0x3493ac){let _0x486ead=await _0x2589e0['readJson']();if(S(_0x486ead),_0x486ead['unitID']!==_0x24c86c||_0x486ead['type']!==_0x3493ac||_0x486ead['changeset']?.['unitID']!==_0x24c86c||_0x486ead['changeset']['type']!==_0x3493ac)throw new t['CollabError']('INVALID_REQUEST','Route,\x20request\x20and\x20changeset\x20identity\x20must\x20match');let _0x609757=this['_bindingsByMember']['get'](_0x486ead['memberID']);if(!_0x609757||_0x609757['session']['userID']!==_0x2589e0['userID'])throw new t['CollabError']('PERMISSION_DENIED','memberID\x20does\x20not\x20belong\x20to\x20the\x20authenticated\x20user');if(!_0x609757['joinedUnitIDs']['has'](_0x24c86c))throw new t['CollabError']('PERMISSION_DENIED','Session\x20has\x20not\x20joined\x20this\x20unit');let _0x12e745=await this['_service']['submitChangeset']({'changeset':_0x486ead['changeset']},{'userID':_0x2589e0['userID'],'memberID':_0x609757['session']['memberID'],'customData':_0x2589e0['customData']});if(_0x12e745['status']==='already-committed')await this['_safeSend'](_0x609757['connection'],f(_0x24c86c,i['CHANGESET_ACK'],_0x12e745['changeset']));else{if(_0x12e745['status']==='rejected'){let _0x3382ba=_0x12e745['error']['code']==='PERMISSION_DENIED'||_0x12e745['error']['code']==='UNAUTHENTICATED'?i['PERMISSION_REJ']:i['CHANGESET_REJ'];await this['_safeSend'](_0x609757['connection'],f(_0x24c86c,_0x3382ba,this['_trustedClientChangeset'](_0x486ead['changeset'],_0x609757)));}else _0x12e745['status']==='retry'&&await this['_safeSend'](_0x609757['connection'],f(_0x24c86c,i['CHANGESET_SHOULD_RETRY'],this['_trustedClientChangeset'](_0x486ead['changeset'],_0x609757)));}v(_0x2589e0['response'],0xc8,{'error':h});}['_trustedClientChangeset'](_0x403189,_0x5bfab9){return{..._0x403189,'userID':_0x5bfab9['session']['userID'],'memberID':_0x5bfab9['session']['memberID']};}['_enqueueCommittedChangeset'](_0x574dc4,_0x3e2f4f){if(this['_disposed'])return;let _0x58f8aa=_0x574dc4['unitID'],_0x45b654=[...this['_rooms']['get'](_0x58f8aa)?.['keys']()??[]];this['_enqueueUnitOutbound'](_0x58f8aa,async()=>{for(let _0xbfa71f of _0x45b654){let _0x1fadad=this['_bindingsByMember']['get'](_0xbfa71f);if(!_0x1fadad?.['joinedUnitIDs']['has'](_0x58f8aa))continue;let _0x34f8f9=_0xbfa71f===_0x3e2f4f?i['CHANGESET_ACK']:i['NEW_CHANGESETS'];await this['_safeSend'](_0x1fadad['connection'],f(_0x58f8aa,_0x34f8f9,_0x574dc4));}});}['_evictUnitRoom'](_0x388326){let _0x1aa8ec=this['_rooms']['get'](_0x388326);if(_0x1aa8ec){this['_rooms']['delete'](_0x388326);for(let _0x105fcb of _0x1aa8ec['values']())_0x105fcb['joinedUnitIDs']['delete'](_0x388326);}}['_enqueueUnitOutbound'](_0x376ca2,_0x2c6ae5){let _0x3e14d0=(this['_outboundQueues']['get'](_0x376ca2)??Promise['resolve']())['catch'](()=>void 0x0)['then'](_0x2c6ae5);return this['_outboundQueues']['set'](_0x376ca2,_0x3e14d0),_0x3e14d0['finally'](()=>{this['_outboundQueues']['get'](_0x376ca2)===_0x3e14d0&&this['_outboundQueues']['delete'](_0x376ca2);}),_0x3e14d0;}async['_disconnectConnection'](_0x5a7d20,_0x1bd320){let _0x59c3f3=this['_bindingsByConnection']['get'](_0x5a7d20['id']);_0x59c3f3&&await this['_disconnectBinding'](_0x59c3f3,_0x1bd320);}async['_disconnectBinding'](_0x375936,_0x5892ba){this['_bindingsByConnection']['delete'](_0x375936['connection']['id']),this['_bindingsByMember']['delete'](_0x375936['member']['memberID']);let _0x4f3694=[..._0x375936['joinedUnitIDs']];for(let _0x3c27b8 of _0x4f3694)await this['_leaveUnit'](_0x375936,_0x3c27b8,_0x5892ba);}async['_leaveUnit'](_0x58a5f2,_0xf229c7,_0x222e39){if(!_0x58a5f2['joinedUnitIDs']['delete'](_0xf229c7))return!0x1;let _0x480cda=this['_rooms']['get'](_0xf229c7);return _0x480cda?.['delete'](_0x58a5f2['member']['memberID']),_0x480cda?.['size']===0x0&&this['_rooms']['delete'](_0xf229c7),await this['_broadcastToRoom'](_0xf229c7,u(_0xf229c7,{'memberID':_0x58a5f2['member']['memberID'],'name':_0x58a5f2['member']['name']}),_0x58a5f2['member']['memberID']),await this['_emit']('memberLeftUnit',{'session':_0x58a5f2['session'],'unitID':_0xf229c7,'reason':_0x222e39}),!0x0;}async['_broadcastToRoom'](_0xfcb170,_0x11aea6,_0x2b529c){let _0x56a56e=[...this['_rooms']['get'](_0xfcb170)?.['values']()??[]];await Promise['allSettled'](_0x56a56e['filter'](_0x4677ec=>_0x4677ec['member']['memberID']!==_0x2b529c)['map'](_0x566f28=>this['_safeSend'](_0x566f28['connection'],_0x11aea6)));}async['_safeSend'](_0x14e50e,_0x520182){try{await _0x14e50e['send'](JSON['stringify'](_0x520182));}catch{}}async['_emit'](_0x39d5ad,_0x110f90){let _0x5cea76=[...this['_listeners']['get'](_0x39d5ad)??[]];for(let _0x28e8d3 of _0x5cea76)try{await _0x28e8d3(_0x110f90);}catch{}}['_assertRunning'](){if(this['_disposed'])throw Error('UniverCollabEndpoint\x20is\x20disposed');}['_assertJoinable'](_0x217302){if(this['_deletedUnitIDs']['has'](_0x217302))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(_0x1a2566,_0x47f4d9,_0x58fd76=''){return{'cmd':_0x1a2566,'code':n['CmdRspCode']['OK'],'reason':'success','routeKey':_0x58fd76,'infoRsp':{'memberID':_0x47f4d9}};}function o(_0x2cd3c7,_0x3dcf30,_0x5c2ef0,_0xe7325a){return{'cmd':n['CombCmd']['JOIN'],'code':_0x3dcf30,'reason':_0xe7325a,'routeKey':_0x2cd3c7,'joinRsp':{'roomInfos':_0x5c2ef0}};}function s(_0x22607a){return{'memberID':_0x22607a['memberID'],'userID':_0x22607a['userID'],'name':_0x22607a['name'],..._0x22607a['avatar']===void 0x0?{}:{'avatar':_0x22607a['avatar']}};}function c(_0x4cf1a4,_0x167e7b){return{'cmd':n['CombCmd']['RECV'],'code':n['CmdRspCode']['OK'],'reason':'success','routeKey':_0x4cf1a4,'collaMsg':_0x167e7b};}function l(_0x416400,_0x37101d){return c(_0x416400,{'eventID':i['USERS_ENTER'],'joinEvent':{..._0x37101d,'avatar':_0x37101d['avatar']??''}});}function u(_0x55d23b,_0x69601f){return c(_0x55d23b,{'eventID':i['USERS_LEAVE'],'leaveEvent':_0x69601f});}function d(_0x88d713,_0x4db448){return c(_0x88d713,{'eventID':i['UPDATE_CURSOR'],'updateCursorEvent':_0x4db448});}function f(_0x4e978a,_0x4538f0,_0x240eb1){let _0x20efa4={[i['CHANGESET_ACK']]:'csAckEvent',[i['CHANGESET_REJ']]:'csRejEvent',[i['CHANGESET_SHOULD_RETRY']]:'csShouldRetryEvent',[i['NEW_CHANGESETS']]:'newCsEvent',[i['PERMISSION_REJ']]:'permissionRejEvent'}[_0x4538f0];return c(_0x4e978a,{'eventID':_0x4538f0,[_0x20efa4]:{'cs':_0x240eb1}});}function p(_0x44d1bc,_0xc3e448,_0x133496){return c(_0x44d1bc,{..._0x133496,'eventID':_0xc3e448});}var m=class{['_middlewares']=new Map();['use'](_0x16448b,_0x5cf3f6){let _0x1187a6=this['_middlewares']['get'](_0x16448b)??[],_0x4ece2b=_0x5cf3f6;_0x1187a6['push'](_0x4ece2b),this['_middlewares']['set'](_0x16448b,_0x1187a6);let _0x249256=!0x1;return{'dispose':()=>{if(_0x249256)return;_0x249256=!0x0;let _0x340114=_0x1187a6['indexOf'](_0x4ece2b);_0x340114>=0x0&&_0x1187a6['splice'](_0x340114,0x1);}};}async['run'](_0x470129,_0x5861d3,_0x4e0c18){let _0x17bc95=[...this['_middlewares']['get'](_0x470129)??[]],_0x1bd1b5=async _0x5b2136=>{let _0x23ce26=_0x17bc95[_0x5b2136];if(!_0x23ce26){await _0x4e0c18();return;}let _0x4889fa=!0x1,_0x4d905e,_0x20cfaa=()=>{if(_0x4889fa)throw Error('Endpoint\x20middleware\x20for\x20'+String(_0x470129)+'\x20called\x20next()\x20more\x20than\x20once');return _0x4889fa=!0x0,_0x4d905e=_0x1bd1b5(_0x5b2136+0x1),_0x4d905e;};try{await _0x23ce26(_0x5861d3,_0x20cfaa);}catch(_0x428634){if(_0x4d905e)try{await _0x4d905e;}catch{}throw _0x428634;}if(!_0x4889fa)throw Error('Endpoint\x20middleware\x20for\x20'+String(_0x470129)+'\x20completed\x20without\x20calling\x20next()');await _0x4d905e;};await _0x1bd1b5(0x0);}['clear'](){this['_middlewares']['clear']();}},h={'code':n['ErrorCode']['OK'],'message':''};function g(_0x1ca71f,_0x5373a4){if(!/^-?\d+$/['test'](_0x1ca71f))throw new t['CollabError']('INVALID_REQUEST',_0x5373a4+'\x20must\x20be\x20an\x20integer');let _0x1040f8=Number(_0x1ca71f);if(!Number['isSafeInteger'](_0x1040f8))throw new t['CollabError']('INVALID_REQUEST',_0x5373a4+'\x20is\x20outside\x20the\x20safe\x20integer\x20range');return _0x1040f8;}function _(_0x11e721){if(_0x11e721 instanceof r['NodeTransportError'])return _0x11e721['code']==='REQUEST_BODY_TOO_LARGE'?{'status':0x19d,'error':{'code':n['ErrorCode']['INVALID_ARGUMENT'],'message':_0x11e721['message']}}:_0x11e721['code']==='INVALID_JSON'||_0x11e721['code']==='REQUEST_ABORTED'?{'status':0x190,'error':{'code':n['ErrorCode']['INVALID_ARGUMENT'],'message':_0x11e721['message']}}:{'status':0x1f7,'error':{'code':n['ErrorCode']['INTERNAL_ERROR'],'message':'Transport\x20unavailable'}};if(!(_0x11e721 instanceof t['CollabError']))return{'status':0x1f4,'error':{'code':n['ErrorCode']['INTERNAL_ERROR'],'message':'Internal\x20server\x20error'}};let _0x43f84d={'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']}}[_0x11e721['code']];return{'status':_0x43f84d['status'],'error':{'code':_0x43f84d['code'],'message':_0x11e721['message']}};}function v(_0x22dd95,_0x43316a,_0x15c863){_0x22dd95['writableEnded']||_0x22dd95['destroyed']||(_0x22dd95['statusCode']=_0x43316a,_0x22dd95['setHeader']('content-type','application/json;\x20charset=utf-8'),_0x22dd95['end'](JSON['stringify'](_0x15c863,(_0x4ee84f,_0x56b9e7)=>_0x56b9e7 instanceof Uint8Array?Buffer['from'](_0x56b9e7)['toString']('base64'):_0x56b9e7)));}var y=class{['_tickets']=new Map();['_disposed']=!0x1;async['issue'](_0x1c25b1,_0x3dd8e8){if(this['_disposed'])throw Error('Session\x20ticket\x20store\x20is\x20disposed');if(!Number['isSafeInteger'](_0x3dd8e8)||_0x3dd8e8<=0x0)throw TypeError('Session\x20ticket\x20TTL\x20must\x20be\x20a\x20positive\x20safe\x20integer');this['_purgeExpired']();let _0x3f4170;do _0x3f4170=(0x0,e['randomBytes'])(0x20)['toString']('base64url');while(this['_tickets']['has'](_0x3f4170));return this['_tickets']['set'](_0x3f4170,{'record':_0x1c25b1,'expiresAt':Date['now']()+_0x3dd8e8}),_0x3f4170;}async['consume'](_0x5f2e19){if(this['_disposed']||!_0x5f2e19)return null;let _0x40d176=this['_tickets']['get'](_0x5f2e19);return!_0x40d176||(this['_tickets']['delete'](_0x5f2e19),_0x40d176['expiresAt']<=Date['now']())?null:_0x40d176['record'];}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_tickets']['clear']());}['_purgeExpired'](){let _0x576615=Date['now']();for(let [_0x4b4faa,_0x3dd4fa]of this['_tickets'])_0x3dd4fa['expiresAt']<=_0x576615&&this['_tickets']['delete'](_0x4b4faa);}},b=0x5*0xea60;function x(_0xa83720){if(!_0xa83720['startsWith']('/')||_0xa83720==='/'||_0xa83720['endsWith']('/')||_0xa83720['includes']('?')||_0xa83720['includes']('#'))throw TypeError('protocolBasePath\x20must\x20be\x20an\x20absolute\x20path\x20without\x20a\x20trailing\x20slash');return _0xa83720;}function S(_0x31921f){if(!_0x31921f||typeof _0x31921f!='object')throw new t['CollabError']('INVALID_REQUEST','Request\x20body\x20must\x20be\x20an\x20object');let _0x461a90=_0x31921f;if(typeof _0x461a90['unitID']!='string'||typeof _0x461a90['memberID']!='string'||!Number['isSafeInteger'](_0x461a90['type'])||!_0x461a90['changeset']||typeof _0x461a90['changeset']!='object')throw new t['CollabError']('INVALID_REQUEST','Invalid\x20new\x20changes\x20request');}function C(_0x16f2c9){if(!Array['isArray'](_0x16f2c9)||_0x16f2c9['length']===0x0||_0x16f2c9['some'](_0x51d6dc=>typeof _0x51d6dc!='string'||_0x51d6dc['trim']()['length']===0x0))throw new t['CollabError']('INVALID_REQUEST','unitIds\x20must\x20be\x20a\x20non-empty\x20string\x20array');}function w(_0x320714){let _0x3d2680=_0x320714['getAll']('unitIds');C(_0x3d2680);let _0x1806e7=_0x320714['getAll']('hardDelete');if(_0x1806e7['length']>0x1||_0x1806e7['length']===0x1&&_0x1806e7[0x0]!=='true'&&_0x1806e7[0x0]!=='false')throw new t['CollabError']('INVALID_REQUEST','hardDelete\x20must\x20be\x20true\x20or\x20false');return{'unitIds':_0x3d2680,'hardDelete':_0x1806e7[0x0]==='true'};}function T(_0x560a65){if(!_0x560a65||typeof _0x560a65!='object')throw new t['CollabError']('INVALID_REQUEST','Request\x20body\x20must\x20be\x20an\x20object');C(_0x560a65['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(_0x5d61d2,_0x5789a7={}){if(this['_service']=_0x5d61d2,!_0x5d61d2)throw TypeError('UniverCollabEndpoint\x20requires\x20a\x20service');if(this['_ticketStore']=_0x5789a7['ticketStore']??new y(),this['_ownsTicketStore']=_0x5789a7['ticketStore']===void 0x0,this['_ticketTtlMs']=_0x5789a7['sessionTicketTtlMs']??b,!Number['isSafeInteger'](this['_ticketTtlMs'])||this['_ticketTtlMs']<=0x0)throw TypeError('sessionTicketTtlMs\x20must\x20be\x20a\x20positive\x20safe\x20integer');this['_protocolBasePath']=x(_0x5789a7['protocolBasePath']??'/universer-api'),this['_serviceSubscriptions']=[this['_service']['on']('changesetCommitted',_0x31fc5d=>{this['_enqueueCommittedChangeset'](_0x31fc5d['changeset'],_0x31fc5d['memberID']);}),this['_service']['on']('unitsDeleted',_0x563c93=>{for(let _0x4125d6 of _0x563c93['request']['unitIDs'])this['_deletedUnitIDs']['add'](_0x4125d6);for(let _0x39631c of _0x563c93['request']['unitIDs'])this['_enqueueUnitOutbound'](_0x39631c,async()=>{this['_evictUnitRoom'](_0x39631c);});}),this['_service']['on']('unitsRecovered',async _0x10c727=>{await Promise['all'](_0x10c727['request']['unitIDs']['map'](_0xa78841=>this['_enqueueUnitOutbound'](_0xa78841,async()=>{this['_deletedUnitIDs']['delete'](_0xa78841);})));})];}['use'](_0x4547cb,_0x29dff6){return this['_assertRunning'](),this['_middleware']['use'](_0x4547cb,_0x29dff6);}['on'](_0x35943f,_0x2b3c68){this['_assertRunning']();let _0xf06b1e=this['_listeners']['get'](_0x35943f)??new Set(),_0x460e22=_0x2b3c68;_0xf06b1e['add'](_0x460e22),this['_listeners']['set'](_0x35943f,_0xf06b1e);let _0x2e8e24=!0x1;return{'dispose':()=>{_0x2e8e24||(_0x2e8e24=!0x0,_0xf06b1e['delete'](_0x460e22));}};}['findJoinedSession'](_0xc1c898){if(this['_disposed'])return null;let _0x346e0e=this['_bindingsByMember']['get'](_0xc1c898['memberID']);return!_0x346e0e||_0x346e0e['session']['userID']!==_0xc1c898['authenticatedUserID']||!_0x346e0e['joinedUnitIDs']['has'](_0xc1c898['unitID'])?null:_0x346e0e['session'];}['findJoinedSessionByUser'](_0x2aed05){if(this['_disposed'])return null;for(let _0x139e16 of this['_rooms']['get'](_0x2aed05['unitID'])?.['values']()??[])if(_0x139e16['session']['userID']===_0x2aed05['authenticatedUserID'])return _0x139e16['session'];return null;}async['invalidateUnitSessions'](_0x4193a0){if(this['_assertRunning'](),typeof _0x4193a0['unitID']!='string'||!_0x4193a0['unitID'])throw TypeError('unitID\x20must\x20be\x20a\x20non-empty\x20string');if(_0x4193a0['userID']!==void 0x0&&(typeof _0x4193a0['userID']!='string'||!_0x4193a0['userID']))throw TypeError('userID\x20must\x20be\x20a\x20non-empty\x20string\x20when\x20provided');await this['_enqueueUnitOutbound'](_0x4193a0['unitID'],async()=>{let _0x2c62fe=[...this['_rooms']['get'](_0x4193a0['unitID'])?.['values']()??[]]['filter'](_0xb7039=>_0x4193a0['userID']===void 0x0||_0xb7039['session']['userID']===_0x4193a0['userID']);for(let _0x2413f1 of _0x2c62fe)_0x2413f1['connection']['close'](0xfa3,'Unit\x20access\x20changed'),await this['_disconnectBinding'](_0x2413f1,'session-evicted');});}async['publishTrustedUnitEvent'](_0xd06b27){this['_assertRunning']();let _0x7ca261=[...this['_rooms']['get'](_0xd06b27['unitID'])?.['keys']()??[]],_0x2c5d06=this['_bindingsByMember']['get'](_0xd06b27['memberID'])?.['joinedUnitIDs']['has'](_0xd06b27['unitID'])?_0xd06b27['memberID']:void 0x0,_0x529018=p(_0xd06b27['unitID'],_0xd06b27['eventID'],_0xd06b27['data']);this['_enqueueUnitOutbound'](_0xd06b27['unitID'],async()=>{for(let _0x174a40 of _0x7ca261){if(_0x174a40===_0x2c5d06)continue;let _0x63b3e5=this['_bindingsByMember']['get'](_0x174a40);_0x63b3e5?.['joinedUnitIDs']['has'](_0xd06b27['unitID'])&&await this['_safeSend'](_0x63b3e5['connection'],_0x529018);}});}['register'](_0x189358){this['_assertRunning']();let _0x9266b1=this['_protocolBasePath'],_0x5012e0=_0x502909=>_0x52c476=>this['_handleHttp'](_0x52c476,_0x502909);_0x189358['get'](_0x9266b1+'/user/session-ticket',_0x5012e0('ticket')),_0x189358['delete'](_0x9266b1+'/snapshot/-/units',_0x5012e0('delete-units')),_0x189358['post'](_0x9266b1+'/snapshot/-/units/recover',_0x5012e0('recover-units')),_0x189358['post'](_0x9266b1+'/comb/:type/unit/:unitID/new_changes',_0x5012e0('new-changes')),_0x189358['get'](_0x9266b1+'/snapshot/block/:type/unit/:unitID/block/:blockID',_0x5012e0('deserialized-block')),_0x189358['get'](_0x9266b1+'/snapshot/:type/unit/:unitID/rev/:revision',_0x5012e0('unit')),_0x189358['get'](_0x9266b1+'/snapshot/:type/unit/:unitID/block/:blockID',_0x5012e0('block')),_0x189358['get'](_0x9266b1+'/snapshot/:type/unit/:unitID/fetchmissing',_0x5012e0('fetch-missing')),_0x189358['upgrade'](_0x9266b1+'/comb/connect',_0x13a4eb=>this['_handleUpgrade'](_0x13a4eb));}async['_handleUpgrade'](_0x15b911){if(this['_disposed']){_0x15b911['reject'](0x1f7,'Endpoint\x20is\x20disposed');return;}let _0x3cc7ad=new URL(_0x15b911['incomingMessage']['url']??'/','http://localhost'),_0x1db683=await this['_ticketStore']['consume'](_0x3cc7ad['searchParams']['get']('sessionTicket')??'');if(!_0x1db683){_0x15b911['reject'](0x191,'Invalid\x20or\x20expired\x20session\x20ticket');return;}_0x15b911['accept']({'open':({connection:_0x340aaf})=>this['_openConnection'](_0x1db683,_0x340aaf),'message':_0x5f14d0=>this['_handleMessage'](_0x5f14d0),'close':({connection:_0xf02477})=>this['_disconnectConnection'](_0xf02477,'connection-closed')});}async['dispose'](){if(this['_disposed'])return;this['_disposed']=!0x0;for(let _0x2ee950 of this['_serviceSubscriptions'])_0x2ee950['dispose']();await Promise['allSettled']([...this['_outboundQueues']['values']()]);let _0x1ada70=[...this['_bindingsByConnection']['values']()];for(let _0x2660aa of _0x1ada70)await this['_disconnectBinding'](_0x2660aa,'endpoint-disposed'),_0x2660aa['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'](_0x1a6e39,_0x3e744b){try{this['_assertRunning']();let _0x47d33d=new URL(_0x1a6e39['incomingMessage']['url']??'/','http://localhost');if(!_0x1a6e39['userID'])throw new t['CollabError']('UNAUTHENTICATED','HTTP\x20user\x20is\x20not\x20authenticated');if(_0x3e744b==='ticket'){let _0x4926a3=await this['_ticketStore']['issue']({'userID':_0x1a6e39['userID'],'customData':_0x1a6e39['customData']},this['_ticketTtlMs']);v(_0x1a6e39['response'],0xc8,{'error':h,'ticket':_0x4926a3});return;}let _0x34eae0={'userID':_0x1a6e39['userID'],'customData':_0x1a6e39['customData']};if(_0x3e744b==='delete-units'){let _0x1209e5=w(_0x47d33d['searchParams']);await this['_service']['deleteUnits']({'unitIDs':_0x1209e5['unitIds'],'hardDelete':_0x1209e5['hardDelete']},_0x34eae0),v(_0x1a6e39['response'],0xc8,{'error':h});return;}if(_0x3e744b==='recover-units'){let _0x263e99=await _0x1a6e39['readJson']();T(_0x263e99),await this['_service']['recoverUnits']({'unitIDs':_0x263e99['unitIds']},_0x34eae0),v(_0x1a6e39['response'],0xc8,{'error':h});return;}let _0x338457=g(_0x1a6e39['params']['type'],'type'),_0x574d2=_0x1a6e39['params']['unitID'];if(_0x3e744b==='new-changes'){await this['_handleNewChanges'](_0x1a6e39,_0x574d2,_0x338457);return;}switch(_0x3e744b){case'unit':{let _0x3db0d5=g(_0x1a6e39['params']['revision'],'revision'),_0x3b7719=await this['_service']['getUnitLoadData']({'unitID':_0x574d2,'type':_0x338457,'revision':_0x3db0d5},_0x34eae0);v(_0x1a6e39['response'],0xc8,{'error':h,'snapshot':_0x3b7719['snapshot'],'changesets':_0x3b7719['changesets']});return;}case'block':case'deserialized-block':{let _0x2bc931=await this['_service']['getSheetBlock']({'unitID':_0x574d2,'type':_0x338457,'blockID':_0x1a6e39['params']['blockID']},_0x34eae0);if(!_0x2bc931['block'])throw new t['CollabError']('UNIT_NOT_FOUND','Sheet\x20block\x20was\x20not\x20found');let _0x2ad549=_0x3e744b==='deserialized-block'?{..._0x2bc931['block'],'data':JSON['parse'](new TextDecoder()['decode'](_0x2bc931['block']['data']))}:_0x2bc931['block'];v(_0x1a6e39['response'],0xc8,{'error':h,'block':_0x2ad549});return;}case'fetch-missing':{let _0x58072b=g(_0x47d33d['searchParams']['get']('from')??'','from'),_0x383583=g(_0x47d33d['searchParams']['get']('to')??'','to'),_0x49fdf3=await this['_service']['getChangesets']({'unitID':_0x574d2,'type':_0x338457,'from':_0x58072b,'to':_0x383583},_0x34eae0);v(_0x1a6e39['response'],0xc8,{'error':h,'changesets':_0x49fdf3['changesets']});return;}}}catch(_0x194380){let _0x1ef186=_(_0x194380 instanceof SyntaxError?new t['CollabError']('INTERNAL_ERROR','Stored\x20sheet\x20block\x20is\x20not\x20valid\x20JSON',{'cause':_0x194380}):_0x194380);v(_0x1a6e39['response'],_0x1ef186['status'],{'error':_0x1ef186['error']});}}async['_openConnection'](_0xcb73df,_0x4f3026){try{let _0x435fae=(0x0,e['randomUUID'])(),_0x28ba7a={'memberID':_0x435fae,'userID':_0xcb73df['userID'],'customData':_0xcb73df['customData']},_0x24c10b={'memberID':_0x435fae,'userID':_0xcb73df['userID'],'name':_0xcb73df['userID']},_0x1c2fbb={'connection':_0x4f3026,'session':_0x28ba7a,'member':_0x24c10b};await this['_middleware']['run']('connect',_0x1c2fbb,()=>void 0x0);let _0x1d19d0={'connection':_0x4f3026,'session':_0x28ba7a,'member':_0x24c10b,'joinedUnitIDs':new Set()};this['_bindingsByConnection']['set'](_0x4f3026['id'],_0x1d19d0),this['_bindingsByMember']['set'](_0x435fae,_0x1d19d0);}catch(_0x3dac72){_0x4f3026['close'](_0x3dac72 instanceof t['CollabError']?0x3f0:0x3f3,_0x3dac72 instanceof t['CollabError']?'Connection\x20rejected':'Endpoint\x20failure');}}async['_handleMessage'](_0x1c5d2e){let _0x220889=this['_bindingsByConnection']['get'](_0x1c5d2e['connection']['id']);if(!_0x220889){_0x1c5d2e['connection']['close'](0x3f0,'WebSocket\x20Session\x20is\x20not\x20established');return;}if(typeof _0x1c5d2e['data']!='string'){_0x1c5d2e['connection']['close'](0x3eb,'Comb\x20messages\x20must\x20be\x20JSON\x20text');return;}let _0x145e9c;try{let _0x25b224=JSON['parse'](_0x1c5d2e['data']);if(!_0x25b224||typeof _0x25b224!='object')throw Error('invalid');_0x145e9c=_0x25b224;}catch{_0x1c5d2e['connection']['close'](0x3eb,'Invalid\x20Comb\x20JSON\x20message');return;}let _0x5ea736=typeof _0x145e9c['routeKey']=='string'?_0x145e9c['routeKey']:'';switch(_0x145e9c['cmd']){case n['CombCmd']['HELLO']:case n['CombCmd']['HEARTBEAT']:await _0x1c5d2e['connection']['send'](JSON['stringify'](a(_0x145e9c['cmd'],_0x220889['member']['memberID'],_0x5ea736)));return;case n['CombCmd']['JOIN']:await this['_handleJoin'](_0x220889,_0x145e9c,_0x5ea736);return;case n['CombCmd']['LEAVE']:await this['_handleLeave'](_0x220889,_0x145e9c,_0x5ea736);return;case n['CombCmd']['INGEST']:if(_0x145e9c['collaMsg']?.['eventID']!==i['UPDATE_CURSOR'])return;await this['_handlePresence'](_0x220889,_0x145e9c,_0x1c5d2e['customData']);return;default:return;}}async['_handleJoin'](_0x33fc33,_0x4e8e6a,_0x3508f5){let _0x252570=_0x4e8e6a['joinReq']?.['rooms'],_0x42d6d2=_0x252570?.['length']?_0x252570['map'](_0x47385e=>_0x47385e['roomID']):_0x3508f5?[_0x3508f5]:[];if(_0x42d6d2['length']===0x0||_0x42d6d2['some'](_0x127387=>typeof _0x127387!='string'||!_0x127387)){await _0x33fc33['connection']['send'](JSON['stringify'](o(_0x3508f5,n['CmdRspCode']['FAIL'],{},'Invalid\x20JOIN\x20request')));return;}let _0x21b96d=[...new Set(_0x42d6d2)],_0x29e21d=_0x21b96d['filter'](_0x38bbf0=>!_0x33fc33['joinedUnitIDs']['has'](_0x38bbf0));try{for(let _0x7b9899 of _0x21b96d)this['_assertJoinable'](_0x7b9899);for(let _0x4fe3a9 of _0x29e21d)await this['_middleware']['run']('joinUnit',{'session':_0x33fc33['session'],'unitID':_0x4fe3a9},()=>void 0x0);for(let _0xa8433a of _0x21b96d)this['_assertJoinable'](_0xa8433a);}catch(_0x2fa002){let _0x12c639=_0x2fa002 instanceof t['CollabError']&&_0x2fa002['code']==='UNIT_NOT_FOUND'?n['CmdRspCode']['JOIN_ROOM_NOT_EXISTS']:_0x2fa002 instanceof t['CollabError']&&(_0x2fa002['code']==='PERMISSION_DENIED'||_0x2fa002['code']==='UNAUTHENTICATED')?n['CmdRspCode']['JOIN_ROOM_PERMISSION_DENIED']:n['CmdRspCode']['FAIL'];await _0x33fc33['connection']['send'](JSON['stringify'](o(_0x3508f5||_0x21b96d[0x0],_0x12c639,{},_0x2fa002 instanceof t['CollabError']?_0x2fa002['message']:'JOIN\x20failed')));return;}for(let _0x77a20c of _0x29e21d){let _0x3a7dcb=this['_rooms']['get'](_0x77a20c)??new Map();_0x3a7dcb['set'](_0x33fc33['member']['memberID'],_0x33fc33),this['_rooms']['set'](_0x77a20c,_0x3a7dcb),_0x33fc33['joinedUnitIDs']['add'](_0x77a20c);}let _0x376adf={};for(let _0x435a88 of _0x21b96d)_0x376adf[_0x435a88]={'roomID':_0x435a88,'members':[...this['_rooms']['get'](_0x435a88)?.['values']()??[]]['map'](_0x963b2e=>s(_0x963b2e['member']))};await _0x33fc33['connection']['send'](JSON['stringify'](o(_0x3508f5||_0x21b96d[0x0],n['CmdRspCode']['OK'],_0x376adf,'success')));for(let _0x83ba25 of _0x29e21d)await this['_broadcastToRoom'](_0x83ba25,l(_0x83ba25,s(_0x33fc33['member'])),_0x33fc33['member']['memberID']);}async['_handleLeave'](_0x500a38,_0x5d40c9,_0x235808){let _0x28ed4b=typeof _0x5d40c9['leaveReq']?.['roomID']=='string'?_0x5d40c9['leaveReq']['roomID']:_0x235808;_0x28ed4b&&await this['_leaveUnit'](_0x500a38,_0x28ed4b,'client-leave');}async['_handlePresence'](_0x49ab8b,_0x2d58cf,_0x53bb57){let _0x32c054=typeof _0x2d58cf['routeKey']=='string'?_0x2d58cf['routeKey']:'',_0x1363d9=_0x2d58cf['collaMsg']?.['updateCursorEvent']?.['selection'];if(!_0x32c054||!_0x49ab8b['joinedUnitIDs']['has'](_0x32c054)||typeof _0x1363d9!='string')return;let _0x44a892={'unitID':_0x32c054,'memberID':_0x49ab8b['member']['memberID'],'selection':_0x1363d9};try{await this['_middleware']['run']('receivePresence',{'session':_0x49ab8b['session'],'unitID':_0x32c054,'payload':_0x44a892,'customData':_0x53bb57},()=>void 0x0);}catch(_0x5639a9){if(_0x5639a9 instanceof t['CollabError'])return;throw _0x5639a9;}if(typeof _0x44a892['selection']!='string')return;let _0x3fc2e5=[...this['_rooms']['get'](_0x32c054)?.['values']()??[]]['filter'](_0x3d3997=>_0x3d3997!==_0x49ab8b);for(let _0x203e04 of _0x3fc2e5){let _0x24af1e={'unitID':_0x32c054,'memberID':_0x49ab8b['member']['memberID'],'selection':_0x44a892['selection']};try{await this['_middleware']['run']('sendPresence',{'session':_0x49ab8b['session'],'unitID':_0x32c054,'payload':_0x24af1e,'customData':_0x53bb57,'targetMemberID':_0x203e04['member']['memberID']},()=>void 0x0);}catch{continue;}typeof _0x24af1e['selection']=='string'&&await this['_safeSend'](_0x203e04['connection'],d(_0x32c054,{'unitID':_0x32c054,'memberID':_0x49ab8b['member']['memberID'],'selection':_0x24af1e['selection']}));}}async['_handleNewChanges'](_0x4fcd18,_0x2ac2cd,_0x1463e9){let _0xb04559=await _0x4fcd18['readJson']();if(S(_0xb04559),_0xb04559['unitID']!==_0x2ac2cd||_0xb04559['type']!==_0x1463e9||_0xb04559['changeset']?.['unitID']!==_0x2ac2cd||_0xb04559['changeset']['type']!==_0x1463e9)throw new t['CollabError']('INVALID_REQUEST','Route,\x20request\x20and\x20changeset\x20identity\x20must\x20match');let _0x3e33e5=this['_bindingsByMember']['get'](_0xb04559['memberID']);if(!_0x3e33e5||_0x3e33e5['session']['userID']!==_0x4fcd18['userID'])throw new t['CollabError']('PERMISSION_DENIED','memberID\x20does\x20not\x20belong\x20to\x20the\x20authenticated\x20user');if(!_0x3e33e5['joinedUnitIDs']['has'](_0x2ac2cd))throw new t['CollabError']('PERMISSION_DENIED','Session\x20has\x20not\x20joined\x20this\x20unit');let _0x574035=await this['_service']['submitChangeset']({'changeset':_0xb04559['changeset']},{'userID':_0x4fcd18['userID'],'memberID':_0x3e33e5['session']['memberID'],'customData':_0x4fcd18['customData']});if(_0x574035['status']==='already-committed')await this['_safeSend'](_0x3e33e5['connection'],f(_0x2ac2cd,i['CHANGESET_ACK'],_0x574035['changeset']));else{if(_0x574035['status']==='rejected'){let _0x225e7f=_0x574035['error']['code']==='PERMISSION_DENIED'||_0x574035['error']['code']==='UNAUTHENTICATED'?i['PERMISSION_REJ']:i['CHANGESET_REJ'];await this['_safeSend'](_0x3e33e5['connection'],f(_0x2ac2cd,_0x225e7f,this['_trustedClientChangeset'](_0xb04559['changeset'],_0x3e33e5)));}else _0x574035['status']==='retry'&&await this['_safeSend'](_0x3e33e5['connection'],f(_0x2ac2cd,i['CHANGESET_SHOULD_RETRY'],this['_trustedClientChangeset'](_0xb04559['changeset'],_0x3e33e5)));}v(_0x4fcd18['response'],0xc8,{'error':h});}['_trustedClientChangeset'](_0x40b6f1,_0x14b829){return{..._0x40b6f1,'userID':_0x14b829['session']['userID'],'memberID':_0x14b829['session']['memberID']};}['_enqueueCommittedChangeset'](_0x1864fc,_0x3cf3be){if(this['_disposed'])return;let _0x212725=_0x1864fc['unitID'],_0x394b6c=[...this['_rooms']['get'](_0x212725)?.['keys']()??[]];this['_enqueueUnitOutbound'](_0x212725,async()=>{for(let _0x1dbd00 of _0x394b6c){let _0x554ec7=this['_bindingsByMember']['get'](_0x1dbd00);if(!_0x554ec7?.['joinedUnitIDs']['has'](_0x212725))continue;let _0x5425fd=_0x1dbd00===_0x3cf3be?i['CHANGESET_ACK']:i['NEW_CHANGESETS'];await this['_safeSend'](_0x554ec7['connection'],f(_0x212725,_0x5425fd,_0x1864fc));}});}['_evictUnitRoom'](_0x55676c){let _0x5a40ec=this['_rooms']['get'](_0x55676c);if(_0x5a40ec){this['_rooms']['delete'](_0x55676c);for(let _0x1f9a5f of _0x5a40ec['values']())_0x1f9a5f['joinedUnitIDs']['delete'](_0x55676c);}}['_enqueueUnitOutbound'](_0x3f9afc,_0x12b8a8){let _0x5aa25b=(this['_outboundQueues']['get'](_0x3f9afc)??Promise['resolve']())['catch'](()=>void 0x0)['then'](_0x12b8a8);return this['_outboundQueues']['set'](_0x3f9afc,_0x5aa25b),_0x5aa25b['finally'](()=>{this['_outboundQueues']['get'](_0x3f9afc)===_0x5aa25b&&this['_outboundQueues']['delete'](_0x3f9afc);}),_0x5aa25b;}async['_disconnectConnection'](_0x182dc2,_0x50965c){let _0xbc39bc=this['_bindingsByConnection']['get'](_0x182dc2['id']);_0xbc39bc&&await this['_disconnectBinding'](_0xbc39bc,_0x50965c);}async['_disconnectBinding'](_0x4ccf3c,_0x554404){this['_bindingsByConnection']['delete'](_0x4ccf3c['connection']['id']),this['_bindingsByMember']['delete'](_0x4ccf3c['member']['memberID']);let _0x203817=[..._0x4ccf3c['joinedUnitIDs']];for(let _0x5c035c of _0x203817)await this['_leaveUnit'](_0x4ccf3c,_0x5c035c,_0x554404);}async['_leaveUnit'](_0x27af92,_0x2c57b5,_0x9c6593){if(!_0x27af92['joinedUnitIDs']['delete'](_0x2c57b5))return!0x1;let _0x589100=this['_rooms']['get'](_0x2c57b5);return _0x589100?.['delete'](_0x27af92['member']['memberID']),_0x589100?.['size']===0x0&&this['_rooms']['delete'](_0x2c57b5),await this['_broadcastToRoom'](_0x2c57b5,u(_0x2c57b5,{'memberID':_0x27af92['member']['memberID'],'name':_0x27af92['member']['name']}),_0x27af92['member']['memberID']),await this['_emit']('memberLeftUnit',{'session':_0x27af92['session'],'unitID':_0x2c57b5,'reason':_0x9c6593}),!0x0;}async['_broadcastToRoom'](_0x515cc0,_0x170d1f,_0x4e2959){let _0x45b478=[...this['_rooms']['get'](_0x515cc0)?.['values']()??[]];await Promise['allSettled'](_0x45b478['filter'](_0x254379=>_0x254379['member']['memberID']!==_0x4e2959)['map'](_0x5a710d=>this['_safeSend'](_0x5a710d['connection'],_0x170d1f)));}async['_safeSend'](_0x331b1c,_0x311543){try{await _0x331b1c['send'](JSON['stringify'](_0x311543));}catch{}}async['_emit'](_0x6fd9e4,_0x38c738){let _0x5c9b54=[...this['_listeners']['get'](_0x6fd9e4)??[]];for(let _0xdca2a5 of _0x5c9b54)try{await _0xdca2a5(_0x38c738);}catch{}}['_assertRunning'](){if(this['_disposed'])throw Error('UniverCollabEndpoint\x20is\x20disposed');}['_assertJoinable'](_0x2c1c4f){if(this['_deletedUnitIDs']['has'](_0x2c1c4f))throw new t['CollabError']('UNIT_NOT_FOUND','Unit\x20has\x20been\x20deleted');}};exports['MemorySessionTicketStore']=y,exports['UniverCollabEndpoint']=E;
package/dist/index.d.ts CHANGED
@@ -18,7 +18,7 @@ declare class UniverCollabEndpoint implements NodeTransportEndpoint, ITrustedUni
18
18
  private readonly _serviceSubscriptions;
19
19
  private readonly _deletedUnitIDs;
20
20
  private _disposed;
21
- constructor(_service: IUniverCollabService, options?: UniverCollabEndpointOptions);
21
+ constructor(_service: Omit<IUniverCollabService, "dbAdapter">, options?: UniverCollabEndpointOptions);
22
22
  use<K extends EndpointMiddlewareAction>(action: K, middleware: EndpointMiddlewareMap[K]): Disposable;
23
23
  on<K extends keyof EndpointEventMap>(event: K, listener: EndpointListener<K>): Disposable;
24
24
  findJoinedSession(input: {
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- const _0x5e93f8=_0x4580;function _0x5e5a(){const _0x536f81=['1807596rXamho','139050uokViQ','12148lBsInr','48pTpixS','16ktKPRq','1381960VTPtBS','30298uiaZzc','1071333vIKGUW','955qIaSYF','UniverCollabEndpoint','4061454fqphrI'];_0x5e5a=function(){return _0x536f81;};return _0x5e5a();}function _0x4580(_0x530e26,_0x57fd74){_0x530e26=_0x530e26-0x181;const _0x5e5ac4=_0x5e5a();let _0x4580b7=_0x5e5ac4[_0x530e26];return _0x4580b7;}(function(_0xedc423,_0x4085f4){const _0x472a3a=_0x4580,_0xa57898=_0xedc423();while(!![]){try{const _0x3f46c4=parseInt(_0x472a3a(0x186))/0x1+-parseInt(_0x472a3a(0x18b))/0x2*(-parseInt(_0x472a3a(0x188))/0x3)+-parseInt(_0x472a3a(0x187))/0x4*(-parseInt(_0x472a3a(0x182))/0x5)+-parseInt(_0x472a3a(0x184))/0x6+-parseInt(_0x472a3a(0x185))/0x7+parseInt(_0x472a3a(0x189))/0x8*(parseInt(_0x472a3a(0x181))/0x9)+parseInt(_0x472a3a(0x18a))/0xa;if(_0x3f46c4===_0x4085f4)break;else _0xa57898['push'](_0xa57898['shift']());}catch(_0x9bf7aa){_0xa57898['push'](_0xa57898['shift']());}}}(_0x5e5a,0x624ca));import _0x14dd0f from'./index.cjs';const facadeExport0=_0x14dd0f['MemorySessionTicketStore'],facadeExport1=_0x14dd0f[_0x5e93f8(0x183)];export{facadeExport0 as MemorySessionTicketStore,facadeExport1 as UniverCollabEndpoint};
1
+ const _0x18e651=_0x59d3;(function(_0x412547,_0x41f397){const _0x2116f3=_0x59d3,_0x8562a6=_0x412547();while(!![]){try{const _0x2d1cf2=-parseInt(_0x2116f3(0xc3))/0x1+parseInt(_0x2116f3(0xc9))/0x2*(-parseInt(_0x2116f3(0xc8))/0x3)+parseInt(_0x2116f3(0xbf))/0x4+parseInt(_0x2116f3(0xc2))/0x5*(parseInt(_0x2116f3(0xca))/0x6)+-parseInt(_0x2116f3(0xc4))/0x7*(parseInt(_0x2116f3(0xc7))/0x8)+parseInt(_0x2116f3(0xc5))/0x9+parseInt(_0x2116f3(0xc1))/0xa*(parseInt(_0x2116f3(0xc0))/0xb);if(_0x2d1cf2===_0x41f397)break;else _0x8562a6['push'](_0x8562a6['shift']());}catch(_0x2fffa9){_0x8562a6['push'](_0x8562a6['shift']());}}}(_0x2ff8,0xbaf87));function _0x2ff8(){const _0x9cb722=['30ATPPXR','935TyeEuk','275887fKfHhj','258986UqGzIW','4330836bZxCWf','MemorySessionTicketStore','96ligVNG','165VmVyZA','9678hIlrSv','34122tzXDnl','5728QonoDH','754358dRoeOY'];_0x2ff8=function(){return _0x9cb722;};return _0x2ff8();}import _0x3639f9 from'./index.cjs';const facadeExport0=_0x3639f9[_0x18e651(0xc6)],facadeExport1=_0x3639f9['UniverCollabEndpoint'];function _0x59d3(_0x42ae56,_0x4ca965){_0x42ae56=_0x42ae56-0xbf;const _0x2ff8cc=_0x2ff8();let _0x59d3c9=_0x2ff8cc[_0x42ae56];return _0x59d3c9;}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.0-rc.0",
4
+ "version": "1.0.0",
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.0-rc.0",
20
- "@univerjs-pro/collaboration-transport-node": "1.0.0-rc.0",
21
- "@univerjs/protocol": "1.0.0-rc.0"
19
+ "@univerjs-pro/collaboration-service": "1.0.0",
20
+ "@univerjs-pro/collaboration-transport-node": "1.0.0",
21
+ "@univerjs/protocol": "1.0.0"
22
22
  }
23
23
  }