Mercurial Hosting > linkmystyle
diff src/facebook.js.luan @ 0:8f4df159f06b
start public repo
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 11 Jul 2025 20:57:49 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/facebook.js.luan Fri Jul 11 20:57:49 2025 -0600 @@ -0,0 +1,82 @@ +local Luan = require "luan:Luan.luan" +local error = Luan.error +local ipairs = Luan.ipairs or error() +local stringify = Luan.stringify or error() +local String = require "luan:String.luan" +local trim = String.trim or error() +local Table = require "luan:Table.luan" +local copy = Table.copy or error() +local Time = require "luan:Time.luan" +local time_now = Time.now or error() +local Parsers = require "luan:Parsers.luan" +local json_string = Parsers.json_string or error() +local json_parse = Parsers.json_parse or error() +local Http = require "luan:http/Http.luan" +local Shared = require "site:/lib/Shared.luan" +local is_test = not Shared.is_production +local has_facebook = not not Shared.has_facebook +local Utils = require "site:/lib/Utils.luan" +local to_list = Utils.to_list or error() +local User = require "site:/lib/User.luan" +local current_user = User.current or error() +local Facebook = require "site:/lib/Facebook.luan" +local call = Facebook.call or error() +local Logging = require "luan:logging/Logging.luan" +local logger = Logging.logger "facebook.js" + + +local function run() + if not has_facebook or is_test then return end + local user = current_user() + local request = Http.request + local user_data = { + fbp = request.cookies._fbp + fbc = request.cookies._fbc + client_user_agent = request.headers["User-Agent"] + client_ip_address = request.headers["X-Real-IP"] + } + if user ~= nil then + user_data.em = user.email or error() + user_data.external_id = user.id or error() + end + local request_parameters = request.parameters + local event = { + event_id = request_parameters.event_id or error() + event_time = time_now() // 1000 + user_data = user_data + action_source = "website" + event_source_url = request.headers["Referer"] + } + local event_names = request_parameters.event_name or error() + event_names = to_list(event_names) + local events = {} + for _, event_name in ipairs(event_names) do + local ev = copy(event) + ev.event_name = event_name + local props = request_parameters[event_name] + if props ~= nil then + ev.custom_data = json_parse(props) + end + events[#events+1] = ev + end + -- logger.info(stringify(events)) + try + local result = call(events) + logger.info(result) + catch e + local response_content = e.response_content + try + response_content = stringify(json_parse(response_content)) + catch e2 + end + logger.error(e.."\nresponse_content = "..e.response_content.."\nevents = "..stringify(events).."\n"..trim(request.raw_head).."\n") + end +end + +return function() + try + run() + catch e + logger.error(e.."\n"..trim(Http.request.raw_head).."\n") + end +end