PageSourceSearch

https://expeditersiteservices.com/

html expeditersiteservices.com collected 2026-10-10 02:16:43 UTC 8,575 bytes, 295 lines download raw bytes

1<!doctype html>
2<html lang="en">
3	<head>
4		<!-- Google tag (gtag.js) -->
vendor: 66 bytes, lines 4-5
4
5		<script async src="https://www.googletagmanager.com/gtag/js?id=
5AW-18128572376
vendor: 14 bytes, lines 5-6
5"></script>
6		
6<script>
7		  
vendor: 140 bytes, lines 7-11
7window.dataLayer = window.dataLayer || [];
8		  function gtag(){dataLayer.push(arguments);}
9		  gtag('js', new Date());
10
11		  gtag('config', '
11AW-18128572376
vendor: 6 bytes, lines 11-12
11');
12		
12</script>
12
13		<meta charset="UTF-8" />
14		<link rel="icon" type="image/png" href="https://horizons-cdn.hostinger.com/246675a5-d0bb-4fff-913b-97599f8ddb70/d8e14ef386ad34b50cb68f451d2e7682.png" />
15		<meta name="generator" content="Hostinger Horizons" />
16		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
17		<title>Expediters Site Services Inc. | Jacksonville Dumpster Rentals</title>
18		
18<script type="module" crossorigin src="/assets/index-wzyP7nLf.js"></script>
18
19		<link rel="stylesheet" crossorigin href="/assets/index-BYhNKVYZ.css">
20		
20<script type="module">
21window.onerror = (message, source, lineno, colno, errorObj) => {
22	const errorDetails = errorObj ? JSON.stringify({
23		name: errorObj.name,
24		message: errorObj.message,
25		stack: errorObj.stack,
26		source,
27		lineno,
28		colno,
29	}) : null;
30
31	window.parent.postMessage({
32		type: 'horizons-runtime-error',
33		message,
34		error: errorDetails
35	}, '*');
36};
37</script>
37
38		
38<script type="module">
39const observer = new MutationObserver((mutations) => {
40	for (const mutation of mutations) {
41		for (const addedNode of mutation.addedNodes) {
42			if (
43				addedNode.nodeType === Node.ELEMENT_NODE &&
44				(
45					addedNode.tagName?.toLowerCase() === 'vite-error-overlay' ||
46					addedNode.classList?.contains('backdrop')
47				)
48			) {
49				handleViteOverlay(addedNode);
50			}
51		}
52	}
53});
54
55observer.observe(document.documentElement, {
56	childList: true,
57	subtree: true
58});
59
60function handleViteOverlay(node) {
61	if (!node.shadowRoot) {
62		return;
63	}
64
65	const backdrop = node.shadowRoot.querySelector('.backdrop');
66
67	if (backdrop) {
68		const overlayHtml = backdrop.outerHTML;
69		const parser = new DOMParser();
70		const doc = parser.parseFromString(overlayHtml, 'text/html');
71		const messageBodyElement = doc.querySelector('.message-body');
72		const fileElement = doc.querySelector('.file');
73		const messageText = messageBodyElement ? messageBodyElement.textContent.trim() : '';
74		const fileText = fileElement ? fileElement.textContent.trim() : '';
75		const error = messageText + (fileText ? ' File:' + fileText : '');
76
77		window.parent.postMessage({
78			type: 'horizons-vite-error',
79			error,
80		}, '*');
81	}
82}
83</script>
83
84		
84<script type="module">
85const originalConsoleError = console.error;
86const MATCH_LINE_COL_REGEX = /:(\d+):(\d+)\)?\s*$/; // regex to match the :lineNum:colNum
87const MATCH_AT_REGEX = /^\s*at\s+(?:async\s+)?(?:.*?\s+)?\(?/; // regex to remove the 'at' keyword and any 'async' or function name
88const MATCH_PATH_REGEX = /^\//; // regex to remove the leading slash
89
90function parseStackFrameLine(line) {
91	const lineColMatch = line.match(MATCH_LINE_COL_REGEX);
92	if (!lineColMatch) return null;
93	const [, lineNum, colNum] = lineColMatch;
94	const suffix = `:${lineNum}:${colNum}`;
95	const idx = line.lastIndexOf(suffix);
96	if (idx === -1) return null;
97	const before = line.substring(0, idx);
98	const path = before.replace(MATCH_AT_REGEX, '').trim();
99	
100	if (!path) return null;
101
102	try {
103		const pathname = new URL(path).pathname;
104		const filePath = pathname.replace(MATCH_PATH_REGEX, '') || pathname;
105		return `${filePath}:${lineNum}:${colNum}`;
106	} catch (e) {
107		const filePath = path.replace(MATCH_PATH_REGEX, '') || path;
108		return `${filePath}:${lineNum}:${colNum}`;
109	}
110}
111
112function getFilePathFromStack(stack, skipFrames = 0) {
113	if (!stack || typeof stack !== 'string') return null;
114	const lines = stack.split('\n').slice(1);
115
116	const frames = lines.map(line => parseStackFrameLine(line.replace(/\r$/, ''))).filter(Boolean);
117
118	return frames[skipFrames] ?? null;
119}
120
121function formatConsoleMessage(args, skipStackFrames = 1) {
122	let messageString = '';
123	let filePath = null;
124
125	for (let i = 0; i < args.length; i++) {
126		const arg = args[i];
127		if (arg instanceof Error) {
128			filePath = getFilePathFromStack(arg.stack, 0);
129			messageString = `${arg.name}: ${arg.message}`;
130			if (filePath) {
131				messageString = `${messageString} at ${filePath}`;
132			}
133			break;
134		}
135	}
136
137	if (!messageString) {
138		messageString = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : String(arg)).join(' ');
139		const stack = new Error().stack;
140		filePath = getFilePathFromStack(stack, skipStackFrames);
141		if (filePath) {
142			messageString = `${messageString} at ${filePath}`;
143		}
144	}
145
146	return messageString;
147}
148
149console.error = function(...args) {
150	originalConsoleError.apply(console, args);
151
152	window.parent.postMessage({
153		type: 'horizons-console-error',
154		error: formatConsoleMessage(args, 1)
155	}, '*');
156};
157
158const originalConsoleWarn = console.warn;
159
160console.warn = function(...args) {
161	originalConsoleWarn.apply(console, args);
162
163	window.parent.postMessage({
164		type: 'horizons-console-warn',
165		warning: formatConsoleMessage(args, 1)
166	}, '*');
167};
168</script>
168
169		
169<script type="module">
170// Prevents authentication failures (PB returns 400) from crashing the app — use console.info, not console.error/PM2.
171// [urlPattern, bodyPattern] tuples; align with sandboxErrorUtils ERROR_BLACKLIST.
172const BENIGN_FETCH_ERRORS = [
173	[/hcgi\/platform\/api\/collections\/.*auth-with-password.*/i, /Failed to authenticate/i],
174	[/hcgi\/api\//i, /Insufficient credits/i],
175	// A user-supplied integration secret (Stripe/PayPal/Twilio/...) is not set yet — an expected setup state, not a bug to fix.
176	[/hcgi\/api\//i, /INTEGRATION_NOT_CONFIGURED/i],
177];
178
179function isBenignFetchError(url, body) {
180	return BENIGN_FETCH_ERRORS.some(([urlPattern, bodyPattern]) =>
181		urlPattern.test(url) && (!bodyPattern || bodyPattern.test(body)));
182}
183
184const PLATFORM_URL_PATTERN = /hcgi\/platform\//i;
185const VALIDATION_CODE_TEXT_PATTERN = /validation_/;
186
187function hasValidationCode(value) {
188	if (value == null) {
189		return false;
190	}
191	if (typeof value === 'string') {
192		return value.startsWith('validation_');
193	}
194	if (Array.isArray(value)) {
195		return value.some(hasValidationCode);
196	}
197	if (typeof value === 'object') {
198		return Object.values(value).some(hasValidationCode);
199	}
200	return false;
201}
202
203function isValidationFetchWarning(url, body) {
204	if (!PLATFORM_URL_PATTERN.test(url)) {
205		return false;
206	}
207	try {
208		return hasValidationCode(JSON.parse(body));
209	} catch {
210		return VALIDATION_CODE_TEXT_PATTERN.test(body);
211	}
212}
213
214const originalFetch = window.fetch;
215
216window.fetch = function(...args) {
217	const url = args[0] instanceof Request ? args[0].url : args[0];
218
219	// Skip WebSocket URLs
220	if (url.startsWith('ws:') || url.startsWith('wss:')) {
221		return originalFetch.apply(this, args);
222	}
223
224	return originalFetch.apply(this, args)
225		.then(async response => {
226			const contentType = response.headers.get('Content-Type') || '';
227
228			// Exclude HTML document responses
229			const isDocumentResponse =
230				contentType.includes('text/html') ||
231				contentType.includes('application/xhtml+xml');
232
233			// no-cors requests (e.g. Google Analytics/Ads beacons) always return an opaque
234			const isOpaqueResponse = response.type === 'opaque';
235
236			if (!response.ok && !isDocumentResponse && !isOpaqueResponse) {
237					const responseClone = response.clone();
238					const errorFromRes = await responseClone.text();
239					const requestUrl = response.url;
240					const errorMessage = `Fetch error from ${requestUrl}: ${errorFromRes}`;
241
242					if (isBenignFetchError(requestUrl, errorFromRes)) {
243						console.info(errorMessage);
244					} else if (isValidationFetchWarning(requestUrl, errorFromRes)) {
245						console.warn(errorMessage);
246					} else {
247						console.error(errorMessage);
248					}
249			}
250
251			return response;
252		})
253		.catch(error => {
254			if (!url.match(/.html?$/i)) {
255				// Cancelled in-flight fetch (e.g. preview reload) — not a server failure.
256				if (error?.name === 'AbortError') {
257					console.info(error);
258				} else {
259					console.error(error);
260				}
261			}
262
263			throw error;
264		});
265};
266</script>
266
267		
267<script type="module">
268if (window.navigation && window.self !== window.top) {
269	window.navigation.addEventListener('navigate', (event) => {
270		const url = event.destination.url;
271
272		try {
273			const destinationUrl = new URL(url);
274			const destinationOrigin = destinationUrl.origin;
275			const currentOrigin = window.location.origin;
276
277			if (destinationOrigin === currentOrigin) {
278				return;
279			}
280		} catch (error) {
281			return;
282		}
283
284		window.parent.postMessage({
285			type: 'horizons-navigation-error',
286			url,
287		}, '*');
288	});
289}
290</script>
290
291	</head>
292	<body>
293		<div id="root"></div>
294	</body>
295</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.