view 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 source

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