@botwall/sdk
Version:
BotWall SDK for site protection and bot crawling
28 lines • 1.33 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.signRequest = signRequest;
const tweetnacl_1 = __importDefault(require("tweetnacl"));
/**
* Signs a request using Ed25519 based on the signature-input header.
* @param headers - Object containing all headers (header names are case-insensitive)
* @param privateKey - Ed25519 private key (base64-encoded)
* @returns base64-encoded signature string
*/
function signRequest(headers, privateKey) {
// signature-input header must exist
const sigInput = headers['signature-input'] || headers['Signature-Input'] || headers['SIGNATURE-INPUT'];
if (!sigInput)
throw new Error('Missing signature-input header');
// Canonicalize header names (lowercase)
const headerNames = sigInput.trim().split(/\s+/);
const message = headerNames.map(h => headers[h.toLowerCase()] || '').join(' ');
// Decode private key
const privKeyBytes = Buffer.from(privateKey, 'base64');
// Sign message
const signature = tweetnacl_1.default.sign.detached(Buffer.from(message), privKeyBytes);
return Buffer.from(signature).toString('base64');
}
//# sourceMappingURL=signRequest.js.map