@segment/action-destinations 3.328.0 → 3.329.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/destinations/accoil-analytics/group/generated-types.d.ts +2 -0
  2. package/dist/destinations/accoil-analytics/group/index.js +14 -0
  3. package/dist/destinations/accoil-analytics/group/index.js.map +1 -1
  4. package/dist/destinations/braze/trackEvent2/index.js +1 -1
  5. package/dist/destinations/braze/trackEvent2/index.js.map +1 -1
  6. package/dist/destinations/braze/trackPurchase2/index.js +1 -1
  7. package/dist/destinations/braze/trackPurchase2/index.js.map +1 -1
  8. package/dist/destinations/braze/updateUserProfile2/index.js +1 -1
  9. package/dist/destinations/braze/updateUserProfile2/index.js.map +1 -1
  10. package/dist/destinations/braze/utils.d.ts +19 -6
  11. package/dist/destinations/braze/utils.js +156 -32
  12. package/dist/destinations/braze/utils.js.map +1 -1
  13. package/dist/destinations/facebook-conversions-api/addToCart/generated-types.d.ts +3 -0
  14. package/dist/destinations/facebook-conversions-api/addToCart2/generated-types.d.ts +3 -0
  15. package/dist/destinations/facebook-conversions-api/custom/generated-types.d.ts +3 -0
  16. package/dist/destinations/facebook-conversions-api/custom2/generated-types.d.ts +3 -0
  17. package/dist/destinations/facebook-conversions-api/fb-capi-app-data.js +20 -2
  18. package/dist/destinations/facebook-conversions-api/fb-capi-app-data.js.map +1 -1
  19. package/dist/destinations/facebook-conversions-api/fb-capi-user-data.js +6 -0
  20. package/dist/destinations/facebook-conversions-api/fb-capi-user-data.js.map +1 -1
  21. package/dist/destinations/facebook-conversions-api/initiateCheckout/generated-types.d.ts +3 -0
  22. package/dist/destinations/facebook-conversions-api/initiateCheckout2/generated-types.d.ts +3 -0
  23. package/dist/destinations/facebook-conversions-api/pageView/generated-types.d.ts +3 -0
  24. package/dist/destinations/facebook-conversions-api/pageView2/generated-types.d.ts +3 -0
  25. package/dist/destinations/facebook-conversions-api/purchase/generated-types.d.ts +3 -0
  26. package/dist/destinations/facebook-conversions-api/purchase2/generated-types.d.ts +3 -0
  27. package/dist/destinations/facebook-conversions-api/search/generated-types.d.ts +3 -0
  28. package/dist/destinations/facebook-conversions-api/search2/generated-types.d.ts +3 -0
  29. package/dist/destinations/facebook-conversions-api/viewContent/generated-types.d.ts +3 -0
  30. package/dist/destinations/facebook-conversions-api/viewContent2/generated-types.d.ts +3 -0
  31. package/dist/destinations/google-enhanced-conversions/userList/index.js +1 -1
  32. package/dist/destinations/google-enhanced-conversions/userList/index.js.map +1 -1
  33. package/dist/destinations/index.js +2 -0
  34. package/dist/destinations/index.js.map +1 -1
  35. package/dist/destinations/optimizely-web/generated-types.d.ts +5 -0
  36. package/dist/destinations/optimizely-web/generated-types.js +3 -0
  37. package/dist/destinations/optimizely-web/generated-types.js.map +1 -0
  38. package/dist/destinations/optimizely-web/index.d.ts +4 -0
  39. package/dist/destinations/optimizely-web/index.js +49 -0
  40. package/dist/destinations/optimizely-web/index.js.map +1 -0
  41. package/dist/destinations/optimizely-web/trackEvent/client.d.ts +11 -0
  42. package/dist/destinations/optimizely-web/trackEvent/client.js +61 -0
  43. package/dist/destinations/optimizely-web/trackEvent/client.js.map +1 -0
  44. package/dist/destinations/optimizely-web/trackEvent/constants.d.ts +3 -0
  45. package/dist/destinations/optimizely-web/trackEvent/constants.js +7 -0
  46. package/dist/destinations/optimizely-web/trackEvent/constants.js.map +1 -0
  47. package/dist/destinations/optimizely-web/trackEvent/fields.d.ts +2 -0
  48. package/dist/destinations/optimizely-web/trackEvent/fields.js +193 -0
  49. package/dist/destinations/optimizely-web/trackEvent/fields.js.map +1 -0
  50. package/dist/destinations/optimizely-web/trackEvent/generated-types.d.ts +26 -0
  51. package/dist/destinations/optimizely-web/trackEvent/generated-types.js +3 -0
  52. package/dist/destinations/optimizely-web/trackEvent/generated-types.js.map +1 -0
  53. package/dist/destinations/optimizely-web/trackEvent/index.d.ts +5 -0
  54. package/dist/destinations/optimizely-web/trackEvent/index.js +15 -0
  55. package/dist/destinations/optimizely-web/trackEvent/index.js.map +1 -0
  56. package/dist/destinations/optimizely-web/trackEvent/types.d.ts +59 -0
  57. package/dist/destinations/optimizely-web/trackEvent/types.js +3 -0
  58. package/dist/destinations/optimizely-web/trackEvent/types.js.map +1 -0
  59. package/dist/destinations/optimizely-web/trackEvent/utils.d.ts +25 -0
  60. package/dist/destinations/optimizely-web/trackEvent/utils.js +156 -0
  61. package/dist/destinations/optimizely-web/trackEvent/utils.js.map +1 -0
  62. package/dist/destinations/s3/fields.js +1 -1
  63. package/dist/destinations/s3/functions.js +3 -2
  64. package/dist/destinations/s3/functions.js.map +1 -1
  65. package/dist/destinations/s3/index.js +6 -0
  66. package/dist/destinations/s3/index.js.map +1 -1
  67. package/dist/destinations/snap-audiences/generated-types.d.ts +8 -0
  68. package/dist/destinations/snap-audiences/generated-types.js +3 -0
  69. package/dist/destinations/snap-audiences/generated-types.js.map +1 -0
  70. package/dist/destinations/snap-audiences/index.d.ts +4 -0
  71. package/dist/destinations/snap-audiences/index.js +139 -0
  72. package/dist/destinations/snap-audiences/index.js.map +1 -0
  73. package/dist/destinations/snap-audiences/syncAudience/generated-types.d.ts +12 -0
  74. package/dist/destinations/snap-audiences/syncAudience/generated-types.js +3 -0
  75. package/dist/destinations/snap-audiences/syncAudience/generated-types.js.map +1 -0
  76. package/dist/destinations/snap-audiences/syncAudience/index.d.ts +5 -0
  77. package/dist/destinations/snap-audiences/syncAudience/index.js +156 -0
  78. package/dist/destinations/snap-audiences/syncAudience/index.js.map +1 -0
  79. package/dist/destinations/snap-audiences/syncAudience/utils.d.ts +8 -0
  80. package/dist/destinations/snap-audiences/syncAudience/utils.js +73 -0
  81. package/dist/destinations/snap-audiences/syncAudience/utils.js.map +1 -0
  82. package/package.json +2 -2
@@ -0,0 +1,139 @@
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 syncAudience_1 = __importDefault(require("./syncAudience"));
8
+ const ACCESS_TOKEN_URL = 'https://accounts.snapchat.com/login/oauth2/access_token';
9
+ const destination = {
10
+ name: 'Snap Audiences (Actions)',
11
+ slug: 'actions-snap-audiences',
12
+ mode: 'cloud',
13
+ authentication: {
14
+ scheme: 'oauth2',
15
+ fields: {
16
+ ad_account_id: {
17
+ label: 'Ad Account ID',
18
+ description: 'The ID of the Snap Ad Account',
19
+ required: true,
20
+ type: 'string'
21
+ }
22
+ },
23
+ refreshAccessToken: async (request, { auth }) => {
24
+ const res = await request(ACCESS_TOKEN_URL, {
25
+ method: 'POST',
26
+ body: new URLSearchParams({
27
+ refresh_token: auth.refreshToken,
28
+ client_id: auth.clientId,
29
+ client_secret: auth.clientSecret,
30
+ grant_type: 'refresh_token'
31
+ })
32
+ });
33
+ return { accessToken: res.data.access_token };
34
+ }
35
+ },
36
+ extendRequest({ auth }) {
37
+ return {
38
+ headers: {
39
+ authorization: `Bearer ${auth?.accessToken}`
40
+ }
41
+ };
42
+ },
43
+ presets: [
44
+ {
45
+ name: 'Sync Audience with Email',
46
+ subscribe: 'type = "track" and context.traits.email exists',
47
+ partnerAction: 'syncAudience',
48
+ mapping: {
49
+ schema_type: 'EMAIL_SHA256'
50
+ },
51
+ type: 'automatic'
52
+ },
53
+ {
54
+ name: 'Sync Audience with Phone',
55
+ subscribe: 'type = "track" and properties.phone exists',
56
+ partnerAction: 'syncAudience',
57
+ mapping: {
58
+ schema_type: 'PHONE_SHA256'
59
+ },
60
+ type: 'automatic'
61
+ },
62
+ {
63
+ name: 'Sync Audience with Mobile AD ID',
64
+ subscribe: 'type = "track" and context.device.advertisingId exists',
65
+ partnerAction: 'syncAudience',
66
+ mapping: {
67
+ schema_type: 'MOBILE_AD_ID_SHA256'
68
+ },
69
+ type: 'automatic'
70
+ }
71
+ ],
72
+ audienceFields: {
73
+ customAudienceName: {
74
+ type: 'string',
75
+ label: 'Audience Name',
76
+ description: 'Name for the audience that will be created in Snap. Defaults to the snake_cased Segment audience name if left blank.',
77
+ default: '',
78
+ required: false
79
+ },
80
+ description: {
81
+ type: 'string',
82
+ label: 'Audience Description',
83
+ description: 'Description of for the audience that will be created in Snap.',
84
+ default: '',
85
+ required: false
86
+ },
87
+ retention_in_days: {
88
+ type: 'number',
89
+ label: 'Retention in days',
90
+ description: '# of days to retain audience members. (Default retention is lifetime represented as 9999)',
91
+ default: 9999,
92
+ required: false
93
+ }
94
+ },
95
+ audienceConfig: {
96
+ mode: {
97
+ type: 'synced',
98
+ full_audience_sync: false
99
+ },
100
+ async createAudience(request, createAudienceInput) {
101
+ const audienceName = createAudienceInput.audienceName;
102
+ const ad_account_id = createAudienceInput.settings.ad_account_id;
103
+ const { customAudienceName, description, retention_in_days } = createAudienceInput.audienceSettings || {};
104
+ if (!audienceName) {
105
+ throw new actions_core_1.IntegrationError('Missing audience name value', 'MISSING_REQUIRED_FIELD', 400);
106
+ }
107
+ const response = await request(`https://adsapi.snapchat.com/v1/adaccounts/${ad_account_id}/segments`, {
108
+ method: 'POST',
109
+ json: {
110
+ segments: [
111
+ {
112
+ name: customAudienceName !== '' ? customAudienceName : audienceName,
113
+ source_type: 'FIRST_PARTY',
114
+ ad_account_id,
115
+ description,
116
+ retention_in_days
117
+ }
118
+ ]
119
+ }
120
+ });
121
+ const data = await response.json();
122
+ const snapAudienceId = data.segments[0].segment.id;
123
+ return { externalId: snapAudienceId };
124
+ },
125
+ getAudience: async (request, { externalId }) => {
126
+ const response = await request(`https://adsapi.snapchat.com/v1/segments/${externalId}`, {
127
+ method: 'GET'
128
+ });
129
+ const data = await response.json();
130
+ const snapAudienceId = data.segments[0].segment.id;
131
+ return { externalId: snapAudienceId };
132
+ }
133
+ },
134
+ actions: {
135
+ syncAudience: syncAudience_1.default
136
+ }
137
+ };
138
+ exports.default = destination;
139
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/snap-audiences/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface Payload {
2
+ external_audience_id: string;
3
+ audienceKey: string;
4
+ props: {
5
+ [k: string]: unknown;
6
+ };
7
+ schema_type: string;
8
+ phone?: string;
9
+ email?: string;
10
+ advertising_id?: string;
11
+ enable_batching: boolean;
12
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=generated-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../../src/destinations/snap-audiences/syncAudience/generated-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { ActionDefinition } from '@segment/actions-core';
2
+ import type { Settings } from '../generated-types';
3
+ import type { Payload } from './generated-types';
4
+ declare const action: ActionDefinition<Settings, Payload>;
5
+ export default action;
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const actions_core_1 = require("@segment/actions-core");
4
+ const utils_1 = require("./utils");
5
+ const action = {
6
+ title: 'Sync Audience',
7
+ description: 'Sync Segment Engage Audiences to Snap',
8
+ defaultSubscription: 'type = "track"',
9
+ fields: {
10
+ external_audience_id: {
11
+ type: 'string',
12
+ label: 'External Audience ID',
13
+ description: 'Unique Audience Identifier returned by the createAudience() function call.',
14
+ required: true,
15
+ unsafe_hidden: true,
16
+ default: {
17
+ '@path': '$.context.personas.external_audience_id'
18
+ }
19
+ },
20
+ audienceKey: {
21
+ type: 'string',
22
+ label: 'Audience Key',
23
+ description: 'Audience key.',
24
+ required: true,
25
+ unsafe_hidden: true,
26
+ default: {
27
+ '@path': '$.context.personas.computation_key'
28
+ }
29
+ },
30
+ props: {
31
+ label: 'Properties object',
32
+ description: 'A computed object for track events.',
33
+ type: 'object',
34
+ required: true,
35
+ unsafe_hidden: true,
36
+ default: { '@path': '$.properties' }
37
+ },
38
+ schema_type: {
39
+ type: 'string',
40
+ choices: [
41
+ { value: 'MOBILE_AD_ID_SHA256', label: 'Mobile ID' },
42
+ { value: 'PHONE_SHA256', label: 'Phone' },
43
+ { value: 'EMAIL_SHA256', label: 'Email' }
44
+ ],
45
+ label: 'External ID Type',
46
+ required: true,
47
+ description: 'Choose the type of identifier to use when adding users to Snap.',
48
+ default: 'EMAIL_SHA256',
49
+ disabledInputMethods: ['literal', 'variable', 'function', 'freeform', 'enrichment']
50
+ },
51
+ phone: {
52
+ label: 'Phone',
53
+ description: "If using phone as the identifier, an additional setup step is required when connecting the Destination to the Audience. Please ensure that 'phone' is configured as an additional identifier in the Audience settings tab.",
54
+ type: 'string',
55
+ required: false,
56
+ default: { '@path': '$.properties.phone' },
57
+ depends_on: {
58
+ match: 'all',
59
+ conditions: [
60
+ {
61
+ fieldKey: 'schema_type',
62
+ operator: 'is',
63
+ value: 'PHONE_SHA256'
64
+ }
65
+ ]
66
+ }
67
+ },
68
+ email: {
69
+ label: 'Email',
70
+ description: "The user's email address.",
71
+ type: 'string',
72
+ format: 'email',
73
+ required: false,
74
+ default: { '@path': '$.context.traits.email' },
75
+ depends_on: {
76
+ match: 'all',
77
+ conditions: [
78
+ {
79
+ fieldKey: 'schema_type',
80
+ operator: 'is',
81
+ value: 'EMAIL_SHA256'
82
+ }
83
+ ]
84
+ }
85
+ },
86
+ advertising_id: {
87
+ label: 'Mobile Advertising ID',
88
+ description: "If using Mobile Ad ID as the identifier, an additional setup step is required when connecting the Destination to the Audience. Please ensure that 'ios.idfa' and 'android.idfa' are configured as an additional identifier in the Audience settings tab.",
89
+ type: 'string',
90
+ required: false,
91
+ default: {
92
+ '@path': '$.context.device.advertisingId'
93
+ },
94
+ depends_on: {
95
+ match: 'all',
96
+ conditions: [
97
+ {
98
+ fieldKey: 'schema_type',
99
+ operator: 'is',
100
+ value: 'MOBILE_AD_ID_SHA256'
101
+ }
102
+ ]
103
+ }
104
+ },
105
+ enable_batching: {
106
+ label: 'Enable Batching',
107
+ description: 'When enabled, events will be batched before being sent to Snap.',
108
+ type: 'boolean',
109
+ required: true,
110
+ default: true
111
+ }
112
+ },
113
+ perform: async (request, { payload }) => {
114
+ return processPayload(request, [payload]);
115
+ },
116
+ performBatch: async (request, { payload }) => {
117
+ return processPayload(request, payload);
118
+ }
119
+ };
120
+ exports.default = action;
121
+ const processPayload = async (request, payload) => {
122
+ const { external_audience_id, schema_type } = payload[0];
123
+ const { enteredAudience, exitedAudience } = utils_1.sortPayload(payload);
124
+ if (enteredAudience.length === 0 && exitedAudience.length === 0) {
125
+ throw new actions_core_1.PayloadValidationError(`No ${utils_1.validationError(schema_type)} identifier present in payload(s)`);
126
+ }
127
+ const requests = [];
128
+ if (enteredAudience.length > 0) {
129
+ requests.push(request(`https://adsapi.snapchat.com/v1/segments/${external_audience_id}/users`, {
130
+ method: 'post',
131
+ json: {
132
+ users: [
133
+ {
134
+ schema: [`${schema_type}`],
135
+ data: enteredAudience
136
+ }
137
+ ]
138
+ }
139
+ }));
140
+ }
141
+ if (exitedAudience.length > 0) {
142
+ requests.push(request(`https://adsapi.snapchat.com/v1/segments/${external_audience_id}/users`, {
143
+ method: 'delete',
144
+ json: {
145
+ users: [
146
+ {
147
+ schema: [`${schema_type}`],
148
+ data: exitedAudience
149
+ }
150
+ ]
151
+ }
152
+ }));
153
+ }
154
+ return await Promise.all(requests);
155
+ };
156
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/snap-audiences/syncAudience/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Payload } from './generated-types';
2
+ export declare const sortPayload: (payload: Payload[]) => {
3
+ enteredAudience: string[][];
4
+ exitedAudience: string[][];
5
+ };
6
+ export declare const validationError: (schema_type: string) => string;
7
+ export declare const normalizeAndHash: (identifier: string) => string;
8
+ export declare const normalizeAndHashPhone: (phone: string) => string;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeAndHashPhone = exports.normalizeAndHash = exports.validationError = exports.sortPayload = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const sortPayload = (payload) => {
6
+ return payload.reduce((acc, payloadItem) => {
7
+ const audienceEntered = payloadItem.props[payloadItem.audienceKey];
8
+ const externalId = validateAndExtractIdentifier(payloadItem.schema_type, payloadItem.email, payloadItem.phone, payloadItem.advertising_id);
9
+ if (externalId) {
10
+ if (audienceEntered) {
11
+ acc.enteredAudience.push([externalId]);
12
+ }
13
+ else {
14
+ acc.exitedAudience.push([externalId]);
15
+ }
16
+ }
17
+ return acc;
18
+ }, { enteredAudience: [], exitedAudience: [] });
19
+ };
20
+ exports.sortPayload = sortPayload;
21
+ const validationError = (schema_type) => {
22
+ switch (schema_type) {
23
+ case 'MOBILE_AD_ID_SHA256':
24
+ return 'Mobile Advertising ID';
25
+ case 'EMAIL_SHA256':
26
+ return 'Email';
27
+ case 'PHONE_SHA256':
28
+ return 'Phone number';
29
+ default:
30
+ return 'Identifier';
31
+ }
32
+ };
33
+ exports.validationError = validationError;
34
+ const validateAndExtractIdentifier = (schemaType, email, phone, mobileAdId) => {
35
+ if (schemaType === 'EMAIL_SHA256' && email) {
36
+ return exports.normalizeAndHash(email);
37
+ }
38
+ if (schemaType === 'MOBILE_AD_ID_SHA256' && mobileAdId) {
39
+ return exports.normalizeAndHash(mobileAdId);
40
+ }
41
+ if (schemaType === 'PHONE_SHA256' && phone) {
42
+ return exports.normalizeAndHashPhone(phone);
43
+ }
44
+ return null;
45
+ };
46
+ const hash = (value) => {
47
+ const hash = crypto_1.createHash('sha256');
48
+ hash.update(value);
49
+ return hash.digest('hex');
50
+ };
51
+ const isHashed = (identifier) => new RegExp(/[0-9abcdef]{64}/gi).test(identifier);
52
+ const normalizeAndHash = (identifier) => {
53
+ if (isHashed(identifier))
54
+ return identifier;
55
+ const hashedIdentifier = hash(identifier.trim().toLowerCase());
56
+ return hashedIdentifier;
57
+ };
58
+ exports.normalizeAndHash = normalizeAndHash;
59
+ const normalizeAndHashPhone = (phone) => {
60
+ if (isHashed(phone))
61
+ return phone;
62
+ let normalizedPhone = phone.replace(/[\s()+-]/g, '');
63
+ if (normalizedPhone.startsWith('00')) {
64
+ normalizedPhone = normalizedPhone.substring(2);
65
+ }
66
+ if (normalizedPhone.startsWith('0')) {
67
+ normalizedPhone = normalizedPhone.substring(1);
68
+ }
69
+ const hashedPhone = hash(normalizedPhone);
70
+ return hashedPhone;
71
+ };
72
+ exports.normalizeAndHashPhone = normalizeAndHashPhone;
73
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/destinations/snap-audiences/syncAudience/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.328.0",
4
+ "version": "3.329.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/segmentio/action-destinations",
@@ -88,5 +88,5 @@
88
88
  "__tests__/__helpers__/"
89
89
  ]
90
90
  },
91
- "gitHead": "ab536b30681d02deb67a744c72dee7eded783953"
91
+ "gitHead": "7251cfbc02a7f498dcddf20881b7cc6935d6a9c2"
92
92
  }