61 lines
1.4 KiB
JavaScript
61 lines
1.4 KiB
JavaScript
const crypto = require("crypto");
|
|
const https = require("https");
|
|
|
|
function createSignature(payload, secret) {
|
|
return crypto
|
|
.createHmac("sha256", secret)
|
|
.update(payload)
|
|
.digest("hex");
|
|
}
|
|
|
|
async function sendRequest(url, payload, signature) {
|
|
const parsedUrl = new URL(url);
|
|
|
|
const options = {
|
|
hostname: parsedUrl.hostname,
|
|
path: parsedUrl.pathname + parsedUrl.search,
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
"Content-Length": Buffer.byteLength(payload),
|
|
"X-Signature": signature
|
|
}
|
|
};
|
|
|
|
return new Promise((resolve, reject) => {
|
|
const req = https.request(options, (res) => {
|
|
let data = "";
|
|
|
|
res.on("data", (chunk) => (data += chunk));
|
|
res.on("end", () => {
|
|
console.log("Status:", res.statusCode);
|
|
console.log("Response:", data);
|
|
resolve();
|
|
});
|
|
});
|
|
|
|
req.on("error", reject);
|
|
req.write(payload);
|
|
req.end();
|
|
});
|
|
}
|
|
|
|
async function run() {
|
|
try {
|
|
const url = process.env.INPUT_URL;
|
|
const secret = process.env.INPUT_SECRET;
|
|
const payload = process.env.INPUT_PAYLOAD
|
|
|
|
const signature = createSignature(payload, secret);
|
|
|
|
console.log("Sending webhook...");
|
|
await sendRequest(url, payload, signature);
|
|
|
|
console.log("Done.");
|
|
} catch (err) {
|
|
console.error("Action failed:", err);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
run(); |