@heuristical/trackit
Version:
This module allows you to connect to many shipping carriers like UPS and FedEx and download tracking data for your packages in a common schema
146 lines • 5.78 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ShipperClient = exports.STATUS_TYPES = void 0;
/* eslint-disable
standard/no-callback-literal,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS101: Remove unnecessary use of Array.from
* DS102: Remove unnecessary code created because of implicit returns
* DS206: Consider reworking classes to avoid initClass
* DS207: Consider shorter variations of null checks
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
const change_case_1 = require("change-case");
const request_1 = __importDefault(require("request"));
const date_fns_1 = require("date-fns");
// import moment from 'moment-timezone';
var STATUS_TYPES;
(function (STATUS_TYPES) {
STATUS_TYPES[STATUS_TYPES["UNKNOWN"] = 0] = "UNKNOWN";
STATUS_TYPES[STATUS_TYPES["SHIPPING"] = 1] = "SHIPPING";
STATUS_TYPES[STATUS_TYPES["EN_ROUTE"] = 2] = "EN_ROUTE";
STATUS_TYPES[STATUS_TYPES["OUT_FOR_DELIVERY"] = 3] = "OUT_FOR_DELIVERY";
STATUS_TYPES[STATUS_TYPES["DELIVERED"] = 4] = "DELIVERED";
STATUS_TYPES[STATUS_TYPES["DELAYED"] = 5] = "DELAYED";
})(STATUS_TYPES = exports.STATUS_TYPES || (exports.STATUS_TYPES = {}));
class ShipperClient {
presentPostalCode(rawCode) {
rawCode = rawCode != null ? rawCode.trim() : undefined;
if (/^\d{9}$/.test(rawCode)) {
return `${rawCode.slice(0, 5)}-${rawCode.slice(5)}`;
}
else {
return rawCode;
}
}
presentLocationString(location) {
const newFields = [];
for (let field of Array.from((location === null || location === void 0 ? void 0 : location.split(',')) || [])) {
field = field.trim();
if (field.length > 2) {
field = change_case_1.titleCase(field);
}
newFields.push(field);
}
return newFields.join(', ');
}
presentLocation({ city, stateCode, countryCode, postalCode }) {
let address;
if (city != null ? city.length : undefined) {
city = change_case_1.titleCase(city);
}
if (stateCode != null ? stateCode.length : undefined) {
stateCode = stateCode.trim();
if (stateCode.length > 3) {
stateCode = change_case_1.titleCase(stateCode);
}
if (city != null ? city.length : undefined) {
city = city.trim();
address = `${city}, ${stateCode}`;
}
else {
address = stateCode;
}
}
else {
address = city;
}
postalCode = this.presentPostalCode(postalCode);
if (countryCode != null ? countryCode.length : undefined) {
countryCode = countryCode.trim();
if (countryCode.length > 3) {
countryCode = change_case_1.titleCase(countryCode);
}
if ((address != null ? address.length : undefined)) {
address = countryCode !== 'US' ? `${address}, ${countryCode}` : address;
}
else {
address = countryCode;
}
}
if (postalCode != null ? postalCode.length : undefined) {
address = (address != null) ? `${address} ${postalCode}` : postalCode;
}
return address;
}
presentResponse(response, requestData, cb) {
return this.validateResponse(response, (err, shipment) => {
let adjustedEta;
if ((err != null) || (shipment == null)) {
return cb(err);
}
const { activities, status } = this.getActivitiesAndStatus(shipment);
const eta = this.getEta(shipment);
if (eta && date_fns_1.startOfDay(eta) === eta) {
adjustedEta = date_fns_1.endOfDay(eta);
}
if (adjustedEta === null) {
adjustedEta = eta;
}
const presentedResponse = {
eta: adjustedEta || eta,
service: this.getService(shipment),
weight: this.getWeight(shipment),
destination: this.getDestination(shipment),
activities,
status,
raw: undefined,
request: undefined
};
if ((requestData != null ? requestData.raw : undefined) != null) {
if (requestData.raw) {
presentedResponse.raw = response;
}
}
else {
if (this.options != null ? this.options.raw : undefined) {
presentedResponse.raw = response;
}
}
presentedResponse.request = requestData;
return cb(null, presentedResponse);
});
}
requestData(requestData, cb) {
const opts = this.requestOptions(requestData);
opts.timeout = (requestData != null ? requestData.timeout : undefined) || (this.options != null ? this.options.timeout : undefined);
return request_1.default(opts, (err, response, body) => {
if ((body == null) || (err != null)) {
return cb(err);
}
if (response.statusCode !== 200) {
return cb(`response status ${response.statusCode}`);
}
return this.presentResponse(body, requestData, cb);
});
}
}
exports.ShipperClient = ShipperClient;
//# sourceMappingURL=shipper.js.map