@segment/action-destinations 3.131.0 → 3.131.1-stageTesting-tiktok-ga4.45

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 (54) hide show
  1. package/dist/destinations/index.js +1 -0
  2. package/dist/destinations/index.js.map +1 -1
  3. package/dist/destinations/tiktok-audiences/addUser/generated-types.d.ts +9 -0
  4. package/dist/destinations/tiktok-audiences/addUser/generated-types.js +3 -0
  5. package/dist/destinations/tiktok-audiences/addUser/generated-types.js.map +1 -0
  6. package/dist/destinations/tiktok-audiences/addUser/index.d.ts +5 -0
  7. package/dist/destinations/tiktok-audiences/addUser/index.js +88 -0
  8. package/dist/destinations/tiktok-audiences/addUser/index.js.map +1 -0
  9. package/dist/destinations/tiktok-audiences/api/index.d.ts +11 -0
  10. package/dist/destinations/tiktok-audiences/api/index.js +38 -0
  11. package/dist/destinations/tiktok-audiences/api/index.js.map +1 -0
  12. package/dist/destinations/tiktok-audiences/constants.d.ts +2 -0
  13. package/dist/destinations/tiktok-audiences/constants.js +6 -0
  14. package/dist/destinations/tiktok-audiences/constants.js.map +1 -0
  15. package/dist/destinations/tiktok-audiences/functions.d.ts +8 -0
  16. package/dist/destinations/tiktok-audiences/functions.js +72 -0
  17. package/dist/destinations/tiktok-audiences/functions.js.map +1 -0
  18. package/dist/destinations/tiktok-audiences/generated-types.d.ts +3 -0
  19. package/dist/destinations/tiktok-audiences/generated-types.js +3 -0
  20. package/dist/destinations/tiktok-audiences/generated-types.js.map +1 -0
  21. package/dist/destinations/tiktok-audiences/index.d.ts +4 -0
  22. package/dist/destinations/tiktok-audiences/index.js +35 -0
  23. package/dist/destinations/tiktok-audiences/index.js.map +1 -0
  24. package/dist/destinations/tiktok-audiences/removeUser/generated-types.d.ts +9 -0
  25. package/dist/destinations/tiktok-audiences/removeUser/generated-types.js +3 -0
  26. package/dist/destinations/tiktok-audiences/removeUser/generated-types.js.map +1 -0
  27. package/dist/destinations/tiktok-audiences/removeUser/index.d.ts +5 -0
  28. package/dist/destinations/tiktok-audiences/removeUser/index.js +88 -0
  29. package/dist/destinations/tiktok-audiences/removeUser/index.js.map +1 -0
  30. package/dist/destinations/tiktok-audiences/types.d.ts +33 -0
  31. package/dist/destinations/tiktok-audiences/types.js +3 -0
  32. package/dist/destinations/tiktok-audiences/types.js.map +1 -0
  33. package/dist/destinations/tiktok-audiences/updateAudience/generated-types.d.ts +9 -0
  34. package/dist/destinations/tiktok-audiences/updateAudience/generated-types.js +3 -0
  35. package/dist/destinations/tiktok-audiences/updateAudience/generated-types.js.map +1 -0
  36. package/dist/destinations/tiktok-audiences/updateAudience/index.d.ts +5 -0
  37. package/dist/destinations/tiktok-audiences/updateAudience/index.js +160 -0
  38. package/dist/destinations/tiktok-audiences/updateAudience/index.js.map +1 -0
  39. package/dist/destinations/twilio-studio/generated-types.d.ts +6 -0
  40. package/dist/destinations/twilio-studio/generated-types.js +3 -0
  41. package/dist/destinations/twilio-studio/generated-types.js.map +1 -0
  42. package/dist/destinations/twilio-studio/index.d.ts +4 -0
  43. package/dist/destinations/twilio-studio/index.js +55 -0
  44. package/dist/destinations/twilio-studio/index.js.map +1 -0
  45. package/dist/destinations/twilio-studio/triggerStudioFlow/generated-types.d.ts +8 -0
  46. package/dist/destinations/twilio-studio/triggerStudioFlow/generated-types.js +3 -0
  47. package/dist/destinations/twilio-studio/triggerStudioFlow/generated-types.js.map +1 -0
  48. package/dist/destinations/twilio-studio/triggerStudioFlow/index.d.ts +5 -0
  49. package/dist/destinations/twilio-studio/triggerStudioFlow/index.js +84 -0
  50. package/dist/destinations/twilio-studio/triggerStudioFlow/index.js.map +1 -0
  51. package/dist/destinations/twilio-studio/utils.d.ts +29 -0
  52. package/dist/destinations/twilio-studio/utils.js +43 -0
  53. package/dist/destinations/twilio-studio/utils.js.map +1 -0
  54. package/package.json +4 -4
@@ -63,6 +63,7 @@ register('5f7dd8e302173ff732db5cc4', './slack');
63
63
  register('6261a8b6cb4caa70e19116e8', './snap-conversions-api');
64
64
  register('6234b137d3b6404a64f2a0f0', './talon-one');
65
65
  register('615cae349d109d6b7496a131', './tiktok-conversions');
66
+ register('63d2e550fb90f1632ed8820a', './tiktok-audiences');
66
67
  register('602efa1f249b9a5e2bf8a813', './twilio');
67
68
  register('614a3c7d791c91c41bae7599', './webhook');
68
69
  register('61dc4e96894a6d7954cc6e45', './voyage');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/destinations/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/destinations/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface Payload {
2
+ custom_audience_name?: string;
3
+ id_type?: string;
4
+ email?: string;
5
+ google_advertising_id?: string;
6
+ event_name?: string;
7
+ enable_batching?: boolean;
8
+ personas_audience_key?: string;
9
+ }
@@ -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/tiktok-audiences/addUser/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,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const api_1 = require("../api");
4
+ const functions_1 = require("../functions");
5
+ const action = {
6
+ title: 'Add Users to Audience',
7
+ description: 'Sync contacts from an Engage Audience to a TikTok Audience Segment.',
8
+ defaultSubscription: 'event = "Audience Entered"',
9
+ fields: {
10
+ custom_audience_name: {
11
+ label: 'Custom Audience Name',
12
+ description: 'Custom audience name of audience to be created. Please note that names over 70 characters will be truncated to 67 characters with "..." appended. This field is set only when Segment creates a new audience. Updating this field after Segment has created an audience will not update the audience name in TikTok.',
13
+ type: 'string',
14
+ default: {
15
+ '@path': '$.properties.audience_key'
16
+ }
17
+ },
18
+ id_type: {
19
+ label: 'ID Type',
20
+ description: 'Encryption type to be used for populating the audience.',
21
+ type: 'string',
22
+ choices: [
23
+ { label: 'Email', value: 'EMAIL_SHA256' },
24
+ { label: 'Google Advertising ID', value: 'GAID_SHA256' }
25
+ ]
26
+ },
27
+ email: {
28
+ label: 'User Email',
29
+ description: "The user's email address to send to LinkedIn.",
30
+ type: 'hidden',
31
+ default: {
32
+ '@path': '$.context.traits.email'
33
+ }
34
+ },
35
+ google_advertising_id: {
36
+ label: 'User Google Advertising ID',
37
+ description: "The user's Google Advertising ID to send to LinkedIn.",
38
+ type: 'hidden',
39
+ default: {
40
+ '@path': '$.context.device.advertisingId'
41
+ }
42
+ },
43
+ event_name: {
44
+ label: 'Event Name',
45
+ description: 'The name of the current Segment event.',
46
+ type: 'hidden',
47
+ default: {
48
+ '@path': '$.event'
49
+ }
50
+ },
51
+ enable_batching: {
52
+ label: 'Enable Batching',
53
+ description: 'Enable batching of requests to the TikTok Audiences.',
54
+ type: 'boolean',
55
+ default: true
56
+ },
57
+ personas_audience_key: {
58
+ label: 'Segment Engage Audience Key',
59
+ description: 'The `audience_key` of the Engage audience you want to sync to TikTok. This value must be a hard-coded string variable, e.g. `personas_test_audience`, in order for batching to work properly.',
60
+ type: 'string'
61
+ }
62
+ },
63
+ perform: async (request, { settings, payload }) => {
64
+ return processPayload(request, settings, [payload]);
65
+ },
66
+ performBatch: async (request, { settings, payload }) => {
67
+ return processPayload(request, settings, payload);
68
+ }
69
+ };
70
+ async function processPayload(request, settings, payloads) {
71
+ functions_1.validate(payloads);
72
+ const TikTokApiClient = new api_1.TikTokAudiences(request);
73
+ const audiences = await functions_1.getAllAudiences(TikTokApiClient, settings);
74
+ const audience_id = await functions_1.getAudienceID(TikTokApiClient, settings, payloads[0], audiences);
75
+ const users = functions_1.extractUsers(payloads, audience_id);
76
+ let res;
77
+ if (users.length > 0) {
78
+ const elements = {
79
+ advertiser_ids: [settings.advertiser_id],
80
+ action: 'add',
81
+ data: users
82
+ };
83
+ res = await TikTokApiClient.batchUpdate(elements);
84
+ }
85
+ return res;
86
+ }
87
+ exports.default = action;
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/tiktok-audiences/addUser/index.ts"],"names":[],"mappings":";;AAEA,gCAAwC;AAGxC,4CAAqF;AAErF,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EAAE,qEAAqE;IAClF,mBAAmB,EAAE,4BAA4B;IACjD,MAAM,EAAE;QACN,oBAAoB,EAAE;YACpB,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EACT,sTAAsT;YACxT,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,2BAA2B;aACrC;SACF;QACD,OAAO,EAAE;YACP,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,yDAAyD;YACtE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE;gBACzC,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,aAAa,EAAE;aACzD;SACF;QACD,KAAK,EAAE;YACL,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,+CAA+C;YAC5D,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,wBAAwB;aAClC;SACF;QACD,qBAAqB,EAAE;YACrB,KAAK,EAAE,4BAA4B;YACnC,WAAW,EAAE,uDAAuD;YACpE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,gCAAgC;aAC1C;SACF;QACD,UAAU,EAAE;YACV,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,wCAAwC;YACrD,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,SAAS;aACnB;SACF;QACD,eAAe,EAAE;YACf,KAAK,EAAE,iBAAiB;YACxB,WAAW,EAAE,sDAAsD;YACnE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;SACd;QACD,qBAAqB,EAAE;YACrB,KAAK,EAAE,6BAA6B;YACpC,WAAW,EACT,+LAA+L;YACjM,IAAI,EAAE,QAAQ;SACf;KACF;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAChD,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACrD,CAAC;IACD,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QACrD,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IACnD,CAAC;CACF,CAAA;AAED,KAAK,UAAU,cAAc,CAAC,OAAsB,EAAE,QAAkB,EAAE,QAAmB;IAC3F,oBAAQ,CAAC,QAAQ,CAAC,CAAA;IAClB,MAAM,eAAe,GAAoB,IAAI,qBAAe,CAAC,OAAO,CAAC,CAAA;IAErE,MAAM,SAAS,GAAG,MAAM,2BAAe,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;IAElE,MAAM,WAAW,GAAG,MAAM,yBAAa,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAE1F,MAAM,KAAK,GAAG,wBAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAEjD,IAAI,GAAG,CAAA;IACP,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,MAAM,QAAQ,GAAG;YACf,cAAc,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;SACZ,CAAA;QACD,GAAG,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;KAClD;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,kBAAe,MAAM,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { RequestClient, ModifiedResponse } from '@segment/actions-core';
2
+ import type { Settings } from '../generated-types';
3
+ import type { Payload } from '../updateAudience/generated-types';
4
+ import type { GetAudienceAPIResponse, CreateAudienceAPIResponse } from '../types';
5
+ export declare class TikTokAudiences {
6
+ request: RequestClient;
7
+ constructor(request: RequestClient);
8
+ getAudiences(settings: Settings, page_number: number, page_size: number): Promise<ModifiedResponse<GetAudienceAPIResponse>>;
9
+ createAudience(settings: Settings, payload: Payload): Promise<ModifiedResponse<CreateAudienceAPIResponse>>;
10
+ batchUpdate(elements: {}): Promise<ModifiedResponse>;
11
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TikTokAudiences = void 0;
4
+ const constants_1 = require("../constants");
5
+ class TikTokAudiences {
6
+ constructor(request) {
7
+ this.request = request;
8
+ }
9
+ async getAudiences(settings, page_number, page_size) {
10
+ return this.request(`${constants_1.BASE_URL}${constants_1.TIKTOK_API_VERSION}/dmp/custom_audience/list/`, {
11
+ method: 'GET',
12
+ searchParams: {
13
+ advertiser_id: settings.advertiser_id,
14
+ page: page_number,
15
+ page_size: page_size
16
+ }
17
+ });
18
+ }
19
+ async createAudience(settings, payload) {
20
+ return this.request(`${constants_1.BASE_URL}${constants_1.TIKTOK_API_VERSION}/segment/audience/`, {
21
+ method: 'POST',
22
+ json: {
23
+ custom_audience_name: payload.custom_audience_name,
24
+ advertiser_id: settings.advertiser_id,
25
+ id_type: payload.id_type,
26
+ action: 'create'
27
+ }
28
+ });
29
+ }
30
+ async batchUpdate(elements) {
31
+ return this.request(`${constants_1.BASE_URL}${constants_1.TIKTOK_API_VERSION}/segment/mapping/`, {
32
+ method: 'POST',
33
+ json: elements
34
+ });
35
+ }
36
+ }
37
+ exports.TikTokAudiences = TikTokAudiences;
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/tiktok-audiences/api/index.ts"],"names":[],"mappings":";;;AAGA,4CAA2D;AAG3D,MAAa,eAAe;IAG1B,YAAY,OAAsB;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,QAAkB,EAClB,WAAmB,EACnB,SAAiB;QAEjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,oBAAQ,GAAG,8BAAkB,4BAA4B,EAAE;YAChF,MAAM,EAAE,KAAK;YACb,YAAY,EAAE;gBACZ,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,SAAS;aACrB;SACF,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAkB,EAAE,OAAgB;QACvD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,oBAAQ,GAAG,8BAAkB,oBAAoB,EAAE;YACxE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;gBAClD,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,MAAM,EAAE,QAAQ;aACjB;SACF,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAY;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,oBAAQ,GAAG,8BAAkB,mBAAmB,EAAE;YACvE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,QAAQ;SACf,CAAC,CAAA;IACJ,CAAC;CACF;AAxCD,0CAwCC"}
@@ -0,0 +1,2 @@
1
+ export declare const TIKTOK_API_VERSION = "v1.3";
2
+ export declare const BASE_URL = "https://business-api.tiktok.com/open_api/";
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BASE_URL = exports.TIKTOK_API_VERSION = void 0;
4
+ exports.TIKTOK_API_VERSION = 'v1.3';
5
+ exports.BASE_URL = 'https://business-api.tiktok.com/open_api/';
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/destinations/tiktok-audiences/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG,MAAM,CAAA;AAC3B,QAAA,QAAQ,GAAG,2CAA2C,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { Audiences } from './types';
2
+ import { TikTokAudiences } from './api';
3
+ import type { Settings } from './generated-types';
4
+ import { Payload } from './addUser/generated-types';
5
+ export declare function validate(payloads: Payload[]): void;
6
+ export declare function getAllAudiences(TikTokApiClient: TikTokAudiences, settings: Settings): Promise<Audiences[]>;
7
+ export declare function getAudienceID(TikTokApiClient: TikTokAudiences, settings: Settings, payload: Payload, audiences: Audiences[]): Promise<string>;
8
+ export declare function extractUsers(payloads: Payload[], audienceID: string): {}[];
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractUsers = exports.getAudienceID = exports.getAllAudiences = exports.validate = void 0;
4
+ const actions_core_1 = require("@segment/actions-core");
5
+ const crypto_1 = require("crypto");
6
+ function validate(payloads) {
7
+ if (payloads[0].custom_audience_name !== payloads[0].personas_audience_key) {
8
+ throw new actions_core_1.IntegrationError('The value of `custom_audience_name` and `personas_audience_key` must match.', 'INVALID_SETTINGS', 400);
9
+ }
10
+ }
11
+ exports.validate = validate;
12
+ async function getAllAudiences(TikTokApiClient, settings) {
13
+ let response = await TikTokApiClient.getAudiences(settings, 1, 100);
14
+ let audiences = response.data.data.list;
15
+ const total_number_audiences = response.data.data.page_info.total_number;
16
+ let recieved_audiences = 100;
17
+ let page_number = 2;
18
+ while (recieved_audiences < total_number_audiences) {
19
+ response = await TikTokApiClient.getAudiences(settings, page_number, 100);
20
+ audiences = audiences.concat(response.data.data.list);
21
+ page_number += 1;
22
+ recieved_audiences += 100;
23
+ }
24
+ return audiences;
25
+ }
26
+ exports.getAllAudiences = getAllAudiences;
27
+ async function getAudienceID(TikTokApiClient, settings, payload, audiences) {
28
+ let audienceID;
29
+ const audienceExists = audiences.filter(function (audience) {
30
+ if (audience.name === payload.custom_audience_name) {
31
+ return audience.audience_id;
32
+ }
33
+ });
34
+ if (audienceExists.length > 1) {
35
+ throw new actions_core_1.IntegrationError('The value of `custom_audience_name` and `personas_audience_key` must match.', 'INVALID_SETTINGS', 400);
36
+ }
37
+ if (audienceExists.length == 1) {
38
+ audienceID = audienceExists[0].audience_id;
39
+ }
40
+ else {
41
+ const response = await TikTokApiClient.createAudience(settings, payload);
42
+ audienceID = response.data.data.audience_id;
43
+ }
44
+ return audienceID;
45
+ }
46
+ exports.getAudienceID = getAudienceID;
47
+ function extractUsers(payloads, audienceID) {
48
+ const data = [];
49
+ payloads.forEach((payload) => {
50
+ if (!payload.email && !payload.google_advertising_id) {
51
+ return;
52
+ }
53
+ if (payload.id_type == 'EMAIL_SHA256' && payload.email) {
54
+ payload.email = payload.email.replace(/\+.*@/, '@').replace(/\./g, '').toLowerCase();
55
+ data.push({
56
+ id_type: 'EMAIL_SHA256',
57
+ id: crypto_1.createHash('sha256').update(payload.email).digest('hex'),
58
+ audience_ids: [audienceID]
59
+ });
60
+ }
61
+ if (payload.id_type == 'GAID_SHA256' && payload.google_advertising_id) {
62
+ data.push({
63
+ id_type: 'GAID_SHA256',
64
+ id: crypto_1.createHash('sha256').update(payload.google_advertising_id).digest('hex'),
65
+ audience_ids: [audienceID]
66
+ });
67
+ }
68
+ });
69
+ return data;
70
+ }
71
+ exports.extractUsers = extractUsers;
72
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/destinations/tiktok-audiences/functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export interface Settings {
2
+ advertiser_id: string;
3
+ }
@@ -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/tiktok-audiences/generated-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { DestinationDefinition } from '@segment/actions-core';
2
+ import type { Settings } from './generated-types';
3
+ declare const destination: DestinationDefinition<Settings>;
4
+ export default destination;
@@ -0,0 +1,35 @@
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 updateAudience_1 = __importDefault(require("./updateAudience"));
7
+ const destination = {
8
+ name: 'TikTok Audiences',
9
+ slug: 'actions-tiktok-audiences',
10
+ mode: 'cloud',
11
+ authentication: {
12
+ scheme: 'oauth2',
13
+ fields: {
14
+ advertiser_id: {
15
+ label: 'TikTok Advertiser ID',
16
+ description: 'The Advertiser ID where audiences should be synced.',
17
+ type: 'string',
18
+ required: true
19
+ }
20
+ }
21
+ },
22
+ extendRequest({ auth }) {
23
+ return {
24
+ headers: {
25
+ 'Access-Token': `${auth?.accessToken}`,
26
+ 'Content-Type': 'application/json'
27
+ }
28
+ };
29
+ },
30
+ actions: {
31
+ updateAudience: updateAudience_1.default
32
+ }
33
+ };
34
+ exports.default = destination;
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/tiktok-audiences/index.ts"],"names":[],"mappings":";;;;;AAIA,sEAA6C;AAE7C,MAAM,WAAW,GAAoC;IACnD,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,0BAA0B;IAChC,IAAI,EAAE,OAAO;IAEb,cAAc,EAAE;QACd,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE;YACN,aAAa,EAAE;gBACb,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE,qDAAqD;gBAClE,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;SACF;KASF;IACD,aAAa,CAAC,EAAE,IAAI,EAAE;QACpB,OAAO;YACL,OAAO,EAAE;gBACP,cAAc,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAA;IACH,CAAC;IAED,OAAO,EAAE;QACP,cAAc,EAAd,wBAAc;KACf;CACF,CAAA;AAED,kBAAe,WAAW,CAAA"}
@@ -0,0 +1,9 @@
1
+ export interface Payload {
2
+ custom_audience_name?: string;
3
+ id_type?: string;
4
+ email?: string;
5
+ google_advertising_id?: string;
6
+ event_name?: string;
7
+ enable_batching?: boolean;
8
+ personas_audience_key?: string;
9
+ }
@@ -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/tiktok-audiences/removeUser/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,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const api_1 = require("../api");
4
+ const functions_1 = require("../functions");
5
+ const action = {
6
+ title: 'Remove Users from Audience',
7
+ description: 'Sync contacts from an Engage Audience to a TikTok Audience Segment.',
8
+ defaultSubscription: 'event = "Audience Entered" or event = "Audience Exited"',
9
+ fields: {
10
+ custom_audience_name: {
11
+ label: 'Custom Audience Name',
12
+ description: 'Custom audience name of audience to be created. Please note that names over 70 characters will be truncated to 67 characters with "..." appended. This field is set only when Segment creates a new audience. Updating this field after Segment has created an audience will not update the audience name in TikTok.',
13
+ type: 'string',
14
+ default: {
15
+ '@path': '$.properties.audience_key'
16
+ }
17
+ },
18
+ id_type: {
19
+ label: 'ID Type',
20
+ description: 'Encryption type to be used for populating the audience.',
21
+ type: 'string',
22
+ choices: [
23
+ { label: 'Email', value: 'EMAIL_SHA256' },
24
+ { label: 'Google Advertising ID', value: 'GAID_SHA256' }
25
+ ]
26
+ },
27
+ email: {
28
+ label: 'User Email',
29
+ description: "The user's email address to send to LinkedIn.",
30
+ type: 'hidden',
31
+ default: {
32
+ '@path': '$.context.traits.email'
33
+ }
34
+ },
35
+ google_advertising_id: {
36
+ label: 'User Google Advertising ID',
37
+ description: "The user's Google Advertising ID to send to LinkedIn.",
38
+ type: 'hidden',
39
+ default: {
40
+ '@path': '$.context.device.advertisingId'
41
+ }
42
+ },
43
+ event_name: {
44
+ label: 'Event Name',
45
+ description: 'The name of the current Segment event.',
46
+ type: 'hidden',
47
+ default: {
48
+ '@path': '$.event'
49
+ }
50
+ },
51
+ enable_batching: {
52
+ label: 'Enable Batching',
53
+ description: 'Enable batching of requests to the TikTok Audiences.',
54
+ type: 'boolean',
55
+ default: true
56
+ },
57
+ personas_audience_key: {
58
+ label: 'Segment Engage Audience Key',
59
+ description: 'The `audience_key` of the Engage audience you want to sync to TikTok. This value must be a hard-coded string variable, e.g. `personas_test_audience`, in order for batching to work properly.',
60
+ type: 'string'
61
+ }
62
+ },
63
+ perform: async (request, { settings, payload }) => {
64
+ return processPayload(request, settings, [payload]);
65
+ },
66
+ performBatch: async (request, { settings, payload }) => {
67
+ return processPayload(request, settings, payload);
68
+ }
69
+ };
70
+ async function processPayload(request, settings, payloads) {
71
+ functions_1.validate(payloads);
72
+ const TikTokApiClient = new api_1.TikTokAudiences(request);
73
+ const audiences = await functions_1.getAllAudiences(TikTokApiClient, settings);
74
+ const audience_id = await functions_1.getAudienceID(TikTokApiClient, settings, payloads[0], audiences);
75
+ const users = functions_1.extractUsers(payloads, audience_id);
76
+ let res;
77
+ if (users.length > 0) {
78
+ const elements = {
79
+ advertiser_ids: [settings.advertiser_id],
80
+ action: 'delete',
81
+ data: users
82
+ };
83
+ res = await TikTokApiClient.batchUpdate(elements);
84
+ }
85
+ return res;
86
+ }
87
+ exports.default = action;
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/tiktok-audiences/removeUser/index.ts"],"names":[],"mappings":";;AAEA,gCAAwC;AAGxC,4CAAqF;AAErF,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,4BAA4B;IACnC,WAAW,EAAE,qEAAqE;IAClF,mBAAmB,EAAE,yDAAyD;IAC9E,MAAM,EAAE;QACN,oBAAoB,EAAE;YACpB,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EACT,sTAAsT;YACxT,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,2BAA2B;aACrC;SACF;QACD,OAAO,EAAE;YACP,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,yDAAyD;YACtE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE;gBACzC,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,aAAa,EAAE;aACzD;SACF;QACD,KAAK,EAAE;YACL,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,+CAA+C;YAC5D,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,wBAAwB;aAClC;SACF;QACD,qBAAqB,EAAE;YACrB,KAAK,EAAE,4BAA4B;YACnC,WAAW,EAAE,uDAAuD;YACpE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,gCAAgC;aAC1C;SACF;QACD,UAAU,EAAE;YACV,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,wCAAwC;YACrD,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,OAAO,EAAE,SAAS;aACnB;SACF;QACD,eAAe,EAAE;YACf,KAAK,EAAE,iBAAiB;YACxB,WAAW,EAAE,sDAAsD;YACnE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;SACd;QACD,qBAAqB,EAAE;YACrB,KAAK,EAAE,6BAA6B;YACpC,WAAW,EACT,+LAA+L;YACjM,IAAI,EAAE,QAAQ;SACf;KACF;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAChD,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACrD,CAAC;IACD,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QACrD,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IACnD,CAAC;CACF,CAAA;AAED,KAAK,UAAU,cAAc,CAAC,OAAsB,EAAE,QAAkB,EAAE,QAAmB;IAC3F,oBAAQ,CAAC,QAAQ,CAAC,CAAA;IAClB,MAAM,eAAe,GAAoB,IAAI,qBAAe,CAAC,OAAO,CAAC,CAAA;IAErE,MAAM,SAAS,GAAG,MAAM,2BAAe,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;IAElE,MAAM,WAAW,GAAG,MAAM,yBAAa,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAE1F,MAAM,KAAK,GAAG,wBAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAEjD,IAAI,GAAG,CAAA;IACP,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,MAAM,QAAQ,GAAG;YACf,cAAc,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,KAAK;SACZ,CAAA;QACD,GAAG,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;KAClD;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,kBAAe,MAAM,CAAA"}
@@ -0,0 +1,33 @@
1
+ export interface APIResponse {
2
+ code: number;
3
+ message: string;
4
+ request_id: string;
5
+ }
6
+ export interface GetAudienceAPIResponse extends APIResponse {
7
+ data: {
8
+ page_info: {
9
+ page: number;
10
+ total_page: number;
11
+ total_number: number;
12
+ page_size: number;
13
+ };
14
+ list: [Audiences];
15
+ };
16
+ }
17
+ export interface CreateAudienceAPIResponse extends APIResponse {
18
+ data: {
19
+ audience_id: string;
20
+ };
21
+ }
22
+ export interface Audiences {
23
+ is_expiring: boolean;
24
+ cover_num: number;
25
+ name: string;
26
+ audience_id: string;
27
+ audience_type: string;
28
+ is_valid: boolean;
29
+ create_time: string;
30
+ shared: boolean;
31
+ expired_time: string;
32
+ calculate_type: string;
33
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/destinations/tiktok-audiences/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export interface Payload {
2
+ custom_audience_name?: string;
3
+ id_type?: string;
4
+ email?: string;
5
+ google_advertising_id?: string;
6
+ event_name?: string;
7
+ enable_batching?: boolean;
8
+ personas_audience_key?: string;
9
+ }
@@ -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/tiktok-audiences/updateAudience/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,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const actions_core_1 = require("@segment/actions-core");
4
+ const api_1 = require("../api");
5
+ const crypto_1 = require("crypto");
6
+ const action = {
7
+ title: 'Update Audience',
8
+ description: 'Sync contacts from an Engage Audience to a TikTok Audience Segment.',
9
+ defaultSubscription: 'event = "Audience Entered" or event = "Audience Exited"',
10
+ fields: {
11
+ custom_audience_name: {
12
+ label: 'Custom Audience Name',
13
+ description: 'Custom audience name of audience to be created. Please note that names over 70 characters will be truncated to 67 characters with "..." appended. This field is set only when Segment creates a new audience. Updating this field after Segment has created an audience will not update the audience name in TikTok.',
14
+ type: 'string',
15
+ default: {
16
+ '@path': '$.properties.audience_key'
17
+ }
18
+ },
19
+ id_type: {
20
+ label: 'ID Type',
21
+ description: 'Encryption type to be used for populating the audience.',
22
+ type: 'string',
23
+ choices: [
24
+ { label: 'Email', value: 'EMAIL_SHA256' },
25
+ { label: 'Google Advertising ID', value: 'GAID_SHA256' }
26
+ ]
27
+ },
28
+ email: {
29
+ label: 'User Email',
30
+ description: "The user's email address to send to LinkedIn.",
31
+ type: 'hidden',
32
+ default: {
33
+ '@path': '$.context.traits.email'
34
+ }
35
+ },
36
+ google_advertising_id: {
37
+ label: 'User Google Advertising ID',
38
+ description: "The user's Google Advertising ID to send to LinkedIn.",
39
+ type: 'hidden',
40
+ default: {
41
+ '@path': '$.context.device.advertisingId'
42
+ }
43
+ },
44
+ event_name: {
45
+ label: 'Event Name',
46
+ description: 'The name of the current Segment event.',
47
+ type: 'hidden',
48
+ default: {
49
+ '@path': '$.event'
50
+ }
51
+ },
52
+ enable_batching: {
53
+ label: 'Enable Batching',
54
+ description: 'Enable batching of requests to the TikTok Audiences.',
55
+ type: 'boolean',
56
+ default: true
57
+ },
58
+ personas_audience_key: {
59
+ label: 'Segment Engage Audience Key',
60
+ description: 'The `audience_key` of the Engage audience you want to sync to TikTok. This value must be a hard-coded string variable, e.g. `personas_test_audience`, in order for batching to work properly.',
61
+ type: 'string'
62
+ }
63
+ },
64
+ perform: async (request, { settings, payload }) => {
65
+ return processPayload(request, settings, [payload]);
66
+ },
67
+ performBatch: async (request, { settings, payload }) => {
68
+ return processPayload(request, settings, payload);
69
+ }
70
+ };
71
+ async function processPayload(request, settings, payloads) {
72
+ validate(payloads);
73
+ const TikTokApiClient = new api_1.TikTokAudiences(request);
74
+ const audiences = await getAllAudiences(TikTokApiClient, settings);
75
+ const audience_id = await getAudienceID(TikTokApiClient, settings, payloads[0], audiences);
76
+ const users = extractUsers(payloads, audience_id);
77
+ let res;
78
+ if (users.length > 0) {
79
+ const elements = {
80
+ advertiser_ids: [settings.advertiser_id],
81
+ action: 'add',
82
+ data: users
83
+ };
84
+ res = await TikTokApiClient.batchUpdate(elements);
85
+ }
86
+ return res;
87
+ }
88
+ function validate(payloads) {
89
+ if (payloads[0].custom_audience_name !== payloads[0].personas_audience_key) {
90
+ throw new actions_core_1.IntegrationError('The value of `custom_audience_name` and `personas_audience_key` must match.', 'INVALID_SETTINGS', 400);
91
+ }
92
+ }
93
+ async function getAllAudiences(TikTokApiClient, settings) {
94
+ let response = await TikTokApiClient.getAudiences(settings, 1, 100);
95
+ let audiences = response.data.data.list;
96
+ const total_number_audiences = response.data.data.page_info.total_number;
97
+ let recieved_audiences = 100;
98
+ let page_number = 2;
99
+ while (recieved_audiences < total_number_audiences) {
100
+ response = await TikTokApiClient.getAudiences(settings, page_number, 100);
101
+ audiences = audiences.concat(response.data.data.list);
102
+ page_number += 1;
103
+ recieved_audiences += 100;
104
+ }
105
+ return audiences;
106
+ }
107
+ async function getAudienceID(TikTokApiClient, settings, payload, audiences) {
108
+ let audienceID;
109
+ const audienceExists = audiences.filter(function (audience) {
110
+ if (audience.name === payload.custom_audience_name) {
111
+ return audience.audience_id;
112
+ }
113
+ });
114
+ if (audienceExists.length > 0) {
115
+ audienceID = audienceExists[0].audience_id;
116
+ }
117
+ else {
118
+ const response = await TikTokApiClient.createAudience(settings, payload);
119
+ audienceID = response.data.data.audience_id;
120
+ }
121
+ return audienceID;
122
+ }
123
+ function getAction(payload) {
124
+ if (payload.event_name === 'Audience Entered') {
125
+ return 'add';
126
+ }
127
+ else if (payload.event_name === 'Audience Exited') {
128
+ return 'delete';
129
+ }
130
+ }
131
+ function extractUsers(payloads, audienceID) {
132
+ const data = [];
133
+ payloads.forEach((payload) => {
134
+ if (!payload.email && !payload.google_advertising_id) {
135
+ return;
136
+ }
137
+ const payloadAction = getAction(payload);
138
+ if (payloadAction === 'add') {
139
+ return;
140
+ }
141
+ if (payload.id_type == 'EMAIL_SHA256' && payload.email) {
142
+ payload.email = payload.email.replace(/\+.*@/, '@').replace(/\./g, '').toLowerCase();
143
+ data.push({
144
+ id_type: 'EMAIL_SHA256',
145
+ id: crypto_1.createHash('sha256').update(payload.email).digest('hex'),
146
+ audience_ids: [audienceID]
147
+ });
148
+ }
149
+ if (payload.id_type == 'GAID_SHA256' && payload.google_advertising_id) {
150
+ data.push({
151
+ id_type: 'GAID_SHA256',
152
+ id: crypto_1.createHash('sha256').update(payload.google_advertising_id).digest('hex'),
153
+ audience_ids: [audienceID]
154
+ });
155
+ }
156
+ });
157
+ return data;
158
+ }
159
+ exports.default = action;
160
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/tiktok-audiences/updateAudience/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface Settings {
2
+ accountSid: string;
3
+ authToken: string;
4
+ spaceId: string;
5
+ profileApiAccessToken: string;
6
+ }
@@ -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/twilio-studio/generated-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { DestinationDefinition } from '@segment/actions-core';
2
+ import type { Settings } from './generated-types';
3
+ declare const destination: DestinationDefinition<Settings>;
4
+ export default destination;
@@ -0,0 +1,55 @@
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 triggerStudioFlow_1 = __importDefault(require("./triggerStudioFlow"));
7
+ const destination = {
8
+ name: 'Twilio Studio',
9
+ slug: 'actions-twilio-studio',
10
+ mode: 'cloud',
11
+ authentication: {
12
+ scheme: 'basic',
13
+ fields: {
14
+ accountSid: {
15
+ label: 'Account SID',
16
+ description: 'Your Twilio Account SID, starting with AC. You can find this in the Account Info section of your dashboard in the [Twilio Console](https://www.twilio.com/console).',
17
+ type: 'string',
18
+ required: true
19
+ },
20
+ authToken: {
21
+ label: 'Auth Token',
22
+ description: 'Your Twilio Auth Token. You can find this in the Account Info section of your dashboard in the [Twilio Console](https://www.twilio.com/console).',
23
+ type: 'password',
24
+ required: true
25
+ },
26
+ spaceId: {
27
+ label: 'Space ID',
28
+ description: 'Your Segment Space ID.',
29
+ type: 'string',
30
+ required: true
31
+ },
32
+ profileApiAccessToken: {
33
+ label: 'Profile API Access Token',
34
+ description: 'Your Segment Profile API Access Token.',
35
+ type: 'password',
36
+ required: true
37
+ }
38
+ },
39
+ testAuthentication: (request) => {
40
+ return request('https://api.twilio.com/2010-04-01/Accounts');
41
+ }
42
+ },
43
+ extendRequest({ settings }) {
44
+ return {
45
+ headers: {
46
+ authorization: `Basic ${Buffer.from(`${settings.accountSid}:${settings.authToken}`).toString('base64')}`
47
+ }
48
+ };
49
+ },
50
+ actions: {
51
+ triggerStudioFlow: triggerStudioFlow_1.default
52
+ }
53
+ };
54
+ exports.default = destination;
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/twilio-studio/index.ts"],"names":[],"mappings":";;;;;AAGA,4EAAmD;AAEnD,MAAM,WAAW,GAAoC;IACnD,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE,OAAO;IAEb,cAAc,EAAE;QACd,MAAM,EAAE,OAAO;QACf,MAAM,EAAE;YACN,UAAU,EAAE;gBACV,KAAK,EAAE,aAAa;gBACpB,WAAW,EACT,qKAAqK;gBACvK,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;YACD,SAAS,EAAE;gBACT,KAAK,EAAE,YAAY;gBACnB,WAAW,EACT,kJAAkJ;gBACpJ,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;aACf;YACD,OAAO,EAAE;gBACP,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,wBAAwB;gBACrC,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;YACD,qBAAqB,EAAE;gBACrB,KAAK,EAAE,0BAA0B;gBACjC,WAAW,EAAE,wCAAwC;gBACrD,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;aACf;SACF;QACD,kBAAkB,EAAE,CAAC,OAAO,EAAE,EAAE;YAC9B,OAAO,OAAO,CAAC,4CAA4C,CAAC,CAAA;QAC9D,CAAC;KACF;IAED,aAAa,CAAC,EAAE,QAAQ,EAAE;QACxB,OAAO;YACL,OAAO,EAAE;gBACP,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;aACzG;SACF,CAAA;IACH,CAAC;IAED,OAAO,EAAE;QACP,iBAAiB,EAAjB,2BAAiB;KAClB;CACF,CAAA;AAED,kBAAe,WAAW,CAAA"}
@@ -0,0 +1,8 @@
1
+ export interface Payload {
2
+ flowSid: string;
3
+ from: string;
4
+ coolingOffPeriod?: number;
5
+ userId?: string;
6
+ anonymousId?: string;
7
+ eventType: string;
8
+ }
@@ -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/twilio-studio/triggerStudioFlow/generated-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { 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,84 @@
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: 'Trigger Studio Flow',
7
+ description: 'Trigger a Flow in Twilio Studio to initiate an outbound call or message. The Flow will execute via the REST API trigger.',
8
+ fields: {
9
+ flowSid: {
10
+ label: 'Flow SID',
11
+ description: 'The Flow SID, starting with FW, for the Studio Flow to trigger.',
12
+ type: 'string',
13
+ required: true
14
+ },
15
+ from: {
16
+ label: 'From Phone Number',
17
+ description: 'The Twilio phone number to initiate calls or messages from during the Flow Execution. Use [E.164](https://www.twilio.com/docs/glossary/what-e164) format (+1xxxxxxxxxx).',
18
+ type: 'string',
19
+ required: true
20
+ },
21
+ coolingOffPeriod: {
22
+ label: 'Cooling-off Period (in seconds)',
23
+ description: 'The amount of time during which the Flow can only be triggered once per Flow SID - User ID combination. Default is 60 seconds.',
24
+ type: 'number',
25
+ default: 60
26
+ },
27
+ userId: {
28
+ label: 'User ID',
29
+ description: 'A Distinct User ID',
30
+ type: 'hidden',
31
+ default: { '@path': '$.userId' }
32
+ },
33
+ anonymousId: {
34
+ label: 'Anonymous ID',
35
+ description: 'A Distinct External ID',
36
+ type: 'hidden',
37
+ default: { '@path': '$.anonymousId' }
38
+ },
39
+ eventType: {
40
+ label: 'Event type',
41
+ type: 'hidden',
42
+ description: 'The type of the event being performed.',
43
+ required: true,
44
+ default: {
45
+ '@path': '$.type'
46
+ }
47
+ }
48
+ },
49
+ perform: async (request, { settings, payload, stateContext }) => {
50
+ if (payload.eventType !== 'identify') {
51
+ throw new actions_core_1.IntegrationError('Unable to trigger Studio Flow. Only Identify Events are allowed!', `Incompatible Event Type: ${payload.eventType}`, 400);
52
+ }
53
+ if (!payload.userId && !payload.anonymousId) {
54
+ throw new actions_core_1.IntegrationError('Unable to trigger Studio Flow. No User identifier found for this Segment profile!', `No userId found in the Segment Event`, 400);
55
+ }
56
+ if (stateContext &&
57
+ !utils_1.shouldSendToStudio(`${payload.flowSid}_${payload.userId || payload.anonymousId}`, stateContext, payload.coolingOffPeriod)) {
58
+ throw new actions_core_1.IntegrationError(`Unable to trigger Studio Flow. Only 1 request allowed per Flow SID - User ID combination in ${payload.coolingOffPeriod || utils_1.DEFAULT_COOLING_OFF_PERIOD} seconds`, 'Cooling off Period', 400);
59
+ }
60
+ const toAddress = await utils_1.getToAddressField(request, settings, payload);
61
+ if (!toAddress) {
62
+ throw new actions_core_1.IntegrationError('Unable to trigger Studio Flow. No Contact Address Found!', 'Trigger Studio Flow no contact address found failure', 400);
63
+ }
64
+ const url = `${utils_1.STUDIO_BASE_URL}/v2/Flows/${payload.flowSid}/Executions`;
65
+ const parametersMap = JSON.stringify({ source: 'studio_segment_destination' });
66
+ try {
67
+ await request(url, {
68
+ method: 'post',
69
+ body: new URLSearchParams({
70
+ From: payload.from,
71
+ To: toAddress,
72
+ Parameters: parametersMap
73
+ })
74
+ });
75
+ }
76
+ catch (err) {
77
+ const error = err;
78
+ const errData = error.response.data;
79
+ throw new actions_core_1.IntegrationError(`Unable to trigger Studio Flow. ${errData?.message}`, `Twilio Error Code: ${errData?.code}`, errData?.status);
80
+ }
81
+ }
82
+ };
83
+ exports.default = action;
84
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/twilio-studio/triggerStudioFlow/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { RequestOptions, HTTPError } from '@segment/actions-core';
2
+ import { StateContext } from '@segment/actions-core/src/destination-kit';
3
+ import type { Settings } from './generated-types';
4
+ import type { Payload } from './triggerStudioFlow/generated-types';
5
+ interface ExternalId {
6
+ id: string;
7
+ type: string;
8
+ source_id: string;
9
+ collection: string;
10
+ created_at: string;
11
+ encoding: string;
12
+ }
13
+ declare type RequestFn = (url: string, options?: RequestOptions) => Promise<Response>;
14
+ export interface TwilioError extends HTTPError {
15
+ response: Response & {
16
+ data: {
17
+ status: number;
18
+ message: string;
19
+ code: string;
20
+ };
21
+ };
22
+ }
23
+ export declare const STUDIO_BASE_URL = "https://studio.twilio.com";
24
+ export declare const PROFILE_API_BASE_URL = "https://profiles.segment.com";
25
+ export declare const DEFAULT_COOLING_OFF_PERIOD = 60;
26
+ export declare const getToAddressField: (request: RequestFn, settings: Settings, payload: Payload) => Promise<string | false>;
27
+ export declare const fetchProfileExternalIds: (request: RequestFn, settings: Settings, userId: string, anonymousId: string) => Promise<ExternalId[]>;
28
+ export declare const shouldSendToStudio: (cacheKey: string, stateContext: StateContext, coolingOffPeriod: number) => boolean;
29
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shouldSendToStudio = exports.fetchProfileExternalIds = exports.getToAddressField = exports.DEFAULT_COOLING_OFF_PERIOD = exports.PROFILE_API_BASE_URL = exports.STUDIO_BASE_URL = void 0;
4
+ const actions_core_1 = require("@segment/actions-core");
5
+ exports.STUDIO_BASE_URL = 'https://studio.twilio.com';
6
+ exports.PROFILE_API_BASE_URL = 'https://profiles.segment.com';
7
+ exports.DEFAULT_COOLING_OFF_PERIOD = 60;
8
+ const getToAddressField = async (request, settings, payload) => {
9
+ const externalIds = await exports.fetchProfileExternalIds(request, settings, payload.userId, payload.anonymousId);
10
+ if (externalIds.length <= 0) {
11
+ return false;
12
+ }
13
+ const latestId = externalIds.reduce((acc, current) => {
14
+ return new Date(acc.created_at) > new Date(current.created_at) ? acc : current;
15
+ });
16
+ return latestId?.id;
17
+ };
18
+ exports.getToAddressField = getToAddressField;
19
+ const fetchProfileExternalIds = async (request, settings, userId, anonymousId) => {
20
+ try {
21
+ const identifier = userId ? `user_id:${userId}` : `anonymous_id:${anonymousId}`;
22
+ const response = await request(`${exports.PROFILE_API_BASE_URL}/v1/spaces/${settings.spaceId}/collections/users/profiles/${identifier}/external_ids?include=phone`, {
23
+ headers: {
24
+ authorization: `Basic ${Buffer.from(settings.profileApiAccessToken + ':').toString('base64')}`,
25
+ 'content-type': 'application/json'
26
+ }
27
+ });
28
+ const body = await response.json();
29
+ return body.data;
30
+ }
31
+ catch (error) {
32
+ throw new actions_core_1.IntegrationError('Unable to trigger Studio Flow. Fetching phone external Id failed.', 'Profile fetch API failure', 500);
33
+ }
34
+ };
35
+ exports.fetchProfileExternalIds = fetchProfileExternalIds;
36
+ const shouldSendToStudio = (cacheKey, stateContext, coolingOffPeriod) => {
37
+ if (stateContext?.getRequestContext?.(cacheKey))
38
+ return false;
39
+ stateContext?.setResponseContext?.(cacheKey, cacheKey, { second: coolingOffPeriod || exports.DEFAULT_COOLING_OFF_PERIOD });
40
+ return true;
41
+ };
42
+ exports.shouldSendToStudio = shouldSendToStudio;
43
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/destinations/twilio-studio/utils.ts"],"names":[],"mappings":";;;AAAA,wDAAmF;AAwBtE,QAAA,eAAe,GAAG,2BAA2B,CAAA;AAC7C,QAAA,oBAAoB,GAAG,8BAA8B,CAAA;AAGrD,QAAA,0BAA0B,GAAG,EAAE,CAAA;AAGrC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAkB,EAAE,QAAkB,EAAE,OAAgB,EAAE,EAAE;IAClG,MAAM,WAAW,GAAG,MAAM,+BAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAO,EAAE,OAAO,CAAC,WAAY,CAAC,CAAA;IAC3G,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;QAC3B,OAAO,KAAK,CAAA;KACb;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QACnD,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAA;IAChF,CAAC,CAAC,CAAA;IACF,OAAO,QAAQ,EAAE,EAAE,CAAA;AACrB,CAAC,CAAA;AATY,QAAA,iBAAiB,qBAS7B;AAGM,MAAM,uBAAuB,GAAG,KAAK,EAC1C,OAAkB,EAClB,QAAkB,EAClB,MAAc,EACd,WAAmB,EACI,EAAE;IACzB,IAAI;QAKF,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,gBAAgB,WAAW,EAAE,CAAA;QAC/E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,GAAG,4BAAoB,cAAc,QAAQ,CAAC,OAAO,+BAA+B,UAAU,6BAA6B,EAC3H;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAC9F,cAAc,EAAE,kBAAkB;aACnC;SACF,CACF,CAAA;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,OAAO,IAAI,CAAC,IAAI,CAAA;KACjB;IAAC,OAAO,KAAc,EAAE;QACvB,MAAM,IAAI,+BAAgB,CACxB,mEAAmE,EACnE,2BAA2B,EAC3B,GAAG,CACJ,CAAA;KACF;AACH,CAAC,CAAA;AA9BY,QAAA,uBAAuB,2BA8BnC;AAGM,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAE,YAA0B,EAAE,gBAAwB,EAAW,EAAE;IACpH,IAAI,YAAY,EAAE,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAA;IAC7D,YAAY,EAAE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,gBAAgB,IAAI,kCAA0B,EAAE,CAAC,CAAA;IAClH,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAJY,QAAA,kBAAkB,sBAI9B"}
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.131.0",
4
+ "version": "3.131.1-stageTesting-tiktok-ga4.45+d9271289",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/segmentio/action-destinations",
@@ -39,8 +39,8 @@
39
39
  "dependencies": {
40
40
  "@amplitude/ua-parser-js": "^0.7.25",
41
41
  "@segment/a1-notation": "^2.1.4",
42
- "@segment/actions-core": "^3.51.0",
43
- "@segment/actions-shared": "^1.33.0",
42
+ "@segment/actions-core": "^3.51.1-tiktok-audiences.8+ae6f324be",
43
+ "@segment/actions-shared": "^1.33.1-tiktok-audiences.8+ae6f324be",
44
44
  "@types/node": "^18.11.15",
45
45
  "cheerio": "^1.0.0-rc.10",
46
46
  "dayjs": "^1.10.7",
@@ -68,5 +68,5 @@
68
68
  "lcov"
69
69
  ]
70
70
  },
71
- "gitHead": "b484885a96bac95f42941ba2770f95fe5d816d62"
71
+ "gitHead": "d9271289df23f58c22eb4237930d1f6de7978ad5"
72
72
  }