PageSourceSearch

https://koreanssan.com/js/site_log.js?1781067191

js koreanssan.com collected 2026-09-24 14:15:51 UTC 5,444 bytes, 195 lines download raw bytes

1var SITE_VISIT_LOG = function(){
2
3	var getDeviceUUID = function(){
4		let du = new DeviceUUID().parse();
5		let dua = [
6			du.language,
7			du.platform,
8			du.os,
9			du.browser,
10			du.version,
11			du.isDesktop,
12			du.isMobile,
13			du.isTablet,
14			du.isWindows,
15			du.isLinux,
16			du.isLinux64,
17			du.isMac,
18			du.isiPad,
19			du.isiPhone,
20			du.isiPod,
21			du.isSmartTV,
22		];
23
24		return dua;
25	}
26
27	var getStatSidData = function(){
28		var storageKey = 'IMWEB_SITE_STAT_SID';
29
30		var getTomorrowExpireAt = function(){
31			var tomorrow = new Date();
32			tomorrow.setDate(tomorrow.getDate() + 1);
33			tomorrow.setHours(0, 0, 0, 0);
34			return tomorrow.getTime();
35		};
36
37		var saveStatSidData = function(sid, expireAt){
38			try {
39				localStorage.setItem(storageKey, JSON.stringify({
40					sid: sid,
41					expireAt: expireAt
42				}));
43			} catch (e) {}
44		};
45
46		var sanitizeStatSid = function(sid){
47			sid = String(sid || '').replace(/[^a-zA-Z0-9_.:\-]/g, '');
48			return sid.slice(0, 80);
49		};
50
51		var getCookieValue = function(name){
52			try {
53				var cookies = document.cookie ? document.cookie.split(';') : [];
54				for (var i = 0; i < cookies.length; i++) {
55					var cookie = cookies[i].replace(/^\s+|\s+$/g, '');
56					if (cookie.indexOf(name + '=') !== 0) continue;
57					return decodeURIComponent(cookie.slice(name.length + 1));
58				}
59			} catch (e) {}
60			return '';
61		};
62
63		var getCookieStatSidData = function(){
64			var sid = sanitizeStatSid(getCookieValue('SITE_STAT_SID'));
65			if (!sid) return null;
66			saveStatSidData(sid, getTomorrowExpireAt());
67			return {
68				sid: sid,
69				isNew: false
70			};
71		};
72
73		var makeStatSidData = function(now){
74			var sid = 'ls' + now + Math.random().toString(36).slice(2, 14);
75			saveStatSidData(sid, getTomorrowExpireAt());
76			return {
77				sid: sid,
78				isNew: true
79			};
80		};
81
82		try {
83			var now = new Date().getTime();
84			var cookieStatSidData = getCookieStatSidData();
85			if (cookieStatSidData) return cookieStatSidData;
86
87			var saved = localStorage.getItem(storageKey);
88			if (saved) {
89				var savedData = null;
90				try {
91					savedData = JSON.parse(saved);
92				} catch (e) {
93					localStorage.removeItem(storageKey);
94				}
95				if (savedData && savedData.sid && savedData.expireAt && savedData.expireAt > now) {
96					return {
97						sid: savedData.sid,
98						isNew: false
99					};
100				}
101			}
102
103			return makeStatSidData(now);
104		} catch (e) {
105			var fallbackCookieStatSidData = getCookieStatSidData();
106			if (fallbackCookieStatSidData) return fallbackCookieStatSidData;
107			return makeStatSidData(new Date().getTime());
108		}
109	}
110
111	var appendEdgeStatelessToken = function(data, edgeStatelessToken){
112		if (edgeStatelessToken) {
113			data.edge_stateless_token = edgeStatelessToken;
114		}
115		return data;
116	}
117
118	var addVisitLog = function(referer, token, token_key, menu_code, first_visit, edgeStatelessLog, edgeStatelessToken, retry){
119		edgeStatelessLog = edgeStatelessLog === true;
120		if (retry === undefined) retry = edgeStatelessLog;
121
122		var data = {'referer' : referer, 'token' : token, 'token_key':token_key, 'menu_code':menu_code, 'dua': getDeviceUUID().join(':'),'first_visit':first_visit?'Y':'N'};
123		if (edgeStatelessLog) {
124			var statSidData = getStatSidData();
125			data.stat_sid = statSidData.sid;
126			data.stat_sid_new = statSidData.isNew ? 'Y' : 'N';
127			appendEdgeStatelessToken(data, edgeStatelessToken);
128		}
129
130		$.ajax({
131			type : 'POST',
132			data : data,
133			url : ('/backpg/add_visit_log.cm'),
134			dataType : 'json',
135			success : function(res){
136				if (edgeStatelessLog && retry && res && String(res.msg) === '-100') {
137					getToken(function(newToken, newTokenKey){
138						addVisitLog(referer, newToken, newTokenKey, menu_code, first_visit, true, edgeStatelessToken, false);
139					}, edgeStatelessToken);
140				}
141			}
142		});
143	};
144
145	var addProdViewLog = function(prodCode, token, token_key, edgeStatelessLog, edgeStatelessToken, retry){
146		edgeStatelessLog = edgeStatelessLog === true;
147		if (retry === undefined) retry = edgeStatelessLog;
148		var data = {'prod_code' : prodCode, 'token' : token, 'token_key':token_key, 'dua': getDeviceUUID().join(':')};
149		if (edgeStatelessLog) {
150			appendEdgeStatelessToken(data, edgeStatelessToken);
151		}
152
153		$.ajax({
154			type : 'POST',
155			data : data,
156			url : ('/backpg/add_prod_view_log.cm'),
157			dataType : 'json',
158			success : function(res){
159				if (edgeStatelessLog && retry && res && String(res.msg) === '-100') {
160					getToken(function(newToken, newTokenKey){
161						addProdViewLog(prodCode, newToken, newTokenKey, true, edgeStatelessToken, false);
162					}, edgeStatelessToken);
163				}
164			}
165		});
166	};
167
168	var getToken = function(callback, edgeStatelessToken){
169		var data = {};
170		appendEdgeStatelessToken(data, edgeStatelessToken);
171		$.ajax({
172			type : 'POST',
173			data : data,
174			url : ('/backpg/get_visit_token.cm'),
175			dataType : 'json',
176			success : function(res){
177				if(res.msg == 'SUCCESS'){
178					callback(res.log_token, res.log_token_key, res.reffrer);
179				}
180			}
181		});
182	};
183
184	return {
185		'addVisitLog' : function(referer, token, token_key, menu_code, first_visit, edgeStatelessLog, edgeStatelessToken){
186			addVisitLog(referer, token, token_key, menu_code, first_visit, edgeStatelessLog, edgeStatelessToken);
187		},
188		'addProdViewLog' : function(prodCode, token, token_key, edgeStatelessLog, edgeStatelessToken){
189			addProdViewLog(prodCode, token, token_key, edgeStatelessLog, edgeStatelessToken);
190		},
191		'getToken' : function(callback, edgeStatelessToken){
192			getToken(callback, edgeStatelessToken);
193		}
194	}
195}();

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.