You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

mustate

Package Overview
Dependencies
Maintainers
2
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mustate - npm Package Compare versions

Comparing version
0.1.3
to
0.2.0
+4
-4
package.json
{
"name": "mustate",
"version": "0.1.3",
"version": "0.2.0",
"description": "State replication for mudb",

@@ -21,6 +21,6 @@ "main": "index.js",

"dependencies": {
"mudb": "0.2.2",
"muschema": "0.1.4",
"mustreams": "0.1.3"
"mudb": "0.2.3",
"muschema": "0.1.5",
"mustreams": "0.1.4"
}
}

@@ -11,2 +11,3 @@ import { MuServer, MuRemoteClient } from 'mudb/server';

constructor(client: MuRemoteClient<typeof MuDefaultStateSchema['client']>, schema: Schema, windowSize: number);
close(): void;
}

@@ -21,2 +22,3 @@ export declare class MuServerState<Schema extends MuStateSchema<MuAnySchema, MuAnySchema>> implements MuStateReplica<Schema['server']> {

windowSize: number;
maxHistorySize: number;
private _protocol;

@@ -28,2 +30,3 @@ private _observedStates;

windowSize?: number;
maxHistorySize?: number;
});

@@ -30,0 +33,0 @@ configure(spec?: {

@@ -13,2 +13,5 @@ "use strict";

}
MuRemoteClientState.prototype.close = function () {
this._client.close();
};
return MuRemoteClientState;

@@ -34,2 +37,3 @@ }());

this.windowSize = Infinity;
this.maxHistorySize = Infinity;
this._observedStates = [];

@@ -41,2 +45,5 @@ this.server = spec.server;

}
if (typeof spec.maxHistorySize === 'number') {
this.maxHistorySize = spec.maxHistorySize;
}
this.state = this.schema.server.clone(this.schema.server.identity);

@@ -82,2 +89,3 @@ this.history = new state_1.MuStateSet(this.schema.server.identity);

}
state_1.publishState(_this.schema.server, _this._observedStates, _this, client_.sendRaw, true);
},

@@ -98,14 +106,18 @@ disconnect: function (client_) {

var observedStates = this._observedStates;
var baseTick = state_1.publishState(this.schema.server, observedStates, this, this._protocol.broadcastRaw, !!reliable);
var mostRecentCommonTick = state_1.publishState(this.schema.server, observedStates, this, this._protocol.broadcastRaw, !!reliable);
for (var i = 0; i < observedStates.length; ++i) {
var observations = observedStates[i];
var ticks = observedStates[i];
if (this.tick - ticks[ticks.length - 1] >= this.maxHistorySize) {
this.clients[i].close();
continue;
}
var ptr = 1;
while (ptr < observations.length && observations[ptr] < baseTick) {
while (ptr < ticks.length && ticks[ptr] < mostRecentCommonTick) {
++ptr;
}
var optr = 1;
while (ptr < observations.length) {
observations[optr++] = observations[ptr++];
while (ptr < ticks.length) {
ticks[optr++] = ticks[ptr++];
}
observations.length = optr;
ticks.length = optr;
}

@@ -112,0 +124,0 @@ };

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

{"version":3,"file":"server.js","sourceRoot":"","sources":["src/server.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"server.js","sourceRoot":"","sources":["src/server.ts"],"names":[],"mappings":"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"}

@@ -33,2 +33,6 @@ import { MuServer, MuServerProtocol, MuRemoteClient } from 'mudb/server';

}
public close () {
this._client.close();
}
}

@@ -56,6 +60,7 @@

// replica stuff
public tick:number = 0;
public tick = 0;
public state:Schema['server']['identity'];
public history:MuStateSet<Schema['server']['identity']>;
public windowSize:number = Infinity;
public windowSize = Infinity;
public maxHistorySize = Infinity;

@@ -69,2 +74,3 @@ private _protocol:MuServerProtocol<typeof MuDefaultStateSchema>;

windowSize?:number,
maxHistorySize?:number,
}) {

@@ -76,2 +82,5 @@ this.server = spec.server;

}
if (typeof spec.maxHistorySize === 'number') {
this.maxHistorySize = spec.maxHistorySize;
}
this.state = this.schema.server.clone(this.schema.server.identity);

@@ -119,6 +128,14 @@ this.history = new MuStateSet(this.schema.server.identity);

this._observedStates.push([0]);
if (spec && spec.connect) {
spec.connect(client);
}
// TODO send initial state packet to client
publishState(
this.schema.server,
this._observedStates,
this,
client_.sendRaw,
true,
);
},

@@ -140,3 +157,3 @@ disconnect: (client_) => {

const observedStates = this._observedStates;
const baseTick = publishState(
const mostRecentCommonTick = publishState(
this.schema.server,

@@ -146,17 +163,26 @@ observedStates,

this._protocol.broadcastRaw,
!!reliable);
!!reliable,
);
for (let i = 0; i < observedStates.length; ++i) {
const observations = observedStates[i];
const ticks = observedStates[i];
// kick client if the latest acked state is stale
if (this.tick - ticks[ticks.length - 1] >= this.maxHistorySize) {
this.clients[i].close();
continue;
}
// remove ticks smaller than mostRecentCommonTick
let ptr = 1;
while (ptr < observations.length && observations[ptr] < baseTick) {
while (ptr < ticks.length && ticks[ptr] < mostRecentCommonTick) {
++ptr;
}
let optr = 1;
while (ptr < observations.length) {
observations[optr++] = observations[ptr++];
while (ptr < ticks.length) {
ticks[optr++] = ticks[ptr++];
}
observations.length = optr;
ticks.length = optr;
}
}
}

@@ -34,4 +34,2 @@ import { MuSchema } from 'muschema/schema';

// search backwards for the index of the first tick that is
// less than or equal to `tick`
public at (tick:number) : number {

@@ -55,4 +53,3 @@ // FIXME: replace with binary search

// store tick and state in history whill keeping all ticks in
// increasing order
// update history while keeping all ticks in increasing order
function pushState<State> (stateSet:MuStateSet<State>, tick:number, state:State) {

@@ -74,3 +71,2 @@ const {ticks, states} = stateSet;

// pool and remove states from history
export function garbageCollectStates<State> (schema:MuSchema<State>, stateSet:MuStateSet<State>, horizon:number) : boolean {

@@ -97,3 +93,2 @@ const { ticks, states } = stateSet;

const _heads:number[] = [];
// find the largest common tick of the tick sets
function mostRecentCommonState (tickSets:number[][]) : number {

@@ -138,2 +133,3 @@ _pointers.length = tickSets.length;

} else {
ticks.splice(i + 1, 1);
break;

@@ -144,3 +140,3 @@ }

// remove ticks that are below horizon, except the first one
// remove ticks that are below horizon while always keeping the 0-tick
export function forgetObservation (ticks:number[], horizon:number) {

@@ -157,7 +153,6 @@ let pointer = 1;

// Returns false if
// 1. `nextTick` already in history
// 2. `baseTick` not in history
// 3. `nextTick` is less than the current tick
// Otherwise udpate current tick and state, then returns true.
// return false if
// `nextTick` already in history
// `baseTick` not in history
// `nextTick` is less than the current tick
export function parseState<Schema extends MuAnySchema> (

@@ -211,7 +206,2 @@ packet:Uint8Array,

// 1. find the largest common tick and use it as base tick
// 2. increment replica.tick
// 3. store new tick and state in history
// 4. send new tick, base tick, and patch to new state
// 5. pool and remove states from history
export function publishState<Schema extends MuAnySchema> (

@@ -240,9 +230,12 @@ schema:Schema,

stream.writeUint32(baseTick);
schema.diff(baseState, state, stream);
const contentBytes = stream.bytes();
raw(contentBytes, !reliable);
stream.destroy();
if (reliable) {
// ack state immediately
observations[observations.length - 1].push(nextTick);
}
const horizon = baseTick - windowSize - 1;

@@ -249,0 +242,0 @@ garbageCollectStates(schema, history, horizon);

@@ -106,2 +106,3 @@ "use strict";

else {
ticks.splice(i + 1, 1);
break;

@@ -175,2 +176,5 @@ }

stream.destroy();
if (reliable) {
observations[observations.length - 1].push(nextTick);
}
var horizon = baseTick - windowSize - 1;

@@ -177,0 +181,0 @@ garbageCollectStates(schema, history, horizon);

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

{"version":3,"file":"state.js","sourceRoot":"","sources":["src/state.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"state.js","sourceRoot":"","sources":["src/state.ts"],"names":[],"mappings":"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"}