From 61509ff6a636acc638d51d7bea70606cdb3e0c05 Mon Sep 17 00:00:00 2001 From: wixarm Date: Tue, 3 Feb 2026 12:38:09 +0330 Subject: [PATCH] feat: postal inquiry --- routes/nationalDocumentsRoutes.js | 114 +++++++++++++++++++++++++++--- 1 file changed, 103 insertions(+), 11 deletions(-) diff --git a/routes/nationalDocumentsRoutes.js b/routes/nationalDocumentsRoutes.js index 5db0f23..44a5a40 100644 --- a/routes/nationalDocumentsRoutes.js +++ b/routes/nationalDocumentsRoutes.js @@ -57,7 +57,7 @@ async function performLogin() { response.on("end", () => { const csrfMatch = data.match( - / { + const request = https.request(requestOptions, (response) => { + const chunks = []; + + response.on("data", (chunk) => { + chunks.push(chunk); + }); + + response.on("end", () => { + try { + const raw = Buffer.concat(chunks); + const jsonData = parseBaJsonResponse(response, raw); + resolve(jsonData); + } catch (error) { + reject(new Error(`Invalid JSON response: ${error.message}`)); + } + }); + }); + + request.on("error", (error) => { + reject(error); + }); + + request.write(payloadData); + request.end(); + }); + + return finalInfo; +} + async function makeAgriWindowsUnitsRequest(PartIdCode, cookie) { const payloadData = querystring.stringify({ PartIdCode, @@ -540,4 +604,32 @@ router.get("/inquiry-farm", async (req, res) => { } }); +router.get("/postcode-inquiry", async (req, res) => { + const { postcode } = req.query; + + if (!postcode) { + return res.status(400).json({ + error: "Missing required field: postcode", + }); + } + + try { + let finalCookie = await performLogin(); + let finalInfo = await makePostcodeInquiryRequest(postcode, finalCookie); + + while (finalInfo && finalInfo.error) { + console.log("Session expired, retrying login and request..."); + finalCookie = await performLogin(); + finalInfo = await makePostcodeInquiryRequest(postcode, finalCookie); + } + + res.json(finalInfo); + } catch (error) { + res.status(500).json({ + error: "Failed to fetch postcode inquiry info", + message: error.message, + }); + } +}); + module.exports = router;