@segment/analytics-browser-actions-facebook-conversions-api-web 1.0.1-staging-0104ee0bb.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +31 -0
  2. package/dist/cjs/generated-types.d.ts +5 -0
  3. package/dist/cjs/generated-types.js +3 -0
  4. package/dist/cjs/generated-types.js.map +1 -0
  5. package/dist/cjs/index.d.ts +11 -0
  6. package/dist/cjs/index.js +191 -0
  7. package/dist/cjs/index.js.map +1 -0
  8. package/dist/cjs/init-script.d.ts +2 -0
  9. package/dist/cjs/init-script.js +41 -0
  10. package/dist/cjs/init-script.js.map +1 -0
  11. package/dist/cjs/send/constants.d.ts +3 -0
  12. package/dist/cjs/send/constants.js +484 -0
  13. package/dist/cjs/send/constants.js.map +1 -0
  14. package/dist/cjs/send/depends-on.d.ts +5 -0
  15. package/dist/cjs/send/depends-on.js +46 -0
  16. package/dist/cjs/send/depends-on.js.map +1 -0
  17. package/dist/cjs/send/fields.d.ts +39 -0
  18. package/dist/cjs/send/fields.js +383 -0
  19. package/dist/cjs/send/fields.js.map +1 -0
  20. package/dist/cjs/send/generated-types.d.ts +43 -0
  21. package/dist/cjs/send/generated-types.js +3 -0
  22. package/dist/cjs/send/generated-types.js.map +1 -0
  23. package/dist/cjs/send/index.d.ts +6 -0
  24. package/dist/cjs/send/index.js +37 -0
  25. package/dist/cjs/send/index.js.map +1 -0
  26. package/dist/cjs/send/utils.d.ts +8 -0
  27. package/dist/cjs/send/utils.js +79 -0
  28. package/dist/cjs/send/utils.js.map +1 -0
  29. package/dist/cjs/send/validate.d.ts +2 -0
  30. package/dist/cjs/send/validate.js +12 -0
  31. package/dist/cjs/send/validate.js.map +1 -0
  32. package/dist/cjs/types.d.ts +132 -0
  33. package/dist/cjs/types.js +30 -0
  34. package/dist/cjs/types.js.map +1 -0
  35. package/dist/esm/generated-types.d.ts +5 -0
  36. package/dist/esm/generated-types.js +2 -0
  37. package/dist/esm/generated-types.js.map +1 -0
  38. package/dist/esm/index.d.ts +11 -0
  39. package/dist/esm/index.js +187 -0
  40. package/dist/esm/index.js.map +1 -0
  41. package/dist/esm/init-script.d.ts +2 -0
  42. package/dist/esm/init-script.js +38 -0
  43. package/dist/esm/init-script.js.map +1 -0
  44. package/dist/esm/send/constants.d.ts +3 -0
  45. package/dist/esm/send/constants.js +481 -0
  46. package/dist/esm/send/constants.js.map +1 -0
  47. package/dist/esm/send/depends-on.d.ts +5 -0
  48. package/dist/esm/send/depends-on.js +41 -0
  49. package/dist/esm/send/depends-on.js.map +1 -0
  50. package/dist/esm/send/fields.d.ts +39 -0
  51. package/dist/esm/send/fields.js +380 -0
  52. package/dist/esm/send/fields.js.map +1 -0
  53. package/dist/esm/send/generated-types.d.ts +43 -0
  54. package/dist/esm/send/generated-types.js +2 -0
  55. package/dist/esm/send/generated-types.js.map +1 -0
  56. package/dist/esm/send/index.d.ts +6 -0
  57. package/dist/esm/send/index.js +35 -0
  58. package/dist/esm/send/index.js.map +1 -0
  59. package/dist/esm/send/utils.d.ts +8 -0
  60. package/dist/esm/send/utils.js +74 -0
  61. package/dist/esm/send/utils.js.map +1 -0
  62. package/dist/esm/send/validate.d.ts +2 -0
  63. package/dist/esm/send/validate.js +9 -0
  64. package/dist/esm/send/validate.js.map +1 -0
  65. package/dist/esm/types.d.ts +132 -0
  66. package/dist/esm/types.js +27 -0
  67. package/dist/esm/types.js.map +1 -0
  68. package/dist/tsconfig.tsbuildinfo +1 -0
  69. package/package.json +25 -0
  70. package/src/generated-types.ts +16 -0
  71. package/src/index.ts +205 -0
  72. package/src/init-script.ts +40 -0
  73. package/src/send/constants.ts +482 -0
  74. package/src/send/depends-on.ts +47 -0
  75. package/src/send/fields.ts +400 -0
  76. package/src/send/generated-types.ts +150 -0
  77. package/src/send/index.ts +64 -0
  78. package/src/send/utils.ts +90 -0
  79. package/src/send/validate.ts +15 -0
  80. package/src/types.ts +117 -0
  81. package/tsconfig.json +9 -0
package/src/index.ts ADDED
@@ -0,0 +1,205 @@
1
+ import type { Settings } from './generated-types'
2
+ import type { BrowserDestinationDefinition } from '@segment/browser-destination-runtime/types'
3
+ import { browserDestination } from '@segment/browser-destination-runtime/shim'
4
+ import send from './send'
5
+ import { initScript } from './init-script'
6
+ import { FBClient, LDU } from './types'
7
+ import { defaultValues } from '@segment/actions-core'
8
+
9
+ declare global {
10
+ interface Window {
11
+ fbq: FBClient
12
+ }
13
+ }
14
+
15
+ export const destination: BrowserDestinationDefinition<Settings, FBClient> = {
16
+ name: 'Facebook Conversions Api Web',
17
+ slug: 'actions-facebook-conversions-api-web',
18
+ mode: 'device',
19
+ description: 'Send events to Facebook Conversions API from the browser.',
20
+ settings: {
21
+ pixelId: {
22
+ description: 'The Pixel ID associated with your Facebook Pixel.',
23
+ label: 'Pixel ID',
24
+ type: 'string',
25
+ required: true
26
+ },
27
+ disablePushState: {
28
+ description: "If set to true, prevents Facebook Pixel from sending PageView events on history state changes. Set to true if you want to trigger PageView events manually via the pageView Action.",
29
+ label: 'Disable Push State',
30
+ type: 'boolean'
31
+ },
32
+ ldu: {
33
+ label: 'Limited Data User (LDU)',
34
+ description: 'Specify if and how Limited Data Use should apply.',
35
+ type: 'string',
36
+ required: true,
37
+ choices: [
38
+ { label: 'LDU disabled', value: LDU.Disabled.key},
39
+ { label: "LDU enabled - Use Meta Geolocation Logic", value: LDU.GeolocationLogic.key },
40
+ { label: 'LDU enabled - California only', value: LDU.California.key },
41
+ { label: 'LDU enabled - Colorado only', value: LDU.Colorado.key },
42
+ { label: 'LDU enabled - Connecticut only', value: LDU.Connecticut.key },
43
+ { label: 'LDU enabled - Florida only', value: LDU.Florida.key },
44
+ { label: 'LDU enabled - Oregon only', value: LDU.Oregon.key },
45
+ { label: 'LDU enabled - Texas only', value: LDU.Texas.key },
46
+ { label: 'LDU enabled - Montana only', value: LDU.Montana.key },
47
+ { label: 'LDU enabled - Delaware only', value: LDU.Delaware.key },
48
+ { label: 'LDU enabled - Nebraska only', value: LDU.Nebraska.key },
49
+ { label: 'LDU enabled - New Hampshire only', value: LDU.NewHampshire.key },
50
+ { label: 'LDU enabled - New Jersey only', value: LDU.NewJersey.key },
51
+ { label: 'LDU enabled - Minnesota only', value: LDU.Minnesota.key }
52
+ ],
53
+ default: LDU.Disabled.key
54
+ }
55
+ },
56
+ initialize: async ({ settings }, deps) => {
57
+ const { pixelId, disablePushState, ldu } = settings
58
+ initScript(pixelId, ldu as keyof typeof LDU, disablePushState)
59
+ await deps.resolveWhen(() => typeof window.fbq === 'function', 100)
60
+ return window.fbq
61
+ },
62
+
63
+ actions: {
64
+ send
65
+ },
66
+ presets: [
67
+ {
68
+ name: 'AddPaymentInfo',
69
+ subscribe: 'event = "Payment Info Entered"',
70
+ partnerAction: 'send',
71
+ mapping:
72
+ {
73
+ ...defaultValues(send.fields),
74
+ event_config: {
75
+ event_name: 'AddPaymentInfo',
76
+ custom_event_name: null,
77
+ show_fields: false
78
+ }
79
+ },
80
+ type: 'automatic'
81
+ },
82
+ {
83
+ name: 'AddToCart',
84
+ subscribe: 'event = "Product Added"',
85
+ partnerAction: 'send',
86
+ mapping:
87
+ {
88
+ ...defaultValues(send.fields),
89
+ event_config: {
90
+ event_name: 'AddToCart',
91
+ custom_event_name: null,
92
+ show_fields: false
93
+ },
94
+ content: {
95
+ id: { '@path': '$.properties.product_id' },
96
+ quantity: { '@path': '$.properties.quantity' },
97
+ item_price: { '@path': '$.properties.price' }
98
+ }
99
+ },
100
+ type: 'automatic'
101
+ },
102
+ {
103
+ name: 'AddToWishlist',
104
+ subscribe: 'event = "Product Added To Wishlist"',
105
+ partnerAction: 'send',
106
+ mapping:
107
+ {
108
+ ...defaultValues(send.fields),
109
+ event_config: {
110
+ event_name: 'AddToWishlist',
111
+ custom_event_name: null,
112
+ show_fields: false
113
+ },
114
+ content: {
115
+ id: { '@path': '$.properties.product_id' },
116
+ quantity: { '@path': '$.properties.quantity' },
117
+ item_price: { '@path': '$.properties.price' }
118
+ }
119
+ },
120
+ type: 'automatic'
121
+ },
122
+ {
123
+ name: 'CompleteRegistration',
124
+ subscribe: 'event = "Signed Up"',
125
+ partnerAction: 'send',
126
+ mapping:
127
+ {
128
+ ...defaultValues(send.fields),
129
+ event_config: {
130
+ event_name: 'CompleteRegistration',
131
+ custom_event_name: null,
132
+ show_fields: false
133
+ }
134
+ },
135
+ type: 'automatic'
136
+ },
137
+ {
138
+ name: 'InitiateCheckout',
139
+ subscribe: 'event = "Checkout Started"',
140
+ partnerAction: 'send',
141
+ mapping:
142
+ {
143
+ ...defaultValues(send.fields),
144
+ event_config: {
145
+ event_name: 'InitiateCheckout',
146
+ custom_event_name: null,
147
+ show_fields: false
148
+ }
149
+ },
150
+ type: 'automatic'
151
+ },
152
+ {
153
+ name: 'Purchase',
154
+ subscribe: 'event = "Order Completed"',
155
+ partnerAction: 'send',
156
+ mapping:
157
+ {
158
+ ...defaultValues(send.fields),
159
+ event_config: {
160
+ event_name: 'Purchase',
161
+ custom_event_name: null,
162
+ show_fields: false
163
+ }
164
+ },
165
+ type: 'automatic'
166
+ },
167
+ {
168
+ name: 'Search',
169
+ subscribe: 'event = "Products Searched"',
170
+ partnerAction: 'send',
171
+ mapping:
172
+ {
173
+ ...defaultValues(send.fields),
174
+ event_config: {
175
+ event_name: 'Search',
176
+ custom_event_name: null,
177
+ show_fields: false
178
+ }
179
+ },
180
+ type: 'automatic'
181
+ },
182
+ {
183
+ name: 'ViewContent',
184
+ subscribe: 'event = "Product Viewed"',
185
+ partnerAction: 'send',
186
+ mapping:
187
+ {
188
+ ...defaultValues(send.fields),
189
+ event_config: {
190
+ event_name: 'ViewContent',
191
+ custom_event_name: null,
192
+ show_fields: false
193
+ },
194
+ content: {
195
+ id: { '@path': '$.properties.product_id' },
196
+ quantity: { '@path': '$.properties.quantity' },
197
+ item_price: { '@path': '$.properties.price' }
198
+ }
199
+ },
200
+ type: 'automatic'
201
+ }
202
+ ]
203
+ }
204
+
205
+ export default browserDestination(destination)
@@ -0,0 +1,40 @@
1
+ /* eslint-disable */
2
+ // @ts-nocheck
3
+ import { LDU } from './types'
4
+ import { getLDU } from './send/utils';
5
+
6
+ export function initScript(pixelId: string, ldu: keyof typeof LDU, disablePushState?: boolean ) {
7
+ (function(f, b, e, v, n, t, s) {
8
+ if (f.fbq) return;
9
+ n = f.fbq = function() {
10
+ n.callMethod ?
11
+ n.callMethod.apply(n, arguments) : n.queue.push(arguments);
12
+ };
13
+ if (!f._fbq) f._fbq = n;
14
+ n.push = n;
15
+ n.loaded = true;
16
+ n.version = '2.0';
17
+ n.queue = [];
18
+ t = b.createElement(e);
19
+ t.async = true;
20
+ t.src = v;
21
+ s = b.getElementsByTagName(e)[0];
22
+ s.parentNode.insertBefore(t, s);
23
+ })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');
24
+
25
+ if(ldu === LDU.Disabled.key) {
26
+ window.fbq('dataProcessingOptions', [])
27
+ }
28
+ else {
29
+ const lduObj = getLDU(ldu)
30
+ window.fbq('dataProcessingOptions', ['LDU'], lduObj.country, lduObj.state)
31
+ }
32
+
33
+ window.fbq('init', pixelId)
34
+ if(typeof disablePushState === 'boolean' && disablePushState === false) {
35
+ // Customer will handle page tracking manually
36
+ window.fbq.disablePushState = false
37
+ } else {
38
+ window.fbq('track', 'PageView')
39
+ }
40
+ }