insite-users-server 1.0.472 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ws.js +1 -1
- package/dist/ws.js.map +3 -3
- package/package.json +1 -1
package/dist/ws.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Err as h}from"@nesvet/n";import{Binary as A}from"insite-db";var I={_id:/^[\dA-Fa-f]{24}$/,email:/^[^\s@]{1,63}@[^\s@]{1,63}\.[^\s@]{1,63}$/,argon2:/^\$argon2(?:i|d|id)\$v=\d+\$m=\d+,t=\d+,p=\d+(?:\$[\d+/A-Za-z]+){2}$/,sessionId:/^[\dA-Fa-f]{16,32}\$[\dA-Fa-f]{16,32}$/,role:/^[\d_a-z-]{1,64}$/,ip:/^(?:\d{1,3}\.){3}\d{1,3}$/};var U=["image/webp"],$=1024*512;function q(l,i){if(i.on("client-request:users.people.check-email",(s,t)=>{if(s.user?.abilities.login?.sections?.includes("users")){if(!I.email.test(t))throw new h("Not email","notemail");if(l.byEmail.has(t))throw new h("Email already exists","exists")}}),i.on("client-request:users.people.add",async(s,{roles:t,org:e,...n})=>{if(s.user?.abilities.login?.sections?.includes("users")){if(!t.length)throw new Error("emptyroles");if(!s.user.slaveRoleIds.includesAll(t))throw new Error("notinvolved");if(e&&!s.user.slaveIds.includes(e))throw new Error("orgisforbidden");await l.new({roles:t,org:e,...n})}}),i.on("client-request:users.people.change-password",async(s,t,e)=>{if(s.user?.abilities.login?.sections?.includes("users")&&s.user.permissiveIds.includes(t)){if(typeof e!="string")throw new Error("passwordmustbestring");if(!e)throw new Error("emptypasswordisforbidden");await l.changePassword(t,e)}}),i.on("client-request:users.people.update",async(s,t,e)=>{if(s.user?.abilities.login?.sections?.includes("users")&&s.user.permissiveIds.includes(t)){if(e.roles){if(!e.roles.length)throw new Error("emptyroles");if(!s.user.slaveRoleIds.includesAll(e.roles))throw new Error("notinvolved");let n=l.get(t);e.roles=n.isRoot?["root"]:l.roles.cleanUpIds(n.ownRoleIds.without(s.user.slaveRoleIds).concat(e.roles))}if(e.org&&!s.user.slaveIds.includes(e.org))throw new Error("orgisforbidden");await l.collection.updateOne({_id:t},{$set:e})}}),i.on("client-request:users.people.delete",async(s,t)=>{s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveIds.includes(t)&&await l.collection.deleteOne({_id:t})}),i.on("client-request:users.people.destroy-session",async(s,t)=>{s.user?.abilities.login?.sections?.includes("users")&&s.user.permissiveIds.includes(l.bySessionId.get(t)?._id)&&await l.sessions.collection.deleteOne({_id:t})}),i.incomingTransport){let s=function(t){return{async begin(e,n){return(!t||await t(e,n))&&U.includes(n.metadata.type)&&n.size<=$},async end(e,{data:n,metadata:{type:c,_id:a}}){n=A.createFromBase64(n.slice(n.indexOf(",")));let u=Date.now().toString(36);await Promise.all([l.avatars.collection.replaceOne({_id:a},{_id:a,type:c,size:n.length(),ts:u,data:n},{upsert:!0}),l.collection.updateOne({_id:a},{$set:{avatar:u}})])}}};var o=s;i.on("client-transfer:users.people.avatar",s((t,{metadata:{_id:e}})=>t.user?.abilities.login?.sections?.includes("users")&&t.user.permissiveIds.includes(e))),i.on("client-transfer:user.avatar",s((t,e)=>t.user&&t.user._id===e.metadata._id))}async function r(s){await Promise.all([l.avatars.collection.deleteOne({_id:s}),l.collection.updateOne({_id:s},{$set:{avatar:null}})])}i.on("client-request:users.people.delete-avatar",async(s,t)=>s.user?.abilities.login?.sections?.includes("users")&&s.user.permissiveIds.includes(t)&&await r(t)),i.on("client-request:user.delete-avatar",async(s,t)=>s.user&&s.user._id===t&&await r(t)),i.on("client-request:users.orgs.add",async(s,t)=>{if(s.user?.abilities.login?.sections?.includes("users")){if(!t.title)throw new Error("emptytitleisforbidden");await l.orgs.new(t,s.user._id)}}),i.on("client-request:users.orgs.update",async(s,t,e)=>{if(s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveIds.includes(t)){if(e.title!==void 0&&!e.title)throw new Error("emptytitleisforbidden");if(e.owners){if(!s.user.slaveIds.includesAll(e.owners))throw new Error("ownersareforbidden");let n=l.orgs.get(t);e.owners=l.sortIds(n.ownerIds.without(s.user.slaveIds).with(e.owners.without([n._id,...n.slaveOrgs.ids()])))}await l.orgs.collection.updateOne({_id:t},{$set:e})}}),i.on("client-request:users.orgs.delete",async(s,t)=>{s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveIds.includes(t)&&await l.orgs.collectionDelete(t)}),i.on("client-request:users.roles.check-id",(s,t)=>{if(s.user?.abilities.login?.sections?.includes("users")){if(!I.role.test(t))throw new h("Role ID is incorrect","notroleid");if(l.roles.has(t))throw new h("Role ID already exists","exists")}}),i.on("client-request:users.roles.add",async(s,t)=>{s.user?.abilities.login?.sections?.includes("users")&&await l.roles.new(t)}),i.on("client-request:users.roles.update",async(s,t,{abilities:e,...n})=>{if(s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveRoleIds.includes(t)){if(n.involves)if(s.user.slaveRoleIds.includesAll(n.involves)){n.involves.remove(t);let c=l.roles.get(t);for(let a of n.involves)l.roles.get(a).involves.has(c)&&n.involves.remove(a);n.involves=l.roles.cleanUpIds(n.involves)}else throw new Error("notinvolved");await l.roles.collection.updateOne({_id:t},{$set:n})}}),i.on("client-request:users.roles.set-ability",async(s,t,e,n,c)=>{if(s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveRoleIds.includes(t)&&s.user.abilities[e]){let a=structuredClone(l.roles.get(t).ownAbilities),u;if(n){a[e]||(a[e]={});let d=l.abilities.get(e).params?.find(p=>p._id===n);d&&(d.type==="number"?s.user.abilities[e][n]>=c&&(a[e][n]=c,u=!0):d.type==="items"&&s.user.abilities[e][n]?.includesAll(c)&&(a[e][n]=c,u=!0))}else c?a[e]=l.abilities.getMinimumOf(e):function d(p){if(delete a[p._id],p.subAbilities)for(let f of p.subAbilities)a[f._id]&&d(f)}(l.abilities.get(e)),u=!0;u&&await l.roles.collection.updateOne({_id:t},{$set:{abilities:a}})}}),i.on("client-message:users.roles.delete",async(s,t)=>{s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveRoleIds.includes(t)&&await l.roles.collectionDelete(t)})}import{CollectionMapPublication as g,Publication as R}from"insite-subscriptions-server";var b=class extends R{constructor(i){super("abilities",{fetch({user:r}){return r?.abilities.login?.sections?.includes("users")?{abilities:i.getSchemeFor(r)}:null}})}},v=class extends g{constructor(i,r={}){let{projection:o={title:1,description:1},sort:s={_o:1},transform:t}=r;Object.assign(o,{involves:1,abilities:1}),super("roles",i.collection,e=>e.user?.abilities.login?.sections?.includes("users")&&{query:{_id:{$in:e.user.slaveRoleIds}},projection:o,sort:s},e=>{let{involves:n,abilities:c,inheritedAbilities:a,displayTitle:u,_o:d}=i.get(e._id);e.involves&&(e.ownInvolves=e.involves,e.involves=n.ids(),e.abilities=c,e.inheritedAbilities=a),o.title&&(e.displayTitle=u),e._o=d,t?.(e)})}},m=class extends R{constructor(i,r={}){let{fieldsToUpdate:o=[],projection:s,transform:t}=r;for(let e of["email","name","name.first","name.middle","name.last","org","job","avatar"])(!s||s[e]!==0)&&o.push(e);super("user",{onSubscribe(e){let[{user:n}]=e.args;if(n){let{_id:c}=n;e.changeListener=a=>{if(a.documentKey._id===c)switch(a.operationType){case"update":if(!Object.keys(a.updateDescription.updatedFields).includesAny(o))break;case"replace":case"delete":e.changed(a)}},i.collection.changeListeners.add(e.changeListener)}},fetch({user:e,session:n},c){if(e){let a=Object.pick(e,"_id","email","name","initials","displayLabel","job","avatarUrl","abilities","slaveIds");if(a.orgId=e.org._id,a.sessionId=c?n._id:void 0,a.isOnline=!0,s)for(let u in s)s[u]?a[u]=e[u]:delete a[u];return t?.(a),a}return null},onUnsubscribe(e){e.changeListener&&i.collection.changeListeners.delete(e.changeListener)}})}},y=class extends g{constructor(i,r={}){let{projection:o={email:1,name:1,org:1,job:1,avatar:1},sort:s={"name.last":1},transform:t}=r;super("users",i.collection,e=>e.user?.abilities.login&&{query:{},projection:o,sort:s},e=>{({initials:e.initials,displayLabel:e.displayLabel,avatarUrl:e.avatarUrl,isOnline:e.isOnline}=i.get(e._id)),e.orgId=e.org,delete e.org,delete e.avatar,t?.(e)})}},O=class extends g{constructor(i,r={}){let{projection:o={_id:1},sort:s,triggers:t=[],transform:e}=r;t.includes("roles")||t.push("roles"),super("users.extended",i.collection,n=>n.user?.abilities.login?.sections?.includes("users")&&{query:{_id:{$in:n.user.slaveIds}},projection:o,sort:s,triggers:t},(n,[c])=>{n.roleIds=i.get(n._id).ownRoleIds.intersection(c.user.slaveRoleIds),e?.(n)})}},w=class extends g{constructor(i){super("users.people.sessions",i.collection,(r,o)=>r.user?.abilities.login?.sections?.includes("users")&&r.user.permissiveIds.includes(o)&&{query:{user:o},projection:{remoteAddress:1,isOnline:1,prolongedAt:1},sort:{prolongedAt:-1}})}},S=class extends g{constructor(i,r={}){let{projection:o={title:1},sort:s={title:1},transform:t}=r;super("orgs",i.collection,e=>e.user?.abilities.login&&{query:{},projection:o,sort:s},e=>{({initials:e.initials,displayLabel:e.displayLabel}=i.get(e._id)),t?.(e)})}},x=class extends g{constructor(i,r={}){let{projection:o={note:1},sort:s={_o:1},triggers:t=[],transform:e}=r;t.includes("owners")||t.push("owners"),super("orgs.extended",i.collection,n=>n.user?.abilities.login?.sections?.includes("users")&&{query:{_id:{$in:n.user.slaveIds}},projection:o,sort:s,triggers:t},(n,[c])=>{let{ownerIds:a,slaveOrgs:u,_o:d}=i.get(n._id);n.owners=a.intersection(c.user.slaveIds),n.slaveOrgs=u.intersection(c.user.slaveOrgs).ids(),n._o=d,e?.(n)})}};var P=class l{constructor(i,r={}){i.usersServer=this;let{users:o,publication:s,extendedPublication:t,userPublication:e,roles:n={},orgs:c={},getSessionProps:a}=r,{publication:u}=n,{publication:d,extendedPublication:p}=c;this.users=o,this.getSessionProps=a;for(let f of o.values())l.handleUserCreate(f);o.abilities.publication=new b(o.abilities),o.roles.publication=new v(o.roles,u),o.on("roles-update",l.handleRolesUpdate),o.on("roles-role-update",l.handleRolesRoleUpdate),o.publication=new y(o,s),o.extendedPublication=new O(o,t),o.userPublication=new m(o,e),o.on("user-create",l.handleUserCreate),o.on("user-is-online",l.handleUserIsOnline),new w(o.sessions),o.on("session-delete",this.#e),o.orgs.publication=new S(o.orgs,d),o.orgs.extendedPublication=new x(o.orgs,p),o.on("orgs-update",l.handleOrgsUpdate),o.on("orgs-org-update",l.handleOrgsOrgUpdate),i.options.WebSocket.prototype.login=l.login,i.options.WebSocket.prototype.logout=l.logout,i.options.WebSocket.prototype.setSession=l.setSession,i.on("client-connect",l.handleClientConnect),i.requestListener&&(i.on("client-request:login",l.handleClientRequestLogin),i.on("client-request:logout",l.handleClientRequestLogout)),i.on("client-closed",l.handleClientClosed),q(o,i)}wsBySessions=new Map;getDefaultSessionProps({userAgent:i,remoteAddress:r}){return{userAgent:i,remoteAddress:r}}static handleUserCreate(i){i.webSockets=new Set}static handleUserIsOnline({_id:i,isOnline:r}){let o={_id:i,isOnline:r};for(let s of this.publication.subscriptions){let[t]=s.args;t.user&&t.user._id!==i&&s.handler([["u",o,!0]])}}#e=i=>this.wsBySessions.get(i)?.setSession(null);static handleRolesUpdate(){this.roles.publication.flushInitial()}static handleRolesRoleUpdate(i,r){r&&this.roles.publication.skip(r)}static handleOrgsUpdate(){this.orgs.publication.flushInitial(),this.orgs.extendedPublication.flushInitial()}static handleOrgsOrgUpdate(i,r){r&&(this.orgs.publication.skip(r),this.orgs.extendedPublication.skip(r))}static handleClientConnect(i){i.session=null}static handleClientRequestLogin(i,r,o){return i.login(r,o)}static handleClientRequestLogout(i){return i.logout()}static handleClientClosed(i){i.session?.offline(),i.setSession(null)}static async login(i,r){let{usersServer:o}=this.wss,s=await o.users.login(i,r,{...o.getDefaultSessionProps(this),...o.getSessionProps?.(this),isOnline:!0});s&&this.setSession(s)}static logout(){this.session&&(this.wss.usersServer.users.logout(this.session),this.setSession(null))}static setSession(i,r){let{usersServer:o}=this.wss;typeof i=="string"&&(i=o.users.sessions.get(i)??null),this.session!==i&&(this.session&&o.wsBySessions.delete(this.session),i?(this.session=i,this.user=i.user,this.lastUserId=this.user._id,this.user.webSockets.add(this),o.wsBySessions.set(i,this),r&&i.prolong({...o.getDefaultSessionProps(this),...o.getSessionProps?.(this),isOnline:!0})):(this.user.webSockets.delete(this),this.session=null,delete this.user),this.wss.emit("client-session",this,r))}};export{P as UsersServer};
|
|
1
|
+
import"@nesvet/deprecated-extensions/server";import{Err as d}from"@nesvet/n";import{Binary as P}from"insite-db";var I={_id:/^[\dA-Fa-f]{24}$/,email:/^[^\s@]{1,63}@[^\s@]{1,63}\.[^\s@]{1,63}$/,argon2:/^\$argon2(?:i|d|id)\$v=\d+\$m=\d+,t=\d+,p=\d+(?:\$[\d+/A-Za-z]+){2}$/,sessionId:/^[\dA-Fa-f]{16,32}\$[\dA-Fa-f]{16,32}$/,role:/^[\d_a-z-]{1,64}$/,ip:/^(?:\d{1,3}\.){3}\d{1,3}$/};var A=["image/webp"],U=1024*512;function q(l,i){if(i.on("client-request:users.people.check-email",(s,t)=>{if(s.user?.abilities.login?.sections?.includes("users")){if(!I.email.test(t))throw new d("Not email","notemail");if(l.byEmail.has(t))throw new d("Email already exists","exists")}}),i.on("client-request:users.people.add",async(s,{roles:t,org:e,...n})=>{if(s.user?.abilities.login?.sections?.includes("users")){if(!t.length)throw new d("Roles shouldn't be empty","emptyroles");if(!s.user.slaveRoleIds.includesAll(t))throw new d("Can't assign role the user is not involved in","forbiddenrole");if(e&&!s.user.slaveIds.includes(e))throw new d("Can't assign org the user is not master of","forbiddenorg");await l.new({roles:t,org:e,...n})}}),i.on("client-request:users.people.change-password",async(s,t,e)=>{if(s.user?.abilities.login?.sections?.includes("users")&&s.user.permissiveIds.includes(t)){if(typeof e!="string")throw new d("Type of password is incorrect","wrongpasswordtype");if(!e)throw new d("Password can't be empty","emptypassword");await l.changePassword(t,e)}}),i.on("client-request:users.people.update",async(s,t,e)=>{if(s.user?.abilities.login?.sections?.includes("users")&&s.user.permissiveIds.includes(t)){if(e.roles){if(!e.roles.length)throw new d("Roles can't be empty","emptyroles");if(!s.user.slaveRoleIds.includesAll(e.roles))throw new d("Can't assign role the user is not involved in","forbiddenrole");let n=l.get(t);e.roles=n.isRoot?["root"]:l.roles.cleanUpIds(n.ownRoleIds.without(s.user.slaveRoleIds).concat(e.roles))}if(e.org&&!s.user.slaveIds.includes(e.org))throw new d("Can't assign org the user is not master of","forbiddenorg");await l.collection.updateOne({_id:t},{$set:e})}}),i.on("client-request:users.people.delete",async(s,t)=>{s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveIds.includes(t)&&await l.collection.deleteOne({_id:t})}),i.on("client-request:users.people.destroy-session",async(s,t)=>{s.user?.abilities.login?.sections?.includes("users")&&s.user.permissiveIds.includes(l.bySessionId.get(t)?._id)&&await l.sessions.collection.deleteOne({_id:t})}),i.incomingTransport){let s=function(t){return{async begin(e,n){return(!t||await t(e,n))&&A.includes(n.metadata.type)&&n.size<=U},async end(e,{data:n,metadata:{type:c,_id:a}}){n=P.createFromBase64(n.slice(n.indexOf(",")));let u=Date.now().toString(36);await Promise.all([l.avatars.collection.replaceOne({_id:a},{_id:a,type:c,size:n.length(),ts:u,data:n},{upsert:!0}),l.collection.updateOne({_id:a},{$set:{avatar:u}})])}}};var o=s;i.on("client-transfer:users.people.avatar",s((t,{metadata:{_id:e}})=>t.user?.abilities.login?.sections?.includes("users")&&t.user.permissiveIds.includes(e))),i.on("client-transfer:user.avatar",s((t,e)=>t.user&&t.user._id===e.metadata._id))}async function r(s){await Promise.all([l.avatars.collection.deleteOne({_id:s}),l.collection.updateOne({_id:s},{$set:{avatar:null}})])}i.on("client-request:users.people.delete-avatar",async(s,t)=>s.user?.abilities.login?.sections?.includes("users")&&s.user.permissiveIds.includes(t)&&await r(t)),i.on("client-request:user.delete-avatar",async(s,t)=>s.user&&s.user._id===t&&await r(t)),i.on("client-request:users.orgs.add",async(s,t)=>{if(s.user?.abilities.login?.sections?.includes("users")){if(!t.title)throw new d("Title can't be empty","emptytitle");await l.orgs.new(t,s.user._id)}}),i.on("client-request:users.orgs.update",async(s,t,e)=>{if(s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveIds.includes(t)){if(e.title!==void 0&&!e.title)throw new d("Title can't be empty","emptytitle");if(e.owners){if(!s.user.slaveIds.includesAll(e.owners))throw new d("Can't assign owners the user is not master of","forbiddenowners");let n=l.orgs.get(t);e.owners=l.sortIds(n.ownerIds.without(s.user.slaveIds).with(e.owners.without([n._id,...n.slaveOrgs.ids()])))}await l.orgs.collection.updateOne({_id:t},{$set:e})}}),i.on("client-request:users.orgs.delete",async(s,t)=>{s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveIds.includes(t)&&await l.orgs.collectionDelete(t)}),i.on("client-request:users.roles.check-id",(s,t)=>{if(s.user?.abilities.login?.sections?.includes("users")){if(!I.role.test(t))throw new d("Role ID is incorrect","notroleid");if(l.roles.has(t))throw new d("Role ID already exists","exists")}}),i.on("client-request:users.roles.add",async(s,t)=>{s.user?.abilities.login?.sections?.includes("users")&&await l.roles.new(t)}),i.on("client-request:users.roles.update",async(s,t,{abilities:e,...n})=>{if(s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveRoleIds.includes(t)){if(n.involves)if(s.user.slaveRoleIds.includesAll(n.involves)){n.involves.remove(t);let c=l.roles.get(t);for(let a of n.involves)l.roles.get(a).involves.has(c)&&n.involves.remove(a);n.involves=l.roles.cleanUpIds(n.involves)}else throw new d("Can't assign role the user is not involved in","forbiddenrole");await l.roles.collection.updateOne({_id:t},{$set:n})}}),i.on("client-request:users.roles.set-ability",async(s,t,e,n,c)=>{if(s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveRoleIds.includes(t)&&s.user.abilities[e]){let a=structuredClone(l.roles.get(t).ownAbilities),u;if(n){a[e]||(a[e]={});let p=l.abilities.get(e).params?.find(g=>g._id===n);p&&(p.type==="number"?s.user.abilities[e][n]>=c&&(a[e][n]=c,u=!0):p.type==="items"&&s.user.abilities[e][n]?.includesAll(c)&&(a[e][n]=c,u=!0))}else c?a[e]=l.abilities.getMinimumOf(e):function p(g){if(delete a[g._id],g.subAbilities)for(let h of g.subAbilities)a[h._id]&&p(h)}(l.abilities.get(e)),u=!0;u&&await l.roles.collection.updateOne({_id:t},{$set:{abilities:a}})}}),i.on("client-message:users.roles.delete",async(s,t)=>{s.user?.abilities.login?.sections?.includes("users")&&s.user.slaveRoleIds.includes(t)&&await l.roles.collectionDelete(t)})}import{CollectionMapPublication as f,Publication as R}from"insite-subscriptions-server";var b=class extends R{constructor(i){super("abilities",{fetch({user:r}){return r?.abilities.login?.sections?.includes("users")?{abilities:i.getSchemeFor(r)}:null}})}},v=class extends f{constructor(i,r={}){let{projection:o={title:1,description:1},sort:s={_o:1},transform:t}=r;Object.assign(o,{involves:1,abilities:1}),super("roles",i.collection,e=>e.user?.abilities.login?.sections?.includes("users")&&{query:{_id:{$in:e.user.slaveRoleIds}},projection:o,sort:s},e=>{let{involves:n,abilities:c,inheritedAbilities:a,displayTitle:u,_o:p}=i.get(e._id);e.involves&&(e.ownInvolves=e.involves,e.involves=n.ids(),e.abilities=c,e.inheritedAbilities=a),o.title&&(e.displayTitle=u),e._o=p,t?.(e)})}},m=class extends R{constructor(i,r={}){let{fieldsToUpdate:o=[],projection:s,transform:t}=r;for(let e of["email","name","name.first","name.middle","name.last","org","job","avatar"])(!s||s[e]!==0)&&o.push(e);super("user",{onSubscribe(e){let[{user:n}]=e.args;if(n){let{_id:c}=n;e.changeListener=a=>{if(a.documentKey._id===c)switch(a.operationType){case"update":if(!Object.keys(a.updateDescription.updatedFields).includesAny(o))break;case"replace":case"delete":e.changed(a)}},i.collection.changeListeners.add(e.changeListener)}},fetch({user:e,session:n},c){if(e){let a=Object.pick(e,"_id","email","name","initials","displayLabel","job","avatarUrl","abilities","slaveIds");if(a.orgId=e.org._id,a.sessionId=c?n._id:void 0,a.isOnline=!0,s)for(let u in s)s[u]?a[u]=e[u]:delete a[u];return t?.(a),a}return null},onUnsubscribe(e){e.changeListener&&i.collection.changeListeners.delete(e.changeListener)}})}},y=class extends f{constructor(i,r={}){let{projection:o={email:1,name:1,org:1,job:1,avatar:1},sort:s={"name.last":1},transform:t}=r;super("users",i.collection,e=>e.user?.abilities.login&&{query:{},projection:o,sort:s},e=>{({initials:e.initials,displayLabel:e.displayLabel,avatarUrl:e.avatarUrl,isOnline:e.isOnline}=i.get(e._id)),e.orgId=e.org,delete e.org,delete e.avatar,t?.(e)})}},w=class extends f{constructor(i,r={}){let{projection:o={_id:1},sort:s,triggers:t=[],transform:e}=r;t.includes("roles")||t.push("roles"),super("users.extended",i.collection,n=>n.user?.abilities.login?.sections?.includes("users")&&{query:{_id:{$in:n.user.slaveIds}},projection:o,sort:s,triggers:t},(n,[c])=>{n.roleIds=i.get(n._id).ownRoleIds.intersection(c.user.slaveRoleIds),e?.(n)})}},O=class extends f{constructor(i){super("users.people.sessions",i.collection,(r,o)=>r.user?.abilities.login?.sections?.includes("users")&&r.user.permissiveIds.includes(o)&&{query:{user:o},projection:{remoteAddress:1,isOnline:1,prolongedAt:1},sort:{prolongedAt:-1}})}},S=class extends f{constructor(i,r={}){let{projection:o={title:1},sort:s={title:1},transform:t}=r;super("orgs",i.collection,e=>e.user?.abilities.login&&{query:{},projection:o,sort:s},e=>{({initials:e.initials,displayLabel:e.displayLabel}=i.get(e._id)),t?.(e)})}},x=class extends f{constructor(i,r={}){let{projection:o={note:1},sort:s={_o:1},triggers:t=[],transform:e}=r;t.includes("owners")||t.push("owners"),super("orgs.extended",i.collection,n=>n.user?.abilities.login?.sections?.includes("users")&&{query:{_id:{$in:n.user.slaveIds}},projection:o,sort:s,triggers:t},(n,[c])=>{let{ownerIds:a,slaveOrgs:u,_o:p}=i.get(n._id);n.owners=a.intersection(c.user.slaveIds),n.slaveOrgs=u.intersection(c.user.slaveOrgs).ids(),n._o=p,e?.(n)})}};var C=class l{constructor(i,r={}){i.usersServer=this;let{users:o,publication:s,extendedPublication:t,userPublication:e,roles:n={},orgs:c={},getSessionProps:a}=r,{publication:u}=n,{publication:p,extendedPublication:g}=c;this.users=o,this.getSessionProps=a;for(let h of o.values())l.handleUserCreate(h);o.abilities.publication=new b(o.abilities),o.roles.publication=new v(o.roles,u),o.on("roles-update",l.handleRolesUpdate),o.on("roles-role-update",l.handleRolesRoleUpdate),o.publication=new y(o,s),o.extendedPublication=new w(o,t),o.userPublication=new m(o,e),o.on("user-create",l.handleUserCreate),o.on("user-is-online",l.handleUserIsOnline),new O(o.sessions),o.on("session-delete",this.#e),o.orgs.publication=new S(o.orgs,p),o.orgs.extendedPublication=new x(o.orgs,g),o.on("orgs-update",l.handleOrgsUpdate),o.on("orgs-org-update",l.handleOrgsOrgUpdate),i.options.WebSocket.prototype.login=l.login,i.options.WebSocket.prototype.logout=l.logout,i.options.WebSocket.prototype.setSession=l.setSession,i.on("client-connect",l.handleClientConnect),i.requestListener&&(i.on("client-request:login",l.handleClientRequestLogin),i.on("client-request:logout",l.handleClientRequestLogout)),i.on("client-closed",l.handleClientClosed),q(o,i)}wsBySessions=new Map;getDefaultSessionProps({userAgent:i,remoteAddress:r}){return{userAgent:i,remoteAddress:r}}static handleUserCreate(i){i.webSockets=new Set}static handleUserIsOnline({_id:i,isOnline:r}){let o={_id:i,isOnline:r};for(let s of this.publication.subscriptions){let[t]=s.args;t.user&&t.user._id!==i&&s.handler([["u",o,!0]])}}#e=i=>this.wsBySessions.get(i)?.setSession(null);static handleRolesUpdate(){this.roles.publication.flushInitial()}static handleRolesRoleUpdate(i,r){r&&this.roles.publication.skip(r)}static handleOrgsUpdate(){this.orgs.publication.flushInitial(),this.orgs.extendedPublication.flushInitial()}static handleOrgsOrgUpdate(i,r){r&&(this.orgs.publication.skip(r),this.orgs.extendedPublication.skip(r))}static handleClientConnect(i){i.session=null}static handleClientRequestLogin(i,r,o){return i.login(r,o)}static handleClientRequestLogout(i){return i.logout()}static handleClientClosed(i){i.session?.offline(),i.setSession(null)}static async login(i,r){let{usersServer:o}=this.wss,s=await o.users.login(i,r,{...o.getDefaultSessionProps(this),...o.getSessionProps?.(this),isOnline:!0});s&&this.setSession(s)}static logout(){this.session&&(this.wss.usersServer.users.logout(this.session),this.setSession(null))}static setSession(i,r){let{usersServer:o}=this.wss;typeof i=="string"&&(i=o.users.sessions.get(i)??null),this.session!==i&&(this.session&&o.wsBySessions.delete(this.session),i?(this.session=i,this.user=i.user,this.lastUserId=this.user._id,this.user.webSockets.add(this),o.wsBySessions.set(i,this),r&&i.prolong({...o.getDefaultSessionProps(this),...o.getSessionProps?.(this),isOnline:!0})):(this.user.webSockets.delete(this),this.session=null,delete this.user),this.wss.emit("client-session",this,r))}};export{C as UsersServer};
|
|
2
2
|
//# sourceMappingURL=ws.js.map
|
package/dist/ws.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/ws/handlers.js", "../src/lib/regexps.js", "../src/ws/publications.js", "../src/ws/UsersServer.js"],
|
|
4
|
-
"sourcesContent": ["import { Err } from \"@nesvet/n\";\nimport { Binary } from \"insite-db\";\nimport { regexps } from \"../lib\";\n\n\nconst avatarTypesAccepted = [ \"image/webp\" ];\nconst maxAvatarSize = 1024 * 512;\n\n\nexport function setupHandlers(users, wss) {\n\t\n\t/*\n\t * Users\n\t */\n\t\n\twss.on(\"client-request:users.people.check-email\", (ws, email) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\")) {\n\t\t\tif (!regexps.email.test(email))\n\t\t\t\tthrow new Err(\"Not email\", \"notemail\");\n\t\t\t\n\t\t\tif (users.byEmail.has(email))\n\t\t\t\tthrow new Err(\"Email already exists\", \"exists\");\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.people.add\", async (ws, { roles, org, ...rest }) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\")) {\n\t\t\tif (!roles.length)\n\t\t\t\tthrow new Error(\"emptyroles\");\n\t\t\t\n\t\t\tif (!ws.user.slaveRoleIds.includesAll(roles))\n\t\t\t\tthrow new Error(\"notinvolved\");\n\t\t\t\n\t\t\tif (org && !ws.user.slaveIds.includes(org))\n\t\t\t\tthrow new Error(\"orgisforbidden\");\n\t\t\t\n\t\t\tawait users.new({ roles, org, ...rest });\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.people.change-password\", async (ws, _id, newPassword) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.permissiveIds.includes(_id)) {\n\t\t\tif (typeof newPassword != \"string\")\n\t\t\t\tthrow new Error(\"passwordmustbestring\");\n\t\t\t\n\t\t\tif (!newPassword)\n\t\t\t\tthrow new Error(\"emptypasswordisforbidden\");\n\t\t\t\n\t\t\tawait users.changePassword(_id, newPassword);\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.people.update\", async (ws, _id, updates) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.permissiveIds.includes(_id)) {\n\t\t\tif (updates.roles) {\n\t\t\t\tif (!updates.roles.length)\n\t\t\t\t\tthrow new Error(\"emptyroles\");\n\t\t\t\t\n\t\t\t\tif (!ws.user.slaveRoleIds.includesAll(updates.roles))\n\t\t\t\t\tthrow new Error(\"notinvolved\");\n\t\t\t\t\n\t\t\t\tconst user = users.get(_id);\n\t\t\t\t\n\t\t\t\tupdates.roles = user.isRoot ? [ \"root\" ] : users.roles.cleanUpIds(user.ownRoleIds.without(ws.user.slaveRoleIds).concat(updates.roles));\n\t\t\t}\n\t\t\t\n\t\t\tif (updates.org && !ws.user.slaveIds.includes(updates.org))\n\t\t\t\tthrow new Error(\"orgisforbidden\");\n\t\t\t\n\t\t\tawait users.collection.updateOne({ _id }, { $set: updates });\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.people.delete\", async (ws, _id) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveIds.includes(_id))\n\t\t\tawait users.collection.deleteOne({ _id });\n\t\t\n\t});\n\t\n\t\n\t/*\n\t * Sessions\n\t */\n\t\n\twss.on(\"client-request:users.people.destroy-session\", async (ws, sessionId) => {\n\t\tif (\n\t\t\tws.user?.abilities.login?.sections?.includes(\"users\") &&\n\t\t\tws.user.permissiveIds.includes(users.bySessionId.get(sessionId)?._id)\n\t\t)\n\t\t\tawait users.sessions.collection.deleteOne({ _id: sessionId });\n\t\t\n\t});\n\t\n\t\n\t/*\n\t * Avatars\n\t */\n\t\n\tif (wss.incomingTransport) {\n\t\tfunction getAvatarTransferProps(check) {\n\t\t\treturn {\n\t\t\t\t\n\t\t\t\tasync begin(ws, transfer) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t(!check || await check(ws, transfer)) &&\n\t\t\t\t\t\tavatarTypesAccepted.includes(transfer.metadata.type) &&\n\t\t\t\t\t\ttransfer.size <= maxAvatarSize\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tasync end(_, { data, metadata: { type, _id } }) {\n\t\t\t\t\tdata = Binary.createFromBase64(data.slice(data.indexOf(\",\")));\n\t\t\t\t\t\n\t\t\t\t\tconst ts = Date.now().toString(36);\n\t\t\t\t\t\n\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\tusers.avatars.collection.replaceOne({ _id }, {\n\t\t\t\t\t\t\t_id,\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tsize: data.length(),\n\t\t\t\t\t\t\tts,\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t}, { upsert: true }),\n\t\t\t\t\t\tusers.collection.updateOne({ _id }, { $set: { avatar: ts } })\n\t\t\t\t\t]);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t};\n\t\t}\n\t\t\n\t\twss.on(\"client-transfer:users.people.avatar\", getAvatarTransferProps((ws, { metadata: { _id } }) =>\n\t\t\tws.user?.abilities.login?.sections?.includes(\"users\") &&\n\t\t\tws.user.permissiveIds.includes(_id))\n\t\t);\n\t\t\n\t\twss.on(\"client-transfer:user.avatar\", getAvatarTransferProps((ws, transfer) =>\n\t\t\tws.user &&\n\t\t\tws.user._id === transfer.metadata._id\n\t\t));\n\t}\n\t\n\tasync function deleteAvatar(_id) {\n\t\t\n\t\tawait Promise.all([\n\t\t\tusers.avatars.collection.deleteOne({ _id }),\n\t\t\tusers.collection.updateOne({ _id }, { $set: { avatar: null } })\n\t\t]);\n\t\t\n\t}\n\t\n\twss.on(\"client-request:users.people.delete-avatar\", async (ws, _id) =>\n\t\tws.user?.abilities.login?.sections?.includes(\"users\") &&\n\t\tws.user.permissiveIds.includes(_id) &&\n\t\tawait deleteAvatar(_id)\n\t);\n\t\n\twss.on(\"client-request:user.delete-avatar\", async (ws, _id) =>\n\t\tws.user &&\n\t\tws.user._id === _id &&\n\t\tawait deleteAvatar(_id)\n\t);\n\t\n\t\n\t/*\n\t * Orgs\n\t */\n\t\n\twss.on(\"client-request:users.orgs.add\", async (ws, org) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\")) {\n\t\t\tif (!org.title)\n\t\t\t\tthrow new Error(\"emptytitleisforbidden\");\n\t\t\t\n\t\t\tawait users.orgs.new(org, ws.user._id);\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.orgs.update\", async (ws, _id, updates) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveIds.includes(_id)) {\n\t\t\tif (updates.title !== undefined && !updates.title)\n\t\t\t\tthrow new Error(\"emptytitleisforbidden\");\n\t\t\t\n\t\t\tif (updates.owners) {\n\t\t\t\tif (!ws.user.slaveIds.includesAll(updates.owners))\n\t\t\t\t\tthrow new Error(\"ownersareforbidden\");\n\t\t\t\t\n\t\t\t\tconst org = users.orgs.get(_id);\n\t\t\t\t\n\t\t\t\tupdates.owners = users.sortIds(org.ownerIds.without(ws.user.slaveIds).with(updates.owners.without([ org._id, ...org.slaveOrgs.ids() ])));\n\t\t\t}\n\t\t\t\n\t\t\tawait users.orgs.collection.updateOne({ _id }, { $set: updates });\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.orgs.delete\", async (ws, _id) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveIds.includes(_id))\n\t\t\tawait users.orgs.collectionDelete(_id);\n\t\t\n\t});\n\t\n\t\n\t/*\n\t * Roles\n\t */\n\t\n\twss.on(\"client-request:users.roles.check-id\", (ws, _id) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\")) {\n\t\t\tif (!regexps.role.test(_id))\n\t\t\t\tthrow new Err(\"Role ID is incorrect\", \"notroleid\");\n\t\t\t\n\t\t\tif (users.roles.has(_id))\n\t\t\t\tthrow new Err(\"Role ID already exists\", \"exists\");\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.roles.add\", async (ws, role) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\"))\n\t\t\tawait users.roles.new(role);\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.roles.update\", async (ws, _id, { abilities, ...updates }) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveRoleIds.includes(_id)) {\n\t\t\tif (updates.involves)\n\t\t\t\tif (ws.user.slaveRoleIds.includesAll(updates.involves)) {\n\t\t\t\t\tupdates.involves.remove(_id);\n\t\t\t\t\t\n\t\t\t\t\tconst role = users.roles.get(_id);\n\t\t\t\t\tfor (const involvedRoleId of updates.involves)\n\t\t\t\t\t\tif (users.roles.get(involvedRoleId).involves.has(role))\n\t\t\t\t\t\t\tupdates.involves.remove(involvedRoleId);\n\t\t\t\t\t\n\t\t\t\t\tupdates.involves = users.roles.cleanUpIds(updates.involves);\n\t\t\t\t} else\n\t\t\t\t\tthrow new Error(\"notinvolved\");\n\t\t\t\n\t\t\tawait users.roles.collection.updateOne({ _id }, { $set: updates });\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.roles.set-ability\", async (ws, _id, abilityId, paramId, value) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveRoleIds.includes(_id) && ws.user.abilities[abilityId]) {\n\t\t\tconst abilities = structuredClone(users.roles.get(_id).ownAbilities);\n\t\t\tlet shouldUpdate;\n\t\t\t\n\t\t\tif (paramId) {\n\t\t\t\tif (!abilities[abilityId])\n\t\t\t\t\tabilities[abilityId] = {};\n\t\t\t\tconst param = users.abilities.get(abilityId).params?.find(anotherParam => anotherParam._id === paramId);\n\t\t\t\tif (param)\n\t\t\t\t\tif (param.type === \"number\") {\n\t\t\t\t\t\tif (ws.user.abilities[abilityId][paramId] >= value) {\n\t\t\t\t\t\t\tabilities[abilityId][paramId] = value;\n\t\t\t\t\t\t\tshouldUpdate = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (param.type === \"items\" && ws.user.abilities[abilityId][paramId]?.includesAll(value)) {\n\t\t\t\t\t\tabilities[abilityId][paramId] = value;\n\t\t\t\t\t\tshouldUpdate = true;\n\t\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (value)\n\t\t\t\t\tabilities[abilityId] = users.abilities.getMinimumOf(abilityId);\n\t\t\t\telse\n\t\t\t\t\t(function resolve(schema) {\n\t\t\t\t\t\tdelete abilities[schema._id];\n\t\t\t\t\t\tif (schema.subAbilities)\n\t\t\t\t\t\t\tfor (const subSchema of schema.subAbilities)\n\t\t\t\t\t\t\t\tif (abilities[subSchema._id])\n\t\t\t\t\t\t\t\t\tresolve(subSchema);\n\t\t\t\t\t\t\n\t\t\t\t\t})(users.abilities.get(abilityId));\n\t\t\t\t\n\t\t\t\tshouldUpdate = true;\n\t\t\t}\n\t\t\t\n\t\t\tif (shouldUpdate)\n\t\t\t\tawait users.roles.collection.updateOne({ _id }, { $set: { abilities } });\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-message:users.roles.delete\", async (ws, _id) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveRoleIds.includes(_id))\n\t\t\tawait users.roles.collectionDelete(_id);\n\t\t\n\t});\n\t\n}\n", "export const regexps = {\n\t_id: /^[\\dA-Fa-f]{24}$/,\n\temail: /^[^\\s@]{1,63}@[^\\s@]{1,63}\\.[^\\s@]{1,63}$/,\n\targon2: /^\\$argon2(?:i|d|id)\\$v=\\d+\\$m=\\d+,t=\\d+,p=\\d+(?:\\$[\\d+/A-Za-z]+){2}$/,\n\tsessionId: /^[\\dA-Fa-f]{16,32}\\$[\\dA-Fa-f]{16,32}$/,\n\trole: /^[\\d_a-z-]{1,64}$/,\n\tip: /^(?:\\d{1,3}\\.){3}\\d{1,3}$/\n};\n", "import { CollectionMapPublication, Publication } from \"insite-subscriptions-server\";\n\n\nexport class AbilitiesPublication extends Publication {\n\tconstructor(abilities) {\n\t\tsuper(\"abilities\", {\n\t\t\t\n\t\t\tfetch({ user }) {\n\t\t\t\tif (user?.abilities.login?.sections?.includes(\"users\"))\n\t\t\t\t\treturn { abilities: abilities.getSchemeFor(user) };\n\t\t\t\t\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t\n\t\t});\n\t}\n}\n\n\nexport class RolesPublication extends CollectionMapPublication {\n\tconstructor(roles, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tprojection = { title: 1, description: 1 },\n\t\t\tsort = { _o: 1 },\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tObject.assign(projection, { involves: 1, abilities: 1 });\n\t\t\n\t\tsuper(\"roles\", roles.collection, ws => ws.user?.abilities.login?.sections?.includes(\"users\") && {\n\t\t\tquery: { _id: { $in: ws.user.slaveRoleIds } },\n\t\t\tprojection,\n\t\t\tsort\n\t\t}, roleDoc => {\n\t\t\tconst { involves, abilities, inheritedAbilities, displayTitle, _o } = roles.get(roleDoc._id);\n\t\t\t\n\t\t\tif (roleDoc.involves) {\n\t\t\t\troleDoc.ownInvolves = roleDoc.involves;\n\t\t\t\troleDoc.involves = involves.ids();\n\t\t\t\troleDoc.abilities = abilities;\n\t\t\t\troleDoc.inheritedAbilities = inheritedAbilities;\n\t\t\t}\n\t\t\t\n\t\t\tif (projection.title)\n\t\t\t\troleDoc.displayTitle = displayTitle;\n\t\t\t\n\t\t\troleDoc._o = _o;\n\t\t\t\n\t\t\ttransform?.(roleDoc);\n\t\t\t\n\t\t});\n\t\t\n\t}\n\t\n}\n\n\nexport class UserPublication extends Publication {\n\tconstructor(users, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tfieldsToUpdate = [],\n\t\t\tprojection,\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tfor (const key of [\n\t\t\t\"email\",\n\t\t\t\"name\",\n\t\t\t\"name.first\",\n\t\t\t\"name.middle\",\n\t\t\t\"name.last\",\n\t\t\t\"org\",\n\t\t\t\"job\",\n\t\t\t\"avatar\"\n\t\t])\n\t\t\tif (!projection || projection[key] !== 0)\n\t\t\t\tfieldsToUpdate.push(key);\n\t\t\n\t\tsuper(\"user\", {\n\t\t\t\n\t\t\tonSubscribe(subscription) {\n\t\t\t\tconst [ { user } ] = subscription.args;\n\t\t\t\t\n\t\t\t\tif (user) {\n\t\t\t\t\tconst { _id } = user;\n\t\t\t\t\t\n\t\t\t\t\tsubscription.changeListener = next => {\n\t\t\t\t\t\tif (next.documentKey._id === _id)\n\t\t\t\t\t\t\tswitch (next.operationType) {\n\t\t\t\t\t\t\t\tcase \"update\":\n\t\t\t\t\t\t\t\t\tif (!Object.keys(next.updateDescription.updatedFields).includesAny(fieldsToUpdate))\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tcase \"replace\":// eslint-disable-line no-fallthrough\n\t\t\t\t\t\t\t\tcase \"delete\":\n\t\t\t\t\t\t\t\t\tsubscription.changed(next);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tusers.collection.changeListeners.add(subscription.changeListener);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tfetch({ user, session }, isSessionIdRequired) {\n\t\t\t\tif (user) {\n\t\t\t\t\tconst userDoc = Object.pick(user, \"_id\", \"email\", \"name\", \"initials\", \"displayLabel\", \"job\", \"avatarUrl\", \"abilities\", \"slaveIds\");\n\t\t\t\t\t\n\t\t\t\t\tuserDoc.orgId = user.org._id;\n\t\t\t\t\tuserDoc.sessionId = isSessionIdRequired ? session._id : undefined;\n\t\t\t\t\tuserDoc.isOnline = true;\n\t\t\t\t\t\n\t\t\t\t\tif (projection)\n\t\t\t\t\t\tfor (const key in projection)\n\t\t\t\t\t\t\tif (projection[key])\n\t\t\t\t\t\t\t\tuserDoc[key] = user[key];\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tdelete userDoc[key];\n\t\t\t\t\t\n\t\t\t\t\ttransform?.(userDoc);\n\t\t\t\t\t\n\t\t\t\t\treturn userDoc;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t\n\t\t\tonUnsubscribe(subscription) {\n\t\t\t\tif (subscription.changeListener)\n\t\t\t\t\tusers.collection.changeListeners.delete(subscription.changeListener);\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t}\n}\n\nexport class UsersPublication extends CollectionMapPublication {\n\tconstructor(users, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tprojection = { email: 1, name: 1, org: 1, job: 1, avatar: 1 },\n\t\t\tsort = { \"name.last\": 1 },\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tsuper(\"users\", users.collection, ws => ws.user?.abilities.login && {\n\t\t\tquery: {},\n\t\t\tprojection,\n\t\t\tsort\n\t\t}, userDoc => {\n\t\t\t({\n\t\t\t\tinitials: userDoc.initials,\n\t\t\t\tdisplayLabel: userDoc.displayLabel,\n\t\t\t\tavatarUrl: userDoc.avatarUrl,\n\t\t\t\tisOnline: userDoc.isOnline\n\t\t\t} = users.get(userDoc._id));\n\t\t\t\n\t\t\tuserDoc.orgId = userDoc.org;\n\t\t\t\n\t\t\tdelete userDoc.org;\n\t\t\tdelete userDoc.avatar;\n\t\t\t\n\t\t\ttransform?.(userDoc);\n\t\t\t\n\t\t});\n\t\t\n\t}\n}\n\nexport class UsersExtendedPublication extends CollectionMapPublication {\n\tconstructor(users, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tprojection = { _id: 1 },\n\t\t\tsort,\n\t\t\ttriggers = [],\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tif (!triggers.includes(\"roles\"))\n\t\t\ttriggers.push(\"roles\");\n\t\t\n\t\tsuper(\"users.extended\", users.collection, ws => ws.user?.abilities.login?.sections?.includes(\"users\") && {\n\t\t\tquery: { _id: { $in: ws.user.slaveIds } },\n\t\t\tprojection,\n\t\t\tsort,\n\t\t\ttriggers\n\t\t}, (userDoc, [ ws ]) => {\n\t\t\tuserDoc.roleIds = users.get(userDoc._id).ownRoleIds.intersection(ws.user.slaveRoleIds);\n\t\t\t\n\t\t\ttransform?.(userDoc);\n\t\t\t\n\t\t});\n\t\t\n\t}\n}\n\n\nexport class SessionsPublication extends CollectionMapPublication {\n\tconstructor(sessions) {\n\t\tsuper(\"users.people.sessions\", sessions.collection, (ws, userId) =>\n\t\t\tws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.permissiveIds.includes(userId) && {\n\t\t\t\tquery: { user: userId },\n\t\t\t\tprojection: { remoteAddress: 1, isOnline: 1, prolongedAt: 1 },\n\t\t\t\tsort: { prolongedAt: -1 }\n\t\t\t}\n\t\t);\n\t}\n}\n\n\nexport class OrgsPublication extends CollectionMapPublication {\n\tconstructor(orgs, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tprojection = { title: 1 },\n\t\t\tsort = { title: 1 },\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tsuper(\"orgs\", orgs.collection, ws => ws.user?.abilities.login && {\n\t\t\tquery: {},\n\t\t\tprojection,\n\t\t\tsort\n\t\t}, orgDoc => {\n\t\t\t({\n\t\t\t\tinitials: orgDoc.initials,\n\t\t\t\tdisplayLabel: orgDoc.displayLabel\n\t\t\t} = orgs.get(orgDoc._id));\n\t\t\t\n\t\t\ttransform?.(orgDoc);\n\t\t\t\n\t\t});\n\t\t\n\t}\n\t\n}\n\nexport class OrgsExtendedPublication extends CollectionMapPublication {\n\tconstructor(orgs, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tprojection = { note: 1 },\n\t\t\tsort = { _o: 1 },\n\t\t\ttriggers = [],\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tif (!triggers.includes(\"owners\"))\n\t\t\ttriggers.push(\"owners\");\n\t\t\n\t\tsuper(\"orgs.extended\", orgs.collection, ws => ws.user?.abilities.login?.sections?.includes(\"users\") && {\n\t\t\tquery: { _id: { $in: ws.user.slaveIds } },\n\t\t\tprojection,\n\t\t\tsort,\n\t\t\ttriggers\n\t\t}, (orgDoc, [ ws ]) => {\n\t\t\tconst { ownerIds, slaveOrgs, _o } = orgs.get(orgDoc._id);\n\t\t\t\n\t\t\torgDoc.owners = ownerIds.intersection(ws.user.slaveIds);\n\t\t\torgDoc.slaveOrgs = slaveOrgs.intersection(ws.user.slaveOrgs).ids();\n\t\t\torgDoc._o = _o;\n\t\t\t\n\t\t\ttransform?.(orgDoc);\n\t\t\t\n\t\t});\n\t\t\n\t}\n\t\n}\n", "import { setupHandlers } from \"./handlers\";\nimport {\n\tAbilitiesPublication,\n\tOrgsExtendedPublication,\n\tOrgsPublication,\n\tRolesPublication,\n\tSessionsPublication,\n\tUserPublication,\n\tUsersExtendedPublication,\n\tUsersPublication\n} from \"./publications\";\n\n\nexport class UsersServer {\n\tconstructor(wss, options = {}) {\n\t\twss.usersServer = this;\n\t\t\n\t\tconst {\n\t\t\tusers,\n\t\t\tpublication: publicationOptions,\n\t\t\textendedPublication: extendedPublicationOptions,\n\t\t\tuserPublication: userPublicationOptions,\n\t\t\troles = {},\n\t\t\torgs = {},\n\t\t\tgetSessionProps\n\t\t} = options;\n\t\t\n\t\tconst {\n\t\t\tpublication: rolesPublicationOptions\n\t\t} = roles;\n\t\t\n\t\tconst {\n\t\t\tpublication: orgsPublicationOptions,\n\t\t\textendedPublication: orgsExtendedPublicationOptions\n\t\t} = orgs;\n\t\t\n\t\tthis.users = users;\n\t\tthis.getSessionProps = getSessionProps;\n\t\t\n\t\tfor (const user of users.values())\n\t\t\tUsersServer.handleUserCreate(user);\n\t\t\n\t\tusers.abilities.publication = new AbilitiesPublication(users.abilities);\n\t\t\n\t\tusers.roles.publication = new RolesPublication(users.roles, rolesPublicationOptions);\n\t\tusers.on(\"roles-update\", UsersServer.handleRolesUpdate);\n\t\tusers.on(\"roles-role-update\", UsersServer.handleRolesRoleUpdate);\n\t\t\n\t\tusers.publication = new UsersPublication(users, publicationOptions);\n\t\tusers.extendedPublication = new UsersExtendedPublication(users, extendedPublicationOptions);\n\t\tusers.userPublication = new UserPublication(users, userPublicationOptions);\n\t\tusers.on(\"user-create\", UsersServer.handleUserCreate);\n\t\tusers.on(\"user-is-online\", UsersServer.handleUserIsOnline);\n\t\t\n\t\tnew SessionsPublication(users.sessions);\n\t\tusers.on(\"session-delete\", this.#handleSessionDelete);\n\t\t\n\t\tusers.orgs.publication = new OrgsPublication(users.orgs, orgsPublicationOptions);\n\t\tusers.orgs.extendedPublication = new OrgsExtendedPublication(users.orgs, orgsExtendedPublicationOptions);\n\t\tusers.on(\"orgs-update\", UsersServer.handleOrgsUpdate);\n\t\tusers.on(\"orgs-org-update\", UsersServer.handleOrgsOrgUpdate);\n\t\t\n\t\twss.options.WebSocket.prototype.login = UsersServer.login;\n\t\twss.options.WebSocket.prototype.logout = UsersServer.logout;\n\t\twss.options.WebSocket.prototype.setSession = UsersServer.setSession;\n\t\t\n\t\twss.on(\"client-connect\", UsersServer.handleClientConnect);\n\t\t\n\t\tif (wss.requestListener) {\n\t\t\twss.on(\"client-request:login\", UsersServer.handleClientRequestLogin);\n\t\t\twss.on(\"client-request:logout\", UsersServer.handleClientRequestLogout);\n\t\t}\n\t\t\n\t\twss.on(\"client-closed\", UsersServer.handleClientClosed);\n\t\t\n\t\tsetupHandlers(users, wss);\n\t\t\n\t}\n\t\n\twsBySessions = new Map();\n\t\n\tgetDefaultSessionProps({ userAgent, remoteAddress }) {\n\t\treturn {\n\t\t\tuserAgent,\n\t\t\tremoteAddress\n\t\t};\n\t}\n\t\n\t\n\tstatic handleUserCreate(user) {\n\t\tuser.webSockets = new Set();\n\t\t\n\t}\n\t\n\tstatic handleUserIsOnline({ _id, isOnline }) {\n\t\tconst updates = { _id, isOnline };\n\t\t\n\t\tfor (const usersSubscription of this.publication.subscriptions) {\n\t\t\tconst [ ws ] = usersSubscription.args;\n\t\t\tif (ws.user && ws.user._id !== _id)\n\t\t\t\tusersSubscription.handler([ [ \"u\"/* update */, updates, true ] ]);\n\t\t}\n\t\t\n\t}\n\t\n\t#handleSessionDelete = session => this.wsBySessions.get(session)?.setSession(null);\n\t\n\tstatic handleRolesUpdate() {\n\t\tthis.roles.publication.flushInitial();\n\t\t\n\t}\n\t\n\tstatic handleRolesRoleUpdate(_, next) {\n\t\tif (next)\n\t\t\tthis.roles.publication.skip(next);\n\t\t\n\t}\n\t\n\tstatic handleOrgsUpdate() {\n\t\t\n\t\tthis.orgs.publication.flushInitial();\n\t\tthis.orgs.extendedPublication.flushInitial();\n\t\t\n\t}\n\t\n\tstatic handleOrgsOrgUpdate(_, next) {\n\t\tif (next) {\n\t\t\tthis.orgs.publication.skip(next);\n\t\t\tthis.orgs.extendedPublication.skip(next);\n\t\t}\n\t\t\n\t}\n\t\n\t\n\tstatic handleClientConnect(ws) {\n\t\tws.session = null;\n\t\t\n\t}\n\t\n\tstatic handleClientRequestLogin(ws, email, password) {\n\t\treturn ws.login(email, password);\n\t}\n\t\n\tstatic handleClientRequestLogout(ws) {\n\t\treturn ws.logout();\n\t}\n\t\n\tstatic handleClientClosed(ws) {\n\t\tws.session?.offline();\n\t\tws.setSession(null);\n\t\t\n\t}\n\t\n\t\n\tstatic async login(email, password) {\n\t\t\n\t\tconst { usersServer } = this.wss;\n\t\t\n\t\tconst session = await usersServer.users.login(email, password, {\n\t\t\t...usersServer.getDefaultSessionProps(this),\n\t\t\t...usersServer.getSessionProps?.(this),\n\t\t\tisOnline: true\n\t\t});\n\t\t\n\t\tif (session)\n\t\t\tthis.setSession(session);\n\t\t\n\t}\n\t\n\tstatic logout() {\n\t\tif (this.session) {\n\t\t\tthis.wss.usersServer.users.logout(this.session);\n\t\t\tthis.setSession(null);\n\t\t}\n\t\t\n\t}\n\t\n\t\n\tstatic setSession(session, shouldProlong) {\n\t\t\n\t\tconst { usersServer } = this.wss;\n\t\t\n\t\tif (typeof session == \"string\")\n\t\t\tsession = usersServer.users.sessions.get(session) ?? null;\n\t\t\n\t\tif (this.session !== session) {\n\t\t\tif (this.session)\n\t\t\t\tusersServer.wsBySessions.delete(this.session);\n\t\t\t\n\t\t\tif (session) {\n\t\t\t\tthis.session = session;\n\t\t\t\tthis.user = session.user;\n\t\t\t\tthis.lastUserId = this.user._id;\n\t\t\t\t\n\t\t\t\tthis.user.webSockets.add(this);\n\t\t\t\tusersServer.wsBySessions.set(session, this);\n\t\t\t\t\n\t\t\t\tif (shouldProlong)\n\t\t\t\t\tsession.prolong({\n\t\t\t\t\t\t...usersServer.getDefaultSessionProps(this),\n\t\t\t\t\t\t...usersServer.getSessionProps?.(this),\n\t\t\t\t\t\tisOnline: true\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tthis.user.webSockets.delete(this);\n\t\t\t\t\n\t\t\t\tthis.session = null;\n\t\t\t\tdelete this.user;\n\t\t\t}\n\t\t\t\n\t\t\tthis.wss.emit(\"client-session\", this, shouldProlong);\n\t\t}\n\t\t\n\t}\n\t\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
3
|
+
"sources": ["../src/ws/index.js", "../src/ws/handlers.js", "../src/lib/regexps.js", "../src/ws/publications.js", "../src/ws/UsersServer.js"],
|
|
4
|
+
"sourcesContent": ["import \"@nesvet/deprecated-extensions/server\";\n\n\nexport * from \"./UsersServer\";\n", "import { Err } from \"@nesvet/n\";\nimport { Binary } from \"insite-db\";\nimport { regexps } from \"../lib\";\n\n\nconst avatarTypesAccepted = [ \"image/webp\" ];\nconst maxAvatarSize = 1024 * 512;\n\n\nexport function setupHandlers(users, wss) {\n\t\n\t/*\n\t * Users\n\t */\n\t\n\twss.on(\"client-request:users.people.check-email\", (ws, email) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\")) {\n\t\t\tif (!regexps.email.test(email))\n\t\t\t\tthrow new Err(\"Not email\", \"notemail\");\n\t\t\t\n\t\t\tif (users.byEmail.has(email))\n\t\t\t\tthrow new Err(\"Email already exists\", \"exists\");\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.people.add\", async (ws, { roles, org, ...rest }) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\")) {\n\t\t\tif (!roles.length)\n\t\t\t\tthrow new Err(\"Roles shouldn't be empty\", \"emptyroles\");\n\t\t\t\n\t\t\tif (!ws.user.slaveRoleIds.includesAll(roles))\n\t\t\t\tthrow new Err(\"Can't assign role the user is not involved in\", \"forbiddenrole\");\n\t\t\t\n\t\t\tif (org && !ws.user.slaveIds.includes(org))\n\t\t\t\tthrow new Err(\"Can't assign org the user is not master of\", \"forbiddenorg\");\n\t\t\t\n\t\t\tawait users.new({ roles, org, ...rest });\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.people.change-password\", async (ws, _id, newPassword) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.permissiveIds.includes(_id)) {\n\t\t\tif (typeof newPassword != \"string\")\n\t\t\t\tthrow new Err(\"Type of password is incorrect\", \"wrongpasswordtype\");\n\t\t\t\n\t\t\tif (!newPassword)\n\t\t\t\tthrow new Err(\"Password can't be empty\", \"emptypassword\");\n\t\t\t\n\t\t\tawait users.changePassword(_id, newPassword);\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.people.update\", async (ws, _id, updates) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.permissiveIds.includes(_id)) {\n\t\t\tif (updates.roles) {\n\t\t\t\tif (!updates.roles.length)\n\t\t\t\t\tthrow new Err(\"Roles can't be empty\", \"emptyroles\");\n\t\t\t\t\n\t\t\t\tif (!ws.user.slaveRoleIds.includesAll(updates.roles))\n\t\t\t\t\tthrow new Err(\"Can't assign role the user is not involved in\", \"forbiddenrole\");\n\t\t\t\t\n\t\t\t\tconst user = users.get(_id);\n\t\t\t\t\n\t\t\t\tupdates.roles = user.isRoot ? [ \"root\" ] : users.roles.cleanUpIds(user.ownRoleIds.without(ws.user.slaveRoleIds).concat(updates.roles));\n\t\t\t}\n\t\t\t\n\t\t\tif (updates.org && !ws.user.slaveIds.includes(updates.org))\n\t\t\t\tthrow new Err(\"Can't assign org the user is not master of\", \"forbiddenorg\");\n\t\t\t\n\t\t\tawait users.collection.updateOne({ _id }, { $set: updates });\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.people.delete\", async (ws, _id) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveIds.includes(_id))\n\t\t\tawait users.collection.deleteOne({ _id });\n\t\t\n\t});\n\t\n\t\n\t/*\n\t * Sessions\n\t */\n\t\n\twss.on(\"client-request:users.people.destroy-session\", async (ws, sessionId) => {\n\t\tif (\n\t\t\tws.user?.abilities.login?.sections?.includes(\"users\") &&\n\t\t\tws.user.permissiveIds.includes(users.bySessionId.get(sessionId)?._id)\n\t\t)\n\t\t\tawait users.sessions.collection.deleteOne({ _id: sessionId });\n\t\t\n\t});\n\t\n\t\n\t/*\n\t * Avatars\n\t */\n\t\n\tif (wss.incomingTransport) {\n\t\tfunction getAvatarTransferProps(check) {\n\t\t\treturn {\n\t\t\t\t\n\t\t\t\tasync begin(ws, transfer) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t(!check || await check(ws, transfer)) &&\n\t\t\t\t\t\tavatarTypesAccepted.includes(transfer.metadata.type) &&\n\t\t\t\t\t\ttransfer.size <= maxAvatarSize\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tasync end(_, { data, metadata: { type, _id } }) {\n\t\t\t\t\tdata = Binary.createFromBase64(data.slice(data.indexOf(\",\")));\n\t\t\t\t\t\n\t\t\t\t\tconst ts = Date.now().toString(36);\n\t\t\t\t\t\n\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\tusers.avatars.collection.replaceOne({ _id }, {\n\t\t\t\t\t\t\t_id,\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tsize: data.length(),\n\t\t\t\t\t\t\tts,\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t}, { upsert: true }),\n\t\t\t\t\t\tusers.collection.updateOne({ _id }, { $set: { avatar: ts } })\n\t\t\t\t\t]);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t};\n\t\t}\n\t\t\n\t\twss.on(\"client-transfer:users.people.avatar\", getAvatarTransferProps((ws, { metadata: { _id } }) =>\n\t\t\tws.user?.abilities.login?.sections?.includes(\"users\") &&\n\t\t\tws.user.permissiveIds.includes(_id))\n\t\t);\n\t\t\n\t\twss.on(\"client-transfer:user.avatar\", getAvatarTransferProps((ws, transfer) =>\n\t\t\tws.user &&\n\t\t\tws.user._id === transfer.metadata._id\n\t\t));\n\t}\n\t\n\tasync function deleteAvatar(_id) {\n\t\t\n\t\tawait Promise.all([\n\t\t\tusers.avatars.collection.deleteOne({ _id }),\n\t\t\tusers.collection.updateOne({ _id }, { $set: { avatar: null } })\n\t\t]);\n\t\t\n\t}\n\t\n\twss.on(\"client-request:users.people.delete-avatar\", async (ws, _id) =>\n\t\tws.user?.abilities.login?.sections?.includes(\"users\") &&\n\t\tws.user.permissiveIds.includes(_id) &&\n\t\tawait deleteAvatar(_id)\n\t);\n\t\n\twss.on(\"client-request:user.delete-avatar\", async (ws, _id) =>\n\t\tws.user &&\n\t\tws.user._id === _id &&\n\t\tawait deleteAvatar(_id)\n\t);\n\t\n\t\n\t/*\n\t * Orgs\n\t */\n\t\n\twss.on(\"client-request:users.orgs.add\", async (ws, org) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\")) {\n\t\t\tif (!org.title)\n\t\t\t\tthrow new Err(\"Title can't be empty\", \"emptytitle\");\n\t\t\t\n\t\t\tawait users.orgs.new(org, ws.user._id);\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.orgs.update\", async (ws, _id, updates) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveIds.includes(_id)) {\n\t\t\tif (updates.title !== undefined && !updates.title)\n\t\t\t\tthrow new Err(\"Title can't be empty\", \"emptytitle\");\n\t\t\t\n\t\t\tif (updates.owners) {\n\t\t\t\tif (!ws.user.slaveIds.includesAll(updates.owners))\n\t\t\t\t\tthrow new Err(\"Can't assign owners the user is not master of\", \"forbiddenowners\");\n\t\t\t\t\n\t\t\t\tconst org = users.orgs.get(_id);\n\t\t\t\t\n\t\t\t\tupdates.owners = users.sortIds(org.ownerIds.without(ws.user.slaveIds).with(updates.owners.without([ org._id, ...org.slaveOrgs.ids() ])));\n\t\t\t}\n\t\t\t\n\t\t\tawait users.orgs.collection.updateOne({ _id }, { $set: updates });\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.orgs.delete\", async (ws, _id) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveIds.includes(_id))\n\t\t\tawait users.orgs.collectionDelete(_id);\n\t\t\n\t});\n\t\n\t\n\t/*\n\t * Roles\n\t */\n\t\n\twss.on(\"client-request:users.roles.check-id\", (ws, _id) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\")) {\n\t\t\tif (!regexps.role.test(_id))\n\t\t\t\tthrow new Err(\"Role ID is incorrect\", \"notroleid\");\n\t\t\t\n\t\t\tif (users.roles.has(_id))\n\t\t\t\tthrow new Err(\"Role ID already exists\", \"exists\");\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.roles.add\", async (ws, role) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\"))\n\t\t\tawait users.roles.new(role);\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.roles.update\", async (ws, _id, { abilities, ...updates }) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveRoleIds.includes(_id)) {\n\t\t\tif (updates.involves)\n\t\t\t\tif (ws.user.slaveRoleIds.includesAll(updates.involves)) {\n\t\t\t\t\tupdates.involves.remove(_id);\n\t\t\t\t\t\n\t\t\t\t\tconst role = users.roles.get(_id);\n\t\t\t\t\tfor (const involvedRoleId of updates.involves)\n\t\t\t\t\t\tif (users.roles.get(involvedRoleId).involves.has(role))\n\t\t\t\t\t\t\tupdates.involves.remove(involvedRoleId);\n\t\t\t\t\t\n\t\t\t\t\tupdates.involves = users.roles.cleanUpIds(updates.involves);\n\t\t\t\t} else\n\t\t\t\t\tthrow new Err(\"Can't assign role the user is not involved in\", \"forbiddenrole\");\n\t\t\t\n\t\t\tawait users.roles.collection.updateOne({ _id }, { $set: updates });\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-request:users.roles.set-ability\", async (ws, _id, abilityId, paramId, value) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveRoleIds.includes(_id) && ws.user.abilities[abilityId]) {\n\t\t\tconst abilities = structuredClone(users.roles.get(_id).ownAbilities);\n\t\t\tlet shouldUpdate;\n\t\t\t\n\t\t\tif (paramId) {\n\t\t\t\tif (!abilities[abilityId])\n\t\t\t\t\tabilities[abilityId] = {};\n\t\t\t\tconst param = users.abilities.get(abilityId).params?.find(anotherParam => anotherParam._id === paramId);\n\t\t\t\tif (param)\n\t\t\t\t\tif (param.type === \"number\") {\n\t\t\t\t\t\tif (ws.user.abilities[abilityId][paramId] >= value) {\n\t\t\t\t\t\t\tabilities[abilityId][paramId] = value;\n\t\t\t\t\t\t\tshouldUpdate = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (param.type === \"items\" && ws.user.abilities[abilityId][paramId]?.includesAll(value)) {\n\t\t\t\t\t\tabilities[abilityId][paramId] = value;\n\t\t\t\t\t\tshouldUpdate = true;\n\t\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (value)\n\t\t\t\t\tabilities[abilityId] = users.abilities.getMinimumOf(abilityId);\n\t\t\t\telse\n\t\t\t\t\t(function resolve(schema) {\n\t\t\t\t\t\tdelete abilities[schema._id];\n\t\t\t\t\t\tif (schema.subAbilities)\n\t\t\t\t\t\t\tfor (const subSchema of schema.subAbilities)\n\t\t\t\t\t\t\t\tif (abilities[subSchema._id])\n\t\t\t\t\t\t\t\t\tresolve(subSchema);\n\t\t\t\t\t\t\n\t\t\t\t\t})(users.abilities.get(abilityId));\n\t\t\t\t\n\t\t\t\tshouldUpdate = true;\n\t\t\t}\n\t\t\t\n\t\t\tif (shouldUpdate)\n\t\t\t\tawait users.roles.collection.updateOne({ _id }, { $set: { abilities } });\n\t\t}\n\t\t\n\t});\n\t\n\twss.on(\"client-message:users.roles.delete\", async (ws, _id) => {\n\t\tif (ws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.slaveRoleIds.includes(_id))\n\t\t\tawait users.roles.collectionDelete(_id);\n\t\t\n\t});\n\t\n}\n", "export const regexps = {\n\t_id: /^[\\dA-Fa-f]{24}$/,\n\temail: /^[^\\s@]{1,63}@[^\\s@]{1,63}\\.[^\\s@]{1,63}$/,\n\targon2: /^\\$argon2(?:i|d|id)\\$v=\\d+\\$m=\\d+,t=\\d+,p=\\d+(?:\\$[\\d+/A-Za-z]+){2}$/,\n\tsessionId: /^[\\dA-Fa-f]{16,32}\\$[\\dA-Fa-f]{16,32}$/,\n\trole: /^[\\d_a-z-]{1,64}$/,\n\tip: /^(?:\\d{1,3}\\.){3}\\d{1,3}$/\n};\n", "import { CollectionMapPublication, Publication } from \"insite-subscriptions-server\";\n\n\nexport class AbilitiesPublication extends Publication {\n\tconstructor(abilities) {\n\t\tsuper(\"abilities\", {\n\t\t\t\n\t\t\tfetch({ user }) {\n\t\t\t\tif (user?.abilities.login?.sections?.includes(\"users\"))\n\t\t\t\t\treturn { abilities: abilities.getSchemeFor(user) };\n\t\t\t\t\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t\n\t\t});\n\t}\n}\n\n\nexport class RolesPublication extends CollectionMapPublication {\n\tconstructor(roles, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tprojection = { title: 1, description: 1 },\n\t\t\tsort = { _o: 1 },\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tObject.assign(projection, { involves: 1, abilities: 1 });\n\t\t\n\t\tsuper(\"roles\", roles.collection, ws => ws.user?.abilities.login?.sections?.includes(\"users\") && {\n\t\t\tquery: { _id: { $in: ws.user.slaveRoleIds } },\n\t\t\tprojection,\n\t\t\tsort\n\t\t}, roleDoc => {\n\t\t\tconst { involves, abilities, inheritedAbilities, displayTitle, _o } = roles.get(roleDoc._id);\n\t\t\t\n\t\t\tif (roleDoc.involves) {\n\t\t\t\troleDoc.ownInvolves = roleDoc.involves;\n\t\t\t\troleDoc.involves = involves.ids();\n\t\t\t\troleDoc.abilities = abilities;\n\t\t\t\troleDoc.inheritedAbilities = inheritedAbilities;\n\t\t\t}\n\t\t\t\n\t\t\tif (projection.title)\n\t\t\t\troleDoc.displayTitle = displayTitle;\n\t\t\t\n\t\t\troleDoc._o = _o;\n\t\t\t\n\t\t\ttransform?.(roleDoc);\n\t\t\t\n\t\t});\n\t\t\n\t}\n\t\n}\n\n\nexport class UserPublication extends Publication {\n\tconstructor(users, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tfieldsToUpdate = [],\n\t\t\tprojection,\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tfor (const key of [\n\t\t\t\"email\",\n\t\t\t\"name\",\n\t\t\t\"name.first\",\n\t\t\t\"name.middle\",\n\t\t\t\"name.last\",\n\t\t\t\"org\",\n\t\t\t\"job\",\n\t\t\t\"avatar\"\n\t\t])\n\t\t\tif (!projection || projection[key] !== 0)\n\t\t\t\tfieldsToUpdate.push(key);\n\t\t\n\t\tsuper(\"user\", {\n\t\t\t\n\t\t\tonSubscribe(subscription) {\n\t\t\t\tconst [ { user } ] = subscription.args;\n\t\t\t\t\n\t\t\t\tif (user) {\n\t\t\t\t\tconst { _id } = user;\n\t\t\t\t\t\n\t\t\t\t\tsubscription.changeListener = next => {\n\t\t\t\t\t\tif (next.documentKey._id === _id)\n\t\t\t\t\t\t\tswitch (next.operationType) {\n\t\t\t\t\t\t\t\tcase \"update\":\n\t\t\t\t\t\t\t\t\tif (!Object.keys(next.updateDescription.updatedFields).includesAny(fieldsToUpdate))\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tcase \"replace\":// eslint-disable-line no-fallthrough\n\t\t\t\t\t\t\t\tcase \"delete\":\n\t\t\t\t\t\t\t\t\tsubscription.changed(next);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tusers.collection.changeListeners.add(subscription.changeListener);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tfetch({ user, session }, isSessionIdRequired) {\n\t\t\t\tif (user) {\n\t\t\t\t\tconst userDoc = Object.pick(user, \"_id\", \"email\", \"name\", \"initials\", \"displayLabel\", \"job\", \"avatarUrl\", \"abilities\", \"slaveIds\");\n\t\t\t\t\t\n\t\t\t\t\tuserDoc.orgId = user.org._id;\n\t\t\t\t\tuserDoc.sessionId = isSessionIdRequired ? session._id : undefined;\n\t\t\t\t\tuserDoc.isOnline = true;\n\t\t\t\t\t\n\t\t\t\t\tif (projection)\n\t\t\t\t\t\tfor (const key in projection)\n\t\t\t\t\t\t\tif (projection[key])\n\t\t\t\t\t\t\t\tuserDoc[key] = user[key];\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tdelete userDoc[key];\n\t\t\t\t\t\n\t\t\t\t\ttransform?.(userDoc);\n\t\t\t\t\t\n\t\t\t\t\treturn userDoc;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t\n\t\t\tonUnsubscribe(subscription) {\n\t\t\t\tif (subscription.changeListener)\n\t\t\t\t\tusers.collection.changeListeners.delete(subscription.changeListener);\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t}\n}\n\nexport class UsersPublication extends CollectionMapPublication {\n\tconstructor(users, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tprojection = { email: 1, name: 1, org: 1, job: 1, avatar: 1 },\n\t\t\tsort = { \"name.last\": 1 },\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tsuper(\"users\", users.collection, ws => ws.user?.abilities.login && {\n\t\t\tquery: {},\n\t\t\tprojection,\n\t\t\tsort\n\t\t}, userDoc => {\n\t\t\t({\n\t\t\t\tinitials: userDoc.initials,\n\t\t\t\tdisplayLabel: userDoc.displayLabel,\n\t\t\t\tavatarUrl: userDoc.avatarUrl,\n\t\t\t\tisOnline: userDoc.isOnline\n\t\t\t} = users.get(userDoc._id));\n\t\t\t\n\t\t\tuserDoc.orgId = userDoc.org;\n\t\t\t\n\t\t\tdelete userDoc.org;\n\t\t\tdelete userDoc.avatar;\n\t\t\t\n\t\t\ttransform?.(userDoc);\n\t\t\t\n\t\t});\n\t\t\n\t}\n}\n\nexport class UsersExtendedPublication extends CollectionMapPublication {\n\tconstructor(users, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tprojection = { _id: 1 },\n\t\t\tsort,\n\t\t\ttriggers = [],\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tif (!triggers.includes(\"roles\"))\n\t\t\ttriggers.push(\"roles\");\n\t\t\n\t\tsuper(\"users.extended\", users.collection, ws => ws.user?.abilities.login?.sections?.includes(\"users\") && {\n\t\t\tquery: { _id: { $in: ws.user.slaveIds } },\n\t\t\tprojection,\n\t\t\tsort,\n\t\t\ttriggers\n\t\t}, (userDoc, [ ws ]) => {\n\t\t\tuserDoc.roleIds = users.get(userDoc._id).ownRoleIds.intersection(ws.user.slaveRoleIds);\n\t\t\t\n\t\t\ttransform?.(userDoc);\n\t\t\t\n\t\t});\n\t\t\n\t}\n}\n\n\nexport class SessionsPublication extends CollectionMapPublication {\n\tconstructor(sessions) {\n\t\tsuper(\"users.people.sessions\", sessions.collection, (ws, userId) =>\n\t\t\tws.user?.abilities.login?.sections?.includes(\"users\") && ws.user.permissiveIds.includes(userId) && {\n\t\t\t\tquery: { user: userId },\n\t\t\t\tprojection: { remoteAddress: 1, isOnline: 1, prolongedAt: 1 },\n\t\t\t\tsort: { prolongedAt: -1 }\n\t\t\t}\n\t\t);\n\t}\n}\n\n\nexport class OrgsPublication extends CollectionMapPublication {\n\tconstructor(orgs, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tprojection = { title: 1 },\n\t\t\tsort = { title: 1 },\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tsuper(\"orgs\", orgs.collection, ws => ws.user?.abilities.login && {\n\t\t\tquery: {},\n\t\t\tprojection,\n\t\t\tsort\n\t\t}, orgDoc => {\n\t\t\t({\n\t\t\t\tinitials: orgDoc.initials,\n\t\t\t\tdisplayLabel: orgDoc.displayLabel\n\t\t\t} = orgs.get(orgDoc._id));\n\t\t\t\n\t\t\ttransform?.(orgDoc);\n\t\t\t\n\t\t});\n\t\t\n\t}\n\t\n}\n\nexport class OrgsExtendedPublication extends CollectionMapPublication {\n\tconstructor(orgs, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tprojection = { note: 1 },\n\t\t\tsort = { _o: 1 },\n\t\t\ttriggers = [],\n\t\t\ttransform\n\t\t} = options;\n\t\t\n\t\tif (!triggers.includes(\"owners\"))\n\t\t\ttriggers.push(\"owners\");\n\t\t\n\t\tsuper(\"orgs.extended\", orgs.collection, ws => ws.user?.abilities.login?.sections?.includes(\"users\") && {\n\t\t\tquery: { _id: { $in: ws.user.slaveIds } },\n\t\t\tprojection,\n\t\t\tsort,\n\t\t\ttriggers\n\t\t}, (orgDoc, [ ws ]) => {\n\t\t\tconst { ownerIds, slaveOrgs, _o } = orgs.get(orgDoc._id);\n\t\t\t\n\t\t\torgDoc.owners = ownerIds.intersection(ws.user.slaveIds);\n\t\t\torgDoc.slaveOrgs = slaveOrgs.intersection(ws.user.slaveOrgs).ids();\n\t\t\torgDoc._o = _o;\n\t\t\t\n\t\t\ttransform?.(orgDoc);\n\t\t\t\n\t\t});\n\t\t\n\t}\n\t\n}\n", "import { setupHandlers } from \"./handlers\";\nimport {\n\tAbilitiesPublication,\n\tOrgsExtendedPublication,\n\tOrgsPublication,\n\tRolesPublication,\n\tSessionsPublication,\n\tUserPublication,\n\tUsersExtendedPublication,\n\tUsersPublication\n} from \"./publications\";\n\n\nexport class UsersServer {\n\tconstructor(wss, options = {}) {\n\t\twss.usersServer = this;\n\t\t\n\t\tconst {\n\t\t\tusers,\n\t\t\tpublication: publicationOptions,\n\t\t\textendedPublication: extendedPublicationOptions,\n\t\t\tuserPublication: userPublicationOptions,\n\t\t\troles = {},\n\t\t\torgs = {},\n\t\t\tgetSessionProps\n\t\t} = options;\n\t\t\n\t\tconst {\n\t\t\tpublication: rolesPublicationOptions\n\t\t} = roles;\n\t\t\n\t\tconst {\n\t\t\tpublication: orgsPublicationOptions,\n\t\t\textendedPublication: orgsExtendedPublicationOptions\n\t\t} = orgs;\n\t\t\n\t\tthis.users = users;\n\t\tthis.getSessionProps = getSessionProps;\n\t\t\n\t\tfor (const user of users.values())\n\t\t\tUsersServer.handleUserCreate(user);\n\t\t\n\t\tusers.abilities.publication = new AbilitiesPublication(users.abilities);\n\t\t\n\t\tusers.roles.publication = new RolesPublication(users.roles, rolesPublicationOptions);\n\t\tusers.on(\"roles-update\", UsersServer.handleRolesUpdate);\n\t\tusers.on(\"roles-role-update\", UsersServer.handleRolesRoleUpdate);\n\t\t\n\t\tusers.publication = new UsersPublication(users, publicationOptions);\n\t\tusers.extendedPublication = new UsersExtendedPublication(users, extendedPublicationOptions);\n\t\tusers.userPublication = new UserPublication(users, userPublicationOptions);\n\t\tusers.on(\"user-create\", UsersServer.handleUserCreate);\n\t\tusers.on(\"user-is-online\", UsersServer.handleUserIsOnline);\n\t\t\n\t\tnew SessionsPublication(users.sessions);\n\t\tusers.on(\"session-delete\", this.#handleSessionDelete);\n\t\t\n\t\tusers.orgs.publication = new OrgsPublication(users.orgs, orgsPublicationOptions);\n\t\tusers.orgs.extendedPublication = new OrgsExtendedPublication(users.orgs, orgsExtendedPublicationOptions);\n\t\tusers.on(\"orgs-update\", UsersServer.handleOrgsUpdate);\n\t\tusers.on(\"orgs-org-update\", UsersServer.handleOrgsOrgUpdate);\n\t\t\n\t\twss.options.WebSocket.prototype.login = UsersServer.login;\n\t\twss.options.WebSocket.prototype.logout = UsersServer.logout;\n\t\twss.options.WebSocket.prototype.setSession = UsersServer.setSession;\n\t\t\n\t\twss.on(\"client-connect\", UsersServer.handleClientConnect);\n\t\t\n\t\tif (wss.requestListener) {\n\t\t\twss.on(\"client-request:login\", UsersServer.handleClientRequestLogin);\n\t\t\twss.on(\"client-request:logout\", UsersServer.handleClientRequestLogout);\n\t\t}\n\t\t\n\t\twss.on(\"client-closed\", UsersServer.handleClientClosed);\n\t\t\n\t\tsetupHandlers(users, wss);\n\t\t\n\t}\n\t\n\twsBySessions = new Map();\n\t\n\tgetDefaultSessionProps({ userAgent, remoteAddress }) {\n\t\treturn {\n\t\t\tuserAgent,\n\t\t\tremoteAddress\n\t\t};\n\t}\n\t\n\t\n\tstatic handleUserCreate(user) {\n\t\tuser.webSockets = new Set();\n\t\t\n\t}\n\t\n\tstatic handleUserIsOnline({ _id, isOnline }) {\n\t\tconst updates = { _id, isOnline };\n\t\t\n\t\tfor (const usersSubscription of this.publication.subscriptions) {\n\t\t\tconst [ ws ] = usersSubscription.args;\n\t\t\tif (ws.user && ws.user._id !== _id)\n\t\t\t\tusersSubscription.handler([ [ \"u\"/* update */, updates, true ] ]);\n\t\t}\n\t\t\n\t}\n\t\n\t#handleSessionDelete = session => this.wsBySessions.get(session)?.setSession(null);\n\t\n\tstatic handleRolesUpdate() {\n\t\tthis.roles.publication.flushInitial();\n\t\t\n\t}\n\t\n\tstatic handleRolesRoleUpdate(_, next) {\n\t\tif (next)\n\t\t\tthis.roles.publication.skip(next);\n\t\t\n\t}\n\t\n\tstatic handleOrgsUpdate() {\n\t\t\n\t\tthis.orgs.publication.flushInitial();\n\t\tthis.orgs.extendedPublication.flushInitial();\n\t\t\n\t}\n\t\n\tstatic handleOrgsOrgUpdate(_, next) {\n\t\tif (next) {\n\t\t\tthis.orgs.publication.skip(next);\n\t\t\tthis.orgs.extendedPublication.skip(next);\n\t\t}\n\t\t\n\t}\n\t\n\t\n\tstatic handleClientConnect(ws) {\n\t\tws.session = null;\n\t\t\n\t}\n\t\n\tstatic handleClientRequestLogin(ws, email, password) {\n\t\treturn ws.login(email, password);\n\t}\n\t\n\tstatic handleClientRequestLogout(ws) {\n\t\treturn ws.logout();\n\t}\n\t\n\tstatic handleClientClosed(ws) {\n\t\tws.session?.offline();\n\t\tws.setSession(null);\n\t\t\n\t}\n\t\n\t\n\tstatic async login(email, password) {\n\t\t\n\t\tconst { usersServer } = this.wss;\n\t\t\n\t\tconst session = await usersServer.users.login(email, password, {\n\t\t\t...usersServer.getDefaultSessionProps(this),\n\t\t\t...usersServer.getSessionProps?.(this),\n\t\t\tisOnline: true\n\t\t});\n\t\t\n\t\tif (session)\n\t\t\tthis.setSession(session);\n\t\t\n\t}\n\t\n\tstatic logout() {\n\t\tif (this.session) {\n\t\t\tthis.wss.usersServer.users.logout(this.session);\n\t\t\tthis.setSession(null);\n\t\t}\n\t\t\n\t}\n\t\n\t\n\tstatic setSession(session, shouldProlong) {\n\t\t\n\t\tconst { usersServer } = this.wss;\n\t\t\n\t\tif (typeof session == \"string\")\n\t\t\tsession = usersServer.users.sessions.get(session) ?? null;\n\t\t\n\t\tif (this.session !== session) {\n\t\t\tif (this.session)\n\t\t\t\tusersServer.wsBySessions.delete(this.session);\n\t\t\t\n\t\t\tif (session) {\n\t\t\t\tthis.session = session;\n\t\t\t\tthis.user = session.user;\n\t\t\t\tthis.lastUserId = this.user._id;\n\t\t\t\t\n\t\t\t\tthis.user.webSockets.add(this);\n\t\t\t\tusersServer.wsBySessions.set(session, this);\n\t\t\t\t\n\t\t\t\tif (shouldProlong)\n\t\t\t\t\tsession.prolong({\n\t\t\t\t\t\t...usersServer.getDefaultSessionProps(this),\n\t\t\t\t\t\t...usersServer.getSessionProps?.(this),\n\t\t\t\t\t\tisOnline: true\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tthis.user.webSockets.delete(this);\n\t\t\t\t\n\t\t\t\tthis.session = null;\n\t\t\t\tdelete this.user;\n\t\t\t}\n\t\t\t\n\t\t\tthis.wss.emit(\"client-session\", this, shouldProlong);\n\t\t}\n\t\t\n\t}\n\t\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["Err", "Binary", "regexps", "avatarTypesAccepted", "maxAvatarSize", "setupHandlers", "users", "wss", "ws", "email", "regexps", "Err", "roles", "org", "rest", "_id", "newPassword", "updates", "user", "sessionId", "getAvatarTransferProps", "check", "transfer", "_", "data", "type", "Binary", "ts", "deleteAvatar", "role", "abilities", "involvedRoleId", "abilityId", "paramId", "value", "shouldUpdate", "param", "anotherParam", "resolve", "schema", "subSchema", "CollectionMapPublication", "Publication", "AbilitiesPublication", "abilities", "user", "RolesPublication", "roles", "options", "projection", "sort", "transform", "ws", "roleDoc", "involves", "inheritedAbilities", "displayTitle", "_o", "UserPublication", "users", "fieldsToUpdate", "key", "subscription", "_id", "next", "session", "isSessionIdRequired", "userDoc", "UsersPublication", "UsersExtendedPublication", "triggers", "SessionsPublication", "sessions", "userId", "OrgsPublication", "orgs", "orgDoc", "OrgsExtendedPublication", "ownerIds", "slaveOrgs", "UsersServer", "_UsersServer", "wss", "options", "users", "publicationOptions", "extendedPublicationOptions", "userPublicationOptions", "roles", "orgs", "getSessionProps", "rolesPublicationOptions", "orgsPublicationOptions", "orgsExtendedPublicationOptions", "user", "AbilitiesPublication", "RolesPublication", "UsersPublication", "UsersExtendedPublication", "UserPublication", "SessionsPublication", "#handleSessionDelete", "OrgsPublication", "OrgsExtendedPublication", "setupHandlers", "userAgent", "remoteAddress", "_id", "isOnline", "updates", "usersSubscription", "ws", "session", "_", "next", "email", "password", "usersServer", "shouldProlong"]
|
|
7
7
|
}
|