feathers-shippo
Version:
A Feathers JS adapter for the Shippo API
59 lines (58 loc) • 1.98 kB
JavaScript
import { ShippoService, axiosOpts, shippoLimiter, calcMinTime } from '../service';
// https://goshippo.com/docs/rate-limits/
const liveMinTimes = {
create: calcMinTime(50),
update: calcMinTime(50),
get: calcMinTime(400),
find: calcMinTime(50),
remove: calcMinTime(50)
};
const testMinTimes = {
create: calcMinTime(5),
update: calcMinTime(5),
get: calcMinTime(40),
find: calcMinTime(5),
remove: calcMinTime(50)
};
const shippoLimiters = (token) => {
const minTimes = token.startsWith('shippo_live')
? liveMinTimes
: testMinTimes;
return {
create: shippoLimiter('create', minTimes),
update: shippoLimiter('update', minTimes),
get: shippoLimiter('get', minTimes),
find: shippoLimiter('find', minTimes),
remove: shippoLimiter('remove', minTimes)
};
};
export class ShippoBatches extends ShippoService {
constructor(options, app) {
options = Object.assign(Object.assign({ limiters: shippoLimiters(options.token) }, options), { path: 'batches', methods: ['get', 'create'] });
super(options, app);
}
_update(id, data, params) {
return this.schedule('create', () => {
return this.shippo
.post(`batches/${id}/add_shipments`, data, axiosOpts(params))
.then(this.handleResult)
.catch(this.handleError);
});
}
_patch(id, data, params) {
return this.schedule('create', () => {
return this.shippo
.post(`batches/${id}/remove_shipments`, data, axiosOpts(params))
.then(this.handleResult)
.catch(this.handleError);
});
}
_remove(id, params) {
return this.schedule('create', () => {
return this.shippo
.post(`batches/${id}/purchase`, axiosOpts(params))
.then(this.handleResult)
.catch(this.handleError);
});
}
}