@move-lab/shippify-node
Version:
This library allows you to quickly use Shippify API with NodeJS
131 lines (106 loc) • 3.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _axios = require('axios');
var _axios2 = _interopRequireDefault(_axios);
var _Delivery = require('./objects/Delivery');
var _Delivery2 = _interopRequireDefault(_Delivery);
var _Quotes = require('./objects/Quotes');
var _Quotes2 = _interopRequireDefault(_Quotes);
var _Quote = require('./objects/Quote');
var _Quote2 = _interopRequireDefault(_Quote);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var setting = {
key: '',
secret: '',
endpoint: 'https://api.shippify.co'
};
var endpoints = {
'quotes': '/v1/deliveries/quotes',
'deliveries': '/v1/deliveries',
'deliveries/complete': '/v1/deliveries/{:id}/complete',
'deliveries/token': '/v1/deliveries/token/{:id}',
'deliveries/labels': '/v1/deliveries/{:ids}/labels',
'deliveries/cancel': '/v1/deliveries/{:id}/cancel',
'draft': '/v1/deliveries/drafts',
'webhook': '/hooks/companies/{:company}'
};
function headers() {
var basic = Buffer.from(setting.key + ':' + setting.secret, 'ascii');
return {
'Content-Type': 'application/json',
Authorization: 'Basic ' + basic.toString('base64')
};
}
function initialize(key, secret, endpoint) {
setting.key = key;
setting.secret = secret;
setting.endpoint = endpoint || setting.endpoint;
}
/* REQUESTs */
var request = {
get: async function get(uri) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return _axios2.default.get('' + setting.endpoint + uri, Object.assign(options, {
headers: headers()
}));
},
post: async function post(uri, data) {
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return _axios2.default.post('' + setting.endpoint + uri, data, Object.assign(options, {
headers: headers()
}));
}
};
async function quotes() {
var delivery = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var opts = Object.assign({
// date: date.getTime(),
express: false,
flexible: true,
limit: null,
timeslots: true
}, options);
var deliveries = [].concat(delivery).map(function (delivery) {
if (delivery.pickup && date) {
delivery.pickup.date = new Date(date).getTime();
}
return delivery;
});
var quotesResponse = await request.post(endpoints['quotes'], Object.assign({
deliveries: deliveries
}, opts));
return _Quotes2.default.parse(quotesResponse.data);
}
async function deliveries(deliveries, quoteId) {
var metadata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
var deliveryRequest = Object.assign({
deliveries: deliveries.map(function (delivery) {
return Object.assign(delivery, metadata);
}),
quoteId: quoteId
}, options);
var deliveryResponse = await request.post(endpoints['deliveries'], deliveryRequest);
return deliveryResponse.data.payload;
}
deliveries.cancel = async function deliveryCancel(id) {
var deliveryCancelResponse = await request.post(endpoints['deliveries/cancel'].replace('{:id}', id));
return deliveryCancelResponse.data;
};
deliveries.complete = async function deliveryCancel(id) {
var deliveryCancelResponse = await request.post(endpoints['deliveries/complete'].replace('{:id}', id));
return deliveryCancelResponse.data;
};
exports.default = {
initialize: initialize,
quotes: quotes,
deliveries: deliveries,
// Objects
Delivery: _Delivery2.default,
Quotes: _Quotes2.default,
Quote: _Quote2.default
};