@glitterprotocol/glitter-sdk
Version:
The JavaScript SDK for Glitter
229 lines • 9.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.verifySign = exports.buildDeleteStatement = exports.buildUpdateStatement = exports.buildBatchInsertStatement = exports.toGlitterArguments = exports.glitterToEth = exports.ethToGlitter = exports.Glitter = exports.ETH = exports.Convert = exports.isValidChecksumAddress = exports.toChecksumAddress = exports.stripHexPrefix = void 0;
var numeric_1 = require("../core/numeric");
var bech32_1 = require("bech32");
var sha3_1 = require("sha3");
var PublicKey_1 = require("../core/PublicKey");
var secp256k1_1 = require("secp256k1");
var keccak256_1 = require("@ethersproject/keccak256");
var buffer_1 = require("buffer");
var sql_engine_1 = require("@glitterprotocol/glitter.proto/index/sql_engine");
var stripHexPrefix = function (str) {
return str.slice(0, 2) === '0x' ? str.slice(2) : str;
};
exports.stripHexPrefix = stripHexPrefix;
var toChecksumAddress = function (address, chainId) {
if (typeof address !== 'string') {
throw new Error("stripHexPrefix param must be type 'string', is currently type " +
typeof address +
'.');
}
var strip_address = (0, exports.stripHexPrefix)(address).toLowerCase();
var prefix = chainId != null ? chainId.toString() + '0x' : '';
var keccak_hash = keccak(prefix + strip_address).toString('hex');
var output = '0x';
for (var i = 0; i < strip_address.length; i++)
output +=
parseInt(keccak_hash[i], 16) >= 8
? strip_address[i].toUpperCase()
: strip_address[i];
return output;
};
exports.toChecksumAddress = toChecksumAddress;
function isValidChecksumAddress(address, chainId) {
return (isValidAddress(address) && (0, exports.toChecksumAddress)(address, chainId) === address);
}
exports.isValidChecksumAddress = isValidChecksumAddress;
function isValidAddress(address) {
return /^0x[0-9a-fA-F]{40}$/.test(address);
}
function keccak(a) {
return new sha3_1.Keccak(256).update(a).digest();
}
var Convert;
(function (Convert) {
Convert.id = function (c) { return c; };
Convert.toDec = function (c) { return new numeric_1.Dec(c); };
Convert.toString = function (c) { return c.toString(); };
Convert.toFixed = function (c) { return c.toFixed(); };
Convert.toNumber = Number.parseInt;
Convert.toData = function (c) { return c.toData(); };
})(Convert = exports.Convert || (exports.Convert = {}));
function makeChecksummedHexDecoder(chainId) {
return function (data) {
var stripped = (0, exports.stripHexPrefix)(data);
if (!isValidChecksumAddress(data, chainId || null) &&
stripped !== stripped.toLowerCase() &&
stripped !== stripped.toUpperCase()) {
throw Error('Invalid address checksum');
}
return buffer_1.Buffer.from((0, exports.stripHexPrefix)(data), 'hex');
};
}
function makeChecksummedHexEncoder(chainId) {
return function (data) {
return (0, exports.toChecksumAddress)(data.toString('hex'), chainId || null);
};
}
var hexChecksumChain = function (name, chainId) { return ({
decoder: makeChecksummedHexDecoder(chainId),
encoder: makeChecksummedHexEncoder(chainId),
name: name,
}); };
exports.ETH = hexChecksumChain('ETH');
function makeBech32Encoder(prefix) {
return function (data) { return bech32_1.bech32.encode(prefix, bech32_1.bech32.toWords(data)); };
}
function makeBech32Decoder(currentPrefix) {
return function (data) {
var _a = bech32_1.bech32.decode(data), prefix = _a.prefix, words = _a.words;
if (prefix !== currentPrefix) {
throw Error('Unrecognised address format');
}
return buffer_1.Buffer.from(bech32_1.bech32.fromWords(words));
};
}
var bech32Chain = function (name, prefix) { return ({
decoder: makeBech32Decoder(prefix),
encoder: makeBech32Encoder(prefix),
name: name,
}); };
exports.Glitter = bech32Chain('GLITTER', 'glitter');
var ethToGlitter = function (ethAddress) {
var data = exports.ETH.decoder(ethAddress);
return exports.Glitter.encoder(data);
};
exports.ethToGlitter = ethToGlitter;
var glitterToEth = function (glitterAddress) {
var data = exports.Glitter.decoder(glitterAddress);
return exports.ETH.encoder(data);
};
exports.glitterToEth = glitterToEth;
var toGlitterArguments = function (args) {
if (!args || args.length === 0) {
return [];
}
var result = [];
for (var _i = 0, args_1 = args; _i < args_1.length; _i++) {
var arg = args_1[_i];
if (typeof arg === 'string') {
result.push({
type: sql_engine_1.Argument_VarType.STRING,
value: arg,
});
}
else if (typeof arg === 'number') {
if (Number.isInteger(arg)) {
result.push({
type: sql_engine_1.Argument_VarType.INT,
value: arg.toString(),
});
}
else {
result.push({
type: sql_engine_1.Argument_VarType.FLOAT,
value: arg.toString(),
});
}
}
else if (typeof arg === 'boolean') {
result.push({
type: sql_engine_1.Argument_VarType.BOOL,
value: arg.toString(),
});
}
else {
throw new Error("Unsupported type encountered: ".concat(typeof arg));
}
}
return result;
};
exports.toGlitterArguments = toGlitterArguments;
function buildBatchInsertStatement(database, table, columns, rowValues) {
var sql = "INSERT INTO ".concat(database, ".").concat(table, " (").concat(columns.join(','), ") VALUES");
var repeat = columns.length - 1;
var placeholder = " (?,".concat(Array(repeat).fill('?').join(','), ")");
var placeholders = placeholder +
Array(rowValues.length - 1)
.fill(',' + placeholder)
.join('');
var fullSql = sql + placeholders;
var values = [];
for (var _i = 0, rowValues_1 = rowValues; _i < rowValues_1.length; _i++) {
var row = rowValues_1[_i];
console.log('🚀 ~ file: Db.ts:214 ~ Db ~ vals:', row.length);
console.log('🚀 ~ file: Db.ts:214 ~ Db ~ columns:', columns.length);
if (row.length !== columns.length) {
throw new Error('length of value is not correct');
}
var rowArgs = (0, exports.toGlitterArguments)(row);
values.push.apply(values, rowArgs);
}
return { sql: fullSql, values: values };
}
exports.buildBatchInsertStatement = buildBatchInsertStatement;
function buildUpdateStatement(database, table, columns, whereEqual) {
var updateSql = "UPDATE ".concat(database, ".").concat(table, " SET ");
var whereSql = ' WHERE ';
var condVals = [];
if (columns) {
var setClauses = [];
for (var colName in columns) {
if (Object.prototype.hasOwnProperty.call(columns, colName)) {
setClauses.push("".concat(colName, " = ?"));
condVals.push(columns[colName]);
}
}
updateSql += setClauses.join(', ');
}
else {
throw new Error('No columns provided for update.');
}
if (whereEqual) {
var whereClauses = [];
for (var colName in whereEqual) {
if (Object.prototype.hasOwnProperty.call(whereEqual, colName)) {
whereClauses.push("".concat(colName, " = ?"));
condVals.push(whereEqual[colName]);
}
}
whereSql += whereClauses.join(' AND');
}
else {
throw new Error('No WHERE conditions provided for update.');
}
var sql = updateSql + whereSql;
var values = (0, exports.toGlitterArguments)(condVals);
return { sql: sql, values: values };
}
exports.buildUpdateStatement = buildUpdateStatement;
function buildDeleteStatement(database, table, where, orderBy, asc, limit) {
var whereCond = [];
var condVals = [];
if (where) {
for (var colName in where) {
if (Object.prototype.hasOwnProperty.call(where, colName)) {
whereCond.push("".concat(colName, " = ?"));
condVals.push(where[colName]);
}
}
}
var sql = "DELETE FROM ".concat(database, ".").concat(table, " WHERE ").concat(whereCond.join(' AND '));
if (orderBy) {
sql += " ORDER BY ".concat(orderBy, " ").concat(asc ? 'ASC' : 'DESC');
}
if (limit && limit > 0) {
sql += " LIMIT ".concat(limit);
}
var values = (0, exports.toGlitterArguments)(condVals);
return { sql: sql, values: values };
}
exports.buildDeleteStatement = buildDeleteStatement;
function verifySign(addr, msg, signHex) {
var recPubkey = (0, secp256k1_1.ecdsaRecover)(Uint8Array.from(buffer_1.Buffer.from(signHex, 'hex')), 1, Uint8Array.from(buffer_1.Buffer.from((0, keccak256_1.keccak256)(buffer_1.Buffer.from(msg)).slice(2), 'hex')));
var recAddr = new PublicKey_1.EthSimplePublicKey(buffer_1.Buffer.from(recPubkey).toString('base64')).address();
return recAddr.toLowerCase() == addr.toLowerCase();
}
exports.verifySign = verifySign;
//# sourceMappingURL=convert.js.map