next-facebook-tracking
Version:
A simple package to help you integrate Facebook Pixel and Conversions API with Next.js
2 lines (1 loc) • 2.23 kB
JavaScript
import{errAsync as K,ResultAsync as M}from"neverthrow";import{CustomData as P,EventRequest as R,ServerEvent as S,Content as L,UserData as U}from"facebook-nodejs-business-sdk";import{getRequestData as V}from"./utils";class H{config;constructor(i={}){const{pixelId:o=process.env.NEXT_PUBLIC_FACEBOOK_PIXEL,accessToken:s=process.env.FACEBOOK_CONVERSIONS_API_TOKEN,testCode:c=process.env.FACEBOOK_TEST_EVENT_CODE,debug:r}=i;this.config={pixelId:o,accessToken:s,testCode:c,debug:r}}async track({event_id:i,event_name:o,custom_data:s,event_time:c,event_source_url:r,user_data:e,opt_out:g,action_source:a,data_processing_options:f,data_processing_options_country:p,data_processing_options_state:b,advanced_measurement_table:l,advertiser_tracking_enabled:u},{clean:_}={}){if(!this.config.accessToken||!this.config.pixelId)return this.config.debug&&console.error("[next-facebook-tracking] Missing access token or pixel ID"),K("Missing access token or pixel ID");const{value:m,currency:k,content_name:y,content_category:v,content_ids:E,contents:T,content_type:C,order_id:h,predicted_ltv:x,num_items:w,search_string:D,status:F,item_number:I,delivery_category:O,...q}=s||{},A=new P(m,k,y,v,E,T?.map(n=>new L(n.id,n.quantity,n.item_price,n.title,n.description,n.brand,n.category,n.delivery_category)),C,h,x,w,D,F,I,O,q),t=_?void 0:await V(),N=new U(e?.email,e?.phone,e?.gender,e?.first_name,e?.last_name,e?.date_of_birth,e?.city??t?.user_data.city,e?.state??t?.user_data.state,e?.zip,e?.country??t?.user_data.country,e?.external_id,e?.client_ip_address??t?.user_data.client_ip_address,e?.client_user_agent??t?.user_data.client_user_agent,e?.fbp??t?.user_data.fbp,e?.fbc??t?.user_data.fbc,e?.subscription_id,e?.fb_login_id,e?.lead_id,e?.dobd,e?.dobm,e?.doby,e?.madid,e?.anon_id,e?.app_user_id),B=new S(o,c??Math.floor(new Date().getTime()/1e3),r??t?.event_source_url,N,A,void 0,i,g,a??"website",f,p,b,l,u),d=new R(this.config.accessToken,this.config.pixelId).setEvents([B]);return this.config.testCode&&d.setTestEventCode(this.config.testCode),d.setDebugMode(this.config.debug??!1),M.fromPromise(d.execute(),n=>(this.config.debug&&console.error("[next-facebook-tracking] Error tracking event",n.response),n))}}export{H as FacebookTracking};