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

oblivious-set

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

oblivious-set - npm Package Compare versions

Comparing version
1.4.0
to
2.0.0
+3
-3
.github/workflows/main.yml

@@ -6,9 +6,9 @@ name: CI

build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- name: Use Node.js 12.11.0
- name: Set Node Version
uses: actions/setup-node@v2
with:
node-version: 12.11.0
node-version: 22.21.0
- run: npm install

@@ -15,0 +15,0 @@ - run: npm run lint

@@ -21,5 +21,14 @@ "use strict";

has(value) {
return this.map.has(value);
const valueTime = this.map.get(value);
if (typeof valueTime === 'undefined') {
return false;
}
if (valueTime < now() - this.ttl) {
this.map.delete(value);
return false;
}
return true;
}
add(value) {
this.map.delete(value);
this.map.set(value, now());

@@ -59,3 +68,3 @@ /**

if (!next) {
return; // no more elements
break; // no more elements
}

@@ -69,3 +78,3 @@ const value = next[0];

// We reached a value that is not old enough
return;
break;
}

@@ -72,0 +81,0 @@ }

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

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;AACA;;;;GAIG;AACH,MAAa,YAAY;IASD;IARJ,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAEhC;;;OAGG;IACI,GAAG,GAAY,KAAK,CAAC;IAC5B,YACoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAC3B,CAAC;IAEL,GAAG,CAAC,KAAQ;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,KAAQ;QACR,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAE3B;;;;;WAKG;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACX,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAChB,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;gBACjB,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,EAAE,CAAC,CAAC,CAAC;SACT;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACJ;AArCD,oCAqCC;AAGD;;;GAGG;AACH,SAAgB,kBAAkB,CAC9B,YAA0B;IAE1B,MAAM,SAAS,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC;IAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAErD;;;OAGG;IACH,OAAO,IAAI,EAAE;QAET,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAEnC,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,CAAC,mBAAmB;SAC9B;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,GAAG,SAAS,EAAE;YAClB,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAClC;aAAM;YACH,4CAA4C;YAC5C,OAAO;SACV;KACJ;AACL,CAAC;AA1BD,gDA0BC;AAED,SAAgB,GAAG;IACf,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;AACtB,CAAC;AAFD,kBAEC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;AACA;;;;GAIG;AACH,MAAa,YAAY;IASD;IARJ,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAEhC;;;OAGG;IACI,GAAG,GAAY,KAAK,CAAC;IAC5B,YACoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAC3B,CAAC;IAEL,GAAG,CAAC,KAAQ;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;YAClC,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,SAAS,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,KAAQ;QACR,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAE3B;;;;;WAKG;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACX,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAChB,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;gBACjB,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,EAAE,CAAC,CAAC,CAAC;SACT;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACJ;AAhDD,oCAgDC;AAGD;;;GAGG;AACH,SAAgB,kBAAkB,CAC9B,YAA0B;IAE1B,MAAM,SAAS,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC;IAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAErD;;;OAGG;IACH,OAAO,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAEnC,IAAI,CAAC,IAAI,EAAE;YACP,MAAM,CAAC,mBAAmB;SAC7B;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,GAAG,SAAS,EAAE;YAClB,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAClC;aAAM;YACH,4CAA4C;YAC5C,MAAM;SACT;KACJ;AACL,CAAC;AAzBD,gDAyBC;AAED,SAAgB,GAAG;IACf,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;AACtB,CAAC;AAFD,kBAEC"}

@@ -69,3 +69,53 @@ "use strict";

});
/**
* This behavior is required so
* that removeTooOldValues() can iterate over a time-sorted list.
*/
it('re-adding should add as last element of the internal map', () => {
const set = new index_1.ObliviousSet(100);
set.add('a');
set.add('b');
set.add('c');
// re-add
set.add('a');
const keys = Array.from(set.map.keys());
assert.strictEqual(keys[2], 'a');
});
describe('issues', () => {
/**
* @link https://github.com/pubkey/oblivious-set/issues/2
*/
describe('#2 Value update breaks removeTooOldValues', () => {
it('should reset the TTL on re-add (check via set.has())', async () => {
const set = new index_1.ObliviousSet(100);
set.add('foo');
set.add('bar');
await async_test_util_1.default.wait(80);
assert.strictEqual(set.has('bar'), true, 'still be there after 80');
set.add('foo');
await async_test_util_1.default.wait(110);
assert.strictEqual(set.has('bar'), false, 'gone after 110 by time');
});
it('should reset the TTL on re-add (check by triggering removeTooOldValues())', async () => {
const set = new index_1.ObliviousSet(100);
set.add('foo');
set.add('bar');
await async_test_util_1.default.wait(80);
assert.strictEqual(set.has('bar'), true, 'still be there after 80');
set.add('foo');
await async_test_util_1.default.wait(110);
// trigger removeTooOldValues
set.add('baz');
await async_test_util_1.default.waitUntil(() => !set._to);
assert.strictEqual(set.map.has('bar'), false, 'gone after 110 by removeTooOldValues');
});
it('should return false for values after its ttl', async () => {
const set = new index_1.ObliviousSet(100);
set.add('foobar');
await async_test_util_1.default.wait(110);
assert.strictEqual(set.has('foobar'), false);
});
});
});
});
//# sourceMappingURL=unit.test.js.map

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

{"version":3,"file":"unit.test.js","sourceRoot":"","sources":["../../../test/unit.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sEAA4C;AAC5C,+CAAiC;AAEjC,wCAEsB;AAEtB,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAEf,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE7B,MAAM,yBAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,MAAM,yBAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE7B,MAAM,yBAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElB,MAAM,yBAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,MAAM,yBAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
{"version":3,"file":"unit.test.js","sourceRoot":"","sources":["../../../test/unit.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sEAA4C;AAC5C,+CAAiC;AAEjC,wCAEsB;AAEtB,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAEf,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE7B,MAAM,yBAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,MAAM,yBAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE7B,MAAM,yBAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElB,MAAM,yBAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,MAAM,yBAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH;;;OAGG;IACH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAChE,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEb,SAAS;QACT,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB;;WAEG;QACH,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACvD,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;gBAClE,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;gBAClC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACf,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACf,MAAM,yBAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,CAAC;gBAEpE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACf,MAAM,yBAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;gBACvF,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;gBAClC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACf,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACf,MAAM,yBAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,CAAC;gBAEpE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACf,MAAM,yBAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAE9B,6BAA6B;gBAC7B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACf,MAAM,yBAAa,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE9C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,sCAAsC,CAAC,CAAC;YAC1F,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;gBAC1D,MAAM,GAAG,GAAG,IAAI,oBAAY,CAAC,GAAG,CAAC,CAAC;gBAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAElB,MAAM,yBAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}

@@ -18,5 +18,14 @@ /**

has(value) {
return this.map.has(value);
const valueTime = this.map.get(value);
if (typeof valueTime === 'undefined') {
return false;
}
if (valueTime < now() - this.ttl) {
this.map.delete(value);
return false;
}
return true;
}
add(value) {
this.map.delete(value);
this.map.set(value, now());

@@ -55,3 +64,3 @@ /**

if (!next) {
return; // no more elements
break; // no more elements
}

@@ -65,3 +74,3 @@ const value = next[0];

// We reached a value that is not old enough
return;
break;
}

@@ -68,0 +77,0 @@ }

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

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,MAAM,OAAO,YAAY;IASD;IARJ,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAEhC;;;OAGG;IACI,GAAG,GAAY,KAAK,CAAC;IAC5B,YACoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAC3B,CAAC;IAEL,GAAG,CAAC,KAAQ;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,KAAQ;QACR,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAE3B;;;;;WAKG;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACX,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAChB,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;gBACjB,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,EAAE,CAAC,CAAC,CAAC;SACT;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACJ;AAGD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAC9B,YAA0B;IAE1B,MAAM,SAAS,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC;IAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAErD;;;OAGG;IACH,OAAO,IAAI,EAAE;QAET,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAEnC,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,CAAC,mBAAmB;SAC9B;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,GAAG,SAAS,EAAE;YAClB,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAClC;aAAM;YACH,4CAA4C;YAC5C,OAAO;SACV;KACJ;AACL,CAAC;AAED,MAAM,UAAU,GAAG;IACf,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;AACtB,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,MAAM,OAAO,YAAY;IASD;IARJ,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAEhC;;;OAGG;IACI,GAAG,GAAY,KAAK,CAAC;IAC5B,YACoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAC3B,CAAC;IAEL,GAAG,CAAC,KAAQ;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;YAClC,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,SAAS,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,KAAQ;QACR,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAE3B;;;;;WAKG;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACX,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAChB,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;gBACjB,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,EAAE,CAAC,CAAC,CAAC;SACT;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACJ;AAGD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAC9B,YAA0B;IAE1B,MAAM,SAAS,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC;IAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAErD;;;OAGG;IACH,OAAO,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAEnC,IAAI,CAAC,IAAI,EAAE;YACP,MAAM,CAAC,mBAAmB;SAC7B;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,GAAG,SAAS,EAAE;YAClB,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAClC;aAAM;YACH,4CAA4C;YAC5C,MAAM;SACT;KACJ;AACL,CAAC;AAED,MAAM,UAAU,GAAG;IACf,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;AACtB,CAAC"}

@@ -41,3 +41,53 @@ import AsyncTestUtil from 'async-test-util';

});
/**
* This behavior is required so
* that removeTooOldValues() can iterate over a time-sorted list.
*/
it('re-adding should add as last element of the internal map', () => {
const set = new ObliviousSet(100);
set.add('a');
set.add('b');
set.add('c');
// re-add
set.add('a');
const keys = Array.from(set.map.keys());
assert.strictEqual(keys[2], 'a');
});
describe('issues', () => {
/**
* @link https://github.com/pubkey/oblivious-set/issues/2
*/
describe('#2 Value update breaks removeTooOldValues', () => {
it('should reset the TTL on re-add (check via set.has())', async () => {
const set = new ObliviousSet(100);
set.add('foo');
set.add('bar');
await AsyncTestUtil.wait(80);
assert.strictEqual(set.has('bar'), true, 'still be there after 80');
set.add('foo');
await AsyncTestUtil.wait(110);
assert.strictEqual(set.has('bar'), false, 'gone after 110 by time');
});
it('should reset the TTL on re-add (check by triggering removeTooOldValues())', async () => {
const set = new ObliviousSet(100);
set.add('foo');
set.add('bar');
await AsyncTestUtil.wait(80);
assert.strictEqual(set.has('bar'), true, 'still be there after 80');
set.add('foo');
await AsyncTestUtil.wait(110);
// trigger removeTooOldValues
set.add('baz');
await AsyncTestUtil.waitUntil(() => !set._to);
assert.strictEqual(set.map.has('bar'), false, 'gone after 110 by removeTooOldValues');
});
it('should return false for values after its ttl', async () => {
const set = new ObliviousSet(100);
set.add('foobar');
await AsyncTestUtil.wait(110);
assert.strictEqual(set.has('foobar'), false);
});
});
});
});
//# sourceMappingURL=unit.test.js.map

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

{"version":3,"file":"unit.test.js","sourceRoot":"","sources":["../../../test/unit.test.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EACH,YAAY,EACf,MAAM,cAAc,CAAC;AAEtB,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAEf,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE7B,MAAM,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,MAAM,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE7B,MAAM,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElB,MAAM,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,MAAM,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
{"version":3,"file":"unit.test.js","sourceRoot":"","sources":["../../../test/unit.test.ts"],"names":[],"mappings":"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"}
{
"name": "oblivious-set",
"version": "1.4.0",
"version": "2.0.0",
"description": "Like a JavaScript Set() but with a TTL for entries",

@@ -46,3 +46,3 @@ "keywords": [

"assert": "2.0.0",
"async-test-util": "2.2.0",
"async-test-util": "2.5.0",
"mocha": "8.4.0",

@@ -49,0 +49,0 @@ "rimraf": "3.0.2",

@@ -20,6 +20,17 @@

has(value: T): boolean {
return this.map.has(value);
const valueTime = this.map.get(value);
if (typeof valueTime === 'undefined') {
return false;
}
if (valueTime < now() - this.ttl) {
this.map.delete(value);
return false;
}
return true;
}
add(value: T): void {
this.map.delete(value);
this.map.set(value, now());

@@ -63,7 +74,6 @@

while (true) {
const next = iterator.next().value;
if (!next) {
return; // no more elements
break; // no more elements
}

@@ -76,3 +86,3 @@ const value = next[0];

// We reached a value that is not old enough
return;
break;
}

@@ -79,0 +89,0 @@ }

@@ -52,2 +52,59 @@ import AsyncTestUtil from 'async-test-util';

});
/**
* This behavior is required so
* that removeTooOldValues() can iterate over a time-sorted list.
*/
it('re-adding should add as last element of the internal map', () => {
const set = new ObliviousSet(100);
set.add('a');
set.add('b');
set.add('c');
// re-add
set.add('a');
const keys = Array.from(set.map.keys());
assert.strictEqual(keys[2], 'a');
});
describe('issues', () => {
/**
* @link https://github.com/pubkey/oblivious-set/issues/2
*/
describe('#2 Value update breaks removeTooOldValues', () => {
it('should reset the TTL on re-add (check via set.has())', async () => {
const set = new ObliviousSet(100);
set.add('foo');
set.add('bar');
await AsyncTestUtil.wait(80);
assert.strictEqual(set.has('bar'), true, 'still be there after 80');
set.add('foo');
await AsyncTestUtil.wait(110);
assert.strictEqual(set.has('bar'), false, 'gone after 110 by time');
});
it('should reset the TTL on re-add (check by triggering removeTooOldValues())', async () => {
const set = new ObliviousSet(100);
set.add('foo');
set.add('bar');
await AsyncTestUtil.wait(80);
assert.strictEqual(set.has('bar'), true, 'still be there after 80');
set.add('foo');
await AsyncTestUtil.wait(110);
// trigger removeTooOldValues
set.add('baz');
await AsyncTestUtil.waitUntil(() => !set._to);
assert.strictEqual(set.map.has('bar'), false, 'gone after 110 by removeTooOldValues');
});
it('should return false for values after its ttl', async () => {
const set = new ObliviousSet(100);
set.add('foobar');
await AsyncTestUtil.wait(110);
assert.strictEqual(set.has('foobar'), false);
});
});
});
});