@accelerated-agency/visual-editor 0.4.0 → 0.4.1

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 +70 -10
  2. package/dist/vite.js +70 -10
  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,40 @@ 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>
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>
1145
1169
  <!-- 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>
1170
+ <script
1171
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components.js"
1172
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components.js||https://unpkg.com/vvvebjs@latest/libs/builder/components.js')"
1173
+ ></script>
1174
+ // <script
1175
+ // src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js"
1176
+ // 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')"
1177
+ // ></script>
1148
1178
  <script>
1149
1179
  /* Safety stub: if components.js didn't define these, create empty arrays so
1150
1180
  components-bootstrap5.js doesn't throw ReferenceError on load. */
@@ -1171,8 +1201,14 @@ if (window.Vvveb && window.Vvveb.Components) {
1171
1201
  } catch(_) {}
1172
1202
  }
1173
1203
  </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>
1204
+ <script
1205
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-bootstrap4.js"
1206
+ 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')"
1207
+ ></script>
1208
+ <script
1209
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js"
1210
+ 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')"
1211
+ ></script>
1176
1212
 
1177
1213
  <script>
1178
1214
  'use strict';
@@ -5520,8 +5556,9 @@ function createVisualEditorMiddleware(options) {
5520
5556
  );
5521
5557
  return;
5522
5558
  }
5523
- if (!SCRAPER_PROXY_PASSWORD) ;
5524
- const upstreamFetch = (input, init = {}) => {
5559
+ const directFetch = (input, init = {}) => fetch(input, init);
5560
+ const scraperFetch = (input, init = {}) => {
5561
+ if (!SCRAPER_PROXY_PASSWORD) return directFetch(input, init);
5525
5562
  if (!useScraperProxy || !scraperProxyClient) {
5526
5563
  const scraperUrl = new URL(SCRAPER_API_ENDPOINT);
5527
5564
  scraperUrl.searchParams.set("api_key", SCRAPER_PROXY_PASSWORD);
@@ -5533,6 +5570,29 @@ function createVisualEditorMiddleware(options) {
5533
5570
  dispatcher: scraperProxyClient.dispatcher
5534
5571
  });
5535
5572
  };
5573
+ const shouldFallbackFromScraper = async (resp) => {
5574
+ try {
5575
+ if (resp.ok) return false;
5576
+ const text = await resp.clone().text();
5577
+ return SCRAPER_BILLING_ERROR_RE.test(String(text || ""));
5578
+ } catch (_) {
5579
+ return false;
5580
+ }
5581
+ };
5582
+ const upstreamFetch = async (input, init = {}) => {
5583
+ const primary = await scraperFetch(input, init);
5584
+ if (!await shouldFallbackFromScraper(primary)) {
5585
+ return primary;
5586
+ }
5587
+ try {
5588
+ console.warn("[conversion-proxy] ScraperAPI billing/quota detected; falling back to direct fetch", {
5589
+ url: input,
5590
+ mode: useScraperProxy ? "proxy" : "simple"
5591
+ });
5592
+ } catch (_) {
5593
+ }
5594
+ return directFetch(input, init);
5595
+ };
5536
5596
  const headers = {
5537
5597
  "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
5538
5598
  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,40 @@ 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>
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>
1137
1161
  <!-- 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>
1162
+ <script
1163
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components.js"
1164
+ onerror="window.__veLoadFallback(this,'https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components.js||https://unpkg.com/vvvebjs@latest/libs/builder/components.js')"
1165
+ ></script>
1166
+ // <script
1167
+ // src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js"
1168
+ // 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')"
1169
+ // ></script>
1140
1170
  <script>
1141
1171
  /* Safety stub: if components.js didn't define these, create empty arrays so
1142
1172
  components-bootstrap5.js doesn't throw ReferenceError on load. */
@@ -1163,8 +1193,14 @@ if (window.Vvveb && window.Vvveb.Components) {
1163
1193
  } catch(_) {}
1164
1194
  }
1165
1195
  </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>
1196
+ <script
1197
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-bootstrap4.js"
1198
+ 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')"
1199
+ ></script>
1200
+ <script
1201
+ src="https://cdn.jsdelivr.net/npm/vvvebjs@latest/libs/builder/components-widgets.js"
1202
+ 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')"
1203
+ ></script>
1168
1204
 
1169
1205
  <script>
1170
1206
  'use strict';
@@ -5512,8 +5548,9 @@ function createVisualEditorMiddleware(options) {
5512
5548
  );
5513
5549
  return;
5514
5550
  }
5515
- if (!SCRAPER_PROXY_PASSWORD) ;
5516
- const upstreamFetch = (input, init = {}) => {
5551
+ const directFetch = (input, init = {}) => fetch(input, init);
5552
+ const scraperFetch = (input, init = {}) => {
5553
+ if (!SCRAPER_PROXY_PASSWORD) return directFetch(input, init);
5517
5554
  if (!useScraperProxy || !scraperProxyClient) {
5518
5555
  const scraperUrl = new URL(SCRAPER_API_ENDPOINT);
5519
5556
  scraperUrl.searchParams.set("api_key", SCRAPER_PROXY_PASSWORD);
@@ -5525,6 +5562,29 @@ function createVisualEditorMiddleware(options) {
5525
5562
  dispatcher: scraperProxyClient.dispatcher
5526
5563
  });
5527
5564
  };
5565
+ const shouldFallbackFromScraper = async (resp) => {
5566
+ try {
5567
+ if (resp.ok) return false;
5568
+ const text = await resp.clone().text();
5569
+ return SCRAPER_BILLING_ERROR_RE.test(String(text || ""));
5570
+ } catch (_) {
5571
+ return false;
5572
+ }
5573
+ };
5574
+ const upstreamFetch = async (input, init = {}) => {
5575
+ const primary = await scraperFetch(input, init);
5576
+ if (!await shouldFallbackFromScraper(primary)) {
5577
+ return primary;
5578
+ }
5579
+ try {
5580
+ console.warn("[conversion-proxy] ScraperAPI billing/quota detected; falling back to direct fetch", {
5581
+ url: input,
5582
+ mode: useScraperProxy ? "proxy" : "simple"
5583
+ });
5584
+ } catch (_) {
5585
+ }
5586
+ return directFetch(input, init);
5587
+ };
5528
5588
  const headers = {
5529
5589
  "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
5530
5590
  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.1",
4
4
  "private": false,
5
5
  "description": "Conversion visual editor as a reusable React package",
6
6
  "type": "module",