Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

demux

Package Overview
Dependencies
Maintainers
3
Versions
77
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

demux - npm Package Compare versions

Comparing version 3.1.4-9f3b4a9.0 to 3.1.4-a5ccae5.0

11

dist/AbstractActionHandler.d.ts

@@ -15,2 +15,3 @@ import * as Logger from 'bunyan';

protected log: Logger;
protected initialized: boolean;
private deferredEffects;

@@ -32,2 +33,6 @@ private handlerVersionMap;

/**
* Performs all required initialization for the handler.
*/
initialize(): Promise<void>;
/**
* Updates the `lastProcessedBlockNumber` and `lastProcessedBlockHash` meta state, coinciding with the block

@@ -51,2 +56,6 @@ * that has just been processed. These are the same values read by `updateIndexState()`.

/**
* Idempotently performs any required setup.
*/
protected abstract setup(): Promise<void>;
/**
* This method is used when matching the types of incoming actions against the types the `Updater`s and `Effect`s are

@@ -83,2 +92,3 @@ * subscribed to. When this returns true, their corresponding functions will run.

protected handleActions(state: any, context: any, nextBlock: NextBlock, isReplay: boolean): Promise<void>;
private handleRollback;
private range;

@@ -88,2 +98,3 @@ private runOrDeferEffect;

private getNextDeferredBlockNumber;
private rollbackDeferredEffects;
private initHandlerVersions;

@@ -90,0 +101,0 @@ private refreshIndexState;

56

dist/AbstractActionHandler.js

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

this.handlerVersionName = 'v1';
this.initialized = false;
this.deferredEffects = {};

@@ -50,12 +51,7 @@ this.handlerVersionMap = {};

const { isRollback, isEarliestBlock } = blockMeta;
if (isRollback || (isReplay && isEarliestBlock)) {
const rollbackBlockNumber = blockInfo.blockNumber - 1;
const rollbackCount = this.lastProcessedBlockNumber - rollbackBlockNumber;
this.log.info(`Rolling back ${rollbackCount} blocks to block ${rollbackBlockNumber}...`);
yield this.rollbackTo(rollbackBlockNumber);
yield this.refreshIndexState();
if (!this.initialized) {
yield this.initialize();
this.initialized = true;
}
else if (this.lastProcessedBlockNumber === 0 && this.lastProcessedBlockHash === '') {
yield this.refreshIndexState();
}
yield this.handleRollback(isRollback, blockInfo.blockNumber, isReplay, isEarliestBlock);
const nextBlockNeeded = this.lastProcessedBlockNumber + 1;

@@ -100,2 +96,10 @@ // Just processed this block; skip

/**
* Performs all required initialization for the handler.
*/
initialize() {
return __awaiter(this, void 0, void 0, function* () {
yield this.setup();
});
}
/**
* This method is used when matching the types of incoming actions against the types the `Updater`s and `Effect`s are

@@ -179,2 +183,17 @@ * subscribed to. When this returns true, their corresponding functions will run.

}
handleRollback(isRollback, blockNumber, isReplay, isEarliestBlock) {
return __awaiter(this, void 0, void 0, function* () {
if (isRollback || (isReplay && isEarliestBlock)) {
const rollbackBlockNumber = blockNumber - 1;
const rollbackCount = this.lastProcessedBlockNumber - rollbackBlockNumber;
this.log.info(`Rolling back ${rollbackCount} blocks to block ${rollbackBlockNumber}...`);
yield this.rollbackTo(rollbackBlockNumber);
this.rollbackDeferredEffects(blockNumber);
yield this.refreshIndexState();
}
else if (this.lastProcessedBlockNumber === 0 && this.lastProcessedBlockHash === '') {
yield this.refreshIndexState();
}
});
}
range(start, end) {

@@ -185,2 +204,3 @@ return Array(end - start).fill(0).map((_, i) => i + start);

const { block, lastIrreversibleBlockNumber } = nextBlock;
const { blockNumber } = block.blockInfo;
const shouldRunImmediately = (!effect.deferUntilIrreversible || block.blockInfo.blockNumber <= lastIrreversibleBlockNumber);

@@ -190,7 +210,7 @@ if (shouldRunImmediately) {

}
else if (!this.deferredEffects[block.blockInfo.blockNumber]) {
this.deferredEffects[block.blockInfo.blockNumber] = [() => effect.run(payload, block, context)];
}
else {
this.deferredEffects[block.blockInfo.blockNumber].push(() => effect.run(payload, block, context));
if (!this.deferredEffects[blockNumber]) {
this.deferredEffects[blockNumber] = [];
}
this.deferredEffects[blockNumber].push(() => effect.run(payload, block, context));
}

@@ -205,3 +225,4 @@ }

if (this.deferredEffects[blockNumber]) {
for (const deferredEffect of this.deferredEffects[blockNumber]) {
const effects = this.deferredEffects[blockNumber];
for (const deferredEffect of effects) {
deferredEffect();

@@ -220,2 +241,9 @@ }

}
rollbackDeferredEffects(rollbackTo) {
const blockNumbers = Object.keys(this.deferredEffects).map((num) => parseInt(num, 10));
const toRollBack = blockNumbers.filter((bn) => bn >= rollbackTo);
for (const blockNumber of toRollBack) {
delete this.deferredEffects[blockNumber];
}
}
initHandlerVersions(handlerVersions) {

@@ -222,0 +250,0 @@ if (handlerVersions.length === 0) {

@@ -15,3 +15,3 @@ import * as Logger from 'bunyan';

protected log: Logger;
private initialized;
protected initialized: boolean;
constructor(options?: ActionReaderOptions);

@@ -41,2 +41,6 @@ /**

/**
* Performs all required initialization for the reader.
*/
initialize(): Promise<void>;
/**
* Changes the state of the `AbstractActionReader` instance to have just processed the block at the given block

@@ -54,2 +58,6 @@ * number. If the block exists in its temporary block history, it will use this, otherwise it will fetch the block

/**
* Idempotently performs any required setup.
*/
protected abstract setup(): Promise<void>;
/**
* Incrementally rolls back reader state one block at a time, comparing the blockHistory with

@@ -56,0 +64,0 @@ * newly fetched blocks. Fork resolution is finished when either the current block's previous hash

@@ -59,6 +59,5 @@ "use strict";

};
// TODO: Should this only be called when updating headBlockNumber?
this.lastIrreversibleBlockNumber = yield this.getLastIrreversibleBlockNumber();
if (!this.initialized) {
yield this.initBlockState();
yield this.initialize();
}

@@ -96,2 +95,12 @@ if (this.currentBlockNumber === this.headBlockNumber) {

/**
* Performs all required initialization for the reader.
*/
initialize() {
return __awaiter(this, void 0, void 0, function* () {
yield this.setup();
yield this.initBlockState();
this.initialized = true;
});
}
/**
* Changes the state of the `AbstractActionReader` instance to have just processed the block at the given block

@@ -164,2 +173,3 @@ * number. If the block exists in its temporary block history, it will use this, otherwise it will fetch the block

return __awaiter(this, void 0, void 0, function* () {
this.lastIrreversibleBlockNumber = yield this.getLastIrreversibleBlockNumber();
this.headBlockNumber = yield this.getLatestNeededBlockNumber();

@@ -171,3 +181,2 @@ if (this.currentBlockNumber < 0) {

yield this.reloadHistory();
this.initialized = true;
});

@@ -174,0 +183,0 @@ }

@@ -22,2 +22,3 @@ import * as Logger from 'bunyan';

private error;
private clean;
constructor(actionReader: AbstractActionReader, actionHandler: AbstractActionHandler, pollInterval: number);

@@ -52,2 +53,3 @@ /**

protected checkForBlocks(isReplay?: boolean): Promise<void>;
private readonly status;
}

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

const Logger = __importStar(require("bunyan"));
const interfaces_1 = require("./interfaces");
/**

@@ -32,2 +33,3 @@ * Coordinates implementations of `AbstractActionReader`s and `AbstractActionHandler`s in

this.error = null;
this.clean = true;
this.log = Logger.createLogger({ name: 'demux' });

@@ -56,2 +58,3 @@ }

}
this.clean = false;
this.running = true;

@@ -89,2 +92,3 @@ this.error = null;

this.log.info('Starting indexing.');
// tslint:disable-next-line:no-floating-promises
this.watch();

@@ -109,16 +113,6 @@ return true;

get info() {
let status;
if (this.running && !this.shouldPause) {
status = 'indexing';
}
else if (this.running && this.shouldPause) {
status = 'pausing';
}
else {
status = 'paused';
}
const info = {
handler: this.actionHandler.info,
reader: this.actionReader.info,
status,
indexingStatus: this.status,
};

@@ -154,3 +148,18 @@ if (this.error) {

}
get status() {
if (this.clean) {
return interfaces_1.IndexingStatus.Initial;
}
if (this.running && !this.shouldPause) {
return interfaces_1.IndexingStatus.Indexing;
}
if (this.running && this.shouldPause) {
return interfaces_1.IndexingStatus.Pausing;
}
if (this.error) {
return interfaces_1.IndexingStatus.Stopped;
}
return interfaces_1.IndexingStatus.Paused;
}
}
exports.BaseActionWatcher = BaseActionWatcher;

@@ -22,1 +22,9 @@ export declare class MismatchedBlockHashError extends Error {

}
declare class RethrownError extends Error {
constructor(message: string, error?: Error);
private extendStack;
}
export declare class NotInitializedError extends RethrownError {
constructor(message?: string, error?: Error);
}
export {};

@@ -55,1 +55,32 @@ "use strict";

exports.UnresolvedForkError = UnresolvedForkError;
// Adapted from https://stackoverflow.com/a/42755876
class RethrownError extends Error {
constructor(message, error) {
super(message);
this.name = this.constructor.name;
this.message = message;
if (typeof Error.captureStackTrace === 'function') {
Error.captureStackTrace(this, this.constructor);
}
else {
this.stack = (new Error(message)).stack;
}
if (error) {
this.extendStack(error);
}
Object.setPrototypeOf(this, RethrownError.prototype);
}
extendStack(error) {
const messageLines = (this.message.match(/\n/g) || []).length + 1;
if (this.stack) {
this.stack = this.stack.split('\n').slice(0, messageLines + 1).join('\n') + '\n' + error.stack;
}
}
}
class NotInitializedError extends RethrownError {
constructor(message, error) {
super(`The proper initialization has not occurred. ${message}`, error);
Object.setPrototypeOf(this, NotInitializedError.prototype);
}
}
exports.NotInitializedError = NotInitializedError;

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

export { Action, Block, BlockInfo, Effect, HandlerVersion, IndexState, Updater } from './interfaces';
export { AbstractActionHandler } from './AbstractActionHandler';

@@ -6,1 +5,3 @@ export { AbstractActionReader } from './AbstractActionReader';

export { ExpressActionWatcher } from './ExpressActionWatcher';
export * from './interfaces';
export * from './errors';
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });

@@ -11,1 +14,3 @@ var AbstractActionHandler_1 = require("./AbstractActionHandler");

exports.ExpressActionWatcher = ExpressActionWatcher_1.ExpressActionWatcher;
__export(require("./interfaces"));
__export(require("./errors"));

@@ -15,7 +15,2 @@ export interface ActionReaderOptions {

onlyIrreversible?: boolean;
/**
* This determines how many blocks in the past are cached. This is used for determining
* block validity during both normal operation and when rolling back.
*/
maxHistoryLength?: number;
}

@@ -91,4 +86,11 @@ export interface Block {

}
export declare enum IndexingStatus {
Initial = "initial",
Indexing = "indexing",
Pausing = "pausing",
Paused = "paused",
Stopped = "stopped"
}
export interface DemuxInfo {
status: string;
indexingStatus: IndexingStatus;
error?: Error;

@@ -95,0 +97,0 @@ handler: HandlerInfo;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var IndexingStatus;
(function (IndexingStatus) {
IndexingStatus["Initial"] = "initial";
IndexingStatus["Indexing"] = "indexing";
IndexingStatus["Pausing"] = "pausing";
IndexingStatus["Paused"] = "paused";
IndexingStatus["Stopped"] = "stopped";
})(IndexingStatus = exports.IndexingStatus || (exports.IndexingStatus = {}));
{
"name": "demux",
"version": "3.1.4-9f3b4a9.0",
"version": "3.1.4-a5ccae5.0",
"author": {

@@ -14,7 +14,9 @@ "name": "Julien Heller",

"devDependencies": {
"@blockone/tslint-config-blockone": "^1.0.0",
"@blockone/tslint-config-blockone": "^2.0.0",
"@types/bunyan": "^1.8.5",
"@types/express": "^4.16.0",
"@types/jest": "^23.1.4",
"@types/node": "^10.5.1",
"@types/request-promise-native": "^1.0.15",
"@types/supertest": "^2.0.7",
"eslint": "^4.9.0",

@@ -36,6 +38,6 @@ "eslint-config-airbnb-base": "12.1.0",

"watch": "tsc -w",
"example": "./run-example.sh",
"example": "./scripts/run-example.sh",
"lint": "tslint -c tslint.json -p tsconfig.json",
"test": "jest --detectOpenHandles --maxWorkers=2",
"build-docs": "./build-docs.sh",
"build-docs": "./scripts/build-docs.sh",
"current-version": "echo $npm_package_version"

@@ -61,7 +63,5 @@ },

"dependencies": {
"@types/express": "^4.16.0",
"@types/supertest": "^2.0.7",
"bunyan": "^1.8.12",
"express": "^4.16.4"
"bunyan": "1.8.12",
"express": "4.16.4"
}
}
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