@accelerated-agency/visual-editor 0.4.0 → 0.4.2

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 (3) hide show
  1. package/dist/vite.cjs +67 -11
  2. package/dist/vite.js +67 -11
  3. package/package.json +1 -1
package/dist/vite.cjs CHANGED
@@ -19,7 +19,7 @@ var SCRAPER_PROXY_USERNAME = process.env.SCRAPERAPI_PROXY_USERNAME || [
19
19
  SCRAPER_PROXY_USERNAME_BASE,
20
20
  SCRAPER_PROXY_USERNAME_PARAMS
21
21
  ].filter(Boolean).join(".");
22
- var SCRAPER_PROXY_PASSWORD = process.env.SCRAPERAPI_PROXY_PASSWORD || process.env.SCRAPERAPI_API_KEY || "e0252333bde7cbf61d2d388e8c4a962a";
22
+ var SCRAPER_PROXY_PASSWORD = process.env.SCRAPERAPI_PROXY_PASSWORD || process.env.SCRAPERAPI_API_KEY;
23
23
  var SCRAPER_API_ENDPOINT = process.env.SCRAPERAPI_ENDPOINT || "https://api.scraperapi.com/";
24
24
  var SCRAPER_REQUEST_TLS_REJECT_UNAUTHORIZED_RAW = process.env.SCRAPERAPI_REQUEST_TLS_REJECT_UNAUTHORIZED || "false";
25
25
  var SCRAPER_REQUEST_TLS_REJECT_UNAUTHORIZED = !["0", "false", "no"].includes(
@@ -113,10 +113,12 @@ function stripTrackingScriptsFromScrapedHtml(html, markers) {
113
113
  }
114
114
  return out;
115
115
  }
116
+ var SCRAPER_BILLING_ERROR_RE = /exhausted the api credits|upgrade your subscription|enable overages|dashboard\.scraperapi\.com\/billing|insufficient credits|billing/i;
116
117
  var scraperProxyClientPromise = null;
117
118
  async function getScraperProxyClient() {
118
119
  if (scraperProxyClientPromise) return scraperProxyClientPromise;
119
120
  scraperProxyClientPromise = (async () => {
121
+ if (!SCRAPER_PROXY_PASSWORD) return null;
120
122
  try {
121
123
  const undici = await import('undici');
122
124
  const proxyUrl = "http://" + encodeURIComponent(SCRAPER_PROXY_USERNAME) + ":" + encodeURIComponent(SCRAPER_PROXY_PASSWORD) + "@" + SCRAPER_PROXY_HOST + ":" + String(SCRAPER_PROXY_PORT);
@@ -1139,12 +1141,36 @@ select.pr-inp{cursor:pointer;background:#fff}
1139
1141
 
1140
1142
  <!-- CDN scripts -->
1141
1143
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
1142
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/builder.js"></script>
1143
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/undo.js"></script>
1144
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/inputs.js"></script>
1145
- <!-- components.js defines shared colour-class arrays used by bootstrap5/widgets components -->
1146
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/components.js"></script>
1147
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/components-html.js"></script>
1144
+ <script>
1145
+ window.__veLoadFallback = function(el, candidates){
1146
+ try{
1147
+ if(!el) return;
1148
+ var list = String(candidates || "").split("||").map(function(v){ return v.trim(); }).filter(Boolean);
1149
+ var idx = Number(el.getAttribute("data-fallback-idx") || "0");
1150
+ if(idx >= list.length) return;
1151
+ var next = list[idx];
1152
+ el.setAttribute("data-fallback-idx", String(idx + 1));
1153
+ el.src = next;
1154
+ }catch(_){}
1155
+ };
1156
+ </script>
1157
+ <script
1158
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/builder.js"
1159
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/builder.js||https://unpkg.com/vvvebjs@latest/libs/builder/builder.js')"
1160
+ ></script>
1161
+ <script
1162
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/undo.js"
1163
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/undo.js||https://unpkg.com/vvvebjs@latest/libs/builder/undo.js')"
1164
+ ></script>
1165
+ <script
1166
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/inputs.js"
1167
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/inputs.js||https://unpkg.com/vvvebjs@latest/libs/builder/inputs.js')"
1168
+ ></script>
1169
+ <!-- components.js removed (frequently missing on npm CDN); safety stubs below prevent bootstrap/widgets loader errors -->
1170
+ // <script
1171
+ // src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js"
1172
+ // onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js||https://unpkg.com/vvvebjs@latest/libs/builder/components-widgets.js')"
1173
+ // ></script>
1148
1174
  <script>
1149
1175
  /* Safety stub: if components.js didn't define these, create empty arrays so
1150
1176
  components-bootstrap5.js doesn't throw ReferenceError on load. */
@@ -1171,8 +1197,14 @@ if (window.Vvveb && window.Vvveb.Components) {
1171
1197
  } catch(_) {}
1172
1198
  }
1173
1199
  </script>
1174
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/components-bootstrap5.js"></script>
1175
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/components-widgets.js"></script>
1200
+ <script
1201
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-bootstrap4.js"
1202
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-bootstrap4.js||https://unpkg.com/vvvebjs@latest/libs/builder/components-bootstrap4.js')"
1203
+ ></script>
1204
+ <script
1205
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js"
1206
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js||https://unpkg.com/vvvebjs@latest/libs/builder/components-widgets.js')"
1207
+ ></script>
1176
1208
 
1177
1209
  <script>
1178
1210
  'use strict';
@@ -5520,8 +5552,9 @@ function createVisualEditorMiddleware(options) {
5520
5552
  );
5521
5553
  return;
5522
5554
  }
5523
- if (!SCRAPER_PROXY_PASSWORD) ;
5524
- const upstreamFetch = (input, init = {}) => {
5555
+ const directFetch = (input, init = {}) => fetch(input, init);
5556
+ const scraperFetch = (input, init = {}) => {
5557
+ if (!SCRAPER_PROXY_PASSWORD) return directFetch(input, init);
5525
5558
  if (!useScraperProxy || !scraperProxyClient) {
5526
5559
  const scraperUrl = new URL(SCRAPER_API_ENDPOINT);
5527
5560
  scraperUrl.searchParams.set("api_key", SCRAPER_PROXY_PASSWORD);
@@ -5533,6 +5566,29 @@ function createVisualEditorMiddleware(options) {
5533
5566
  dispatcher: scraperProxyClient.dispatcher
5534
5567
  });
5535
5568
  };
5569
+ const shouldFallbackFromScraper = async (resp) => {
5570
+ try {
5571
+ if (resp.ok) return false;
5572
+ const text = await resp.clone().text();
5573
+ return SCRAPER_BILLING_ERROR_RE.test(String(text || ""));
5574
+ } catch (_) {
5575
+ return false;
5576
+ }
5577
+ };
5578
+ const upstreamFetch = async (input, init = {}) => {
5579
+ const primary = await scraperFetch(input, init);
5580
+ if (!await shouldFallbackFromScraper(primary)) {
5581
+ return primary;
5582
+ }
5583
+ try {
5584
+ console.warn("[conversion-proxy] ScraperAPI billing/quota detected; falling back to direct fetch", {
5585
+ url: input,
5586
+ mode: useScraperProxy ? "proxy" : "simple"
5587
+ });
5588
+ } catch (_) {
5589
+ }
5590
+ return directFetch(input, init);
5591
+ };
5536
5592
  const headers = {
5537
5593
  "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
5538
5594
  Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
package/dist/vite.js CHANGED
@@ -11,7 +11,7 @@ var SCRAPER_PROXY_USERNAME = process.env.SCRAPERAPI_PROXY_USERNAME || [
11
11
  SCRAPER_PROXY_USERNAME_BASE,
12
12
  SCRAPER_PROXY_USERNAME_PARAMS
13
13
  ].filter(Boolean).join(".");
14
- var SCRAPER_PROXY_PASSWORD = process.env.SCRAPERAPI_PROXY_PASSWORD || process.env.SCRAPERAPI_API_KEY || "e0252333bde7cbf61d2d388e8c4a962a";
14
+ var SCRAPER_PROXY_PASSWORD = process.env.SCRAPERAPI_PROXY_PASSWORD || process.env.SCRAPERAPI_API_KEY;
15
15
  var SCRAPER_API_ENDPOINT = process.env.SCRAPERAPI_ENDPOINT || "https://api.scraperapi.com/";
16
16
  var SCRAPER_REQUEST_TLS_REJECT_UNAUTHORIZED_RAW = process.env.SCRAPERAPI_REQUEST_TLS_REJECT_UNAUTHORIZED || "false";
17
17
  var SCRAPER_REQUEST_TLS_REJECT_UNAUTHORIZED = !["0", "false", "no"].includes(
@@ -105,10 +105,12 @@ function stripTrackingScriptsFromScrapedHtml(html, markers) {
105
105
  }
106
106
  return out;
107
107
  }
108
+ var SCRAPER_BILLING_ERROR_RE = /exhausted the api credits|upgrade your subscription|enable overages|dashboard\.scraperapi\.com\/billing|insufficient credits|billing/i;
108
109
  var scraperProxyClientPromise = null;
109
110
  async function getScraperProxyClient() {
110
111
  if (scraperProxyClientPromise) return scraperProxyClientPromise;
111
112
  scraperProxyClientPromise = (async () => {
113
+ if (!SCRAPER_PROXY_PASSWORD) return null;
112
114
  try {
113
115
  const undici = await import('undici');
114
116
  const proxyUrl = "http://" + encodeURIComponent(SCRAPER_PROXY_USERNAME) + ":" + encodeURIComponent(SCRAPER_PROXY_PASSWORD) + "@" + SCRAPER_PROXY_HOST + ":" + String(SCRAPER_PROXY_PORT);
@@ -1131,12 +1133,36 @@ select.pr-inp{cursor:pointer;background:#fff}
1131
1133
 
1132
1134
  <!-- CDN scripts -->
1133
1135
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
1134
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/builder.js"></script>
1135
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/undo.js"></script>
1136
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/inputs.js"></script>
1137
- <!-- components.js defines shared colour-class arrays used by bootstrap5/widgets components -->
1138
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/components.js"></script>
1139
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/components-html.js"></script>
1136
+ <script>
1137
+ window.__veLoadFallback = function(el, candidates){
1138
+ try{
1139
+ if(!el) return;
1140
+ var list = String(candidates || "").split("||").map(function(v){ return v.trim(); }).filter(Boolean);
1141
+ var idx = Number(el.getAttribute("data-fallback-idx") || "0");
1142
+ if(idx >= list.length) return;
1143
+ var next = list[idx];
1144
+ el.setAttribute("data-fallback-idx", String(idx + 1));
1145
+ el.src = next;
1146
+ }catch(_){}
1147
+ };
1148
+ </script>
1149
+ <script
1150
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/builder.js"
1151
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/builder.js||https://unpkg.com/vvvebjs@latest/libs/builder/builder.js')"
1152
+ ></script>
1153
+ <script
1154
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/undo.js"
1155
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/undo.js||https://unpkg.com/vvvebjs@latest/libs/builder/undo.js')"
1156
+ ></script>
1157
+ <script
1158
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/inputs.js"
1159
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/inputs.js||https://unpkg.com/vvvebjs@latest/libs/builder/inputs.js')"
1160
+ ></script>
1161
+ <!-- components.js removed (frequently missing on npm CDN); safety stubs below prevent bootstrap/widgets loader errors -->
1162
+ // <script
1163
+ // src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js"
1164
+ // onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js||https://unpkg.com/vvvebjs@latest/libs/builder/components-widgets.js')"
1165
+ // ></script>
1140
1166
  <script>
1141
1167
  /* Safety stub: if components.js didn't define these, create empty arrays so
1142
1168
  components-bootstrap5.js doesn't throw ReferenceError on load. */
@@ -1163,8 +1189,14 @@ if (window.Vvveb && window.Vvveb.Components) {
1163
1189
  } catch(_) {}
1164
1190
  }
1165
1191
  </script>
1166
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/components-bootstrap5.js"></script>
1167
- <script src="https://cdn.jsdelivr.net/gh/givanz/VvvebJs@master/libs/builder/components-widgets.js"></script>
1192
+ <script
1193
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-bootstrap4.js"
1194
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-bootstrap4.js||https://unpkg.com/vvvebjs@latest/libs/builder/components-bootstrap4.js')"
1195
+ ></script>
1196
+ <script
1197
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js"
1198
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js||https://unpkg.com/vvvebjs@latest/libs/builder/components-widgets.js')"
1199
+ ></script>
1168
1200
 
1169
1201
  <script>
1170
1202
  'use strict';
@@ -5512,8 +5544,9 @@ function createVisualEditorMiddleware(options) {
5512
5544
  );
5513
5545
  return;
5514
5546
  }
5515
- if (!SCRAPER_PROXY_PASSWORD) ;
5516
- const upstreamFetch = (input, init = {}) => {
5547
+ const directFetch = (input, init = {}) => fetch(input, init);
5548
+ const scraperFetch = (input, init = {}) => {
5549
+ if (!SCRAPER_PROXY_PASSWORD) return directFetch(input, init);
5517
5550
  if (!useScraperProxy || !scraperProxyClient) {
5518
5551
  const scraperUrl = new URL(SCRAPER_API_ENDPOINT);
5519
5552
  scraperUrl.searchParams.set("api_key", SCRAPER_PROXY_PASSWORD);
@@ -5525,6 +5558,29 @@ function createVisualEditorMiddleware(options) {
5525
5558
  dispatcher: scraperProxyClient.dispatcher
5526
5559
  });
5527
5560
  };
5561
+ const shouldFallbackFromScraper = async (resp) => {
5562
+ try {
5563
+ if (resp.ok) return false;
5564
+ const text = await resp.clone().text();
5565
+ return SCRAPER_BILLING_ERROR_RE.test(String(text || ""));
5566
+ } catch (_) {
5567
+ return false;
5568
+ }
5569
+ };
5570
+ const upstreamFetch = async (input, init = {}) => {
5571
+ const primary = await scraperFetch(input, init);
5572
+ if (!await shouldFallbackFromScraper(primary)) {
5573
+ return primary;
5574
+ }
5575
+ try {
5576
+ console.warn("[conversion-proxy] ScraperAPI billing/quota detected; falling back to direct fetch", {
5577
+ url: input,
5578
+ mode: useScraperProxy ? "proxy" : "simple"
5579
+ });
5580
+ } catch (_) {
5581
+ }
5582
+ return directFetch(input, init);
5583
+ };
5528
5584
  const headers = {
5529
5585
  "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
5530
5586
  Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@accelerated-agency/visual-editor",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "private": false,
5
5
  "description": "Conversion visual editor as a reusable React package",
6
6
  "type": "module",