@segment/action-destinations 3.317.0 → 3.319.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/google-campaign-manager-360/common-fields.d.ts +3 -0
- package/dist/destinations/google-campaign-manager-360/common-fields.js +306 -0
- package/dist/destinations/google-campaign-manager-360/common-fields.js.map +1 -0
- package/dist/destinations/google-campaign-manager-360/conversionAdjustmentUpload/generated-types.d.ts +45 -0
- package/dist/destinations/google-campaign-manager-360/conversionAdjustmentUpload/generated-types.js +3 -0
- package/dist/destinations/google-campaign-manager-360/conversionAdjustmentUpload/generated-types.js.map +1 -0
- package/dist/destinations/google-campaign-manager-360/conversionAdjustmentUpload/index.d.ts +5 -0
- package/dist/destinations/google-campaign-manager-360/conversionAdjustmentUpload/index.js +86 -0
- package/dist/destinations/google-campaign-manager-360/conversionAdjustmentUpload/index.js.map +1 -0
- package/dist/destinations/google-campaign-manager-360/conversionUpload/generated-types.d.ts +50 -0
- package/dist/destinations/google-campaign-manager-360/conversionUpload/generated-types.js +3 -0
- package/dist/destinations/google-campaign-manager-360/conversionUpload/generated-types.js.map +1 -0
- package/dist/destinations/google-campaign-manager-360/conversionUpload/index.d.ts +5 -0
- package/dist/destinations/google-campaign-manager-360/conversionUpload/index.js +131 -0
- package/dist/destinations/google-campaign-manager-360/conversionUpload/index.js.map +1 -0
- package/dist/destinations/google-campaign-manager-360/generated-types.d.ts +5 -0
- package/dist/destinations/google-campaign-manager-360/generated-types.js +3 -0
- package/dist/destinations/google-campaign-manager-360/generated-types.js.map +1 -0
- package/dist/destinations/google-campaign-manager-360/index.d.ts +4 -0
- package/dist/destinations/google-campaign-manager-360/index.js +63 -0
- package/dist/destinations/google-campaign-manager-360/index.js.map +1 -0
- package/dist/destinations/google-campaign-manager-360/types.d.ts +116 -0
- package/dist/destinations/google-campaign-manager-360/types.js +23 -0
- package/dist/destinations/google-campaign-manager-360/types.js.map +1 -0
- package/dist/destinations/google-campaign-manager-360/utils.d.ts +21 -0
- package/dist/destinations/google-campaign-manager-360/utils.js +175 -0
- package/dist/destinations/google-campaign-manager-360/utils.js.map +1 -0
- package/dist/destinations/hubspot/upsertObject/dynamic-fields.js +8 -0
- package/dist/destinations/hubspot/upsertObject/dynamic-fields.js.map +1 -1
- package/dist/destinations/index.js +2 -0
- package/dist/destinations/index.js.map +1 -1
- package/dist/destinations/reddit-conversions-api/customEvent/generated-types.d.ts +2 -2
- package/dist/destinations/reddit-conversions-api/fields.js +10 -2
- package/dist/destinations/reddit-conversions-api/fields.js.map +1 -1
- package/dist/destinations/reddit-conversions-api/standardEvent/generated-types.d.ts +2 -2
- package/dist/destinations/reddit-conversions-api/utils.js +10 -2
- package/dist/destinations/reddit-conversions-api/utils.js.map +1 -1
- package/dist/destinations/s3/client.d.ts +15 -0
- package/dist/destinations/s3/client.js +105 -0
- package/dist/destinations/s3/client.js.map +1 -0
- package/dist/destinations/s3/fields.d.ts +3 -0
- package/dist/destinations/s3/fields.js +222 -0
- package/dist/destinations/s3/fields.js.map +1 -0
- package/dist/destinations/s3/functions.d.ts +9 -0
- package/dist/destinations/s3/functions.js +66 -0
- package/dist/destinations/s3/functions.js.map +1 -0
- package/dist/destinations/s3/generated-types.d.ts +6 -0
- package/dist/destinations/s3/generated-types.js +3 -0
- package/dist/destinations/s3/generated-types.js.map +1 -0
- package/dist/destinations/s3/index.d.ts +4 -0
- package/dist/destinations/s3/index.js +46 -0
- package/dist/destinations/s3/index.js.map +1 -0
- package/dist/destinations/s3/syncToS3/generated-types.d.ts +38 -0
- package/dist/destinations/s3/syncToS3/generated-types.js +3 -0
- package/dist/destinations/s3/syncToS3/generated-types.js.map +1 -0
- package/dist/destinations/s3/syncToS3/index.d.ts +5 -0
- package/dist/destinations/s3/syncToS3/index.js +22 -0
- package/dist/destinations/s3/syncToS3/index.js.map +1 -0
- package/dist/destinations/s3/types.d.ts +16 -0
- package/dist/destinations/s3/types.js +3 -0
- package/dist/destinations/s3/types.js.map +1 -0
- package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/functions.d.ts +3 -0
- package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/functions.js +80 -0
- package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/functions.js.map +1 -0
- package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/generated-types.d.ts +12 -0
- package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/generated-types.js +3 -0
- package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/generated-types.js.map +1 -0
- package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/index.d.ts +5 -0
- package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/index.js +100 -0
- package/dist/destinations/stackadapt-audiences/forwardAudienceEvent/index.js.map +1 -0
- package/dist/destinations/stackadapt-audiences/forwardProfile/functions.d.ts +3 -0
- package/dist/destinations/stackadapt-audiences/forwardProfile/functions.js +121 -0
- package/dist/destinations/stackadapt-audiences/forwardProfile/functions.js.map +1 -0
- package/dist/destinations/stackadapt-audiences/forwardProfile/generated-types.d.ts +19 -0
- package/dist/destinations/stackadapt-audiences/forwardProfile/generated-types.js +3 -0
- package/dist/destinations/stackadapt-audiences/forwardProfile/generated-types.js.map +1 -0
- package/dist/destinations/stackadapt-audiences/forwardProfile/index.d.ts +5 -0
- package/dist/destinations/stackadapt-audiences/forwardProfile/index.js +186 -0
- package/dist/destinations/stackadapt-audiences/forwardProfile/index.js.map +1 -0
- package/dist/destinations/stackadapt-audiences/functions.d.ts +6 -0
- package/dist/destinations/stackadapt-audiences/functions.js +54 -0
- package/dist/destinations/stackadapt-audiences/functions.js.map +1 -0
- package/dist/destinations/stackadapt-audiences/generated-types.d.ts +3 -0
- package/dist/destinations/stackadapt-audiences/generated-types.js +3 -0
- package/dist/destinations/stackadapt-audiences/generated-types.js.map +1 -0
- package/dist/destinations/stackadapt-audiences/index.d.ts +4 -0
- package/dist/destinations/stackadapt-audiences/index.js +64 -0
- package/dist/destinations/stackadapt-audiences/index.js.map +1 -0
- package/dist/destinations/stackadapt-audiences/types.d.ts +15 -0
- package/dist/destinations/stackadapt-audiences/types.js +3 -0
- package/dist/destinations/stackadapt-audiences/types.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateFile = exports.getAudienceAction = exports.encodeString = exports.snakeCase = exports.send = void 0;
|
|
4
|
+
const client_1 = require("./client");
|
|
5
|
+
async function send(payloads, settings, rawMapping) {
|
|
6
|
+
const headers = Object.keys(rawMapping.columns).map((column) => {
|
|
7
|
+
return snakeCase(column);
|
|
8
|
+
});
|
|
9
|
+
const actionColName = payloads[0]?.audience_action_column_name;
|
|
10
|
+
const actionColNameSnakeCase = snakeCase(actionColName);
|
|
11
|
+
if (actionColNameSnakeCase) {
|
|
12
|
+
headers.push(actionColNameSnakeCase);
|
|
13
|
+
}
|
|
14
|
+
const delimiter = payloads[0]?.delimiter;
|
|
15
|
+
const fileContent = generateFile(payloads, headers, delimiter, actionColNameSnakeCase);
|
|
16
|
+
const s3Client = new client_1.Client(settings.s3_aws_region, settings.iam_role_arn, settings.iam_external_id);
|
|
17
|
+
await s3Client.uploadS3(settings, fileContent, payloads[0]?.filename_prefix ?? '', payloads[0]?.s3_aws_folder_name ?? '', payloads[0]?.file_extension);
|
|
18
|
+
}
|
|
19
|
+
exports.send = send;
|
|
20
|
+
function snakeCase(str) {
|
|
21
|
+
if (!str) {
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
return str
|
|
25
|
+
.replace(/([a-z])([A-Z])/g, '$1_$2')
|
|
26
|
+
.toLowerCase();
|
|
27
|
+
}
|
|
28
|
+
exports.snakeCase = snakeCase;
|
|
29
|
+
function processField(row, value) {
|
|
30
|
+
row.push(encodeString(value === undefined || value === null
|
|
31
|
+
? ''
|
|
32
|
+
: typeof value === 'object'
|
|
33
|
+
? String(JSON.stringify(value))
|
|
34
|
+
: String(value)));
|
|
35
|
+
}
|
|
36
|
+
function generateFile(payloads, headers, delimiter, actionColName) {
|
|
37
|
+
const rows = [];
|
|
38
|
+
rows.push(`${headers.join(delimiter === 'tab' ? '\t' : delimiter)}\n`);
|
|
39
|
+
payloads.forEach((payload, index) => {
|
|
40
|
+
const isLastRow = index === payloads.length - 1;
|
|
41
|
+
const row = [];
|
|
42
|
+
headers.forEach((header) => {
|
|
43
|
+
if (header === actionColName) {
|
|
44
|
+
processField(row, getAudienceAction(payload));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
processField(row, payload.columns[header]);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
rows.push(`${row.join(delimiter === 'tab' ? '\t' : delimiter)}${isLastRow ? '' : '\n'}`);
|
|
51
|
+
});
|
|
52
|
+
return rows.join('');
|
|
53
|
+
}
|
|
54
|
+
exports.generateFile = generateFile;
|
|
55
|
+
function encodeString(str) {
|
|
56
|
+
return `"${String(str).replace(/"/g, '""')}"`;
|
|
57
|
+
}
|
|
58
|
+
exports.encodeString = encodeString;
|
|
59
|
+
function getAudienceAction(payload) {
|
|
60
|
+
if (!payload.traits_or_props || !payload.computation_key) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
return payload?.traits_or_props?.[payload.computation_key] ?? undefined;
|
|
64
|
+
}
|
|
65
|
+
exports.getAudienceAction = getAudienceAction;
|
|
66
|
+
//# sourceMappingURL=functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/destinations/s3/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../src/destinations/s3/generated-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
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 syncToS3_1 = __importDefault(require("./syncToS3"));
|
|
7
|
+
const destination = {
|
|
8
|
+
name: 'AWS S3',
|
|
9
|
+
slug: 'actions-s3',
|
|
10
|
+
mode: 'cloud',
|
|
11
|
+
description: 'Sync Segment event data to AWS S3.',
|
|
12
|
+
authentication: {
|
|
13
|
+
scheme: 'custom',
|
|
14
|
+
fields: {
|
|
15
|
+
iam_role_arn: {
|
|
16
|
+
label: 'IAM Role ARN',
|
|
17
|
+
description: 'IAM role ARN with write permissions to the S3 bucket. Format: arn:aws:iam::account-id:role/role-name',
|
|
18
|
+
type: 'string',
|
|
19
|
+
required: true
|
|
20
|
+
},
|
|
21
|
+
s3_aws_bucket_name: {
|
|
22
|
+
label: 'AWS Bucket Name',
|
|
23
|
+
description: 'Name of the S3 bucket where the files will be uploaded to.',
|
|
24
|
+
type: 'string',
|
|
25
|
+
required: true
|
|
26
|
+
},
|
|
27
|
+
s3_aws_region: {
|
|
28
|
+
label: 'AWS Region Code',
|
|
29
|
+
description: 'Region Code where the S3 bucket is hosted. See [AWS S3 Documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-regions)',
|
|
30
|
+
type: 'string',
|
|
31
|
+
required: true
|
|
32
|
+
},
|
|
33
|
+
iam_external_id: {
|
|
34
|
+
label: 'IAM External ID',
|
|
35
|
+
description: 'The External ID to your IAM role. Generate a secure string and treat it like a password.',
|
|
36
|
+
type: 'password',
|
|
37
|
+
required: true
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
actions: {
|
|
42
|
+
syncToS3: syncToS3_1.default
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
exports.default = destination;
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/s3/index.ts"],"names":[],"mappings":";;;;;AAEA,0DAAiC;AAEjC,MAAM,WAAW,GAAoC;IACnD,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,oCAAoC;IAEjD,cAAc,EAAE;QACd,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE;YACN,YAAY,EAAE;gBACZ,KAAK,EAAE,cAAc;gBACrB,WAAW,EACT,sGAAsG;gBACxG,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;YACD,kBAAkB,EAAE;gBAClB,KAAK,EAAE,iBAAiB;gBACxB,WAAW,EAAE,4DAA4D;gBACzE,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;YACD,aAAa,EAAE;gBACb,KAAK,EAAE,iBAAiB;gBACxB,WAAW,EACT,mLAAmL;gBACrL,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;YACD,eAAe,EAAE;gBACf,KAAK,EAAE,iBAAiB;gBACxB,WAAW,EAAE,0FAA0F;gBACvG,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;aACf;SACF;KACF;IACD,OAAO,EAAE;QACP,QAAQ,EAAR,kBAAQ;KACT;CACF,CAAA;AAED,kBAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface Payload {
|
|
2
|
+
columns: {
|
|
3
|
+
event_name?: string;
|
|
4
|
+
event_type?: string;
|
|
5
|
+
user_id?: string;
|
|
6
|
+
anonymous_id?: string;
|
|
7
|
+
email?: string;
|
|
8
|
+
properties?: {
|
|
9
|
+
[k: string]: unknown;
|
|
10
|
+
};
|
|
11
|
+
traits?: {
|
|
12
|
+
[k: string]: unknown;
|
|
13
|
+
};
|
|
14
|
+
context?: {
|
|
15
|
+
[k: string]: unknown;
|
|
16
|
+
};
|
|
17
|
+
timestamp?: string;
|
|
18
|
+
message_id?: string;
|
|
19
|
+
integrations?: {
|
|
20
|
+
[k: string]: unknown;
|
|
21
|
+
};
|
|
22
|
+
audience_name?: string;
|
|
23
|
+
audience_id?: string;
|
|
24
|
+
audience_space_id?: string;
|
|
25
|
+
[k: string]: unknown;
|
|
26
|
+
};
|
|
27
|
+
audience_action_column_name?: string;
|
|
28
|
+
traits_or_props?: {
|
|
29
|
+
[k: string]: unknown;
|
|
30
|
+
};
|
|
31
|
+
computation_key?: string;
|
|
32
|
+
enable_batching: boolean;
|
|
33
|
+
batch_size?: number;
|
|
34
|
+
s3_aws_folder_name?: string;
|
|
35
|
+
filename_prefix?: string;
|
|
36
|
+
delimiter: string;
|
|
37
|
+
file_extension: string;
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../../src/destinations/s3/syncToS3/generated-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fields_1 = require("../fields");
|
|
4
|
+
const functions_1 = require("../functions");
|
|
5
|
+
const action = {
|
|
6
|
+
title: 'Sync to S3',
|
|
7
|
+
description: 'Syncs Segment event data to S3.',
|
|
8
|
+
defaultSubscription: 'type = "identify" or type = "track"',
|
|
9
|
+
fields: fields_1.commonFields,
|
|
10
|
+
perform: async (_, data) => {
|
|
11
|
+
const { payload, settings } = data;
|
|
12
|
+
const rawMapping = data.rawMapping;
|
|
13
|
+
return functions_1.send([payload], settings, rawMapping);
|
|
14
|
+
},
|
|
15
|
+
performBatch: async (_, data) => {
|
|
16
|
+
const { payload, settings } = data;
|
|
17
|
+
const rawMapping = data.rawMapping;
|
|
18
|
+
return functions_1.send(payload, settings, rawMapping[0]);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.default = action;
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/s3/syncToS3/index.ts"],"names":[],"mappings":";;AAGA,sCAAwC;AACxC,4CAAmC;AAGnC,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,iCAAiC;IAC9C,mBAAmB,EAAE,qCAAqC;IAC1D,MAAM,EAAE,qBAAY;IACpB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QAClC,MAAM,UAAU,GAAgB,IAA8B,CAAC,UAAU,CAAA;QACzE,OAAO,gBAAI,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAA;IAC9C,CAAC;IACD,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC9B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QAClC,MAAM,UAAU,GAAkB,IAA6B,CAAC,UAAU,CAAA;QAC1E,OAAO,gBAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,CAAC;CACF,CAAA;AAED,kBAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface Credentials {
|
|
2
|
+
accessKeyId: string;
|
|
3
|
+
secretAccessKey: string;
|
|
4
|
+
sessionToken: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SingleData {
|
|
7
|
+
rawMapping: RawMapping;
|
|
8
|
+
}
|
|
9
|
+
export interface BatchData {
|
|
10
|
+
rawMapping: RawMapping[];
|
|
11
|
+
}
|
|
12
|
+
export interface RawMapping {
|
|
13
|
+
columns: {
|
|
14
|
+
[k: string]: unknown;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/destinations/s3/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.performForwardAudienceEvents = void 0;
|
|
4
|
+
const functions_1 = require("../functions");
|
|
5
|
+
const EXTERNAL_PROVIDER = 'segmentio';
|
|
6
|
+
const audienceMapping = functions_1.stringifyJsonWithEscapedQuotes([
|
|
7
|
+
{
|
|
8
|
+
incoming_key: 'audienceId',
|
|
9
|
+
destination_key: 'external_id',
|
|
10
|
+
data_type: 'string'
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
incoming_key: 'audienceName',
|
|
14
|
+
destination_key: 'name',
|
|
15
|
+
data_type: 'string'
|
|
16
|
+
}
|
|
17
|
+
]);
|
|
18
|
+
const profileMapping = functions_1.stringifyJsonWithEscapedQuotes([
|
|
19
|
+
{
|
|
20
|
+
incoming_key: 'userId',
|
|
21
|
+
destination_key: 'external_id',
|
|
22
|
+
data_type: 'string',
|
|
23
|
+
is_pii: false
|
|
24
|
+
}
|
|
25
|
+
]);
|
|
26
|
+
async function performForwardAudienceEvents(request, events) {
|
|
27
|
+
const advertiserId = events[0].advertiser_id;
|
|
28
|
+
const profileUpdates = events.map((event) => {
|
|
29
|
+
const { segment_computation_key: audienceKey, segment_computation_id: audienceId, user_id, traits_or_props } = event;
|
|
30
|
+
const { [audienceKey]: action } = traits_or_props;
|
|
31
|
+
return {
|
|
32
|
+
userId: user_id,
|
|
33
|
+
audienceId,
|
|
34
|
+
audienceName: audienceKey,
|
|
35
|
+
action: action ? 'enter' : 'exit'
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
const profiles = functions_1.stringifyJsonWithEscapedQuotes(profileUpdates);
|
|
39
|
+
const mutation = `mutation {
|
|
40
|
+
upsertProfiles(
|
|
41
|
+
input: {
|
|
42
|
+
advertiserId: ${advertiserId},
|
|
43
|
+
externalProvider: "${EXTERNAL_PROVIDER}",
|
|
44
|
+
syncId: "${functions_1.sha256hash(profiles)}",
|
|
45
|
+
profiles: "${profiles}"
|
|
46
|
+
}
|
|
47
|
+
) {
|
|
48
|
+
userErrors {
|
|
49
|
+
message
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
upsertProfileMapping(
|
|
53
|
+
input: {
|
|
54
|
+
advertiserId: ${advertiserId},
|
|
55
|
+
mappingSchema: "${profileMapping}",
|
|
56
|
+
mappableType: "${EXTERNAL_PROVIDER}",
|
|
57
|
+
}
|
|
58
|
+
) {
|
|
59
|
+
userErrors {
|
|
60
|
+
message
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
upsertExternalAudienceMapping(
|
|
64
|
+
input: {
|
|
65
|
+
advertiserId: ${advertiserId},
|
|
66
|
+
mappingSchema: "${audienceMapping}",
|
|
67
|
+
mappableType: "${EXTERNAL_PROVIDER}"
|
|
68
|
+
}
|
|
69
|
+
) {
|
|
70
|
+
userErrors {
|
|
71
|
+
message
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}`;
|
|
75
|
+
return await request(functions_1.GQL_ENDPOINT, {
|
|
76
|
+
body: JSON.stringify({ query: mutation })
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
exports.performForwardAudienceEvents = performForwardAudienceEvents;
|
|
80
|
+
//# sourceMappingURL=functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../src/destinations/stackadapt-audiences/forwardAudienceEvent/functions.ts"],"names":[],"mappings":";;;AAEA,4CAAuF;AAEvF,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAErC,MAAM,eAAe,GAAG,0CAA8B,CAAC;IACrD;QACE,YAAY,EAAE,YAAY;QAC1B,eAAe,EAAE,aAAa;QAC9B,SAAS,EAAE,QAAQ;KACpB;IACD;QACE,YAAY,EAAE,cAAc;QAC5B,eAAe,EAAE,MAAM;QACvB,SAAS,EAAE,QAAQ;KACpB;CACF,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,0CAA8B,CAAC;IACpD;QACE,YAAY,EAAE,QAAQ;QACtB,eAAe,EAAE,aAAa;QAC9B,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,KAAK;KACd;CACF,CAAC,CAAA;AAEK,KAAK,UAAU,4BAA4B,CAAC,OAAsB,EAAE,MAAiB;IAC1F,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;IAC5C,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1C,MAAM,EAAE,uBAAuB,EAAE,WAAW,EAAE,sBAAsB,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;QAEpH,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe,CAAA;QACjD,OAAO;YACL,MAAM,EAAE,OAAO;YACf,UAAU;YACV,YAAY,EAAE,WAAW;YACzB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;SAClC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,0CAA8B,CAAC,cAAc,CAAC,CAAA;IAC/D,MAAM,QAAQ,GAAG;;;0BAGO,YAAY;+BACP,iBAAiB;qBAC3B,sBAAU,CAAC,QAAQ,CAAC;uBAClB,QAAQ;;;;;;;;;0BASL,YAAY;4BACV,cAAc;2BACf,iBAAiB;;;;;;;;;0BASlB,YAAY;4BACV,eAAe;2BAChB,iBAAiB;;;;;;;MAOtC,CAAA;IACJ,OAAO,MAAM,OAAO,CAAC,wBAAY,EAAE;QACjC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;KAC1C,CAAC,CAAA;AACJ,CAAC;AAtDD,oEAsDC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface Payload {
|
|
2
|
+
traits_or_props: {
|
|
3
|
+
[k: string]: unknown;
|
|
4
|
+
};
|
|
5
|
+
user_id?: string;
|
|
6
|
+
event_type?: string;
|
|
7
|
+
enable_batching: boolean;
|
|
8
|
+
segment_computation_class?: string;
|
|
9
|
+
segment_computation_id?: string;
|
|
10
|
+
segment_computation_key: string;
|
|
11
|
+
advertiser_id: string;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../../src/destinations/stackadapt-audiences/forwardAudienceEvent/generated-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const functions_1 = require("./functions");
|
|
4
|
+
const functions_2 = require("../functions");
|
|
5
|
+
const action = {
|
|
6
|
+
title: 'Forward Audience Event',
|
|
7
|
+
description: 'Forward audience enter or exit events to StackAdapt',
|
|
8
|
+
defaultSubscription: 'type = "identify" or type = "track"',
|
|
9
|
+
fields: {
|
|
10
|
+
traits_or_props: {
|
|
11
|
+
label: 'Event Properties',
|
|
12
|
+
type: 'object',
|
|
13
|
+
description: 'The properties of the user or event.',
|
|
14
|
+
unsafe_hidden: true,
|
|
15
|
+
required: true,
|
|
16
|
+
default: {
|
|
17
|
+
'@if': {
|
|
18
|
+
exists: { '@path': '$.properties.audience_key' },
|
|
19
|
+
then: { '@path': '$.properties' },
|
|
20
|
+
else: { '@path': '$.traits' }
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
user_id: {
|
|
25
|
+
label: 'Segment User ID',
|
|
26
|
+
description: 'The ID of the user in Segment',
|
|
27
|
+
type: 'string',
|
|
28
|
+
default: {
|
|
29
|
+
'@if': {
|
|
30
|
+
exists: { '@path': '$.userId' },
|
|
31
|
+
then: { '@path': '$.userId' },
|
|
32
|
+
else: { '@path': '$.anonymousId' }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
event_type: {
|
|
37
|
+
label: 'Event Type',
|
|
38
|
+
description: 'The Segment event type (identify, alias, etc.)',
|
|
39
|
+
type: 'string',
|
|
40
|
+
default: {
|
|
41
|
+
'@path': '$.type'
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
enable_batching: {
|
|
45
|
+
type: 'boolean',
|
|
46
|
+
label: 'Batch Profiles',
|
|
47
|
+
unsafe_hidden: true,
|
|
48
|
+
description: 'When enabled, Segment will batch profiles together and send them to StackAdapt in a single request.',
|
|
49
|
+
required: true,
|
|
50
|
+
default: true
|
|
51
|
+
},
|
|
52
|
+
segment_computation_class: {
|
|
53
|
+
label: 'Segment Computation Class',
|
|
54
|
+
description: "Segment computation class used to determine if input event is from an Engage Audience'.",
|
|
55
|
+
type: 'string',
|
|
56
|
+
unsafe_hidden: true,
|
|
57
|
+
default: {
|
|
58
|
+
'@path': '$.context.personas.computation_class'
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
segment_computation_id: {
|
|
62
|
+
label: 'Segment Computation ID',
|
|
63
|
+
description: 'For audience enter/exit events, this will be the audience ID.',
|
|
64
|
+
type: 'string',
|
|
65
|
+
unsafe_hidden: true,
|
|
66
|
+
default: {
|
|
67
|
+
'@path': '$.context.personas.computation_id'
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
segment_computation_key: {
|
|
71
|
+
label: 'Segment Computation Key',
|
|
72
|
+
description: 'For audience enter/exit events, this will be the audience key.',
|
|
73
|
+
type: 'string',
|
|
74
|
+
unsafe_hidden: true,
|
|
75
|
+
required: true,
|
|
76
|
+
default: {
|
|
77
|
+
'@path': '$.context.personas.computation_key'
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
advertiser_id: {
|
|
81
|
+
label: 'Advertiser',
|
|
82
|
+
description: 'The StackAdapt advertiser to add the profile to.',
|
|
83
|
+
type: 'string',
|
|
84
|
+
disabledInputMethods: ['literal', 'variable', 'function', 'freeform', 'enrichment'],
|
|
85
|
+
required: true,
|
|
86
|
+
dynamic: true
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
dynamicFields: {
|
|
90
|
+
advertiser_id: functions_2.advertiserIdFieldImplementation
|
|
91
|
+
},
|
|
92
|
+
perform: async (request, { payload }) => {
|
|
93
|
+
return await functions_1.performForwardAudienceEvents(request, [payload]);
|
|
94
|
+
},
|
|
95
|
+
performBatch: async (request, { payload }) => {
|
|
96
|
+
return await functions_1.performForwardAudienceEvents(request, payload);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
exports.default = action;
|
|
100
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/stackadapt-audiences/forwardAudienceEvent/index.ts"],"names":[],"mappings":";;AAGA,2CAA0D;AAC1D,4CAA8D;AAE9D,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EAAE,qDAAqD;IAClE,mBAAmB,EAAE,qCAAqC;IAC1D,MAAM,EAAE;QACN,eAAe,EAAE;YACf,KAAK,EAAE,kBAAkB;YACzB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sCAAsC;YACnD,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE;oBAChD,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;oBACjC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;iBAC9B;aACF;SACF;QACD,OAAO,EAAE;YACP,KAAK,EAAE,iBAAiB;YACxB,WAAW,EAAE,+BAA+B;YAC5C,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBAGP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;oBAC/B,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;oBAC7B,IAAI,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE;iBACnC;aACF;SACF;QACD,UAAU,EAAE;YACV,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,gDAAgD;YAC7D,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,QAAQ;aAClB;SACF;QACD,eAAe,EAAE;YACf,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,gBAAgB;YACvB,aAAa,EAAE,IAAI;YACnB,WAAW,EACT,qGAAqG;YACvG,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;SACd;QACD,yBAAyB,EAAE;YACzB,KAAK,EAAE,2BAA2B;YAClC,WAAW,EAAE,yFAAyF;YACtG,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE;gBACP,OAAO,EAAE,sCAAsC;aAChD;SACF;QACD,sBAAsB,EAAE;YACtB,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,+DAA+D;YAC5E,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE;gBACP,OAAO,EAAE,mCAAmC;aAC7C;SACF;QACD,uBAAuB,EAAE;YACvB,KAAK,EAAE,yBAAyB;YAChC,WAAW,EAAE,gEAAgE;YAC7E,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,oCAAoC;aAC9C;SACF;QACD,aAAa,EAAE;YACb,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,kDAAkD;YAC/D,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC;YACnF,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;SACd;KACF;IACD,aAAa,EAAE;QACb,aAAa,EAAE,2CAA+B;KAC/C;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACtC,OAAO,MAAM,wCAA4B,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/D,CAAC;IACD,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3C,OAAO,MAAM,wCAA4B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC7D,CAAC;CACF,CAAA;AAED,kBAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,121 @@
|
|
|
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.performForwardProfiles = void 0;
|
|
7
|
+
const camelCase_1 = __importDefault(require("lodash/camelCase"));
|
|
8
|
+
const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
|
|
9
|
+
const functions_1 = require("../functions");
|
|
10
|
+
const standardFields = new Set([
|
|
11
|
+
'email',
|
|
12
|
+
'firstName',
|
|
13
|
+
'lastName',
|
|
14
|
+
'phone',
|
|
15
|
+
'marketingStatus',
|
|
16
|
+
'company',
|
|
17
|
+
'gender',
|
|
18
|
+
'city',
|
|
19
|
+
'state',
|
|
20
|
+
'country',
|
|
21
|
+
'timezone',
|
|
22
|
+
'postalCode',
|
|
23
|
+
'birthDay',
|
|
24
|
+
'birthMonth',
|
|
25
|
+
'address',
|
|
26
|
+
'previousId'
|
|
27
|
+
]);
|
|
28
|
+
async function performForwardProfiles(request, events) {
|
|
29
|
+
const fieldsToMap = new Set(['userId']);
|
|
30
|
+
const fieldTypes = { userId: 'string' };
|
|
31
|
+
const advertiserId = events[0].advertiser_id;
|
|
32
|
+
const profileUpdates = events.flatMap((event) => {
|
|
33
|
+
const { event_type, previous_id, user_id, traits } = event;
|
|
34
|
+
const profile = {
|
|
35
|
+
userId: user_id
|
|
36
|
+
};
|
|
37
|
+
if (event_type === 'alias') {
|
|
38
|
+
profile.previousId = previous_id;
|
|
39
|
+
}
|
|
40
|
+
else if (isEmpty_1.default(traits)) {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
const { birthday, ...rest } = traits ?? {};
|
|
44
|
+
if (birthday) {
|
|
45
|
+
const [birthDay, birthMonth] = birthday.split('T')[0].split('-').slice(1);
|
|
46
|
+
profile.birthDay = parseInt(birthDay);
|
|
47
|
+
profile.birthMonth = parseInt(birthMonth);
|
|
48
|
+
}
|
|
49
|
+
return { ...processTraits(rest), ...profile };
|
|
50
|
+
});
|
|
51
|
+
const profiles = functions_1.stringifyJsonWithEscapedQuotes(profileUpdates);
|
|
52
|
+
const mutation = `mutation {
|
|
53
|
+
upsertProfiles(
|
|
54
|
+
input: {
|
|
55
|
+
advertiserId: ${advertiserId},
|
|
56
|
+
externalProvider: "${functions_1.EXTERNAL_PROVIDER}",
|
|
57
|
+
syncId: "${functions_1.sha256hash(profiles)}",
|
|
58
|
+
profiles: "${profiles}"
|
|
59
|
+
}
|
|
60
|
+
) {
|
|
61
|
+
userErrors {
|
|
62
|
+
message
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
upsertProfileMapping(
|
|
66
|
+
input: {
|
|
67
|
+
advertiserId: ${advertiserId},
|
|
68
|
+
mappingSchema: "${getProfileMappings(Array.from(fieldsToMap), fieldTypes)}",
|
|
69
|
+
mappableType: "${functions_1.EXTERNAL_PROVIDER}",
|
|
70
|
+
}
|
|
71
|
+
) {
|
|
72
|
+
userErrors {
|
|
73
|
+
message
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}`;
|
|
77
|
+
return await request(functions_1.GQL_ENDPOINT, {
|
|
78
|
+
body: JSON.stringify({ query: mutation })
|
|
79
|
+
});
|
|
80
|
+
function processTraits(traits) {
|
|
81
|
+
return Object.keys(traits).reduce((acc, key) => {
|
|
82
|
+
const camelCaseKey = camelCase_1.default(key);
|
|
83
|
+
acc[camelCaseKey] = traits[key];
|
|
84
|
+
if (!standardFields.has(camelCaseKey)) {
|
|
85
|
+
fieldsToMap.add(camelCaseKey);
|
|
86
|
+
if (traits[key] || traits[key] === 0) {
|
|
87
|
+
const type = getType(traits[key]);
|
|
88
|
+
if (fieldTypes[camelCaseKey] && fieldTypes[camelCaseKey] !== type) {
|
|
89
|
+
fieldTypes[camelCaseKey] = 'string';
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
fieldTypes[camelCaseKey] = type;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return acc;
|
|
97
|
+
}, {});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.performForwardProfiles = performForwardProfiles;
|
|
101
|
+
function getProfileMappings(customFields, fieldTypes) {
|
|
102
|
+
const mappingSchema = [];
|
|
103
|
+
for (const field of customFields) {
|
|
104
|
+
mappingSchema.push({
|
|
105
|
+
incoming_key: field,
|
|
106
|
+
destination_key: field === 'userId' ? 'external_id' : field,
|
|
107
|
+
data_type: fieldTypes[field] ?? 'string',
|
|
108
|
+
is_pii: false
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return functions_1.stringifyJsonWithEscapedQuotes(mappingSchema);
|
|
112
|
+
}
|
|
113
|
+
function getType(value) {
|
|
114
|
+
if (isDateStr(value))
|
|
115
|
+
return 'date';
|
|
116
|
+
return typeof value;
|
|
117
|
+
}
|
|
118
|
+
function isDateStr(value) {
|
|
119
|
+
return typeof value === 'string' && !isNaN(Date.parse(value));
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../src/destinations/stackadapt-audiences/forwardProfile/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface Payload {
|
|
2
|
+
traits?: {
|
|
3
|
+
email?: string;
|
|
4
|
+
firstName?: string;
|
|
5
|
+
lastName?: string;
|
|
6
|
+
phone?: string;
|
|
7
|
+
city?: string;
|
|
8
|
+
country?: string;
|
|
9
|
+
state?: string;
|
|
10
|
+
postalCode?: string;
|
|
11
|
+
birthday?: string;
|
|
12
|
+
[k: string]: unknown;
|
|
13
|
+
};
|
|
14
|
+
user_id?: string;
|
|
15
|
+
previous_id?: string;
|
|
16
|
+
event_type?: string;
|
|
17
|
+
enable_batching: boolean;
|
|
18
|
+
advertiser_id: string;
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../../src/destinations/stackadapt-audiences/forwardProfile/generated-types.ts"],"names":[],"mappings":""}
|