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