origintrail-node
Version:
OriginTrail Node - Decentralized Knowledge Graph Node Library
90 lines (75 loc) • 3.13 kB
JavaScript
import HandleProtocolMessageCommand from '../../../common/handle-protocol-message-command.js';
import {
NETWORK_MESSAGE_TYPES,
OPERATION_ID_STATUS,
ERROR_TYPE,
} from '../../../../../constants/constants.js';
class HandleUpdateRequestCommand extends HandleProtocolMessageCommand {
constructor(ctx) {
super(ctx);
this.operationService = ctx.updateService;
this.blockchainModuleManager = ctx.blockchainModuleManager;
this.pendingStorageService = ctx.pendingStorageService;
this.operationIdService = ctx.operationIdService;
this.pendingStorageService = ctx.pendingStorageService;
this.signatureService = ctx.signatureService;
this.errorType = ERROR_TYPE.UPDATE.UPDATE_LOCAL_STORE_REMOTE_ERROR;
this.operationStartEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_START;
this.operationEndEvent = OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_END;
}
async prepareMessage(commandData) {
const { blockchain, operationId, datasetRoot } = commandData;
const { dataset } = await this.operationIdService.getCachedOperationIdData(operationId);
await this.operationIdService.updateOperationIdStatus(
operationId,
blockchain,
OPERATION_ID_STATUS.UPDATE.UPDATE_VALIDATE_ASSET_REMOTE_START,
);
const validationResult = await this.validateReceivedData(
operationId,
datasetRoot,
dataset,
blockchain,
);
this.operationIdService.updateOperationIdStatus(
operationId,
blockchain,
OPERATION_ID_STATUS.UPDATE.UPDATE_VALIDATE_ASSET_REMOTE_END,
);
if (validationResult.messageType === NETWORK_MESSAGE_TYPES.RESPONSES.NACK) {
return validationResult;
}
await this.operationIdService.updateOperationIdStatus(
operationId,
blockchain,
OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_CACHE_DATASET_START,
);
await this.pendingStorageService.cacheDataset(operationId, datasetRoot, dataset);
await this.operationIdService.updateOperationIdStatus(
operationId,
blockchain,
OPERATION_ID_STATUS.UPDATE.UPDATE_LOCAL_STORE_REMOTE_CACHE_DATASET_END,
);
const identityId = await this.blockchainModuleManager.getIdentityId(blockchain);
const { v, r, s, vs } = await this.signatureService.signMessage(blockchain, datasetRoot);
return {
messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK,
messageData: { identityId, v, r, s, vs },
};
}
/**
* Builds default handleUpdateRequestCommand
* @param map
* @returns {{add, data: *, delay: *, deadline: *}}
*/
default(map) {
const command = {
name: 'v1_0_0HandleUpdateRequestCommand',
delay: 0,
transactional: false,
};
Object.assign(command, map);
return command;
}
}
export default HandleUpdateRequestCommand;