@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.
- package/dist/vite.cjs +70 -10
- package/dist/vite.js +70 -10
- 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
|
|
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
|
|
1143
|
-
|
|
1144
|
-
|
|
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
|
|
1147
|
-
|
|
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
|
|
1175
|
-
|
|
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
|
-
|
|
5524
|
-
const
|
|
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
|
|
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
|
|
1135
|
-
|
|
1136
|
-
|
|
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
|
|
1139
|
-
|
|
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
|
|
1167
|
-
|
|
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
|
-
|
|
5516
|
-
const
|
|
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"
|