@glitterprotocol/glitter-sdk
Version:
The JavaScript SDK for Glitter
577 lines • 27.2 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Db = void 0;
var core_1 = require("../../core");
var signing_1 = require("@glitterprotocol/glitter.proto/cosmos/tx/signing/v1beta1/signing");
var signing_2 = require("@glitterprotocol/glitter.proto/cosmos/tx/signing/v1beta1/signing");
var SqlMsg_1 = require("../../core/sql/SqlMsg");
var SqlGrantMsg_1 = require("../../core/sql/SqlGrantMsg");
var query_1 = require("@glitterprotocol/glitter.proto/index/query");
var msgs_1 = require("../../core/bank/msgs");
var util_1 = require("../../util");
var contract_1 = require("../../util/contract");
var CreateDataset_1 = require("../../core/transfer/CreateDataset");
var EditDataset_1 = require("../../core/transfer/EditDataset");
var EditTable_1 = require("../../core/transfer/EditTable");
var RenewalDataset_1 = require("../../core/transfer/RenewalDataset");
var Pledge_1 = require("../../core/transfer/Pledge");
var ReleasePledge_1 = require("../../core/transfer/ReleasePledge");
var GrantReader = 'reader';
var GrantWriter = 'writer';
var GrantAdmin = 'admin';
var Db = /** @class */ (function () {
function Db(lcd, key) {
this.lcd = lcd;
this.key = key;
}
Db.prototype.accountNumberAndSequence = function () {
return this.lcd.auth.accountInfo(this.key.accAddress).then(function (d) {
return {
account_number: d.getAccountNumber(),
sequence: d.getSequenceNumber(),
};
});
};
Db.prototype.getDatabase = function (name) {
return this.lcd.dataset.getDataset(name);
};
Db.prototype.getAllDataset = function (params) {
return this.lcd.dataset.getAllDataset(params);
};
Db.prototype.getAllCPDTs = function (params) {
return this.lcd.dataset.getAllCPDTs(params);
};
Db.prototype.getCPDTByDataset = function (name) {
return this.lcd.dataset.getCPDTByDataset(name);
};
Db.prototype.getAllExpirationTime = function (params) {
return this.lcd.dataset.getAllExpirationTime(params);
};
Db.prototype.getAllConsumer = function (params) {
return this.lcd.dataset.getAllConsumer(params);
};
Db.prototype.getConsumerByAddress = function (address) {
return this.lcd.dataset.getConsumerByAddress(address);
};
Db.prototype.getReleasingCPDTs = function (params) {
return this.lcd.dataset.getReleasingCPDTs(params);
};
Db.prototype.getReleasingCPDT = function (address) {
return this.lcd.dataset.getReleasingCPDT(address);
};
Db.prototype.accountNumber = function () {
return this.lcd.auth.accountInfo(this.key.accAddress).then(function (d) {
return d.getAccountNumber();
});
};
Db.prototype.sequence = function () {
return this.lcd.auth.accountInfo(this.key.accAddress).then(function (d) {
return d.getSequenceNumber();
});
};
Db.prototype.createTx = function (options) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.lcd.tx.create([
{
address: this.key.accAddress,
sequenceNumber: options.sequence,
publicKey: this.key.publicKey,
},
], options)];
});
});
};
Db.prototype.setHeader = function (headers) {
return this.lcd.apiRequester.setHeaders(headers);
};
Db.prototype.createTxOptions = function (options) {
console.log(options);
};
Db.prototype.createAndSignTx = function (options) {
return __awaiter(this, void 0, void 0, function () {
var accountNumber, sequence, res, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
accountNumber = options.accountNumber;
sequence = options.sequence;
if (!(accountNumber === undefined || sequence === undefined)) return [3 /*break*/, 2];
return [4 /*yield*/, this.accountNumberAndSequence()];
case 1:
res = _a.sent();
if (accountNumber === undefined) {
accountNumber = res.account_number;
}
if (sequence === undefined) {
sequence = res.sequence;
}
_a.label = 2;
case 2:
options.sequence = sequence;
options.accountNumber = accountNumber;
return [4 /*yield*/, this.createTx(options)];
case 3:
tx = _a.sent();
return [2 /*return*/, this.key.signTx(tx, {
accountNumber: accountNumber,
sequence: sequence,
chainID: this.lcd.config.chainID,
signMode: options.signMode ||
(this.lcd.config.isClassic
? signing_1.SignMode.SIGN_MODE_DIRECT
: signing_2.SignMode.SIGN_MODE_DIRECT),
}, this.lcd.config.isClassic)];
}
});
});
};
Db.prototype.sqlExec = function (sql, args) {
return __awaiter(this, void 0, void 0, function () {
var execut, txOptions, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
execut = new SqlMsg_1.SQLMsg(this.key.accAddress, sql, args);
txOptions = {
msgs: [execut],
fee: new core_1.Fee(10000000000000000, '10000000000000000agli', '', ''),
memo: 'sql transaction!',
feeDenoms: ['agli'],
};
return [4 /*yield*/, this.createAndSignTx(txOptions)];
case 1:
tx = _a.sent();
return [2 /*return*/, this.lcd.tx.broadcast(tx)];
}
});
});
};
Db.prototype.transfer = function (addr, amount) {
return __awaiter(this, void 0, void 0, function () {
var send, txOptions, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
send = new msgs_1.MsgSend(this.key.accAddress, addr, amount);
txOptions = {
msgs: [send],
memo: 'bank send transaction!',
feeDenoms: ['agli'],
gas: 'auto',
};
return [4 /*yield*/, this.createAndSignTx(txOptions)];
case 1:
tx = _a.sent();
return [2 /*return*/, this.lcd.tx.broadcast(tx)];
}
});
});
};
Db.prototype.createDatabase = function (params) {
return __awaiter(this, void 0, void 0, function () {
var send, txOptions, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
send = new CreateDataset_1.CreateDataset(params);
txOptions = {
msgs: [send],
fee: new core_1.Fee(10000000000000000, '10000000000000000agli', '', ''),
memo: 'sql transaction!',
feeDenoms: ['agli'],
};
return [4 /*yield*/, this.createAndSignTx(txOptions)];
case 1:
tx = _a.sent();
return [2 /*return*/, this.lcd.tx.broadcast(tx)];
}
});
});
};
Db.prototype.editDatabase = function (params) {
return __awaiter(this, void 0, void 0, function () {
var send, txOptions, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
send = new EditDataset_1.EditDataset(params);
txOptions = {
msgs: [send],
fee: new core_1.Fee(10000000000000000, '10000000000000000agli', '', ''),
memo: 'sql transaction!',
feeDenoms: ['agli'],
};
return [4 /*yield*/, this.createAndSignTx(txOptions)];
case 1:
tx = _a.sent();
return [2 /*return*/, this.lcd.tx.broadcast(tx)];
}
});
});
};
Db.prototype.createTable = function (params) {
return __awaiter(this, void 0, void 0, function () {
var send, txOptions, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
send = new EditTable_1.EditTable(params);
txOptions = {
msgs: [send],
fee: new core_1.Fee(10000000000000000, '10000000000000000agli', '', ''),
memo: 'sql transaction!',
feeDenoms: ['agli'],
};
return [4 /*yield*/, this.createAndSignTx(txOptions)];
case 1:
tx = _a.sent();
return [2 /*return*/, this.lcd.tx.broadcast(tx)];
}
});
});
};
Db.prototype.editTable = function (params) {
return __awaiter(this, void 0, void 0, function () {
var send, txOptions, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
send = new EditTable_1.EditTable(params);
txOptions = {
msgs: [send],
fee: new core_1.Fee(10000000000000000, '10000000000000000agli', '', ''),
memo: 'sql transaction!',
feeDenoms: ['agli'],
};
return [4 /*yield*/, this.createAndSignTx(txOptions)];
case 1:
tx = _a.sent();
return [2 /*return*/, this.lcd.tx.broadcast(tx)];
}
});
});
};
Db.prototype.RenewalDataset = function (params) {
return __awaiter(this, void 0, void 0, function () {
var send, txOptions, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
send = new RenewalDataset_1.RenewalDataset(params);
txOptions = {
msgs: [send],
fee: new core_1.Fee(10000000000000000, '10000000000000000agli', '', ''),
memo: 'sql transaction!',
feeDenoms: ['agli'],
};
return [4 /*yield*/, this.createAndSignTx(txOptions)];
case 1:
tx = _a.sent();
return [2 /*return*/, this.lcd.tx.broadcast(tx)];
}
});
});
};
Db.prototype.pledge = function (params) {
return __awaiter(this, void 0, void 0, function () {
var send, txOptions, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
send = new Pledge_1.Pledge(params);
txOptions = {
msgs: [send],
fee: new core_1.Fee(10000000000000000, '10000000000000000agli', '', ''),
memo: 'sql transaction!',
feeDenoms: ['agli'],
};
return [4 /*yield*/, this.createAndSignTx(txOptions)];
case 1:
tx = _a.sent();
return [2 /*return*/, this.lcd.tx.broadcast(tx)];
}
});
});
};
Db.prototype.releasePledge = function (params) {
return __awaiter(this, void 0, void 0, function () {
var send, txOptions, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
send = new ReleasePledge_1.ReleasePledge(params);
txOptions = {
msgs: [send],
fee: new core_1.Fee(10000000000000000, '10000000000000000agli', '', ''),
memo: 'sql transaction!',
feeDenoms: ['agli'],
};
return [4 /*yield*/, this.createAndSignTx(txOptions)];
case 1:
tx = _a.sent();
return [2 /*return*/, this.lcd.tx.broadcast(tx)];
}
});
});
};
Db.prototype.dropTable = function (database, table) {
var sql = "DROP TABLE IF EXISTS ".concat(database, ".").concat(table);
return this.sqlExec(sql);
};
Db.prototype.showCreateTable = function (database, table) {
return __awaiter(this, void 0, void 0, function () {
var endpoint, payload, r;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
endpoint = '/blockved/glitterchain/index/sql/show_create_table';
payload = { database_name: database, table_name: table };
return [4 /*yield*/, this.lcd.apiRequester.get(endpoint, payload)];
case 1:
r = _a.sent();
return [2 /*return*/, r];
}
});
});
};
Db.prototype.listDatabases = function () {
return __awaiter(this, void 0, void 0, function () {
var endpoint, r;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
endpoint = '/blockved/glitterchain/index/sql/list_databases';
return [4 /*yield*/, this.lcd.apiRequester.get(endpoint)];
case 1:
r = _a.sent();
return [2 /*return*/, r];
}
});
});
};
Db.prototype.listTables = function (_a) {
var _b = _a.table_keyword, table_keyword = _b === void 0 ? '' : _b, _c = _a.uid, uid = _c === void 0 ? '' : _c, _d = _a.database, database = _d === void 0 ? '' : _d, _e = _a.page, page = _e === void 0 ? '1' : _e, _f = _a.page_size, page_size = _f === void 0 ? '100' : _f;
return __awaiter(this, void 0, void 0, function () {
var endpoint, payload, r;
return __generator(this, function (_g) {
switch (_g.label) {
case 0:
endpoint = '/blockved/glitterchain/index/sql/list_tables';
payload = { table_keyword: table_keyword, uid: uid, database: database, page: page, page_size: page_size };
return [4 /*yield*/, this.lcd.apiRequester.get(endpoint, payload)];
case 1:
r = _g.sent();
return [2 /*return*/, r];
}
});
});
};
Db.prototype.insert = function (database, table, columns) {
return __awaiter(this, void 0, void 0, function () {
var col_name, vals, _a, sql, values;
return __generator(this, function (_b) {
col_name = Object.keys(columns);
vals = [];
col_name.forEach(function (key) {
var value = typeof columns[key] === 'string' ? "'".concat(columns[key], "'") : columns[key];
vals.push(value);
});
_a = (0, util_1.buildBatchInsertStatement)(database, table, col_name, [vals]), sql = _a.sql, values = _a.values;
// const sql = `insert into ${database}.${table} (${col_name.join(
// ','
// )}) values (${vals.join(',')})`;
return [2 /*return*/, this.sqlExec(sql, values)];
});
});
};
Db.prototype.batchInsert = function (database, table, columns) {
return __awaiter(this, void 0, void 0, function () {
var vals, col_name, _a, sql, values;
return __generator(this, function (_b) {
if (columns.length == 0) {
throw new Error('columns is empty');
}
vals = [];
col_name = Object.keys(columns[0]);
columns.forEach(function (col) {
var val = [];
Object.keys(col).forEach(function (key) {
var value = typeof col[key] === 'string' ? "'".concat(col[key], "'") : col[key];
val.push(value);
});
vals.push(val);
});
_a = (0, util_1.buildBatchInsertStatement)(database, table, col_name, vals), sql = _a.sql, values = _a.values;
// const sql = `insert into ${database}.${table} (${col_name.join(
// ','
// )}) values ${vals.join(',')}`;
return [2 /*return*/, this.sqlExec(sql, values)];
});
});
};
Db.prototype.update = function (database, table, columns, where) {
return __awaiter(this, void 0, void 0, function () {
var _a, sql, values;
return __generator(this, function (_b) {
_a = (0, util_1.buildUpdateStatement)(database, table, columns, where), sql = _a.sql, values = _a.values;
return [2 /*return*/, this.sqlExec(sql, values)];
});
});
};
Db.prototype.delete = function (database, table, where, orderBy, asc, limit) {
return __awaiter(this, void 0, void 0, function () {
var _a, sql, values;
return __generator(this, function (_b) {
if (!where) {
throw new Error('where is empty');
}
if (limit && limit > 50) {
throw new Error('too much will to delete');
}
_a = (0, util_1.buildDeleteStatement)(database, table, where, orderBy, asc, limit), sql = _a.sql, values = _a.values;
return [2 /*return*/, this.sqlExec(sql, values)];
});
});
};
Db.prototype.query = function (sqlTemplate, keyWords, source) {
return __awaiter(this, void 0, void 0, function () {
var endpoint, argumentsArr, req, r;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
endpoint = "/blockved/glitterchain/index/sql/simple_query";
argumentsArr = (0, util_1.toGlitterArguments)(keyWords || []);
if (argumentsArr && argumentsArr.length) {
req = query_1.SQLQueryRequest.fromPartial({
sql: sqlTemplate,
arguments: argumentsArr,
});
}
else {
req = query_1.SQLQueryRequest.fromPartial({
sql: sqlTemplate,
});
}
r = this.lcd.apiRequester.post(endpoint, req, source);
return [4 /*yield*/, r.then(function (r) {
var _a = (r || {}).result, result = _a === void 0 ? [] : _a;
var rawRow = (0, contract_1.getContractQueryResult)(result);
return { result: rawRow };
})];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
};
Db.prototype.queryV2 = function (sqlTemplate, datasetName, keyWords, source) {
return __awaiter(this, void 0, void 0, function () {
var endpoint, argumentsArr, req, dateset, url, r;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
endpoint = "/glitterchain/index/dataset/" + datasetName;
argumentsArr = (0, util_1.toGlitterArguments)(keyWords || []);
req = {};
if (argumentsArr && argumentsArr.length) {
req = query_1.SQLQueryRequest.fromPartial({
sql: sqlTemplate,
arguments: argumentsArr,
});
}
else {
req = query_1.SQLQueryRequest.fromPartial({
sql: sqlTemplate,
});
}
return [4 /*yield*/, this.lcd.apiRequester.get(endpoint)];
case 1:
dateset = (_a.sent()).dateset;
if (!(dateset && dateset.hosts)) return [3 /*break*/, 3];
url = dateset.hosts + '/api/v1/simple_sql_query';
r = this.lcd.apiRequester.postHttp(url, req, source);
return [4 /*yield*/, r
.then(function (r) {
var _a = (r || {}).result, result = _a === void 0 ? [] : _a;
var rawRow = (0, contract_1.getContractQueryResult)(result);
return { result: rawRow };
})
.catch(function (e) {
console.log(e, 'error');
})];
case 2: return [2 /*return*/, _a.sent()];
case 3: return [2 /*return*/, new Error('obsent host')];
}
});
});
};
Db.prototype.sqlGrant = function (to_addr, role, database, table) {
return __awaiter(this, void 0, void 0, function () {
var execut, txOptions, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
execut = new SqlGrantMsg_1.SqlGrantMsg(this.key.accAddress, table || '', to_addr, role, database);
txOptions = {
msgs: [execut],
fee: new core_1.Fee(10000000000000000, '10000000000000000agli', '', ''),
memo: 'grant transaction!',
feeDenoms: ['agli'],
};
return [4 /*yield*/, this.createAndSignTx(txOptions)];
case 1:
tx = _a.sent();
return [2 /*return*/, this.lcd.tx.broadcast(tx)];
}
});
});
};
Db.prototype.grantReader = function (to_addr, database, table) {
return this.sqlGrant(to_addr, GrantReader, database, table);
};
Db.prototype.grantWriter = function (to_addr, database, table) {
return this.sqlGrant(to_addr, GrantWriter, database, table);
};
Db.prototype.grantAdmin = function (to_addr, database, table) {
return this.sqlGrant(to_addr, GrantAdmin, database, table);
};
return Db;
}());
exports.Db = Db;
//# sourceMappingURL=Db.js.map