@segment/actions-shared 1.147.1-staging-49cc16573.0 → 1.149.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 (46) hide show
  1. package/dist/dotdigital/api/dd-api.d.ts +11 -0
  2. package/dist/dotdigital/api/dd-api.js +38 -0
  3. package/dist/dotdigital/api/dd-api.js.map +1 -0
  4. package/dist/dotdigital/api/index.d.ts +9 -0
  5. package/dist/dotdigital/api/index.js +23 -0
  6. package/dist/dotdigital/api/index.js.map +1 -0
  7. package/dist/dotdigital/api/resources/dd-campaign-api.d.ts +9 -0
  8. package/dist/dotdigital/api/resources/dd-campaign-api.js +52 -0
  9. package/dist/dotdigital/api/resources/dd-campaign-api.js.map +1 -0
  10. package/dist/dotdigital/api/resources/dd-contact-api.d.ts +18 -0
  11. package/dist/dotdigital/api/resources/dd-contact-api.js +50 -0
  12. package/dist/dotdigital/api/resources/dd-contact-api.js.map +1 -0
  13. package/dist/dotdigital/api/resources/dd-cpaas-api.d.ts +8 -0
  14. package/dist/dotdigital/api/resources/dd-cpaas-api.js +17 -0
  15. package/dist/dotdigital/api/resources/dd-cpaas-api.js.map +1 -0
  16. package/dist/dotdigital/api/resources/dd-datafields-api.d.ts +17 -0
  17. package/dist/dotdigital/api/resources/dd-datafields-api.js +99 -0
  18. package/dist/dotdigital/api/resources/dd-datafields-api.js.map +1 -0
  19. package/dist/dotdigital/api/resources/dd-email-api.d.ts +15 -0
  20. package/dist/dotdigital/api/resources/dd-email-api.js +29 -0
  21. package/dist/dotdigital/api/resources/dd-email-api.js.map +1 -0
  22. package/dist/dotdigital/api/resources/dd-enrolment-api.d.ts +9 -0
  23. package/dist/dotdigital/api/resources/dd-enrolment-api.js +33 -0
  24. package/dist/dotdigital/api/resources/dd-enrolment-api.js.map +1 -0
  25. package/dist/dotdigital/api/resources/dd-lists-api.d.ts +10 -0
  26. package/dist/dotdigital/api/resources/dd-lists-api.js +41 -0
  27. package/dist/dotdigital/api/resources/dd-lists-api.js.map +1 -0
  28. package/dist/dotdigital/api/resources/dd-sms-api.d.ts +7 -0
  29. package/dist/dotdigital/api/resources/dd-sms-api.js +21 -0
  30. package/dist/dotdigital/api/resources/dd-sms-api.js.map +1 -0
  31. package/dist/dotdigital/api/types.d.ts +117 -0
  32. package/dist/dotdigital/api/types.js +10 -0
  33. package/dist/dotdigital/api/types.js.map +1 -0
  34. package/dist/dotdigital/helpers/functions/checkAndCleanEmail.d.ts +3 -0
  35. package/dist/dotdigital/helpers/functions/checkAndCleanEmail.js +23 -0
  36. package/dist/dotdigital/helpers/functions/checkAndCleanEmail.js.map +1 -0
  37. package/dist/dotdigital/helpers/functions/checkAndCleanMobileNumber.d.ts +2 -0
  38. package/dist/dotdigital/helpers/functions/checkAndCleanMobileNumber.js +16 -0
  39. package/dist/dotdigital/helpers/functions/checkAndCleanMobileNumber.js.map +1 -0
  40. package/dist/dotdigital/helpers/functions/index.d.ts +2 -0
  41. package/dist/dotdigital/helpers/functions/index.js +12 -0
  42. package/dist/dotdigital/helpers/functions/index.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.js +12 -0
  45. package/dist/index.js.map +1 -1
  46. package/package.json +3 -3
@@ -0,0 +1,11 @@
1
+ import { RequestClient } from '@segment/actions-core';
2
+ declare abstract class DDApi {
3
+ private readonly apiUrl;
4
+ private readonly request;
5
+ protected constructor(api_host: string, request: RequestClient);
6
+ protected get<TResponse>(endpoint: string, params?: Record<string, unknown>): Promise<import("@segment/actions-core").ModifiedResponse<TResponse>>;
7
+ protected post<ResponseType, RequestJSON>(endpoint: string, data: RequestJSON): Promise<import("@segment/actions-core").ModifiedResponse<ResponseType>>;
8
+ protected delete(endpoint: string): Promise<import("@segment/actions-core").ModifiedResponse<unknown>>;
9
+ protected patch<ResponseType, RequestJSON>(endpoint: string, data: RequestJSON): Promise<import("@segment/actions-core").ModifiedResponse<ResponseType>>;
10
+ }
11
+ export default DDApi;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class DDApi {
4
+ constructor(api_host, request) {
5
+ this.apiUrl = api_host;
6
+ this.request = request;
7
+ }
8
+ async get(endpoint, params) {
9
+ const url = new URL(`${this.apiUrl}${endpoint}`);
10
+ if (params) {
11
+ url.search = new URLSearchParams(Object.fromEntries(Object.entries(params).map(([k, v]) => [k, String(v)]))).toString();
12
+ }
13
+ return await this.request(`${url}`, {
14
+ method: 'GET'
15
+ });
16
+ }
17
+ async post(endpoint, data) {
18
+ return await this.request(`${this.apiUrl}${endpoint}`, {
19
+ method: 'POST',
20
+ json: data,
21
+ headers: { 'Content-Type': 'application/json' }
22
+ });
23
+ }
24
+ async delete(endpoint) {
25
+ return await this.request(`${this.apiUrl}${endpoint}`, {
26
+ method: 'DELETE'
27
+ });
28
+ }
29
+ async patch(endpoint, data) {
30
+ return await this.request(`${this.apiUrl}${endpoint}`, {
31
+ method: 'PATCH',
32
+ json: data,
33
+ headers: { 'Content-Type': 'application/json' }
34
+ });
35
+ }
36
+ }
37
+ exports.default = DDApi;
38
+ //# sourceMappingURL=dd-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dd-api.js","sourceRoot":"","sources":["../../../src/dotdigital/api/dd-api.ts"],"names":[],"mappings":";;AAEA,MAAe,KAAK;IAIlB,YAAsB,QAAgB,EAAE,OAAsB;QAC5D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IASS,KAAK,CAAC,GAAG,CAAY,QAAgB,EAAE,MAAgC;QAC/E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAA;QAChD,IAAI,MAAM,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,GAAG,IAAI,eAAe,CAC9B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3E,CAAC,QAAQ,EAAE,CAAA;QACd,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAY,GAAG,GAAG,EAAE,EAAE;YAC7C,MAAM,EAAE,KAAK;SACd,CAAC,CAAA;IACJ,CAAC;IASS,KAAK,CAAC,IAAI,CAA4B,QAAgB,EAAE,IAAiB;QACjF,OAAO,MAAM,IAAI,CAAC,OAAO,CAAe,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAA;IACJ,CAAC;IAMS,KAAK,CAAC,MAAM,CAAC,QAAgB;QACrC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,EAAE;YACrD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAA;IACJ,CAAC;IASS,KAAK,CAAC,KAAK,CAA4B,QAAgB,EAAE,IAAiB;QAClF,OAAO,MAAM,IAAI,CAAC,OAAO,CAAe,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,EAAE;YACnE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAA;IACJ,CAAC;CACF;AAED,kBAAe,KAAK,CAAA"}
@@ -0,0 +1,9 @@
1
+ export { default as DDContactApi } from './resources/dd-contact-api';
2
+ export { default as DDListsApi } from './resources/dd-lists-api';
3
+ export { default as DDEnrolmentApi } from './resources/dd-enrolment-api';
4
+ export { default as DDDataFieldsApi } from './resources/dd-datafields-api';
5
+ export { default as DDCpaasApi } from './resources/dd-cpaas-api';
6
+ export { default as DDSmsApi } from './resources/dd-sms-api';
7
+ export { default as DDCampaignApi } from './resources/dd-campaign-api';
8
+ export { default as DDEmailApi } from './resources/dd-email-api';
9
+ export type { default as DDApi } from './dd-api';
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DDEmailApi = exports.DDCampaignApi = exports.DDSmsApi = exports.DDCpaasApi = exports.DDDataFieldsApi = exports.DDEnrolmentApi = exports.DDListsApi = exports.DDContactApi = void 0;
7
+ var dd_contact_api_1 = require("./resources/dd-contact-api");
8
+ Object.defineProperty(exports, "DDContactApi", { enumerable: true, get: function () { return __importDefault(dd_contact_api_1).default; } });
9
+ var dd_lists_api_1 = require("./resources/dd-lists-api");
10
+ Object.defineProperty(exports, "DDListsApi", { enumerable: true, get: function () { return __importDefault(dd_lists_api_1).default; } });
11
+ var dd_enrolment_api_1 = require("./resources/dd-enrolment-api");
12
+ Object.defineProperty(exports, "DDEnrolmentApi", { enumerable: true, get: function () { return __importDefault(dd_enrolment_api_1).default; } });
13
+ var dd_datafields_api_1 = require("./resources/dd-datafields-api");
14
+ Object.defineProperty(exports, "DDDataFieldsApi", { enumerable: true, get: function () { return __importDefault(dd_datafields_api_1).default; } });
15
+ var dd_cpaas_api_1 = require("./resources/dd-cpaas-api");
16
+ Object.defineProperty(exports, "DDCpaasApi", { enumerable: true, get: function () { return __importDefault(dd_cpaas_api_1).default; } });
17
+ var dd_sms_api_1 = require("./resources/dd-sms-api");
18
+ Object.defineProperty(exports, "DDSmsApi", { enumerable: true, get: function () { return __importDefault(dd_sms_api_1).default; } });
19
+ var dd_campaign_api_1 = require("./resources/dd-campaign-api");
20
+ Object.defineProperty(exports, "DDCampaignApi", { enumerable: true, get: function () { return __importDefault(dd_campaign_api_1).default; } });
21
+ var dd_email_api_1 = require("./resources/dd-email-api");
22
+ Object.defineProperty(exports, "DDEmailApi", { enumerable: true, get: function () { return __importDefault(dd_email_api_1).default; } });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dotdigital/api/index.ts"],"names":[],"mappings":";;;;;;AAAA,6DAAoE;AAA3D,+HAAA,OAAO,OAAgB;AAChC,yDAAgE;AAAvD,2HAAA,OAAO,OAAc;AAC9B,iEAAwE;AAA/D,mIAAA,OAAO,OAAkB;AAClC,mEAA0E;AAAjE,qIAAA,OAAO,OAAmB;AACnC,yDAAgE;AAAvD,2HAAA,OAAO,OAAc;AAC9B,qDAA4D;AAAnD,uHAAA,OAAO,OAAY;AAC5B,+DAAsE;AAA7D,iIAAA,OAAO,OAAiB;AACjC,yDAAgE;AAAvD,2HAAA,OAAO,OAAc"}
@@ -0,0 +1,9 @@
1
+ import { DynamicFieldResponse, ModifiedResponse, RequestClient } from '@segment/actions-core';
2
+ import DDApi from '../dd-api';
3
+ declare class DDCampaignApi extends DDApi {
4
+ constructor(api_host: string, client: RequestClient);
5
+ getCampaignsPaging(select?: number, skip?: number): Promise<ModifiedResponse<unknown>>;
6
+ getCampaigns(): Promise<DynamicFieldResponse>;
7
+ sendCampaign(campaignId: number, contactId: number, sendDate?: string | number | undefined, sendTimeOptimised?: boolean): Promise<ModifiedResponse<unknown>>;
8
+ }
9
+ export default DDCampaignApi;
@@ -0,0 +1,52 @@
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 dd_api_1 = __importDefault(require("../dd-api"));
7
+ class DDCampaignApi extends dd_api_1.default {
8
+ constructor(api_host, client) {
9
+ super(api_host, client);
10
+ }
11
+ async getCampaignsPaging(select = 1000, skip = 0) {
12
+ return await this.get('/v2/campaigns', { select, skip });
13
+ }
14
+ async getCampaigns() {
15
+ const choices = [];
16
+ const select = 200;
17
+ let skip = 0;
18
+ let hasMoreData = true;
19
+ while (hasMoreData) {
20
+ const response = await this.getCampaignsPaging(select, skip);
21
+ const content = JSON.parse(response.content);
22
+ if (content.length === 0) {
23
+ hasMoreData = false;
24
+ break;
25
+ }
26
+ else {
27
+ choices.push(...content.map((campaign) => ({
28
+ value: campaign.id.toString(),
29
+ label: campaign.name
30
+ })));
31
+ skip += select;
32
+ }
33
+ }
34
+ return { choices: choices };
35
+ }
36
+ async sendCampaign(campaignId, contactId, sendDate, sendTimeOptimised) {
37
+ const sendCampaignPayload = {
38
+ campaignID: campaignId,
39
+ contactIDs: [contactId],
40
+ sendDate: sendDate
41
+ };
42
+ let endpoint = `/v2/campaigns/send`;
43
+ if (sendTimeOptimised) {
44
+ endpoint = `/v2/campaigns/send-time-optimised`;
45
+ delete sendCampaignPayload.sendDate;
46
+ }
47
+ const response = await this.post(endpoint, sendCampaignPayload);
48
+ return response;
49
+ }
50
+ }
51
+ exports.default = DDCampaignApi;
52
+ //# sourceMappingURL=dd-campaign-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dd-campaign-api.js","sourceRoot":"","sources":["../../../../src/dotdigital/api/resources/dd-campaign-api.ts"],"names":[],"mappings":";;;;;AACA,uDAA6B;AAO7B,MAAM,aAAc,SAAQ,gBAAK;IAC/B,YAAY,QAAgB,EAAE,MAAqB;QACjD,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACzB,CAAC;IAQD,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC;QAC9C,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,CAAC;IAOD,KAAK,CAAC,YAAY;QAChB,MAAM,OAAO,GAAG,EAAE,CAAA;QAClB,MAAM,MAAM,GAAG,GAAG,CAAA;QAClB,IAAI,IAAI,GAAG,CAAC,CAAA;QAEZ,IAAI,WAAW,GAAG,IAAI,CAAA;QACtB,OAAO,WAAW,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAC9E,MAAM,OAAO,GAAe,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,WAAW,GAAG,KAAK,CAAA;gBACnB,MAAK;YACP,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,QAAkB,EAAE,EAAE,CAAC,CAAC;oBACtC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE;oBAC7B,KAAK,EAAE,QAAQ,CAAC,IAAI;iBACrB,CAAC,CAAC,CACJ,CAAA;gBACD,IAAI,IAAI,MAAM,CAAA;YAChB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IAC7B,CAAC;IAUM,KAAK,CAAC,YAAY,CACvB,UAAkB,EAClB,SAAiB,EACjB,QAAsC,EACtC,iBAA2B;QAE3B,MAAM,mBAAmB,GAAwB;YAC/C,UAAU,EAAE,UAAU;YACtB,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,QAAQ,EAAE,QAAQ;SACnB,CAAA;QACD,IAAI,QAAQ,GAAG,oBAAoB,CAAA;QAEnC,IAAI,iBAAiB,EAAE,CAAC;YACtB,QAAQ,GAAG,mCAAmC,CAAA;YAC9C,OAAO,mBAAmB,CAAC,QAAQ,CAAA;QACrC,CAAC;QAED,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAA;QACjF,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF;AAED,kBAAe,aAAa,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { RequestClient } from '@segment/actions-core';
2
+ import DDApi from '../dd-api';
3
+ import { Contact, ChannelIdentifier } from '../types';
4
+ declare class DDContactApi extends DDApi {
5
+ constructor(api_host: string, client: RequestClient);
6
+ getContact(idType: string, idValue: string | undefined): Promise<Contact>;
7
+ fetchOrCreateContact<T>(channelIdentifier: ChannelIdentifier, data: T): Promise<Contact>;
8
+ upsertContact(payload: {
9
+ channelIdentifier: string;
10
+ emailIdentifier?: string;
11
+ mobileNumberIdentifier?: string;
12
+ listId: number;
13
+ dataFields?: {
14
+ [k: string]: unknown;
15
+ };
16
+ }): Promise<Contact>;
17
+ }
18
+ export default DDContactApi;
@@ -0,0 +1,50 @@
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 dd_api_1 = __importDefault(require("../dd-api"));
7
+ class DDContactApi extends dd_api_1.default {
8
+ constructor(api_host, client) {
9
+ super(api_host, client);
10
+ }
11
+ async getContact(idType, idValue) {
12
+ const response = await this.get(`/contacts/v3/${idType}/${idValue}`);
13
+ return response.data;
14
+ }
15
+ async fetchOrCreateContact(channelIdentifier, data) {
16
+ const [[idType, idValue]] = Object.entries(channelIdentifier);
17
+ const response = await this.patch(`/contacts/v3/${idType}/${idValue}`, data);
18
+ return response.data;
19
+ }
20
+ async upsertContact(payload) {
21
+ const { channelIdentifier, emailIdentifier, mobileNumberIdentifier, listId, dataFields } = payload;
22
+ const idValue = channelIdentifier === 'email' ? emailIdentifier : mobileNumberIdentifier;
23
+ const identifiers = {
24
+ ...(emailIdentifier && { email: emailIdentifier }),
25
+ ...(mobileNumberIdentifier && { mobileNumber: mobileNumberIdentifier })
26
+ };
27
+ const channelProperties = {
28
+ ...(emailIdentifier && {
29
+ email: {
30
+ status: 'subscribed',
31
+ emailType: 'html',
32
+ optInType: 'single'
33
+ }
34
+ }),
35
+ ...(mobileNumberIdentifier && {
36
+ sms: { status: 'subscribed' }
37
+ })
38
+ };
39
+ const data = {
40
+ identifiers,
41
+ channelProperties,
42
+ lists: [listId],
43
+ dataFields: dataFields
44
+ };
45
+ const response = await this.patch(`/contacts/v3/${channelIdentifier}/${idValue}?merge-option=overwrite`, data);
46
+ return response.data;
47
+ }
48
+ }
49
+ exports.default = DDContactApi;
50
+ //# sourceMappingURL=dd-contact-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dd-contact-api.js","sourceRoot":"","sources":["../../../../src/dotdigital/api/resources/dd-contact-api.ts"],"names":[],"mappings":";;;;;AACA,uDAA6B;AAG7B,MAAM,YAAa,SAAQ,gBAAK;IAC9B,YAAY,QAAgB,EAAE,MAAqB;QACjD,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACzB,CAAC;IAUD,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,OAA2B;QAC1D,MAAM,QAAQ,GAA8B,MAAM,IAAI,CAAC,GAAG,CAAU,gBAAgB,MAAM,IAAI,OAAO,EAAE,CAAC,CAAA;QACxG,OAAO,QAAQ,CAAC,IAAI,CAAA;IACtB,CAAC;IAUD,KAAK,CAAC,oBAAoB,CAAI,iBAAoC,EAAE,IAAO;QACzE,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAC7D,MAAM,QAAQ,GAA8B,MAAM,IAAI,CAAC,KAAK,CAAa,gBAAgB,MAAM,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,CAAA;QACnH,OAAO,QAAQ,CAAC,IAAI,CAAA;IACtB,CAAC;IAOM,KAAK,CAAC,aAAa,CAAC,OAM1B;QACC,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;QAElG,MAAM,OAAO,GAAG,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,sBAAsB,CAAA;QAExF,MAAM,WAAW,GAAgB;YAC/B,GAAG,CAAC,eAAe,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;YAClD,GAAG,CAAC,sBAAsB,IAAI,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;SACxE,CAAA;QAED,MAAM,iBAAiB,GAAsB;YAC3C,GAAG,CAAC,eAAe,IAAI;gBACrB,KAAK,EAAE;oBACL,MAAM,EAAE,YAAY;oBACpB,SAAS,EAAE,MAAM;oBACjB,SAAS,EAAE,QAAQ;iBACpB;aACF,CAAC;YACF,GAAG,CAAC,sBAAsB,IAAI;gBAC5B,GAAG,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;aAC9B,CAAC;SACH,CAAA;QAED,MAAM,IAAI,GAAsB;YAC9B,WAAW;YACX,iBAAiB;YACjB,KAAK,EAAE,CAAC,MAAM,CAAC;YACf,UAAU,EAAE,UAAwB;SACrC,CAAA;QAED,MAAM,QAAQ,GAA8B,MAAM,IAAI,CAAC,KAAK,CAC1D,gBAAgB,iBAAiB,IAAI,OAAO,yBAAyB,EACrE,IAAI,CACL,CAAA;QAED,OAAO,QAAQ,CAAC,IAAI,CAAA;IACtB,CAAC;CACF;AAED,kBAAe,YAAY,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { RequestClient } from '@segment/actions-core';
2
+ import DDApi from '../dd-api';
3
+ import { CpaasMessageBody } from '../types';
4
+ declare class DDCpaasApi extends DDApi {
5
+ constructor(api_host: string, client: RequestClient);
6
+ sendTransactionalSms(body: CpaasMessageBody): Promise<unknown>;
7
+ }
8
+ export default DDCpaasApi;
@@ -0,0 +1,17 @@
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 dd_api_1 = __importDefault(require("../dd-api"));
7
+ class DDCpaasApi extends dd_api_1.default {
8
+ constructor(api_host, client) {
9
+ super(api_host, client);
10
+ }
11
+ async sendTransactionalSms(body) {
12
+ const response = await this.post(`/cpaas/messages`, body);
13
+ return response.data;
14
+ }
15
+ }
16
+ exports.default = DDCpaasApi;
17
+ //# sourceMappingURL=dd-cpaas-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dd-cpaas-api.js","sourceRoot":"","sources":["../../../../src/dotdigital/api/resources/dd-cpaas-api.ts"],"names":[],"mappings":";;;;;AACA,uDAA6B;AAG7B,MAAM,UAAW,SAAQ,gBAAK;IAC5B,YAAY,QAAgB,EAAE,MAAqB;QACjD,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAsB;QAC/C,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;QAE3E,OAAO,QAAQ,CAAC,IAAI,CAAA;IACtB,CAAC;CACF;AAED,kBAAe,UAAU,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { RequestClient, DynamicFieldResponse } from '@segment/actions-core';
2
+ import DDApi from '../dd-api';
3
+ import type { FieldTypeName } from '@segment/actions-core/destination-kittypes';
4
+ declare class DDDataFieldsApi extends DDApi {
5
+ constructor(api_host: string, client: RequestClient);
6
+ getDataFields(): Promise<DynamicFieldResponse>;
7
+ mapDataFieldType(fieldType: string): FieldTypeName;
8
+ isNumeric(value: unknown): boolean;
9
+ validateDataFields(payload: {
10
+ dataFields?: {
11
+ [k: string]: unknown;
12
+ };
13
+ }): Promise<{
14
+ [k: string]: unknown;
15
+ } | undefined>;
16
+ }
17
+ export default DDDataFieldsApi;
@@ -0,0 +1,99 @@
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 dd_api_1 = __importDefault(require("../dd-api"));
8
+ class DDDataFieldsApi extends dd_api_1.default {
9
+ constructor(api_host, client) {
10
+ super(api_host, client);
11
+ }
12
+ async getDataFields() {
13
+ const choices = [];
14
+ const response = await this.get('/v2/data-fields/');
15
+ const dataFields = response.data;
16
+ choices.push(...dataFields.map((dataField) => ({
17
+ value: dataField.name,
18
+ label: dataField.name,
19
+ type: this.mapDataFieldType(dataField.type)
20
+ })));
21
+ return { choices };
22
+ }
23
+ mapDataFieldType(fieldType) {
24
+ switch (fieldType) {
25
+ case 'String':
26
+ return 'string';
27
+ case 'Numeric':
28
+ return 'number';
29
+ case 'Date':
30
+ return 'datetime';
31
+ case 'Boolean':
32
+ return 'boolean';
33
+ default:
34
+ throw new actions_core_1.PayloadValidationError(`Invalid data field type: ${fieldType}`);
35
+ }
36
+ }
37
+ isNumeric(value) {
38
+ const type = typeof value;
39
+ return (type === 'number' || type === 'string') && !isNaN(Number(value));
40
+ }
41
+ async validateDataFields(payload) {
42
+ const dataFields = payload.dataFields;
43
+ if (!dataFields) {
44
+ return;
45
+ }
46
+ const response = await this.get('/v2/data-fields/');
47
+ const ddDataFields = response.data;
48
+ for (const [key, value] of Object.entries(dataFields)) {
49
+ let validatedValue = value;
50
+ const ddDataField = ddDataFields.find((obj) => obj.name === key);
51
+ if (!ddDataField) {
52
+ throw new actions_core_1.PayloadValidationError(`Data field ${key} not found in Dotdigital`);
53
+ }
54
+ switch (ddDataField.type) {
55
+ case 'Date':
56
+ if (typeof value !== 'string') {
57
+ throw new actions_core_1.PayloadValidationError(`Data field ${key} value ${value} is not a valid date`);
58
+ }
59
+ else {
60
+ const date = new Date(value).toISOString();
61
+ if (date === undefined) {
62
+ throw new actions_core_1.PayloadValidationError(`Data field ${key} value ${value} is not a valid date`);
63
+ }
64
+ validatedValue = date;
65
+ }
66
+ break;
67
+ case 'Numeric':
68
+ if (typeof value === 'string') {
69
+ if (!this.isNumeric(value)) {
70
+ throw new actions_core_1.PayloadValidationError(`Data field ${key} value ${value} is not a valid number`);
71
+ }
72
+ }
73
+ else if (typeof value !== 'number') {
74
+ throw new actions_core_1.PayloadValidationError(`Data field ${key} value ${value} is not a valid number`);
75
+ }
76
+ break;
77
+ case 'Boolean':
78
+ if (typeof value === 'string' && value.trim().toLocaleLowerCase() === 'true') {
79
+ validatedValue = true;
80
+ }
81
+ else if (typeof value === 'string' && value.trim().toLocaleLowerCase() === 'false') {
82
+ validatedValue = false;
83
+ }
84
+ validatedValue = Boolean(validatedValue);
85
+ break;
86
+ case 'String':
87
+ if (typeof value !== 'string') {
88
+ throw new actions_core_1.PayloadValidationError(`Data field ${key} value ${value} is not a valid string`);
89
+ }
90
+ validatedValue = String(value).trim();
91
+ break;
92
+ }
93
+ dataFields[key] = validatedValue;
94
+ }
95
+ return dataFields;
96
+ }
97
+ }
98
+ exports.default = DDDataFieldsApi;
99
+ //# sourceMappingURL=dd-datafields-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dd-datafields-api.js","sourceRoot":"","sources":["../../../../src/dotdigital/api/resources/dd-datafields-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { RequestClient } from '@segment/actions-core';
2
+ import DDApi from '../dd-api';
3
+ declare class DDEmailApi extends DDApi {
4
+ constructor(api_host: string, client: RequestClient);
5
+ sendTransactionalEmail(payload: {
6
+ toAddresses: string;
7
+ ccAddresses?: string;
8
+ bccAddresses?: string;
9
+ subject: string;
10
+ fromAddress: string;
11
+ htmlContent: string;
12
+ plainTextContent?: string;
13
+ }): Promise<import("@segment/actions-core").ModifiedResponse<unknown>>;
14
+ }
15
+ export default DDEmailApi;
@@ -0,0 +1,29 @@
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 dd_api_1 = __importDefault(require("../dd-api"));
7
+ const functions_1 = require("../../helpers/functions");
8
+ class DDEmailApi extends dd_api_1.default {
9
+ constructor(api_host, client) {
10
+ super(api_host, client);
11
+ }
12
+ async sendTransactionalEmail(payload) {
13
+ const toAddresses = (0, functions_1.cleanEmails)(payload.toAddresses);
14
+ const ccAddresses = (0, functions_1.cleanEmails)(payload.ccAddresses);
15
+ const bccAddresses = (0, functions_1.cleanEmails)(payload.bccAddresses);
16
+ const fromAddress = (0, functions_1.checkAndCleanEmail)(payload.fromAddress);
17
+ return await this.post('/v2/email', {
18
+ ToAddresses: toAddresses,
19
+ CCAddresses: ccAddresses,
20
+ BCCAddresses: bccAddresses,
21
+ Subject: payload.subject,
22
+ FromAddress: fromAddress,
23
+ HtmlContent: payload.htmlContent,
24
+ PlainTextContent: payload.plainTextContent
25
+ });
26
+ }
27
+ }
28
+ exports.default = DDEmailApi;
29
+ //# sourceMappingURL=dd-email-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dd-email-api.js","sourceRoot":"","sources":["../../../../src/dotdigital/api/resources/dd-email-api.ts"],"names":[],"mappings":";;;;;AACA,uDAA6B;AAC7B,uDAAyE;AAMzE,MAAM,UAAW,SAAQ,gBAAK;IAC5B,YAAY,QAAgB,EAAE,MAAqB;QACjD,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACzB,CAAC;IAOM,KAAK,CAAC,sBAAsB,CAAC,OAAmK;QACrM,MAAM,WAAW,GAAG,IAAA,uBAAW,EAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACpD,MAAM,WAAW,GAAG,IAAA,uBAAW,EAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACpD,MAAM,YAAY,GAAG,IAAA,uBAAW,EAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QACtD,MAAM,WAAW,GAAG,IAAA,8BAAkB,EAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC3D,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAClC,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,WAAW;YACxB,YAAY,EAAE,YAAY;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC3C,CAAC,CAAA;IACJ,CAAC;CACF;AAED,kBAAe,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { RequestClient, DynamicFieldResponse } from '@segment/actions-core';
2
+ import DDApi from '../dd-api';
3
+ import { Contact, ProgramEnrolment } from '../types';
4
+ declare class DDEnrolmentApi extends DDApi {
5
+ constructor(api_host: string, client: RequestClient);
6
+ getPrograms(): Promise<DynamicFieldResponse>;
7
+ enrolContact(programId: string, contact: Contact): Promise<ProgramEnrolment>;
8
+ }
9
+ export default DDEnrolmentApi;
@@ -0,0 +1,33 @@
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 dd_api_1 = __importDefault(require("../dd-api"));
7
+ const types_1 = require("../types");
8
+ class DDEnrolmentApi extends dd_api_1.default {
9
+ constructor(api_host, client) {
10
+ super(api_host, client);
11
+ }
12
+ async getPrograms() {
13
+ const response = await this.get('/v2/programs');
14
+ const programs = response.data;
15
+ const choices = programs
16
+ .filter((program) => program.status === types_1.ProgramStatus.Active)
17
+ .map((program) => ({
18
+ value: program.id.toString(),
19
+ label: program.name
20
+ }));
21
+ return { choices };
22
+ }
23
+ async enrolContact(programId, contact) {
24
+ const json = {
25
+ contacts: [contact.contactId],
26
+ programId
27
+ };
28
+ const response = await this.post('/v2/programs/enrolments', json);
29
+ return response.data;
30
+ }
31
+ }
32
+ exports.default = DDEnrolmentApi;
33
+ //# sourceMappingURL=dd-enrolment-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dd-enrolment-api.js","sourceRoot":"","sources":["../../../../src/dotdigital/api/resources/dd-enrolment-api.ts"],"names":[],"mappings":";;;;;AACA,uDAA6B;AAC7B,oCAAmG;AAMnG,MAAM,cAAe,SAAQ,gBAAK;IAChC,YAAY,QAAgB,EAAE,MAAqB;QACjD,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACzB,CAAC;IAMM,KAAK,CAAC,WAAW;QACtB,MAAM,QAAQ,GAAgC,MAAM,IAAI,CAAC,GAAG,CAAY,cAAc,CAAC,CAAA;QACvF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAA;QAC9B,MAAM,OAAO,GAAG,QAAQ;aACrB,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,qBAAa,CAAC,MAAM,CAAC;aACrE,GAAG,CAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC;YAC1B,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE;YAC5B,KAAK,EAAE,OAAO,CAAC,IAAI;SACpB,CAAC,CAAC,CAAA;QACL,OAAO,EAAE,OAAO,EAAE,CAAA;IACpB,CAAC;IAQM,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,OAAgB;QAC3D,MAAM,IAAI,GAA0B;YAClC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;YAC7B,SAAS;SACV,CAAA;QACD,MAAM,QAAQ,GAAuC,MAAM,IAAI,CAAC,IAAI,CAClE,yBAAyB,EACzB,IAAI,CACL,CAAA;QACD,OAAO,QAAQ,CAAC,IAAI,CAAA;IACtB,CAAC;CACF;AAED,kBAAe,cAAc,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { ModifiedResponse, RequestClient, DynamicFieldResponse } from '@segment/actions-core';
2
+ import DDApi from '../dd-api';
3
+ import { List } from '../types';
4
+ declare class DDListsApi extends DDApi {
5
+ constructor(api_host: string, request: RequestClient);
6
+ getListsPaging(select?: number, skip?: number): Promise<ModifiedResponse<List[]>>;
7
+ getLists(): Promise<DynamicFieldResponse>;
8
+ deleteContactFromList(listId: number, contactId: number): Promise<void>;
9
+ }
10
+ export default DDListsApi;
@@ -0,0 +1,41 @@
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 dd_api_1 = __importDefault(require("../dd-api"));
7
+ class DDListsApi extends dd_api_1.default {
8
+ constructor(api_host, request) {
9
+ super(api_host, request);
10
+ }
11
+ async getListsPaging(select = 1000, skip = 0) {
12
+ return await this.get('/v2/address-books', { select, skip });
13
+ }
14
+ async getLists() {
15
+ const choices = [];
16
+ const select = 200;
17
+ let skip = 0;
18
+ let hasMoreData = true;
19
+ while (hasMoreData) {
20
+ const response = await this.getListsPaging(select, skip);
21
+ const content = response.data;
22
+ if (content.length === 0) {
23
+ hasMoreData = false;
24
+ break;
25
+ }
26
+ else {
27
+ choices.push(...content.map((list) => ({
28
+ value: list.id.toString(),
29
+ label: list.name
30
+ })));
31
+ skip += select;
32
+ }
33
+ }
34
+ return { choices: choices };
35
+ }
36
+ async deleteContactFromList(listId, contactId) {
37
+ await this.delete(`/v2/address-books/${listId}/contacts/${contactId}`);
38
+ }
39
+ }
40
+ exports.default = DDListsApi;
41
+ //# sourceMappingURL=dd-lists-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dd-lists-api.js","sourceRoot":"","sources":["../../../../src/dotdigital/api/resources/dd-lists-api.ts"],"names":[],"mappings":";;;;;AACA,uDAA6B;AAG7B,MAAM,UAAW,SAAQ,gBAAK;IAC5B,YAAY,QAAgB,EAAE,OAAsB;QAClD,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC1B,CAAC;IAQD,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC;QAC1C,OAAO,MAAM,IAAI,CAAC,GAAG,CAAS,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IACtE,CAAC;IAOD,KAAK,CAAC,QAAQ;QACZ,MAAM,OAAO,GAAG,EAAE,CAAA;QAClB,MAAM,MAAM,GAAG,GAAG,CAAA;QAClB,IAAI,IAAI,GAAG,CAAC,CAAA;QAEZ,IAAI,WAAW,GAAG,IAAI,CAAA;QACtB,OAAO,WAAW,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAA;YAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,WAAW,GAAG,KAAK,CAAA;gBACnB,MAAK;YACP,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,CAAC;oBAC9B,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;oBACzB,KAAK,EAAE,IAAI,CAAC,IAAI;iBACjB,CAAC,CAAC,CACJ,CAAA;gBACD,IAAI,IAAI,MAAM,CAAA;YAChB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IAC7B,CAAC;IAUD,KAAK,CAAC,qBAAqB,CAAC,MAAc,EAAE,SAAiB;QAC3D,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,MAAM,aAAa,SAAS,EAAE,CAAC,CAAA;IACxE,CAAC;CACF;AAED,kBAAe,UAAU,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { ModifiedResponse, RequestClient } from '@segment/actions-core';
2
+ import DDApi from '../dd-api';
3
+ declare class DDSmsApi extends DDApi {
4
+ constructor(api_host: string, client: RequestClient);
5
+ sendSms(mobileNumber: string, message: string): Promise<ModifiedResponse<unknown>>;
6
+ }
7
+ export default DDSmsApi;
@@ -0,0 +1,21 @@
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 dd_api_1 = __importDefault(require("../dd-api"));
7
+ const functions_1 = require("../../helpers/functions");
8
+ class DDSmsApi extends dd_api_1.default {
9
+ constructor(api_host, client) {
10
+ super(api_host, client);
11
+ }
12
+ async sendSms(mobileNumber, message) {
13
+ const formattedNumber = (0, functions_1.checkAndCleanMobileNumber)(mobileNumber);
14
+ const response = await this.post(`/v2/sms-messages/send-to/${formattedNumber}`, {
15
+ message: message
16
+ });
17
+ return response;
18
+ }
19
+ }
20
+ exports.default = DDSmsApi;
21
+ //# sourceMappingURL=dd-sms-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dd-sms-api.js","sourceRoot":"","sources":["../../../../src/dotdigital/api/resources/dd-sms-api.ts"],"names":[],"mappings":";;;;;AACA,uDAA6B;AAC7B,uDAAmE;AAMnE,MAAM,QAAS,SAAQ,gBAAK;IAC1B,YAAY,QAAgB,EAAE,MAAqB;QACjD,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACzB,CAAC;IAQM,KAAK,CAAC,OAAO,CAAC,YAAoB,EAAE,OAAe;QACxD,MAAM,eAAe,GAAG,IAAA,qCAAyB,EAAC,YAAY,CAAC,CAAA;QAC/D,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,eAAe,EAAE,EAAE;YAChG,OAAO,EAAE,OAAO;SACjB,CAAC,CAAA;QACF,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF;AAED,kBAAe,QAAQ,CAAA"}
@@ -0,0 +1,117 @@
1
+ export interface DynamicFieldResponse {
2
+ choices: Array<{
3
+ value: number;
4
+ label: string;
5
+ }>;
6
+ nextPage?: string;
7
+ error?: {
8
+ message: string;
9
+ code: string;
10
+ };
11
+ }
12
+ export interface List {
13
+ id: number;
14
+ name: string;
15
+ status: string;
16
+ }
17
+ export interface Campaign {
18
+ id: number;
19
+ name: string;
20
+ }
21
+ export interface sendCampaignPayload {
22
+ campaignID: number;
23
+ contactIDs: [number];
24
+ sendDate?: string | number | undefined;
25
+ }
26
+ export interface DataField {
27
+ name: string;
28
+ type: 'String' | 'Numeric' | 'Date' | 'Boolean';
29
+ visibility: string;
30
+ defaultValue: string | null;
31
+ }
32
+ export interface Identifiers {
33
+ email?: string;
34
+ mobileNumber?: string;
35
+ }
36
+ export interface DataFields {
37
+ [key: string]: string | number | boolean | null;
38
+ }
39
+ export interface ChannelProperties {
40
+ email?: {
41
+ status: string;
42
+ emailType: string;
43
+ optInType: string;
44
+ };
45
+ sms?: {
46
+ status: string;
47
+ };
48
+ }
49
+ interface ConsentRecord {
50
+ text: string;
51
+ dateTimeConsented: string;
52
+ url: string;
53
+ ipAddress: string;
54
+ userAgent: string;
55
+ }
56
+ export interface Contact {
57
+ contactId: number;
58
+ status: string;
59
+ created: string;
60
+ updated: string;
61
+ identifiers: Identifiers;
62
+ dataFields: DataFields;
63
+ channelProperties: ChannelProperties;
64
+ lists: List[];
65
+ consentRecords: ConsentRecord[];
66
+ }
67
+ export declare enum ProgramStatus {
68
+ Active = "Active",
69
+ Draft = "Draft",
70
+ Deactivated = "Deactivated"
71
+ }
72
+ export interface Program {
73
+ id: number;
74
+ name: string;
75
+ status: ProgramStatus;
76
+ dateCreated: string;
77
+ }
78
+ export interface ProgramEnrolment {
79
+ id: string;
80
+ programId: number;
81
+ status: string;
82
+ dateCreated: string;
83
+ contacts: null | unknown;
84
+ addressBooks: null | unknown;
85
+ }
86
+ export interface ProgramEnrolementJSON {
87
+ contacts: number[];
88
+ programId: string;
89
+ }
90
+ export type ChannelIdentifier = {
91
+ email: string;
92
+ 'mobileNumber'?: never;
93
+ } | {
94
+ 'mobileNumber': string;
95
+ email?: never;
96
+ };
97
+ export interface UpsertContactJSON {
98
+ identifiers: Identifiers;
99
+ channelProperties: ChannelProperties;
100
+ lists: number[];
101
+ dataFields?: DataFields;
102
+ }
103
+ export interface CpaasMessageBody {
104
+ to: {
105
+ phoneNumber: string;
106
+ };
107
+ body: string;
108
+ rules: string[];
109
+ channelOptions?: {
110
+ sms: {
111
+ from?: string;
112
+ allowUnicode?: boolean;
113
+ };
114
+ };
115
+ shortenLinks?: string;
116
+ }
117
+ export {};
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProgramStatus = void 0;
4
+ var ProgramStatus;
5
+ (function (ProgramStatus) {
6
+ ProgramStatus["Active"] = "Active";
7
+ ProgramStatus["Draft"] = "Draft";
8
+ ProgramStatus["Deactivated"] = "Deactivated";
9
+ })(ProgramStatus || (exports.ProgramStatus = ProgramStatus = {}));
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dotdigital/api/types.ts"],"names":[],"mappings":";;;AAyEA,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,kCAAiB,CAAA;IACjB,gCAAe,CAAA;IACf,4CAA2B,CAAA;AAC7B,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB"}
@@ -0,0 +1,3 @@
1
+ declare const checkAndCleanEmail: (email: string) => string;
2
+ declare const cleanEmails: (emailsString: string | undefined) => string[];
3
+ export { checkAndCleanEmail, cleanEmails };
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cleanEmails = exports.checkAndCleanEmail = void 0;
4
+ const checkAndCleanEmail = (email) => {
5
+ const expression = /^[a-zA-Z0-9.!#$%&'*+-=?^_`{|}~]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,9})$|^[\w\s]+<\s*[a-zA-Z0-9.!#$%&'*+-=?^_`{|}~]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,9})\s*>$/;
6
+ const trimmedEmail = email.trim();
7
+ if (!expression.test(trimmedEmail)) {
8
+ throw new Error(`Invalid email format: ${trimmedEmail}`);
9
+ }
10
+ return trimmedEmail;
11
+ };
12
+ exports.checkAndCleanEmail = checkAndCleanEmail;
13
+ const cleanEmails = (emailsString) => {
14
+ if (emailsString) {
15
+ const emails = emailsString.split(',');
16
+ if (typeof emails !== 'undefined' && Array.isArray(emails)) {
17
+ return emails.filter(Boolean).map((email) => checkAndCleanEmail(email));
18
+ }
19
+ }
20
+ return [];
21
+ };
22
+ exports.cleanEmails = cleanEmails;
23
+ //# sourceMappingURL=checkAndCleanEmail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkAndCleanEmail.js","sourceRoot":"","sources":["../../../../src/dotdigital/helpers/functions/checkAndCleanEmail.ts"],"names":[],"mappings":";;;AASA,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAU,EAAE;IACnD,MAAM,UAAU,GACd,sLAAsL,CAAA;IACxL,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAEjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA;AAqBQ,gDAAkB;AAX3B,MAAM,WAAW,GAAG,CAAC,YAAgC,EAAY,EAAE;IACjE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAEtC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAA;QACzE,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAE4B,kCAAW"}
@@ -0,0 +1,2 @@
1
+ declare const checkAndCleanMobileNumber: (mobileNumber: string) => string;
2
+ export default checkAndCleanMobileNumber;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const actions_core_1 = require("@segment/actions-core");
4
+ const MIN_PHONE_NUMBER_CHAR_LENGTH = 7;
5
+ function removeNonNumeric(mobileNumber) {
6
+ const numericOnly = mobileNumber.replace(/\D+/g, '');
7
+ if (numericOnly.length < MIN_PHONE_NUMBER_CHAR_LENGTH) {
8
+ throw new actions_core_1.PayloadValidationError('Invalid mobile number value');
9
+ }
10
+ return numericOnly;
11
+ }
12
+ const checkAndCleanMobileNumber = (mobileNumber) => {
13
+ return removeNonNumeric(mobileNumber);
14
+ };
15
+ exports.default = checkAndCleanMobileNumber;
16
+ //# sourceMappingURL=checkAndCleanMobileNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkAndCleanMobileNumber.js","sourceRoot":"","sources":["../../../../src/dotdigital/helpers/functions/checkAndCleanMobileNumber.ts"],"names":[],"mappings":";;AAAA,wDAA8D;AAE9D,MAAM,4BAA4B,GAAG,CAAC,CAAA;AAUtC,SAAS,gBAAgB,CAAC,YAAoB;IAC5C,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACpD,IAAI,WAAW,CAAC,MAAM,GAAG,4BAA4B,EAAE,CAAC;QACtD,MAAM,IAAI,qCAAsB,CAAC,6BAA6B,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,MAAM,yBAAyB,GAAG,CAAC,YAAoB,EAAE,EAAE;IACzD,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAA;AACvC,CAAC,CAAA;AAED,kBAAe,yBAAyB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { default as checkAndCleanMobileNumber } from './checkAndCleanMobileNumber';
2
+ export { checkAndCleanEmail, cleanEmails } from './checkAndCleanEmail';
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.cleanEmails = exports.checkAndCleanEmail = exports.checkAndCleanMobileNumber = void 0;
7
+ var checkAndCleanMobileNumber_1 = require("./checkAndCleanMobileNumber");
8
+ Object.defineProperty(exports, "checkAndCleanMobileNumber", { enumerable: true, get: function () { return __importDefault(checkAndCleanMobileNumber_1).default; } });
9
+ var checkAndCleanEmail_1 = require("./checkAndCleanEmail");
10
+ Object.defineProperty(exports, "checkAndCleanEmail", { enumerable: true, get: function () { return checkAndCleanEmail_1.checkAndCleanEmail; } });
11
+ Object.defineProperty(exports, "cleanEmails", { enumerable: true, get: function () { return checkAndCleanEmail_1.cleanEmails; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/dotdigital/helpers/functions/index.ts"],"names":[],"mappings":";;;;;;AAAA,yEAAkF;AAAzE,uJAAA,OAAO,OAA6B;AAC7C,2DAAsE;AAA7D,wHAAA,kBAAkB,OAAA;AAAE,iHAAA,WAAW,OAAA"}
package/dist/index.d.ts CHANGED
@@ -7,3 +7,6 @@ export * from './friendbuy/sharedPurchase';
7
7
  export * from './friendbuy/sharedSignUp';
8
8
  export * from './friendbuy/util';
9
9
  export * from './engage/utils';
10
+ export * from './dotdigital/api/types';
11
+ export * from './dotdigital/helpers/functions';
12
+ export { DDContactApi, DDListsApi, DDEnrolmentApi, DDDataFieldsApi, DDCpaasApi, DDSmsApi, DDCampaignApi, DDEmailApi } from './dotdigital/api';
package/dist/index.js CHANGED
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.DDEmailApi = exports.DDCampaignApi = exports.DDSmsApi = exports.DDCpaasApi = exports.DDDataFieldsApi = exports.DDEnrolmentApi = exports.DDListsApi = exports.DDContactApi = void 0;
17
18
  __exportStar(require("./friendbuy/commonFields"), exports);
18
19
  __exportStar(require("./friendbuy/contextFields"), exports);
19
20
  __exportStar(require("./friendbuy/mapEvent"), exports);
@@ -23,4 +24,15 @@ __exportStar(require("./friendbuy/sharedPurchase"), exports);
23
24
  __exportStar(require("./friendbuy/sharedSignUp"), exports);
24
25
  __exportStar(require("./friendbuy/util"), exports);
25
26
  __exportStar(require("./engage/utils"), exports);
27
+ __exportStar(require("./dotdigital/api/types"), exports);
28
+ __exportStar(require("./dotdigital/helpers/functions"), exports);
29
+ var api_1 = require("./dotdigital/api");
30
+ Object.defineProperty(exports, "DDContactApi", { enumerable: true, get: function () { return api_1.DDContactApi; } });
31
+ Object.defineProperty(exports, "DDListsApi", { enumerable: true, get: function () { return api_1.DDListsApi; } });
32
+ Object.defineProperty(exports, "DDEnrolmentApi", { enumerable: true, get: function () { return api_1.DDEnrolmentApi; } });
33
+ Object.defineProperty(exports, "DDDataFieldsApi", { enumerable: true, get: function () { return api_1.DDDataFieldsApi; } });
34
+ Object.defineProperty(exports, "DDCpaasApi", { enumerable: true, get: function () { return api_1.DDCpaasApi; } });
35
+ Object.defineProperty(exports, "DDSmsApi", { enumerable: true, get: function () { return api_1.DDSmsApi; } });
36
+ Object.defineProperty(exports, "DDCampaignApi", { enumerable: true, get: function () { return api_1.DDCampaignApi; } });
37
+ Object.defineProperty(exports, "DDEmailApi", { enumerable: true, get: function () { return api_1.DDEmailApi; } });
26
38
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAwC;AACxC,4DAAyC;AACzC,uDAAoC;AACpC,6DAA0C;AAC1C,gEAA6C;AAC7C,6DAA0C;AAC1C,2DAAwC;AACxC,mDAAgC;AAChC,iDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2DAAwC;AACxC,4DAAyC;AACzC,uDAAoC;AACpC,6DAA0C;AAC1C,gEAA6C;AAC7C,6DAA0C;AAC1C,2DAAwC;AACxC,mDAAgC;AAChC,iDAA8B;AAC9B,yDAAsC;AACtC,iEAA8C;AAC9C,wCASyB;AARvB,mGAAA,YAAY,OAAA;AACZ,iGAAA,UAAU,OAAA;AACV,qGAAA,cAAc,OAAA;AACd,sGAAA,eAAe,OAAA;AACf,iGAAA,UAAU,OAAA;AACV,+FAAA,QAAQ,OAAA;AACR,oGAAA,aAAa,OAAA;AACb,iGAAA,UAAU,OAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@segment/actions-shared",
3
3
  "description": "Shared destination action methods and definitions.",
4
- "version": "1.147.1-staging-49cc16573.0",
4
+ "version": "1.149.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/segmentio/action-destinations",
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@amplitude/ua-parser-js": "^0.7.25",
40
- "@segment/actions-core": "3.164.1-staging-49cc16573.0",
40
+ "@segment/actions-core": "^3.165.0",
41
41
  "cheerio": "^1.0.0-rc.10",
42
42
  "dayjs": "^1.10.7",
43
43
  "escape-goat": "^3",
@@ -64,5 +64,5 @@
64
64
  "<rootDir>/test/setup-after-env.ts"
65
65
  ]
66
66
  },
67
- "gitHead": "ddc0289e56e2f5a8a7560b18b8c5197643bce12d"
67
+ "gitHead": "1512cfc9fe015371d44106dc72068e89f79222a8"
68
68
  }