@segment/action-destinations 3.254.0-staging.0 → 3.255.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 (110) hide show
  1. package/dist/destinations/display-video-360/constants.d.ts +1 -0
  2. package/dist/destinations/display-video-360/constants.js +2 -1
  3. package/dist/destinations/display-video-360/constants.js.map +1 -1
  4. package/dist/destinations/display-video-360/errors.js +6 -1
  5. package/dist/destinations/display-video-360/errors.js.map +1 -1
  6. package/dist/destinations/display-video-360/index.js +4 -26
  7. package/dist/destinations/display-video-360/index.js.map +1 -1
  8. package/dist/destinations/display-video-360/shared.d.ts +3 -7
  9. package/dist/destinations/display-video-360/shared.js +5 -14
  10. package/dist/destinations/display-video-360/shared.js.map +1 -1
  11. package/dist/destinations/engage/sendgrid/sendEmail/SendEmailPerformer.js +39 -2
  12. package/dist/destinations/engage/sendgrid/sendEmail/SendEmailPerformer.js.map +1 -1
  13. package/dist/destinations/hubspot/upsertCustomObjectRecord/index.js +2 -2
  14. package/dist/destinations/hubspot/upsertCustomObjectRecord/index.js.map +1 -1
  15. package/dist/destinations/kafka/generated-types.d.ts +10 -5
  16. package/dist/destinations/kafka/index.js +66 -39
  17. package/dist/destinations/kafka/index.js.map +1 -1
  18. package/dist/destinations/kafka/utils.d.ts +0 -1
  19. package/dist/destinations/kafka/utils.js +73 -23
  20. package/dist/destinations/kafka/utils.js.map +1 -1
  21. package/dist/destinations/klaviyo/properties.js +1 -1
  22. package/dist/destinations/linkedin-conversions/api/index.js +8 -8
  23. package/dist/destinations/linkedin-conversions/api/index.js.map +1 -1
  24. package/dist/destinations/linkedin-conversions/streamConversion/index.js +6 -1
  25. package/dist/destinations/linkedin-conversions/streamConversion/index.js.map +1 -1
  26. package/dist/destinations/marketo-static-lists/addToList/generated-types.d.ts +4 -13
  27. package/dist/destinations/marketo-static-lists/addToList/index.js +2 -69
  28. package/dist/destinations/marketo-static-lists/addToList/index.js.map +1 -1
  29. package/dist/destinations/marketo-static-lists/constants.d.ts +3 -10
  30. package/dist/destinations/marketo-static-lists/constants.js +14 -2
  31. package/dist/destinations/marketo-static-lists/constants.js.map +1 -1
  32. package/dist/destinations/marketo-static-lists/functions.d.ts +1 -18
  33. package/dist/destinations/marketo-static-lists/functions.js +1 -88
  34. package/dist/destinations/marketo-static-lists/functions.js.map +1 -1
  35. package/dist/destinations/marketo-static-lists/index.js +42 -4
  36. package/dist/destinations/marketo-static-lists/index.js.map +1 -1
  37. package/dist/destinations/marketo-static-lists/properties.js +39 -2
  38. package/dist/destinations/marketo-static-lists/properties.js.map +1 -1
  39. package/dist/destinations/marketo-static-lists/removeFromList/generated-types.d.ts +1 -1
  40. package/dist/destinations/responsys/index.js +4 -2
  41. package/dist/destinations/responsys/index.js.map +1 -1
  42. package/dist/destinations/responsys/sendAudience/generated-types.d.ts +1 -0
  43. package/dist/destinations/responsys/sendAudience/index.js +19 -2
  44. package/dist/destinations/responsys/sendAudience/index.js.map +1 -1
  45. package/dist/destinations/responsys/sendCustomTraits/generated-types.d.ts +1 -0
  46. package/dist/destinations/responsys/sendCustomTraits/index.js +19 -2
  47. package/dist/destinations/responsys/sendCustomTraits/index.js.map +1 -1
  48. package/dist/destinations/responsys/utils.d.ts +2 -1
  49. package/dist/destinations/responsys/utils.js +8 -7
  50. package/dist/destinations/responsys/utils.js.map +1 -1
  51. package/dist/destinations/segment-profiles/index.js +3 -1
  52. package/dist/destinations/segment-profiles/index.js.map +1 -1
  53. package/dist/destinations/segment-profiles/segment-properties.d.ts +2 -0
  54. package/dist/destinations/segment-profiles/segment-properties.js +14 -1
  55. package/dist/destinations/segment-profiles/segment-properties.js.map +1 -1
  56. package/dist/destinations/segment-profiles/sendTrack/generated-types.d.ts +1 -0
  57. package/dist/destinations/segment-profiles/sendTrack/index.js +9 -3
  58. package/dist/destinations/segment-profiles/sendTrack/index.js.map +1 -1
  59. package/dist/destinations/snap-conversions-api/_tests_/index.test.js +569 -4
  60. package/dist/destinations/snap-conversions-api/_tests_/index.test.js.map +1 -1
  61. package/dist/destinations/snap-conversions-api/reportConversionEvent/index.js +1 -26
  62. package/dist/destinations/snap-conversions-api/reportConversionEvent/index.js.map +1 -1
  63. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v3.d.ts +2 -2
  64. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v3.js +4 -5
  65. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v3.js.map +1 -1
  66. package/dist/destinations/snap-conversions-api/reportConversionEvent/utils.d.ts +0 -2
  67. package/dist/destinations/snap-conversions-api/reportConversionEvent/utils.js +2 -11
  68. package/dist/destinations/snap-conversions-api/reportConversionEvent/utils.js.map +1 -1
  69. package/dist/destinations/yotpo/index.js +1 -1
  70. package/dist/destinations/yotpo/index.js.map +1 -1
  71. package/package.json +4 -4
  72. package/dist/destinations/engage/sendgrid/Profile.d.ts +0 -6
  73. package/dist/destinations/engage/sendgrid/Profile.js +0 -3
  74. package/dist/destinations/engage/sendgrid/Profile.js.map +0 -1
  75. package/dist/destinations/engage/sendgrid/previewApiLookup/api-lookups.d.ts +0 -21
  76. package/dist/destinations/engage/sendgrid/previewApiLookup/api-lookups.js +0 -174
  77. package/dist/destinations/engage/sendgrid/previewApiLookup/api-lookups.js.map +0 -1
  78. package/dist/destinations/mixpanel/utils.d.ts +0 -13
  79. package/dist/destinations/mixpanel/utils.js +0 -117
  80. package/dist/destinations/mixpanel/utils.js.map +0 -1
  81. package/dist/destinations/responsys/asyncMergePetRecords/generated-types.d.ts +0 -14
  82. package/dist/destinations/responsys/asyncMergePetRecords/generated-types.js +0 -3
  83. package/dist/destinations/responsys/asyncMergePetRecords/generated-types.js.map +0 -1
  84. package/dist/destinations/responsys/asyncMergePetRecords/index.d.ts +0 -5
  85. package/dist/destinations/responsys/asyncMergePetRecords/index.js +0 -113
  86. package/dist/destinations/responsys/asyncMergePetRecords/index.js.map +0 -1
  87. package/dist/destinations/responsys/asyncMergeProfileListMembers/generated-types.d.ts +0 -20
  88. package/dist/destinations/responsys/asyncMergeProfileListMembers/generated-types.js +0 -3
  89. package/dist/destinations/responsys/asyncMergeProfileListMembers/generated-types.js.map +0 -1
  90. package/dist/destinations/responsys/asyncMergeProfileListMembers/index.d.ts +0 -5
  91. package/dist/destinations/responsys/asyncMergeProfileListMembers/index.js +0 -174
  92. package/dist/destinations/responsys/asyncMergeProfileListMembers/index.js.map +0 -1
  93. package/dist/destinations/responsys/rsp-operations.d.ts +0 -14
  94. package/dist/destinations/responsys/rsp-operations.js +0 -33
  95. package/dist/destinations/responsys/rsp-operations.js.map +0 -1
  96. package/dist/destinations/responsys/rsp-properties.d.ts +0 -4
  97. package/dist/destinations/responsys/rsp-properties.js +0 -27
  98. package/dist/destinations/responsys/rsp-properties.js.map +0 -1
  99. package/dist/destinations/snap-conversions-api/_tests_/capiV2tests.d.ts +0 -1
  100. package/dist/destinations/snap-conversions-api/_tests_/capiV2tests.js +0 -381
  101. package/dist/destinations/snap-conversions-api/_tests_/capiV2tests.js.map +0 -1
  102. package/dist/destinations/snap-conversions-api/_tests_/capiV3tests.d.ts +0 -1
  103. package/dist/destinations/snap-conversions-api/_tests_/capiV3tests.js +0 -581
  104. package/dist/destinations/snap-conversions-api/_tests_/capiV3tests.js.map +0 -1
  105. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v2.d.ts +0 -4
  106. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v2.js +0 -97
  107. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v2.js.map +0 -1
  108. package/dist/destinations/tiktok-offline-conversions/reportOfflineEvent/formatter.d.ts +0 -3
  109. package/dist/destinations/tiktok-offline-conversions/reportOfflineEvent/formatter.js +0 -43
  110. package/dist/destinations/tiktok-offline-conversions/reportOfflineEvent/formatter.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.timestamp = exports.engage_space = exports.traits = exports.group_id = exports.anonymous_id = exports.user_id = void 0;
3
+ exports.properties = exports.event_name = exports.timestamp = exports.engage_space = exports.traits = exports.group_id = exports.anonymous_id = exports.user_id = void 0;
4
4
  exports.user_id = {
5
5
  label: 'User ID',
6
6
  description: 'Unique identifier for the user in your database. A userId or an anonymousId is required.',
@@ -38,4 +38,17 @@ exports.timestamp = {
38
38
  '@path': '$.timestamp'
39
39
  }
40
40
  };
41
+ exports.event_name = {
42
+ label: 'Event Name',
43
+ description: 'Name of the action that a user has performed.',
44
+ type: 'string',
45
+ required: true
46
+ };
47
+ exports.properties = {
48
+ label: 'Properties',
49
+ description: 'Free-form dictionary of properties that describe the event.',
50
+ type: 'object',
51
+ defaultObjectUI: 'keyvalue',
52
+ additionalProperties: true
53
+ };
41
54
  //# sourceMappingURL=segment-properties.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"segment-properties.js","sourceRoot":"","sources":["../../../src/destinations/segment-profiles/segment-properties.ts"],"names":[],"mappings":";;;AAEa,QAAA,OAAO,GAAe;IACjC,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,0FAA0F;IACvG,IAAI,EAAE,QAAQ;CACf,CAAA;AAEY,QAAA,YAAY,GAAe;IACtC,KAAK,EAAE,cAAc;IACrB,WAAW,EACT,kJAAkJ;IACpJ,IAAI,EAAE,QAAQ;CACf,CAAA;AAEY,QAAA,QAAQ,GAAe;IAClC,KAAK,EAAE,UAAU;IACjB,WAAW,EAAE,oDAAoD;IACjE,IAAI,EAAE,QAAQ;CACf,CAAA;AAEY,QAAA,MAAM,GAAe;IAChC,KAAK,EAAE,QAAQ;IACf,WAAW,EAAE,0EAA0E;IACvF,IAAI,EAAE,QAAQ;IACd,eAAe,EAAE,UAAU;IAC3B,oBAAoB,EAAE,IAAI;CAC3B,CAAA;AAEY,QAAA,YAAY,GAAe;IACtC,KAAK,EAAE,eAAe;IACtB,WAAW,EACT,sSAAsS;IACxS,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;CACd,CAAA;AAEY,QAAA,SAAS,GAAe;IACnC,KAAK,EAAE,WAAW;IAClB,WAAW,EAAE,6BAA6B;IAC1C,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE;QACP,OAAO,EAAE,aAAa;KACvB;CACF,CAAA"}
1
+ {"version":3,"file":"segment-properties.js","sourceRoot":"","sources":["../../../src/destinations/segment-profiles/segment-properties.ts"],"names":[],"mappings":";;;AAEa,QAAA,OAAO,GAAe;IACjC,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,0FAA0F;IACvG,IAAI,EAAE,QAAQ;CACf,CAAA;AAEY,QAAA,YAAY,GAAe;IACtC,KAAK,EAAE,cAAc;IACrB,WAAW,EACT,kJAAkJ;IACpJ,IAAI,EAAE,QAAQ;CACf,CAAA;AAEY,QAAA,QAAQ,GAAe;IAClC,KAAK,EAAE,UAAU;IACjB,WAAW,EAAE,oDAAoD;IACjE,IAAI,EAAE,QAAQ;CACf,CAAA;AAEY,QAAA,MAAM,GAAe;IAChC,KAAK,EAAE,QAAQ;IACf,WAAW,EAAE,0EAA0E;IACvF,IAAI,EAAE,QAAQ;IACd,eAAe,EAAE,UAAU;IAC3B,oBAAoB,EAAE,IAAI;CAC3B,CAAA;AAEY,QAAA,YAAY,GAAe;IACtC,KAAK,EAAE,eAAe;IACtB,WAAW,EACT,sSAAsS;IACxS,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;CACd,CAAA;AAEY,QAAA,SAAS,GAAe;IACnC,KAAK,EAAE,WAAW;IAClB,WAAW,EAAE,6BAA6B;IAC1C,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE;QACP,OAAO,EAAE,aAAa;KACvB;CACF,CAAA;AAEY,QAAA,UAAU,GAAe;IACpC,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,+CAA+C;IAC5D,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,IAAI;CACf,CAAA;AAEY,QAAA,UAAU,GAAe;IACpC,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,6DAA6D;IAC1E,IAAI,EAAE,QAAQ;IACd,eAAe,EAAE,UAAU;IAC3B,oBAAoB,EAAE,IAAI;CAC3B,CAAA"}
@@ -1,4 +1,5 @@
1
1
  export interface Payload {
2
+ engage_space: string;
2
3
  user_id?: string;
3
4
  anonymous_id?: string;
4
5
  timestamp?: string | number;
@@ -4,8 +4,9 @@ const segment_properties_1 = require("../segment-properties");
4
4
  const errors_1 = require("../errors");
5
5
  const action = {
6
6
  title: 'Send Track',
7
- description: '',
7
+ description: 'Send a track call to Segment’s tracking API. This is used to record actions your users perform.',
8
8
  fields: {
9
+ engage_space: segment_properties_1.engage_space,
9
10
  user_id: segment_properties_1.user_id,
10
11
  anonymous_id: segment_properties_1.anonymous_id,
11
12
  timestamp: segment_properties_1.timestamp,
@@ -13,10 +14,11 @@ const action = {
13
14
  group_id: segment_properties_1.group_id,
14
15
  properties: segment_properties_1.properties
15
16
  },
16
- perform: (_, { payload }) => {
17
+ perform: (_, { payload, statsContext }) => {
17
18
  if (!payload.anonymous_id && !payload.user_id) {
18
19
  throw errors_1.MissingUserOrAnonymousIdThrowableError;
19
20
  }
21
+ statsContext?.statsClient?.incr('tapi_internal', 1, [...statsContext.tags, `action:sendTrack`]);
20
22
  return {
21
23
  batch: [
22
24
  {
@@ -24,9 +26,13 @@ const action = {
24
26
  anonymousId: payload?.anonymous_id,
25
27
  timestamp: payload?.timestamp,
26
28
  event: payload?.event_name,
29
+ integrations: {
30
+ All: false
31
+ },
27
32
  properties: {
28
33
  ...payload?.properties
29
- }
34
+ },
35
+ type: 'track'
30
36
  }
31
37
  ]
32
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/segment-profiles/sendTrack/index.ts"],"names":[],"mappings":";;AAGA,8DAA0G;AAC1G,sCAAkE;AAElE,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,EAAE;IACf,MAAM,EAAE;QACN,OAAO,EAAP,4BAAO;QACP,YAAY,EAAZ,iCAAY;QACZ,SAAS,EAAT,8BAAS;QACT,UAAU,EAAV,+BAAU;QACV,QAAQ,EAAR,6BAAQ;QACR,UAAU,EAAV,+BAAU;KACX;IACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1B,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAC7C,MAAM,+CAAsC,CAAA;SAC7C;QAED,OAAO;YACL,KAAK,EAAE;gBACL;oBACE,MAAM,EAAE,OAAO,EAAE,OAAO;oBACxB,WAAW,EAAE,OAAO,EAAE,YAAY;oBAClC,SAAS,EAAE,OAAO,EAAE,SAAS;oBAC7B,KAAK,EAAE,OAAO,EAAE,UAAU;oBAC1B,UAAU,EAAE;wBACV,GAAG,OAAO,EAAE,UAAU;qBACvB;iBACF;aACF;SACF,CAAA;IACH,CAAC;CACF,CAAA;AAED,kBAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/segment-profiles/sendTrack/index.ts"],"names":[],"mappings":";;AAGA,8DAAwH;AACxH,sCAAkE;AAElE,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,iGAAiG;IAC9G,MAAM,EAAE;QACN,YAAY,EAAZ,iCAAY;QACZ,OAAO,EAAP,4BAAO;QACP,YAAY,EAAZ,iCAAY;QACZ,SAAS,EAAT,8BAAS;QACT,UAAU,EAAV,+BAAU;QACV,QAAQ,EAAR,6BAAQ;QACR,UAAU,EAAV,+BAAU;KACX;IACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE;QACxC,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAC7C,MAAM,+CAAsC,CAAA;SAC7C;QACD,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAA;QAE/F,OAAO;YACL,KAAK,EAAE;gBACL;oBACE,MAAM,EAAE,OAAO,EAAE,OAAO;oBACxB,WAAW,EAAE,OAAO,EAAE,YAAY;oBAClC,SAAS,EAAE,OAAO,EAAE,SAAS;oBAC7B,KAAK,EAAE,OAAO,EAAE,UAAU;oBAC1B,YAAY,EAAE;wBAGZ,GAAG,EAAE,KAAK;qBACX;oBACD,UAAU,EAAE;wBACV,GAAG,OAAO,EAAE,UAAU;qBACvB;oBACD,IAAI,EAAE,OAAO;iBACd;aACF;SACF,CAAA;IACH,CAAC;CACF,CAAA;AAED,kBAAe,MAAM,CAAA"}
@@ -3,16 +3,581 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const capiV2tests_1 = require("./capiV2tests");
7
- const capiV3tests_1 = require("./capiV3tests");
8
6
  const nock_1 = __importDefault(require("nock"));
7
+ const actions_core_1 = require("@segment/actions-core");
8
+ const index_1 = __importDefault(require("../index"));
9
+ const snap_capi_v3_1 = require("../reportConversionEvent/snap-capi-v3");
10
+ const testDestination = actions_core_1.createTestIntegration(index_1.default);
11
+ const timestamp = '2022-05-12T15:21:15.449Z';
12
+ const settings = {
13
+ snap_app_id: 'test123',
14
+ pixel_id: 'pixel123',
15
+ app_id: 'app123'
16
+ };
17
+ const accessToken = 'access123';
18
+ const refreshToken = 'refresh123';
19
+ const testEvent = actions_core_1.createTestEvent({
20
+ timestamp: timestamp,
21
+ messageId: 'test-message-rv4t40s898k',
22
+ event: 'PURCHASE',
23
+ type: 'track',
24
+ properties: {
25
+ email: ' Test123@gmail.com ',
26
+ phone: '+44 844 412 4653',
27
+ event_tag: 'back-to-school',
28
+ number_items: 10,
29
+ revenue: '15',
30
+ currency: 'USD',
31
+ level: 3
32
+ }
33
+ });
34
+ const features = {};
9
35
  beforeEach(() => {
10
36
  nock_1.default.cleanAll();
11
37
  });
12
38
  describe('Snap Conversions API ', () => {
13
39
  describe('ReportConversionEvent', () => {
14
- capiV2tests_1.capiV2tests();
15
- capiV3tests_1.capiV3tests();
40
+ describe('CAPIv3 Implementation', () => {
41
+ it('should use products array over number_items, product_id and category fields', async () => {
42
+ nock_1.default(/.*/).post(/.*/).reply(200);
43
+ const event = actions_core_1.createTestEvent({
44
+ ...testEvent,
45
+ properties: {
46
+ email: 'test123@gmail.com',
47
+ phone: '+44 844 412 4653',
48
+ event_tag: 'back-to-school',
49
+ quantity: 10,
50
+ revenue: '15',
51
+ currency: 'USD',
52
+ level: 3,
53
+ products: [
54
+ { product_id: '123', category: 'games', brand: 'Hasbro' },
55
+ { product_id: '456', category: 'games', brand: 'Mattel' }
56
+ ]
57
+ },
58
+ context: {}
59
+ });
60
+ const responses = await testDestination.testAction('reportConversionEvent', {
61
+ event,
62
+ settings,
63
+ useDefaultMappings: true,
64
+ auth: {
65
+ accessToken,
66
+ refreshToken
67
+ },
68
+ features,
69
+ mapping: {
70
+ event_type: 'PURCHASE',
71
+ event_conversion_type: 'WEB'
72
+ }
73
+ });
74
+ expect(responses).not.toBeNull();
75
+ expect(responses[0].status).toBe(200);
76
+ const body = JSON.parse(responses[0].options.body);
77
+ const { data } = body;
78
+ expect(data.length).toBe(1);
79
+ const { integration, event_name, event_time, user_data, custom_data, action_source, app_data } = data[0];
80
+ const { em, ph } = user_data;
81
+ const { brands, content_category, content_ids, currency, num_items, value } = custom_data;
82
+ expect(integration).toBe('segment');
83
+ expect(event_name).toBe('PURCHASE');
84
+ expect(event_time).toBe(1652368875449);
85
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
86
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
87
+ expect(currency).toBe('USD');
88
+ expect(value).toBe(15);
89
+ expect(action_source).toBe('website');
90
+ expect(app_data).toBeUndefined();
91
+ expect(brands).toEqual(['Hasbro', 'Mattel']);
92
+ expect(content_category).toEqual(['games', 'games']);
93
+ expect(content_ids).toEqual(['123', '456']);
94
+ expect(num_items).toBe(2);
95
+ });
96
+ it('should handle a basic event', async () => {
97
+ nock_1.default(/.*/).post(/.*/).reply(200);
98
+ const event = actions_core_1.createTestEvent(testEvent);
99
+ const responses = await testDestination.testAction('reportConversionEvent', {
100
+ event,
101
+ settings,
102
+ useDefaultMappings: true,
103
+ auth: {
104
+ accessToken,
105
+ refreshToken
106
+ },
107
+ features,
108
+ mapping: {
109
+ event_type: 'PURCHASE',
110
+ event_conversion_type: 'WEB'
111
+ }
112
+ });
113
+ expect(responses).not.toBeNull();
114
+ expect(responses[0].status).toBe(200);
115
+ const body = JSON.parse(responses[0].options.body);
116
+ const { data } = body;
117
+ expect(data.length).toBe(1);
118
+ const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data[0];
119
+ const { client_ip_address, client_user_agent, em, ph } = user_data;
120
+ const { currency, value } = custom_data;
121
+ expect(integration).toBe('segment');
122
+ expect(event_name).toBe('PURCHASE');
123
+ expect(event_source_url).toBe('https://segment.com/academy/');
124
+ expect(event_time).toBe(1652368875449);
125
+ expect(client_ip_address).toBe('8.8.8.8');
126
+ expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
127
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
128
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
129
+ expect(currency).toBe('USD');
130
+ expect(value).toBe(15);
131
+ expect(action_source).toBe('website');
132
+ expect(app_data).toBeUndefined();
133
+ });
134
+ it('should fail web event without pixel_id', async () => {
135
+ nock_1.default(/.*/).post(/.*/).reply(200);
136
+ const event = actions_core_1.createTestEvent(testEvent);
137
+ await expect(testDestination.testAction('reportConversionEvent', {
138
+ event,
139
+ settings: {
140
+ snap_app_id: 'test123'
141
+ },
142
+ useDefaultMappings: true,
143
+ auth: {
144
+ accessToken,
145
+ refreshToken
146
+ },
147
+ features,
148
+ mapping: {
149
+ event_type: 'PURCHASE',
150
+ event_conversion_type: 'WEB'
151
+ }
152
+ })).rejects.toThrowError('If event conversion type is "WEB" then Pixel ID must be defined');
153
+ });
154
+ it('should fail app event without snap_app_id', async () => {
155
+ nock_1.default(/.*/).post(/.*/).reply(200);
156
+ const event = actions_core_1.createTestEvent(testEvent);
157
+ await expect(testDestination.testAction('reportConversionEvent', {
158
+ event,
159
+ settings: {
160
+ pixel_id: 'test123',
161
+ app_id: 'test123'
162
+ },
163
+ useDefaultMappings: true,
164
+ auth: {
165
+ accessToken,
166
+ refreshToken
167
+ },
168
+ features,
169
+ mapping: {
170
+ event_type: 'PURCHASE',
171
+ event_conversion_type: 'MOBILE_APP'
172
+ }
173
+ })).rejects.toThrowError('If event conversion type is "MOBILE_APP" then Snap App ID must be defined');
174
+ });
175
+ it('should handle an offline event conversion type', async () => {
176
+ nock_1.default(/.*/).post(/.*/).reply(200);
177
+ const event = actions_core_1.createTestEvent(testEvent);
178
+ const responses = await testDestination.testAction('reportConversionEvent', {
179
+ event,
180
+ settings,
181
+ useDefaultMappings: true,
182
+ auth: {
183
+ accessToken,
184
+ refreshToken
185
+ },
186
+ features,
187
+ mapping: {
188
+ event_type: 'SAVE',
189
+ event_conversion_type: 'OFFLINE'
190
+ }
191
+ });
192
+ expect(responses).not.toBeNull();
193
+ expect(responses[0].status).toBe(200);
194
+ const body = JSON.parse(responses[0].options.body);
195
+ const { data } = body;
196
+ expect(data.length).toBe(1);
197
+ const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data[0];
198
+ const { client_ip_address, client_user_agent, em, ph } = user_data;
199
+ const { currency, value } = custom_data;
200
+ expect(integration).toBe('segment');
201
+ expect(event_name).toBe('SAVE');
202
+ expect(event_source_url).toBe('https://segment.com/academy/');
203
+ expect(event_time).toBe(1652368875449);
204
+ expect(client_ip_address).toBe('8.8.8.8');
205
+ expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
206
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
207
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
208
+ expect(currency).toBe('USD');
209
+ expect(value).toBe(15);
210
+ expect(action_source).toBe('OFFLINE');
211
+ expect(app_data).toBeUndefined();
212
+ });
213
+ it('should handle a mobile app event conversion type', async () => {
214
+ nock_1.default(/.*/).post(/.*/).reply(200);
215
+ const event = actions_core_1.createTestEvent(testEvent);
216
+ const responses = await testDestination.testAction('reportConversionEvent', {
217
+ event,
218
+ settings: {
219
+ snap_app_id: '123',
220
+ app_id: '123'
221
+ },
222
+ useDefaultMappings: true,
223
+ auth: {
224
+ accessToken,
225
+ refreshToken
226
+ },
227
+ features,
228
+ mapping: {
229
+ device_model: 'iPhone12,1',
230
+ os_version: '17.2',
231
+ event_type: 'SAVE',
232
+ event_conversion_type: 'MOBILE_APP'
233
+ }
234
+ });
235
+ expect(responses[0].status).toBe(200);
236
+ const body = JSON.parse(responses[0].options.body);
237
+ const { data } = body;
238
+ expect(data.length).toBe(1);
239
+ const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data[0];
240
+ const { client_ip_address, client_user_agent, em, ph } = user_data;
241
+ const { currency, value } = custom_data;
242
+ const { extinfo, advertiser_tracking_enabled } = app_data;
243
+ expect(integration).toBe('segment');
244
+ expect(event_name).toBe('SAVE');
245
+ expect(event_source_url).toBe('https://segment.com/academy/');
246
+ expect(event_time).toBe(1652368875449);
247
+ expect(client_ip_address).toBe('8.8.8.8');
248
+ expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
249
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
250
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
251
+ expect(currency).toBe('USD');
252
+ expect(value).toBe(15);
253
+ expect(action_source).toBe('app');
254
+ expect(extinfo).toEqual(['i2', '', '', '', '17.2', 'iPhone12,1', '', '', '', '', '', '', '', '', '', '']);
255
+ expect(advertiser_tracking_enabled).toBe(0);
256
+ });
257
+ it('should fail invalid currency', async () => {
258
+ nock_1.default(/.*/).post(/.*/).reply(200);
259
+ const event = actions_core_1.createTestEvent({
260
+ ...testEvent,
261
+ properties: {
262
+ currency: 'Galleon'
263
+ }
264
+ });
265
+ await expect(testDestination.testAction('reportConversionEvent', {
266
+ event,
267
+ settings,
268
+ useDefaultMappings: true,
269
+ auth: {
270
+ accessToken,
271
+ refreshToken
272
+ },
273
+ features,
274
+ mapping: {
275
+ event_type: 'PURCHASE',
276
+ event_conversion_type: 'WEB'
277
+ }
278
+ })).rejects.toThrowError('Galleon is not a valid currency code.');
279
+ });
280
+ it('should fail missing event conversion type', async () => {
281
+ nock_1.default(/.*/).post(/.*/).reply(200);
282
+ const event = actions_core_1.createTestEvent(testEvent);
283
+ await expect(testDestination.testAction('reportConversionEvent', {
284
+ event,
285
+ settings,
286
+ useDefaultMappings: true,
287
+ auth: {
288
+ accessToken,
289
+ refreshToken
290
+ },
291
+ features,
292
+ mapping: {
293
+ event_type: 'PURCHASE'
294
+ }
295
+ })).rejects.toThrowError("The root value is missing the required field 'event_conversion_type'.");
296
+ });
297
+ it('should handle a custom event', async () => {
298
+ nock_1.default(/.*/).post(/.*/).reply(200);
299
+ const event = actions_core_1.createTestEvent({
300
+ ...testEvent,
301
+ event: 'CUSTOM_EVENT_5'
302
+ });
303
+ const responses = await testDestination.testAction('reportConversionEvent', {
304
+ event,
305
+ settings: {
306
+ snap_app_id: '123',
307
+ app_id: '123'
308
+ },
309
+ useDefaultMappings: true,
310
+ auth: {
311
+ accessToken,
312
+ refreshToken
313
+ },
314
+ features,
315
+ mapping: {
316
+ event_type: { '@path': '$.event' },
317
+ event_conversion_type: 'MOBILE_APP'
318
+ }
319
+ });
320
+ expect(responses).not.toBeNull();
321
+ expect(responses[0].status).toBe(200);
322
+ const body = JSON.parse(responses[0].options.body);
323
+ const { data } = body;
324
+ expect(data.length).toBe(1);
325
+ const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data[0];
326
+ const { client_ip_address, client_user_agent, em, ph } = user_data;
327
+ const { currency, value } = custom_data;
328
+ const { app_id, advertiser_tracking_enabled } = app_data;
329
+ expect(integration).toBe('segment');
330
+ expect(event_name).toBe('CUSTOM_EVENT_5');
331
+ expect(event_source_url).toBe('https://segment.com/academy/');
332
+ expect(event_time).toBe(1652368875449);
333
+ expect(client_ip_address).toBe('8.8.8.8');
334
+ expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
335
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
336
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
337
+ expect(currency).toBe('USD');
338
+ expect(value).toBe(15);
339
+ expect(action_source).toBe('app');
340
+ expect(app_id).toBe('123');
341
+ expect(advertiser_tracking_enabled).toBe(0);
342
+ });
343
+ it('should fail event missing all Snap identifiers', async () => {
344
+ const event = actions_core_1.createTestEvent({
345
+ ...testEvent,
346
+ properties: {},
347
+ context: {}
348
+ });
349
+ await expect(testDestination.testAction('reportConversionEvent', {
350
+ event,
351
+ settings,
352
+ useDefaultMappings: true,
353
+ auth: {
354
+ accessToken,
355
+ refreshToken
356
+ },
357
+ features,
358
+ mapping: {
359
+ event_type: 'PURCHASE',
360
+ event_conversion_type: 'WEB'
361
+ }
362
+ })).rejects.toThrowError('Payload must contain values for Email or Phone Number or Mobile Ad Identifier or both IP Address and User Agent fields');
363
+ });
364
+ it('should handle event with email as only Snap identifier', async () => {
365
+ nock_1.default(/.*/).post(/.*/).reply(200);
366
+ const event = actions_core_1.createTestEvent({
367
+ ...testEvent,
368
+ properties: {
369
+ email: 'test123@gmail.com'
370
+ },
371
+ context: {}
372
+ });
373
+ const responses = await testDestination.testAction('reportConversionEvent', {
374
+ event,
375
+ settings,
376
+ useDefaultMappings: true,
377
+ auth: {
378
+ accessToken,
379
+ refreshToken
380
+ },
381
+ features,
382
+ mapping: {
383
+ event_type: 'PURCHASE',
384
+ event_conversion_type: 'WEB'
385
+ }
386
+ });
387
+ expect(responses).not.toBeNull();
388
+ expect(responses[0].status).toBe(200);
389
+ const body = JSON.parse(responses[0].options.body);
390
+ const { data } = body;
391
+ expect(data.length).toBe(1);
392
+ const { integration, event_name, event_time, user_data, action_source } = data[0];
393
+ const { em, ph } = user_data;
394
+ expect(integration).toBe('segment');
395
+ expect(event_name).toBe('PURCHASE');
396
+ expect(event_time).toBe(1652368875449);
397
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
398
+ expect(ph).toBeUndefined();
399
+ expect(action_source).toBe('website');
400
+ });
401
+ it('should handle event with phone as only Snap identifier', async () => {
402
+ nock_1.default(/.*/).post(/.*/).reply(200);
403
+ const event = actions_core_1.createTestEvent({
404
+ ...testEvent,
405
+ properties: {
406
+ phone: '+44 844 412 4653'
407
+ },
408
+ context: {}
409
+ });
410
+ const responses = await testDestination.testAction('reportConversionEvent', {
411
+ event,
412
+ settings,
413
+ useDefaultMappings: true,
414
+ auth: {
415
+ accessToken,
416
+ refreshToken
417
+ },
418
+ features,
419
+ mapping: {
420
+ event_type: 'PURCHASE',
421
+ event_conversion_type: 'WEB'
422
+ }
423
+ });
424
+ const body = JSON.parse(responses[0].options.body);
425
+ const { data } = body;
426
+ expect(data.length).toBe(1);
427
+ const { integration, event_name, event_time, user_data, action_source } = data[0];
428
+ const { ph } = user_data;
429
+ expect(integration).toBe('segment');
430
+ expect(event_name).toBe('PURCHASE');
431
+ expect(event_time).toBe(1652368875449);
432
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
433
+ expect(action_source).toBe('website');
434
+ });
435
+ it('should handle event with advertising_id as only Snap identifier', async () => {
436
+ nock_1.default(/.*/).post(/.*/).reply(200);
437
+ const advertisingId = '87a7def4-b6e9-4bf7-91b6-66372842007a';
438
+ const event = actions_core_1.createTestEvent({
439
+ ...testEvent,
440
+ properties: {},
441
+ context: {
442
+ device: {
443
+ advertisingId
444
+ }
445
+ }
446
+ });
447
+ const responses = await testDestination.testAction('reportConversionEvent', {
448
+ event,
449
+ settings,
450
+ useDefaultMappings: true,
451
+ auth: {
452
+ accessToken,
453
+ refreshToken
454
+ },
455
+ features,
456
+ mapping: {
457
+ event_type: 'PURCHASE',
458
+ event_conversion_type: 'WEB'
459
+ }
460
+ });
461
+ const body = JSON.parse(responses[0].options.body);
462
+ const { data } = body;
463
+ expect(data.length).toBe(1);
464
+ const { integration, event_name, event_time, user_data, action_source } = data[0];
465
+ const { madid } = user_data;
466
+ expect(integration).toBe('segment');
467
+ expect(event_name).toBe('PURCHASE');
468
+ expect(event_time).toBe(1652368875449);
469
+ expect(madid).toBe(advertisingId);
470
+ expect(action_source).toBe('website');
471
+ });
472
+ it('should handle event with ip and user_agent as only Snap identifiers', async () => {
473
+ nock_1.default(/.*/).post(/.*/).reply(200);
474
+ const event = actions_core_1.createTestEvent({
475
+ ...testEvent,
476
+ properties: {}
477
+ });
478
+ const responses = await testDestination.testAction('reportConversionEvent', {
479
+ event,
480
+ settings,
481
+ useDefaultMappings: true,
482
+ auth: {
483
+ accessToken,
484
+ refreshToken
485
+ },
486
+ features,
487
+ mapping: {
488
+ event_type: 'PURCHASE',
489
+ event_conversion_type: 'WEB'
490
+ }
491
+ });
492
+ const body = JSON.parse(responses[0].options.body);
493
+ const { data } = body;
494
+ expect(data.length).toBe(1);
495
+ const { integration, event_name, event_time, user_data, action_source } = data[0];
496
+ const { client_ip_address, client_user_agent } = user_data;
497
+ expect(integration).toBe('segment');
498
+ expect(event_name).toBe('PURCHASE');
499
+ expect(event_time).toBe(1652368875449);
500
+ expect(client_ip_address).toBe('8.8.8.8');
501
+ expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
502
+ expect(action_source).toBe('website');
503
+ });
504
+ it('should always use the pixel id in settings for web events', async () => {
505
+ nock_1.default(/.*/).post(/.*/).reply(200);
506
+ const event = actions_core_1.createTestEvent({
507
+ ...testEvent,
508
+ properties: {}
509
+ });
510
+ const responses = await testDestination.testAction('reportConversionEvent', {
511
+ event,
512
+ settings,
513
+ useDefaultMappings: true,
514
+ auth: {
515
+ accessToken,
516
+ refreshToken
517
+ },
518
+ features,
519
+ mapping: {
520
+ event_type: 'PURCHASE',
521
+ event_conversion_type: 'WEB'
522
+ }
523
+ });
524
+ expect(responses[0].url).toBe(snap_capi_v3_1.buildRequestURL('pixel123', 'access123'));
525
+ });
526
+ it('should trim a pixel id with leading or trailing whitespace', async () => {
527
+ nock_1.default(/.*/).post(/.*/).reply(200);
528
+ const event = actions_core_1.createTestEvent({
529
+ ...testEvent,
530
+ properties: {}
531
+ });
532
+ const responses = await testDestination.testAction('reportConversionEvent', {
533
+ event,
534
+ settings: {
535
+ pixel_id: ' pixel123 '
536
+ },
537
+ useDefaultMappings: true,
538
+ auth: {
539
+ accessToken,
540
+ refreshToken
541
+ },
542
+ features,
543
+ mapping: {
544
+ event_type: 'PURCHASE',
545
+ event_conversion_type: 'WEB'
546
+ }
547
+ });
548
+ expect(responses[0].url).toBe(snap_capi_v3_1.buildRequestURL('pixel123', 'access123'));
549
+ });
550
+ it('should exclude number_items that is not a valid integer', async () => {
551
+ nock_1.default(/.*/).post(/.*/).reply(200);
552
+ const event = actions_core_1.createTestEvent({
553
+ ...testEvent,
554
+ properties: {}
555
+ });
556
+ const responses = await testDestination.testAction('reportConversionEvent', {
557
+ event,
558
+ settings: {
559
+ pixel_id: ' pixel123 '
560
+ },
561
+ useDefaultMappings: true,
562
+ auth: {
563
+ accessToken: ' access123 ',
564
+ refreshToken
565
+ },
566
+ features,
567
+ mapping: {
568
+ event_type: 'PURCHASE',
569
+ event_conversion_type: 'WEB',
570
+ number_items: 'six'
571
+ }
572
+ });
573
+ expect(responses[0].url).toBe(snap_capi_v3_1.buildRequestURL('pixel123', 'access123'));
574
+ const body = JSON.parse(responses[0].options.body);
575
+ const { data } = body;
576
+ expect(data.length).toBe(1);
577
+ const { custom_data } = data[0];
578
+ expect(custom_data).toBeUndefined();
579
+ });
580
+ });
16
581
  });
17
582
  });
18
583
  //# sourceMappingURL=index.test.js.map