UNPKG

@walkeros/server-destination-meta

Version:

Meta server destination for walkerOS

1 lines 3.77 kB
import{getMappingValue,isObject as isObject2}from"@walkeros/core";import{sendServer}from"@walkeros/server-core";import{isArray,isObject,isString}from"@walkeros/core";import{getHashServer}from"@walkeros/server-core";var keysToHash=["em","ph","fn","ln","db","ge","ct","st","zp","country","external_id"];function shouldBeHashed(key,doNotHash=[]){return keysToHash.includes(key)&&!doNotHash.includes(key)}async function processValue(value,shouldHash){return shouldHash?isArray(value)?Promise.all(value.map(item=>getHashServer(String(item)))):getHashServer(String(value)):value}var push=async function(event,{config:config,mapping:mapping,data:data,collector:collector,env:env,logger:logger}){var _a;const{accessToken:accessToken,pixelId:pixelId,action_source:action_source="website",doNotHash:doNotHash,test_event_code:test_event_code,url:url="https://graph.facebook.com/v22.0/",user_data:user_data}=config.settings,eventData=isObject2(data)?data:{},configData=config.data?await getMappingValue(event,config.data):{},userDataCustom=user_data?await getMappingValue(event,{map:user_data}):{},userData={...isObject2(configData)&&isObject2(configData.user_data)?configData.user_data:{},...isObject2(userDataCustom)?userDataCustom:{},...isObject2(eventData.user_data)?eventData.user_data:{}};userData.fbclid&&(userData.fbc=function(clickId,time){if(!clickId)return;const version="fb",subdomainIndex="1",creationTime=time||Date.now();return`${version}.${subdomainIndex}.${creationTime}.${clickId}`}(userData.fbclid,(null==(_a=null==collector?void 0:collector.session)?void 0:_a.start)||event.timestamp),delete userData.fbclid);const serverEvent={event_name:event.name,event_id:event.id,event_time:Math.round((event.timestamp||Date.now())/1e3),action_source:action_source,...eventData,user_data:userData};"website"===action_source&&(serverEvent.event_source_url=event.source.id);const hashedServerEvent=await async function(value,doNotHash=[]){if(!isObject(value))return value;const isUserData="user_data"in value,target=isUserData?value.user_data:value,result=(await Promise.all(Object.entries(target).map(async([k,v])=>[k,await processValue(v,isUserData&&shouldBeHashed(k,doNotHash))]))).reduce((acc,[k,v])=>(isString(k)&&(acc[k]=v),acc),{});return isUserData?{...value,user_data:result}:result}(serverEvent,doNotHash),body={data:[hashedServerEvent]};test_event_code&&(body.test_event_code=test_event_code);const endpoint=`${url}${pixelId}/events`;logger.debug("Calling Meta API",{endpoint:endpoint,method:"POST",eventName:serverEvent.event_name,eventId:serverEvent.event_id});const sendServerFn=(null==env?void 0:env.sendServer)||sendServer,result=await sendServerFn(`${endpoint}?access_token=${accessToken}`,JSON.stringify(body));logger.debug("Meta API response",{ok:!isObject2(result)||result.ok}),isObject2(result)&&!1===result.ok&&logger.throw(`Meta API error: ${JSON.stringify(result)}`)};var types_exports={},destinationMeta={type:"meta",config:{},async init({config:partialConfig,logger:logger}){const config=function(partialConfig={},logger){const settings=partialConfig.settings||{},{accessToken:accessToken,pixelId:pixelId}=settings;accessToken||logger.throw("Config settings accessToken missing"),pixelId||logger.throw("Config settings pixelId missing");const settingsConfig={...settings,accessToken:accessToken,pixelId:pixelId};return{...partialConfig,settings:settingsConfig}}(partialConfig,logger);return config},push:async(event,{config:config,mapping:mapping,data:data,collector:collector,env:env,logger:logger})=>await push(event,{config:config,mapping:mapping,data:data,collector:collector,env:env,logger:logger})},index_default=destinationMeta;export{types_exports as DestinationMeta,index_default as default,destinationMeta};//# sourceMappingURL=index.mjs.map