@segment/action-destinations 3.310.0 → 3.312.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 (72) hide show
  1. package/dist/destinations/facebook-conversions-api/addToCart/generated-types.d.ts +1 -0
  2. package/dist/destinations/facebook-conversions-api/custom/generated-types.d.ts +1 -0
  3. package/dist/destinations/facebook-conversions-api/fb-capi-user-data.js +6 -0
  4. package/dist/destinations/facebook-conversions-api/fb-capi-user-data.js.map +1 -1
  5. package/dist/destinations/facebook-conversions-api/initiateCheckout/generated-types.d.ts +1 -0
  6. package/dist/destinations/facebook-conversions-api/pageView/generated-types.d.ts +1 -0
  7. package/dist/destinations/facebook-conversions-api/purchase/generated-types.d.ts +1 -0
  8. package/dist/destinations/facebook-conversions-api/search/generated-types.d.ts +1 -0
  9. package/dist/destinations/facebook-conversions-api/viewContent/generated-types.d.ts +1 -0
  10. package/dist/destinations/google-enhanced-conversions/functions.d.ts +1 -1
  11. package/dist/destinations/google-enhanced-conversions/functions.js +1 -1
  12. package/dist/destinations/google-enhanced-conversions/uploadCallConversion/index.js +2 -2
  13. package/dist/destinations/google-enhanced-conversions/uploadCallConversion2/index.js +2 -2
  14. package/dist/destinations/google-enhanced-conversions/uploadClickConversion/index.js +2 -2
  15. package/dist/destinations/google-enhanced-conversions/uploadClickConversion2/index.js +2 -2
  16. package/dist/destinations/google-enhanced-conversions/userList/index.js +2 -2
  17. package/dist/destinations/google-sheets/googleapis/index.js +2 -0
  18. package/dist/destinations/google-sheets/googleapis/index.js.map +1 -1
  19. package/dist/destinations/hubspot/customEvent/client.d.ts +10 -0
  20. package/dist/destinations/hubspot/customEvent/client.js +39 -0
  21. package/dist/destinations/hubspot/customEvent/client.js.map +1 -0
  22. package/dist/destinations/hubspot/customEvent/common-fields.js +7 -3
  23. package/dist/destinations/hubspot/customEvent/common-fields.js.map +1 -1
  24. package/dist/destinations/hubspot/customEvent/constants.d.ts +4 -0
  25. package/dist/destinations/hubspot/customEvent/constants.js +141 -1
  26. package/dist/destinations/hubspot/customEvent/constants.js.map +1 -1
  27. package/dist/destinations/hubspot/customEvent/dynamic-fields.js +11 -5
  28. package/dist/destinations/hubspot/customEvent/dynamic-fields.js.map +1 -1
  29. package/dist/destinations/hubspot/customEvent/index.d.ts +1 -1
  30. package/dist/destinations/hubspot/customEvent/index.js +54 -16
  31. package/dist/destinations/hubspot/customEvent/index.js.map +1 -1
  32. package/dist/destinations/hubspot/customEvent/types.d.ts +81 -0
  33. package/dist/destinations/hubspot/customEvent/types.js +10 -0
  34. package/dist/destinations/hubspot/customEvent/types.js.map +1 -0
  35. package/dist/destinations/hubspot/customEvent/utils.d.ts +12 -0
  36. package/dist/destinations/hubspot/customEvent/utils.js +296 -0
  37. package/dist/destinations/hubspot/customEvent/utils.js.map +1 -0
  38. package/dist/destinations/hubspot/upsertObject/client.d.ts +11 -0
  39. package/dist/destinations/hubspot/upsertObject/client.js +39 -0
  40. package/dist/destinations/hubspot/upsertObject/client.js.map +1 -0
  41. package/dist/destinations/hubspot/upsertObject/common-fields.js +14 -7
  42. package/dist/destinations/hubspot/upsertObject/common-fields.js.map +1 -1
  43. package/dist/destinations/hubspot/upsertObject/constants.d.ts +1 -0
  44. package/dist/destinations/hubspot/upsertObject/constants.js +2 -1
  45. package/dist/destinations/hubspot/upsertObject/constants.js.map +1 -1
  46. package/dist/destinations/hubspot/upsertObject/dynamic-fields.js.map +1 -1
  47. package/dist/destinations/hubspot/upsertObject/index.js +36 -35
  48. package/dist/destinations/hubspot/upsertObject/index.js.map +1 -1
  49. package/dist/destinations/hubspot/upsertObject/types.d.ts +192 -0
  50. package/dist/destinations/hubspot/upsertObject/types.js +56 -0
  51. package/dist/destinations/hubspot/upsertObject/types.js.map +1 -0
  52. package/dist/destinations/hubspot/upsertObject/utils.d.ts +13 -0
  53. package/dist/destinations/hubspot/upsertObject/utils.js +548 -0
  54. package/dist/destinations/hubspot/upsertObject/utils.js.map +1 -0
  55. package/dist/destinations/iterable/updateUser/generated-types.d.ts +2 -0
  56. package/dist/destinations/iterable/updateUser/index.js +42 -13
  57. package/dist/destinations/iterable/updateUser/index.js.map +1 -1
  58. package/dist/destinations/iterable/utils.d.ts +1 -0
  59. package/dist/destinations/iterable/utils.js +1 -0
  60. package/dist/destinations/iterable/utils.js.map +1 -1
  61. package/dist/destinations/linkedin-conversions/index.js +14 -2
  62. package/dist/destinations/linkedin-conversions/index.js.map +1 -1
  63. package/dist/destinations/loops/createOrUpdateContact/generated-types.d.ts +4 -0
  64. package/dist/destinations/loops/createOrUpdateContact/index.js +48 -2
  65. package/dist/destinations/loops/createOrUpdateContact/index.js.map +1 -1
  66. package/package.json +2 -2
  67. package/dist/destinations/hubspot/customEvent/hubspot-api.d.ts +0 -62
  68. package/dist/destinations/hubspot/customEvent/hubspot-api.js +0 -305
  69. package/dist/destinations/hubspot/customEvent/hubspot-api.js.map +0 -1
  70. package/dist/destinations/hubspot/upsertObject/hubspot-api.d.ts +0 -221
  71. package/dist/destinations/hubspot/upsertObject/hubspot-api.js +0 -617
  72. package/dist/destinations/hubspot/upsertObject/hubspot-api.js.map +0 -1
@@ -0,0 +1,548 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProperties = exports.saveSchemaToCache = exports.compareToHubspot = exports.sendAssociations = exports.sendAssociatedRecords = exports.createAssociationPayloads = exports.sendFromRecords = exports.compareToCache = exports.objectSchema = exports.validate = void 0;
4
+ const actions_core_1 = require("@segment/actions-core");
5
+ const constants_1 = require("./constants");
6
+ const types_1 = require("./types");
7
+ function validate(payloads) {
8
+ const length = payloads.length;
9
+ const cleaned = payloads.filter((payload) => {
10
+ const fieldsToCheck = [
11
+ payload.object_details.id_field_name,
12
+ payload.object_details.id_field_value,
13
+ payload.object_details.object_type
14
+ ];
15
+ return fieldsToCheck.every((field) => field !== null && field !== '');
16
+ });
17
+ if (length === 1 && cleaned.length === 0) {
18
+ throw new actions_core_1.PayloadValidationError('Payload is missing required fields. Null or empty values are not allowed for "Object Type", "ID Field Name" or "ID Field Value".');
19
+ }
20
+ cleaned.forEach((payload) => {
21
+ payload.properties = cleanPropObj(payload.properties);
22
+ payload.sensitive_properties = cleanPropObj(payload.sensitive_properties);
23
+ payload.associations = payload.associations?.filter((association) => {
24
+ const fieldsToCheck = [
25
+ association.id_field_name,
26
+ association.object_type,
27
+ association.id_field_value,
28
+ association.association_label
29
+ ];
30
+ return fieldsToCheck.every((field) => field !== null && field !== '');
31
+ });
32
+ });
33
+ return cleaned;
34
+ }
35
+ exports.validate = validate;
36
+ function cleanPropObj(obj) {
37
+ const cleanObj = {};
38
+ if (obj === undefined) {
39
+ return undefined;
40
+ }
41
+ Object.keys(obj).forEach((key) => {
42
+ const value = obj[key];
43
+ const cleanKey = cleanProp(key);
44
+ if (typeof value === 'boolean' || typeof value === 'number') {
45
+ cleanObj[cleanKey] = value;
46
+ }
47
+ else if (typeof value === 'string' && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {
48
+ cleanObj[cleanKey] = value.toLowerCase() === 'true';
49
+ }
50
+ else if (!isNaN(Number(value))) {
51
+ cleanObj[cleanKey] = Number(value);
52
+ }
53
+ else if (typeof value === 'object' && value !== null) {
54
+ cleanObj[cleanKey] = JSON.stringify(value);
55
+ }
56
+ else {
57
+ cleanObj[cleanKey] = String(value);
58
+ }
59
+ });
60
+ return cleanObj;
61
+ }
62
+ function cleanProp(str) {
63
+ str = str.toLowerCase().replace(/[^a-z0-9_]/g, '_');
64
+ if (!/^[a-z]/.test(str)) {
65
+ throw new actions_core_1.PayloadValidationError(`Property ${str} in event has an invalid name. Property names must start with a letter.`);
66
+ }
67
+ return str;
68
+ }
69
+ function objectSchema(payloads, objectType) {
70
+ const extractProperties = (propertyType) => {
71
+ return Object.values(payloads.reduce((acc, payload) => {
72
+ const properties = payload[propertyType];
73
+ if (properties) {
74
+ Object.entries(properties).forEach(([propName, value]) => {
75
+ const typeData = format(value);
76
+ acc[propName] = {
77
+ name: propName,
78
+ type: typeData.type,
79
+ fieldType: typeData.fieldType,
80
+ typeFieldType: formatHS(typeData.type, typeData.fieldType)
81
+ };
82
+ });
83
+ }
84
+ return acc;
85
+ }, {}));
86
+ };
87
+ const properties = extractProperties('properties');
88
+ const sensitiveProperties = extractProperties('sensitive_properties');
89
+ return {
90
+ object_details: {
91
+ object_type: objectType,
92
+ id_field_name: payloads[0].object_details.id_field_name
93
+ },
94
+ properties,
95
+ sensitiveProperties
96
+ };
97
+ }
98
+ exports.objectSchema = objectSchema;
99
+ function format(value) {
100
+ switch (typeof value) {
101
+ case 'object':
102
+ return { type: types_1.HSPropType.String, fieldType: types_1.HSPropFieldType.Text };
103
+ case 'number':
104
+ return { type: types_1.HSPropType.Number, fieldType: types_1.HSPropFieldType.Number };
105
+ case 'boolean':
106
+ return { type: types_1.HSPropType.Enumeration, fieldType: types_1.HSPropFieldType.BooleanCheckbox };
107
+ case 'string': {
108
+ const isoDateTimeRegex = /^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])(?:([ T])(\d{2}):?(\d{2})(?::?(\d{2})(?:[,\.](\d{1,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?)?)?$/;
109
+ const dateOnlyRegex = /^\d{4}-\d{2}-\d{2}$/;
110
+ if (isoDateTimeRegex.test(value)) {
111
+ return {
112
+ type: dateOnlyRegex.test(value) ? types_1.HSPropType.Date : types_1.HSPropType.DateTime,
113
+ fieldType: types_1.HSPropFieldType.Date
114
+ };
115
+ }
116
+ else {
117
+ return { type: types_1.HSPropType.String, fieldType: types_1.HSPropFieldType.Text };
118
+ }
119
+ }
120
+ case undefined:
121
+ default:
122
+ throw new actions_core_1.IntegrationError('Property must be an object, boolean, string or number', 'HUBSPOT_PROPERTY_VALUE_UNDEFINED', 400);
123
+ }
124
+ }
125
+ function formatHS(type, fieldType) {
126
+ if (type === 'date' && fieldType === 'date') {
127
+ return types_1.HSPropTypeFieldType.DateDate;
128
+ }
129
+ else if (type === 'string' && fieldType === 'text') {
130
+ return types_1.HSPropTypeFieldType.StringText;
131
+ }
132
+ else if (type === 'number' && fieldType === 'number') {
133
+ return types_1.HSPropTypeFieldType.NumberNumber;
134
+ }
135
+ else if (type === 'datetime' && fieldType === 'date') {
136
+ return types_1.HSPropTypeFieldType.DateTimeDate;
137
+ }
138
+ else if (type === 'enumeration' && fieldType === 'booleancheckbox') {
139
+ return types_1.HSPropTypeFieldType.EnumerationBooleanCheckbox;
140
+ }
141
+ throw new actions_core_1.IntegrationError('Property type not supported', 'HUBSPOT_PROPERTY_TYPE_NOT_SUPPORTED', 400);
142
+ }
143
+ async function compareToCache(schema) {
144
+ const schemaDiff = {
145
+ match: 'no_match',
146
+ object_details: {
147
+ object_type: schema.object_details.object_type,
148
+ id_field_name: schema.object_details.id_field_name
149
+ },
150
+ missingProperties: [],
151
+ missingSensitiveProperties: []
152
+ };
153
+ return Promise.resolve(schemaDiff);
154
+ }
155
+ exports.compareToCache = compareToCache;
156
+ async function sendFromRecords(client, payloads, objectType, syncMode) {
157
+ switch (syncMode) {
158
+ case types_1.SyncMode.Upsert: {
159
+ return await upsertRecords(client, payloads, objectType);
160
+ }
161
+ case types_1.SyncMode.Update: {
162
+ return await updateRecords(client, payloads, objectType);
163
+ }
164
+ case types_1.SyncMode.Add: {
165
+ return await addRecords(client, payloads, objectType);
166
+ }
167
+ }
168
+ }
169
+ exports.sendFromRecords = sendFromRecords;
170
+ async function upsertRecords(client, payloads, objectType) {
171
+ const response = await client.batchObjectRequest(types_1.BatchRequestType.Upsert, objectType, {
172
+ inputs: payloads.map(({ object_details: { id_field_value }, properties, sensitive_properties }) => {
173
+ const idFieldName = payloads[0].object_details.id_field_name;
174
+ return {
175
+ idProperty: idFieldName,
176
+ id: id_field_value,
177
+ properties: { ...properties, ...sensitive_properties, [idFieldName]: id_field_value }
178
+ };
179
+ })
180
+ });
181
+ return returnRecordsWithIds(payloads, response);
182
+ }
183
+ async function updateRecords(client, payloads, objectType) {
184
+ const existingRecords = (await readRecords(client, payloads, objectType, types_1.ReadType.ReturnRecordsWithIds));
185
+ const response = await client.batchObjectRequest(types_1.BatchRequestType.Update, objectType, {
186
+ inputs: existingRecords.map(({ object_details: { id_field_value }, properties, sensitive_properties }) => {
187
+ const idFieldName = payloads[0].object_details.id_field_name;
188
+ return {
189
+ idProperty: idFieldName,
190
+ id: id_field_value,
191
+ properties: { ...properties, ...sensitive_properties }
192
+ };
193
+ })
194
+ });
195
+ return returnRecordsWithIds(existingRecords, response);
196
+ }
197
+ async function addRecords(client, payloads, objectType) {
198
+ const recordsToCreate = (await readRecords(client, payloads, objectType, types_1.ReadType.ReturnRecordsWithoutIds));
199
+ const response = await client.batchObjectRequest(types_1.BatchRequestType.Create, objectType, {
200
+ inputs: recordsToCreate.map(({ object_details: { id_field_value: fromIdFieldValue }, properties, sensitive_properties }) => {
201
+ const idFieldName = payloads[0].object_details.id_field_name;
202
+ return {
203
+ idProperty: idFieldName,
204
+ properties: { ...properties, ...sensitive_properties, [idFieldName]: fromIdFieldValue }
205
+ };
206
+ })
207
+ });
208
+ return returnRecordsWithIds(recordsToCreate, response);
209
+ }
210
+ async function readRecords(client, payloads, objectType, readType) {
211
+ const idFieldName = payloads[0].object_details.id_field_name;
212
+ const readResponse = await client.batchObjectRequest(types_1.BatchRequestType.Read, objectType, {
213
+ properties: [idFieldName],
214
+ idProperty: idFieldName,
215
+ inputs: payloads.map((payload) => {
216
+ return { id: payload.object_details.id_field_value };
217
+ })
218
+ });
219
+ switch (readType) {
220
+ case types_1.ReadType.ReturnRecordsWithIds:
221
+ return returnRecordsWithIds(payloads, readResponse);
222
+ case types_1.ReadType.ReturnRecordsWithoutIds:
223
+ return returnRecordsWithoutIds(payloads, readResponse);
224
+ }
225
+ }
226
+ function returnRecordsWithIds(payloads, response) {
227
+ response?.data?.results.forEach((result) => {
228
+ payloads
229
+ .filter((p) => {
230
+ return p.object_details.id_field_value == result.properties[p.object_details.id_field_name];
231
+ })
232
+ .forEach((p) => {
233
+ const pw = { ...p, object_details: { ...p.object_details, record_id: result.id } };
234
+ if (pw.associations) {
235
+ pw.associations.forEach((association) => {
236
+ association.from_record_id = result.id;
237
+ });
238
+ }
239
+ });
240
+ });
241
+ return payloads;
242
+ }
243
+ function returnRecordsWithoutIds(payloads, response) {
244
+ const missingRecords = payloads.filter((payload) => {
245
+ return !response.data.results.some((result) => {
246
+ return result.properties[payload.object_details.id_field_name] === payload.object_details.id_field_value;
247
+ });
248
+ });
249
+ return missingRecords;
250
+ }
251
+ function createAssociationPayloads(payloads) {
252
+ const associationPayloads = payloads.flatMap((payload) => Array.isArray(payload.associations)
253
+ ? payload.associations.map((association) => ({
254
+ object_details: {
255
+ object_type: association.object_type,
256
+ id_field_name: association.id_field_name,
257
+ id_field_value: association.id_field_value,
258
+ from_record_id: association.from_record_id
259
+ },
260
+ association_details: {
261
+ association_label: association.association_label
262
+ }
263
+ }))
264
+ : []);
265
+ return groupPayloads(associationPayloads, ['object_type', 'id_field_name']);
266
+ }
267
+ exports.createAssociationPayloads = createAssociationPayloads;
268
+ function groupPayloads(associations, groupBy) {
269
+ const groupedPayloads = [];
270
+ const groups = associations.reduce((acc, payload) => {
271
+ const key = groupBy.map((prop) => payload.object_details[prop]).join('_');
272
+ if (!acc[key]) {
273
+ acc[key] = [];
274
+ }
275
+ acc[key].push(payload);
276
+ return acc;
277
+ }, {});
278
+ for (const key in groups) {
279
+ const items = groups[key];
280
+ for (let i = 0; i < items.length; i += constants_1.MAX_HUBSPOT_BATCH_SIZE) {
281
+ groupedPayloads.push(items.slice(i, i + constants_1.MAX_HUBSPOT_BATCH_SIZE));
282
+ }
283
+ }
284
+ return groupedPayloads;
285
+ }
286
+ async function sendAssociatedRecords(client, payloads, associationSyncMode) {
287
+ switch (associationSyncMode) {
288
+ case types_1.AssociationSyncMode.Upsert: {
289
+ return await upsertAssociatedRecords(client, payloads);
290
+ }
291
+ case types_1.AssociationSyncMode.Read: {
292
+ return await readAssociatedRecords(client, payloads);
293
+ }
294
+ }
295
+ }
296
+ exports.sendAssociatedRecords = sendAssociatedRecords;
297
+ async function readAssociatedRecords(client, groupedPayloads) {
298
+ const requests = groupedPayloads.map(async (payloads) => {
299
+ const { object_type: objectType } = payloads[0].object_details;
300
+ return await client.batchObjectRequest(types_1.AssociationSyncMode.Read, objectType, {
301
+ idProperty: payloads[0].object_details.id_field_name,
302
+ properties: [payloads[0].object_details.id_field_name],
303
+ inputs: payloads.map((payload) => {
304
+ return {
305
+ id: payload.object_details.id_field_value
306
+ };
307
+ })
308
+ });
309
+ });
310
+ const responses = await Promise.all(requests);
311
+ return returnAssociatedRecordsWithIds(groupedPayloads, responses);
312
+ }
313
+ async function upsertAssociatedRecords(client, groupedPayloads) {
314
+ const requests = groupedPayloads.map(async (payloads) => {
315
+ const { object_type: objectType } = payloads[0].object_details;
316
+ return await client.batchObjectRequest(types_1.AssociationSyncMode.Upsert, objectType, {
317
+ inputs: payloads.map((payload) => {
318
+ return {
319
+ idProperty: payload.object_details.id_field_name,
320
+ id: payload.object_details.id_field_value,
321
+ properties: {
322
+ [payload.object_details.id_field_name]: payload.object_details.id_field_value
323
+ }
324
+ };
325
+ })
326
+ });
327
+ });
328
+ const responses = await Promise.all(requests);
329
+ return returnAssociatedRecordsWithIds(groupedPayloads, responses);
330
+ }
331
+ function returnAssociatedRecordsWithIds(groupedPayloads, responses) {
332
+ responses.forEach((response, index) => {
333
+ const payloads = groupedPayloads[index];
334
+ response?.data?.results.forEach((result) => {
335
+ payloads
336
+ .filter((payload) => payload.object_details.id_field_value == result.properties[payload.object_details.id_field_name])
337
+ .forEach((payload) => (payload.object_details.record_id = result.id));
338
+ });
339
+ });
340
+ return groupedPayloads
341
+ .flat()
342
+ .filter((payload) => payload.object_details.record_id);
343
+ }
344
+ async function sendAssociations(client, payloads) {
345
+ const groupedPayloads = groupPayloads(payloads, [
346
+ 'object_type'
347
+ ]);
348
+ const requests = groupedPayloads.map(async (payloads) => {
349
+ const toObjectType = payloads[0].object_details.object_type;
350
+ const inputs = payloads.map((payload) => {
351
+ const { associationCategory, associationTypeId } = getAssociationType(payload.association_details.association_label);
352
+ const input = {
353
+ types: [
354
+ {
355
+ associationCategory,
356
+ associationTypeId
357
+ }
358
+ ],
359
+ from: {
360
+ id: payload.object_details.from_record_id
361
+ },
362
+ to: {
363
+ id: payload.object_details.record_id
364
+ }
365
+ };
366
+ return input;
367
+ });
368
+ return client.batchAssociationsRequest({ inputs }, toObjectType);
369
+ });
370
+ await Promise.all(requests);
371
+ }
372
+ exports.sendAssociations = sendAssociations;
373
+ function getAssociationType(associationLabel) {
374
+ const [associationCategory, associationTypeId] = associationLabel.split(':');
375
+ return { associationCategory, associationTypeId };
376
+ }
377
+ async function compareToHubspot(client, schema) {
378
+ const requests = [];
379
+ const hasProps = schema.properties.length;
380
+ const hasSensitiveProps = schema.sensitiveProperties.length;
381
+ if (hasProps) {
382
+ requests.push(client.readProperties(false));
383
+ }
384
+ if (hasSensitiveProps) {
385
+ requests.push(client.readProperties(true));
386
+ }
387
+ const responses = await Promise.allSettled(requests);
388
+ const schemaDiff = {
389
+ object_details: {
390
+ object_type: schema.object_details.object_type,
391
+ id_field_name: schema.object_details.id_field_name
392
+ }
393
+ };
394
+ if (hasProps && requests.length > 0) {
395
+ const response = responses.shift();
396
+ const { missingProps, match } = determineMissingPropsAndMatchType(response, schema.properties);
397
+ schemaDiff.missingProperties = missingProps;
398
+ schemaDiff.match = match;
399
+ }
400
+ if (hasSensitiveProps && requests.length > 0) {
401
+ const response = responses.shift();
402
+ const { missingProps, match } = determineMissingPropsAndMatchType(response, schema.sensitiveProperties);
403
+ schemaDiff.missingSensitiveProperties = missingProps;
404
+ if (schemaDiff.match === types_1.SchemaMatch.NoMatch && schemaDiff.match !== types_1.SchemaMatch.NoMatch) {
405
+ throw new actions_core_1.IntegrationError('Unable to fetch property data from Hubspot', 'HUBSPOT_PROPERTIES_ERROR', 400);
406
+ }
407
+ if (schemaDiff.match === types_1.SchemaMatch.FullMatch) {
408
+ schemaDiff.match = match;
409
+ }
410
+ }
411
+ return schemaDiff;
412
+ }
413
+ exports.compareToHubspot = compareToHubspot;
414
+ function determineMissingPropsAndMatchType(response, properties) {
415
+ switch (response.status) {
416
+ case 'fulfilled': {
417
+ const results = response.value?.data.results ?? [];
418
+ const missingProps = [];
419
+ properties.forEach((prop) => {
420
+ const match = results.find((item) => {
421
+ return item.name === prop.name;
422
+ });
423
+ checkForIncompatiblePropTypes(prop, match);
424
+ if (!match) {
425
+ missingProps.push({
426
+ name: prop.name,
427
+ type: prop.type,
428
+ fieldType: prop.fieldType,
429
+ typeFieldType: prop.typeFieldType
430
+ });
431
+ }
432
+ });
433
+ return {
434
+ missingProps,
435
+ match: missingProps.length === 0 ? types_1.SchemaMatch.FullMatch : types_1.SchemaMatch.PropertiesMissing
436
+ };
437
+ }
438
+ case 'rejected': {
439
+ if (response.reason?.message.startsWith(constants_1.OBJECT_NOT_FOUND_ERROR_RESPONSE)) {
440
+ return { missingProps: [], match: types_1.SchemaMatch.NoMatch };
441
+ }
442
+ else {
443
+ throw new actions_core_1.IntegrationError(`Error fetching Hubspot property data: ${response.reason?.message}`, 'HUBSPOT_PROPERTY_FETCH_ERROR', 400);
444
+ }
445
+ }
446
+ }
447
+ }
448
+ function checkForIncompatiblePropTypes(prop, hubspotProp) {
449
+ if (!hubspotProp) {
450
+ return;
451
+ }
452
+ if (hubspotProp.fieldType === prop.fieldType && hubspotProp.type === prop.type) {
453
+ return;
454
+ }
455
+ if (hubspotProp.fieldType === 'select' &&
456
+ hubspotProp.type === 'enumeration' &&
457
+ prop.fieldType === 'text' &&
458
+ prop.type === 'string') {
459
+ return;
460
+ }
461
+ throw new actions_core_1.IntegrationError(`Payload property with name ${prop.name} has a different type to the property in HubSpot. Expected: type = ${prop.type} fieldType = ${prop.fieldType}. Received: type = ${hubspotProp.type} fieldType = ${hubspotProp.fieldType}`, 'HUBSPOT_PROPERTY_TYPE_MISMATCH', 400);
462
+ }
463
+ async function saveSchemaToCache(_schema) {
464
+ }
465
+ exports.saveSchemaToCache = saveSchemaToCache;
466
+ async function createProperties(client, schemaDiff, propertyGroup) {
467
+ if (!propertyGroup) {
468
+ throw new actions_core_1.PayloadValidationError('"Property Group" is a required field when creating properties on an Object Schema in Hubspot');
469
+ }
470
+ if (schemaDiff.missingProperties.length === 0 && schemaDiff.missingSensitiveProperties.length === 0) {
471
+ return;
472
+ }
473
+ const { missingProperties: props, missingSensitiveProperties: sensitiveProps } = schemaDiff;
474
+ const input = (prop, sensitive) => {
475
+ switch (prop.typeFieldType) {
476
+ case types_1.HSPropTypeFieldType.NumberNumber:
477
+ return {
478
+ name: prop.name,
479
+ label: prop.name,
480
+ groupName: propertyGroup,
481
+ type: 'number',
482
+ dataSensitivity: sensitive === true ? 'sensitive' : undefined,
483
+ fieldType: 'number'
484
+ };
485
+ case types_1.HSPropTypeFieldType.StringText:
486
+ return {
487
+ name: prop.name,
488
+ label: prop.name,
489
+ groupName: propertyGroup,
490
+ type: 'string',
491
+ dataSensitivity: sensitive === true ? 'sensitive' : undefined,
492
+ fieldType: 'text'
493
+ };
494
+ case types_1.HSPropTypeFieldType.EnumerationBooleanCheckbox:
495
+ return {
496
+ name: prop.name,
497
+ label: prop.name,
498
+ groupName: propertyGroup,
499
+ type: 'enumeration',
500
+ dataSensitivity: sensitive === true ? 'sensitive' : undefined,
501
+ fieldType: 'booleancheckbox',
502
+ options: [
503
+ {
504
+ label: 'true',
505
+ value: 'true',
506
+ hidden: false,
507
+ description: 'True',
508
+ displayOrder: 1
509
+ },
510
+ {
511
+ label: 'false',
512
+ value: 'false',
513
+ hidden: false,
514
+ description: 'False',
515
+ displayOrder: 2
516
+ }
517
+ ]
518
+ };
519
+ case types_1.HSPropTypeFieldType.DateTimeDate:
520
+ return {
521
+ name: prop.name,
522
+ label: prop.name,
523
+ groupName: propertyGroup,
524
+ type: 'datetime',
525
+ dataSensitivity: sensitive === true ? 'sensitive' : undefined,
526
+ fieldType: 'date'
527
+ };
528
+ case types_1.HSPropTypeFieldType.DateDate:
529
+ return {
530
+ name: prop.name,
531
+ label: prop.name,
532
+ groupName: propertyGroup,
533
+ type: 'date',
534
+ dataSensitivity: sensitive === true ? 'sensitive' : undefined,
535
+ fieldType: 'date'
536
+ };
537
+ }
538
+ };
539
+ const json = {
540
+ inputs: [
541
+ ...(props ? props.map((p) => input(p, false)) : []),
542
+ ...(sensitiveProps ? sensitiveProps.map((p) => input(p, true)) : [])
543
+ ]
544
+ };
545
+ await client.createPropertiesDefinition(json);
546
+ }
547
+ exports.createProperties = createProperties;
548
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/destinations/hubspot/upsertObject/utils.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,6 @@ export interface Payload {
6
6
  };
7
7
  phoneNumber?: string | null;
8
8
  mergeNestedObjects?: boolean;
9
+ enable_batching?: boolean;
10
+ batch_size?: number;
9
11
  }
@@ -3,6 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const actions_core_1 = require("@segment/actions-core");
4
4
  const shared_fields_1 = require("../shared-fields");
5
5
  const utils_1 = require("../utils");
6
+ const transformIterableUserPayload = (payload) => {
7
+ const phoneNumber = payload.phoneNumber;
8
+ delete payload.phoneNumber;
9
+ const formattedDataFields = utils_1.convertDatesInObject(payload.dataFields ?? {});
10
+ const userUpdateRequest = {
11
+ ...payload,
12
+ dataFields: {
13
+ ...formattedDataFields,
14
+ phoneNumber: phoneNumber
15
+ }
16
+ };
17
+ return userUpdateRequest;
18
+ };
6
19
  const action = {
7
20
  title: 'Upsert User',
8
21
  description: 'Creates or updates a user',
@@ -23,27 +36,43 @@ const action = {
23
36
  },
24
37
  mergeNestedObjects: {
25
38
  ...shared_fields_1.MERGE_NESTED_OBJECTS_FIELD
39
+ },
40
+ enable_batching: {
41
+ label: 'Enable Batching',
42
+ description: 'When enabled, Segment will send data to Iterable in batches of up to 500',
43
+ type: 'boolean',
44
+ required: false,
45
+ default: false
46
+ },
47
+ batch_size: {
48
+ label: 'Batch Size',
49
+ description: 'Maximum number of events to include in each batch. Actual batch sizes may be lower.',
50
+ type: 'number',
51
+ unsafe_hidden: true,
52
+ required: false,
53
+ default: 500
26
54
  }
27
55
  },
28
56
  perform: (request, { payload, settings }) => {
29
- const { email, userId, dataFields } = payload;
30
- if (!email && !userId) {
57
+ if (!payload.email && !payload.userId) {
31
58
  throw new actions_core_1.PayloadValidationError('Must include email or userId.');
32
59
  }
33
- const phoneNumber = payload.phoneNumber;
34
- delete payload.phoneNumber;
35
- const formattedDataFields = utils_1.convertDatesInObject(dataFields ?? {});
36
- const userUpdateRequest = {
37
- ...payload,
38
- dataFields: {
39
- ...formattedDataFields,
40
- phoneNumber: phoneNumber
41
- }
42
- };
60
+ const updateUserRequestPayload = transformIterableUserPayload(payload);
43
61
  const endpoint = utils_1.getRegionalEndpoint('updateUser', settings.dataCenterLocation);
44
62
  return request(endpoint, {
45
63
  method: 'post',
46
- json: userUpdateRequest,
64
+ json: updateUserRequestPayload,
65
+ timeout: Math.max(30000, actions_core_1.DEFAULT_REQUEST_TIMEOUT)
66
+ });
67
+ },
68
+ performBatch: (request, { settings, payload }) => {
69
+ const bulkUpdateUserRequestPayload = {
70
+ users: payload.map(transformIterableUserPayload)
71
+ };
72
+ const endpoint = utils_1.getRegionalEndpoint('bulkUpdateUser', settings.dataCenterLocation);
73
+ return request(endpoint, {
74
+ method: 'post',
75
+ json: bulkUpdateUserRequestPayload,
47
76
  timeout: Math.max(30000, actions_core_1.DEFAULT_REQUEST_TIMEOUT)
48
77
  });
49
78
  }