-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathindex.js
59 lines (54 loc) · 1.16 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const util = require('util')
const urls = {
ups: 'https://wwwapps.ups.com/WebTracking/track?track=yes&trackNums=%s',
fedex: 'https://www.fedex.com/Tracking?action=track&tracknumbers=%s',
usps: 'https://tools.usps.com/go/TrackConfirmAction_input?qtc_tLabels1=%s'
}
const carriers = [
{
name: 'UPS',
regex: /^1Z[0-9A-Z]{16}$/i
},
{
name: 'UPS',
regex: /^[\dT]\d{10}$/i
},
{
name: 'USPS',
regex: /^82\d{8}$/i
},
{
name: 'USPS',
regex: /^(EA|EC|CP|RA)\d{9}(\D{2})?$/i
},
{
name: 'USPS',
regex: /^(7\d|03|23|91|94)(\d{18}|\d{20})$/i
},
{
name: 'FedEx',
regex: /^\d{12}$/i
},
{
name: 'FedEx',
regex: /^\d{15}$/i
},
{
name: 'USPS',
regex: /^[A-Za-z]{2}[0-9]+US$/i
}
]
const getCarrier = track => {
let carrier
if (track) {
track = track.replace(/\s+/g, '')
carrier = carriers.find(c => track.match(c.regex))
}
return carrier ? carrier.name : false
}
const getCarrierLink = (carrier, code) => {
carrier = String(carrier).toLowerCase()
return urls[carrier] ? util.format(urls[carrier], code) : false
}
exports.getCarrier = getCarrier
exports.getCarrierLink = getCarrierLink