@univerjs-pro/collaboration-endpoint 1.0.2 → 1.0.3

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(_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;
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(_0xf8fb1f,_0x5efa02,_0x13ce21=''){return{'cmd':_0xf8fb1f,'code':n['CmdRspCode']['OK'],'reason':'success','routeKey':_0x13ce21,'infoRsp':{'memberID':_0x5efa02}};}function o(_0x4ab88e,_0x596e76,_0x4e48ed,_0x1e5a66){return{'cmd':n['CombCmd']['JOIN'],'code':_0x596e76,'reason':_0x1e5a66,'routeKey':_0x4ab88e,'joinRsp':{'roomInfos':_0x4e48ed}};}function s(_0x2e0c30){return{'memberID':_0x2e0c30['memberID'],'userID':_0x2e0c30['userID'],'name':_0x2e0c30['name'],..._0x2e0c30['avatar']===void 0x0?{}:{'avatar':_0x2e0c30['avatar']}};}function c(_0x459903,_0x19d640){return{'cmd':n['CombCmd']['RECV'],'code':n['CmdRspCode']['OK'],'reason':'success','routeKey':_0x459903,'collaMsg':_0x19d640};}function l(_0x2b79ae,_0x41ba1b){return c(_0x2b79ae,{'eventID':i['USERS_ENTER'],'joinEvent':{..._0x41ba1b,'avatar':_0x41ba1b['avatar']??''}});}function u(_0x466fd8,_0x291d69){return c(_0x466fd8,{'eventID':i['USERS_LEAVE'],'leaveEvent':_0x291d69});}function d(_0x188f8a,_0x291cba){return c(_0x188f8a,{'eventID':i['UPDATE_CURSOR'],'updateCursorEvent':_0x291cba});}function f(_0x594135,_0x82cf0,_0x4adbe3){let _0x2263d2={[i['CHANGESET_ACK']]:'csAckEvent',[i['CHANGESET_REJ']]:'csRejEvent',[i['CHANGESET_SHOULD_RETRY']]:'csShouldRetryEvent',[i['NEW_CHANGESETS']]:'newCsEvent',[i['PERMISSION_REJ']]:'permissionRejEvent'}[_0x82cf0];return c(_0x594135,{'eventID':_0x82cf0,[_0x2263d2]:{'cs':_0x4adbe3}});}function p(_0x5a167d,_0x3f93b5,_0x324420){return c(_0x5a167d,{..._0x324420,'eventID':_0x3f93b5});}var m=class{['_middlewares']=new Map();['use'](_0x1ea128,_0x316402){let _0x26b341=this['_middlewares']['get'](_0x1ea128)??[],_0x17c9d0=_0x316402;_0x26b341['push'](_0x17c9d0),this['_middlewares']['set'](_0x1ea128,_0x26b341);let _0x28bed7=!0x1;return{'dispose':()=>{if(_0x28bed7)return;_0x28bed7=!0x0;let _0x4bb3fe=_0x26b341['indexOf'](_0x17c9d0);_0x4bb3fe>=0x0&&_0x26b341['splice'](_0x4bb3fe,0x1);}};}async['run'](_0x4ebd90,_0x12dfb8,_0x22c10e){let _0x4a1a1e=[...this['_middlewares']['get'](_0x4ebd90)??[]],_0x5b2dca=async _0x2bc63f=>{let _0x5cfc08=_0x4a1a1e[_0x2bc63f];if(!_0x5cfc08){await _0x22c10e();return;}let _0x1d353c=!0x1,_0x2cf82e,_0x315744=()=>{if(_0x1d353c)throw Error('Endpoint\x20middleware\x20for\x20'+String(_0x4ebd90)+'\x20called\x20next()\x20more\x20than\x20once');return _0x1d353c=!0x0,_0x2cf82e=_0x5b2dca(_0x2bc63f+0x1),_0x2cf82e;};try{await _0x5cfc08(_0x12dfb8,_0x315744);}catch(_0x23bf88){if(_0x2cf82e)try{await _0x2cf82e;}catch{}throw _0x23bf88;}if(!_0x1d353c)throw Error('Endpoint\x20middleware\x20for\x20'+String(_0x4ebd90)+'\x20completed\x20without\x20calling\x20next()');await _0x2cf82e;};await _0x5b2dca(0x0);}['clear'](){this['_middlewares']['clear']();}},h={'code':n['ErrorCode']['OK'],'message':''};function g(_0x2a7726,_0x1c351b){if(!/^-?\d+$/['test'](_0x2a7726))throw new t['CollabError']('INVALID_REQUEST',_0x1c351b+'\x20must\x20be\x20an\x20integer');let _0x40c0fb=Number(_0x2a7726);if(!Number['isSafeInteger'](_0x40c0fb))throw new t['CollabError']('INVALID_REQUEST',_0x1c351b+'\x20is\x20outside\x20the\x20safe\x20integer\x20range');return _0x40c0fb;}function _(_0x69c83e){if(_0x69c83e instanceof r['NodeTransportError'])return _0x69c83e['code']==='REQUEST_BODY_TOO_LARGE'?{'status':0x19d,'error':{'code':n['ErrorCode']['INVALID_ARGUMENT'],'message':_0x69c83e['message']}}:_0x69c83e['code']==='INVALID_JSON'||_0x69c83e['code']==='REQUEST_ABORTED'?{'status':0x190,'error':{'code':n['ErrorCode']['INVALID_ARGUMENT'],'message':_0x69c83e['message']}}:{'status':0x1f7,'error':{'code':n['ErrorCode']['INTERNAL_ERROR'],'message':'Transport\x20unavailable'}};if(!(_0x69c83e instanceof t['CollabError']))return{'status':0x1f4,'error':{'code':n['ErrorCode']['INTERNAL_ERROR'],'message':'Internal\x20server\x20error'}};let _0x204a86={'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']}}[_0x69c83e['code']];return{'status':_0x204a86['status'],'error':{'code':_0x204a86['code'],'message':_0x69c83e['message']}};}function v(_0x78ce74,_0x39b652,_0x3cd94d){_0x78ce74['writableEnded']||_0x78ce74['destroyed']||(_0x78ce74['statusCode']=_0x39b652,_0x78ce74['setHeader']('content-type','application/json;\x20charset=utf-8'),_0x78ce74['end'](JSON['stringify'](_0x3cd94d,(_0x5b7647,_0x4dde24)=>_0x4dde24 instanceof Uint8Array?Buffer['from'](_0x4dde24)['toString']('base64'):_0x4dde24)));}var y=class{['_tickets']=new Map();['_disposed']=!0x1;async['issue'](_0x1113bc,_0x158028){if(this['_disposed'])throw Error('Session\x20ticket\x20store\x20is\x20disposed');if(!Number['isSafeInteger'](_0x158028)||_0x158028<=0x0)throw TypeError('Session\x20ticket\x20TTL\x20must\x20be\x20a\x20positive\x20safe\x20integer');this['_purgeExpired']();let _0x1d1f2c;do _0x1d1f2c=(0x0,e['randomBytes'])(0x20)['toString']('base64url');while(this['_tickets']['has'](_0x1d1f2c));return this['_tickets']['set'](_0x1d1f2c,{'record':_0x1113bc,'expiresAt':Date['now']()+_0x158028}),_0x1d1f2c;}async['consume'](_0x57814a){if(this['_disposed']||!_0x57814a)return null;let _0x5a4e19=this['_tickets']['get'](_0x57814a);return!_0x5a4e19||(this['_tickets']['delete'](_0x57814a),_0x5a4e19['expiresAt']<=Date['now']())?null:_0x5a4e19['record'];}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_tickets']['clear']());}['_purgeExpired'](){let _0x3d4b2b=Date['now']();for(let [_0x2ca9e5,_0xbe5fbe]of this['_tickets'])_0xbe5fbe['expiresAt']<=_0x3d4b2b&&this['_tickets']['delete'](_0x2ca9e5);}},b=0x5*0xea60;function x(_0x1b601b){if(!_0x1b601b['startsWith']('/')||_0x1b601b==='/'||_0x1b601b['endsWith']('/')||_0x1b601b['includes']('?')||_0x1b601b['includes']('#'))throw TypeError('protocolBasePath\x20must\x20be\x20an\x20absolute\x20path\x20without\x20a\x20trailing\x20slash');return _0x1b601b;}function S(_0x4feb2d){if(!_0x4feb2d||typeof _0x4feb2d!='object')throw new t['CollabError']('INVALID_REQUEST','Request\x20body\x20must\x20be\x20an\x20object');let _0xd75b72=_0x4feb2d;if(typeof _0xd75b72['unitID']!='string'||typeof _0xd75b72['memberID']!='string'||!Number['isSafeInteger'](_0xd75b72['type'])||!_0xd75b72['changeset']||typeof _0xd75b72['changeset']!='object')throw new t['CollabError']('INVALID_REQUEST','Invalid\x20new\x20changes\x20request');}function C(_0x4ad70b){if(!Array['isArray'](_0x4ad70b)||_0x4ad70b['length']===0x0||_0x4ad70b['some'](_0x44d8b4=>typeof _0x44d8b4!='string'||_0x44d8b4['trim']()['length']===0x0))throw new t['CollabError']('INVALID_REQUEST','unitIds\x20must\x20be\x20a\x20non-empty\x20string\x20array');}function w(_0x4cc0c6){let _0x38f834=_0x4cc0c6['getAll']('unitIds');C(_0x38f834);let _0x1c93d5=_0x4cc0c6['getAll']('hardDelete');if(_0x1c93d5['length']>0x1||_0x1c93d5['length']===0x1&&_0x1c93d5[0x0]!=='true'&&_0x1c93d5[0x0]!=='false')throw new t['CollabError']('INVALID_REQUEST','hardDelete\x20must\x20be\x20true\x20or\x20false');return{'unitIds':_0x38f834,'hardDelete':_0x1c93d5[0x0]==='true'};}function T(_0x1304bc){if(!_0x1304bc||typeof _0x1304bc!='object')throw new t['CollabError']('INVALID_REQUEST','Request\x20body\x20must\x20be\x20an\x20object');C(_0x1304bc['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(_0x511db8,_0x48da6d={}){if(this['_service']=_0x511db8,!_0x511db8)throw TypeError('UniverCollabEndpoint\x20requires\x20a\x20service');if(this['_ticketStore']=_0x48da6d['ticketStore']??new y(),this['_ownsTicketStore']=_0x48da6d['ticketStore']===void 0x0,this['_ticketTtlMs']=_0x48da6d['sessionTicketTtlMs']??b,!Number['isSafeInteger'](this['_ticketTtlMs'])||this['_ticketTtlMs']<=0x0)throw TypeError('sessionTicketTtlMs\x20must\x20be\x20a\x20positive\x20safe\x20integer');this['_protocolBasePath']=x(_0x48da6d['protocolBasePath']??'/universer-api'),this['_serviceSubscriptions']=[this['_service']['on']('changesetCommitted',_0xd3e744=>{this['_enqueueCommittedChangeset'](_0xd3e744['changeset'],_0xd3e744['memberID']);}),this['_service']['on']('unitsDeleted',_0x1dd799=>{for(let _0x2ca482 of _0x1dd799['request']['unitIDs'])this['_deletedUnitIDs']['add'](_0x2ca482);for(let _0x34ebb9 of _0x1dd799['request']['unitIDs'])this['_enqueueUnitOutbound'](_0x34ebb9,async()=>{this['_evictUnitRoom'](_0x34ebb9);});}),this['_service']['on']('unitsRecovered',async _0x3f1423=>{await Promise['all'](_0x3f1423['request']['unitIDs']['map'](_0x4b88d8=>this['_enqueueUnitOutbound'](_0x4b88d8,async()=>{this['_deletedUnitIDs']['delete'](_0x4b88d8);})));})];}['use'](_0x560b22,_0x225edc){return this['_assertRunning'](),this['_middleware']['use'](_0x560b22,_0x225edc);}['on'](_0x56d951,_0x374b3b){this['_assertRunning']();let _0x4d0995=this['_listeners']['get'](_0x56d951)??new Set(),_0x43d16a=_0x374b3b;_0x4d0995['add'](_0x43d16a),this['_listeners']['set'](_0x56d951,_0x4d0995);let _0x292765=!0x1;return{'dispose':()=>{_0x292765||(_0x292765=!0x0,_0x4d0995['delete'](_0x43d16a));}};}['findJoinedSession'](_0x3f19ad){if(this['_disposed'])return null;let _0x90953c=this['_bindingsByMember']['get'](_0x3f19ad['memberID']);return!_0x90953c||_0x90953c['session']['userID']!==_0x3f19ad['authenticatedUserID']||!_0x90953c['joinedUnitIDs']['has'](_0x3f19ad['unitID'])?null:_0x90953c['session'];}['findJoinedSessionByUser'](_0x459c79){if(this['_disposed'])return null;for(let _0x54da80 of this['_rooms']['get'](_0x459c79['unitID'])?.['values']()??[])if(_0x54da80['session']['userID']===_0x459c79['authenticatedUserID'])return _0x54da80['session'];return null;}async['invalidateUnitSessions'](_0x1b2b23){if(this['_assertRunning'](),typeof _0x1b2b23['unitID']!='string'||!_0x1b2b23['unitID'])throw TypeError('unitID\x20must\x20be\x20a\x20non-empty\x20string');if(_0x1b2b23['userID']!==void 0x0&&(typeof _0x1b2b23['userID']!='string'||!_0x1b2b23['userID']))throw TypeError('userID\x20must\x20be\x20a\x20non-empty\x20string\x20when\x20provided');await this['_enqueueUnitOutbound'](_0x1b2b23['unitID'],async()=>{let _0x3d097a=[...this['_rooms']['get'](_0x1b2b23['unitID'])?.['values']()??[]]['filter'](_0xcd0bf3=>_0x1b2b23['userID']===void 0x0||_0xcd0bf3['session']['userID']===_0x1b2b23['userID']);for(let _0x5edf8b of _0x3d097a)_0x5edf8b['connection']['close'](0xfa3,'Unit\x20access\x20changed'),await this['_disconnectBinding'](_0x5edf8b,'session-evicted');});}async['publishTrustedUnitEvent'](_0x226261){this['_assertRunning']();let _0x14fe4c=[...this['_rooms']['get'](_0x226261['unitID'])?.['keys']()??[]],_0x33556a=this['_bindingsByMember']['get'](_0x226261['memberID'])?.['joinedUnitIDs']['has'](_0x226261['unitID'])?_0x226261['memberID']:void 0x0,_0x225b5b=p(_0x226261['unitID'],_0x226261['eventID'],_0x226261['data']);this['_enqueueUnitOutbound'](_0x226261['unitID'],async()=>{for(let _0x2e9a10 of _0x14fe4c){if(_0x2e9a10===_0x33556a)continue;let _0x501adb=this['_bindingsByMember']['get'](_0x2e9a10);_0x501adb?.['joinedUnitIDs']['has'](_0x226261['unitID'])&&await this['_safeSend'](_0x501adb['connection'],_0x225b5b);}});}['register'](_0x2700ba){this['_assertRunning']();let _0x3a1761=this['_protocolBasePath'],_0x561924=_0x4df195=>_0x1e9a52=>this['_handleHttp'](_0x1e9a52,_0x4df195);_0x2700ba['get'](_0x3a1761+'/user/session-ticket',_0x561924('ticket')),_0x2700ba['delete'](_0x3a1761+'/snapshot/-/units',_0x561924('delete-units')),_0x2700ba['post'](_0x3a1761+'/snapshot/-/units/recover',_0x561924('recover-units')),_0x2700ba['post'](_0x3a1761+'/comb/:type/unit/:unitID/new_changes',_0x561924('new-changes')),_0x2700ba['get'](_0x3a1761+'/snapshot/block/:type/unit/:unitID/block/:blockID',_0x561924('deserialized-block')),_0x2700ba['get'](_0x3a1761+'/snapshot/:type/unit/:unitID/rev/:revision',_0x561924('unit')),_0x2700ba['get'](_0x3a1761+'/snapshot/:type/unit/:unitID/block/:blockID',_0x561924('block')),_0x2700ba['get'](_0x3a1761+'/snapshot/:type/unit/:unitID/fetchmissing',_0x561924('fetch-missing')),_0x2700ba['upgrade'](_0x3a1761+'/comb/connect',_0x1fbd65=>this['_handleUpgrade'](_0x1fbd65));}async['_handleUpgrade'](_0x310af8){if(this['_disposed']){_0x310af8['reject'](0x1f7,'Endpoint\x20is\x20disposed');return;}let _0x865587=new URL(_0x310af8['incomingMessage']['url']??'/','http://localhost'),_0x5f5550=await this['_ticketStore']['consume'](_0x865587['searchParams']['get']('sessionTicket')??'');if(!_0x5f5550){_0x310af8['reject'](0x191,'Invalid\x20or\x20expired\x20session\x20ticket');return;}_0x310af8['accept']({'open':({connection:_0x334b75})=>this['_openConnection'](_0x5f5550,_0x334b75),'message':_0x22016c=>this['_handleMessage'](_0x22016c),'close':({connection:_0x11ccdf})=>this['_disconnectConnection'](_0x11ccdf,'connection-closed')});}async['dispose'](){if(this['_disposed'])return;this['_disposed']=!0x0;for(let _0x149de5 of this['_serviceSubscriptions'])_0x149de5['dispose']();await Promise['allSettled']([...this['_outboundQueues']['values']()]);let _0x6fadc6=[...this['_bindingsByConnection']['values']()];for(let _0x120553 of _0x6fadc6)await this['_disconnectBinding'](_0x120553,'endpoint-disposed'),_0x120553['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'](_0x36aa2a,_0x4cd103){try{this['_assertRunning']();let _0x292ff7=new URL(_0x36aa2a['incomingMessage']['url']??'/','http://localhost');if(!_0x36aa2a['userID'])throw new t['CollabError']('UNAUTHENTICATED','HTTP\x20user\x20is\x20not\x20authenticated');if(_0x4cd103==='ticket'){let _0x283d2b=await this['_ticketStore']['issue']({'userID':_0x36aa2a['userID'],'customData':_0x36aa2a['customData']},this['_ticketTtlMs']);v(_0x36aa2a['response'],0xc8,{'error':h,'ticket':_0x283d2b});return;}let _0x295c67={'userID':_0x36aa2a['userID'],'customData':_0x36aa2a['customData']};if(_0x4cd103==='delete-units'){let _0x5043c5=w(_0x292ff7['searchParams']);await this['_service']['deleteUnits']({'unitIDs':_0x5043c5['unitIds'],'hardDelete':_0x5043c5['hardDelete']},_0x295c67),v(_0x36aa2a['response'],0xc8,{'error':h});return;}if(_0x4cd103==='recover-units'){let _0x57a720=await _0x36aa2a['readJson']();T(_0x57a720),await this['_service']['recoverUnits']({'unitIDs':_0x57a720['unitIds']},_0x295c67),v(_0x36aa2a['response'],0xc8,{'error':h});return;}let _0x5f2a98=g(_0x36aa2a['params']['type'],'type'),_0x58b722=_0x36aa2a['params']['unitID'];if(_0x4cd103==='new-changes'){await this['_handleNewChanges'](_0x36aa2a,_0x58b722,_0x5f2a98);return;}switch(_0x4cd103){case'unit':{let _0x5dadec=g(_0x36aa2a['params']['revision'],'revision'),_0x43ac5b=await this['_service']['getUnitLoadData']({'unitID':_0x58b722,'type':_0x5f2a98,'revision':_0x5dadec},_0x295c67);v(_0x36aa2a['response'],0xc8,{'error':h,'snapshot':_0x43ac5b['snapshot'],'changesets':_0x43ac5b['changesets']});return;}case'block':case'deserialized-block':{let _0x4621a0=await this['_service']['getSheetBlock']({'unitID':_0x58b722,'type':_0x5f2a98,'blockID':_0x36aa2a['params']['blockID']},_0x295c67);if(!_0x4621a0['block'])throw new t['CollabError']('UNIT_NOT_FOUND','Sheet\x20block\x20was\x20not\x20found');let _0x42998f=_0x4cd103==='deserialized-block'?{..._0x4621a0['block'],'data':JSON['parse'](new TextDecoder()['decode'](_0x4621a0['block']['data']))}:_0x4621a0['block'];v(_0x36aa2a['response'],0xc8,{'error':h,'block':_0x42998f});return;}case'fetch-missing':{let _0x4d6bba=g(_0x292ff7['searchParams']['get']('from')??'','from'),_0x49f187=g(_0x292ff7['searchParams']['get']('to')??'','to'),_0x5339d7=await this['_service']['getChangesets']({'unitID':_0x58b722,'type':_0x5f2a98,'from':_0x4d6bba,'to':_0x49f187},_0x295c67);v(_0x36aa2a['response'],0xc8,{'error':h,'changesets':_0x5339d7['changesets']});return;}}}catch(_0x208075){let _0xea5489=_(_0x208075 instanceof SyntaxError?new t['CollabError']('INTERNAL_ERROR','Stored\x20sheet\x20block\x20is\x20not\x20valid\x20JSON',{'cause':_0x208075}):_0x208075);v(_0x36aa2a['response'],_0xea5489['status'],{'error':_0xea5489['error']});}}async['_openConnection'](_0x39d8d7,_0x426086){try{let _0x51feb3=(0x0,e['randomUUID'])(),_0x23a6f7={'memberID':_0x51feb3,'userID':_0x39d8d7['userID'],'customData':_0x39d8d7['customData']},_0x1d4670={'memberID':_0x51feb3,'userID':_0x39d8d7['userID'],'name':_0x39d8d7['userID']},_0x54ff8f={'connection':_0x426086,'session':_0x23a6f7,'member':_0x1d4670};await this['_middleware']['run']('connect',_0x54ff8f,()=>void 0x0);let _0x1b80ae={'connection':_0x426086,'session':_0x23a6f7,'member':_0x1d4670,'joinedUnitIDs':new Set()};this['_bindingsByConnection']['set'](_0x426086['id'],_0x1b80ae),this['_bindingsByMember']['set'](_0x51feb3,_0x1b80ae);}catch(_0x11e992){_0x426086['close'](_0x11e992 instanceof t['CollabError']?0x3f0:0x3f3,_0x11e992 instanceof t['CollabError']?'Connection\x20rejected':'Endpoint\x20failure');}}async['_handleMessage'](_0x4ed269){let _0x3c624e=this['_bindingsByConnection']['get'](_0x4ed269['connection']['id']);if(!_0x3c624e){_0x4ed269['connection']['close'](0x3f0,'WebSocket\x20Session\x20is\x20not\x20established');return;}if(typeof _0x4ed269['data']!='string'){_0x4ed269['connection']['close'](0x3eb,'Comb\x20messages\x20must\x20be\x20JSON\x20text');return;}let _0x1f2169;try{let _0x413ab7=JSON['parse'](_0x4ed269['data']);if(!_0x413ab7||typeof _0x413ab7!='object')throw Error('invalid');_0x1f2169=_0x413ab7;}catch{_0x4ed269['connection']['close'](0x3eb,'Invalid\x20Comb\x20JSON\x20message');return;}let _0x5b0e91=typeof _0x1f2169['routeKey']=='string'?_0x1f2169['routeKey']:'';switch(_0x1f2169['cmd']){case n['CombCmd']['HELLO']:case n['CombCmd']['HEARTBEAT']:await _0x4ed269['connection']['send'](JSON['stringify'](a(_0x1f2169['cmd'],_0x3c624e['member']['memberID'],_0x5b0e91)));return;case n['CombCmd']['JOIN']:await this['_handleJoin'](_0x3c624e,_0x1f2169,_0x5b0e91);return;case n['CombCmd']['LEAVE']:await this['_handleLeave'](_0x3c624e,_0x1f2169,_0x5b0e91);return;case n['CombCmd']['INGEST']:if(_0x1f2169['collaMsg']?.['eventID']!==i['UPDATE_CURSOR'])return;await this['_handlePresence'](_0x3c624e,_0x1f2169,_0x4ed269['customData']);return;default:return;}}async['_handleJoin'](_0x14c58e,_0x2c7624,_0x5543a0){let _0x22487e=_0x2c7624['joinReq']?.['rooms'],_0x36225d=_0x22487e?.['length']?_0x22487e['map'](_0x543092=>_0x543092['roomID']):_0x5543a0?[_0x5543a0]:[];if(_0x36225d['length']===0x0||_0x36225d['some'](_0x2fd942=>typeof _0x2fd942!='string'||!_0x2fd942)){await _0x14c58e['connection']['send'](JSON['stringify'](o(_0x5543a0,n['CmdRspCode']['FAIL'],{},'Invalid\x20JOIN\x20request')));return;}let _0x1dbb00=[...new Set(_0x36225d)],_0x25ac87=_0x1dbb00['filter'](_0x275330=>!_0x14c58e['joinedUnitIDs']['has'](_0x275330));try{for(let _0x32f5be of _0x1dbb00)this['_assertJoinable'](_0x32f5be);for(let _0x521e73 of _0x25ac87)await this['_middleware']['run']('joinUnit',{'session':_0x14c58e['session'],'unitID':_0x521e73},()=>void 0x0);for(let _0x35f0e5 of _0x1dbb00)this['_assertJoinable'](_0x35f0e5);}catch(_0xb20033){let _0x18fc4a=_0xb20033 instanceof t['CollabError']&&_0xb20033['code']==='UNIT_NOT_FOUND'?n['CmdRspCode']['JOIN_ROOM_NOT_EXISTS']:_0xb20033 instanceof t['CollabError']&&(_0xb20033['code']==='PERMISSION_DENIED'||_0xb20033['code']==='UNAUTHENTICATED')?n['CmdRspCode']['JOIN_ROOM_PERMISSION_DENIED']:n['CmdRspCode']['FAIL'];await _0x14c58e['connection']['send'](JSON['stringify'](o(_0x5543a0||_0x1dbb00[0x0],_0x18fc4a,{},_0xb20033 instanceof t['CollabError']?_0xb20033['message']:'JOIN\x20failed')));return;}for(let _0x1f1cad of _0x25ac87){let _0x4567d9=this['_rooms']['get'](_0x1f1cad)??new Map();_0x4567d9['set'](_0x14c58e['member']['memberID'],_0x14c58e),this['_rooms']['set'](_0x1f1cad,_0x4567d9),_0x14c58e['joinedUnitIDs']['add'](_0x1f1cad);}let _0x502a64={};for(let _0x3b6e1a of _0x1dbb00)_0x502a64[_0x3b6e1a]={'roomID':_0x3b6e1a,'members':[...this['_rooms']['get'](_0x3b6e1a)?.['values']()??[]]['map'](_0x387350=>s(_0x387350['member']))};await _0x14c58e['connection']['send'](JSON['stringify'](o(_0x5543a0||_0x1dbb00[0x0],n['CmdRspCode']['OK'],_0x502a64,'success')));for(let _0x4c5dc8 of _0x25ac87)await this['_broadcastToRoom'](_0x4c5dc8,l(_0x4c5dc8,s(_0x14c58e['member'])),_0x14c58e['member']['memberID']);}async['_handleLeave'](_0x16d01b,_0x16eddd,_0x4332fc){let _0x35271a=typeof _0x16eddd['leaveReq']?.['roomID']=='string'?_0x16eddd['leaveReq']['roomID']:_0x4332fc;_0x35271a&&await this['_leaveUnit'](_0x16d01b,_0x35271a,'client-leave');}async['_handlePresence'](_0xfa7c68,_0x22aeb4,_0x49c0ce){let _0x550464=typeof _0x22aeb4['routeKey']=='string'?_0x22aeb4['routeKey']:'',_0x2e5841=_0x22aeb4['collaMsg']?.['updateCursorEvent']?.['selection'];if(!_0x550464||!_0xfa7c68['joinedUnitIDs']['has'](_0x550464)||typeof _0x2e5841!='string')return;let _0x169851={'unitID':_0x550464,'memberID':_0xfa7c68['member']['memberID'],'selection':_0x2e5841};try{await this['_middleware']['run']('receivePresence',{'session':_0xfa7c68['session'],'unitID':_0x550464,'payload':_0x169851,'customData':_0x49c0ce},()=>void 0x0);}catch(_0x42e556){if(_0x42e556 instanceof t['CollabError'])return;throw _0x42e556;}if(typeof _0x169851['selection']!='string')return;let _0xc5229b=[...this['_rooms']['get'](_0x550464)?.['values']()??[]]['filter'](_0x16f0eb=>_0x16f0eb!==_0xfa7c68);for(let _0x2cab20 of _0xc5229b){let _0x23f937={'unitID':_0x550464,'memberID':_0xfa7c68['member']['memberID'],'selection':_0x169851['selection']};try{await this['_middleware']['run']('sendPresence',{'session':_0xfa7c68['session'],'unitID':_0x550464,'payload':_0x23f937,'customData':_0x49c0ce,'targetMemberID':_0x2cab20['member']['memberID']},()=>void 0x0);}catch{continue;}typeof _0x23f937['selection']=='string'&&await this['_safeSend'](_0x2cab20['connection'],d(_0x550464,{'unitID':_0x550464,'memberID':_0xfa7c68['member']['memberID'],'selection':_0x23f937['selection']}));}}async['_handleNewChanges'](_0x47d474,_0x3418d1,_0x50f024){let _0x5b8d45=await _0x47d474['readJson']();if(S(_0x5b8d45),_0x5b8d45['unitID']!==_0x3418d1||_0x5b8d45['type']!==_0x50f024||_0x5b8d45['changeset']?.['unitID']!==_0x3418d1||_0x5b8d45['changeset']['type']!==_0x50f024)throw new t['CollabError']('INVALID_REQUEST','Route,\x20request\x20and\x20changeset\x20identity\x20must\x20match');let _0x1ca63a=this['_bindingsByMember']['get'](_0x5b8d45['memberID']);if(!_0x1ca63a||_0x1ca63a['session']['userID']!==_0x47d474['userID'])throw new t['CollabError']('PERMISSION_DENIED','memberID\x20does\x20not\x20belong\x20to\x20the\x20authenticated\x20user');if(!_0x1ca63a['joinedUnitIDs']['has'](_0x3418d1))throw new t['CollabError']('PERMISSION_DENIED','Session\x20has\x20not\x20joined\x20this\x20unit');let _0x49f125=await this['_service']['submitChangeset']({'changeset':_0x5b8d45['changeset']},{'userID':_0x47d474['userID'],'memberID':_0x1ca63a['session']['memberID'],'customData':_0x47d474['customData']});if(_0x49f125['status']==='already-committed')await this['_safeSend'](_0x1ca63a['connection'],f(_0x3418d1,i['CHANGESET_ACK'],_0x49f125['changeset']));else{if(_0x49f125['status']==='rejected'){let _0x1ef191=_0x49f125['error']['code']==='PERMISSION_DENIED'||_0x49f125['error']['code']==='UNAUTHENTICATED'?i['PERMISSION_REJ']:i['CHANGESET_REJ'];await this['_safeSend'](_0x1ca63a['connection'],f(_0x3418d1,_0x1ef191,this['_trustedClientChangeset'](_0x5b8d45['changeset'],_0x1ca63a)));}else _0x49f125['status']==='retry'&&await this['_safeSend'](_0x1ca63a['connection'],f(_0x3418d1,i['CHANGESET_SHOULD_RETRY'],this['_trustedClientChangeset'](_0x5b8d45['changeset'],_0x1ca63a)));}v(_0x47d474['response'],0xc8,{'error':h});}['_trustedClientChangeset'](_0x5dfa60,_0x3733f5){return{..._0x5dfa60,'userID':_0x3733f5['session']['userID'],'memberID':_0x3733f5['session']['memberID']};}['_enqueueCommittedChangeset'](_0xd7ab18,_0x382fb6){if(this['_disposed'])return;let _0xeeea55=_0xd7ab18['unitID'],_0x460d94=[...this['_rooms']['get'](_0xeeea55)?.['keys']()??[]];this['_enqueueUnitOutbound'](_0xeeea55,async()=>{for(let _0x2d14e5 of _0x460d94){let _0x284691=this['_bindingsByMember']['get'](_0x2d14e5);if(!_0x284691?.['joinedUnitIDs']['has'](_0xeeea55))continue;let _0x52d77f=_0x2d14e5===_0x382fb6?i['CHANGESET_ACK']:i['NEW_CHANGESETS'];await this['_safeSend'](_0x284691['connection'],f(_0xeeea55,_0x52d77f,_0xd7ab18));}});}['_evictUnitRoom'](_0x502f07){let _0x5c2e9e=this['_rooms']['get'](_0x502f07);if(_0x5c2e9e){this['_rooms']['delete'](_0x502f07);for(let _0x414347 of _0x5c2e9e['values']())_0x414347['joinedUnitIDs']['delete'](_0x502f07);}}['_enqueueUnitOutbound'](_0x28dc5f,_0x24def3){let _0x467dc1=(this['_outboundQueues']['get'](_0x28dc5f)??Promise['resolve']())['catch'](()=>void 0x0)['then'](_0x24def3);return this['_outboundQueues']['set'](_0x28dc5f,_0x467dc1),_0x467dc1['finally'](()=>{this['_outboundQueues']['get'](_0x28dc5f)===_0x467dc1&&this['_outboundQueues']['delete'](_0x28dc5f);}),_0x467dc1;}async['_disconnectConnection'](_0x3ddce2,_0x598686){let _0x1ae48c=this['_bindingsByConnection']['get'](_0x3ddce2['id']);_0x1ae48c&&await this['_disconnectBinding'](_0x1ae48c,_0x598686);}async['_disconnectBinding'](_0x1cd2f8,_0x1f5450){this['_bindingsByConnection']['delete'](_0x1cd2f8['connection']['id']),this['_bindingsByMember']['delete'](_0x1cd2f8['member']['memberID']);let _0x120bcd=[..._0x1cd2f8['joinedUnitIDs']];for(let _0x4f7db0 of _0x120bcd)await this['_leaveUnit'](_0x1cd2f8,_0x4f7db0,_0x1f5450);}async['_leaveUnit'](_0x55c8f2,_0x5e27f9,_0x276db1){if(!_0x55c8f2['joinedUnitIDs']['delete'](_0x5e27f9))return!0x1;let _0x3bf1c7=this['_rooms']['get'](_0x5e27f9);return _0x3bf1c7?.['delete'](_0x55c8f2['member']['memberID']),_0x3bf1c7?.['size']===0x0&&this['_rooms']['delete'](_0x5e27f9),await this['_broadcastToRoom'](_0x5e27f9,u(_0x5e27f9,{'memberID':_0x55c8f2['member']['memberID'],'name':_0x55c8f2['member']['name']}),_0x55c8f2['member']['memberID']),await this['_emit']('memberLeftUnit',{'session':_0x55c8f2['session'],'unitID':_0x5e27f9,'reason':_0x276db1}),!0x0;}async['_broadcastToRoom'](_0x234459,_0x56ba5e,_0xaab365){let _0x461509=[...this['_rooms']['get'](_0x234459)?.['values']()??[]];await Promise['allSettled'](_0x461509['filter'](_0x266d98=>_0x266d98['member']['memberID']!==_0xaab365)['map'](_0x11e9c5=>this['_safeSend'](_0x11e9c5['connection'],_0x56ba5e)));}async['_safeSend'](_0xd660e7,_0x4f160d){try{await _0xd660e7['send'](JSON['stringify'](_0x4f160d));}catch{}}async['_emit'](_0x39ee80,_0x2c91b6){let _0x425040=[...this['_listeners']['get'](_0x39ee80)??[]];for(let _0x20a219 of _0x425040)try{await _0x20a219(_0x2c91b6);}catch{}}['_assertRunning'](){if(this['_disposed'])throw Error('UniverCollabEndpoint\x20is\x20disposed');}['_assertJoinable'](_0x323228){if(this['_deletedUnitIDs']['has'](_0x323228))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
- 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};
1
+ function _0x4486(_0x4cab98,_0x1eccd5){_0x4cab98=_0x4cab98-0x124;const _0x1c4118=_0x1c41();let _0x448662=_0x1c4118[_0x4cab98];return _0x448662;}function _0x1c41(){const _0x1f8371=['3514000iOimXs','427470vDsDyp','24fRSJjz','UniverCollabEndpoint','6cNHlly','36880GtECny','222FOPAKd','1415281FeGprv','4473297AHjwbT','1088789DinAsO','35044840guIzny'];_0x1c41=function(){return _0x1f8371;};return _0x1c41();}const _0x4aa9f6=_0x4486;(function(_0x453439,_0x1008b9){const _0x5a2046=_0x4486,_0xd09367=_0x453439();while(!![]){try{const _0x206319=-parseInt(_0x5a2046(0x128))/0x1+-parseInt(_0x5a2046(0x124))/0x2*(parseInt(_0x5a2046(0x125))/0x3)+parseInt(_0x5a2046(0x12c))/0x4*(-parseInt(_0x5a2046(0x12b))/0x5)+-parseInt(_0x5a2046(0x12e))/0x6*(-parseInt(_0x5a2046(0x126))/0x7)+parseInt(_0x5a2046(0x12a))/0x8+-parseInt(_0x5a2046(0x127))/0x9+parseInt(_0x5a2046(0x129))/0xa;if(_0x206319===_0x1008b9)break;else _0xd09367['push'](_0xd09367['shift']());}catch(_0x38c035){_0xd09367['push'](_0xd09367['shift']());}}}(_0x1c41,0xa6a4b));import _0x309df5 from'./index.cjs';const facadeExport0=_0x309df5['MemorySessionTicketStore'],facadeExport1=_0x309df5[_0x4aa9f6(0x12d)];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.2",
4
+ "version": "1.0.3",
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.2",
20
- "@univerjs-pro/collaboration-transport-node": "1.0.2",
21
- "@univerjs/protocol": "1.0.2"
19
+ "@univerjs-pro/collaboration-service": "1.0.3",
20
+ "@univerjs-pro/collaboration-transport-node": "1.0.3",
21
+ "@univerjs/protocol": "1.0.3"
22
22
  }
23
23
  }