UNPKG

admob-ssv

Version:

Tool for validate AdMob rewarded ads signatures SSV

59 lines 2.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseQueryString = parseQueryString; exports.parseMessage = parseMessage; const node_crypto_1 = require("node:crypto"); const node_querystring_1 = __importDefault(require("node:querystring")); const debug_1 = __importDefault(require("debug")); const provider_1 = __importDefault(require("./keydict/provider")); const debug = (0, debug_1.default)('admob-ssv:verifier'); function parseQueryString(raw) { debug(`Parsing query string`); return node_querystring_1.default.parse(raw); } function parseMessage(data) { debug(`Parsing message`); const { key_id, signature, ...fdata } = data; const qs = node_querystring_1.default .stringify(fdata, undefined, undefined, { encodeURIComponent: (s) => s }) .split('&') .sort() .join('&'); return { keyId: Number.parseInt(key_id, 10), signature: Buffer.from(signature, 'base64'), body: Buffer.from(qs, 'utf8'), }; } class Verifier { constructor(options = {}) { this.keyProvider = options.keyProvider || new provider_1.default({ cache: options.keyCache, }); } async verify(data) { debug(`Verify`); const parsedData = typeof data === 'string' ? parseMessage(parseQueryString(data)) : !data.body ? parseMessage(data) : data; const { keyId, signature, body } = parsedData; debug(`\tGetting key ${keyId}`); const key = await this.keyProvider.get(keyId); if (!key) { throw new Error('Key not found'); } const verifier = (0, node_crypto_1.createVerify)('RSA-SHA256'); verifier.update(body); debug(`\tVerifying`); return verifier.verify(key, signature); } } exports.default = Verifier; //# sourceMappingURL=verifier.js.map