0
|
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
|