comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:8f4df159f06b
1 local Luan = require "luan:Luan.luan"
2 local error = Luan.error
3 local ipairs = Luan.ipairs or error()
4 local stringify = Luan.stringify or error()
5 local String = require "luan:String.luan"
6 local trim = String.trim or error()
7 local Table = require "luan:Table.luan"
8 local copy = Table.copy or error()
9 local Time = require "luan:Time.luan"
10 local time_now = Time.now or error()
11 local Parsers = require "luan:Parsers.luan"
12 local json_string = Parsers.json_string or error()
13 local json_parse = Parsers.json_parse or error()
14 local Http = require "luan:http/Http.luan"
15 local Shared = require "site:/lib/Shared.luan"
16 local is_test = not Shared.is_production
17 local has_facebook = not not Shared.has_facebook
18 local Utils = require "site:/lib/Utils.luan"
19 local to_list = Utils.to_list or error()
20 local User = require "site:/lib/User.luan"
21 local current_user = User.current or error()
22 local Facebook = require "site:/lib/Facebook.luan"
23 local call = Facebook.call or error()
24 local Logging = require "luan:logging/Logging.luan"
25 local logger = Logging.logger "facebook.js"
26
27
28 local function run()
29 if not has_facebook or is_test then return end
30 local user = current_user()
31 local request = Http.request
32 local user_data = {
33 fbp = request.cookies._fbp
34 fbc = request.cookies._fbc
35 client_user_agent = request.headers["User-Agent"]
36 client_ip_address = request.headers["X-Real-IP"]
37 }
38 if user ~= nil then
39 user_data.em = user.email or error()
40 user_data.external_id = user.id or error()
41 end
42 local request_parameters = request.parameters
43 local event = {
44 event_id = request_parameters.event_id or error()
45 event_time = time_now() // 1000
46 user_data = user_data
47 action_source = "website"
48 event_source_url = request.headers["Referer"]
49 }
50 local event_names = request_parameters.event_name or error()
51 event_names = to_list(event_names)
52 local events = {}
53 for _, event_name in ipairs(event_names) do
54 local ev = copy(event)
55 ev.event_name = event_name
56 local props = request_parameters[event_name]
57 if props ~= nil then
58 ev.custom_data = json_parse(props)
59 end
60 events[#events+1] = ev
61 end
62 -- logger.info(stringify(events))
63 try
64 local result = call(events)
65 logger.info(result)
66 catch e
67 local response_content = e.response_content
68 try
69 response_content = stringify(json_parse(response_content))
70 catch e2
71 end
72 logger.error(e.."\nresponse_content = "..e.response_content.."\nevents = "..stringify(events).."\n"..trim(request.raw_head).."\n")
73 end
74 end
75
76 return function()
77 try
78 run()
79 catch e
80 logger.error(e.."\n"..trim(Http.request.raw_head).."\n")
81 end
82 end