New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

sqrl-redis-functions

Package Overview
Dependencies
Maintainers
2
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sqrl-redis-functions - npm Package Compare versions

Comparing version 0.6.6-beta.5 to 0.6.6-beta.6

lib/browser/RedisService.d.ts

15

lib/CountFunctions.js

@@ -215,3 +215,6 @@ "use strict";

const currentCountAst = databaseCountTransform(state, ast, currentCountArgs);
const currentAndPreviousCountAst = databaseCountTransform(state, ast, Object.assign(Object.assign({}, currentCountArgs), { timespan: trendingConfig.currentAndPrevious }));
const currentAndPreviousCountAst = databaseCountTransform(state, ast, {
...currentCountArgs,
timespan: trendingConfig.currentAndPrevious
});
const { keysAst } = interpretCountArgs(state, ast, currentCountArgs);

@@ -245,4 +248,10 @@ return sqrl_1.AstBuilder.call("_fetchTrendingDetails", [

const resultAst = sqrl_1.AstBuilder.call("_subtract", [
classifyCountTransform(state, ast, Object.assign(Object.assign({}, args), { timespan: previousConfig.subtractLeft })),
classifyCountTransform(state, ast, Object.assign(Object.assign({}, args), { timespan: previousConfig.subtractRight }))
classifyCountTransform(state, ast, {
...args,
timespan: previousConfig.subtractLeft
}),
classifyCountTransform(state, ast, {
...args,
timespan: previousConfig.subtractRight
})
]);

@@ -249,0 +258,0 @@ if (!previousConfig.allowNegativeValue) {

10

lib/CountUniqueFunctions.js

@@ -6,3 +6,3 @@ "use strict";

const sqrl_1 = require("sqrl");
const murmur128x64 = require("murmur-128");
const murmurJs = require("murmurhash3.js");
const sqrl_common_1 = require("sqrl-common");

@@ -17,3 +17,3 @@ const sqrlRedisParser_1 = require("./parser/sqrlRedisParser");

}
const data = new Uint8Array(murmur128x64(value));
const data = Buffer.from(murmurJs.x64.hash128(value));
const hashHex = sqrl_common_1.arrayToHex(data);

@@ -142,3 +142,7 @@ return hashHex.substring(16);

const sortedGroupAliases = sortedGroup.map(feature => feature.alias);
const { entityId, entityAst } = state.addHashedEntity(ast, "UniqueCounter", Object.assign({ groups: sortedGroupAliases, uniques: sortedUniques.map(feature => feature.alias) }, (whereTruth ? { whereFeatures, whereTruth } : {})));
const { entityId, entityAst } = state.addHashedEntity(ast, "UniqueCounter", {
groups: sortedGroupAliases,
uniques: sortedUniques.map(feature => feature.alias),
...(whereTruth ? { whereFeatures, whereTruth } : {})
});
const originalKeysAst = state.setGlobal(ast, sqrl_1.AstBuilder.call("_getKeyList", [

@@ -145,0 +149,0 @@ entityAst,

/// <reference types="node" />
import { RedisInterface, RateLimitOptions } from "../services/RedisService";
import { Context } from "sqrl";
import { MockRedisDatabase } from "./MockRedisDatabase";
import { RedisInterface, RateLimitOptions } from "../services/RedisInterface";
export declare class MockRedisService implements RedisInterface, MockRedisDatabase {

@@ -6,0 +6,0 @@ db: {};

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getWindowStart = exports.getCurrentBucketExpirySeconds = exports.getBucketTimeForTimeMs = exports.getBucketSize = exports.getAllBucketKeys = exports.getBucketKey = void 0;
const RedisService_1 = require("./RedisService");
const RedisInterface_1 = require("./RedisInterface");
function getBucketKey(databaseSet, prefix, key, windowMs, bucketTime) {
return RedisService_1.createRedisKey(databaseSet, prefix, key, windowMs, bucketTime);
return RedisInterface_1.createRedisKey(databaseSet, prefix, key, windowMs, bucketTime);
}

@@ -8,0 +8,0 @@ exports.getBucketKey = getBucketKey;

/// <reference types="node" />
import { Context, SqrlKey } from "sqrl";
import { RedisInterface } from "./RedisService";
import { CountUniqueService } from "../Services";
import { RedisInterface } from "./RedisInterface";
export declare class RedisApproxCountUniqueService implements CountUniqueService {

@@ -6,0 +6,0 @@ private redis;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RedisApproxCountUniqueService = void 0;
const RedisService_1 = require("./RedisService");
const BucketedKeys_1 = require("./BucketedKeys");
const RedisCountService_1 = require("./RedisCountService");
const RedisInterface_1 = require("./RedisInterface");
const NUM_BUCKETS = 10;

@@ -14,3 +14,3 @@ class RedisApproxCountUniqueService {

async bumpTotal(ctx, key, sortedHashes) {
const redisKey = RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getHex());
const redisKey = RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getHex());
await Promise.all([

@@ -36,3 +36,3 @@ this.redis.pfadd(ctx, redisKey, sortedHashes),

async fetchTotal(ctx, key, at, windowMs, extraHashesKey) {
const redisKey = RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getHex());
const redisKey = RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getHex());
return this.redis.pfcount(ctx, extraHashesKey ? [redisKey, extraHashesKey] : [redisKey]);

@@ -45,3 +45,3 @@ }

if (addHashes.length) {
extraHashesKey = RedisService_1.createRedisKey(databaseSet, this.prefix, "temp", ...addHashes);
extraHashesKey = RedisInterface_1.createRedisKey(databaseSet, this.prefix, "temp", ...addHashes);
Promise.all([

@@ -48,0 +48,0 @@ this.redis.pfadd(ctx, extraHashesKey, addHashes),

import { Context, SqrlKey } from "sqrl";
import { RedisInterface } from "./RedisService";
import { RedisInterface } from "./RedisInterface";
export interface RedisBucketCountInterface {

@@ -4,0 +4,0 @@ bump(ctx: Context, props: {

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RedisTotalCountService = void 0;
const RedisService_1 = require("./RedisService");
const RedisCountService_1 = require("./RedisCountService");
const RedisInterface_1 = require("./RedisInterface");
class RedisTotalCountService {

@@ -12,3 +12,3 @@ constructor(redis, prefix) {

async bump(ctx, props) {
const key = RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, props.key.getHex());
const key = RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, props.key.getHex());
await Promise.all([

@@ -20,3 +20,3 @@ this.redis.increment(ctx, key, props.amount),

async count(ctx, props) {
const key = RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, props.key.getHex());
const key = RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, props.key.getHex());
const values = await this.redis.mgetNumbers(ctx, [key]);

@@ -23,0 +23,0 @@ return values[0];

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

import { RedisInterface } from "./RedisService";
import { Context, SqrlKey } from "sqrl";
import { CountService } from "../Services";
import { RedisInterface } from "./RedisInterface";
export declare const TOTAL_COUNT_EXPIRY_SEC: number;

@@ -5,0 +5,0 @@ export declare class RedisCountService implements CountService {

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RedisCountService = exports.TOTAL_COUNT_EXPIRY_SEC = void 0;
const RedisService_1 = require("./RedisService");
const BucketedKeys_1 = require("./BucketedKeys");
const RedisInterface_1 = require("./RedisInterface");
const NUM_BUCKETS = 10;

@@ -15,3 +15,3 @@ exports.TOTAL_COUNT_EXPIRY_SEC = 90 * 24 * 3600;

await Promise.all(keys.map(key => {
const redisKey = RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getHex());
const redisKey = RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getHex());
return Promise.all([

@@ -25,3 +25,3 @@ this.redis.increment(ctx, redisKey, by),

const redisKeys = keys.map(key => {
return RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getHex());
return RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getHex());
});

@@ -28,0 +28,0 @@ return this.redis.mgetNumbers(ctx, redisKeys);

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

import { RedisInterface } from "./RedisService";
import { Context, SqrlKey } from "sqrl";
import { CountUniqueService } from "../Services";
import { RedisInterface } from "./RedisInterface";
export declare class RedisCountUniqueService implements CountUniqueService {

@@ -5,0 +5,0 @@ private redis;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RedisCountUniqueService = void 0;
const RedisService_1 = require("./RedisService");
const RedisInterface_1 = require("./RedisInterface");
class RedisCountUniqueService {

@@ -18,6 +18,6 @@ constructor(redis, prefix) {

});
await this.redis.listPush(ctx, RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getBuffer()), ...push);
await this.redis.listPush(ctx, RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getBuffer()), ...push);
}
async getData(ctx, key) {
const data = await this.redis.getList(ctx, RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getBuffer()));
const data = await this.redis.getList(ctx, RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, key.getBuffer()));
return data.map(entry => JSON.parse(entry));

@@ -24,0 +24,0 @@ }

import { LabelService } from "../LabelFunctions";
import { RedisInterface } from "./RedisService";
import { Context, Manipulator, SqrlEntity, WhenCause } from "sqrl";
import { RedisInterface } from "./RedisInterface";
export declare class RedisLabelService implements LabelService {

@@ -5,0 +5,0 @@ private redis;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RedisLabelService = void 0;
const RedisService_1 = require("./RedisService");
const RedisInterface_1 = require("./RedisInterface");
const EXPIRY = 60 * 60 * 24 * 30;

@@ -13,3 +13,3 @@ class RedisLabelService {

manipulator.addCallback(async (ctx) => {
const key = RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, "label", entity.getNumberString(), label);
const key = RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, "label", entity.getNumberString(), label);
await this.redis.set(ctx, key, "1");

@@ -21,3 +21,3 @@ await this.redis.expire(ctx, key, EXPIRY);

manipulator.addCallback(async (ctx) => {
const key = RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, "label", entity.getNumberString(), label);
const key = RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, "label", entity.getNumberString(), label);
await this.redis.del(ctx, key);

@@ -27,3 +27,3 @@ });

async hasLabel(ctx, entity, label) {
const rv = await this.redis.get(ctx, RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, "label", entity.getNumberString(), label));
const rv = await this.redis.get(ctx, RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, "label", entity.getNumberString(), label));
return !!rv;

@@ -30,0 +30,0 @@ }

import { RateLimitService, RateLimitProps, SessionProps } from "../RateLimitFunctions";
import { RedisInterface } from "./RedisService";
import { Context } from "sqrl";
import { RedisInterface } from "./RedisInterface";
export declare class RedisRateLimit implements RateLimitService {

@@ -5,0 +5,0 @@ private redis;

/// <reference types="node" />
import { Context, DatabaseSet } from "sqrl";
export interface RateLimitOptions {
maxAmount: number;
refillTimeMs: number;
refillAmount: number;
take: number;
at: number;
strict: boolean;
}
export interface RedisInterface {
rateLimitFetch(ctx: Context, key: Buffer, opt: RateLimitOptions): Promise<number>;
sessionize(ctx: Context, key: Buffer, opt: RateLimitOptions): Promise<number>;
increment(ctx: Context, key: Buffer, amount?: number): Promise<number>;
get(ctx: Context, key: Buffer): Promise<Buffer>;
del(ctx: Context, ...keys: Buffer[]): Promise<number>;
set(ctx: Context, key: Buffer, value: string, mode?: "NX" | "XX"): Promise<boolean>;
getList(ctx: Context, key: Buffer): Promise<string[]>;
listPush(ctx: Context, key: Buffer, ...values: Array<string | Buffer | number>): Promise<void>;
pfcount(ctx: Context, keys: Buffer[]): Promise<number>;
pfadd(ctx: Context, key: Buffer, values: string[]): Promise<void>;
expire(ctx: Context, key: Buffer, seconds: number): Promise<void>;
mgetNumbers(ctx: Context, keys: Buffer[]): Promise<number[]>;
}
export declare function createRedisKey(databaseSet: DatabaseSet, prefix: string, ...keys: Array<string | number | Buffer>): Buffer;
import { Context } from "sqrl";
import { RedisInterface, RateLimitOptions } from "./RedisInterface";
export declare class RedisService implements RedisInterface {

@@ -27,0 +5,0 @@ private conn;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RedisService = exports.createRedisKey = void 0;
exports.RedisService = void 0;
const addressToHostPort_1 = require("../addressToHostPort");
const Redis = require("ioredis");
const murmurhash = require("murmurhash-native");
const sqrl_common_1 = require("sqrl-common");
const rateLimitFetchLua_1 = require("../lua/rateLimitFetchLua");
const sessionizeLua_1 = require("../lua/sessionizeLua");
function createRedisKey(databaseSet, prefix, ...keys) {
const parts = [
databaseSet.getDatasetId(),
prefix,
...keys.map(key => {
if (key instanceof Buffer) {
return key.toString("hex");
}
else {
return key;
}
})
];
return murmurhash.murmurHash128x64(Buffer.from(JSON.stringify(parts), "utf-8"), 0, "buffer");
}
exports.createRedisKey = createRedisKey;
class RedisService {

@@ -27,0 +10,0 @@ constructor(address) {

/// <reference types="node" />
import { RedisInterface } from "./RedisService";
import { Context, UniqueId } from "sqrl";
import { RedisInterface } from "./RedisInterface";
export declare const TIMESTAMP_BITS = 40;

@@ -5,0 +5,0 @@ export declare const TIMESTAMP_SIZE: number;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RedisUniqueIdService = exports.SimpleId = exports.REMAINDER_SIZE = exports.REMAINDER_BITS = exports.TIMESTAMP_EPOCH = exports.TIMESTAMP_SIZE = exports.TIMESTAMP_BITS = void 0;
const RedisService_1 = require("./RedisService");
const sqrl_1 = require("sqrl");
const sqrl_common_1 = require("sqrl-common");
const bigint_buffer_1 = require("bigint-buffer");
const RedisInterface_1 = require("./RedisInterface");
exports.TIMESTAMP_BITS = 40;

@@ -50,3 +50,3 @@ exports.TIMESTAMP_SIZE = Math.pow(2, exports.TIMESTAMP_BITS);

const timeMs = this.getTimeMs();
const timeKey = RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, "time", timeMs);
const timeKey = RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, "time", timeMs);
const [remainder] = await Promise.all([

@@ -59,3 +59,3 @@ this.redis.increment(ctx, timeKey),

async fetch(ctx, type, key) {
const idKey = RedisService_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, "id", type, key);
const idKey = RedisInterface_1.createRedisKey(ctx.requireDatabaseSet(), this.prefix, "id", type, key);
const saved = await this.redis.get(ctx, idKey);

@@ -62,0 +62,0 @@ if (saved) {

{
"name": "sqrl-redis-functions",
"version": "0.6.6-beta.5",
"version": "0.6.6-beta.6",
"description": "SQRL (A Safe, Stateful Rules Language for Event Streams) - functions for storing state in redis",

@@ -49,3 +49,3 @@ "homepage": "https://twitter.github.io/sqrl",

"prettier": "^1.18.2",
"sqrl-test-utils": "^0.6.6-beta.5",
"sqrl-test-utils": "^0.6.6-beta.6",
"ts-jest": "^24.0.2",

@@ -64,7 +64,7 @@ "ts-node": "^8.3.0",

"moment": "^2.24.0",
"murmur-128": "^0.2.1",
"murmurhash3.js": "git+https://github.com/qix/murmurHash3.js.git",
"sqrl": "^0.6.6-beta.5",
"sqrl-common": "^0.6.6-beta.5"
},
"gitHead": "ed5d613c8f8460f8e204f2c58efb843a6166f238"
"gitHead": "5494cfcd70466077e90d33e907fd3658159f4fa9"
}

Sorry, the diff of this file is too big to display

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