customerio-node
Version:
A node client for the Customer.io event API. http://customer.io
132 lines (131 loc) • 6.11 kB
JavaScript
;
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; } });