const fs = require('fs'); const REGEX_IMSI = /AT\+CIMI: (\d+)/; const REGEX_IMEI = /AT\+CGSN: (\d+)/; const REGEX_COPS = /\+COPS: (.+) OK/; function getMatchFromBuffer(buffer, pattern) { if (!buffer) return null; const content = typeof buffer === 'string' ? buffer : buffer.toString(); const matches = content.match(pattern); return (matches && matches[1]) || null; } exports.getIMSI = async (modemName, filenameTemplate) => { const filename = (filenameTemplate || '').replace(/<MODEMNAME>/g, modemName); if (!filename) return null; try { const contentBuffer = await fs.promises.readFile(filename); return getMatchFromBuffer(contentBuffer, REGEX_IMSI); } catch (e) { return null; } }; exports.getIMEI = async (modemName, filenameTemplate) => { const filename = (filenameTemplate || '').replace(/<MODEMNAME>/g, modemName); if (!filename) return null; try { const contentBuffer = await fs.promises.readFile(filename); return getMatchFromBuffer(contentBuffer, REGEX_IMEI); } catch (e) { return null; } }; exports.getCOPS = async (modemName, filenameTemplate) => { const filename = (filenameTemplate || '').replace(/<MODEMNAME>/g, modemName); if (!filename) return null; try { const contentBuffer = await fs.promises.readFile(filename); return getMatchFromBuffer(contentBuffer, REGEX_COPS); } catch (e) { return null; } }; exports.get = async (modemName, filenameTemplate) => { const filename = (filenameTemplate || '').replace(/<MODEMNAME>/g, modemName); if (!filename) return null; let buffer; try { buffer = await fs.promises.readFile(filename); } catch (e) { return null; } if (!buffer) return null; return { imsi: getMatchFromBuffer(buffer, REGEX_IMSI), imei: getMatchFromBuffer(buffer, REGEX_IMEI), cops: getMatchFromBuffer(buffer, REGEX_COPS), }; };