Mercurial Hosting > linkmystyle
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 |