@segment/action-destinations 3.71.1-alpha.1 → 3.73.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.
- package/dist/destinations/index.js +1 -0
- package/dist/destinations/index.js.map +1 -1
- package/dist/destinations/personas-messaging-twilio/generated-types.d.ts +3 -2
- package/dist/destinations/personas-messaging-twilio/index.js +12 -6
- package/dist/destinations/personas-messaging-twilio/index.js.map +1 -1
- package/dist/destinations/personas-messaging-twilio/sendSms/index.js +2 -2
- package/dist/destinations/personas-messaging-twilio/sendSms/index.js.map +1 -1
- package/dist/destinations/salesforce/account/generated-types.d.ts +4 -0
- package/dist/destinations/salesforce/account/index.js +18 -3
- package/dist/destinations/salesforce/account/index.js.map +1 -1
- package/dist/destinations/salesforce/cases/generated-types.d.ts +4 -0
- package/dist/destinations/salesforce/cases/index.js +16 -3
- package/dist/destinations/salesforce/cases/index.js.map +1 -1
- package/dist/destinations/salesforce/contact/generated-types.d.ts +4 -0
- package/dist/destinations/salesforce/contact/index.js +18 -3
- package/dist/destinations/salesforce/contact/index.js.map +1 -1
- package/dist/destinations/salesforce/customObject/generated-types.d.ts +4 -0
- package/dist/destinations/salesforce/customObject/index.d.ts +1 -1
- package/dist/destinations/salesforce/customObject/index.js +12 -0
- package/dist/destinations/salesforce/customObject/index.js.map +1 -1
- package/dist/destinations/salesforce/lead/generated-types.d.ts +4 -0
- package/dist/destinations/salesforce/lead/index.js +18 -3
- package/dist/destinations/salesforce/lead/index.js.map +1 -1
- package/dist/destinations/salesforce/opportunity/generated-types.d.ts +4 -0
- package/dist/destinations/salesforce/opportunity/index.js +18 -3
- package/dist/destinations/salesforce/opportunity/index.js.map +1 -1
- package/dist/destinations/salesforce/sf-operations.d.ts +4 -1
- package/dist/destinations/salesforce/sf-operations.js +48 -14
- package/dist/destinations/salesforce/sf-operations.js.map +1 -1
- package/dist/destinations/salesforce/sf-properties.d.ts +2 -0
- package/dist/destinations/salesforce/sf-properties.js +27 -2
- package/dist/destinations/salesforce/sf-properties.js.map +1 -1
- package/dist/destinations/salesforce/sf-utils.d.ts +2 -0
- package/dist/destinations/salesforce/sf-utils.js +90 -0
- package/dist/destinations/salesforce/sf-utils.js.map +1 -0
- package/dist/destinations/snap-conversions-api/_tests_/index.test.d.ts +1 -0
- package/dist/destinations/snap-conversions-api/_tests_/index.test.js +204 -0
- package/dist/destinations/snap-conversions-api/_tests_/index.test.js.map +1 -0
- package/dist/destinations/snap-conversions-api/generated-types.d.ts +5 -0
- package/dist/destinations/snap-conversions-api/generated-types.js +3 -0
- package/dist/destinations/snap-conversions-api/generated-types.js.map +1 -0
- package/dist/destinations/snap-conversions-api/index.d.ts +4 -0
- package/dist/destinations/snap-conversions-api/index.js +189 -0
- package/dist/destinations/snap-conversions-api/index.js.map +1 -0
- package/dist/destinations/snap-conversions-api/reportConversionEvent/generated-types.d.ts +25 -0
- package/dist/destinations/snap-conversions-api/reportConversionEvent/generated-types.js +3 -0
- package/dist/destinations/snap-conversions-api/reportConversionEvent/generated-types.js.map +1 -0
- package/dist/destinations/snap-conversions-api/reportConversionEvent/index.d.ts +5 -0
- package/dist/destinations/snap-conversions-api/reportConversionEvent/index.js +50 -0
- package/dist/destinations/snap-conversions-api/reportConversionEvent/index.js.map +1 -0
- package/dist/destinations/snap-conversions-api/snap-capi-properties.d.ts +30 -0
- package/dist/destinations/snap-conversions-api/snap-capi-properties.js +310 -0
- package/dist/destinations/snap-conversions-api/snap-capi-properties.js.map +1 -0
- package/package.json +4 -4
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.API_VERSION = void 0;
|
|
4
4
|
const actions_core_1 = require("@segment/actions-core");
|
|
5
5
|
const sf_object_to_shape_1 = require("./sf-object-to-shape");
|
|
6
|
+
const sf_utils_1 = require("./sf-utils");
|
|
6
7
|
exports.API_VERSION = 'v53.0';
|
|
7
8
|
class Salesforce {
|
|
8
9
|
constructor(instanceUrl, request) {
|
|
@@ -39,6 +40,51 @@ class Salesforce {
|
|
|
39
40
|
}
|
|
40
41
|
return await this.baseUpdate(recordId, sobject, payload);
|
|
41
42
|
};
|
|
43
|
+
this.bulkUpsert = async (payloads, sobject) => {
|
|
44
|
+
if (!payloads[0].bulkUpsertExternalId ||
|
|
45
|
+
!payloads[0].bulkUpsertExternalId.externalIdName ||
|
|
46
|
+
!payloads[0].bulkUpsertExternalId.externalIdValue) {
|
|
47
|
+
throw new actions_core_1.IntegrationError('Undefined bulkUpsertExternalId.externalIdName or externalIdValue when using bulkUpsert operation', 'Undefined bulkUpsertExternalId.externalIdName externalIdValue', 400);
|
|
48
|
+
}
|
|
49
|
+
const externalIdFieldName = payloads[0].bulkUpsertExternalId.externalIdName;
|
|
50
|
+
const jobId = await this.createBulkJob(sobject, externalIdFieldName);
|
|
51
|
+
const csv = sf_utils_1.buildCSVData(payloads, externalIdFieldName);
|
|
52
|
+
await this.uploadBulkCSV(jobId, csv);
|
|
53
|
+
return await this.closeBulkJob(jobId);
|
|
54
|
+
};
|
|
55
|
+
this.createBulkJob = async (sobject, externalIdFieldName) => {
|
|
56
|
+
const res = await this.request(`${this.instanceUrl}services/data/${exports.API_VERSION}/jobs/ingest`, {
|
|
57
|
+
method: 'post',
|
|
58
|
+
json: {
|
|
59
|
+
object: sobject,
|
|
60
|
+
externalIdFieldName: externalIdFieldName,
|
|
61
|
+
contentType: 'CSV',
|
|
62
|
+
operation: 'upsert'
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
if (!res || !res.data || !res.data.id) {
|
|
66
|
+
throw new actions_core_1.IntegrationError('Failed to create bulk job', 'Failed to create bulk job', 500);
|
|
67
|
+
}
|
|
68
|
+
return res.data.id;
|
|
69
|
+
};
|
|
70
|
+
this.uploadBulkCSV = async (jobId, csv) => {
|
|
71
|
+
return this.request(`${this.instanceUrl}services/data/${exports.API_VERSION}/jobs/ingest/${jobId}/batches`, {
|
|
72
|
+
method: 'put',
|
|
73
|
+
headers: {
|
|
74
|
+
'Content-Type': 'text/csv',
|
|
75
|
+
Accept: 'application/json'
|
|
76
|
+
},
|
|
77
|
+
body: csv
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
this.closeBulkJob = async (jobId) => {
|
|
81
|
+
return this.request(`${this.instanceUrl}services/data/${exports.API_VERSION}/jobs/ingest/${jobId}`, {
|
|
82
|
+
method: 'PATCH',
|
|
83
|
+
json: {
|
|
84
|
+
state: 'UploadComplete'
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
};
|
|
42
88
|
this.baseUpdate = async (recordId, sobject, payload) => {
|
|
43
89
|
const json = this.buildJSONData(payload, sobject);
|
|
44
90
|
return this.request(`${this.instanceUrl}services/data/${exports.API_VERSION}/sobjects/${sobject}/${recordId}`, {
|
|
@@ -56,26 +102,14 @@ class Salesforce {
|
|
|
56
102
|
}
|
|
57
103
|
return baseShape;
|
|
58
104
|
};
|
|
59
|
-
this.escapeQuotes = (value) => value.
|
|
105
|
+
this.escapeQuotes = (value) => value.replace(/'/g, "\\'");
|
|
60
106
|
this.removeInvalidChars = (value) => value.replace(/[^a-zA-Z0-9_]/g, '');
|
|
61
|
-
this.typecast = (value) => {
|
|
62
|
-
switch (typeof value) {
|
|
63
|
-
case "string":
|
|
64
|
-
return `'${this.escapeQuotes(value)}'`;
|
|
65
|
-
case "boolean":
|
|
66
|
-
return value;
|
|
67
|
-
case "number":
|
|
68
|
-
return value;
|
|
69
|
-
default:
|
|
70
|
-
return `'${this.escapeQuotes(value)}'`;
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
107
|
this.buildQuery = (traits, sobject) => {
|
|
74
108
|
let soql = `SELECT Id FROM ${sobject} WHERE `;
|
|
75
109
|
const entries = Object.entries(traits);
|
|
76
110
|
let i = 0;
|
|
77
111
|
for (const [key, value] of entries) {
|
|
78
|
-
let token = `${this.removeInvalidChars(key)} = ${this.
|
|
112
|
+
let token = `${this.removeInvalidChars(key)} = '${this.escapeQuotes(value)}'`;
|
|
79
113
|
if (i < entries.length - 1) {
|
|
80
114
|
token += ' OR ';
|
|
81
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sf-operations.js","sourceRoot":"","sources":["../../../src/destinations/salesforce/sf-operations.ts"],"names":[],"mappings":";;;AAAA,wDAAuE;AAEvE,6DAAuD;
|
|
1
|
+
{"version":3,"file":"sf-operations.js","sourceRoot":"","sources":["../../../src/destinations/salesforce/sf-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { InputField } from '@segment/actions-core/src/destination-kit/types';
|
|
2
2
|
export declare const operation: InputField;
|
|
3
|
+
export declare const bulkUpsertExternalId: InputField;
|
|
4
|
+
export declare const bulkUpdateRecordId: InputField;
|
|
3
5
|
export declare const traits: InputField;
|
|
4
6
|
export declare const customFields: InputField;
|
|
5
7
|
interface Payload {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateLookup = exports.customFields = exports.traits = exports.operation = void 0;
|
|
3
|
+
exports.validateLookup = exports.customFields = exports.traits = exports.bulkUpdateRecordId = exports.bulkUpsertExternalId = exports.operation = void 0;
|
|
4
4
|
const actions_core_1 = require("@segment/actions-core");
|
|
5
5
|
exports.operation = {
|
|
6
6
|
label: 'Operation',
|
|
@@ -10,9 +10,34 @@ exports.operation = {
|
|
|
10
10
|
choices: [
|
|
11
11
|
{ label: 'Create', value: 'create' },
|
|
12
12
|
{ label: 'Update', value: 'update' },
|
|
13
|
-
{ label: 'Upsert', value: 'upsert' }
|
|
13
|
+
{ label: 'Upsert', value: 'upsert' },
|
|
14
|
+
{ label: 'Bulk Upsert', value: 'bulkUpsert' }
|
|
14
15
|
]
|
|
15
16
|
};
|
|
17
|
+
exports.bulkUpsertExternalId = {
|
|
18
|
+
label: 'Bulk Upsert External Id',
|
|
19
|
+
description: 'The external id field name and mapping to use for bulk upsert.',
|
|
20
|
+
type: 'object',
|
|
21
|
+
defaultObjectUI: 'keyvalue:only',
|
|
22
|
+
additionalProperties: false,
|
|
23
|
+
properties: {
|
|
24
|
+
externalIdName: {
|
|
25
|
+
label: 'External Id Name',
|
|
26
|
+
description: 'The external id field name as defined in Salesforce.',
|
|
27
|
+
type: 'string'
|
|
28
|
+
},
|
|
29
|
+
externalIdValue: {
|
|
30
|
+
label: 'External Id Value',
|
|
31
|
+
description: 'The external id field value to use for bulk upsert.',
|
|
32
|
+
type: 'string'
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.bulkUpdateRecordId = {
|
|
37
|
+
label: 'Bulk Update Record Id',
|
|
38
|
+
description: 'The record id value to use for bulk update.',
|
|
39
|
+
type: 'string'
|
|
40
|
+
};
|
|
16
41
|
exports.traits = {
|
|
17
42
|
label: 'Record Matchers',
|
|
18
43
|
description: `The fields used to find Salesforce records for updates. **This is required if the operation is Update or Upsert.**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sf-properties.js","sourceRoot":"","sources":["../../../src/destinations/salesforce/sf-properties.ts"],"names":[],"mappings":";;;AACA,wDAAwD;AAE3C,QAAA,SAAS,GAAe;IACnC,KAAK,EAAE,WAAW;IAClB,WAAW,EACT,kHAAkH;IACpH,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;QACpC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;QACpC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"sf-properties.js","sourceRoot":"","sources":["../../../src/destinations/salesforce/sf-properties.ts"],"names":[],"mappings":";;;AACA,wDAAwD;AAE3C,QAAA,SAAS,GAAe;IACnC,KAAK,EAAE,WAAW;IAClB,WAAW,EACT,kHAAkH;IACpH,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;QACpC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;QACpC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;QACpC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE;KAC9C;CACF,CAAA;AAEY,QAAA,oBAAoB,GAAe;IAC9C,KAAK,EAAE,yBAAyB;IAChC,WAAW,EAAE,gEAAgE;IAC7E,IAAI,EAAE,QAAQ;IACd,eAAe,EAAE,eAAe;IAChC,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,cAAc,EAAE;YACd,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,sDAAsD;YACnE,IAAI,EAAE,QAAQ;SACf;QACD,eAAe,EAAE;YACf,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,qDAAqD;YAClE,IAAI,EAAE,QAAQ;SACf;KACF;CACF,CAAA;AAEY,QAAA,kBAAkB,GAAe;IAC5C,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EAAE,6CAA6C;IAC1D,IAAI,EAAE,QAAQ;CACf,CAAA;AAEY,QAAA,MAAM,GAAe;IAChC,KAAK,EAAE,iBAAiB;IACxB,WAAW,EAAE;;;;;;;;GAQZ;IACD,IAAI,EAAE,QAAQ;IACd,eAAe,EAAE,eAAe;CACjC,CAAA;AAEY,QAAA,YAAY,GAAe;IACtC,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE;;;;;;;GAOZ;IACD,IAAI,EAAE,QAAQ;IACd,eAAe,EAAE,UAAU;CAC5B,CAAA;AAOM,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAE,EAAE;IACjD,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE;QACpE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACnB,MAAM,IAAI,+BAAgB,CACxB,wDAAwD,EACxD,8BAA8B,EAC9B,GAAG,CACJ,CAAA;SACF;KACF;AACH,CAAC,CAAA;AAVY,QAAA,cAAc,kBAU1B"}
|
|
@@ -0,0 +1,90 @@
|
|
|
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.buildCSVData = void 0;
|
|
7
|
+
const actions_core_1 = require("@segment/actions-core");
|
|
8
|
+
const camelCase_1 = __importDefault(require("lodash/camelCase"));
|
|
9
|
+
const isSettingsKey = new Set(['operation', 'traits', 'customFields', 'bulkUpsertExternalId']);
|
|
10
|
+
const NO_VALUE = `#N/A`;
|
|
11
|
+
const validateHeaderField = (field) => {
|
|
12
|
+
if (field.includes(',')) {
|
|
13
|
+
throw new actions_core_1.IntegrationError(`Invalid character in field name: ${field}`, `Invalid character in field name: ${field}`, 400);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const buildHeaderMap = (payloads) => {
|
|
17
|
+
const headerMap = new Map();
|
|
18
|
+
for (let i = payloads.length - 1; i >= 0; i--) {
|
|
19
|
+
const payload = payloads[i];
|
|
20
|
+
Object.entries(payload).forEach(([key, value]) => {
|
|
21
|
+
if (!isSettingsKey.has(key)) {
|
|
22
|
+
const pascalKey = snakeCaseToPascalCase(key);
|
|
23
|
+
const actualValue = value;
|
|
24
|
+
if (headerMap.has(pascalKey)) {
|
|
25
|
+
headerMap.get(pascalKey)?.push([actualValue, i]);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
headerMap.set(pascalKey, [[actualValue, i]]);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (key === 'customFields') {
|
|
32
|
+
const customFields = value;
|
|
33
|
+
Object.entries(customFields).forEach(([customFieldName, customFieldValue]) => {
|
|
34
|
+
validateHeaderField(customFieldName);
|
|
35
|
+
if (!headerMap.has(customFieldName)) {
|
|
36
|
+
headerMap.set(customFieldName, [[customFieldValue, i]]);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
headerMap.get(customFieldName)?.push([customFieldValue, i]);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return headerMap;
|
|
46
|
+
};
|
|
47
|
+
const buildHeaders = (headerMap) => {
|
|
48
|
+
let headers = '';
|
|
49
|
+
for (const [key, _] of headerMap.entries()) {
|
|
50
|
+
headers += `${key},`;
|
|
51
|
+
}
|
|
52
|
+
return headers;
|
|
53
|
+
};
|
|
54
|
+
const buildCSVFromHeaderMap = (payloads, headerMap, n) => {
|
|
55
|
+
let rows = '';
|
|
56
|
+
for (let i = 0; i < n; i++) {
|
|
57
|
+
let row = '';
|
|
58
|
+
for (const [key, _] of headerMap.entries()) {
|
|
59
|
+
let noValueFound = true;
|
|
60
|
+
if (headerMap.has(key)) {
|
|
61
|
+
const column = headerMap.get(key);
|
|
62
|
+
if (column !== undefined && column.length > 0 && column[column.length - 1][1] === i) {
|
|
63
|
+
const value = column.pop();
|
|
64
|
+
if (value !== undefined) {
|
|
65
|
+
row += `"${value[0]}",`;
|
|
66
|
+
noValueFound = false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (noValueFound) {
|
|
71
|
+
row += `${NO_VALUE},`;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const externalIdFieldValue = payloads[i].bulkUpsertExternalId?.externalIdValue;
|
|
75
|
+
rows += `${row}"${externalIdFieldValue}"\n`;
|
|
76
|
+
}
|
|
77
|
+
return rows;
|
|
78
|
+
};
|
|
79
|
+
const buildCSVData = (payloads, externalIdFieldName) => {
|
|
80
|
+
const headerMap = buildHeaderMap(payloads);
|
|
81
|
+
let csv = buildHeaders(headerMap);
|
|
82
|
+
csv += `${externalIdFieldName}\n` + buildCSVFromHeaderMap(payloads, headerMap, payloads.length);
|
|
83
|
+
return csv;
|
|
84
|
+
};
|
|
85
|
+
exports.buildCSVData = buildCSVData;
|
|
86
|
+
const snakeCaseToPascalCase = (key) => {
|
|
87
|
+
const token = camelCase_1.default(key);
|
|
88
|
+
return token.charAt(0).toUpperCase() + token.slice(1);
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=sf-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sf-utils.js","sourceRoot":"","sources":["../../../src/destinations/salesforce/sf-utils.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAwD;AAExD,iEAAwC;AAExC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,sBAAsB,CAAC,CAAC,CAAA;AAEtG,MAAM,QAAQ,GAAG,MAAM,CAAA;AAEvB,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAQ,EAAE;IAClD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACvB,MAAM,IAAI,+BAAgB,CACxB,oCAAoC,KAAK,EAAE,EAC3C,oCAAoC,KAAK,EAAE,EAC3C,GAAG,CACJ,CAAA;KACF;AACH,CAAC,CAAA;AAUD,MAAM,cAAc,GAAG,CAAC,QAA0B,EAAmC,EAAE;IACrF,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAA;IAGvD,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC/C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC3B,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAA;gBAC5C,MAAM,WAAW,GAAG,KAAe,CAAA;gBACnC,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;oBAC5B,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;iBACjD;qBAAM;oBACL,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;iBAC7C;aACF;YACD,IAAI,GAAG,KAAK,cAAc,EAAE;gBAC1B,MAAM,YAAY,GAAG,KAAe,CAAA;gBACpC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,EAAE;oBAC3E,mBAAmB,CAAC,eAAe,CAAC,CAAA;oBAEpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;wBACnC,SAAS,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;qBACxD;yBAAM;wBACL,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAA;qBAC5D;gBACH,CAAC,CAAC,CAAA;aACH;QACH,CAAC,CAAC,CAAA;KACH;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAQD,MAAM,YAAY,GAAG,CAAC,SAA0C,EAAU,EAAE;IAC1E,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE;QAC1C,OAAO,IAAI,GAAG,GAAG,GAAG,CAAA;KACrB;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAaD,MAAM,qBAAqB,GAAG,CAC5B,QAA0B,EAC1B,SAA0C,EAC1C,CAAS,EACD,EAAE;IACV,IAAI,IAAI,GAAG,EAAE,CAAA;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,IAAI,GAAG,GAAG,EAAE,CAAA;QACZ,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE;YAC1C,IAAI,YAAY,GAAG,IAAI,CAAA;YACvB,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACtB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAuB,CAAA;gBAEvD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;oBACnF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAA;oBAC1B,IAAI,KAAK,KAAK,SAAS,EAAE;wBACvB,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;wBACvB,YAAY,GAAG,KAAK,CAAA;qBACrB;iBACF;aACF;YAED,IAAI,YAAY,EAAE;gBAChB,GAAG,IAAI,GAAG,QAAQ,GAAG,CAAA;aACtB;SACF;QACD,MAAM,oBAAoB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,oBAAoB,EAAE,eAAyB,CAAA;QACxF,IAAI,IAAI,GAAG,GAAG,IAAI,oBAAoB,KAAK,CAAA;KAC5C;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAQM,MAAM,YAAY,GAAG,CAAC,QAA0B,EAAE,mBAA2B,EAAU,EAAE;IAC9F,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IAC1C,IAAI,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IAEjC,GAAG,IAAI,GAAG,mBAAmB,IAAI,GAAG,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAE/F,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAPY,QAAA,YAAY,gBAOxB;AAID,MAAM,qBAAqB,GAAG,CAAC,GAAW,EAAU,EAAE;IACpD,MAAM,KAAK,GAAG,mBAAS,CAAC,GAAG,CAAC,CAAA;IAC5B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACvD,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,204 @@
|
|
|
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
|
+
const nock_1 = __importDefault(require("nock"));
|
|
7
|
+
const actions_core_1 = require("@segment/actions-core");
|
|
8
|
+
const index_1 = __importDefault(require("../index"));
|
|
9
|
+
const testDestination = actions_core_1.createTestIntegration(index_1.default);
|
|
10
|
+
const timestamp = '2022-05-12T15:21:15.449Z';
|
|
11
|
+
const settings = {
|
|
12
|
+
snap_app_id: 'test123',
|
|
13
|
+
pixel_id: 'test123',
|
|
14
|
+
app_id: 'test123'
|
|
15
|
+
};
|
|
16
|
+
const accessToken = 'test123';
|
|
17
|
+
const refreshToken = 'test123';
|
|
18
|
+
const testEvent = actions_core_1.createTestEvent({
|
|
19
|
+
timestamp: timestamp,
|
|
20
|
+
messageId: 'test-message-rv4t40s898k',
|
|
21
|
+
event: 'PURCHASE',
|
|
22
|
+
type: 'track',
|
|
23
|
+
properties: {
|
|
24
|
+
email: 'test123@gmail.com',
|
|
25
|
+
phone: '+44 844 412 4653',
|
|
26
|
+
event_tag: 'back-to-school',
|
|
27
|
+
number_items: 10,
|
|
28
|
+
price: '15',
|
|
29
|
+
currency: 'USD',
|
|
30
|
+
level: 3
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
const conversionEventUrl = 'https://tr.snapchat.com/v2/conversion';
|
|
34
|
+
describe('Snap Conversions API ', () => {
|
|
35
|
+
describe('ReportConversionEvent', () => {
|
|
36
|
+
it('should handle a basic event', async () => {
|
|
37
|
+
nock_1.default(conversionEventUrl).post('').reply(200, {});
|
|
38
|
+
const event = actions_core_1.createTestEvent(testEvent);
|
|
39
|
+
const responses = await testDestination.testAction('reportConversionEvent', {
|
|
40
|
+
event,
|
|
41
|
+
settings,
|
|
42
|
+
useDefaultMappings: true,
|
|
43
|
+
auth: {
|
|
44
|
+
accessToken,
|
|
45
|
+
refreshToken
|
|
46
|
+
},
|
|
47
|
+
mapping: {
|
|
48
|
+
event_type: 'PURCHASE',
|
|
49
|
+
event_conversion_type: 'WEB'
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
expect(responses).not.toBeNull();
|
|
53
|
+
expect(responses[0].status).toBe(200);
|
|
54
|
+
expect(responses[0].options.body).toMatchInlineSnapshot(`"{\\"event_type\\":\\"PURCHASE\\",\\"event_conversion_type\\":\\"WEB\\",\\"timestamp\\":1652368875449,\\"hashed_email\\":\\"cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9\\",\\"hashed_phone_number\\":\\"dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383\\",\\"user_agent\\":\\"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\\",\\"hashed_ip_address\\":\\"838c4c2573848f58e74332341a7ca6bc5cd86a8aec7d644137d53b4d597f10f5\\",\\"price\\":15,\\"currency\\":\\"USD\\",\\"page_url\\":\\"https://segment.com/academy/\\",\\"pixel_id\\":\\"test123\\"}"`);
|
|
55
|
+
});
|
|
56
|
+
it('should fail web event without pixel_id', async () => {
|
|
57
|
+
nock_1.default(conversionEventUrl).post('').reply(400, {});
|
|
58
|
+
const event = actions_core_1.createTestEvent(testEvent);
|
|
59
|
+
await expect(testDestination.testAction('reportConversionEvent', {
|
|
60
|
+
event,
|
|
61
|
+
settings: {
|
|
62
|
+
app_id: 'test123'
|
|
63
|
+
},
|
|
64
|
+
useDefaultMappings: true,
|
|
65
|
+
auth: {
|
|
66
|
+
accessToken,
|
|
67
|
+
refreshToken
|
|
68
|
+
},
|
|
69
|
+
mapping: {
|
|
70
|
+
event_type: 'PURCHASE',
|
|
71
|
+
event_conversion_type: 'WEB'
|
|
72
|
+
}
|
|
73
|
+
})).rejects.toThrowError('If event conversion type is "WEB" then pixel_id must be defined');
|
|
74
|
+
});
|
|
75
|
+
it('should fail web event without snap_app_id', async () => {
|
|
76
|
+
nock_1.default(conversionEventUrl).post('').reply(400, {});
|
|
77
|
+
const event = actions_core_1.createTestEvent(testEvent);
|
|
78
|
+
await expect(testDestination.testAction('reportConversionEvent', {
|
|
79
|
+
event,
|
|
80
|
+
settings: {
|
|
81
|
+
pixel_id: 'test123',
|
|
82
|
+
app_id: 'test123'
|
|
83
|
+
},
|
|
84
|
+
useDefaultMappings: true,
|
|
85
|
+
auth: {
|
|
86
|
+
accessToken,
|
|
87
|
+
refreshToken
|
|
88
|
+
},
|
|
89
|
+
mapping: {
|
|
90
|
+
event_type: 'PURCHASE',
|
|
91
|
+
event_conversion_type: 'MOBILE_APP'
|
|
92
|
+
}
|
|
93
|
+
})).rejects.toThrowError('If event conversion type is "MOBILE_APP" then snap_app_id and app_id must be defined');
|
|
94
|
+
});
|
|
95
|
+
it('should handle an offline event conversion type', async () => {
|
|
96
|
+
nock_1.default(conversionEventUrl).post('').reply(200, {});
|
|
97
|
+
const event = actions_core_1.createTestEvent(testEvent);
|
|
98
|
+
const responses = await testDestination.testAction('reportConversionEvent', {
|
|
99
|
+
event,
|
|
100
|
+
settings,
|
|
101
|
+
useDefaultMappings: true,
|
|
102
|
+
auth: {
|
|
103
|
+
accessToken,
|
|
104
|
+
refreshToken
|
|
105
|
+
},
|
|
106
|
+
mapping: {
|
|
107
|
+
event_type: 'SAVE',
|
|
108
|
+
event_conversion_type: 'OFFLINE'
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
expect(responses).not.toBeNull();
|
|
112
|
+
expect(responses[0].status).toBe(200);
|
|
113
|
+
expect(responses[0].options.body).toMatchInlineSnapshot(`"{\\"event_type\\":\\"SAVE\\",\\"event_conversion_type\\":\\"OFFLINE\\",\\"timestamp\\":1652368875449,\\"hashed_email\\":\\"cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9\\",\\"hashed_phone_number\\":\\"dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383\\",\\"user_agent\\":\\"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\\",\\"hashed_ip_address\\":\\"838c4c2573848f58e74332341a7ca6bc5cd86a8aec7d644137d53b4d597f10f5\\",\\"price\\":15,\\"currency\\":\\"USD\\",\\"page_url\\":\\"https://segment.com/academy/\\",\\"pixel_id\\":\\"test123\\"}"`);
|
|
114
|
+
});
|
|
115
|
+
it('should handle a mobile app event conversion type', async () => {
|
|
116
|
+
nock_1.default(conversionEventUrl).post('').reply(200, {});
|
|
117
|
+
const event = actions_core_1.createTestEvent(testEvent);
|
|
118
|
+
const responses = await testDestination.testAction('reportConversionEvent', {
|
|
119
|
+
event,
|
|
120
|
+
settings: {
|
|
121
|
+
snap_app_id: '123',
|
|
122
|
+
app_id: '123'
|
|
123
|
+
},
|
|
124
|
+
useDefaultMappings: true,
|
|
125
|
+
auth: {
|
|
126
|
+
accessToken,
|
|
127
|
+
refreshToken
|
|
128
|
+
},
|
|
129
|
+
mapping: {
|
|
130
|
+
event_type: 'SAVE',
|
|
131
|
+
event_conversion_type: 'MOBILE_APP'
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
expect(responses).not.toBeNull();
|
|
135
|
+
expect(responses[0].status).toBe(200);
|
|
136
|
+
expect(responses[0].options.body).toMatchInlineSnapshot(`"{\\"event_type\\":\\"SAVE\\",\\"event_conversion_type\\":\\"MOBILE_APP\\",\\"timestamp\\":1652368875449,\\"hashed_email\\":\\"cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9\\",\\"hashed_phone_number\\":\\"dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383\\",\\"user_agent\\":\\"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\\",\\"hashed_ip_address\\":\\"838c4c2573848f58e74332341a7ca6bc5cd86a8aec7d644137d53b4d597f10f5\\",\\"price\\":15,\\"currency\\":\\"USD\\",\\"page_url\\":\\"https://segment.com/academy/\\",\\"snap_app_id\\":\\"123\\",\\"app_id\\":\\"123\\"}"`);
|
|
137
|
+
});
|
|
138
|
+
it('should fail invalid currency', async () => {
|
|
139
|
+
nock_1.default(conversionEventUrl).post('').reply(400, {});
|
|
140
|
+
const event = actions_core_1.createTestEvent({
|
|
141
|
+
...testEvent,
|
|
142
|
+
properties: {
|
|
143
|
+
currency: 'Galleon'
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
await expect(testDestination.testAction('reportConversionEvent', {
|
|
147
|
+
event,
|
|
148
|
+
settings,
|
|
149
|
+
useDefaultMappings: true,
|
|
150
|
+
auth: {
|
|
151
|
+
accessToken,
|
|
152
|
+
refreshToken
|
|
153
|
+
},
|
|
154
|
+
mapping: {
|
|
155
|
+
event_type: 'PURCHASE',
|
|
156
|
+
event_conversion_type: 'WEB'
|
|
157
|
+
}
|
|
158
|
+
})).rejects.toThrowError('Galleon is not a valid currency code.');
|
|
159
|
+
});
|
|
160
|
+
it('should fail missing event conversion type', async () => {
|
|
161
|
+
nock_1.default(conversionEventUrl).post('').reply(400, {});
|
|
162
|
+
const event = actions_core_1.createTestEvent(testEvent);
|
|
163
|
+
await expect(testDestination.testAction('reportConversionEvent', {
|
|
164
|
+
event,
|
|
165
|
+
settings,
|
|
166
|
+
useDefaultMappings: true,
|
|
167
|
+
auth: {
|
|
168
|
+
accessToken,
|
|
169
|
+
refreshToken
|
|
170
|
+
},
|
|
171
|
+
mapping: {
|
|
172
|
+
event_type: 'PURCHASE'
|
|
173
|
+
}
|
|
174
|
+
})).rejects.toThrowError("The root value is missing the required field 'event_conversion_type'.");
|
|
175
|
+
});
|
|
176
|
+
it('should handle a custom event', async () => {
|
|
177
|
+
nock_1.default(conversionEventUrl).post('').reply(200, {});
|
|
178
|
+
const event = actions_core_1.createTestEvent({
|
|
179
|
+
...testEvent,
|
|
180
|
+
event: 'CUSTOM_EVENT_5'
|
|
181
|
+
});
|
|
182
|
+
const responses = await testDestination.testAction('reportConversionEvent', {
|
|
183
|
+
event,
|
|
184
|
+
settings: {
|
|
185
|
+
snap_app_id: '123',
|
|
186
|
+
app_id: '123'
|
|
187
|
+
},
|
|
188
|
+
useDefaultMappings: true,
|
|
189
|
+
auth: {
|
|
190
|
+
accessToken,
|
|
191
|
+
refreshToken
|
|
192
|
+
},
|
|
193
|
+
mapping: {
|
|
194
|
+
event_type: { '@path': '$.event' },
|
|
195
|
+
event_conversion_type: 'MOBILE_APP'
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
expect(responses).not.toBeNull();
|
|
199
|
+
expect(responses[0].status).toBe(200);
|
|
200
|
+
expect(responses[0].options.body).toMatchInlineSnapshot(`"{\\"event_type\\":\\"CUSTOM_EVENT_5\\",\\"event_conversion_type\\":\\"MOBILE_APP\\",\\"timestamp\\":1652368875449,\\"hashed_email\\":\\"cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9\\",\\"hashed_phone_number\\":\\"dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383\\",\\"user_agent\\":\\"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\\",\\"hashed_ip_address\\":\\"838c4c2573848f58e74332341a7ca6bc5cd86a8aec7d644137d53b4d597f10f5\\",\\"price\\":15,\\"currency\\":\\"USD\\",\\"page_url\\":\\"https://segment.com/academy/\\",\\"snap_app_id\\":\\"123\\",\\"app_id\\":\\"123\\"}"`);
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/destinations/snap-conversions-api/_tests_/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../src/destinations/snap-conversions-api/generated-types.ts"],"names":[],"mappings":""}
|