gamemoney-commonjs
Version:
GameMoney API wrapper for Node.js
55 lines (54 loc) • 2.24 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getRandomString = exports.generateHmacSignature = exports.generateRsaSignature = exports.verifyRsaSignature = exports.parametersToString = void 0;
const node_url_1 = require("node:url");
const node_crypto_1 = __importDefault(require("node:crypto"));
const node_fs_1 = __importDefault(require("node:fs"));
const publicCert = node_fs_1.default.readFileSync(new node_url_1.URL('certs/gm.crt', (0, node_url_1.pathToFileURL)(__filename))).toString();
function parametersToString(body) {
let parametersString = '';
const keys = Object.keys(body).sort();
if (Array.isArray(body)) {
keys.sort((a, b) => Number(a) - Number(b));
}
for (const key of keys) {
let value = body[key];
if (key === 'signature') {
continue;
}
if (value === null || value === undefined) {
value = '';
}
if (typeof value === 'object' && value !== null) {
value = parametersToString(value);
}
parametersString += `${key}:${value};`;
}
return parametersString;
}
exports.parametersToString = parametersToString;
function verifyRsaSignature(body) {
return node_crypto_1.default
.createVerify('RSA-SHA256')
.update(parametersToString(body), 'utf8')
.verify(publicCert, body.signature, 'base64');
}
exports.verifyRsaSignature = verifyRsaSignature;
function generateRsaSignature(body, key) {
return node_crypto_1.default.createSign('RSA-SHA256').update(parametersToString(body), 'utf8').sign(key, 'base64');
}
exports.generateRsaSignature = generateRsaSignature;
function generateHmacSignature(body, key) {
return node_crypto_1.default.createHmac('sha256', key).update(parametersToString(body), 'utf8').digest('hex');
}
exports.generateHmacSignature = generateHmacSignature;
function getRandomString(length) {
return node_crypto_1.default
.randomBytes(Math.ceil(length / 2))
.toString('hex')
.slice(0, length);
}
exports.getRandomString = getRandomString;