universal-parcel-scraper 0.181.0 → 0.183.0-main.1321
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/data/catalog.json +23 -5
- package/data/coverage-summary.json +1 -1
- package/data/detection-golden.json +50 -0
- package/dist/browser/scraper.js +21 -5
- package/dist/carriers/couriersplease/adapter.d.ts +17 -0
- package/dist/carriers/couriersplease/adapter.js +111 -0
- package/dist/carriers/couriersplease/carrier.json +51 -7
- package/dist/carriers/couriersplease/parser.d.ts +22 -0
- package/dist/carriers/couriersplease/parser.js +222 -0
- package/dist/carriers/couriersplease/status.d.ts +7 -0
- package/dist/carriers/couriersplease/status.js +96 -0
- package/dist/carriers/couriersplease/statuses.json +21 -18
- package/dist/carriers/gdex/adapter.d.ts +17 -0
- package/dist/carriers/gdex/adapter.js +58 -0
- package/dist/carriers/gdex/carrier.json +47 -7
- package/dist/carriers/gdex/numbers.json +38 -0
- package/dist/carriers/gdex/parser.d.ts +15 -0
- package/dist/carriers/gdex/parser.js +149 -0
- package/dist/carriers/gdex/status.d.ts +7 -0
- package/dist/carriers/gdex/status.js +41 -0
- package/dist/carriers/gdex/statuses.json +12 -3
- package/dist/carriers/leopards-courier/adapter.d.ts +13 -0
- package/dist/carriers/leopards-courier/adapter.js +73 -0
- package/dist/carriers/leopards-courier/carrier.json +52 -7
- package/dist/carriers/leopards-courier/numbers.json +6 -8
- package/dist/carriers/leopards-courier/parser.d.ts +26 -0
- package/dist/carriers/leopards-courier/parser.js +190 -0
- package/dist/carriers/leopards-courier/status.d.ts +7 -0
- package/dist/carriers/leopards-courier/status.js +34 -0
- package/dist/carriers/leopards-courier/statuses.json +4 -1
- package/dist/carriers/pos-indonesia/adapter.d.ts +14 -0
- package/dist/carriers/pos-indonesia/adapter.js +74 -0
- package/dist/carriers/pos-indonesia/carrier.json +53 -7
- package/dist/carriers/pos-indonesia/numbers.json +52 -14
- package/dist/carriers/pos-indonesia/parser.d.ts +25 -0
- package/dist/carriers/pos-indonesia/parser.js +201 -0
- package/dist/carriers/pos-indonesia/status.d.ts +12 -0
- package/dist/carriers/pos-indonesia/status.js +41 -0
- package/dist/carriers/pos-indonesia/statuses.json +7 -0
- package/dist/core/catalog/statusMaps.js +12 -5
- package/dist/data/catalog.json +23 -5
- package/dist/generated/catalog.d.ts +17 -5
- package/dist/generated/catalog.js +23 -5
- package/dist/generated/recognition.js +4 -0
- package/dist/generated/registry.js +12 -4
- package/dist/server/openapi.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
import { isValidS10TrackingNumber, normalizeTrackingNumber } from '../../core/detection/index.js';
|
|
3
|
+
import { IndeterminateError, InvalidInputError, NoHistoryError, NotFoundError, SchemaError } from '../../core/errors/index.js';
|
|
4
|
+
import { languageStageStatus } from '../../core/status/index.js';
|
|
5
|
+
import { countryCode } from '../../core/time/index.js';
|
|
6
|
+
import { clean, cleanScalar } from '../../core/transport/index.js';
|
|
7
|
+
import { isRecord } from '../../core/types.js';
|
|
8
|
+
import { posIndonesiaStage } from './status.js';
|
|
9
|
+
export const PROVIDER = 'Pos Indonesia';
|
|
10
|
+
// A long history is a few kilobytes.
|
|
11
|
+
export const POS_INDONESIA_MAX_BYTES = 512_000;
|
|
12
|
+
// A waybill: P, its posting date as YYMMDD, then seven digits, as the `pos-indonesia-1` rule reads it.
|
|
13
|
+
const WAYBILL = /^P\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{7}$/;
|
|
14
|
+
// The older domestic barcode.
|
|
15
|
+
const BARCODE = /^\d{11}$/;
|
|
16
|
+
const CLOCK = /^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2})(?:\.\d{1,6})?$/;
|
|
17
|
+
const STATE = /^[A-Z][A-Z0-9_]{0,39}$/;
|
|
18
|
+
const MAX_ROWS = 500;
|
|
19
|
+
const MAX_EVENTS = 100;
|
|
20
|
+
// The service's answer, with HTTP 400, to a number it holds nothing for.
|
|
21
|
+
const NOT_FOUND = 'data not found';
|
|
22
|
+
/** A number for Pos Indonesia's service: a waybill, an older domestic barcode or an S10 item code, Indonesian or inbound. */
|
|
23
|
+
export function normalizePosIndonesiaNumber(raw) {
|
|
24
|
+
const number = raw.length <= 64 ? normalizeTrackingNumber(raw).toUpperCase() : '';
|
|
25
|
+
if (WAYBILL.test(number) || BARCODE.test(number) || isValidS10TrackingNumber(number))
|
|
26
|
+
return number;
|
|
27
|
+
throw new InvalidInputError(PROVIDER, 'Pos Indonesia numbers are waybills, eleven-digit barcodes or S10 item codes');
|
|
28
|
+
}
|
|
29
|
+
// A field the service leaves without a value, as in `"actual_weight":,`.
|
|
30
|
+
const EMPTY_VALUE = /("[A-Za-z_]+":)(?=\s*[,}\]])/g;
|
|
31
|
+
/**
|
|
32
|
+
* The service's reply as JSON. For items it holds no waybill for, inbound
|
|
33
|
+
* items among them, it fills its template with nothing for numeric fields,
|
|
34
|
+
* which is not JSON; those fields are read as null.
|
|
35
|
+
*/
|
|
36
|
+
export function posIndonesiaPayload(text) {
|
|
37
|
+
const body = text.replace(/^\uFEFF/, '');
|
|
38
|
+
try {
|
|
39
|
+
return JSON.parse(body);
|
|
40
|
+
}
|
|
41
|
+
catch (cause) {
|
|
42
|
+
try {
|
|
43
|
+
return JSON.parse(body.replace(EMPTY_VALUE, '$1null'));
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
throw new SchemaError(PROVIDER, 'Pos Indonesia returned invalid tracking JSON', { cause });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** The not-found notice; the service sends it with HTTP 400. */
|
|
51
|
+
export function isPosIndonesiaNotFound(payload) {
|
|
52
|
+
return isRecord(payload) && clean(payload.message, 80).toLowerCase() === NOT_FOUND;
|
|
53
|
+
}
|
|
54
|
+
// Who handled or received the item. Staff come in brackets after "oleh"
|
|
55
|
+
// ("by"); after a delivery, "diterima oleh" ("received by") names the
|
|
56
|
+
// recipient, then how they relate to the addressee.
|
|
57
|
+
const STAFF = /\s*\boleh\s*\([^()]*\)/gi;
|
|
58
|
+
const RECIPIENT = /\s*\bditerima\s+oleh\b[\s\S]*$/i;
|
|
59
|
+
const NAMED = /\s*\boleh\b[\s\S]*?(?=\s+(?:di|dan|dengan|ke|dari)\b|$)/gi;
|
|
60
|
+
// An Indonesian mobile number, written with or without the country code.
|
|
61
|
+
const PHONE = /(?<![\dA-Z])(?:\+?62|0)[\s.-]?8(?:[\s.-]?\d){7,11}(?![\dA-Z])/gi;
|
|
62
|
+
// An office's code after its name: its postcode, with a letter and digit for a
|
|
63
|
+
// counter or agent, or four digits and a letter for a delivery centre.
|
|
64
|
+
const OFFICE_CODE = /(?<=[A-Za-z.)])\s+(?:\d{5}(?:[A-Z]\d?)?|\d{4}[A-Z]\d?)(?=$|[\s,.;)])/g;
|
|
65
|
+
/**
|
|
66
|
+
* A scan's wording without the staff member who scanned it, the recipient a
|
|
67
|
+
* delivery names, phone numbers and office codes, which carry postcodes.
|
|
68
|
+
*/
|
|
69
|
+
export function posIndonesiaWording(content) {
|
|
70
|
+
return clean(content.replace(STAFF, '').replace(RECIPIENT, ' diterima').replace(NAMED, '')
|
|
71
|
+
.replace(PHONE, '').replace(OFFICE_CODE, ''), 300).replace(/\s+([,.;:])/g, '$1');
|
|
72
|
+
}
|
|
73
|
+
/** An office's name without its code. */
|
|
74
|
+
function placeOf(value) {
|
|
75
|
+
return clean(clean(value, 160).replace(OFFICE_CODE, ''), 120);
|
|
76
|
+
}
|
|
77
|
+
/** An optional text field; anything but a string is a changed reply. */
|
|
78
|
+
function text(row, key, maxLength = 300) {
|
|
79
|
+
const value = row[key];
|
|
80
|
+
if (value === null || value === undefined)
|
|
81
|
+
return '';
|
|
82
|
+
if (typeof value !== 'string')
|
|
83
|
+
throw new SchemaError(PROVIDER, `Pos Indonesia returned an invalid ${key}`);
|
|
84
|
+
return clean(value, maxLength);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* A scan's clock: the scanning office's wall clock, without a zone. Indonesia
|
|
88
|
+
* keeps three and the service names none, so it stays a local time.
|
|
89
|
+
*/
|
|
90
|
+
function scanClock(row) {
|
|
91
|
+
const match = CLOCK.exec(text(row, 'date', 40));
|
|
92
|
+
const local = match ? `${match[1]}T${match[2]}` : '';
|
|
93
|
+
const parsed = DateTime.fromISO(local, { zone: 'UTC' });
|
|
94
|
+
// Luxon rolls 24:00 over to the next day; only a clock that reads back unchanged is kept.
|
|
95
|
+
if (!parsed.isValid || parsed.toFormat("yyyy-MM-dd'T'HH:mm:ss") !== local) {
|
|
96
|
+
throw new SchemaError(PROVIDER, 'Pos Indonesia returned an invalid scan time');
|
|
97
|
+
}
|
|
98
|
+
return local;
|
|
99
|
+
}
|
|
100
|
+
function scanOf(row, number) {
|
|
101
|
+
if (!isRecord(row))
|
|
102
|
+
throw new SchemaError(PROVIDER, 'Pos Indonesia returned an invalid scan');
|
|
103
|
+
const code = text(row, 'connote_code', 64);
|
|
104
|
+
if (!code)
|
|
105
|
+
throw new SchemaError(PROVIDER, 'Pos Indonesia returned a scan without the item’s number');
|
|
106
|
+
if (normalizeTrackingNumber(code).toUpperCase() !== number)
|
|
107
|
+
throw new IndeterminateError(PROVIDER, 'Pos Indonesia answered for another shipment');
|
|
108
|
+
const action = text(row, 'action', 60);
|
|
109
|
+
const state = (text(row, 'connote_state', 40) || action).toUpperCase();
|
|
110
|
+
if (!STATE.test(state))
|
|
111
|
+
throw new SchemaError(PROVIDER, 'Pos Indonesia returned a scan without a valid state');
|
|
112
|
+
const local = scanClock(row);
|
|
113
|
+
const description = posIndonesiaWording(text(row, 'content', 600)) || action || state;
|
|
114
|
+
const location = placeOf(row.location_name);
|
|
115
|
+
const staged = posIndonesiaStage(state, description);
|
|
116
|
+
const event = {
|
|
117
|
+
local_time: local,
|
|
118
|
+
...(location ? { location } : {}),
|
|
119
|
+
description,
|
|
120
|
+
provider_code: state,
|
|
121
|
+
...(staged ? { stage: staged.stage, stage_source: staged.source } : {}),
|
|
122
|
+
};
|
|
123
|
+
return { key: JSON.stringify([local, state, description, location]), event };
|
|
124
|
+
}
|
|
125
|
+
/** The history rows: a list, a single row, or nothing yet. */
|
|
126
|
+
function rowsOf(value) {
|
|
127
|
+
if (value === null || value === undefined || value === '')
|
|
128
|
+
return [];
|
|
129
|
+
if (Array.isArray(value)) {
|
|
130
|
+
if (value.length > MAX_ROWS)
|
|
131
|
+
throw new SchemaError(PROVIDER, 'Pos Indonesia returned an oversized history');
|
|
132
|
+
return value;
|
|
133
|
+
}
|
|
134
|
+
if (isRecord(value))
|
|
135
|
+
return [value];
|
|
136
|
+
throw new SchemaError(PROVIDER, 'Pos Indonesia returned an invalid history');
|
|
137
|
+
}
|
|
138
|
+
/** The waybill's weight, in grams; zero or nothing when it was not weighed. */
|
|
139
|
+
function weightOf(value) {
|
|
140
|
+
return typeof value === 'number' && Number.isInteger(value) && value > 0 && value <= 1_000_000 ? value / 1000 : null;
|
|
141
|
+
}
|
|
142
|
+
/** The country a waybill goes to: an Indonesian postcode, or a country code for an item sent abroad. */
|
|
143
|
+
function destinationOf(value) {
|
|
144
|
+
const zone = cleanScalar(value, 16).toUpperCase();
|
|
145
|
+
if (/^\d{5}$/.test(zone))
|
|
146
|
+
return 'ID';
|
|
147
|
+
return /^[A-Z]{2}$/.test(zone) ? countryCode(zone) : null;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* The service's reply for one number: the waybill, then its history. The
|
|
151
|
+
* waybill names the number it was made for, and is empty for an item the
|
|
152
|
+
* service holds no waybill for; every scan names the item's number. Each must
|
|
153
|
+
* be the whole requested number: the service also answers for a booking code.
|
|
154
|
+
*/
|
|
155
|
+
export function parsePosIndonesia(payload, raw) {
|
|
156
|
+
const number = normalizePosIndonesiaNumber(raw);
|
|
157
|
+
if (isPosIndonesiaNotFound(payload))
|
|
158
|
+
throw new NotFoundError(PROVIDER);
|
|
159
|
+
if (!isRecord(payload) || !Object.hasOwn(payload, 'connote_history')) {
|
|
160
|
+
throw new SchemaError(PROVIDER, 'Pos Indonesia did not return a tracking result');
|
|
161
|
+
}
|
|
162
|
+
const waybill = text(payload, 'connote_code', 64);
|
|
163
|
+
if (waybill && normalizeTrackingNumber(waybill).toUpperCase() !== number) {
|
|
164
|
+
throw new IndeterminateError(PROVIDER, 'Pos Indonesia answered for another shipment');
|
|
165
|
+
}
|
|
166
|
+
const rows = rowsOf(payload.connote_history);
|
|
167
|
+
if (!waybill && !rows.length)
|
|
168
|
+
throw new SchemaError(PROVIDER, 'Pos Indonesia returned a reply that names no shipment');
|
|
169
|
+
const seen = new Set();
|
|
170
|
+
const scans = [];
|
|
171
|
+
rows.forEach((row, order) => {
|
|
172
|
+
const scan = scanOf(row, number);
|
|
173
|
+
if (seen.has(scan.key))
|
|
174
|
+
return;
|
|
175
|
+
seen.add(scan.key);
|
|
176
|
+
scans.push({ event: scan.event, order });
|
|
177
|
+
});
|
|
178
|
+
if (!scans.length)
|
|
179
|
+
throw new NoHistoryError(PROVIDER);
|
|
180
|
+
// Newest first by wall clock; of scans made the same second, the one the reply lists later.
|
|
181
|
+
scans.sort((a, b) => String(b.event.local_time).localeCompare(String(a.event.local_time)) || b.order - a.order);
|
|
182
|
+
const events = scans.map(scan => scan.event);
|
|
183
|
+
const newest = events[0];
|
|
184
|
+
const stage = newest.stage;
|
|
185
|
+
const weight = weightOf(payload.actual_weight);
|
|
186
|
+
const country = destinationOf(payload.zone_code_to);
|
|
187
|
+
return {
|
|
188
|
+
status: stage ? languageStageStatus(stage) : 'unknown',
|
|
189
|
+
...(stage ? { current_stage: stage, current_stage_source: newest.stage_source } : {}),
|
|
190
|
+
last_status_text: newest.description,
|
|
191
|
+
last_update: null,
|
|
192
|
+
last_update_local: newest.local_time,
|
|
193
|
+
expected_delivery: null,
|
|
194
|
+
...(weight ? { weight_kg: weight } : {}),
|
|
195
|
+
...(country ? { destination_country: country } : {}),
|
|
196
|
+
events: events.slice(0, MAX_EVENTS),
|
|
197
|
+
// The service leaves out scans the tracking page shows, and those of the
|
|
198
|
+
// foreign posts an international item passes through.
|
|
199
|
+
history_truncated: true,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ClassifiedWording, type Stage } from '../../core/status/index.js';
|
|
2
|
+
import type { CarrierStatusMap } from '../../core/status/statusMap.js';
|
|
3
|
+
/** The stage a state gives a scan. */
|
|
4
|
+
export declare function posIndonesiaCodeStage(code: string): Stage | undefined;
|
|
5
|
+
/** A scan's stage from its state, else the shared wording rules, else nothing. */
|
|
6
|
+
export declare function posIndonesiaStage(code: string, wording: string): ClassifiedWording | null;
|
|
7
|
+
/**
|
|
8
|
+
* Every scan carries a state; the map reads the state alone. The tracking
|
|
9
|
+
* page's own wordings, which other trackers repeat, come from a feed the
|
|
10
|
+
* adapter does not read; they stay with the shared wording rules.
|
|
11
|
+
*/
|
|
12
|
+
export declare const statusMap: CarrierStatusMap;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { classifyWording } from '../../core/status/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* The state Pos Indonesia's service gives each scan, in upper case as the
|
|
4
|
+
* adapter keeps it. The wording says the same things at more length and
|
|
5
|
+
* names staff, so the states decide. Only states seen in replies are mapped;
|
|
6
|
+
* another falls to the wording rules.
|
|
7
|
+
*/
|
|
8
|
+
const CODES = new Map([
|
|
9
|
+
// The waybill made at the counter that takes the item.
|
|
10
|
+
['PENDING', 'accepted'],
|
|
11
|
+
['INBAG', 'in_transit'],
|
|
12
|
+
// Received at an office or a processing centre.
|
|
13
|
+
['INLOCATION', 'in_transit'],
|
|
14
|
+
// Loaded on a vehicle under a dispatch manifest.
|
|
15
|
+
['INVEHICLE', 'in_transit'],
|
|
16
|
+
['UNBAG', 'in_transit'],
|
|
17
|
+
// On a postman's delivery run sheet.
|
|
18
|
+
['DELIVERYRUNSHEET', 'out_for_delivery'],
|
|
19
|
+
['DELIVERED', 'delivered'],
|
|
20
|
+
]);
|
|
21
|
+
/** The stage a state gives a scan. */
|
|
22
|
+
export function posIndonesiaCodeStage(code) {
|
|
23
|
+
return CODES.get(code.toUpperCase());
|
|
24
|
+
}
|
|
25
|
+
/** A scan's stage from its state, else the shared wording rules, else nothing. */
|
|
26
|
+
export function posIndonesiaStage(code, wording) {
|
|
27
|
+
const mapped = posIndonesiaCodeStage(code);
|
|
28
|
+
if (mapped)
|
|
29
|
+
return { stage: mapped, source: 'carrier_map' };
|
|
30
|
+
const worded = classifyWording(wording, 'in_transit');
|
|
31
|
+
return worded.source === 'none' ? null : worded;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Every scan carries a state; the map reads the state alone. The tracking
|
|
35
|
+
* page's own wordings, which other trackers repeat, come from a feed the
|
|
36
|
+
* adapter does not read; they stay with the shared wording rules.
|
|
37
|
+
*/
|
|
38
|
+
export const statusMap = {
|
|
39
|
+
stage: code => (code ? posIndonesiaCodeStage(code) : undefined),
|
|
40
|
+
gaps: [],
|
|
41
|
+
};
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"carrier": "pos-indonesia",
|
|
3
3
|
"entries": [
|
|
4
|
+
{"code": "PENDING", "wording": "Connote telah dibuat di lokasi [destination]", "language": "id", "stage": "accepted", "confirmedBy": "live", "note": "The waybill made where the item is posted. The place it names is where the item goes."},
|
|
5
|
+
{"code": "INBAG", "wording": "Barang anda telah melewati proses bagging di Kantor Pos [office]", "language": "id", "stage": "in_transit", "confirmedBy": "live", "note": "Put in a bag at an office. A scan without wording reads as the action, Bagging."},
|
|
6
|
+
{"code": "INLOCATION", "wording": "Barang anda telah melewati proses receiving di Kantor Pos [office]", "language": "id", "stage": "in_transit", "confirmedBy": "live", "note": "Received at an office or a processing centre."},
|
|
7
|
+
{"code": "INVEHICLE", "wording": "Barang anda [number] telah melewati proses ManifestR7 dengan nomor bag [bag] di [office] dan nomor R7 [manifest]", "language": "id", "stage": "in_transit", "confirmedBy": "live", "note": "Loaded on a vehicle under a dispatch manifest."},
|
|
8
|
+
{"code": "UNBAG", "wording": "Barang anda [number] telah melewati proses unbagging dengan nomor bag [bag] di [office]", "language": "id", "stage": "in_transit", "confirmedBy": "live", "note": "Taken out of its bag at the next office."},
|
|
9
|
+
{"code": "DELIVERYRUNSHEET", "wording": "Barang anda telah melewati proses DeliveryRunsheet di Kantor Pos [office]", "language": "id", "stage": "out_for_delivery", "confirmedBy": "live", "note": "On a postman's delivery run sheet."},
|
|
10
|
+
{"code": "DELIVERED", "wording": "Barang anda selesai dikirim dan diterima", "language": "id", "stage": "delivered", "confirmedBy": "live", "note": "Delivered. The service names the recipient and how they relate to the addressee after the wording; the adapter drops both."},
|
|
4
11
|
{"wording": "Posting Loket", "stage": "accepted", "language": "id", "confirmedBy": "source", "note": "Posted at a counter. Listed in Parcelsapp's Pos Indonesia status table."},
|
|
5
12
|
{"wording": "Penerimaan di loket : BLOK 5", "stage": "accepted", "language": "id", "confirmedBy": "source", "note": "Accepted at a counter; the branch follows the colon. Quoted by Parcelsapp's Pos Indonesia page as a sample event."},
|
|
6
13
|
{"wording": "Manifest Serah", "stage": "in_transit", "language": "id", "confirmedBy": "source", "note": "Handed over for dispatch. Listed in Parcelsapp's Pos Indonesia status table."},
|
|
@@ -42,6 +42,7 @@ import { statusMap as coordinadora } from '../../carriers/coordinadora/status.js
|
|
|
42
42
|
import { statusMap as correoArgentino } from '../../carriers/correo-argentino/status.js';
|
|
43
43
|
import { statusMap as correosDeMexico } from '../../carriers/correos-de-mexico/status.js';
|
|
44
44
|
import { statusMap as correosSpain } from '../../carriers/correos-spain/status.js';
|
|
45
|
+
import { statusMap as couriersPlease } from '../../carriers/couriersplease/status.js';
|
|
45
46
|
import { statusMap as cyprusPost } from '../../carriers/cyprus-post/status.js';
|
|
46
47
|
import { statusMap as daiPost } from '../../carriers/dai-post/status.js';
|
|
47
48
|
import { statusMap as dayRoss } from '../../carriers/day-ross/status.js';
|
|
@@ -70,6 +71,7 @@ import { statusMap as expressOne } from '../../carriers/express-one/status.js';
|
|
|
70
71
|
import { statusMap as fanCourier } from '../../carriers/fan-courier/status.js';
|
|
71
72
|
import { statusMap as foxpost } from '../../carriers/foxpost/status.js';
|
|
72
73
|
import { statusMap as gati } from '../../carriers/gati/status.js';
|
|
74
|
+
import { statusMap as gdex } from '../../carriers/gdex/status.js';
|
|
73
75
|
import { statusMap as gebruederWeiss } from '../../carriers/gebrueder-weiss/status.js';
|
|
74
76
|
import { statusMap as geis } from '../../carriers/geis/status.js';
|
|
75
77
|
import { statusMap as geodisPl } from '../../carriers/geodis-pl/status.js';
|
|
@@ -98,6 +100,7 @@ import { statusMap as jrt } from '../../carriers/jrt/status.js';
|
|
|
98
100
|
import { statusMap as kuehneNagel } from '../../carriers/kuehne-nagel/status.js';
|
|
99
101
|
import { statusMap as laPoste } from '../../carriers/la-poste/status.js';
|
|
100
102
|
import { statusMap as latvijasPasts } from '../../carriers/latvijas-pasts/status.js';
|
|
103
|
+
import { statusMap as leopardsCourier } from '../../carriers/leopards-courier/status.js';
|
|
101
104
|
import { statusMap as lietuvosPastas } from '../../carriers/lietuvos-pastas/status.js';
|
|
102
105
|
import { statusMap as logen } from '../../carriers/logen/status.js';
|
|
103
106
|
import { statusMap as loggi } from '../../carriers/loggi/status.js';
|
|
@@ -121,6 +124,7 @@ import { statusMap as osmWorldwide } from '../../carriers/osm-worldwide/status.j
|
|
|
121
124
|
import { statusMap as paquetexpress } from '../../carriers/paquetexpress/status.js';
|
|
122
125
|
import { statusMap as passport } from '../../carriers/passport/status.js';
|
|
123
126
|
import { statusMap as pecom } from '../../carriers/pecom/status.js';
|
|
127
|
+
import { statusMap as posIndonesia } from '../../carriers/pos-indonesia/status.js';
|
|
124
128
|
import { statusMap as postLuxembourg } from '../../carriers/post-luxembourg/status.js';
|
|
125
129
|
import { statusMap as postaSlovenije } from '../../carriers/posta-slovenije/status.js';
|
|
126
130
|
import { statusMap as postaSrbije } from '../../carriers/posta-srbije/status.js';
|
|
@@ -183,20 +187,23 @@ export const STATUS_MAPS = {
|
|
|
183
187
|
'allegro-one': allegroOne, 'an-post': anPost, andreani, anteraja, 'apc-overnight': apcOvernight, 'aramex-au': aramexAu, 'aramex-nz': aramexNz,
|
|
184
188
|
'aras-kargo': arasKargo, 'blue-express': blueExpress, 'box-now': boxNow, cacesa, cargus, cdek, cdl, celeritas, 'ceska-posta': ceskaPosta,
|
|
185
189
|
chilexpress, 'china-post': chinaPost, 'chit-chats': chitChats, chronopost, 'chunghwa-post': chunghwaPost, 'cj-logistics': cjLogistics,
|
|
186
|
-
coordinadora, 'correo-argentino': correoArgentino, 'correos-de-mexico': correosDeMexico, 'correos-spain': correosSpain,
|
|
190
|
+
coordinadora, 'correo-argentino': correoArgentino, 'correos-de-mexico': correosDeMexico, 'correos-spain': correosSpain,
|
|
191
|
+
couriersplease: couriersPlease, 'cyprus-post': cyprusPost,
|
|
187
192
|
'dai-post': daiPost, dao, 'day-ross': dayRoss,
|
|
188
193
|
dellin, deppon, 'dhl-express': dhlExpress, 'dhl-freight': dhlFreight, dhlink, dpd, 'dpd-de': dpdDe, 'dpd-fr': dpdFr, 'dpd-ie': dpdIe, 'dpd-pl': dpdPl, dsv, dynalogic,
|
|
189
194
|
'early-bird': earlyBird, econt, elta, emile, 'ems-vietnam': emsVietnam, envialia, 'epost-global': epostGlobal, estes,
|
|
190
195
|
'express-one': expressOne, 'fan-courier': fanCourier,
|
|
191
|
-
foxpost, gati, 'gebrueder-weiss': gebruederWeiss, geis, 'geniki-taxydromiki': geniki, 'geodis-pl': geodisPl, 'gls-es': glsEs, 'gls-it': glsIt,
|
|
196
|
+
foxpost, gati, gdex, 'gebrueder-weiss': gebruederWeiss, geis, 'geniki-taxydromiki': geniki, 'geodis-pl': geodisPl, 'gls-es': glsEs, 'gls-it': glsIt,
|
|
192
197
|
'go-express': goExpress, gofo, 'gofo-fr': gofoFr, 'gofo-it': gofoIt, gzyl, hanjin, 'hct-logistics': hctLogistics, helthjem, 'hrvatska-posta': hrvatskaPosta, hywl, imile,
|
|
193
|
-
instabox, interrapidisimo, 'israel-post': israelPost, 'j-and-t': jAndT, 'j-and-t-cargo': jntCargo, jitsu, jne, jrt, 'kuehne-nagel': kuehneNagel,
|
|
194
|
-
'
|
|
198
|
+
instabox, interrapidisimo, 'israel-post': israelPost, 'j-and-t': jAndT, 'j-and-t-cargo': jntCargo, jitsu, jne, jrt, 'kuehne-nagel': kuehneNagel,
|
|
199
|
+
'la-poste': laPoste, 'latvijas-pasts': latvijasPasts, 'leopards-courier': leopardsCourier, 'lietuvos-pastas': lietuvosPastas, logen, loggi,
|
|
200
|
+
'loomis-express': loomisExpress, 'lotte-global': lotteGlobal,
|
|
195
201
|
'magyar-posta': magyarPosta, mailamericas,
|
|
196
202
|
maltapost, matkahuolto, meest,
|
|
197
203
|
'mng-kargo': mngKargo, mtscn, naqel, nationex, oca, 'old-dominion': oldDominion, omgo, omniva, 'orlen-paczka': orlenPaczka,
|
|
198
204
|
'osm-worldwide': osmWorldwide,
|
|
199
|
-
paquetexpress, passport, pecom, '
|
|
205
|
+
paquetexpress, passport, pecom, 'pos-indonesia': posIndonesia, 'post-luxembourg': postLuxembourg, 'posta-slovenije': postaSlovenije,
|
|
206
|
+
'posta-srbije': postaSrbije, postlogistics, ppl,
|
|
200
207
|
ptt, redpack, 'rl-carriers': rlCarriers, sagawa, saia, sameday, 'saudi-post': saudiPost, servientrega, shadowfax,
|
|
201
208
|
'slovak-parcel-service': slovakParcelService, 'slovenska-posta': slovenskaPosta, 'smsa-express': smsaExpress, speedaf, speedx, speedy,
|
|
202
209
|
'spx-br': spxBr, 'spx-id': spxId, 'spx-my': spxMy, 'spx-th': spxTh, 'spx-tw': spxTw, 'spx-vn': spxVn,
|
package/dist/data/catalog.json
CHANGED
|
@@ -7692,7 +7692,9 @@
|
|
|
7692
7692
|
"timezone": "Australia/Sydney",
|
|
7693
7693
|
"tracking": {
|
|
7694
7694
|
"mode": "automatic",
|
|
7695
|
-
"adapter": "
|
|
7695
|
+
"adapter": "couriersplease",
|
|
7696
|
+
"recognitionRank": 961,
|
|
7697
|
+
"localClocks": true
|
|
7696
7698
|
},
|
|
7697
7699
|
"canaryUrl": "https://www.couriersplease.com.au/tools-track",
|
|
7698
7700
|
"trackingUrlTemplate": "https://www.couriersplease.com.au/tools-track?no={trackingNumber}",
|
|
@@ -10264,10 +10266,23 @@
|
|
|
10264
10266
|
"timezone": "Asia/Kuala_Lumpur",
|
|
10265
10267
|
"tracking": {
|
|
10266
10268
|
"mode": "automatic",
|
|
10267
|
-
"adapter": "
|
|
10269
|
+
"adapter": "gdex",
|
|
10270
|
+
"recognitionRank": 957
|
|
10268
10271
|
},
|
|
10269
|
-
"canaryUrl": "https://
|
|
10272
|
+
"canaryUrl": "https://app.gdexpress.com/",
|
|
10273
|
+
"trackingUrlTemplate": "https://gdexpress.com/tracking/?consignmentno={trackingNumber}",
|
|
10274
|
+
"trackingSearchUrl": "https://gdexpress.com/our-business/delivery/tools-references/tracking/",
|
|
10270
10275
|
"linkRules": [
|
|
10276
|
+
{
|
|
10277
|
+
"domains": [
|
|
10278
|
+
"gdexpress.com",
|
|
10279
|
+
"www.gdexpress.com"
|
|
10280
|
+
],
|
|
10281
|
+
"pathPattern": "^/tracking/?$",
|
|
10282
|
+
"params": [
|
|
10283
|
+
"consignmentno"
|
|
10284
|
+
]
|
|
10285
|
+
},
|
|
10271
10286
|
{
|
|
10272
10287
|
"domains": [
|
|
10273
10288
|
"web2.gdexpress.com"
|
|
@@ -12685,7 +12700,8 @@
|
|
|
12685
12700
|
"timezone": "Asia/Karachi",
|
|
12686
12701
|
"tracking": {
|
|
12687
12702
|
"mode": "automatic",
|
|
12688
|
-
"adapter": "
|
|
12703
|
+
"adapter": "leopards-courier",
|
|
12704
|
+
"recognitionRank": 965
|
|
12689
12705
|
},
|
|
12690
12706
|
"canaryUrl": "https://pk.leopardscourier.com/",
|
|
12691
12707
|
"trackingSearchUrl": "https://pk.leopardscourier.com/",
|
|
@@ -15151,7 +15167,9 @@
|
|
|
15151
15167
|
"timezone": "Asia/Jakarta",
|
|
15152
15168
|
"tracking": {
|
|
15153
15169
|
"mode": "automatic",
|
|
15154
|
-
"adapter": "
|
|
15170
|
+
"adapter": "pos-indonesia",
|
|
15171
|
+
"recognitionRank": 964,
|
|
15172
|
+
"localClocks": true
|
|
15155
15173
|
},
|
|
15156
15174
|
"canaryUrl": "https://www.posindonesia.co.id/id/tracking",
|
|
15157
15175
|
"trackingUrlTemplate": "https://www.posindonesia.co.id/id/tracking/{trackingNumber}",
|
|
@@ -5050,7 +5050,9 @@ export declare const CARRIER_CATALOG: {
|
|
|
5050
5050
|
readonly timezone: "Australia/Sydney";
|
|
5051
5051
|
readonly tracking: {
|
|
5052
5052
|
readonly mode: "automatic";
|
|
5053
|
-
readonly adapter: "
|
|
5053
|
+
readonly adapter: "couriersplease";
|
|
5054
|
+
readonly recognitionRank: 961;
|
|
5055
|
+
readonly localClocks: true;
|
|
5054
5056
|
};
|
|
5055
5057
|
readonly canaryUrl: "https://www.couriersplease.com.au/tools-track";
|
|
5056
5058
|
readonly trackingUrlTemplate: "https://www.couriersplease.com.au/tools-track?no={trackingNumber}";
|
|
@@ -6660,10 +6662,17 @@ export declare const CARRIER_CATALOG: {
|
|
|
6660
6662
|
readonly timezone: "Asia/Kuala_Lumpur";
|
|
6661
6663
|
readonly tracking: {
|
|
6662
6664
|
readonly mode: "automatic";
|
|
6663
|
-
readonly adapter: "
|
|
6665
|
+
readonly adapter: "gdex";
|
|
6666
|
+
readonly recognitionRank: 957;
|
|
6664
6667
|
};
|
|
6665
|
-
readonly canaryUrl: "https://
|
|
6668
|
+
readonly canaryUrl: "https://app.gdexpress.com/";
|
|
6669
|
+
readonly trackingUrlTemplate: "https://gdexpress.com/tracking/?consignmentno={trackingNumber}";
|
|
6670
|
+
readonly trackingSearchUrl: "https://gdexpress.com/our-business/delivery/tools-references/tracking/";
|
|
6666
6671
|
readonly linkRules: readonly [{
|
|
6672
|
+
readonly domains: readonly ["gdexpress.com", "www.gdexpress.com"];
|
|
6673
|
+
readonly pathPattern: "^/tracking/?$";
|
|
6674
|
+
readonly params: readonly ["consignmentno"];
|
|
6675
|
+
}, {
|
|
6667
6676
|
readonly domains: readonly ["web2.gdexpress.com"];
|
|
6668
6677
|
readonly pathPattern: "^/official/iframe/etracking(?:2|_v2)\\.php$";
|
|
6669
6678
|
readonly params: readonly ["capture"];
|
|
@@ -8172,7 +8181,8 @@ export declare const CARRIER_CATALOG: {
|
|
|
8172
8181
|
readonly timezone: "Asia/Karachi";
|
|
8173
8182
|
readonly tracking: {
|
|
8174
8183
|
readonly mode: "automatic";
|
|
8175
|
-
readonly adapter: "
|
|
8184
|
+
readonly adapter: "leopards-courier";
|
|
8185
|
+
readonly recognitionRank: 965;
|
|
8176
8186
|
};
|
|
8177
8187
|
readonly canaryUrl: "https://pk.leopardscourier.com/";
|
|
8178
8188
|
readonly trackingSearchUrl: "https://pk.leopardscourier.com/";
|
|
@@ -9676,7 +9686,9 @@ export declare const CARRIER_CATALOG: {
|
|
|
9676
9686
|
readonly timezone: "Asia/Jakarta";
|
|
9677
9687
|
readonly tracking: {
|
|
9678
9688
|
readonly mode: "automatic";
|
|
9679
|
-
readonly adapter: "
|
|
9689
|
+
readonly adapter: "pos-indonesia";
|
|
9690
|
+
readonly recognitionRank: 964;
|
|
9691
|
+
readonly localClocks: true;
|
|
9680
9692
|
};
|
|
9681
9693
|
readonly canaryUrl: "https://www.posindonesia.co.id/id/tracking";
|
|
9682
9694
|
readonly trackingUrlTemplate: "https://www.posindonesia.co.id/id/tracking/{trackingNumber}";
|
|
@@ -7693,7 +7693,9 @@ export const CARRIER_CATALOG = {
|
|
|
7693
7693
|
"timezone": "Australia/Sydney",
|
|
7694
7694
|
"tracking": {
|
|
7695
7695
|
"mode": "automatic",
|
|
7696
|
-
"adapter": "
|
|
7696
|
+
"adapter": "couriersplease",
|
|
7697
|
+
"recognitionRank": 961,
|
|
7698
|
+
"localClocks": true
|
|
7697
7699
|
},
|
|
7698
7700
|
"canaryUrl": "https://www.couriersplease.com.au/tools-track",
|
|
7699
7701
|
"trackingUrlTemplate": "https://www.couriersplease.com.au/tools-track?no={trackingNumber}",
|
|
@@ -10265,10 +10267,23 @@ export const CARRIER_CATALOG = {
|
|
|
10265
10267
|
"timezone": "Asia/Kuala_Lumpur",
|
|
10266
10268
|
"tracking": {
|
|
10267
10269
|
"mode": "automatic",
|
|
10268
|
-
"adapter": "
|
|
10270
|
+
"adapter": "gdex",
|
|
10271
|
+
"recognitionRank": 957
|
|
10269
10272
|
},
|
|
10270
|
-
"canaryUrl": "https://
|
|
10273
|
+
"canaryUrl": "https://app.gdexpress.com/",
|
|
10274
|
+
"trackingUrlTemplate": "https://gdexpress.com/tracking/?consignmentno={trackingNumber}",
|
|
10275
|
+
"trackingSearchUrl": "https://gdexpress.com/our-business/delivery/tools-references/tracking/",
|
|
10271
10276
|
"linkRules": [
|
|
10277
|
+
{
|
|
10278
|
+
"domains": [
|
|
10279
|
+
"gdexpress.com",
|
|
10280
|
+
"www.gdexpress.com"
|
|
10281
|
+
],
|
|
10282
|
+
"pathPattern": "^/tracking/?$",
|
|
10283
|
+
"params": [
|
|
10284
|
+
"consignmentno"
|
|
10285
|
+
]
|
|
10286
|
+
},
|
|
10272
10287
|
{
|
|
10273
10288
|
"domains": [
|
|
10274
10289
|
"web2.gdexpress.com"
|
|
@@ -12686,7 +12701,8 @@ export const CARRIER_CATALOG = {
|
|
|
12686
12701
|
"timezone": "Asia/Karachi",
|
|
12687
12702
|
"tracking": {
|
|
12688
12703
|
"mode": "automatic",
|
|
12689
|
-
"adapter": "
|
|
12704
|
+
"adapter": "leopards-courier",
|
|
12705
|
+
"recognitionRank": 965
|
|
12690
12706
|
},
|
|
12691
12707
|
"canaryUrl": "https://pk.leopardscourier.com/",
|
|
12692
12708
|
"trackingSearchUrl": "https://pk.leopardscourier.com/",
|
|
@@ -15152,7 +15168,9 @@ export const CARRIER_CATALOG = {
|
|
|
15152
15168
|
"timezone": "Asia/Jakarta",
|
|
15153
15169
|
"tracking": {
|
|
15154
15170
|
"mode": "automatic",
|
|
15155
|
-
"adapter": "
|
|
15171
|
+
"adapter": "pos-indonesia",
|
|
15172
|
+
"recognitionRank": 964,
|
|
15173
|
+
"localClocks": true
|
|
15156
15174
|
},
|
|
15157
15175
|
"canaryUrl": "https://www.posindonesia.co.id/id/tracking",
|
|
15158
15176
|
"trackingUrlTemplate": "https://www.posindonesia.co.id/id/tracking/{trackingNumber}",
|
|
@@ -36,6 +36,7 @@ export const CARRIER_RECOGNITION_RANKS = {
|
|
|
36
36
|
"correo-argentino": 978,
|
|
37
37
|
"correos-de-mexico": 30,
|
|
38
38
|
"correos-express": 800,
|
|
39
|
+
"couriersplease": 961,
|
|
39
40
|
"ctt-express": 790,
|
|
40
41
|
"cyprus-post": 60,
|
|
41
42
|
"dai-post": 62,
|
|
@@ -69,6 +70,7 @@ export const CARRIER_RECOGNITION_RANKS = {
|
|
|
69
70
|
"four-px": 570,
|
|
70
71
|
"foxpost": 200,
|
|
71
72
|
"gati": 43,
|
|
73
|
+
"gdex": 957,
|
|
72
74
|
"geis": 90,
|
|
73
75
|
"geniki-taxydromiki": 140,
|
|
74
76
|
"geodis-pl": 994,
|
|
@@ -95,6 +97,7 @@ export const CARRIER_RECOGNITION_RANKS = {
|
|
|
95
97
|
"kuehne-nagel": 435,
|
|
96
98
|
"la-poste": 1000,
|
|
97
99
|
"latvijas-pasts": 100,
|
|
100
|
+
"leopards-courier": 965,
|
|
98
101
|
"lietuvos-pastas": 895,
|
|
99
102
|
"logen": 48,
|
|
100
103
|
"loomis-express": 285,
|
|
@@ -119,6 +122,7 @@ export const CARRIER_RECOGNITION_RANKS = {
|
|
|
119
122
|
"paquetexpress": 35,
|
|
120
123
|
"passport": 55,
|
|
121
124
|
"poczta-polska": 750,
|
|
125
|
+
"pos-indonesia": 964,
|
|
122
126
|
"post-luxembourg": 80,
|
|
123
127
|
"posta-slovenije": 130,
|
|
124
128
|
"posta-srbije": 110,
|
|
@@ -50,6 +50,7 @@ import { adapter as correosChile } from '../carriers/correos-chile/adapter.js';
|
|
|
50
50
|
import { adapter as correosDeMexico } from '../carriers/correos-de-mexico/adapter.js';
|
|
51
51
|
import { adapter as correosExpress } from '../carriers/correos-express/adapter.js';
|
|
52
52
|
import { adapter as correosSpain } from '../carriers/correos-spain/adapter.js';
|
|
53
|
+
import { adapter as couriersplease } from '../carriers/couriersplease/adapter.js';
|
|
53
54
|
import { adapter as ctt } from '../carriers/ctt/adapter.js';
|
|
54
55
|
import { adapter as cttExpress } from '../carriers/ctt-express/adapter.js';
|
|
55
56
|
import { adapter as cyprusPost } from '../carriers/cyprus-post/adapter.js';
|
|
@@ -98,6 +99,7 @@ import { adapter as fedex } from '../carriers/fedex/adapter.js';
|
|
|
98
99
|
import { adapter as fourPx } from '../carriers/four-px/adapter.js';
|
|
99
100
|
import { adapter as foxpost } from '../carriers/foxpost/adapter.js';
|
|
100
101
|
import { adapter as gati } from '../carriers/gati/adapter.js';
|
|
102
|
+
import { adapter as gdex } from '../carriers/gdex/adapter.js';
|
|
101
103
|
import { adapter as gebruederWeiss } from '../carriers/gebrueder-weiss/adapter.js';
|
|
102
104
|
import { adapter as geis } from '../carriers/geis/adapter.js';
|
|
103
105
|
import { adapter as genikiTaxydromiki } from '../carriers/geniki-taxydromiki/adapter.js';
|
|
@@ -142,6 +144,7 @@ import { adapter as laPoste } from '../carriers/la-poste/adapter.js';
|
|
|
142
144
|
import { adapter as landmarkGlobal } from '../carriers/landmark-global/adapter.js';
|
|
143
145
|
import { adapter as latvijasPasts } from '../carriers/latvijas-pasts/adapter.js';
|
|
144
146
|
import { adapter as lbcExpress } from '../carriers/lbc-express/adapter.js';
|
|
147
|
+
import { adapter as leopardsCourier } from '../carriers/leopards-courier/adapter.js';
|
|
145
148
|
import { adapter as lietuvosPastas } from '../carriers/lietuvos-pastas/adapter.js';
|
|
146
149
|
import { adapter as logen } from '../carriers/logen/adapter.js';
|
|
147
150
|
import { adapter as loggi } from '../carriers/loggi/adapter.js';
|
|
@@ -176,6 +179,7 @@ import { adapter as passport } from '../carriers/passport/adapter.js';
|
|
|
176
179
|
import { adapter as pecom } from '../carriers/pecom/adapter.js';
|
|
177
180
|
import { adapter as planzer } from '../carriers/planzer/adapter.js';
|
|
178
181
|
import { adapter as pocztaPolska } from '../carriers/poczta-polska/adapter.js';
|
|
182
|
+
import { adapter as posIndonesia } from '../carriers/pos-indonesia/adapter.js';
|
|
179
183
|
import { adapter as posMalaysia } from '../carriers/pos-malaysia/adapter.js';
|
|
180
184
|
import { adapter as postLuxembourg } from '../carriers/post-luxembourg/adapter.js';
|
|
181
185
|
import { adapter as postaSlovenije } from '../carriers/posta-slovenije/adapter.js';
|
|
@@ -308,6 +312,7 @@ export const REGISTRY = {
|
|
|
308
312
|
"correos-de-mexico": correosDeMexico,
|
|
309
313
|
"correos-express": correosExpress,
|
|
310
314
|
"correos-spain": correosSpain,
|
|
315
|
+
"couriersplease": couriersplease,
|
|
311
316
|
"ctt": ctt,
|
|
312
317
|
"ctt-express": cttExpress,
|
|
313
318
|
"cyprus-post": cyprusPost,
|
|
@@ -356,6 +361,7 @@ export const REGISTRY = {
|
|
|
356
361
|
"four-px": fourPx,
|
|
357
362
|
"foxpost": foxpost,
|
|
358
363
|
"gati": gati,
|
|
364
|
+
"gdex": gdex,
|
|
359
365
|
"gebrueder-weiss": gebruederWeiss,
|
|
360
366
|
"geis": geis,
|
|
361
367
|
"geniki-taxydromiki": genikiTaxydromiki,
|
|
@@ -400,6 +406,7 @@ export const REGISTRY = {
|
|
|
400
406
|
"landmark-global": landmarkGlobal,
|
|
401
407
|
"latvijas-pasts": latvijasPasts,
|
|
402
408
|
"lbc-express": lbcExpress,
|
|
409
|
+
"leopards-courier": leopardsCourier,
|
|
403
410
|
"lietuvos-pastas": lietuvosPastas,
|
|
404
411
|
"logen": logen,
|
|
405
412
|
"loggi": loggi,
|
|
@@ -434,6 +441,7 @@ export const REGISTRY = {
|
|
|
434
441
|
"pecom": pecom,
|
|
435
442
|
"planzer": planzer,
|
|
436
443
|
"poczta-polska": pocztaPolska,
|
|
444
|
+
"pos-indonesia": posIndonesia,
|
|
437
445
|
"pos-malaysia": posMalaysia,
|
|
438
446
|
"post-luxembourg": postLuxembourg,
|
|
439
447
|
"posta-slovenije": postaSlovenije,
|
|
@@ -612,7 +620,7 @@ export const REGISTRY = {
|
|
|
612
620
|
"correos-spain": "correos-spain",
|
|
613
621
|
"courier-center": "universal",
|
|
614
622
|
"courier-it": "universal",
|
|
615
|
-
"couriersplease": "
|
|
623
|
+
"couriersplease": "couriersplease",
|
|
616
624
|
"cruz-del-sur": "universal",
|
|
617
625
|
"cse-russia": "universal",
|
|
618
626
|
"ctt": "ctt",
|
|
@@ -692,7 +700,7 @@ export const REGISTRY = {
|
|
|
692
700
|
"foxpost": "foxpost",
|
|
693
701
|
"fukuyama": "universal",
|
|
694
702
|
"gati": "gati",
|
|
695
|
-
"gdex": "
|
|
703
|
+
"gdex": "gdex",
|
|
696
704
|
"gebrueder-weiss": "gebrueder-weiss",
|
|
697
705
|
"geis": "geis",
|
|
698
706
|
"geniki-taxydromiki": "geniki-taxydromiki",
|
|
@@ -774,7 +782,7 @@ export const REGISTRY = {
|
|
|
774
782
|
"landmark-global": "landmark-global",
|
|
775
783
|
"latvijas-pasts": "latvijas-pasts",
|
|
776
784
|
"lbc-express": "lbc-express",
|
|
777
|
-
"leopards-courier": "
|
|
785
|
+
"leopards-courier": "leopards-courier",
|
|
778
786
|
"libanpost": "universal",
|
|
779
787
|
"lietuvos-pastas": "lietuvos-pastas",
|
|
780
788
|
"line-clear": "universal",
|
|
@@ -847,7 +855,7 @@ export const REGISTRY = {
|
|
|
847
855
|
"planzer": "planzer",
|
|
848
856
|
"poczta-polska": "poczta-polska",
|
|
849
857
|
"polaris-transport": "universal",
|
|
850
|
-
"pos-indonesia": "
|
|
858
|
+
"pos-indonesia": "pos-indonesia",
|
|
851
859
|
"pos-malaysia": "pos-malaysia",
|
|
852
860
|
"post-haste": "universal",
|
|
853
861
|
"post-luxembourg": "post-luxembourg",
|