@segment/action-destinations 3.268.1-staging.5 → 3.269.0-staging-20d80ec9a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/destinations/amazon-ads/utils.d.ts +6 -0
  2. package/dist/destinations/amazon-ads/utils.js +11 -4
  3. package/dist/destinations/amazon-ads/utils.js.map +1 -1
  4. package/dist/destinations/amazon-amc/generated-types.d.ts +12 -0
  5. package/dist/destinations/amazon-amc/generated-types.js.map +1 -0
  6. package/dist/destinations/{amazon-ads → amazon-amc}/index.d.ts +2 -2
  7. package/dist/destinations/amazon-amc/index.js +237 -0
  8. package/dist/destinations/amazon-amc/index.js.map +1 -0
  9. package/dist/destinations/amazon-amc/syncAudiencesToDSP/generated-types.d.ts +19 -0
  10. package/dist/destinations/amazon-amc/syncAudiencesToDSP/generated-types.js.map +1 -0
  11. package/dist/destinations/amazon-amc/syncAudiencesToDSP/index.js +255 -0
  12. package/dist/destinations/amazon-amc/syncAudiencesToDSP/index.js.map +1 -0
  13. package/dist/destinations/amazon-amc/types.d.ts +47 -0
  14. package/dist/destinations/amazon-amc/types.js.map +1 -0
  15. package/dist/destinations/amazon-amc/utils.d.ts +37 -0
  16. package/dist/destinations/amazon-amc/utils.js +25 -0
  17. package/dist/destinations/amazon-amc/utils.js.map +1 -0
  18. package/dist/destinations/attio/api/index.d.ts +13 -0
  19. package/dist/destinations/attio/api/index.js +7 -0
  20. package/dist/destinations/attio/api/index.js.map +1 -1
  21. package/dist/destinations/attio/assertRecord/generated-types.d.ts +3 -0
  22. package/dist/destinations/attio/assertRecord/index.js +16 -1
  23. package/dist/destinations/attio/assertRecord/index.js.map +1 -1
  24. package/dist/destinations/attio/common-fields.d.ts +3 -0
  25. package/dist/destinations/attio/common-fields.js +30 -0
  26. package/dist/destinations/attio/common-fields.js.map +1 -0
  27. package/dist/destinations/attio/groupWorkspace/generated-types.d.ts +3 -0
  28. package/dist/destinations/attio/groupWorkspace/index.js +31 -1
  29. package/dist/destinations/attio/groupWorkspace/index.js.map +1 -1
  30. package/dist/destinations/attio/identifyUser/generated-types.d.ts +3 -0
  31. package/dist/destinations/attio/identifyUser/index.js +31 -1
  32. package/dist/destinations/attio/identifyUser/index.js.map +1 -1
  33. package/dist/destinations/blackbaud-raisers-edge-nxt/utils/index.d.ts +1 -1
  34. package/dist/destinations/customerio/utils.d.ts +1 -0
  35. package/dist/destinations/customerio/utils.js +4 -1
  36. package/dist/destinations/customerio/utils.js.map +1 -1
  37. package/dist/destinations/engage/utils/track.d.ts +17 -17
  38. package/dist/destinations/index.js +1 -1
  39. package/dist/destinations/index.js.map +1 -1
  40. package/dist/destinations/klaviyo/properties.js +1 -1
  41. package/dist/destinations/klaviyo/upsertProfile/index.js +10 -2
  42. package/dist/destinations/klaviyo/upsertProfile/index.js.map +1 -1
  43. package/dist/destinations/segment/index.js +5 -1
  44. package/dist/destinations/segment/index.js.map +1 -1
  45. package/dist/destinations/segment/properties.d.ts +4 -0
  46. package/dist/destinations/segment/properties.js +14 -1
  47. package/dist/destinations/segment/properties.js.map +1 -1
  48. package/dist/destinations/segment/segment-properties.d.ts +1 -0
  49. package/dist/destinations/segment/segment-properties.js +9 -1
  50. package/dist/destinations/segment/segment-properties.js.map +1 -1
  51. package/dist/destinations/segment/sendTrack/generated-types.d.ts +3 -0
  52. package/dist/destinations/segment/sendTrack/index.js +3 -1
  53. package/dist/destinations/segment/sendTrack/index.js.map +1 -1
  54. package/dist/destinations/stackadapt/index.js +1 -1
  55. package/dist/destinations/stackadapt/index.js.map +1 -1
  56. package/dist/destinations/tiktok-conversions/formatter.js +13 -1
  57. package/dist/destinations/tiktok-conversions/formatter.js.map +1 -1
  58. package/dist/destinations/tiktok-offline-conversions/formatter.js +13 -1
  59. package/dist/destinations/tiktok-offline-conversions/formatter.js.map +1 -1
  60. package/package.json +4 -4
  61. package/dist/destinations/amazon-ads/generated-types.d.ts +0 -3
  62. package/dist/destinations/amazon-ads/generated-types.js.map +0 -1
  63. package/dist/destinations/amazon-ads/index.js +0 -87
  64. package/dist/destinations/amazon-ads/index.js.map +0 -1
  65. package/dist/destinations/amazon-ads/syncAudiences/generated-types.d.ts +0 -2
  66. package/dist/destinations/amazon-ads/syncAudiences/generated-types.js.map +0 -1
  67. package/dist/destinations/amazon-ads/syncAudiences/index.js +0 -15
  68. package/dist/destinations/amazon-ads/syncAudiences/index.js.map +0 -1
  69. package/dist/destinations/amazon-ads/types.d.ts +0 -22
  70. package/dist/destinations/amazon-ads/types.js.map +0 -1
  71. /package/dist/destinations/{amazon-ads → amazon-amc}/generated-types.js +0 -0
  72. /package/dist/destinations/{amazon-ads/syncAudiences → amazon-amc/syncAudiencesToDSP}/generated-types.js +0 -0
  73. /package/dist/destinations/{amazon-ads/syncAudiences → amazon-amc/syncAudiencesToDSP}/index.d.ts +0 -0
  74. /package/dist/destinations/{amazon-ads → amazon-amc}/types.js +0 -0
@@ -23,9 +23,15 @@ export interface AudiencePayload {
23
23
  }[];
24
24
  };
25
25
  }
26
+ export interface RecordsResponseType {
27
+ jobRequestId: string;
28
+ }
26
29
  export declare const AUTHORIZATION_URL: any;
27
30
  export declare const CONSTANTS: {
28
31
  CREATE: string;
29
32
  DELETE: string;
30
33
  };
31
34
  export declare const CURRENCY: string[];
35
+ export declare const REGEX_AUDIENCEID: RegExp;
36
+ export declare const REGEX_ADVERTISERID: RegExp;
37
+ export declare function extractNumberAndSubstituteWithStringValue(responseString: string, regex: any, substituteWith: string): any;
@@ -1,18 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CURRENCY = exports.CONSTANTS = exports.AUTHORIZATION_URL = exports.AmazonAdsError = void 0;
3
+ exports.extractNumberAndSubstituteWithStringValue = exports.REGEX_ADVERTISERID = exports.REGEX_AUDIENCEID = exports.CURRENCY = exports.CONSTANTS = exports.AUTHORIZATION_URL = exports.AmazonAdsError = void 0;
4
4
  const actions_core_1 = require("@segment/actions-core");
5
5
  class AmazonAdsError extends actions_core_1.HTTPError {
6
6
  }
7
7
  exports.AmazonAdsError = AmazonAdsError;
8
8
  exports.AUTHORIZATION_URL = {
9
- 'https://advertising-api.amazon.com': 'https://api.amazon.com/auth/o2/token',
10
- 'https://advertising-api-eu.amazon.com': 'https://api.amazon.co.uk/auth/o2/token',
11
- 'https://advertising-api-fe.amazon.com': 'https://api.amazon.co.jp/auth/o2/token'
9
+ 'https://advertising-api.amazon.com': 'https://api.amazon.com',
10
+ 'https://advertising-api-eu.amazon.com': 'https://api.amazon.co.uk',
11
+ 'https://advertising-api-fe.amazon.com': 'https://api.amazon.co.jp'
12
12
  };
13
13
  exports.CONSTANTS = {
14
14
  CREATE: 'CREATE',
15
15
  DELETE: 'DELETE'
16
16
  };
17
17
  exports.CURRENCY = ['USD', 'CAD', 'JPY', 'GBP', 'EUR', 'SAR', 'AUD', 'AED', 'CNY', 'MXN', 'INR', 'SEK', 'TRY'];
18
+ exports.REGEX_AUDIENCEID = /"audienceId":(\d+)/;
19
+ exports.REGEX_ADVERTISERID = /"advertiserId":"(\d+)"/;
20
+ function extractNumberAndSubstituteWithStringValue(responseString, regex, substituteWith) {
21
+ const resString = responseString.replace(regex, substituteWith);
22
+ return JSON.parse(resString);
23
+ }
24
+ exports.extractNumberAndSubstituteWithStringValue = extractNumberAndSubstituteWithStringValue;
18
25
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/destinations/amazon-ads/utils.ts"],"names":[],"mappings":";;;AAAA,wDAAiD;AAEjD,MAAa,cAAe,SAAQ,wBAAS;CAO5C;AAPD,wCAOC;AAmBY,QAAA,iBAAiB,GAAQ;IACpC,oCAAoC,EAAE,sCAAsC;IAC5E,uCAAuC,EAAE,wCAAwC;IACjF,uCAAuC,EAAE,wCAAwC;CAClF,CAAA;AACY,QAAA,SAAS,GAAG;IACvB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACjB,CAAA;AACY,QAAA,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/destinations/amazon-ads/utils.ts"],"names":[],"mappings":";;;AAAA,wDAAiD;AAEjD,MAAa,cAAe,SAAQ,wBAAS;CAO5C;AAPD,wCAOC;AAsBY,QAAA,iBAAiB,GAAQ;IACpC,oCAAoC,EAAE,wBAAwB;IAC9D,uCAAuC,EAAE,0BAA0B;IACnE,uCAAuC,EAAE,0BAA0B;CACpE,CAAA;AACY,QAAA,SAAS,GAAG;IACvB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACjB,CAAA;AACY,QAAA,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AAEtG,QAAA,gBAAgB,GAAG,oBAAoB,CAAA;AACvC,QAAA,kBAAkB,GAAG,wBAAwB,CAAA;AAE1D,SAAgB,yCAAyC,CAAC,cAAsB,EAAE,KAAU,EAAE,cAAsB;IAClH,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AAC9B,CAAC;AAHD,8FAGC"}
@@ -0,0 +1,12 @@
1
+ export interface Settings {
2
+ region: string;
3
+ }
4
+ export interface AudienceSettings {
5
+ description: string;
6
+ countryCode: string;
7
+ externalAudienceId: string;
8
+ cpmCents?: number;
9
+ currency?: string;
10
+ ttl?: number;
11
+ advertiserId: string;
12
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../src/destinations/amazon-amc/generated-types.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
1
  import type { AudienceDestinationDefinition } from '@segment/actions-core';
2
- import type { Settings } from './generated-types';
3
- declare const destination: AudienceDestinationDefinition<Settings>;
2
+ import type { Settings, AudienceSettings } from './generated-types';
3
+ declare const destination: AudienceDestinationDefinition<Settings, AudienceSettings>;
4
4
  export default destination;
@@ -0,0 +1,237 @@
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 actions_core_1 = require("@segment/actions-core");
7
+ const utils_1 = require("./utils");
8
+ const syncAudiencesToDSP_1 = __importDefault(require("./syncAudiencesToDSP"));
9
+ const destination = {
10
+ name: 'Amazon AMC (Actions)',
11
+ slug: 'actions-amazon-amc',
12
+ mode: 'cloud',
13
+ authentication: {
14
+ scheme: 'oauth2',
15
+ fields: {
16
+ region: {
17
+ label: 'Region',
18
+ description: 'Region for API Endpoint, either NA, EU, FE.',
19
+ choices: [
20
+ { label: 'North America (NA)', value: 'https://advertising-api.amazon.com' },
21
+ { label: 'Europe (EU)', value: 'https://advertising-api-eu.amazon.com' },
22
+ { label: 'Far East (FE)', value: 'https://advertising-api-fe.amazon.com' }
23
+ ],
24
+ default: 'https://advertising-api.amazon.com',
25
+ type: 'string',
26
+ required: true
27
+ }
28
+ },
29
+ testAuthentication: async (request, { auth, settings }) => {
30
+ if (!auth?.accessToken) {
31
+ throw new actions_core_1.InvalidAuthenticationError('Please authenticate via Oauth before enabling the destination.');
32
+ }
33
+ try {
34
+ await request(`${settings.region}/v2/profiles`, {
35
+ method: 'GET',
36
+ headers: {
37
+ 'Content-Type': 'application/json'
38
+ }
39
+ });
40
+ }
41
+ catch (e) {
42
+ const error = e;
43
+ if (error.message === 'Unauthorized') {
44
+ throw new actions_core_1.InvalidAuthenticationError('Invalid Amazon Oauth access token. Please reauthenticate to retrieve a valid access token before enabling the destination.');
45
+ }
46
+ throw e;
47
+ }
48
+ },
49
+ refreshAccessToken: async (request, { auth, settings }) => {
50
+ const endpoint = utils_1.AUTHORIZATION_URL[`${settings.region}`];
51
+ try {
52
+ const res = await request(endpoint, {
53
+ method: 'POST',
54
+ body: new URLSearchParams({
55
+ refresh_token: auth.refreshToken,
56
+ client_id: auth.clientId,
57
+ client_secret: auth.clientSecret,
58
+ grant_type: 'refresh_token'
59
+ }),
60
+ headers: {
61
+ authorization: ''
62
+ }
63
+ });
64
+ return { accessToken: res.data.access_token };
65
+ }
66
+ catch (e) {
67
+ const error = e;
68
+ if (error.response?.data?.error === 'invalid_grant') {
69
+ throw new actions_core_1.InvalidAuthenticationError(`Invalid Authentication: Your refresh token is invalid or expired. Please re-authenticate to fetch a new refresh token.`, actions_core_1.ErrorCodes.REFRESH_TOKEN_EXPIRED);
70
+ }
71
+ throw new actions_core_1.InvalidAuthenticationError(`Failed to fetch a new access token. Reason: ${error.response?.data?.error}`, actions_core_1.ErrorCodes.OAUTH_REFRESH_FAILED);
72
+ }
73
+ }
74
+ },
75
+ extendRequest({ auth }) {
76
+ return {
77
+ headers: {
78
+ authorization: `Bearer ${auth?.accessToken}`,
79
+ 'Amazon-Advertising-API-ClientID': process.env.ACTIONS_AMAZON_ADS_CLIENT_ID || '',
80
+ 'Content-Type': 'application/vnd.amcaudiences.v1+json'
81
+ }
82
+ };
83
+ },
84
+ audienceFields: {
85
+ description: {
86
+ type: 'string',
87
+ label: 'Description',
88
+ required: true,
89
+ description: 'The audience description. Must be an alphanumeric, non-null string between 0 to 1000 characters in length.'
90
+ },
91
+ countryCode: {
92
+ type: 'string',
93
+ label: 'Country Code',
94
+ required: true,
95
+ description: 'A String value representing ISO 3166-1 alpha-2 country code for the members in this audience.'
96
+ },
97
+ externalAudienceId: {
98
+ type: 'string',
99
+ label: 'External Audience Id',
100
+ required: true,
101
+ description: 'The user-defined audience identifier.'
102
+ },
103
+ cpmCents: {
104
+ label: 'CPM Cents',
105
+ type: 'number',
106
+ description: `Cost per thousand impressions (CPM) in cents. For example, $1.00 = 100 cents.`
107
+ },
108
+ currency: {
109
+ label: 'Currency',
110
+ type: 'string',
111
+ description: `Currency code for the CPM value.`,
112
+ choices: [
113
+ { value: 'USD', label: 'USD' },
114
+ { value: 'CAD', label: 'CAD' },
115
+ { value: 'JPY', label: 'JPY' },
116
+ { value: 'GBP', label: 'GBP' },
117
+ { value: 'EUR', label: 'EUR' },
118
+ { value: 'SAR', label: 'SAR' },
119
+ { value: 'AUD', label: 'AUD' },
120
+ { value: 'AED', label: 'AED' },
121
+ { value: 'CNY', label: 'CNY' },
122
+ { value: 'MXN', label: 'MXN' },
123
+ { value: 'INR', label: 'INR' },
124
+ { value: 'SEK', label: 'SEK' },
125
+ { value: 'TRY', label: 'TRY' }
126
+ ],
127
+ default: ''
128
+ },
129
+ ttl: {
130
+ type: 'number',
131
+ label: 'Time-to-live',
132
+ required: false,
133
+ description: 'Time-to-live in seconds. The amount of time the record is associated with the audience.'
134
+ },
135
+ advertiserId: {
136
+ label: 'Advertiser ID',
137
+ description: 'Advertiser Id',
138
+ type: 'string',
139
+ required: true
140
+ }
141
+ },
142
+ audienceConfig: {
143
+ mode: {
144
+ type: 'synced',
145
+ full_audience_sync: false
146
+ },
147
+ async createAudience(request, createAudienceInput) {
148
+ const { audienceName, audienceSettings } = createAudienceInput;
149
+ const endpoint = createAudienceInput.settings.region;
150
+ const description = audienceSettings?.description;
151
+ const advertiser_id = audienceSettings?.advertiserId;
152
+ const external_audience_id = audienceSettings?.externalAudienceId;
153
+ const country_code = audienceSettings?.countryCode;
154
+ const ttl = audienceSettings?.ttl;
155
+ const currency = audienceSettings?.currency;
156
+ const cpm_cents = audienceSettings?.cpmCents;
157
+ if (!advertiser_id) {
158
+ throw new actions_core_1.IntegrationError('Missing advertiserId Value', 'MISSING_REQUIRED_FIELD', 400);
159
+ }
160
+ if (!description) {
161
+ throw new actions_core_1.IntegrationError('Missing description Value', 'MISSING_REQUIRED_FIELD', 400);
162
+ }
163
+ if (!external_audience_id) {
164
+ throw new actions_core_1.IntegrationError('Missing externalAudienceId Value', 'MISSING_REQUIRED_FIELD', 400);
165
+ }
166
+ if (!audienceName) {
167
+ throw new actions_core_1.IntegrationError('Missing audienceName Value', 'MISSING_REQUIRED_FIELD', 400);
168
+ }
169
+ if (!country_code) {
170
+ throw new actions_core_1.IntegrationError('Missing countryCode Value', 'MISSING_REQUIRED_FIELD', 400);
171
+ }
172
+ const payload = {
173
+ name: audienceName,
174
+ description: description,
175
+ targetResource: {
176
+ advertiserId: advertiser_id
177
+ },
178
+ metadata: {
179
+ externalAudienceId: external_audience_id
180
+ },
181
+ countryCode: country_code
182
+ };
183
+ if (ttl) {
184
+ const timeToLive = Number(ttl);
185
+ if (!timeToLive) {
186
+ throw new actions_core_1.IntegrationError('TTL:-String can not be converted to Number', 'INVALID_TTL_VALUE', 400);
187
+ }
188
+ payload.metadata.ttl = timeToLive;
189
+ }
190
+ if (cpm_cents && currency) {
191
+ const cpmCents = Number(cpm_cents);
192
+ if (!cpmCents) {
193
+ throw new actions_core_1.IntegrationError('CPM_CENTS:-String can not be converted to Number', 'INVALID_CPMCENTS_VALUE', 400);
194
+ }
195
+ payload.metadata.audienceFees = [];
196
+ payload.metadata?.audienceFees.push({
197
+ currency,
198
+ cpmCents: cpmCents
199
+ });
200
+ }
201
+ let payloadString = JSON.stringify(payload);
202
+ payloadString = payloadString.replace(utils_1.REGEX_ADVERTISERID, '"advertiserId":$1');
203
+ const response = await request(`${endpoint}/amc/audiences/metadata`, {
204
+ method: 'POST',
205
+ body: payloadString,
206
+ headers: {
207
+ 'Content-Type': 'application/vnd.amcaudiences.v1+json'
208
+ }
209
+ });
210
+ const res = await response.text();
211
+ const resp = utils_1.extractNumberAndSubstituteWithStringValue(res, utils_1.REGEX_AUDIENCEID, '"audienceId":"$1"');
212
+ return {
213
+ externalId: resp.audienceId
214
+ };
215
+ },
216
+ async getAudience(request, getAudienceInput) {
217
+ const audience_id = getAudienceInput.externalId;
218
+ const endpoint = getAudienceInput.settings.region;
219
+ if (!audience_id) {
220
+ throw new actions_core_1.IntegrationError('Missing audienceId value', 'MISSING_REQUIRED_FIELD', 400);
221
+ }
222
+ const response = await request(`${endpoint}/amc/audiences/metadata/${audience_id}`, {
223
+ method: 'GET'
224
+ });
225
+ const res = await response.text();
226
+ const resp = utils_1.extractNumberAndSubstituteWithStringValue(res, utils_1.REGEX_AUDIENCEID, '"audienceId":"$1"');
227
+ return {
228
+ externalId: resp.audienceId
229
+ };
230
+ }
231
+ },
232
+ actions: {
233
+ syncAudiencesToDSP: syncAudiencesToDSP_1.default
234
+ }
235
+ };
236
+ exports.default = destination;
237
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/amazon-amc/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface Payload {
2
+ segment_audience_key: string;
3
+ segment_computation_class: string;
4
+ traits_or_props: {
5
+ [k: string]: unknown;
6
+ };
7
+ externalUserId: string;
8
+ email?: string;
9
+ firstName?: string;
10
+ lastName?: string;
11
+ phone?: string;
12
+ postal?: string;
13
+ state?: string;
14
+ city?: string;
15
+ address?: string;
16
+ audienceId: string;
17
+ enable_batching: boolean;
18
+ batch_size?: number;
19
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../../src/destinations/amazon-amc/syncAudiencesToDSP/generated-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("../utils");
4
+ const crypto_1 = require("crypto");
5
+ const action = {
6
+ title: 'Sync Audiences to DSP',
7
+ description: 'Sync audiences from Segment to Amazon Ads Audience.',
8
+ defaultSubscription: 'type="identify" or type="track"',
9
+ fields: {
10
+ segment_audience_key: {
11
+ label: 'Audience Key',
12
+ description: 'Segment Audience',
13
+ type: 'string',
14
+ unsafe_hidden: true,
15
+ required: true,
16
+ default: {
17
+ '@path': '$.context.personas.computation_key'
18
+ }
19
+ },
20
+ segment_computation_class: {
21
+ label: 'Segment Computation Class',
22
+ description: 'Segment computation Class',
23
+ type: 'string',
24
+ unsafe_hidden: true,
25
+ required: true,
26
+ default: {
27
+ '@path': '$.context.personas.computation_class'
28
+ },
29
+ choices: [{ label: 'audience', value: 'audience' }]
30
+ },
31
+ traits_or_props: {
32
+ label: 'Traits or properties object',
33
+ description: 'A computed object for track and identify events. This field should not need to be edited.',
34
+ type: 'object',
35
+ required: true,
36
+ unsafe_hidden: true,
37
+ default: {
38
+ '@if': {
39
+ exists: { '@path': '$.properties' },
40
+ then: { '@path': '$.properties' },
41
+ else: { '@path': '$.traits' }
42
+ }
43
+ }
44
+ },
45
+ externalUserId: {
46
+ label: 'External User ID',
47
+ description: 'This is an external user identifier defined by data providers.',
48
+ type: 'string',
49
+ required: true,
50
+ default: { '@path': '$.userId' }
51
+ },
52
+ email: {
53
+ label: 'Email',
54
+ description: 'User email address. Vaule will be hashed before sending to Amazon.',
55
+ type: 'string',
56
+ required: false,
57
+ default: {
58
+ '@if': {
59
+ exists: { '@path': '$.traits.email' },
60
+ then: { '@path': '$.traits.email' },
61
+ else: { '@path': '$.context.traits.email' }
62
+ }
63
+ }
64
+ },
65
+ firstName: {
66
+ label: 'First name',
67
+ description: 'User first name. Value will be hashed before sending to Amazon.',
68
+ type: 'string',
69
+ required: false,
70
+ default: {
71
+ '@if': {
72
+ exists: { '@path': '$.traits.first_name' },
73
+ then: { '@path': '$.traits.first_name' },
74
+ else: { '@path': '$.properties.first_name' }
75
+ }
76
+ }
77
+ },
78
+ lastName: {
79
+ label: 'Last name',
80
+ description: 'User Last name. Value will be hashed before sending to Amazon.',
81
+ type: 'string',
82
+ required: false,
83
+ default: {
84
+ '@if': {
85
+ exists: { '@path': '$.traits.last_name' },
86
+ then: { '@path': '$.traits.last_name' },
87
+ else: { '@path': '$.properties.last_name' }
88
+ }
89
+ }
90
+ },
91
+ phone: {
92
+ label: 'Phone',
93
+ description: 'Phone Number. Value will be hashed before sending to Amazon.',
94
+ type: 'string',
95
+ required: false,
96
+ default: {
97
+ '@if': {
98
+ exists: { '@path': '$.traits.phone' },
99
+ then: { '@path': '$.traits.phone' },
100
+ else: { '@path': '$.properties.phone' }
101
+ }
102
+ }
103
+ },
104
+ postal: {
105
+ label: 'Postal',
106
+ description: 'POstal Code. Value will be hashed before sending to Amazon.',
107
+ type: 'string',
108
+ required: false,
109
+ default: {
110
+ '@if': {
111
+ exists: { '@path': '$.traits.postal_code' },
112
+ then: { '@path': '$.traits.postal_code' },
113
+ else: { '@path': '$.properties.postal_code' }
114
+ }
115
+ }
116
+ },
117
+ state: {
118
+ label: 'Stage',
119
+ description: 'State Code. Value will be hashed before sending to Amazon.',
120
+ type: 'string',
121
+ required: false,
122
+ default: {
123
+ '@if': {
124
+ exists: { '@path': '$.traits.state' },
125
+ then: { '@path': '$.traits.state' },
126
+ else: { '@path': '$.properties.state' }
127
+ }
128
+ }
129
+ },
130
+ city: {
131
+ label: 'City',
132
+ description: 'City name. Value will be hashed before sending to Amazon.',
133
+ type: 'string',
134
+ required: false,
135
+ default: {
136
+ '@if': {
137
+ exists: { '@path': '$.traits.city' },
138
+ then: { '@path': '$.traits.city' },
139
+ else: { '@path': '$.properties.city' }
140
+ }
141
+ }
142
+ },
143
+ address: {
144
+ label: 'Address',
145
+ description: 'Address Code. Value will be hashed before sending to Amazon.',
146
+ type: 'string',
147
+ required: false,
148
+ default: {
149
+ '@if': {
150
+ exists: { '@path': '$.traits.address' },
151
+ then: { '@path': '$.traits.address' },
152
+ else: { '@path': '$.properties.address' }
153
+ }
154
+ }
155
+ },
156
+ audienceId: {
157
+ label: 'Audience ID',
158
+ type: 'string',
159
+ required: true,
160
+ unsafe_hidden: true,
161
+ description: 'A number value representing the Amazon audience identifier. This is the identifier that is returned during audience creation.',
162
+ default: {
163
+ '@path': '$.context.personas.external_audience_id'
164
+ }
165
+ },
166
+ enable_batching: {
167
+ label: 'Enable Batching',
168
+ description: 'When enabled,segment will send data in batching',
169
+ type: 'boolean',
170
+ required: true,
171
+ default: true
172
+ },
173
+ batch_size: {
174
+ label: 'Batch Size',
175
+ description: 'Maximum number of events to include in each batch. Actual batch sizes may be lower.',
176
+ type: 'number',
177
+ unsafe_hidden: true,
178
+ required: false,
179
+ default: 10000
180
+ }
181
+ },
182
+ perform: (request, { settings, payload, audienceSettings }) => {
183
+ return processPayload(request, settings, [payload], audienceSettings);
184
+ },
185
+ performBatch: (request, { settings, payload: payloads, audienceSettings }) => {
186
+ return processPayload(request, settings, payloads, audienceSettings);
187
+ }
188
+ };
189
+ async function processPayload(request, settings, payload, audienceSettings) {
190
+ console.log('Test Log');
191
+ const payloadRecord = createPayloadToUploadRecords(payload, audienceSettings);
192
+ const payloadString = JSON.stringify(payloadRecord).replace(/"audienceId":"(\d+)"/, '"audienceId":$1');
193
+ const response = await request(`${settings.region}/amc/audiences/records`, {
194
+ method: 'POST',
195
+ body: payloadString,
196
+ headers: {
197
+ 'Content-Type': 'application/vnd.amcaudiences.v1+json'
198
+ }
199
+ });
200
+ const result = response.data;
201
+ return {
202
+ result
203
+ };
204
+ }
205
+ function createPayloadToUploadRecords(payloads, audienceSettings) {
206
+ const records = [];
207
+ const { audienceId } = payloads[0];
208
+ payloads.forEach((payload) => {
209
+ const hashedPII = {};
210
+ if (payload.firstName) {
211
+ hashedPII.firstname = normalizeAndHash(payload.firstName);
212
+ }
213
+ if (payload.lastName) {
214
+ hashedPII.lastname = normalizeAndHash(payload.lastName);
215
+ }
216
+ if (payload.address) {
217
+ hashedPII.address = normalizeAndHash(payload.address);
218
+ }
219
+ if (payload.postal) {
220
+ hashedPII.postal = normalizeAndHash(payload.postal);
221
+ }
222
+ if (payload.phone) {
223
+ hashedPII.phone = normalizeAndHash(payload.phone);
224
+ }
225
+ if (payload.city) {
226
+ hashedPII.city = normalizeAndHash(payload.city);
227
+ }
228
+ if (payload.state) {
229
+ hashedPII.state = normalizeAndHash(payload.state);
230
+ }
231
+ if (payload.email) {
232
+ hashedPII.email = normalizeAndHash(payload.email);
233
+ }
234
+ const action = payload.traits_or_props[payload.segment_audience_key] ? utils_1.CONSTANTS.CREATE : utils_1.CONSTANTS.DELETE;
235
+ const payloadRecord = {
236
+ externalUserId: payload.externalUserId,
237
+ countryCode: audienceSettings.countryCode,
238
+ action,
239
+ hashedPII: [hashedPII]
240
+ };
241
+ records.push(payloadRecord);
242
+ });
243
+ return {
244
+ records: records,
245
+ audienceId: audienceId
246
+ };
247
+ }
248
+ function normalizeAndHash(data) {
249
+ const normalizedData = data.toLowerCase().trim();
250
+ const hash = crypto_1.createHash('sha256');
251
+ hash.update(normalizedData);
252
+ return hash.digest('hex');
253
+ }
254
+ exports.default = action;
255
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/amazon-amc/syncAudiencesToDSP/index.ts"],"names":[],"mappings":";;AAGA,oCAAyD;AACzD,mCAAmC;AAGnC,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EAAE,qDAAqD;IAClE,mBAAmB,EAAE,iCAAiC;IACtD,MAAM,EAAE;QACN,oBAAoB,EAAE;YACpB,KAAK,EAAE,cAAc;YACrB,WAAW,EAAE,kBAAkB;YAC/B,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,oCAAoC;aAC9C;SACF;QACD,yBAAyB,EAAE;YACzB,KAAK,EAAE,2BAA2B;YAClC,WAAW,EAAE,2BAA2B;YACxC,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,sCAAsC;aAChD;YACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;SACpD;QACD,eAAe,EAAE;YACf,KAAK,EAAE,6BAA6B;YACpC,WAAW,EAAE,2FAA2F;YACxG,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;oBACnC,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;oBACjC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;iBAC9B;aACF;SACF;QACD,cAAc,EAAE;YACd,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,gEAAgE;YAC7E,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;SACjC;QACD,KAAK,EAAE;YACL,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,oEAAoE;YACjF,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;oBACrC,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;oBACnC,IAAI,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE;iBAC5C;aACF;SACF;QACD,SAAS,EAAE;YACT,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,iEAAiE;YAC9E,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE;oBAC1C,IAAI,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE;oBACxC,IAAI,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE;iBAC7C;aACF;SACF;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,gEAAgE;YAC7E,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACzC,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;oBACvC,IAAI,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE;iBAC5C;aACF;SACF;QACD,KAAK,EAAE;YACL,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,8DAA8D;YAC3E,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;oBACrC,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;oBACnC,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;iBACxC;aACF;SACF;QACD,MAAM,EAAE;YACN,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,6DAA6D;YAC1E,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE;oBAC3C,IAAI,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE;oBACzC,IAAI,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE;iBAC9C;aACF;SACF;QACD,KAAK,EAAE;YACL,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,4DAA4D;YACzE,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;oBACrC,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;oBACnC,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;iBACxC;aACF;SACF;QACD,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,2DAA2D;YACxE,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE;oBACpC,IAAI,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE;oBAClC,IAAI,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE;iBACvC;aACF;SACF;QACD,OAAO,EAAE;YACP,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,8DAA8D;YAC3E,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACP,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE;oBACvC,IAAI,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE;oBACrC,IAAI,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE;iBAC1C;aACF;SACF;QACD,UAAU,EAAE;YACV,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,aAAa,EAAE,IAAI;YACnB,WAAW,EACT,+HAA+H;YACjI,OAAO,EAAE;gBACP,OAAO,EAAE,yCAAyC;aACnD;SACF;QACD,eAAe,EAAE;YACf,KAAK,EAAE,iBAAiB;YACxB,WAAW,EAAE,iDAAiD;YAC9D,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;SACd;QACD,UAAU,EAAE;YACV,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,qFAAqF;YAClG,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK;SACf;KACF;IACD,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE;QAC5D,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAA;IACvE,CAAC;IACD,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,EAAE;QAC3E,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAA;IACtE,CAAC;CACF,CAAA;AAED,KAAK,UAAU,cAAc,CAC3B,OAAsB,EACtB,QAAkB,EAClB,OAAkB,EAClB,gBAAkC;IAElC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACvB,MAAM,aAAa,GAAG,4BAA4B,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;IAE7E,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAA;IAEtG,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAsB,GAAG,QAAQ,CAAC,MAAM,wBAAwB,EAAE;QAC9F,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE;YACP,cAAc,EAAE,sCAAsC;SACvD;KACF,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC5B,OAAO;QACL,MAAM;KACP,CAAA;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,QAAmB,EAAE,gBAAkC;IAC3F,MAAM,OAAO,GAAqB,EAAE,CAAA;IACpC,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAClC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAgB,EAAE,EAAE;QACpC,MAAM,SAAS,GAAoB,EAAE,CAAA;QACrC,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,SAAS,CAAC,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;SAC1D;QACD,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,SAAS,CAAC,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;SACxD;QACD,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,SAAS,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;SACtD;QACD,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,SAAS,CAAC,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;SACpD;QACD,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,SAAS,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;SAClD;QACD,IAAI,OAAO,CAAC,IAAI,EAAE;YAChB,SAAS,CAAC,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;SAChD;QACD,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,SAAS,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;SAClD;QACD,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,SAAS,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;SAClD;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,iBAAS,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAS,CAAC,MAAM,CAAA;QAE1G,MAAM,aAAa,GAAmB;YACpC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,WAAW,EAAE,gBAAgB,CAAC,WAAW;YACzC,MAAM;YACN,SAAS,EAAE,CAAC,SAAS,CAAC;SACvB,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,UAAU;KACvB,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IAEpC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;IAEhD,MAAM,IAAI,GAAG,mBAAU,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3B,CAAC;AAED,kBAAe,MAAM,CAAA"}