polyv-live-cli
Version:
CLI tool for managing PolyV live streaming services.
77 lines • 2.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateTimestamp = generateTimestamp;
exports.filterParams = filterParams;
exports.sortAndConcatenateParams = sortAndConcatenateParams;
exports.processParams = processParams;
exports.generateMD5Signature = generateMD5Signature;
exports.generateSignature = generateSignature;
exports.createSignature = createSignature;
const crypto_1 = require("crypto");
function generateTimestamp(customTimestamp) {
return customTimestamp ?? Date.now();
}
function filterParams(params) {
const filtered = {};
for (const [key, value] of Object.entries(params)) {
if (value !== null && value !== undefined && value !== '') {
filtered[key] = value;
}
}
return filtered;
}
function sortAndConcatenateParams(params) {
const sortedKeys = Object.keys(params).sort();
let result = '';
for (const key of sortedKeys) {
result += key + String(params[key]);
}
return result;
}
function processParams(params) {
const filteredParams = filterParams(params);
const paramString = sortAndConcatenateParams(filteredParams);
return {
params: filteredParams,
paramString
};
}
function generateMD5Signature(paramString, appSecret) {
const signatureSource = appSecret + paramString + appSecret;
const md5Hash = (0, crypto_1.createHash)('md5').update(signatureSource, 'utf8').digest('hex');
return md5Hash.toUpperCase();
}
function generateSignature(params, options) {
if (!params.appId) {
throw new Error('appId is required for signature generation');
}
if (!options.appSecret) {
throw new Error('appSecret is required for signature generation');
}
const timestamp = options.customTimestamp ?? params.timestamp ?? generateTimestamp();
const signatureParams = {
...params,
timestamp
};
const { params: sortedParams, paramString } = processParams(signatureParams);
const signature = generateMD5Signature(paramString, options.appSecret);
const result = {
signature,
timestamp,
sortedParams
};
if (options.debug) {
result.rawString = options.appSecret + paramString + options.appSecret;
}
if (options.debug) {
console.log('[Signature Debug] Sorted parameters:', sortedParams);
console.log('[Signature Debug] Parameter string:', paramString);
console.log('[Signature Debug] Raw signature string:', result.rawString);
console.log('[Signature Debug] Final signature:', signature);
}
return result;
}
function createSignature(params, appSecret, debug = false) {
return generateSignature(params, { appSecret, debug });
}
//# sourceMappingURL=signature.js.map