import 'dotenv/config'; const username = process.env.SMS_USERNAME; const password = process.env.SMS_PASSWORD ?? process.env.SMS_API_KEY; const sender = process.env.SMS_SENDER; if (!username || !password || !sender) { console.error('Set SMS_USERNAME, SMS_PASSWORD (or SMS_API_KEY), and SMS_SENDER in .env'); process.exit(1); } const targets = process.argv.slice(2).length ? process.argv.slice(2) : ['09397439581']; function escapeXml(value) { return String(value) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); } const text = 'کد ورود منتایم: 123456'; for (const mobile of targets) { const soapBody = ` ${escapeXml(username)} ${escapeXml(password)} ${escapeXml(text)} ${escapeXml(mobile)} ${escapeXml(sender)} `; const res = await fetch('https://webservice.0098sms.com/service.asmx', { method: 'POST', headers: { 'Content-Type': 'text/xml; charset=utf-8', SOAPAction: 'http://tempuri.org/SendSMS', }, body: soapBody, signal: AbortSignal.timeout(20_000), }); const body = await res.text(); const match = body.match(/]*>([^<]*)<\/SendSMSResult>/i); const code = match?.[1]?.trim() ?? '?'; console.log(`mobile=${mobile} http=${res.status} RESULT=${code}`); if (code !== '0') { console.log(body.slice(0, 400)); } }