import Node from 'type/node';
import Operation, { OperationInput } from 'operation';
import NotFoundError from 'http/error/not-found';
import getNodeParameters from 'utility/get-node-parameters';
interface Input extends OperationInput {
readonly url: string;
}
class LoadNodeFromUrlOperation extends Operation {
protected performInternal(): Promise {
if (this.isLocalNode()) {
return this.loadLocalNode();
} else {
return this.loadRemoteNode();
}
}
private async loadLocalNode(): Promise {
const repository = this.getRepository();
const url = this.getUrl();
const node_parameters = getNodeParameters(url);
const node = await repository.fetchNode(node_parameters);
if (node === undefined) {
throw new NotFoundError(`Unable to fetch local node: ${url}`);
}
return node;
}
private loadRemoteNode(): Promise {
throw new Error('not implemented');
}
private isLocalNode(): boolean {
const url = this.getUrl();
const repository = this.getRepository();
return repository.isLocalUrl(url);
}
private getUrl(): string {
const input = this.getInput();
return input.url;
}
}
export default LoadNodeFromUrlOperation;