nolimit-x 1.0.66 → 1.0.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/processor.js +12 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nolimit-x",
3
- "version": "1.0.66",
3
+ "version": "1.0.68",
4
4
  "description": "Advanced email sender ",
5
5
  "main": "src/cli.js",
6
6
  "bin": {
package/src/processor.js CHANGED
@@ -350,12 +350,20 @@ class CampaignProcessor {
350
350
  const qrGen = new QRGenerator();
351
351
  const ecLevels = ['L', 'M', 'Q', 'H'];
352
352
  const jitter = () => Math.floor(Math.random() * 20);
353
+ // Pre-resolve placeholders in qrLink BEFORE passing to URL parser.
354
+ // new URL() will encode {{ }} as %7B%7B if they aren't replaced first.
355
+ let resolvedQrLink = qrLink
356
+ .replace(/\{\{EMAIL\}\}/g, email)
357
+ .replace(/\{\{NAME\}\}/g, nameResult?.name || '')
358
+ .replace(/\{\{RANDOM\}\}/g, Math.floor(100000 + Math.random() * 900000).toString())
359
+ .replace(/\{\{TIMESTAMP\}\}/g, new Date().toISOString());
360
+
353
361
  // Make QR link per-recipient if dynamic URL generation is enabled
354
- let perRecipientQrLink = qrLink;
355
- if (this.engineConfig.isFeatureEnabled('dynamicUrlGeneration') && qrLink.trim()) {
362
+ let perRecipientQrLink = resolvedQrLink;
363
+ if (this.engineConfig.isFeatureEnabled('dynamicUrlGeneration') && resolvedQrLink.trim()) {
356
364
  try {
357
- perRecipientQrLink = this.urlGenerator.generateDynamicURL(qrLink, domain, email);
358
- } catch (e) { perRecipientQrLink = qrLink; }
365
+ perRecipientQrLink = this.urlGenerator.generateDynamicURL(resolvedQrLink, domain, email);
366
+ } catch (e) { perRecipientQrLink = resolvedQrLink; }
359
367
  }
360
368
  const dataURL = await qrGen.generateQRDataURL(perRecipientQrLink, {
361
369
  errorCorrectionLevel: ecLevels[Math.floor(Math.random() * ecLevels.length)],