UNPKG

@glitterprotocol/glitter-sdk

Version:

The JavaScript SDK for Glitter

229 lines 9.27 kB
"use strict"; 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