@segment/action-destinations 3.327.0 → 3.329.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 (85) hide show
  1. package/dist/destinations/accoil-analytics/group/generated-types.d.ts +2 -0
  2. package/dist/destinations/accoil-analytics/group/index.js +14 -0
  3. package/dist/destinations/accoil-analytics/group/index.js.map +1 -1
  4. package/dist/destinations/braze/trackEvent2/index.js +1 -1
  5. package/dist/destinations/braze/trackEvent2/index.js.map +1 -1
  6. package/dist/destinations/braze/trackPurchase2/index.js +1 -1
  7. package/dist/destinations/braze/trackPurchase2/index.js.map +1 -1
  8. package/dist/destinations/braze/updateUserProfile2/index.js +1 -1
  9. package/dist/destinations/braze/updateUserProfile2/index.js.map +1 -1
  10. package/dist/destinations/braze/utils.d.ts +19 -6
  11. package/dist/destinations/braze/utils.js +156 -32
  12. package/dist/destinations/braze/utils.js.map +1 -1
  13. package/dist/destinations/facebook-conversions-api/addToCart/generated-types.d.ts +3 -0
  14. package/dist/destinations/facebook-conversions-api/addToCart2/generated-types.d.ts +3 -0
  15. package/dist/destinations/facebook-conversions-api/custom/generated-types.d.ts +3 -0
  16. package/dist/destinations/facebook-conversions-api/custom2/generated-types.d.ts +3 -0
  17. package/dist/destinations/facebook-conversions-api/fb-capi-app-data.js +20 -2
  18. package/dist/destinations/facebook-conversions-api/fb-capi-app-data.js.map +1 -1
  19. package/dist/destinations/facebook-conversions-api/fb-capi-user-data.js +6 -0
  20. package/dist/destinations/facebook-conversions-api/fb-capi-user-data.js.map +1 -1
  21. package/dist/destinations/facebook-conversions-api/initiateCheckout/generated-types.d.ts +3 -0
  22. package/dist/destinations/facebook-conversions-api/initiateCheckout2/generated-types.d.ts +3 -0
  23. package/dist/destinations/facebook-conversions-api/pageView/generated-types.d.ts +3 -0
  24. package/dist/destinations/facebook-conversions-api/pageView2/generated-types.d.ts +3 -0
  25. package/dist/destinations/facebook-conversions-api/purchase/generated-types.d.ts +3 -0
  26. package/dist/destinations/facebook-conversions-api/purchase2/generated-types.d.ts +3 -0
  27. package/dist/destinations/facebook-conversions-api/search/generated-types.d.ts +3 -0
  28. package/dist/destinations/facebook-conversions-api/search2/generated-types.d.ts +3 -0
  29. package/dist/destinations/facebook-conversions-api/viewContent/generated-types.d.ts +3 -0
  30. package/dist/destinations/facebook-conversions-api/viewContent2/generated-types.d.ts +3 -0
  31. package/dist/destinations/google-enhanced-conversions/userList/index.js +1 -1
  32. package/dist/destinations/google-enhanced-conversions/userList/index.js.map +1 -1
  33. package/dist/destinations/index.js +2 -0
  34. package/dist/destinations/index.js.map +1 -1
  35. package/dist/destinations/optimizely-web/generated-types.d.ts +5 -0
  36. package/dist/destinations/optimizely-web/generated-types.js +3 -0
  37. package/dist/destinations/optimizely-web/generated-types.js.map +1 -0
  38. package/dist/destinations/optimizely-web/index.d.ts +4 -0
  39. package/dist/destinations/optimizely-web/index.js +49 -0
  40. package/dist/destinations/optimizely-web/index.js.map +1 -0
  41. package/dist/destinations/optimizely-web/trackEvent/client.d.ts +11 -0
  42. package/dist/destinations/optimizely-web/trackEvent/client.js +61 -0
  43. package/dist/destinations/optimizely-web/trackEvent/client.js.map +1 -0
  44. package/dist/destinations/optimizely-web/trackEvent/constants.d.ts +3 -0
  45. package/dist/destinations/optimizely-web/trackEvent/constants.js +7 -0
  46. package/dist/destinations/optimizely-web/trackEvent/constants.js.map +1 -0
  47. package/dist/destinations/optimizely-web/trackEvent/fields.d.ts +2 -0
  48. package/dist/destinations/optimizely-web/trackEvent/fields.js +193 -0
  49. package/dist/destinations/optimizely-web/trackEvent/fields.js.map +1 -0
  50. package/dist/destinations/optimizely-web/trackEvent/generated-types.d.ts +26 -0
  51. package/dist/destinations/optimizely-web/trackEvent/generated-types.js +3 -0
  52. package/dist/destinations/optimizely-web/trackEvent/generated-types.js.map +1 -0
  53. package/dist/destinations/optimizely-web/trackEvent/index.d.ts +5 -0
  54. package/dist/destinations/optimizely-web/trackEvent/index.js +15 -0
  55. package/dist/destinations/optimizely-web/trackEvent/index.js.map +1 -0
  56. package/dist/destinations/optimizely-web/trackEvent/types.d.ts +59 -0
  57. package/dist/destinations/optimizely-web/trackEvent/types.js +3 -0
  58. package/dist/destinations/optimizely-web/trackEvent/types.js.map +1 -0
  59. package/dist/destinations/optimizely-web/trackEvent/utils.d.ts +25 -0
  60. package/dist/destinations/optimizely-web/trackEvent/utils.js +156 -0
  61. package/dist/destinations/optimizely-web/trackEvent/utils.js.map +1 -0
  62. package/dist/destinations/s3/fields.js +9 -1
  63. package/dist/destinations/s3/fields.js.map +1 -1
  64. package/dist/destinations/s3/functions.d.ts +1 -1
  65. package/dist/destinations/s3/functions.js +13 -5
  66. package/dist/destinations/s3/functions.js.map +1 -1
  67. package/dist/destinations/s3/index.js +6 -0
  68. package/dist/destinations/s3/index.js.map +1 -1
  69. package/dist/destinations/s3/syncToS3/generated-types.d.ts +1 -0
  70. package/dist/destinations/snap-audiences/generated-types.d.ts +8 -0
  71. package/dist/destinations/snap-audiences/generated-types.js +3 -0
  72. package/dist/destinations/snap-audiences/generated-types.js.map +1 -0
  73. package/dist/destinations/snap-audiences/index.d.ts +4 -0
  74. package/dist/destinations/snap-audiences/index.js +139 -0
  75. package/dist/destinations/snap-audiences/index.js.map +1 -0
  76. package/dist/destinations/snap-audiences/syncAudience/generated-types.d.ts +12 -0
  77. package/dist/destinations/snap-audiences/syncAudience/generated-types.js +3 -0
  78. package/dist/destinations/snap-audiences/syncAudience/generated-types.js.map +1 -0
  79. package/dist/destinations/snap-audiences/syncAudience/index.d.ts +5 -0
  80. package/dist/destinations/snap-audiences/syncAudience/index.js +156 -0
  81. package/dist/destinations/snap-audiences/syncAudience/index.js.map +1 -0
  82. package/dist/destinations/snap-audiences/syncAudience/utils.d.ts +8 -0
  83. package/dist/destinations/snap-audiences/syncAudience/utils.js +73 -0
  84. package/dist/destinations/snap-audiences/syncAudience/utils.js.map +1 -0
  85. package/package.json +2 -2
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fields = void 0;
4
+ exports.fields = {
5
+ uuid: {
6
+ label: 'UUID',
7
+ description: 'Unique message UUID to send with the event',
8
+ type: 'string',
9
+ required: true,
10
+ default: { '@path': '$.messageId' }
11
+ },
12
+ endUserId: {
13
+ label: 'Optimizely End User ID',
14
+ description: "The unique identifier for the user. The value should be taken from the optimizelyEndUserId cookie, or it can be collected using window.optimizely.get('visitor').visitorId. If using the BYOID feature pass in the value of the ID for your user.",
15
+ type: 'string',
16
+ required: true,
17
+ default: {
18
+ '@if': {
19
+ exists: { '@path': '$.integrations.actions-optimizely-web.end_user_id' },
20
+ then: { '@path': '$.integrations.actions-optimizely-web.end_user_id' },
21
+ else: { '@path': '$.properties.end_user_id' }
22
+ }
23
+ }
24
+ },
25
+ anonymizeIP: {
26
+ label: 'Anonymize IP',
27
+ description: 'Anonymize the IP address of the user.',
28
+ type: 'boolean',
29
+ required: true,
30
+ default: true,
31
+ disabledInputMethods: ['enrichment', 'freeform', 'function', 'literal', 'variable']
32
+ },
33
+ eventMatching: {
34
+ label: 'Event Matching',
35
+ description: "Specify how Segment should match the Segment event to an Optimizely event, as well as specify if Segment should create new Custom Events and Pages in Optimizely if they don't exist.",
36
+ type: 'object',
37
+ required: true,
38
+ properties: {
39
+ createEventIfNotFound: {
40
+ label: 'Create If Not Found',
41
+ description: 'If needed, Segment can define new Custom Events and Pages in Optimizely. If you do not want Segment to create new events, select "Do not create".',
42
+ type: 'string',
43
+ required: true,
44
+ choices: [
45
+ { label: 'Do not create', value: 'DO_NOT_CREATE' },
46
+ { label: 'Create Custom Event', value: 'CREATE' }
47
+ ]
48
+ },
49
+ shouldSnakeCaseEventKey: {
50
+ label: 'Should Snake Case Event Key',
51
+ description: 'If the event key should be converted to snake case before sending to Optimizely.',
52
+ type: 'boolean',
53
+ required: true
54
+ },
55
+ eventKey: {
56
+ label: 'Event Key',
57
+ description: 'Optimizely event or page key to record the event against.',
58
+ type: 'string',
59
+ required: false,
60
+ default: { '@path': '$.event' }
61
+ },
62
+ eventId: {
63
+ label: 'Event ID',
64
+ description: 'Optimizely event or page ID to record the event against. The ID can only be used when the event / page has already been created in Optimizely. Segment cannot create new events in Optimizely using the ID.',
65
+ type: 'string',
66
+ required: false
67
+ }
68
+ },
69
+ default: {
70
+ createEventIfNotFound: 'CREATE',
71
+ shouldSnakeCaseEventKey: false,
72
+ eventKey: {
73
+ '@if': {
74
+ exists: { '@path': '$.event' },
75
+ then: { '@path': '$.event' },
76
+ else: { '@path': '$.name' }
77
+ }
78
+ },
79
+ eventId: { '@path': '$.properties.event_id' }
80
+ }
81
+ },
82
+ pageUrl: {
83
+ label: 'Page URL',
84
+ description: 'The URL of the page where the event occurred. Used if Segment creates a Page in Optimizely.',
85
+ type: 'string',
86
+ required: false,
87
+ default: { '@path': '$.context.page.url' }
88
+ },
89
+ category: {
90
+ label: 'Event Category',
91
+ description: 'Event Category',
92
+ type: 'string',
93
+ required: true,
94
+ choices: [
95
+ { label: 'add_to_cart', value: 'add_to_cart' },
96
+ { label: 'save', value: 'save' },
97
+ { label: 'search', value: 'search' },
98
+ { label: 'share', value: 'share' },
99
+ { label: 'purchase', value: 'purchase' },
100
+ { label: 'convert', value: 'convert' },
101
+ { label: 'sign_up', value: 'sign_up' },
102
+ { label: 'subscribe', value: 'subscribe' },
103
+ { label: 'other', value: 'other' }
104
+ ],
105
+ default: 'other'
106
+ },
107
+ timestamp: {
108
+ label: 'Timestamp',
109
+ description: 'Timestampt for when the event took place',
110
+ type: 'datetime',
111
+ required: true,
112
+ default: { '@path': '$.timestamp' }
113
+ },
114
+ eventType: {
115
+ label: 'Event Type',
116
+ description: 'The type of Segment event',
117
+ type: 'string',
118
+ unsafe_hidden: true,
119
+ required: true,
120
+ default: { '@path': '$.type' }
121
+ },
122
+ tags: {
123
+ label: 'Tags',
124
+ description: 'Tags to send with the event',
125
+ type: 'object',
126
+ required: false,
127
+ additionalProperties: true,
128
+ defaultObjectUI: 'keyvalue'
129
+ },
130
+ properties: {
131
+ label: 'Properties',
132
+ description: 'Additional properties to send with the event. Properties must be defined in Optimizely before they can be sent.',
133
+ type: 'object',
134
+ required: false,
135
+ additionalProperties: true,
136
+ defaultObjectUI: 'keyvalue',
137
+ properties: {
138
+ revenue: {
139
+ label: 'Revenue',
140
+ description: 'The revenue amount associated with this event For example, to represent $23.42, this field would be set to 23.42.',
141
+ type: 'number',
142
+ required: false
143
+ },
144
+ value: {
145
+ label: 'Value',
146
+ description: 'A scalar value associated with an event. This should be some non-revenue number.',
147
+ type: 'number',
148
+ required: false
149
+ },
150
+ quantity: {
151
+ label: 'Quantity',
152
+ description: 'An aggregatable "count" associated with this event; for example, a number of video views or items in a shopping cart.',
153
+ type: 'integer',
154
+ required: false
155
+ },
156
+ currency: {
157
+ label: 'Currency',
158
+ description: 'Currency code for revenue. Defaults to USD.',
159
+ type: 'string',
160
+ required: false,
161
+ default: 'USD'
162
+ }
163
+ },
164
+ default: {
165
+ revenue: {
166
+ '@path': '$.properties.revenue'
167
+ },
168
+ value: {
169
+ '@path': '$.properties.value'
170
+ },
171
+ quantity: {
172
+ '@path': '$.properties.quantity'
173
+ },
174
+ currency: {
175
+ '@path': '$.properties.currency'
176
+ }
177
+ }
178
+ },
179
+ sessionId: {
180
+ label: 'Session ID',
181
+ description: 'A unique identifier that identifies the session context, if any, for these events. If omitted, the Optimizely backend will calculate session-based results by inferring sessions by opening a session when an event is first received from a given visitor_id, and closing the session after 30 minutes with no events received for that visitor, with a maximum session size of 24 hours.',
182
+ type: 'string',
183
+ required: false,
184
+ default: {
185
+ '@if': {
186
+ exists: { '@path': '$.integrations.actions-optimizely-web.session_id' },
187
+ then: { '@path': '$.integrations.actions-optimizely-web.session_id' },
188
+ else: { '@path': '$.properties.session_id' }
189
+ }
190
+ }
191
+ }
192
+ };
193
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../../src/destinations/optimizely-web/trackEvent/fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface Payload {
2
+ uuid: string;
3
+ endUserId: string;
4
+ anonymizeIP: boolean;
5
+ eventMatching: {
6
+ createEventIfNotFound: string;
7
+ shouldSnakeCaseEventKey: boolean;
8
+ eventKey?: string;
9
+ eventId?: string;
10
+ };
11
+ pageUrl?: string;
12
+ category: string;
13
+ timestamp: string | number;
14
+ eventType: string;
15
+ tags?: {
16
+ [k: string]: unknown;
17
+ };
18
+ properties?: {
19
+ revenue?: number;
20
+ value?: number;
21
+ quantity?: number;
22
+ currency?: string;
23
+ [k: string]: unknown;
24
+ };
25
+ sessionId?: string;
26
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=generated-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../../src/destinations/optimizely-web/trackEvent/generated-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { ActionDefinition } from '@segment/actions-core';
2
+ import type { Settings } from '../generated-types';
3
+ import type { Payload } from './generated-types';
4
+ declare const action: ActionDefinition<Settings, Payload>;
5
+ export default action;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fields_1 = require("./fields");
4
+ const utils_1 = require("./utils");
5
+ const action = {
6
+ title: 'Track Event',
7
+ description: 'Send a Segment track or page event to Optimizely',
8
+ defaultSubscription: 'type = "track" or type = "page"',
9
+ fields: fields_1.fields,
10
+ perform: async (request, { payload, settings }) => {
11
+ return await utils_1.send(request, settings, payload);
12
+ }
13
+ };
14
+ exports.default = action;
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/optimizely-web/trackEvent/index.ts"],"names":[],"mappings":";;AAGA,qCAAiC;AACjC,mCAA8B;AAE9B,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,kDAAkD;IAC/D,mBAAmB,EAAE,iCAAiC;IACtD,MAAM,EAAN,eAAM;IACN,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAChD,OAAO,MAAM,YAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC/C,CAAC;CACF,CAAA;AAED,kBAAe,MAAM,CAAA"}
@@ -0,0 +1,59 @@
1
+ import { TRACK, PAGE } from './constants';
2
+ export interface SendEventJSON {
3
+ account_id: string;
4
+ project_id?: number;
5
+ anonymize_ip: boolean;
6
+ client_name: 'Segment Optimizely Web Destination';
7
+ client_version: string;
8
+ enrich_decisions: true;
9
+ visitors: Array<Visitor>;
10
+ }
11
+ export interface Visitor {
12
+ visitor_id: string;
13
+ session_id?: string;
14
+ attributes: [];
15
+ snapshots: Array<Snapshot>;
16
+ }
17
+ export interface Snapshot {
18
+ decisions: [];
19
+ events: Array<Event>;
20
+ }
21
+ export interface Event {
22
+ entity_id: string;
23
+ key?: string;
24
+ timestamp: UnixTimestamp13;
25
+ uuid: string;
26
+ type: EventType;
27
+ revenue?: number;
28
+ value?: number;
29
+ tags: {
30
+ quantity?: number;
31
+ currency?: string;
32
+ $opt_event_properties?: {
33
+ [key: string]: string | number | boolean;
34
+ };
35
+ [key: string]: string | number | {
36
+ [key: string]: string | number | boolean;
37
+ } | undefined;
38
+ };
39
+ }
40
+ export declare type EventType = 'view_activated' | 'other';
41
+ export declare type UnixTimestamp13 = number & {
42
+ __type: 'UnixTimestamp13';
43
+ };
44
+ export interface EventItem {
45
+ id: number;
46
+ key: string;
47
+ name: string;
48
+ }
49
+ export interface CreateEventJSON {
50
+ category: string;
51
+ event_type: string;
52
+ key: string;
53
+ name?: string;
54
+ }
55
+ export interface CreatePageJSON extends CreateEventJSON {
56
+ edit_url: string;
57
+ project_id: number;
58
+ }
59
+ export declare type Type = typeof TRACK | typeof PAGE;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/destinations/optimizely-web/trackEvent/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import type { Payload } from './generated-types';
2
+ import { Settings } from '../generated-types';
3
+ import { RequestClient } from '@segment/actions-core';
4
+ import { UnixTimestamp13, EventItem, Type } from './types';
5
+ import { OptimizelyWebClient } from './client';
6
+ export declare function send(request: RequestClient, settings: Settings, payload: Payload): Promise<import("@segment/actions-core").ModifiedResponse<unknown>>;
7
+ export declare function validate(payload: Payload): {
8
+ unixTimestamp13: UnixTimestamp13;
9
+ restProperties: {
10
+ [k: string]: unknown;
11
+ };
12
+ value: number | undefined;
13
+ revenue: number | undefined;
14
+ quantity: number | undefined;
15
+ currency: string | undefined;
16
+ tags: {
17
+ [k: string]: unknown;
18
+ } | undefined;
19
+ };
20
+ export declare function areAllPropertiesPrimitive(obj: Record<string, unknown> | undefined, typesToCheck?: Array<'string' | 'boolean' | 'number'>): boolean;
21
+ export declare function getEventid(client: OptimizelyWebClient, payload: Payload): Promise<string>;
22
+ export declare function cleanKey(eventType: Type, shouldSnakeCaseEventKey: boolean, key?: string): string | undefined;
23
+ export declare function getEventFromCache(key: string): EventItem | undefined;
24
+ export declare function getEventsFromCache(): EventItem[];
25
+ export declare function ensureEventSchema(client: OptimizelyWebClient, key: string, name: string, category: string, type: Type, pageUrl?: string): Promise<EventItem>;
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ensureEventSchema = exports.getEventsFromCache = exports.getEventFromCache = exports.cleanKey = exports.getEventid = exports.areAllPropertiesPrimitive = exports.validate = exports.send = void 0;
7
+ const actions_core_1 = require("@segment/actions-core");
8
+ const constants_1 = require("./constants");
9
+ const client_1 = require("./client");
10
+ const snakeCase_1 = __importDefault(require("lodash/snakeCase"));
11
+ async function send(request, settings, payload) {
12
+ const { unixTimestamp13, restProperties, value, revenue, quantity, currency, tags } = validate(payload);
13
+ const { endUserId, sessionId: session_id, uuid, eventMatching: { eventId, eventKey, shouldSnakeCaseEventKey }, eventType } = payload;
14
+ const client = new client_1.OptimizelyWebClient(request, settings);
15
+ const entity_id = eventId ?? (await getEventid(client, payload));
16
+ const body = {
17
+ account_id: settings.optimizelyAccountId,
18
+ project_id: settings.projectID,
19
+ anonymize_ip: payload.anonymizeIP,
20
+ client_name: 'Segment Optimizely Web Destination',
21
+ client_version: '1.0.0',
22
+ enrich_decisions: true,
23
+ visitors: [
24
+ {
25
+ visitor_id: endUserId,
26
+ session_id,
27
+ attributes: [],
28
+ snapshots: [
29
+ {
30
+ decisions: [],
31
+ events: [
32
+ {
33
+ entity_id,
34
+ key: cleanKey(eventType, shouldSnakeCaseEventKey, eventKey),
35
+ timestamp: unixTimestamp13,
36
+ uuid,
37
+ type: eventType === constants_1.PAGE ? 'view_activated' : 'other',
38
+ revenue: revenue ? revenue * 100 : undefined,
39
+ value,
40
+ tags: {
41
+ quantity,
42
+ currency,
43
+ $opt_event_properties: restProperties,
44
+ ...tags
45
+ }
46
+ }
47
+ ]
48
+ }
49
+ ]
50
+ }
51
+ ]
52
+ };
53
+ return await client.sendEvent(body);
54
+ }
55
+ exports.send = send;
56
+ function validate(payload) {
57
+ const { eventMatching: { eventKey, eventId }, eventType, tags, timestamp, properties: { value, revenue, quantity, currency, ...restProperties } = {} } = payload;
58
+ if (!eventKey && !eventId) {
59
+ throw new actions_core_1.PayloadValidationError('One of "Event Key" or "Event Id" is required');
60
+ }
61
+ if (!constants_1.SUPPORTED_TYPES.includes(eventType)) {
62
+ throw new actions_core_1.PayloadValidationError(`Event type ${eventType} is not supported. Supported types are ${constants_1.SUPPORTED_TYPES.join(', ')}`);
63
+ }
64
+ const unixTimestamp13 = new Date(timestamp).getTime();
65
+ if (unixTimestamp13.toString().length !== 13) {
66
+ throw new actions_core_1.PayloadValidationError('Unable to convert timestamp into 13 digit Unix timestamp');
67
+ }
68
+ if (!areAllPropertiesPrimitive(restProperties, ['string', 'number', 'boolean'])) {
69
+ throw new actions_core_1.PayloadValidationError('Event properties must be of type string, number or boolean');
70
+ }
71
+ if (!areAllPropertiesPrimitive(tags, ['string', 'number'])) {
72
+ throw new actions_core_1.PayloadValidationError('Tags must be of type string or number');
73
+ }
74
+ return {
75
+ unixTimestamp13,
76
+ restProperties,
77
+ value,
78
+ revenue,
79
+ quantity,
80
+ currency,
81
+ tags
82
+ };
83
+ }
84
+ exports.validate = validate;
85
+ function areAllPropertiesPrimitive(obj, typesToCheck = ['string', 'boolean', 'number']) {
86
+ if (obj === undefined || Object.keys(obj).length === 0) {
87
+ return true;
88
+ }
89
+ return Object.values(obj).every((value) => {
90
+ const type = typeof value;
91
+ return typesToCheck.includes(type);
92
+ });
93
+ }
94
+ exports.areAllPropertiesPrimitive = areAllPropertiesPrimitive;
95
+ async function getEventid(client, payload) {
96
+ const { category, eventMatching: { createEventIfNotFound, eventKey, shouldSnakeCaseEventKey }, eventType, pageUrl } = payload;
97
+ if (!eventKey) {
98
+ throw new actions_core_1.PayloadValidationError('Event key is required to get the event id');
99
+ }
100
+ const key = cleanKey(eventType, shouldSnakeCaseEventKey, eventKey);
101
+ const name = eventKey;
102
+ let event = getEventFromCache(key);
103
+ if (event === undefined) {
104
+ if (createEventIfNotFound === 'CREATE') {
105
+ event = await ensureEventSchema(client, key, name, category, eventType, pageUrl);
106
+ }
107
+ else {
108
+ throw new actions_core_1.PayloadValidationError(`Event with key = ${key} not found in Optimizely. "Create If Not Found" field set to "Do not create" which prevents Segment from creating the event.`);
109
+ }
110
+ }
111
+ if (!event) {
112
+ throw new actions_core_1.PayloadValidationError(`Error attempting to find event with key = ${key} in Optimizely`);
113
+ }
114
+ return event.id.toString();
115
+ }
116
+ exports.getEventid = getEventid;
117
+ function cleanKey(eventType, shouldSnakeCaseEventKey, key) {
118
+ if (!key) {
119
+ return undefined;
120
+ }
121
+ const maybeSnakeKey = shouldSnakeCaseEventKey ? snakeCase_1.default(key) : key;
122
+ return eventType === constants_1.PAGE ? maybeSnakeKey.replace(/[^a-zA-Z0-9_]/g, '_') : maybeSnakeKey;
123
+ }
124
+ exports.cleanKey = cleanKey;
125
+ function getEventFromCache(key) {
126
+ return getEventsFromCache().find((event) => {
127
+ return event.key === key;
128
+ });
129
+ }
130
+ exports.getEventFromCache = getEventFromCache;
131
+ function getEventsFromCache() {
132
+ return [];
133
+ }
134
+ exports.getEventsFromCache = getEventsFromCache;
135
+ async function ensureEventSchema(client, key, name, category, type, pageUrl) {
136
+ let event = await (async () => {
137
+ const response = await client.getCustomEvents(type);
138
+ const eventItems = await response.json();
139
+ return eventItems.find((event) => {
140
+ return event.key === key;
141
+ });
142
+ })();
143
+ if (event === undefined) {
144
+ event = await (async () => {
145
+ const response = await client.createCustomEvent(key, name, category, type, pageUrl);
146
+ const event = await response.json();
147
+ return event;
148
+ })();
149
+ }
150
+ if (!event) {
151
+ throw new actions_core_1.IntegrationError(`Unable to create event with key ${key} in Optimizely`, 'EVENT_CREATION_ERROR', 400);
152
+ }
153
+ return event;
154
+ }
155
+ exports.ensureEventSchema = ensureEventSchema;
156
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/destinations/optimizely-web/trackEvent/utils.ts"],"names":[],"mappings":"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"}
@@ -142,6 +142,14 @@ exports.commonFields = {
142
142
  disabledInputMethods: ['variable', 'function', 'enrichment'],
143
143
  default: 'audience_action'
144
144
  },
145
+ batch_size_column_name: {
146
+ label: 'Batch Size Column Name',
147
+ description: 'Specify the column name to store the batch size when the event is sent to S3. Leave blank if no column is required',
148
+ type: 'string',
149
+ required: false,
150
+ disabledInputMethods: ['variable', 'function', 'enrichment'],
151
+ default: 'batch_size'
152
+ },
145
153
  traits_or_props: {
146
154
  label: 'Traits or Props - Hidden Field',
147
155
  description: 'Field used to retrieve Audience value',
@@ -174,7 +182,7 @@ exports.commonFields = {
174
182
  },
175
183
  batch_size: {
176
184
  label: 'Batch Size',
177
- description: 'Maximum number of events to include in each batch. Actual batch sizes may be lower. Max batch size is 25000.',
185
+ description: 'Maximum number of events to include in each batch. Actual batch sizes may be lower. Max batch size is 10000.',
178
186
  type: 'number',
179
187
  required: false,
180
188
  default: 5000
@@ -1 +1 @@
1
- {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../src/destinations/s3/fields.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../src/destinations/s3/fields.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,6 @@ import { Settings } from './generated-types';
3
3
  import { RawMapping, ColumnHeader } from './types';
4
4
  export declare function send(payloads: Payload[], settings: Settings, rawMapping: RawMapping): Promise<void>;
5
5
  export declare function clean(delimiter: string, str?: string): string;
6
- export declare function generateFile(payloads: Payload[], headers: ColumnHeader[], delimiter: string, actionColName?: string): string;
6
+ export declare function generateFile(payloads: Payload[], headers: ColumnHeader[], delimiter: string, actionColName?: string, batchColName?: string): string;
7
7
  export declare function encodeString(str: string): string;
8
8
  export declare function getAudienceAction(payload: Payload): boolean | undefined;
@@ -7,8 +7,10 @@ async function send(payloads, settings, rawMapping) {
7
7
  const batchSize = payloads[0] && typeof payloads[0].batch_size === 'number' ? payloads[0].batch_size : 0;
8
8
  const delimiter = payloads[0]?.delimiter;
9
9
  const actionColName = payloads[0]?.audience_action_column_name;
10
- if (batchSize > 25000) {
11
- throw new actions_core_1.IntegrationError('Batch size cannot exceed 25000', 'Invalid Payload', 400);
10
+ const batchColName = payloads[0]?.batch_size_column_name;
11
+ const maxBatchSize = 10000;
12
+ if (batchSize > maxBatchSize) {
13
+ throw new actions_core_1.IntegrationError(`Batch size cannot exceed ${maxBatchSize}`, 'Invalid Payload', 400);
12
14
  }
13
15
  const headers = Object.entries(rawMapping.columns)
14
16
  .filter(([_, value]) => value !== '')
@@ -18,7 +20,10 @@ async function send(payloads, settings, rawMapping) {
18
20
  if (actionColName) {
19
21
  headers.push({ cleanName: clean(delimiter, actionColName), originalName: actionColName });
20
22
  }
21
- const fileContent = generateFile(payloads, headers, delimiter, actionColName);
23
+ if (batchColName) {
24
+ headers.push({ cleanName: clean(delimiter, batchColName), originalName: batchColName });
25
+ }
26
+ const fileContent = generateFile(payloads, headers, delimiter, actionColName, batchColName);
22
27
  const s3Client = new client_1.Client(settings.s3_aws_region, settings.iam_role_arn, settings.iam_external_id);
23
28
  await s3Client.uploadS3(settings, fileContent, payloads[0]?.filename_prefix ?? '', payloads[0]?.s3_aws_folder_name ?? '', payloads[0]?.file_extension);
24
29
  }
@@ -37,9 +42,9 @@ function processField(row, value) {
37
42
  ? String(JSON.stringify(value))
38
43
  : String(value)));
39
44
  }
40
- function generateFile(payloads, headers, delimiter, actionColName) {
45
+ function generateFile(payloads, headers, delimiter, actionColName, batchColName) {
41
46
  const rows = [];
42
- rows.push(`${headers.map(header => header.cleanName).join(delimiter === 'tab' ? '\t' : delimiter)}\n`);
47
+ rows.push(`${headers.map((header) => header.cleanName).join(delimiter === 'tab' ? '\t' : delimiter)}\n`);
43
48
  payloads.forEach((payload, index) => {
44
49
  const isLastRow = index === payloads.length - 1;
45
50
  const row = [];
@@ -47,6 +52,9 @@ function generateFile(payloads, headers, delimiter, actionColName) {
47
52
  if (header.originalName === actionColName) {
48
53
  processField(row, getAudienceAction(payload));
49
54
  }
55
+ else if (header.originalName === batchColName) {
56
+ processField(row, payloads.length);
57
+ }
50
58
  else {
51
59
  processField(row, payload.columns[header.originalName]);
52
60
  }