UNPKG

customerio-node

Version:

A node client for the Customer.io event API. http://customer.io

132 lines (131 loc) 6.11 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SendSMSRequest = exports.SendPushRequest = exports.SendEmailRequest = exports.APIClient = exports.DeliveryExportMetric = void 0; const request_1 = __importDefault(require("./request")); const regions_1 = require("./regions"); const requests_1 = require("./api/requests"); const utils_1 = require("./utils"); const types_1 = require("./types"); var DeliveryExportMetric; (function (DeliveryExportMetric) { DeliveryExportMetric["Created"] = "created"; DeliveryExportMetric["Attempted"] = "attempted"; DeliveryExportMetric["Sent"] = "sent"; DeliveryExportMetric["Delivered"] = "delivered"; DeliveryExportMetric["Opened"] = "opened"; DeliveryExportMetric["Clicked"] = "clicked"; DeliveryExportMetric["Converted"] = "converted"; DeliveryExportMetric["Bounced"] = "bounced"; DeliveryExportMetric["Spammed"] = "spammed"; DeliveryExportMetric["Unsubscribed"] = "unsubscribed"; DeliveryExportMetric["Dropped"] = "dropped"; DeliveryExportMetric["Failed"] = "failed"; DeliveryExportMetric["Undeliverable"] = "undeliverable"; })(DeliveryExportMetric = exports.DeliveryExportMetric || (exports.DeliveryExportMetric = {})); const BROADCASTS_ALLOWED_RECIPIENT_FIELDS = { ids: ['ids', 'id_ignore_missing'], emails: ['emails', 'email_ignore_missing', 'email_add_duplicates'], per_user_data: ['per_user_data', 'id_ignore_missing', 'email_ignore_missing', 'email_add_duplicates'], data_file_url: ['data_file_url', 'id_ignore_missing', 'email_ignore_missing', 'email_add_duplicates'], }; const filterRecipientsDataForField = (recipients, field) => { return BROADCASTS_ALLOWED_RECIPIENT_FIELDS[field].reduce((obj, field) => { if (!!recipients[field]) { obj[field] = recipients[field]; } return obj; }, {}); }; class APIClient { constructor(appKey, defaults = {}) { if (defaults.region && !(defaults.region instanceof regions_1.Region)) { throw new Error('region must be one of Regions.US or Regions.EU'); } this.appKey = appKey; this.defaults = Object.assign(Object.assign({}, defaults), { region: defaults.region || regions_1.RegionUS }); this.request = new request_1.default(this.appKey, this.defaults); this.apiRoot = this.defaults.url ? this.defaults.url : this.defaults.region.apiUrl; } sendEmail(req) { if (!(req instanceof requests_1.SendEmailRequest)) { throw new Error('"request" must be an instance of SendEmailRequest'); } return this.request.post(`${this.apiRoot}/send/email`, req.message); } sendPush(req) { if (!(req instanceof requests_1.SendPushRequest)) { throw new Error('"request" must be an instance of SendPushRequest'); } return this.request.post(`${this.apiRoot}/send/push`, req.message); } sendSMS(req) { if (!(req instanceof requests_1.SendSMSRequest)) { throw new Error('"request" must be an instance of SendSMSRequest'); } return this.request.post(`${this.apiRoot}/send/sms`, req.message); } getCustomersByEmail(email) { if (typeof email !== 'string' || (0, utils_1.isEmpty)(email)) { throw new Error('"email" must be a string'); } return this.request.get(`${this.apiRoot}/customers?email=${(0, utils_1.cleanEmail)(email)}`); } triggerBroadcast(id, data, recipients) { let payload = {}; let customRecipientField = Object.keys(BROADCASTS_ALLOWED_RECIPIENT_FIELDS).find((field) => recipients[field]); if (customRecipientField) { payload = Object.assign({ data }, filterRecipientsDataForField(recipients, customRecipientField)); } else { payload = { data, recipients, }; } return this.request.post(`${this.apiRoot}/api/campaigns/${id}/triggers`, payload); } listExports() { return this.request.get(`${this.apiRoot}/exports`); } getExport(id) { if ((0, utils_1.isEmpty)(id)) { throw new utils_1.MissingParamError('id'); } return this.request.get(`${this.apiRoot}/exports/${id}`); } downloadExport(id) { if ((0, utils_1.isEmpty)(id)) { throw new utils_1.MissingParamError('id'); } return this.request.get(`${this.apiRoot}/exports/${id}/download`); } createCustomersExport(filters) { if ((0, utils_1.isEmpty)(filters)) { throw new utils_1.MissingParamError('filters'); } return this.request.post(`${this.apiRoot}/exports/customers`, { filters }); } createDeliveriesExport(newsletterId, options) { if ((0, utils_1.isEmpty)(newsletterId)) { throw new utils_1.MissingParamError('newsletterId'); } return this.request.post(`${this.apiRoot}/exports/deliveries`, Object.assign({ newsletter_id: newsletterId }, options)); } getAttributes(id, idType = types_1.IdentifierType.Id) { if ((0, utils_1.isEmpty)(id)) { throw new utils_1.MissingParamError('customerId'); } if (!(0, utils_1.isIdentifierType)(idType)) { throw new Error('idType must be one of "id", "cio_id", or "email"'); } return this.request.get(`${this.apiRoot}/customers/${id}/attributes?id_type=${idType}`); } } exports.APIClient = APIClient; var requests_2 = require("./api/requests"); Object.defineProperty(exports, "SendEmailRequest", { enumerable: true, get: function () { return requests_2.SendEmailRequest; } }); Object.defineProperty(exports, "SendPushRequest", { enumerable: true, get: function () { return requests_2.SendPushRequest; } }); Object.defineProperty(exports, "SendSMSRequest", { enumerable: true, get: function () { return requests_2.SendSMSRequest; } });