@segment/action-destinations 3.251.1-staging → 3.251.1-staging-2dc1daa0
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/blackbaud-raisers-edge-nxt/utils/index.d.ts +1 -1
- package/dist/destinations/index.js +1 -1
- package/dist/destinations/index.js.map +1 -1
- package/dist/destinations/moloco-rmp/addToCart/index.js.map +1 -1
- package/dist/destinations/moloco-rmp/addToWishlist/index.js +1 -1
- package/dist/destinations/moloco-rmp/addToWishlist/index.js.map +1 -1
- package/dist/destinations/moloco-rmp/common/convert.js +17 -29
- package/dist/destinations/moloco-rmp/common/convert.js.map +1 -1
- package/dist/destinations/moloco-rmp/common/event.js.map +1 -1
- package/dist/destinations/moloco-rmp/common/fields.js +10 -10
- package/dist/destinations/moloco-rmp/common/fields.js.map +1 -1
- package/dist/destinations/moloco-rmp/common/request-client.js.map +1 -1
- package/dist/destinations/moloco-rmp/home/index.js +1 -1
- package/dist/destinations/moloco-rmp/home/index.js.map +1 -1
- package/dist/destinations/moloco-rmp/itemPageView/index.js +1 -1
- package/dist/destinations/moloco-rmp/itemPageView/index.js.map +1 -1
- package/dist/destinations/moloco-rmp/land/index.js +1 -1
- package/dist/destinations/moloco-rmp/land/index.js.map +1 -1
- package/dist/destinations/moloco-rmp/pageView/index.js.map +1 -1
- package/dist/destinations/moloco-rmp/purchase/index.js.map +1 -1
- package/dist/destinations/moloco-rmp/search/index.js.map +1 -1
- package/dist/destinations/responsys/sendAudience/index.js +4 -4
- package/dist/destinations/responsys/sendAudience/index.js.map +1 -1
- package/dist/destinations/responsys/sendCustomTraits/index.js +4 -4
- package/dist/destinations/responsys/sendCustomTraits/index.js.map +1 -1
- package/dist/destinations/responsys/utils.d.ts +3 -2
- package/dist/destinations/responsys/utils.js +11 -2
- package/dist/destinations/responsys/utils.js.map +1 -1
- package/dist/destinations/responsys-cloud/generated-types.d.ts +20 -0
- package/dist/destinations/responsys-cloud/generated-types.js.map +1 -0
- package/dist/destinations/responsys-cloud/index.d.ts +4 -0
- package/dist/destinations/responsys-cloud/index.js +207 -0
- package/dist/destinations/responsys-cloud/index.js.map +1 -0
- package/dist/destinations/responsys-cloud/sendAudience/generated-types.d.ts +16 -0
- package/dist/destinations/responsys-cloud/sendAudience/generated-types.js.map +1 -0
- package/dist/destinations/responsys-cloud/sendAudience/index.js +109 -0
- package/dist/destinations/responsys-cloud/sendAudience/index.js.map +1 -0
- package/dist/destinations/responsys-cloud/sendCustomTraits/generated-types.d.ts +11 -0
- package/dist/destinations/responsys-cloud/sendCustomTraits/generated-types.js +3 -0
- package/dist/destinations/responsys-cloud/sendCustomTraits/generated-types.js.map +1 -0
- package/dist/destinations/responsys-cloud/sendCustomTraits/index.js +72 -0
- package/dist/destinations/responsys-cloud/sendCustomTraits/index.js.map +1 -0
- package/dist/destinations/{responsys/rsp-properties.d.ts → responsys-cloud/shared_properties.d.ts} +0 -1
- package/dist/destinations/{responsys/rsp-properties.js → responsys-cloud/shared_properties.js} +2 -10
- package/dist/destinations/responsys-cloud/shared_properties.js.map +1 -0
- package/dist/destinations/responsys-cloud/types.d.ts +38 -0
- package/dist/destinations/{engage/sendgrid/Profile.js → responsys-cloud/types.js} +1 -1
- package/dist/destinations/responsys-cloud/types.js.map +1 -0
- package/dist/destinations/responsys-cloud/upsertListMember/generated-types.d.ts +14 -0
- package/dist/destinations/responsys-cloud/upsertListMember/generated-types.js +3 -0
- package/dist/destinations/responsys-cloud/upsertListMember/generated-types.js.map +1 -0
- package/dist/destinations/responsys-cloud/upsertListMember/index.d.ts +5 -0
- package/dist/destinations/responsys-cloud/upsertListMember/index.js +85 -0
- package/dist/destinations/responsys-cloud/upsertListMember/index.js.map +1 -0
- package/dist/destinations/responsys-cloud/utils.d.ts +20 -0
- package/dist/destinations/responsys-cloud/utils.js +179 -0
- package/dist/destinations/responsys-cloud/utils.js.map +1 -0
- package/package.json +1 -1
- package/dist/destinations/engage/sendgrid/Profile.d.ts +0 -6
- package/dist/destinations/engage/sendgrid/Profile.js.map +0 -1
- package/dist/destinations/engage/sendgrid/previewApiLookup/api-lookups.d.ts +0 -21
- package/dist/destinations/engage/sendgrid/previewApiLookup/api-lookups.js +0 -174
- package/dist/destinations/engage/sendgrid/previewApiLookup/api-lookups.js.map +0 -1
- package/dist/destinations/mixpanel/utils.d.ts +0 -13
- package/dist/destinations/mixpanel/utils.js +0 -117
- package/dist/destinations/mixpanel/utils.js.map +0 -1
- package/dist/destinations/responsys/asyncMergePetRecords/generated-types.d.ts +0 -14
- package/dist/destinations/responsys/asyncMergePetRecords/generated-types.js.map +0 -1
- package/dist/destinations/responsys/asyncMergePetRecords/index.js +0 -113
- package/dist/destinations/responsys/asyncMergePetRecords/index.js.map +0 -1
- package/dist/destinations/responsys/asyncMergeProfileListMembers/generated-types.d.ts +0 -20
- package/dist/destinations/responsys/asyncMergeProfileListMembers/generated-types.js.map +0 -1
- package/dist/destinations/responsys/asyncMergeProfileListMembers/index.js +0 -174
- package/dist/destinations/responsys/asyncMergeProfileListMembers/index.js.map +0 -1
- package/dist/destinations/responsys/rsp-operations.d.ts +0 -14
- package/dist/destinations/responsys/rsp-operations.js +0 -33
- package/dist/destinations/responsys/rsp-operations.js.map +0 -1
- package/dist/destinations/responsys/rsp-properties.js.map +0 -1
- package/dist/destinations/tiktok-offline-conversions/reportOfflineEvent/formatter.d.ts +0 -3
- package/dist/destinations/tiktok-offline-conversions/reportOfflineEvent/formatter.js +0 -43
- package/dist/destinations/tiktok-offline-conversions/reportOfflineEvent/formatter.js.map +0 -1
- /package/dist/destinations/{responsys/asyncMergePetRecords → responsys-cloud}/generated-types.js +0 -0
- /package/dist/destinations/{responsys/asyncMergeProfileListMembers → responsys-cloud/sendAudience}/generated-types.js +0 -0
- /package/dist/destinations/{responsys/asyncMergePetRecords → responsys-cloud/sendAudience}/index.d.ts +0 -0
- /package/dist/destinations/{responsys/asyncMergeProfileListMembers → responsys-cloud/sendCustomTraits}/index.d.ts +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const shared_properties_1 = require("../shared_properties");
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
const action = {
|
|
6
|
+
title: 'Upsert Profile List Member',
|
|
7
|
+
description: 'Create or update a Profile List Member in Responsys',
|
|
8
|
+
defaultSubscription: 'type = "identify"',
|
|
9
|
+
fields: {
|
|
10
|
+
userData: {
|
|
11
|
+
label: 'Recipient Data',
|
|
12
|
+
description: 'Record data that represents field names and corresponding values for each profile.',
|
|
13
|
+
type: 'object',
|
|
14
|
+
defaultObjectUI: 'keyvalue',
|
|
15
|
+
required: true,
|
|
16
|
+
additionalProperties: true,
|
|
17
|
+
properties: {
|
|
18
|
+
EMAIL_ADDRESS_: {
|
|
19
|
+
label: 'Email Address',
|
|
20
|
+
description: "The user's email address.",
|
|
21
|
+
type: 'string',
|
|
22
|
+
format: 'email',
|
|
23
|
+
required: false
|
|
24
|
+
},
|
|
25
|
+
EMAIL_MD5_HASH_: {
|
|
26
|
+
label: 'Email Address MD5 Hash',
|
|
27
|
+
description: "An MD5 Hash of the user's email address.",
|
|
28
|
+
type: 'string',
|
|
29
|
+
required: false
|
|
30
|
+
},
|
|
31
|
+
EMAIL_SHA256_HASH_: {
|
|
32
|
+
label: 'Email Address SHA256 Hash',
|
|
33
|
+
description: "A SHA256 Hash of the user's email address.",
|
|
34
|
+
type: 'string',
|
|
35
|
+
required: false
|
|
36
|
+
},
|
|
37
|
+
RIID_: {
|
|
38
|
+
label: 'Recipient ID',
|
|
39
|
+
description: 'Recipient ID (RIID). RIID is required if Email Address is empty.',
|
|
40
|
+
type: 'string',
|
|
41
|
+
required: false
|
|
42
|
+
},
|
|
43
|
+
CUSTOMER_ID_: {
|
|
44
|
+
label: 'Customer ID',
|
|
45
|
+
description: 'Responsys Customer ID.',
|
|
46
|
+
type: 'string',
|
|
47
|
+
required: false
|
|
48
|
+
},
|
|
49
|
+
MOBILE_NUMBER_: {
|
|
50
|
+
label: 'Mobile Number',
|
|
51
|
+
description: "The user's Mobile Phone Number.",
|
|
52
|
+
type: 'string',
|
|
53
|
+
required: false
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
default: {
|
|
57
|
+
EMAIL_ADDRESS_: { '@path': '$.traits.email' },
|
|
58
|
+
EMAIL_MD5_HASH_: { '@path': '$.traits.email_md5_hash_' },
|
|
59
|
+
EMAIL_SHA256_HASH_: { '@path': '$.traits.email_sha256_hash' },
|
|
60
|
+
CUSTOMER_ID_: { '@path': '$.userId' },
|
|
61
|
+
MOBILE_NUMBER_: { '@path': '$.traits.phone' }
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
stringify: {
|
|
65
|
+
label: 'Stringify Recipient Data',
|
|
66
|
+
description: 'If true, all Recipient data will be converted to strings before being sent to Responsys.',
|
|
67
|
+
type: 'boolean',
|
|
68
|
+
required: true,
|
|
69
|
+
default: false
|
|
70
|
+
},
|
|
71
|
+
enable_batching: shared_properties_1.enable_batching,
|
|
72
|
+
batch_size: shared_properties_1.batch_size
|
|
73
|
+
},
|
|
74
|
+
perform: async (request, data) => {
|
|
75
|
+
const userDataFieldNames = utils_1.getUserDataFieldNames(data);
|
|
76
|
+
utils_1.validateListMemberPayload(data.payload.userData);
|
|
77
|
+
return utils_1.upsertListMembers(request, [data.payload], data.settings, userDataFieldNames);
|
|
78
|
+
},
|
|
79
|
+
performBatch: async (request, data) => {
|
|
80
|
+
const userDataFieldNames = utils_1.getUserDataFieldNames(data);
|
|
81
|
+
return utils_1.upsertListMembers(request, data.payload, data.settings, userDataFieldNames);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
exports.default = action;
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/responsys-cloud/upsertListMember/index.ts"],"names":[],"mappings":";;AAGA,4DAAkE;AAClE,oCAA8F;AAG9F,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,4BAA4B;IACnC,WAAW,EAAE,qDAAqD;IAClE,mBAAmB,EAAE,mBAAmB;IACxC,MAAM,EAAE;QACN,QAAQ,EAAE;YACR,KAAK,EAAE,gBAAgB;YACvB,WAAW,EAAE,oFAAoF;YACjG,IAAI,EAAE,QAAQ;YACd,eAAe,EAAE,UAAU;YAC3B,QAAQ,EAAE,IAAI;YACd,oBAAoB,EAAE,IAAI;YAC1B,UAAU,EAAE;gBACV,cAAc,EAAE;oBACd,KAAK,EAAE,eAAe;oBACtB,WAAW,EAAE,2BAA2B;oBACxC,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,KAAK;iBAChB;gBACD,eAAe,EAAE;oBACf,KAAK,EAAE,wBAAwB;oBAC/B,WAAW,EAAE,0CAA0C;oBACvD,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,KAAK;iBAChB;gBACD,kBAAkB,EAAE;oBAClB,KAAK,EAAE,2BAA2B;oBAClC,WAAW,EAAE,4CAA4C;oBACzD,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,KAAK;iBAChB;gBACD,KAAK,EAAE;oBACL,KAAK,EAAE,cAAc;oBACrB,WAAW,EAAE,mEAAmE;oBAChF,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,KAAK;iBAChB;gBACD,YAAY,EAAE;oBACZ,KAAK,EAAE,aAAa;oBACpB,WAAW,EAAE,wBAAwB;oBACrC,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,KAAK;iBAChB;gBACD,cAAc,EAAE;oBACd,KAAK,EAAE,eAAe;oBACtB,WAAW,EAAE,iCAAiC;oBAC9C,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,KAAK;iBAChB;aACF;YACD,OAAO,EAAE;gBACP,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;gBAC7C,eAAe,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE;gBACxD,kBAAkB,EAAE,EAAE,OAAO,EAAE,4BAA4B,EAAE;gBAC7D,YAAY,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;gBACrC,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;aAC9C;SACF;QACD,SAAS,EAAE;YACT,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,0FAA0F;YACvG,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,KAAK;SACf;QACD,eAAe,EAAE,mCAAe;QAChC,UAAU,EAAE,8BAAU;KACvB;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,kBAAkB,GAAG,6BAAqB,CAAC,IAAuB,CAAC,CAAA;QAEzE,iCAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAEhD,OAAO,yBAAiB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;IACtF,CAAC;IAED,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACpC,MAAM,kBAAkB,GAAG,6BAAqB,CAAC,IAAuB,CAAC,CAAA;QAEzE,OAAO,yBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;IACpF,CAAC;CACF,CAAA;AAED,kBAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Payload as CustomTraitsPayload } from './sendCustomTraits/generated-types';
|
|
2
|
+
import { Payload as AudiencePayload } from './sendAudience/generated-types';
|
|
3
|
+
import { Payload as ListMemberPayload } from './upsertListMember/generated-types';
|
|
4
|
+
import { Data } from './types';
|
|
5
|
+
import { RequestClient, StatsContext } from '@segment/actions-core';
|
|
6
|
+
import type { Settings } from './generated-types';
|
|
7
|
+
export declare const validateCustomTraits: ({ profileExtensionTable, timestamp, statsContext }: {
|
|
8
|
+
profileExtensionTable?: string | undefined;
|
|
9
|
+
timestamp: string | number;
|
|
10
|
+
statsContext: StatsContext | undefined;
|
|
11
|
+
}) => void;
|
|
12
|
+
export declare const shouldRetry: (timestamp: string | number) => boolean;
|
|
13
|
+
export declare const validateListMemberPayload: ({ EMAIL_ADDRESS_, RIID_, CUSTOMER_ID_ }: {
|
|
14
|
+
EMAIL_ADDRESS_?: string | undefined;
|
|
15
|
+
RIID_?: string | undefined;
|
|
16
|
+
CUSTOMER_ID_?: string | undefined;
|
|
17
|
+
}) => void;
|
|
18
|
+
export declare const getUserDataFieldNames: (data: Data) => string[];
|
|
19
|
+
export declare const sendCustomTraits: (request: RequestClient, payload: CustomTraitsPayload[] | AudiencePayload[], settings: Settings, userDataFieldNames: string[], isAudience?: boolean | undefined) => Promise<import("@segment/actions-core").ModifiedResponse<unknown>>;
|
|
20
|
+
export declare const upsertListMembers: (request: RequestClient, payload: ListMemberPayload[], settings: Settings, userDataFieldNames: string[]) => Promise<import("@segment/actions-core").ModifiedResponse<unknown>>;
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.upsertListMembers = exports.sendCustomTraits = exports.getUserDataFieldNames = exports.validateListMemberPayload = exports.shouldRetry = exports.validateCustomTraits = void 0;
|
|
4
|
+
const actions_core_1 = require("@segment/actions-core");
|
|
5
|
+
const validateCustomTraits = ({ profileExtensionTable, timestamp, statsContext }) => {
|
|
6
|
+
const statsClient = statsContext?.statsClient;
|
|
7
|
+
const statsTag = statsContext?.tags;
|
|
8
|
+
if (exports.shouldRetry(timestamp)) {
|
|
9
|
+
if (statsClient && statsTag) {
|
|
10
|
+
statsClient?.incr('responsysShouldRetryTRUE', 1, statsTag);
|
|
11
|
+
}
|
|
12
|
+
throw new actions_core_1.RetryableError('Event timestamp is within the retry window. Artificial delay to retry this event.', 429);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
if (statsClient && statsTag) {
|
|
16
|
+
statsClient?.incr('responsysShouldRetryFALSE', 1, statsTag);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
if (!(typeof profileExtensionTable !== 'undefined' &&
|
|
20
|
+
profileExtensionTable !== null &&
|
|
21
|
+
profileExtensionTable.trim().length > 0)) {
|
|
22
|
+
throw new actions_core_1.IntegrationError('Send Custom Traits Action requires "PET Name" setting field to be populated', 'PET_NAME_SETTING_MISSING', 400);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
exports.validateCustomTraits = validateCustomTraits;
|
|
26
|
+
const RETRY_MINUTES = 2;
|
|
27
|
+
const shouldRetry = (timestamp) => {
|
|
28
|
+
return (new Date().getTime() - new Date(timestamp).getTime()) / (1000 * 60) < RETRY_MINUTES;
|
|
29
|
+
};
|
|
30
|
+
exports.shouldRetry = shouldRetry;
|
|
31
|
+
const validateListMemberPayload = ({ EMAIL_ADDRESS_, RIID_, CUSTOMER_ID_ }) => {
|
|
32
|
+
if (!EMAIL_ADDRESS_ && !RIID_ && !CUSTOMER_ID_) {
|
|
33
|
+
throw new actions_core_1.PayloadValidationError('At least one of the following fields is required: Email Address, RIID, or Customer ID');
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.validateListMemberPayload = validateListMemberPayload;
|
|
37
|
+
const getUserDataFieldNames = (data) => {
|
|
38
|
+
return Object.keys(data.rawMapping.userData);
|
|
39
|
+
};
|
|
40
|
+
exports.getUserDataFieldNames = getUserDataFieldNames;
|
|
41
|
+
const stringifyObject = (obj) => {
|
|
42
|
+
const stringifiedObj = {};
|
|
43
|
+
for (const key in obj) {
|
|
44
|
+
stringifiedObj[key] = typeof obj[key] !== 'string' ? JSON.stringify(obj[key]) : obj[key];
|
|
45
|
+
}
|
|
46
|
+
return stringifiedObj;
|
|
47
|
+
};
|
|
48
|
+
const sendCustomTraits = async (request, payload, settings, userDataFieldNames, isAudience) => {
|
|
49
|
+
let userDataArray;
|
|
50
|
+
if (isAudience) {
|
|
51
|
+
const audiencePayloads = payload;
|
|
52
|
+
userDataArray = audiencePayloads.map((obj) => {
|
|
53
|
+
const traitValue = obj.computation_key
|
|
54
|
+
? { [obj.computation_key.toUpperCase()]: obj.traits_or_props[obj.computation_key] }
|
|
55
|
+
: {};
|
|
56
|
+
userDataFieldNames.push(obj.computation_key.toUpperCase());
|
|
57
|
+
return {
|
|
58
|
+
...(obj.stringify ? stringifyObject(obj.userData) : obj.userData),
|
|
59
|
+
...(obj.stringify ? stringifyObject(traitValue) : traitValue)
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
const customTraitsPayloads = payload;
|
|
65
|
+
userDataArray = customTraitsPayloads.map((obj) => (obj.stringify ? stringifyObject(obj.userData) : obj.userData));
|
|
66
|
+
}
|
|
67
|
+
const records = userDataArray.map((userData) => {
|
|
68
|
+
return userDataFieldNames.map((fieldName) => {
|
|
69
|
+
return userData && fieldName in userData
|
|
70
|
+
? userData[fieldName]
|
|
71
|
+
: '';
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
const recordData = {
|
|
75
|
+
fieldNames: userDataFieldNames.map((field) => field.toUpperCase()),
|
|
76
|
+
records,
|
|
77
|
+
mapTemplateName: ''
|
|
78
|
+
};
|
|
79
|
+
const requestBody = {
|
|
80
|
+
recordData,
|
|
81
|
+
insertOnNoMatch: settings.insertOnNoMatch,
|
|
82
|
+
updateOnMatch: settings.updateOnMatch,
|
|
83
|
+
matchColumnName1: settings.matchColumnName1,
|
|
84
|
+
matchColumnName2: settings.matchColumnName2 || ''
|
|
85
|
+
};
|
|
86
|
+
const path = `/rest/asyncApi/v1.3/lists/${settings.profileListName}/listExtensions/${settings.profileExtensionTable}/members`;
|
|
87
|
+
const endpoint = new URL(path, settings.baseUrl);
|
|
88
|
+
const response = await request(endpoint.href, {
|
|
89
|
+
method: 'POST',
|
|
90
|
+
body: JSON.stringify(requestBody)
|
|
91
|
+
});
|
|
92
|
+
if (settings.segmentWriteKey && settings.segmentWriteKeyRegion) {
|
|
93
|
+
try {
|
|
94
|
+
const body = response.data;
|
|
95
|
+
await request(settings.segmentWriteKeyRegion === 'EU'
|
|
96
|
+
? 'events.eu1.segmentapis.com/v1/track'
|
|
97
|
+
: 'https://api.segment.io/v1/track', {
|
|
98
|
+
method: 'POST',
|
|
99
|
+
headers: {
|
|
100
|
+
Authorization: 'Basic ' + Buffer.from(settings.segmentWriteKey + ': ').toString('base64'),
|
|
101
|
+
'Content-Type': 'application/json'
|
|
102
|
+
},
|
|
103
|
+
body: JSON.stringify({
|
|
104
|
+
type: 'track',
|
|
105
|
+
event: 'Responsys Response Message Received',
|
|
106
|
+
properties: body,
|
|
107
|
+
anonymousId: '__responsys__API__response__'
|
|
108
|
+
})
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return response;
|
|
115
|
+
};
|
|
116
|
+
exports.sendCustomTraits = sendCustomTraits;
|
|
117
|
+
const upsertListMembers = async (request, payload, settings, userDataFieldNames) => {
|
|
118
|
+
const userDataArray = payload.map((obj) => (obj.stringify ? stringifyObject(obj.userData) : obj.userData));
|
|
119
|
+
const records = userDataArray.map((userData) => {
|
|
120
|
+
return userDataFieldNames.map((fieldName) => {
|
|
121
|
+
return userData && fieldName in userData
|
|
122
|
+
? userData[fieldName]
|
|
123
|
+
: '';
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
const recordData = {
|
|
127
|
+
fieldNames: userDataFieldNames,
|
|
128
|
+
records,
|
|
129
|
+
mapTemplateName: ''
|
|
130
|
+
};
|
|
131
|
+
const mergeRule = {
|
|
132
|
+
htmlValue: settings.htmlValue,
|
|
133
|
+
optinValue: settings.optinValue,
|
|
134
|
+
textValue: settings.textValue,
|
|
135
|
+
insertOnNoMatch: settings.insertOnNoMatch,
|
|
136
|
+
updateOnMatch: settings.updateOnMatch,
|
|
137
|
+
matchColumnName1: settings.matchColumnName1 + '_',
|
|
138
|
+
matchColumnName2: settings.matchColumnName2 ? settings.matchColumnName2 + '_' : '',
|
|
139
|
+
matchOperator: settings.matchOperator,
|
|
140
|
+
optoutValue: settings.optoutValue,
|
|
141
|
+
rejectRecordIfChannelEmpty: settings.rejectRecordIfChannelEmpty,
|
|
142
|
+
defaultPermissionStatus: settings.defaultPermissionStatus
|
|
143
|
+
};
|
|
144
|
+
const requestBody = {
|
|
145
|
+
recordData,
|
|
146
|
+
mergeRule
|
|
147
|
+
};
|
|
148
|
+
const path = `/rest/asyncApi/v1.3/lists/${settings.profileListName}/members`;
|
|
149
|
+
const endpoint = new URL(path, settings.baseUrl);
|
|
150
|
+
const response = await request(endpoint.href, {
|
|
151
|
+
method: 'POST',
|
|
152
|
+
body: JSON.stringify(requestBody)
|
|
153
|
+
});
|
|
154
|
+
if (settings.segmentWriteKey && settings.segmentWriteKeyRegion) {
|
|
155
|
+
try {
|
|
156
|
+
const body = response.data;
|
|
157
|
+
await request(settings.segmentWriteKeyRegion === 'EU'
|
|
158
|
+
? 'events.eu1.segmentapis.com/v1/track'
|
|
159
|
+
: 'https://api.segment.io/v1/track', {
|
|
160
|
+
method: 'POST',
|
|
161
|
+
headers: {
|
|
162
|
+
Authorization: 'Basic ' + Buffer.from(settings.segmentWriteKey + ': ').toString('base64'),
|
|
163
|
+
'Content-Type': 'application/json'
|
|
164
|
+
},
|
|
165
|
+
body: JSON.stringify({
|
|
166
|
+
type: 'track',
|
|
167
|
+
event: 'Responsys Response Message Received',
|
|
168
|
+
properties: body,
|
|
169
|
+
anonymousId: '__responsys__API__response__'
|
|
170
|
+
})
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return response;
|
|
177
|
+
};
|
|
178
|
+
exports.upsertListMembers = upsertListMembers;
|
|
179
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/destinations/responsys-cloud/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@segment/action-destinations",
|
|
3
3
|
"description": "Destination Actions engine and definitions.",
|
|
4
|
-
"version": "3.251.1-staging",
|
|
4
|
+
"version": "3.251.1-staging-2dc1daa0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/segmentio/action-destinations",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Profile.js","sourceRoot":"","sources":["../../../../src/destinations/engage/sendgrid/Profile.ts"],"names":[],"mappings":""}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { InputField } from '@segment/actions-core';
|
|
2
|
-
import { RequestClient } from '@segment/actions-core';
|
|
3
|
-
import { Logger, StatsClient, DataFeedCache } from '@segment/actions-core/destination-kit';
|
|
4
|
-
import type { Settings } from '../generated-types';
|
|
5
|
-
import { Profile } from '../Profile';
|
|
6
|
-
export declare type ApiLookupConfig = {
|
|
7
|
-
id?: string | undefined;
|
|
8
|
-
name: string;
|
|
9
|
-
url: string;
|
|
10
|
-
method: string;
|
|
11
|
-
cacheTtl: number;
|
|
12
|
-
body?: string | undefined;
|
|
13
|
-
headers?: object | undefined;
|
|
14
|
-
responseType: string;
|
|
15
|
-
};
|
|
16
|
-
export declare const getRequestId: ({ method, url, body, headers }: ApiLookupConfig) => string;
|
|
17
|
-
export declare const getCachedResponse: ({ responseType }: ApiLookupConfig, requestId: string, dataFeedCache: DataFeedCache, datafeedTags: string[]) => Promise<any>;
|
|
18
|
-
export declare const performApiLookup: (request: RequestClient, apiLookupConfig: ApiLookupConfig, profile: Profile, statsClient: StatsClient | undefined, tags: string[], settings: Settings, logger?: Logger | undefined, dataFeedCache?: DataFeedCache | undefined) => Promise<any>;
|
|
19
|
-
export declare const apiLookupActionFields: Record<string, InputField>;
|
|
20
|
-
export declare const apiLookupLiquidKey = "lookups";
|
|
21
|
-
export declare const FLAGON_NAME_DATA_FEEDS = "is-datafeeds-enabled";
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FLAGON_NAME_DATA_FEEDS = exports.apiLookupLiquidKey = exports.apiLookupActionFields = exports.performApiLookup = exports.getCachedResponse = exports.getRequestId = void 0;
|
|
4
|
-
const crypto_1 = require("crypto");
|
|
5
|
-
const actions_core_1 = require("@segment/actions-core");
|
|
6
|
-
const liquidjs_1 = require("liquidjs");
|
|
7
|
-
const Liquid = new liquidjs_1.Liquid();
|
|
8
|
-
const maxResponseSizeBytes = 1000000;
|
|
9
|
-
const renderLiquidFields = async ({ id, url, body }, profile, datafeedTags, settings, logger) => {
|
|
10
|
-
let renderedUrl;
|
|
11
|
-
let renderedBody;
|
|
12
|
-
try {
|
|
13
|
-
renderedUrl = await Liquid.parseAndRender(url, { profile });
|
|
14
|
-
}
|
|
15
|
-
catch (error) {
|
|
16
|
-
logger?.error(`TE Messaging: Email datafeed url parse failure - api lookup id: ${id} - ${settings.spaceId} - [${error}]`);
|
|
17
|
-
datafeedTags.push('error:true', `error_message:${error?.message}`, 'reason:rendering_failure', 'rendering:url');
|
|
18
|
-
throw new actions_core_1.IntegrationError('Unable to parse email api lookup url', 'api lookup url parse failure', 400);
|
|
19
|
-
}
|
|
20
|
-
try {
|
|
21
|
-
renderedBody = body ? await Liquid.parseAndRender(body, { profile }) : undefined;
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
logger?.error(`TE Messaging: Email datafeed body parse failure - api lookup id: ${id} - ${settings.spaceId} - [${error}]`);
|
|
25
|
-
datafeedTags.push('error:true', `error_message:${error?.message}`, 'reason:rendering_failure', 'rendering:body');
|
|
26
|
-
throw new actions_core_1.IntegrationError('Unable to parse email api lookup body', 'api lookup body parse failure', 400);
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
29
|
-
renderedUrl,
|
|
30
|
-
renderedBody
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
const getRequestId = ({ method, url, body, headers }) => {
|
|
34
|
-
const requestHash = crypto_1.createHash('sha256');
|
|
35
|
-
requestHash.update(`${method}${url}${body}${JSON.stringify(headers)}`);
|
|
36
|
-
const requestId = requestHash.digest('hex');
|
|
37
|
-
return requestId;
|
|
38
|
-
};
|
|
39
|
-
exports.getRequestId = getRequestId;
|
|
40
|
-
const getCachedResponse = async ({ responseType }, requestId, dataFeedCache, datafeedTags) => {
|
|
41
|
-
const cachedResponse = await dataFeedCache?.getRequestResponse(requestId);
|
|
42
|
-
if (!cachedResponse) {
|
|
43
|
-
datafeedTags.push('cache_hit:false');
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
datafeedTags.push('cache_hit:true');
|
|
47
|
-
if (responseType === 'json') {
|
|
48
|
-
return JSON.parse(cachedResponse);
|
|
49
|
-
}
|
|
50
|
-
return cachedResponse;
|
|
51
|
-
};
|
|
52
|
-
exports.getCachedResponse = getCachedResponse;
|
|
53
|
-
const performApiLookup = async (request, apiLookupConfig, profile, statsClient, tags, settings, logger, dataFeedCache) => {
|
|
54
|
-
const { id, method, headers, cacheTtl, name } = apiLookupConfig;
|
|
55
|
-
const datafeedTags = [
|
|
56
|
-
...tags,
|
|
57
|
-
`datafeed_id:${id}`,
|
|
58
|
-
`datafeed_name:${name}`,
|
|
59
|
-
`space_id:${settings.spaceId}`,
|
|
60
|
-
`cache_ttl_greater_than_0:${cacheTtl > 0}`
|
|
61
|
-
];
|
|
62
|
-
try {
|
|
63
|
-
const { renderedUrl, renderedBody } = await renderLiquidFields(apiLookupConfig, profile, datafeedTags, settings, logger);
|
|
64
|
-
const requestId = exports.getRequestId({ ...apiLookupConfig, url: renderedUrl, body: renderedBody });
|
|
65
|
-
if (cacheTtl > 0 && dataFeedCache) {
|
|
66
|
-
const cachedResponse = await exports.getCachedResponse(apiLookupConfig, requestId, dataFeedCache, datafeedTags);
|
|
67
|
-
if (cachedResponse) {
|
|
68
|
-
datafeedTags.push('error:false');
|
|
69
|
-
return cachedResponse;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
let data;
|
|
73
|
-
try {
|
|
74
|
-
const res = await request(renderedUrl, {
|
|
75
|
-
headers: headers ?? undefined,
|
|
76
|
-
timeout: 3000,
|
|
77
|
-
method: method,
|
|
78
|
-
body: renderedBody,
|
|
79
|
-
skipResponseCloning: true
|
|
80
|
-
});
|
|
81
|
-
data = await res.data;
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
const respError = error.response;
|
|
85
|
-
logger?.error(`TE Messaging: Email api lookup failure - api lookup id: ${id} - ${settings.spaceId} - [${error}]`);
|
|
86
|
-
datafeedTags.push(`error:true`, `error_message:${error.message}`, `error_status:${respError?.status}`, 'reason:api_call_failure');
|
|
87
|
-
throw error;
|
|
88
|
-
}
|
|
89
|
-
const dataString = JSON.stringify(data);
|
|
90
|
-
const size = Buffer.byteLength(dataString, 'utf-8');
|
|
91
|
-
datafeedTags.push(`response_size_greater_than_mb:${size > maxResponseSizeBytes}`);
|
|
92
|
-
if (cacheTtl > 0) {
|
|
93
|
-
if (size <= maxResponseSizeBytes) {
|
|
94
|
-
try {
|
|
95
|
-
await dataFeedCache?.setRequestResponse(requestId, dataString, cacheTtl / 1000);
|
|
96
|
-
datafeedTags.push('cache_set:true');
|
|
97
|
-
}
|
|
98
|
-
catch (err) {
|
|
99
|
-
logger?.error(`TE Messaging: Email api lookup cache set failure - api lookup id: ${id} - ${settings.spaceId} - [${err}]`);
|
|
100
|
-
datafeedTags.push('cache_set:false');
|
|
101
|
-
datafeedTags.push('error:true', 'reason:cache_set_failure', `error_message:${err?.message}`);
|
|
102
|
-
throw err;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
datafeedTags.push('cache_set:false');
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return data;
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
const isErrorCapturedInTags = datafeedTags.find((str) => str.includes('error:true'));
|
|
113
|
-
if (!isErrorCapturedInTags) {
|
|
114
|
-
datafeedTags.push('error:true', `error_message:${error?.message}`, 'reason:unknown');
|
|
115
|
-
}
|
|
116
|
-
tags.push('reason:datafeed_failure');
|
|
117
|
-
logger?.error(`TE Messaging: Email api lookup failure - api lookup id: ${id} - ${settings.spaceId} - [${error}]`);
|
|
118
|
-
throw error;
|
|
119
|
-
}
|
|
120
|
-
finally {
|
|
121
|
-
statsClient?.incr('datafeed-execution', 1, datafeedTags);
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
exports.performApiLookup = performApiLookup;
|
|
125
|
-
exports.apiLookupActionFields = {
|
|
126
|
-
id: {
|
|
127
|
-
label: 'ID',
|
|
128
|
-
description: 'The id of the API lookup for use in logging & observability',
|
|
129
|
-
type: 'string'
|
|
130
|
-
},
|
|
131
|
-
name: {
|
|
132
|
-
label: 'Name',
|
|
133
|
-
description: 'The name of the API lookup referenced in liquid syntax',
|
|
134
|
-
type: 'string',
|
|
135
|
-
required: true
|
|
136
|
-
},
|
|
137
|
-
url: {
|
|
138
|
-
label: 'URL',
|
|
139
|
-
description: 'The URL endpoint to call',
|
|
140
|
-
type: 'string',
|
|
141
|
-
required: true
|
|
142
|
-
},
|
|
143
|
-
method: {
|
|
144
|
-
label: 'Request Method',
|
|
145
|
-
description: 'The request method, e.g. GET/POST/etc.',
|
|
146
|
-
type: 'string',
|
|
147
|
-
required: true
|
|
148
|
-
},
|
|
149
|
-
cacheTtl: {
|
|
150
|
-
label: 'Cache TTL',
|
|
151
|
-
description: 'The cache TTL in ms',
|
|
152
|
-
type: 'integer',
|
|
153
|
-
required: true
|
|
154
|
-
},
|
|
155
|
-
body: {
|
|
156
|
-
label: 'Request Body',
|
|
157
|
-
description: 'The request body for use with POST/PUT/PATCH requests',
|
|
158
|
-
type: 'string'
|
|
159
|
-
},
|
|
160
|
-
headers: {
|
|
161
|
-
label: 'Request Headers',
|
|
162
|
-
description: 'Headers in JSON to be sent with the request',
|
|
163
|
-
type: 'object'
|
|
164
|
-
},
|
|
165
|
-
responseType: {
|
|
166
|
-
label: 'Response Type',
|
|
167
|
-
description: 'The response type of the request. Currently only supporting JSON.',
|
|
168
|
-
type: 'string',
|
|
169
|
-
required: true
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
exports.apiLookupLiquidKey = 'lookups';
|
|
173
|
-
exports.FLAGON_NAME_DATA_FEEDS = 'is-datafeeds-enabled';
|
|
174
|
-
//# sourceMappingURL=api-lookups.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-lookups.js","sourceRoot":"","sources":["../../../../../src/destinations/engage/sendgrid/previewApiLookup/api-lookups.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export declare enum ApiRegions {
|
|
2
|
-
US = "US \uD83C\uDDFA\uD83C\uDDF8",
|
|
3
|
-
EU = "EU \uD83C\uDDEA\uD83C\uDDFA"
|
|
4
|
-
}
|
|
5
|
-
export declare enum StrictMode {
|
|
6
|
-
ON = "1",
|
|
7
|
-
OFF = "0"
|
|
8
|
-
}
|
|
9
|
-
export declare function getConcatenatedName(firstName: unknown, lastName: unknown, name: unknown): unknown;
|
|
10
|
-
export declare function getApiServerUrl(apiRegion: string | undefined): "https://api-eu.mixpanel.com" | "https://api.mixpanel.com";
|
|
11
|
-
export declare function getBrowser(userAgent: string): string;
|
|
12
|
-
export declare function getBrowserVersion(userAgent: string): string | undefined;
|
|
13
|
-
export declare function cheapGuid(maxlen?: number): string;
|