c8osdkjscore
Version:
convertigo's sdk js core
440 lines • 21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var c8oCore_1 = require("./c8oCore");
var c8oProgress_1 = require("./c8oProgress");
var c8oResponse_1 = require("./c8oResponse");
var fullSyncReplication_1 = require("./fullSyncReplication");
var pouchdb_browser_1 = require("pouchdb-browser");
var PouchDBLoad = require("pouchdb-load");
var C8oFullSyncDatabase = (function () {
function C8oFullSyncDatabase(c8o, databaseName, fullSyncDatabases, localSuffix) {
this.database = null;
this.pullFullSyncReplication = new fullSyncReplication_1.FullSyncReplication(true);
this.pushFullSyncReplication = new fullSyncReplication_1.FullSyncReplication(false);
this.syncFullSyncReplication = new fullSyncReplication_1.FullSyncReplication();
this.c8o = c8o;
var header = {
"x-convertigo-sdk": this.c8o.sdkVersion,
};
Object.assign(header, this.c8o.headers);
this.remotePouchHeader = {
ajax: {
headers: header,
},
};
this.c8oFullSyncDatabaseUrl = fullSyncDatabases + databaseName;
this.databaseName = databaseName + localSuffix;
try {
if (c8o.couchUrl != null) {
this.database = new pouchdb_browser_1.default(c8o.couchUrl + "/" + databaseName);
this.c8o.log.debug("PouchDb launched on couchbaselite");
}
else {
pouchdb_browser_1.default.plugin(PouchDBLoad);
this.database = new pouchdb_browser_1.default(databaseName);
this.c8o.log.debug("PouchDb launched normally");
}
}
catch (error) {
throw error;
}
}
C8oFullSyncDatabase.prototype.startAllReplications = function (parameters, c8oResponseListener) {
return this.startSync(this.syncFullSyncReplication, parameters, c8oResponseListener);
};
C8oFullSyncDatabase.prototype.startPullReplication = function (parameters, c8oResponseListener) {
return this.startReplication(this.pullFullSyncReplication, parameters, c8oResponseListener);
};
C8oFullSyncDatabase.prototype.startPushReplication = function (parameters, c8oResponseListener) {
return this.startReplication(this.pushFullSyncReplication, parameters, c8oResponseListener);
};
C8oFullSyncDatabase.prototype.startSync = function (fullSyncReplication, parameters, c8oResponseListener) {
var _this = this;
var continuous = false;
var cancel = false;
var parametersObj = {};
if (fullSyncReplication.replication != null) {
fullSyncReplication.replication.cancel();
}
if (parameters["continuous"] != null) {
if (parameters["continuous"] === true) {
continuous = true;
}
else {
continuous = false;
}
}
if (parameters["cancel"] != null) {
if (parameters["cancel"] === true) {
cancel = true;
}
else {
cancel = false;
}
}
parametersObj["retry"] = true;
if (parameters["retry"] != null) {
parametersObj["retry"] = parameters["retry"];
}
if (parameters["filter"] != null) {
parametersObj["filter"] = parameters["filter"];
}
if (parameters["doc_ids"] != null) {
parametersObj["doc_ids"] = parameters["doc_ids"];
}
if (parameters["query_params"] != null) {
parametersObj["query_params"] = parameters["query_params"];
}
if (parameters["view"] != null) {
parametersObj["view"] = parameters["view"];
}
if (parameters["since"] != null) {
parametersObj["since"] = parameters["since"];
}
if (parameters["heartbeat"] != null) {
parametersObj["heartbeat"] = parameters["heartbeat"];
}
if (parameters["timeout"] != null) {
parametersObj["timeout"] = parameters["timeout"];
}
if (parameters["batch_size"] != null) {
parametersObj["batch_size"] = parameters["batch_size"];
}
if (parameters["batches_limit"] != null) {
parametersObj["batches_limit"] = parameters["batches_limit"];
}
if (parameters["back_off_function"] != null) {
parametersObj["back_off_function"] = parameters["back_off_function"];
}
if (parameters["checkpoint"] != null) {
parametersObj["checkpoint"] = parameters["checkpoint"];
}
if (parameters["seq_interval"] != null) {
parametersObj["seq_interval"] = parameters["seq_interval"];
}
var remoteDB = new pouchdb_browser_1.default(this.c8oFullSyncDatabaseUrl, this.remotePouchHeader);
var rep = fullSyncReplication.replication = this.database.sync(remoteDB, parametersObj);
var param = parameters;
var progress = new c8oProgress_1.C8oProgress();
progress.raw = rep;
progress.continuous = false;
return new Promise(function (resolve, reject) {
rep.on("change", function (info) {
progress.finished = false;
if (info.direction === "pull") {
progress.pull = true;
progress.status = rep.pull.state;
progress.finished = rep.pull.state !== "active";
}
else if (info.direction === "push") {
progress.pull = false;
progress.status = rep.push.state;
progress.finished = rep.push.state !== "active";
}
progress.total = info.change.docs_read;
progress.current = info.change.docs_written;
param[c8oCore_1.C8oCore.ENGINE_PARAMETER_PROGRESS] = progress;
c8oResponseListener.onProgressResponse(progress, param);
}).on("complete", function (info) {
progress.finished = true;
progress.pull = false;
progress.total = info.push.docs_read;
progress.current = info.push.docs_written;
progress.status = info.status;
progress.finished = true;
param[c8oCore_1.C8oCore.ENGINE_PARAMETER_PROGRESS] = progress;
c8oResponseListener.onProgressResponse(progress, param);
progress.pull = true;
progress.total = info.pull.docs_read;
progress.current = info.pull.docs_written;
c8oResponseListener.onProgressResponse(progress, param);
rep.cancel();
if (continuous) {
parametersObj["live"] = true;
rep = fullSyncReplication.replication = _this.database.sync(remoteDB, parametersObj);
progress.continuous = true;
progress.raw = rep;
progress.taskInfo = "n/a";
progress.pull = true;
progress.status = "live";
progress.finished = false;
progress.pull = true;
progress.total = 0;
progress.current = 0;
c8oResponseListener.onProgressResponse(progress, param);
progress.pull = false;
c8oResponseListener.onProgressResponse(progress, param);
rep.on("change", function (info) {
progress.finished = false;
if (info.direction === "pull") {
progress.pull = true;
progress.status = rep.pull.state;
}
else if (info.direction === "push") {
progress.pull = false;
progress.status = rep.push.state;
}
progress.total = info.change.docs_read;
progress.current = info.change.docs_written;
param[c8oCore_1.C8oCore.ENGINE_PARAMETER_PROGRESS] = progress;
c8oResponseListener.onProgressResponse(progress, param);
})
.on("paused", function () {
progress.finished = true;
c8oResponseListener.onProgressResponse(progress, param);
if (progress.total === 0 && progress.current === 0) {
progress.pull = !progress.pull;
c8oResponseListener.onProgressResponse(progress, param);
}
})
.on("error", function (err) {
if (err.message === "Unexpected end of JSON input") {
progress.finished = true;
progress.status = "live";
c8oResponseListener.onProgressResponse(progress, parameters);
}
else {
rep.cancel();
if (err.code === "ETIMEDOUT" && err.status === 0) {
if (parameters["force_retry"] == true) {
_this.c8o.log.warn("C80=>FullSyncDatabase: Timeout handle during fullsync replication (fs://.sync) \n Forcing Restarting replication");
_this.database.sync(remoteDB, { timeout: 600000, retry: true });
}
else {
_this.c8o.log.warn("C80=>FullSyncDatabase: Timeout handle during fullsync replication (fs://.sync) \n Restarting automatically replication");
}
}
else if (err.name === "unknown" && err.status === 0 && err.message === "getCheckpoint rejected with ") {
reject("NO_NETWORK");
}
else {
reject(err);
}
}
});
}
}).on("error", function (err) {
rep.cancel();
if (err.message === "Unexpected end of JSON input") {
progress.finished = true;
progress.status = "Complete";
c8oResponseListener.onProgressResponse(progress, parameters);
rep.cancel();
}
else if (err.code === "ETIMEDOUT" && err.status === 0) {
if (parameters["force_retry"] == true) {
_this.c8o.log.warn("C80=>FullSyncDatabase: Timeout handle during fullsync replication (fs://.sync) \n Forcing Restarting replication");
_this.database.sync(remoteDB, { timeout: 600000, retry: true });
}
else {
_this.c8o.log.warn("C80=>FullSyncDatabase: Timeout handle during fullsync replication (fs://.sync) \n Restarting automatically replication");
}
}
else if (err.name === "unknown" && err.status === 0 && err.message === "getCheckpoint rejected with ") {
reject("NO_NETWORK");
}
else {
reject(err);
}
});
if (cancel) {
if (rep != null) {
rep.cancel();
progress.finished = true;
if (c8oResponseListener != null && c8oResponseListener instanceof c8oResponse_1.C8oResponseProgressListener) {
c8oResponseListener.onProgressResponse(progress, parameters);
}
}
}
}).catch(function (error) {
throw error.toString();
});
};
C8oFullSyncDatabase.prototype.startReplication = function (fullSyncReplication, parameters, c8oResponseListener) {
var _this = this;
var continuous = false;
var cancel = false;
var parametersObj = {};
if (fullSyncReplication.replication != null) {
fullSyncReplication.replication.cancel();
}
if (parameters["continuous"] != null) {
if (parameters["continuous"] == true) {
continuous = true;
}
else {
continuous = false;
}
}
if (parameters["cancel"] != null) {
if (parameters["cancel"] == true) {
cancel = true;
}
else {
cancel = false;
}
}
parametersObj["retry"] = true;
if (parameters["retry"] != null) {
parametersObj["retry"] = parameters["retry"];
}
if (parameters["filter"] != null) {
parametersObj["filter"] = parameters["filter"];
}
if (parameters["doc_ids"] != null) {
parametersObj["doc_ids"] = parameters["doc_ids"];
}
if (parameters["query_params"] != null) {
parametersObj["query_params"] = parameters["query_params"];
}
if (parameters["view"] != null) {
parametersObj["view"] = parameters["view"];
}
if (parameters["since"] != null) {
parametersObj["since"] = parameters["since"];
}
if (parameters["heartbeat"] != null) {
parametersObj["heartbeat"] = parameters["heartbeat"];
}
if (parameters["timeout"] != null) {
parametersObj["timeout"] = parameters["timeout"];
}
if (parameters["batch_size"] != null) {
parametersObj["batch_size"] = parameters["batch_size"];
}
if (parameters["batches_limit"] != null) {
parametersObj["batches_limit"] = parameters["batches_limit"];
}
if (parameters["back_off_function"] != null) {
parametersObj["back_off_function"] = parameters["back_off_function"];
}
if (parameters["checkpoint"] != null) {
parametersObj["checkpoint"] = parameters["checkpoint"];
}
if (parameters["seq_interval"] != null) {
parametersObj["seq_interval"] = parameters["seq_interval"];
}
var remoteDB = new pouchdb_browser_1.default(this.c8oFullSyncDatabaseUrl, this.remotePouchHeader);
var rep = fullSyncReplication.replication = fullSyncReplication.pull ? this.database.replicate.from(remoteDB, parametersObj) : this.database.replicate.to(remoteDB, parametersObj);
var progress = new c8oProgress_1.C8oProgress();
progress.raw = rep;
progress.pull = fullSyncReplication.pull;
progress.continuous = false;
return new Promise(function (resolve, reject) {
rep.on("change", function (info) {
progress.total = info.docs_read;
progress.current = info.docs_written;
progress.status = "change";
parameters[c8oCore_1.C8oCore.ENGINE_PARAMETER_PROGRESS] = progress;
c8oResponseListener.onProgressResponse(progress, parameters);
}).on("complete", function (info) {
progress.finished = true;
progress.total = info.docs_read;
progress.current = info.docs_written;
progress.status = "complete";
parameters[c8oCore_1.C8oCore.ENGINE_PARAMETER_PROGRESS] = progress;
c8oResponseListener.onProgressResponse(progress, parameters);
rep.cancel();
if (continuous) {
parametersObj["live"] = true;
rep = fullSyncReplication.replication = fullSyncReplication.pull ? _this.database.replicate.from(remoteDB, parametersObj) : _this.database.replicate.to(remoteDB, parametersObj);
progress.continuous = true;
progress.raw = rep;
progress.taskInfo = "n/a";
rep.on("change", function (info) {
progress.finished = false;
progress.total = info.docs_read;
progress.current = info.docs_written;
progress.status = "change";
parameters[c8oCore_1.C8oCore.ENGINE_PARAMETER_PROGRESS] = progress;
c8oResponseListener.onProgressResponse(progress, parameters);
})
.on("error", function (err) {
if (err.message === "Unexpected end of JSON input") {
progress.finished = true;
progress.status = "live";
c8oResponseListener.onProgressResponse(progress, parameters);
}
else {
rep.cancel();
if (err.code === "ETIMEDOUT" && err.status === 0) {
reject("TIMEOUT");
}
else if (err.name === "unknown" && err.status === 0 && err.message === "getCheckpoint rejected with ") {
reject("NO_NETWORK");
}
else {
reject(err);
}
}
});
}
}).on("error", function (err) {
if (err.message === "Unexpected end of JSON input") {
progress.finished = true;
progress.status = "complete";
parameters[c8oCore_1.C8oCore.ENGINE_PARAMETER_PROGRESS] = progress;
c8oResponseListener.onProgressResponse(progress, parameters);
rep.cancel();
}
else if (err.code === "ETIMEDOUT" && err.status === 0) {
reject("TIMEOUT");
}
else if (err.name === "unknown" && err.status === 0 && err.message === "getCheckpoint rejected with ") {
reject("NO_NETWORK");
}
else {
reject(err);
}
});
if (cancel) {
if (rep != null) {
rep.cancel();
progress.finished = true;
if (c8oResponseListener != null && c8oResponseListener instanceof c8oResponse_1.C8oResponseProgressListener) {
c8oResponseListener.onProgressResponse(progress, parameters);
}
}
}
}).catch(function (error) {
throw error.toString();
});
};
Object.defineProperty(C8oFullSyncDatabase.prototype, "getdatabseName", {
get: function () {
return this.databaseName;
},
enumerable: true,
configurable: true
});
Object.defineProperty(C8oFullSyncDatabase.prototype, "getdatabase", {
get: function () {
return this.database;
},
enumerable: true,
configurable: true
});
C8oFullSyncDatabase.prototype.deleteDB = function () {
var _this = this;
return new Promise(function (resolve, reject) {
if (_this.database != null) {
_this.database.destroy().then(function (response) {
_this.database = null;
resolve(response);
}).catch(function (error) {
_this.c8o.log.debug("Failed to close DB, will retry: ", error.message);
_this.database.destroy().then(function (response) {
_this.database = null;
resolve(response);
}).catch(function (error) {
_this.c8o.log.debug("Failed to close DB, second attempt has failed ", error.message);
reject(error);
});
});
}
});
};
return C8oFullSyncDatabase;
}());
exports.C8oFullSyncDatabase = C8oFullSyncDatabase;
//# sourceMappingURL=fullSyncDatabase.js.map