Socket
Socket
Sign inDemoInstall

@roomservice/browser

Package Overview
Dependencies
Maintainers
2
Versions
126
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@roomservice/browser - npm Package Compare versions

Comparing version 2.0.2 to 2.1.0-0

51

dist/browser.cjs.development.js

@@ -467,3 +467,3 @@ 'use strict';

_proto.toArray = function toArray() {
_proto.postOrderTraverse = function postOrderTraverse() {
this.sortLog(); // -- Convert the log into a regular tree

@@ -478,7 +478,6 @@

var vals = [];
var children = [];
for (var _iterator2 = _createForOfIteratorHelperLoose(t.children), _step2; !(_step2 = _iterator2()).done;) {
var child = _step2.value;
var value = child.value;

@@ -488,3 +487,3 @@ if (typeof child.value !== 'string') {

if (child.value.t === '') {
vals = vals.concat([].concat(postorder(child)));
children = children.concat([].concat(postorder(child)));
continue;

@@ -496,6 +495,6 @@ }

vals = vals.concat([value].concat(postorder(child)));
children = children.concat([child].concat(postorder(child)));
}
return vals;
return children;
}

@@ -506,2 +505,8 @@

_proto.toArray = function toArray() {
return this.postOrderTraverse().map(function (c) {
return c.value;
});
};
_createClass(ReverseTree, [{

@@ -680,3 +685,3 @@ key: "length",

_proto.push = function push(val) {
_proto.pushOne = function pushOne(val) {
var lastID = this.rt.lastID();

@@ -692,2 +697,23 @@ var escaped = escape(val); // Local

_proto.push = function push() {
var self;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
for (var _i = 0, _args = args; _i < _args.length; _i++) {
var arg = _args[_i];
self = this.pushOne(arg);
}
return self;
};
_proto.map = function map(fn) {
return this.rt.postOrderTraverse().map(function (m, i) {
return fn(unescape(m.value), i, m.id);
});
};
_proto.toArray = function toArray() {

@@ -787,2 +813,13 @@ return this.rt.toArray().map(function (m) {

_proto.toObject = function toObject() {
var obj = {};
for (var _iterator = _createForOfIteratorHelperLoose(this.keys), _step; !(_step = _iterator()).done;) {
var key = _step.value;
obj[key] = this.get(key);
}
return obj;
};
_proto["delete"] = function _delete(key) {

@@ -789,0 +826,0 @@ // local

2

dist/browser.cjs.production.min.js

@@ -1,2 +0,2 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t,e=(t=require("tiny-invariant"))&&"object"==typeof t&&"default"in t?t.default:t;function r(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function n(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),t}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function o(t,e){var r;if("undefined"==typeof Symbol||null==t[Symbol.iterator]){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return i(t,void 0);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(t,void 0):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(r=t[Symbol.iterator]()).next.bind(r)}var s=function(){function t(t){var e=this;this.callbacks={},this.lastTime=0,this.msgsThisMilisecond=0,this.conn=t,this.conn.onmessage=function(t){var r=JSON.parse(t.data);e.dispatch(r.type,r.body)}}var e=t.prototype;return e.timestamp=function(){var t=Date.now();return t===this.lastTime?this.msgsThisMilisecond++:(this.lastTime=t,this.msgsThisMilisecond=0),t+":"+this.msgsThisMilisecond},e.send=function(t,e){var r=this,n=this.timestamp();this.conn.readyState!==this.conn.CONNECTING?this.conn.send(JSON.stringify({type:t,ts:n,ver:0,body:e})):setTimeout((function(){r.send(t,e)}),100+100*Math.random())},e.bind=function(t,e){return this.callbacks[t]=this.callbacks[t]||[],this.callbacks[t].push(e),e},e.unbind=function(t,e){this.callbacks[t]=this.callbacks[t].filter((function(t){return t!==e}))},e.dispatch=function(t,e){var r=this.callbacks[t];if(r)for(var n=0;n<r.length;n++)r[n](e)},t}();function c(t,e){if("root"===e)return"root";var r=e.split(":");return r[0]+":"+t.actors[parseInt(r[1])]}var h=function(){function t(t){this.count=0,this.actor=t,this.nodes={},this.log=[]}var r=t.prototype;return r.import=function(t,r){t||e(!1);for(var n=t.lists[r],i=n.afters||[],o=n.ids||[],s=n.values||[],h=0;h<i.length;h++){var u={after:c(t,i[h]),id:c(t,o[h]),value:s[h]};this.nodes[u.id]=u,this.log.push(u)}this.count=this.log.length},r.get=function(t){if(this.nodes[t])return this.nodes[t].value},r.insert=function(t,r,n){this.log||e(!1);var i=n;i||(i=this.count+":"+this.actor),this.count++;var o={after:t,value:r,id:i};return this.nodes[i]=o,this.log.push(o),i},r.put=function(t,e){this.nodes[t]&&(this.nodes[t].value=e)},r.has=function(t){return!!this.nodes[t]},r.delete=function(t){this.nodes[t]&&(this.nodes[t].value={t:""})},r.toTree=function(){for(var t,e={children:[],id:"root",value:""},r={root:e},n=o(this.log);!(t=n()).done;){var i=t.value,s={children:[],id:i.id,value:i.value};if(r[i.id]=s,"root"===i.after)e.children.push(s);else{if(!r[i.after])continue;r[i.after].children.push(s)}}return e},r.sortLog=function(){this.log.sort((function(t,e){var r=t.id.split(":"),n=r[0],i=r[1],o=e.id.split(":"),s=o[0];return n===s?i.localeCompare(o[1]):parseInt(n)-parseInt(s)}))},r.lastID=function(){return 0===this.log.length?"root":(this.sortLog(),function t(e){return e.children&&0!==e.children.length?t(e.children[e.children.length-1]):e}(this.toTree()).id)},r.toArray=function(){return this.sortLog(),function t(e){if(!e.children||0===e.children.length)return[];for(var r,n=[],i=o(e.children);!(r=i()).done;){var s=r.value,c=s.value;if("string"!=typeof s.value){if(""===s.value.t){n=n.concat([].concat(t(s)));continue}throw new Error("Unimplemented")}n=n.concat([c].concat(t(s)))}return n}(this.toTree())},n(t,[{key:"length",get:function(){return Object.keys(this.nodes).length}}]),t}();function u(t){return JSON.stringify(t)}function a(t){try{return JSON.parse(t)}catch(e){return t}}var d=function(){function t(t,r,n,i,o,s){this.itemIDs=[],this.roomID=r,this.docID=n,this.id=i,this.ws=o,this.rt=new h(s),t.lists[i]||e(!1),this.rt.import(t,i);for(var u=t.lists[i].ids||[],a=0;a<u.length;a++){var d=t.lists[i].values[a];"object"==typeof d&&""===d.t||this.itemIDs.push(c(t,u[a]))}}var r=t.prototype;return r.sendCmd=function(t){this.ws.send("doc:cmd",{room:this.roomID,args:t})},r.clone=function(){return Object.assign(Object.create(Object.getPrototypeOf(this)),this)},r.dangerouslyUpdateClientDirectly=function(t){if(t.length<3)throw new Error("Unexpected command: "+t);var e=t[0];if(t[1]!==this.docID||t[2]!==this.id)throw new Error("Command unexpectedly routed to the wrong client");switch(e){case"lins":var r=t[3],n=t[4],i=t[5];this.itemIDs.splice(this.itemIDs.findIndex((function(t){return t===r}))+1,0,n),this.rt.insert(r,i,n);break;case"lput":this.rt.put(t[3],t[4]);break;case"ldel":var o=t[3];this.rt.delete(o),this.itemIDs.splice(this.itemIDs.findIndex((function(t){return t===o})),1);break;default:throw new Error("Unexpected command keyword: "+e)}return this.clone()},r.get=function(t){var e=this.itemIDs[t];if(e){var r=this.rt.get(e);if(r){if("object"==typeof r){if(""===r.t)return;throw new Error("Unimplemented references")}return a(r)}}},r.set=function(t,e){var r=this.itemIDs[t];if(!r)throw new Error("Index '"+t+"' doesn't already exist. Try .push() or .insertAfter() instead.");var n=u(e);return this.rt.put(r,n),this.sendCmd(["lput",this.docID,this.id,r,n]),this.clone()},r.delete=function(t){if(0===this.itemIDs.length)return this.clone();var e=this.itemIDs[t];return e?(this.rt.delete(e),this.itemIDs.splice(t,1),this.sendCmd(["ldel",this.docID,this.id,e]),this.clone()):(console.warn("Unknown index: ",t,this.itemIDs),this.clone())},r.insertAfter=function(t,e){var r=this.itemIDs[t];if(!r)throw new RangeError("List '"+this.id+"' has no index: '"+t+"'");var n=u(e),i=this.rt.insert(r,n);return this.itemIDs.splice(t,0,i),this.sendCmd(["lins",this.docID,this.id,r,i,n]),this.clone()},r.push=function(t){var e=this.rt.lastID(),r=u(t),n=this.rt.insert(e,r);return this.itemIDs.push(n),this.sendCmd(["lins",this.docID,this.id,e,n,r]),this.clone()},r.toArray=function(){return this.rt.toArray().map((function(t){return a(t)}))},t}(),l=function(){function t(t,e,r,n,i){for(var o in this.roomID=e,this.docID=r,this.id=n,this.ws=i,this.store={},t){var s=t[o];"string"==typeof s&&(this.store[o]=a(s))}}var e=t.prototype;return e.sendCmd=function(t){this.ws.send("doc:cmd",{room:this.roomID,args:t})},e.clone=function(){return Object.assign(Object.create(Object.getPrototypeOf(this)),this)},e.dangerouslyUpdateClientDirectly=function(t){if(t.length<3)throw new Error("Unexpected command: "+t);var e=t[0];if(t[1]!==this.docID||t[2]!==this.id)throw new Error("Command unexpectedly routed to the wrong client");switch(e){case"mput":if(5!==t.length){console.error("Malformed command ",t);break}this.store[t[3]]=a(t[4]);break;case"mdel":if(4!==t.length){console.error("Malformed command ",t);break}delete this.store[t[3]];break;default:throw new Error("Unexpected command keyword: "+e)}return this.clone()},e.get=function(t){return this.store[t]},e.set=function(t,e){var r=u(e);return this.store[t]=e,this.sendCmd(["mput",this.docID,this.id,t,r]),this.clone()},e.delete=function(t){return delete this.store[t],this.sendCmd(["mdel",this.docID,this.id,t]),this.clone()},n(t,[{key:"keys",get:function(){return Object.keys(this.store)}}]),t}(),f=function(){function t(t,e,r,n){this.roomID=t,this.ws=e,this.actor=r,this.token=n,this.cache={},this.send=function(t,e,r){void 0===r&&(r=!1);var n=null,i=!0;return function(){var e=arguments,o=this,s=r&&i,c=function(){t.apply(o,e),n=null};s&&(i=!1,c()),n||(n=setTimeout(c,40))}}(this.ws.send.bind(this.ws))}var e=t.prototype;return e.getAll=function(t){try{var e=this;return Promise.resolve(function(t,e,r,n){try{return Promise.resolve(fetch("https://super.roomservice.dev/presence/"+r+"/"+encodeURIComponent(n),{headers:{Authorization:"Bearer: "+e}})).then((function(t){return Promise.resolve(t.json()).then((function(t){for(var e in t)if("string"==typeof t[e].value){var r=void 0;try{r=JSON.parse(t[e].value)}catch(t){}r&&(t[e].value=r)}return t}))}))}catch(t){return Promise.reject(t)}}(0,e.token,e.roomID,t)).then((function(r){return e.cache[t]=r,e.withoutExpiredAndSelf(t)}))}catch(t){return Promise.reject(t)}},e.withoutExpiredAndSelf=function(t){var e={};for(var r in this.cache[t]){var n=this.cache[t][r];new Date>n.expAt?delete this.cache[t][r]:e[r]=n.value}return e},e.withoutActorOrExpired=function(t){var e={};for(var r in this.cache)for(var n in this.cache[r]){var i=this.cache[r][n];i&&(n===t&&this.cache[r][n]||new Date>i.expAt?delete this.cache[r][n]:e[n]=i.value)}return e},e.set=function(t,e,r){var n=r||60,i=Math.round((new Date).getTime()/1e3)+n;return this.send("presence:cmd",{room:this.roomID,key:t,value:JSON.stringify(e),expAt:i}),this.cache[t]||(this.cache[t]={}),this.cache[t][this.actor]={value:e,expAt:new Date(1e3*i)},this.withoutExpiredAndSelf(t)},e.dangerouslyUpdateClientDirectly=function(t,e){if("room:rm_guest"===t)return this.withoutActorOrExpired(e.guest);if(e.room!==this.roomID)return!1;if(e.from===this.actor)return!1;var r={expAt:new Date(1e3*e.expAt),value:JSON.parse(e.value)};return this.cache[e.key]||(this.cache[e.key]={}),this.cache[e.key][e.from]=r,this.withoutExpiredAndSelf(e.key)},n(t,[{key:"me",get:function(){return console.warn("presence.me() is deprecated and will be removed in a future version!"),this.actor}}]),t}();function m(t){for(var e=window.atob(t),r=e.length,n=new Uint8Array(r),i=0;i<r;i++)n[i]=e.charCodeAt(i);return n.buffer}var v=function(){function t(t){this.listClients={},this.mapClients={},this.ws=new s(t.conn),this.token=t.token,this.roomID=t.roomID,this.docID=t.checkpoint.id,this.actor=t.actor,this.checkpoint=t.checkpoint,this.vs=this.checkpoint.vs,this.InnerPresenceClient=void 0}var r=t.prototype;return r.once=function(t){try{var e,r=this;return Promise.race([new Promise((function(t,e){return setTimeout((function(){return e("timeout")}),2e3)})),new Promise((function(n){e=r.ws.bind(t,(function(t){n(t)}))}))]).then((function(){e&&r.ws.unbind(t,e)}))}catch(t){return Promise.reject(t)}},r.reconnect=function(){try{var t=this;t.errorListener||(t.errorListener=t.ws.bind("error",(function(t){console.error("Room Service encountered a server-side error. If you see this, please let us know; this could be a bug.",t)})));var e=t.once("guest:authenticated");return t.ws.send("guest:authenticate",t.token),Promise.resolve(e).then((function(){var e=t.once("room:joined");return t.ws.send("room:join",t.roomID),Promise.resolve(e).then((function(){}))}))}catch(t){return Promise.reject(t)}},r.list=function(t){if(this.listClients[t])return this.listClients[t];this.checkpoint.lists[t]||(this.ws.send("doc:cmd",{args:["lcreate",this.docID,t],room:this.roomID}),this.checkpoint.lists[t]={afters:[],ids:[],values:[]});var e=new d(this.checkpoint,this.roomID,this.docID,t,this.ws,this.actor);return this.listClients[t]=e,e},r.map=function(t){if(this.mapClients[t])return this.mapClients[t];this.checkpoint.maps[t]||this.ws.send("doc:cmd",{args:["mcreate",this.docID,t],room:this.roomID});var e=new l(this.checkpoint.maps[t]||{},this.roomID,this.docID,t,this.ws);return this.mapClients[t]=e,e},r.presence=function(){if(this.InnerPresenceClient)return this.InnerPresenceClient;var t=new f(this.roomID,this.ws,this.actor,this.token);try{this.InnerPresenceClient=t}catch(t){throw new Error("Don't Freeze State. See more: https://err.sh/getroomservice/browser/dont-freeze")}return this.InnerPresenceClient},r.subscribe=function(t,r,n){var i=this;return"string"==typeof r?(t||e(!1),[{event:"presence:fwd",fn:this.ws.bind("presence:fwd",(function(o){if(o.room===i.roomID&&o.key===r&&o.from!==i.actor){var s=t.dangerouslyUpdateClientDirectly("presence:fwd",o);s&&(n||e(!1),n(s,o.from))}}))},{event:"room:rm_guest",fn:this.ws.bind("room:rm_guest",(function(r){if(r.room===i.roomID){var o=t.dangerouslyUpdateClientDirectly("room:rm_guest",r);o&&(n||e(!1),n(o,r.guest))}}))}]):[{event:"doc:fwd",fn:this.ws.bind("doc:fwd",(function(e){if(e.room===i.roomID)if(!e.args||e.args.length<3)console.error("Unexpected command: ",e.args);else if(!function(t,e){if(!t)return!0;if(!e)return!1;for(var r=new Uint8Array(m(t).slice(0,9)),n=new Uint8Array(m(e).slice(0,9)),i=0;i<r.byteLength;i++){if(n[i]>r[i])return!0;if(n[i]<r[i])return!1}return!1}(e.vs,i.vs)&&e.from!==i.actor){var n=[e.args[1],e.args[2]];if(n[0]===i.docID&&n[1]===t.id){i.vs=e.vs;var o=t.dangerouslyUpdateClientDirectly(e.args);r(o,e.from)}}}))}]},r.unsubscribe=function(t){for(var e,r=o(t);!(e=r()).done;){var n=e.value;this.ws.unbind(n.event,n.fn)}},n(t,[{key:"me",get:function(){return this.actor}}]),t}(),p=function(){function t(t){this.roomClients={},this.auth=t.auth}return t.prototype.room=function(t){try{var e=this;if(e.roomClients[t])return Promise.resolve(e.roomClients[t]);var r=new WebSocket("wss://super.roomservice.dev/ws");return Promise.resolve(function(t,e,r,n,i){try{return Promise.resolve(function(t,e,r){try{var n=function(r){return i?r:Promise.resolve(fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({resources:[{object:"document",reference:"default",permission:"read_write",room:e},{object:"room",reference:e,permission:"join"}]})})).then((function(t){if(401===t.status)throw new Error("The Auth Webhook returned unauthorized.");if(200!==t.status)throw new Error("The Auth Webhook returned a status code other than 200.");return Promise.resolve(t.json()).then((function(t){var e=t.resources,r=t.token,n=t.user;if(!e||!r||!n){if("Unauthorized"===t.body)throw new Error("The Auth Webhook unexpectedly return unauthorized. You may be using an invalid API key.");throw new Error("The Auth Webhook has an incorrectly formatted JSON response.")}return{token:r,guestReference:n,docID:e.find((function(t){return"document"===t.object})).id,roomID:e.find((function(t){return"room"===t.object})).id}}))}))},i=!1,o=function(){if("function"==typeof t)return Promise.resolve(t(e)).then((function(t){if(!t.user)throw new Error("The auth function must return a 'user' key.");var e=t.resources.find((function(t){return"document"===t.object})).id,r=t.resources.find((function(t){return"room"===t.object})).id;return i=!0,{token:t.token,guestReference:t.user,docID:e,roomID:r}}))}();return Promise.resolve(o&&o.then?o.then(n):n(o))}catch(t){return Promise.reject(t)}}(r,n)).then((function(e){return Promise.resolve(function(t,e,r){try{return Promise.resolve(fetch("https://super.roomservice.dev/docs/"+r,{headers:{Authorization:"Bearer: "+e}})).then((function(t){return Promise.resolve(t.json())}))}catch(t){return Promise.reject(t)}}(0,e.token,e.docID)).then((function(r){var n=new v({conn:t,actor:e.guestReference,checkpoint:r.body,token:e.token,roomID:e.roomID});return Promise.resolve(n.reconnect()).then((function(){return n}))}))}))}catch(t){return Promise.reject(t)}}(r,0,e.auth,t)).then((function(r){return e.roomClients[t]=r,r}))}catch(t){return Promise.reject(t)}},t}();exports.RoomClient=v,exports.RoomService=p,exports.default=p;
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t,e=(t=require("tiny-invariant"))&&"object"==typeof t&&"default"in t?t.default:t;function r(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function n(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),t}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function o(t,e){var r;if("undefined"==typeof Symbol||null==t[Symbol.iterator]){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return i(t,void 0);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(t,void 0):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(r=t[Symbol.iterator]()).next.bind(r)}var s=function(){function t(t){var e=this;this.callbacks={},this.lastTime=0,this.msgsThisMilisecond=0,this.conn=t,this.conn.onmessage=function(t){var r=JSON.parse(t.data);e.dispatch(r.type,r.body)}}var e=t.prototype;return e.timestamp=function(){var t=Date.now();return t===this.lastTime?this.msgsThisMilisecond++:(this.lastTime=t,this.msgsThisMilisecond=0),t+":"+this.msgsThisMilisecond},e.send=function(t,e){var r=this,n=this.timestamp();this.conn.readyState!==this.conn.CONNECTING?this.conn.send(JSON.stringify({type:t,ts:n,ver:0,body:e})):setTimeout((function(){r.send(t,e)}),100+100*Math.random())},e.bind=function(t,e){return this.callbacks[t]=this.callbacks[t]||[],this.callbacks[t].push(e),e},e.unbind=function(t,e){this.callbacks[t]=this.callbacks[t].filter((function(t){return t!==e}))},e.dispatch=function(t,e){var r=this.callbacks[t];if(r)for(var n=0;n<r.length;n++)r[n](e)},t}();function c(t,e){if("root"===e)return"root";var r=e.split(":");return r[0]+":"+t.actors[parseInt(r[1])]}var h=function(){function t(t){this.count=0,this.actor=t,this.nodes={},this.log=[]}var r=t.prototype;return r.import=function(t,r){t||e(!1);for(var n=t.lists[r],i=n.afters||[],o=n.ids||[],s=n.values||[],h=0;h<i.length;h++){var u={after:c(t,i[h]),id:c(t,o[h]),value:s[h]};this.nodes[u.id]=u,this.log.push(u)}this.count=this.log.length},r.get=function(t){if(this.nodes[t])return this.nodes[t].value},r.insert=function(t,r,n){this.log||e(!1);var i=n;i||(i=this.count+":"+this.actor),this.count++;var o={after:t,value:r,id:i};return this.nodes[i]=o,this.log.push(o),i},r.put=function(t,e){this.nodes[t]&&(this.nodes[t].value=e)},r.has=function(t){return!!this.nodes[t]},r.delete=function(t){this.nodes[t]&&(this.nodes[t].value={t:""})},r.toTree=function(){for(var t,e={children:[],id:"root",value:""},r={root:e},n=o(this.log);!(t=n()).done;){var i=t.value,s={children:[],id:i.id,value:i.value};if(r[i.id]=s,"root"===i.after)e.children.push(s);else{if(!r[i.after])continue;r[i.after].children.push(s)}}return e},r.sortLog=function(){this.log.sort((function(t,e){var r=t.id.split(":"),n=r[0],i=r[1],o=e.id.split(":"),s=o[0];return n===s?i.localeCompare(o[1]):parseInt(n)-parseInt(s)}))},r.lastID=function(){return 0===this.log.length?"root":(this.sortLog(),function t(e){return e.children&&0!==e.children.length?t(e.children[e.children.length-1]):e}(this.toTree()).id)},r.postOrderTraverse=function(){return this.sortLog(),function t(e){if(!e.children||0===e.children.length)return[];for(var r,n=[],i=o(e.children);!(r=i()).done;){var s=r.value;if("string"!=typeof s.value){if(""===s.value.t){n=n.concat([].concat(t(s)));continue}throw new Error("Unimplemented")}n=n.concat([s].concat(t(s)))}return n}(this.toTree())},r.toArray=function(){return this.postOrderTraverse().map((function(t){return t.value}))},n(t,[{key:"length",get:function(){return Object.keys(this.nodes).length}}]),t}();function u(t){return JSON.stringify(t)}function a(t){try{return JSON.parse(t)}catch(e){return t}}var d=function(){function t(t,r,n,i,o,s){this.itemIDs=[],this.roomID=r,this.docID=n,this.id=i,this.ws=o,this.rt=new h(s),t.lists[i]||e(!1),this.rt.import(t,i);for(var u=t.lists[i].ids||[],a=0;a<u.length;a++){var d=t.lists[i].values[a];"object"==typeof d&&""===d.t||this.itemIDs.push(c(t,u[a]))}}var r=t.prototype;return r.sendCmd=function(t){this.ws.send("doc:cmd",{room:this.roomID,args:t})},r.clone=function(){return Object.assign(Object.create(Object.getPrototypeOf(this)),this)},r.dangerouslyUpdateClientDirectly=function(t){if(t.length<3)throw new Error("Unexpected command: "+t);var e=t[0];if(t[1]!==this.docID||t[2]!==this.id)throw new Error("Command unexpectedly routed to the wrong client");switch(e){case"lins":var r=t[3],n=t[4],i=t[5];this.itemIDs.splice(this.itemIDs.findIndex((function(t){return t===r}))+1,0,n),this.rt.insert(r,i,n);break;case"lput":this.rt.put(t[3],t[4]);break;case"ldel":var o=t[3];this.rt.delete(o),this.itemIDs.splice(this.itemIDs.findIndex((function(t){return t===o})),1);break;default:throw new Error("Unexpected command keyword: "+e)}return this.clone()},r.get=function(t){var e=this.itemIDs[t];if(e){var r=this.rt.get(e);if(r){if("object"==typeof r){if(""===r.t)return;throw new Error("Unimplemented references")}return a(r)}}},r.set=function(t,e){var r=this.itemIDs[t];if(!r)throw new Error("Index '"+t+"' doesn't already exist. Try .push() or .insertAfter() instead.");var n=u(e);return this.rt.put(r,n),this.sendCmd(["lput",this.docID,this.id,r,n]),this.clone()},r.delete=function(t){if(0===this.itemIDs.length)return this.clone();var e=this.itemIDs[t];return e?(this.rt.delete(e),this.itemIDs.splice(t,1),this.sendCmd(["ldel",this.docID,this.id,e]),this.clone()):(console.warn("Unknown index: ",t,this.itemIDs),this.clone())},r.insertAfter=function(t,e){var r=this.itemIDs[t];if(!r)throw new RangeError("List '"+this.id+"' has no index: '"+t+"'");var n=u(e),i=this.rt.insert(r,n);return this.itemIDs.splice(t,0,i),this.sendCmd(["lins",this.docID,this.id,r,i,n]),this.clone()},r.pushOne=function(t){var e=this.rt.lastID(),r=u(t),n=this.rt.insert(e,r);return this.itemIDs.push(n),this.sendCmd(["lins",this.docID,this.id,e,n,r]),this.clone()},r.push=function(){for(var t,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];for(var i=0,o=r;i<o.length;i++){var s=o[i];t=this.pushOne(s)}return t},r.map=function(t){return this.rt.postOrderTraverse().map((function(e,r){return t(a(e.value),r,e.id)}))},r.toArray=function(){return this.rt.toArray().map((function(t){return a(t)}))},t}(),f=function(){function t(t,e,r,n,i){for(var o in this.roomID=e,this.docID=r,this.id=n,this.ws=i,this.store={},t){var s=t[o];"string"==typeof s&&(this.store[o]=a(s))}}var e=t.prototype;return e.sendCmd=function(t){this.ws.send("doc:cmd",{room:this.roomID,args:t})},e.clone=function(){return Object.assign(Object.create(Object.getPrototypeOf(this)),this)},e.dangerouslyUpdateClientDirectly=function(t){if(t.length<3)throw new Error("Unexpected command: "+t);var e=t[0];if(t[1]!==this.docID||t[2]!==this.id)throw new Error("Command unexpectedly routed to the wrong client");switch(e){case"mput":if(5!==t.length){console.error("Malformed command ",t);break}this.store[t[3]]=a(t[4]);break;case"mdel":if(4!==t.length){console.error("Malformed command ",t);break}delete this.store[t[3]];break;default:throw new Error("Unexpected command keyword: "+e)}return this.clone()},e.get=function(t){return this.store[t]},e.set=function(t,e){var r=u(e);return this.store[t]=e,this.sendCmd(["mput",this.docID,this.id,t,r]),this.clone()},e.toObject=function(){for(var t,e={},r=o(this.keys);!(t=r()).done;){var n=t.value;e[n]=this.get(n)}return e},e.delete=function(t){return delete this.store[t],this.sendCmd(["mdel",this.docID,this.id,t]),this.clone()},n(t,[{key:"keys",get:function(){return Object.keys(this.store)}}]),t}(),l=function(){function t(t,e,r,n){this.roomID=t,this.ws=e,this.actor=r,this.token=n,this.cache={},this.send=function(t,e,r){void 0===r&&(r=!1);var n=null,i=!0;return function(){var e=arguments,o=this,s=r&&i,c=function(){t.apply(o,e),n=null};s&&(i=!1,c()),n||(n=setTimeout(c,40))}}(this.ws.send.bind(this.ws))}var e=t.prototype;return e.getAll=function(t){try{var e=this;return Promise.resolve(function(t,e,r,n){try{return Promise.resolve(fetch("https://super.roomservice.dev/presence/"+r+"/"+encodeURIComponent(n),{headers:{Authorization:"Bearer: "+e}})).then((function(t){return Promise.resolve(t.json()).then((function(t){for(var e in t)if("string"==typeof t[e].value){var r=void 0;try{r=JSON.parse(t[e].value)}catch(t){}r&&(t[e].value=r)}return t}))}))}catch(t){return Promise.reject(t)}}(0,e.token,e.roomID,t)).then((function(r){return e.cache[t]=r,e.withoutExpiredAndSelf(t)}))}catch(t){return Promise.reject(t)}},e.withoutExpiredAndSelf=function(t){var e={};for(var r in this.cache[t]){var n=this.cache[t][r];new Date>n.expAt?delete this.cache[t][r]:e[r]=n.value}return e},e.withoutActorOrExpired=function(t){var e={};for(var r in this.cache)for(var n in this.cache[r]){var i=this.cache[r][n];i&&(n===t&&this.cache[r][n]||new Date>i.expAt?delete this.cache[r][n]:e[n]=i.value)}return e},e.set=function(t,e,r){var n=r||60,i=Math.round((new Date).getTime()/1e3)+n;return this.send("presence:cmd",{room:this.roomID,key:t,value:JSON.stringify(e),expAt:i}),this.cache[t]||(this.cache[t]={}),this.cache[t][this.actor]={value:e,expAt:new Date(1e3*i)},this.withoutExpiredAndSelf(t)},e.dangerouslyUpdateClientDirectly=function(t,e){if("room:rm_guest"===t)return this.withoutActorOrExpired(e.guest);if(e.room!==this.roomID)return!1;if(e.from===this.actor)return!1;var r={expAt:new Date(1e3*e.expAt),value:JSON.parse(e.value)};return this.cache[e.key]||(this.cache[e.key]={}),this.cache[e.key][e.from]=r,this.withoutExpiredAndSelf(e.key)},n(t,[{key:"me",get:function(){return console.warn("presence.me() is deprecated and will be removed in a future version!"),this.actor}}]),t}();function m(t){for(var e=window.atob(t),r=e.length,n=new Uint8Array(r),i=0;i<r;i++)n[i]=e.charCodeAt(i);return n.buffer}var v=function(){function t(t){this.listClients={},this.mapClients={},this.ws=new s(t.conn),this.token=t.token,this.roomID=t.roomID,this.docID=t.checkpoint.id,this.actor=t.actor,this.checkpoint=t.checkpoint,this.vs=this.checkpoint.vs,this.InnerPresenceClient=void 0}var r=t.prototype;return r.once=function(t){try{var e,r=this;return Promise.race([new Promise((function(t,e){return setTimeout((function(){return e("timeout")}),2e3)})),new Promise((function(n){e=r.ws.bind(t,(function(t){n(t)}))}))]).then((function(){e&&r.ws.unbind(t,e)}))}catch(t){return Promise.reject(t)}},r.reconnect=function(){try{var t=this;t.errorListener||(t.errorListener=t.ws.bind("error",(function(t){console.error("Room Service encountered a server-side error. If you see this, please let us know; this could be a bug.",t)})));var e=t.once("guest:authenticated");return t.ws.send("guest:authenticate",t.token),Promise.resolve(e).then((function(){var e=t.once("room:joined");return t.ws.send("room:join",t.roomID),Promise.resolve(e).then((function(){}))}))}catch(t){return Promise.reject(t)}},r.list=function(t){if(this.listClients[t])return this.listClients[t];this.checkpoint.lists[t]||(this.ws.send("doc:cmd",{args:["lcreate",this.docID,t],room:this.roomID}),this.checkpoint.lists[t]={afters:[],ids:[],values:[]});var e=new d(this.checkpoint,this.roomID,this.docID,t,this.ws,this.actor);return this.listClients[t]=e,e},r.map=function(t){if(this.mapClients[t])return this.mapClients[t];this.checkpoint.maps[t]||this.ws.send("doc:cmd",{args:["mcreate",this.docID,t],room:this.roomID});var e=new f(this.checkpoint.maps[t]||{},this.roomID,this.docID,t,this.ws);return this.mapClients[t]=e,e},r.presence=function(){if(this.InnerPresenceClient)return this.InnerPresenceClient;var t=new l(this.roomID,this.ws,this.actor,this.token);try{this.InnerPresenceClient=t}catch(t){throw new Error("Don't Freeze State. See more: https://err.sh/getroomservice/browser/dont-freeze")}return this.InnerPresenceClient},r.subscribe=function(t,r,n){var i=this;return"string"==typeof r?(t||e(!1),[{event:"presence:fwd",fn:this.ws.bind("presence:fwd",(function(o){if(o.room===i.roomID&&o.key===r&&o.from!==i.actor){var s=t.dangerouslyUpdateClientDirectly("presence:fwd",o);s&&(n||e(!1),n(s,o.from))}}))},{event:"room:rm_guest",fn:this.ws.bind("room:rm_guest",(function(r){if(r.room===i.roomID){var o=t.dangerouslyUpdateClientDirectly("room:rm_guest",r);o&&(n||e(!1),n(o,r.guest))}}))}]):[{event:"doc:fwd",fn:this.ws.bind("doc:fwd",(function(e){if(e.room===i.roomID)if(!e.args||e.args.length<3)console.error("Unexpected command: ",e.args);else if(!function(t,e){if(!t)return!0;if(!e)return!1;for(var r=new Uint8Array(m(t).slice(0,9)),n=new Uint8Array(m(e).slice(0,9)),i=0;i<r.byteLength;i++){if(n[i]>r[i])return!0;if(n[i]<r[i])return!1}return!1}(e.vs,i.vs)&&e.from!==i.actor){var n=[e.args[1],e.args[2]];if(n[0]===i.docID&&n[1]===t.id){i.vs=e.vs;var o=t.dangerouslyUpdateClientDirectly(e.args);r(o,e.from)}}}))}]},r.unsubscribe=function(t){for(var e,r=o(t);!(e=r()).done;){var n=e.value;this.ws.unbind(n.event,n.fn)}},n(t,[{key:"me",get:function(){return this.actor}}]),t}(),p=function(){function t(t){this.roomClients={},this.auth=t.auth}return t.prototype.room=function(t){try{var e=this;if(e.roomClients[t])return Promise.resolve(e.roomClients[t]);var r=new WebSocket("wss://super.roomservice.dev/ws");return Promise.resolve(function(t,e,r,n,i){try{return Promise.resolve(function(t,e,r){try{var n=function(r){return i?r:Promise.resolve(fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({resources:[{object:"document",reference:"default",permission:"read_write",room:e},{object:"room",reference:e,permission:"join"}]})})).then((function(t){if(401===t.status)throw new Error("The Auth Webhook returned unauthorized.");if(200!==t.status)throw new Error("The Auth Webhook returned a status code other than 200.");return Promise.resolve(t.json()).then((function(t){var e=t.resources,r=t.token,n=t.user;if(!e||!r||!n){if("Unauthorized"===t.body)throw new Error("The Auth Webhook unexpectedly return unauthorized. You may be using an invalid API key.");throw new Error("The Auth Webhook has an incorrectly formatted JSON response.")}return{token:r,guestReference:n,docID:e.find((function(t){return"document"===t.object})).id,roomID:e.find((function(t){return"room"===t.object})).id}}))}))},i=!1,o=function(){if("function"==typeof t)return Promise.resolve(t(e)).then((function(t){if(!t.user)throw new Error("The auth function must return a 'user' key.");var e=t.resources.find((function(t){return"document"===t.object})).id,r=t.resources.find((function(t){return"room"===t.object})).id;return i=!0,{token:t.token,guestReference:t.user,docID:e,roomID:r}}))}();return Promise.resolve(o&&o.then?o.then(n):n(o))}catch(t){return Promise.reject(t)}}(r,n)).then((function(e){return Promise.resolve(function(t,e,r){try{return Promise.resolve(fetch("https://super.roomservice.dev/docs/"+r,{headers:{Authorization:"Bearer: "+e}})).then((function(t){return Promise.resolve(t.json())}))}catch(t){return Promise.reject(t)}}(0,e.token,e.docID)).then((function(r){var n=new v({conn:t,actor:e.guestReference,checkpoint:r.body,token:e.token,roomID:e.roomID});return Promise.resolve(n.reconnect()).then((function(){return n}))}))}))}catch(t){return Promise.reject(t)}}(r,0,e.auth,t)).then((function(r){return e.roomClients[t]=r,r}))}catch(t){return Promise.reject(t)}},t}();exports.RoomClient=v,exports.RoomService=p,exports.default=p;
//# sourceMappingURL=browser.cjs.production.min.js.map

@@ -461,3 +461,3 @@ import invariant from 'tiny-invariant';

_proto.toArray = function toArray() {
_proto.postOrderTraverse = function postOrderTraverse() {
this.sortLog(); // -- Convert the log into a regular tree

@@ -472,7 +472,6 @@

var vals = [];
var children = [];
for (var _iterator2 = _createForOfIteratorHelperLoose(t.children), _step2; !(_step2 = _iterator2()).done;) {
var child = _step2.value;
var value = child.value;

@@ -482,3 +481,3 @@ if (typeof child.value !== 'string') {

if (child.value.t === '') {
vals = vals.concat([].concat(postorder(child)));
children = children.concat([].concat(postorder(child)));
continue;

@@ -490,6 +489,6 @@ }

vals = vals.concat([value].concat(postorder(child)));
children = children.concat([child].concat(postorder(child)));
}
return vals;
return children;
}

@@ -500,2 +499,8 @@

_proto.toArray = function toArray() {
return this.postOrderTraverse().map(function (c) {
return c.value;
});
};
_createClass(ReverseTree, [{

@@ -674,3 +679,3 @@ key: "length",

_proto.push = function push(val) {
_proto.pushOne = function pushOne(val) {
var lastID = this.rt.lastID();

@@ -686,2 +691,23 @@ var escaped = escape(val); // Local

_proto.push = function push() {
var self;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
for (var _i = 0, _args = args; _i < _args.length; _i++) {
var arg = _args[_i];
self = this.pushOne(arg);
}
return self;
};
_proto.map = function map(fn) {
return this.rt.postOrderTraverse().map(function (m, i) {
return fn(unescape(m.value), i, m.id);
});
};
_proto.toArray = function toArray() {

@@ -781,2 +807,13 @@ return this.rt.toArray().map(function (m) {

_proto.toObject = function toObject() {
var obj = {};
for (var _iterator = _createForOfIteratorHelperLoose(this.keys), _step; !(_step = _iterator()).done;) {
var key = _step.value;
obj[key] = this.get(key);
}
return obj;
};
_proto["delete"] = function _delete(key) {

@@ -783,0 +820,0 @@ // local

@@ -18,4 +18,6 @@ import SuperlumeWebSocket from './ws';

insertAfter(index: number, val: T): InnerListClient<T>;
push(val: T): InnerListClient<T>;
private pushOne;
push(...args: T[]): InnerListClient<T>;
map<T extends any>(fn: (val: T, index: number, key: string) => T[]): T[];
toArray(): T[];
}

@@ -16,3 +16,6 @@ import { ObjectClient, MapCheckpoint } from './types';

set(key: string, value: T): InnerMapClient<T>;
toObject(): {
[key: string]: T;
};
delete(key: string): InnerMapClient<T>;
}

@@ -7,2 +7,7 @@ import { NodeValue, DocumentCheckpoint } from './types';

}
interface Tree {
children: Tree[];
value: any;
id: string;
}
/**

@@ -33,4 +38,5 @@ * A Reverse Tree is one where the children point to the

lastID(): string;
postOrderTraverse(): Tree[];
toArray(): Array<any>;
}
export {};

@@ -12,4 +12,4 @@ import { WebSocketLikeConnection, DocumentCheckpoint, AuthStrategy, Prop } from './types';

declare type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
export declare type MapClient<T> = Omit<InnerMapClient<T>, 'dangerouslyUpdateClientDirectly'>;
export declare type ListClient<T> = Omit<InnerListClient<T>, 'dangerouslyUpdateClientDirectly'>;
export declare type MapClient<T> = Omit<InnerMapClient<T>, 'dangerouslyUpdateClientDirectly' | 'id'>;
export declare type ListClient<T> = Omit<InnerListClient<T>, 'dangerouslyUpdateClientDirectly' | 'id'>;
export declare type PresenceClient = Omit<InnerPresenceClient, 'dangerouslyUpdateClientDirectly'>;

@@ -41,5 +41,5 @@ export declare class RoomClient {

get me(): string;
list<T extends any>(name: string): InnerListClient<T>;
map<T extends any>(name: string): InnerMapClient<T>;
presence(): InnerPresenceClient;
list<T extends any>(name: string): ListClient<T>;
map<T extends any>(name: string): MapClient<T>;
presence(): PresenceClient;
subscribe<T>(list: ListClient<T>, onChangeFn: (list: ListClient<T>) => any): ListenerBundle;

@@ -46,0 +46,0 @@ subscribe<T>(list: ListClient<T>, onChangeFn: (list: ListClient<T>, from: string) => any): ListenerBundle;

{
"version": "2.0.2",
"version": "2.1.0-0",
"license": "MIT",

@@ -4,0 +4,0 @@ "main": "dist/index.js",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc