shipflow 0.1.0 → 0.2.1
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 +139 -33
- package/dist/carriers/aramex/adapter.d.ts +82 -0
- package/dist/carriers/aramex/adapter.d.ts.map +1 -0
- package/dist/carriers/aramex/index.d.ts +9 -0
- package/dist/carriers/aramex/index.d.ts.map +1 -0
- package/dist/carriers/aramex/index.js +694 -0
- package/dist/carriers/aramex/index.js.map +12 -0
- package/dist/carriers/aramex/mappers.d.ts +76 -0
- package/dist/carriers/aramex/mappers.d.ts.map +1 -0
- package/dist/carriers/aramex/services.d.ts +74 -0
- package/dist/carriers/aramex/services.d.ts.map +1 -0
- package/dist/carriers/aramex/types.d.ts +302 -0
- package/dist/carriers/aramex/types.d.ts.map +1 -0
- package/dist/carriers/aymakan/adapter.d.ts +8 -2
- package/dist/carriers/aymakan/adapter.d.ts.map +1 -1
- package/dist/carriers/aymakan/index.js +138 -61
- package/dist/carriers/aymakan/index.js.map +4 -4
- package/dist/carriers/aymakan/mappers.d.ts +5 -0
- package/dist/carriers/aymakan/mappers.d.ts.map +1 -1
- package/dist/carriers/aymakan/types.d.ts +4 -6
- package/dist/carriers/aymakan/types.d.ts.map +1 -1
- package/dist/carriers/base.d.ts +2 -2
- package/dist/carriers/base.d.ts.map +1 -1
- package/dist/carriers/smsaexpress/adapter.d.ts +1 -1
- package/dist/carriers/smsaexpress/adapter.d.ts.map +1 -1
- package/dist/carriers/smsaexpress/index.js +32 -22
- package/dist/carriers/smsaexpress/index.js.map +4 -4
- package/dist/carriers/smsaexpress/mappers.d.ts.map +1 -1
- package/dist/core/http.d.ts.map +1 -1
- package/dist/core/schemas.d.ts +3 -3
- package/dist/core/types.d.ts +1 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/{index-x8sk1kw9.js → index-qjtxhwzv.js} +5 -3
- package/dist/{index-x8sk1kw9.js.map → index-qjtxhwzv.js.map} +5 -5
- package/dist/index.js +1 -1
- package/package.json +8 -3
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ShipFlow
|
|
2
2
|
|
|
3
|
-
Unified Shipping SDK for MENA region carriers. A single API to create shipments, track packages, manage labels, handle webhooks, and more — across Aymakan, SMSA Express, and future carriers.
|
|
3
|
+
Unified Shipping SDK for MENA region carriers. A single API to create shipments, track packages, manage labels, handle webhooks, and more — across Aymakan, SMSA Express, Aramex, and future carriers.
|
|
4
4
|
|
|
5
5
|
Think EasyPost / Shippo, but purpose-built for Saudi Arabia and the GCC.
|
|
6
6
|
|
|
@@ -25,6 +25,7 @@ bun add shipflow
|
|
|
25
25
|
import { ShipFlow } from "shipflow";
|
|
26
26
|
import { AymakanAdapter, AymakanService } from "shipflow/carriers/aymakan";
|
|
27
27
|
import { SMSAExpressAdapter, SMSAService } from "shipflow/carriers/smsaexpress";
|
|
28
|
+
import { AramexAdapter } from "shipflow/carriers/aramex";
|
|
28
29
|
|
|
29
30
|
const client = new ShipFlow({
|
|
30
31
|
adapters: [
|
|
@@ -36,6 +37,18 @@ const client = new ShipFlow({
|
|
|
36
37
|
mode: "sandbox",
|
|
37
38
|
credentials: { apiKey: process.env.SMSA_API_KEY! },
|
|
38
39
|
}),
|
|
40
|
+
// Aramex auth is a ClientInfo object sent in every request body (no API key)
|
|
41
|
+
new AramexAdapter({
|
|
42
|
+
mode: "sandbox",
|
|
43
|
+
credentials: {
|
|
44
|
+
userName: process.env.ARAMEX_USERNAME!,
|
|
45
|
+
password: process.env.ARAMEX_PASSWORD!,
|
|
46
|
+
accountNumber: process.env.ARAMEX_ACCOUNT_NUMBER!,
|
|
47
|
+
accountPin: process.env.ARAMEX_ACCOUNT_PIN!,
|
|
48
|
+
accountEntity: process.env.ARAMEX_ACCOUNT_ENTITY!, // e.g. "RUH"
|
|
49
|
+
accountCountryCode: process.env.ARAMEX_ACCOUNT_COUNTRY_CODE!, // e.g. "SA"
|
|
50
|
+
},
|
|
51
|
+
}),
|
|
39
52
|
],
|
|
40
53
|
});
|
|
41
54
|
|
|
@@ -91,25 +104,26 @@ Every carrier adapter implements these **required** methods:
|
|
|
91
104
|
|
|
92
105
|
Plus these **optional** methods (availability varies by carrier):
|
|
93
106
|
|
|
94
|
-
| Method | Aymakan | SMSA |
|
|
95
|
-
| ------------------------------------ | ------- | ---- |
|
|
96
|
-
| `createBulkShipments(inputs)` | ✅ | — |
|
|
97
|
-
| `cancelByReference(ref)` | ✅ | — |
|
|
98
|
-
| `updateDeliveryAddress(tn, address)` | ✅ | — |
|
|
99
|
-
| `trackByReference(ref)` | ✅ | ✅ |
|
|
100
|
-
| `getBulkLabels(trackingNumbers)` | ✅ | — |
|
|
101
|
-
| `getPickupCities()` | ✅ | — |
|
|
102
|
-
| `getTimeSlots(city, date)` | ✅ | — |
|
|
103
|
-
| `createPickup(input)` | ✅ | — |
|
|
104
|
-
| `cancelPickup(id)` | ✅ | — |
|
|
105
|
-
| `getPickupRequests()` | ✅ | — |
|
|
106
|
-
| `getCities()` | ✅ | ✅ |
|
|
107
|
-
| `getDropoffLocations()` | ✅ | ✅ |
|
|
108
|
-
| `createCustomerAddress(addr)` | ✅ | — |
|
|
109
|
-
| `getCustomerAddresses()` | ✅ | — |
|
|
110
|
-
| `updateCustomerAddress(id, addr)` | ✅ | — |
|
|
111
|
-
| `deleteCustomerAddress(id)` | ✅ | — |
|
|
112
|
-
| `
|
|
107
|
+
| Method | Aymakan | SMSA | Aramex |
|
|
108
|
+
| ------------------------------------ | ------- | ---- | ------ |
|
|
109
|
+
| `createBulkShipments(inputs)` | ✅ | — | ✅ |
|
|
110
|
+
| `cancelByReference(ref)` | ✅ | — | — |
|
|
111
|
+
| `updateDeliveryAddress(tn, address)` | ✅ | — | — |
|
|
112
|
+
| `trackByReference(ref)` | ✅ | ✅ | ✅ |
|
|
113
|
+
| `getBulkLabels(trackingNumbers)` | ✅ | — | — |
|
|
114
|
+
| `getPickupCities()` | ✅ | — | — |
|
|
115
|
+
| `getTimeSlots(city, date)` | ✅ | — | — |
|
|
116
|
+
| `createPickup(input)` | ✅ | — | ✅ |
|
|
117
|
+
| `cancelPickup(id)` | ✅ | — | ✅ |
|
|
118
|
+
| `getPickupRequests()` | ✅ | — | — |
|
|
119
|
+
| `getCities()` | ✅ | ✅ | ✅ |
|
|
120
|
+
| `getDropoffLocations()` | ✅ | ✅ | ✅ |
|
|
121
|
+
| `createCustomerAddress(addr)` | ✅ | — | — |
|
|
122
|
+
| `getCustomerAddresses()` | ✅ | — | — |
|
|
123
|
+
| `updateCustomerAddress(id, addr)` | ✅ | — | — |
|
|
124
|
+
| `deleteCustomerAddress(id)` | ✅ | — | — |
|
|
125
|
+
| `getRates(input)` | — | — | ✅ |
|
|
126
|
+
| `parseWebhook(payload, options)` | ✅ | ✅ | — |
|
|
113
127
|
|
|
114
128
|
SMSA-specific methods:
|
|
115
129
|
|
|
@@ -123,19 +137,111 @@ SMSA-specific methods:
|
|
|
123
137
|
|
|
124
138
|
## Carrier Support
|
|
125
139
|
|
|
126
|
-
| Feature | Aymakan | SMSA Express |
|
|
127
|
-
| ----------------- | ------------------------------- | ---------------------------------- |
|
|
128
|
-
| Countries | SA, AE, BH, KW, OM, QA | SA, AE, BH, EG, KW, OM, QA, JO |
|
|
129
|
-
| Service types | 10 (ONP, SDD, RVP, EXH, ...) | 3 (EDDL, EDEL, EDCR) |
|
|
130
|
-
| Shipment creation | Single + Bulk | B2C + C2B + 2-Way |
|
|
131
|
-
| COD | ✅ | ✅ (B2C only) |
|
|
132
|
-
| Cancellation | By tracking # or reference | C2B only |
|
|
133
|
-
| Tracking | Single, bulk, by reference | Single, bulk, by reference |
|
|
134
|
-
| Labels | PDF/PNG, single + bulk | PDF/ZPL |
|
|
135
|
-
| Pickups | Full lifecycle | — |
|
|
136
|
-
| Webhooks | ✅ (with auth verification) | ✅ (batch, with auth verification) |
|
|
137
|
-
| City resolution | Arabic ↔ English smart matching | Code-based lookup |
|
|
138
|
-
| Rates | ❌ | ❌ |
|
|
140
|
+
| Feature | Aymakan | SMSA Express | Aramex |
|
|
141
|
+
| ----------------- | ------------------------------- | ---------------------------------- | -------------------------------------- |
|
|
142
|
+
| Countries | SA, AE, BH, KW, OM, QA | SA, AE, BH, EG, KW, OM, QA, JO | SA, AE, BH, KW, OM, QA, JO, EG, LB, IQ |
|
|
143
|
+
| Service types | 10 (ONP, SDD, RVP, EXH, ...) | 3 (EDDL, EDEL, EDCR) | 10 product types (OND, PPX, EPX, ...) |
|
|
144
|
+
| Shipment creation | Single + Bulk | B2C + C2B + 2-Way | Single + Bulk (native batch) |
|
|
145
|
+
| COD | ✅ | ✅ (B2C only) | ✅ |
|
|
146
|
+
| Cancellation | By tracking # or reference | C2B only | Pickups only (no shipment cancel API) |
|
|
147
|
+
| Tracking | Single, bulk, by reference | Single, bulk, by reference | Single, bulk, by reference |
|
|
148
|
+
| Labels | PDF/PNG, single + bulk | PDF/ZPL | URL (HTML/PDF) |
|
|
149
|
+
| Pickups | Full lifecycle | — | Create + cancel |
|
|
150
|
+
| Webhooks | ✅ (with auth verification) | ✅ (batch, with auth verification) | — (poll via tracking) |
|
|
151
|
+
| City resolution | Arabic ↔ English smart matching | Code-based lookup | Name list (FetchCities / FetchOffices) |
|
|
152
|
+
| Rates | ❌ | ❌ | ✅ (CalculateRate) |
|
|
153
|
+
|
|
154
|
+
## Aramex
|
|
155
|
+
|
|
156
|
+
Aramex is integrated via the **JSON flavor of the classic `ShippingAPI.V2` services**. A few
|
|
157
|
+
things make it different from the other carriers:
|
|
158
|
+
|
|
159
|
+
- **Auth is a `ClientInfo` object in every request body** (no API key / header, no token
|
|
160
|
+
exchange). Pass `userName`, `password`, `accountNumber`, `accountPin`, `accountEntity` (the
|
|
161
|
+
3-letter origin office, e.g. `RUH`/`DXB`/`AMM`) and `accountCountryCode`.
|
|
162
|
+
- **Four independent services on separate hosts** — Shipping, Tracking, RateCalculator, and
|
|
163
|
+
Location. The adapter holds one HTTP client per service and routes automatically. If your
|
|
164
|
+
account provisions the Location service on a different host (some WSDLs use `anfe02.aramex.com`),
|
|
165
|
+
set `locationBaseUrl` on the config.
|
|
166
|
+
- **"Fake 200 OK" errors** — Aramex returns HTTP 200 even on logical failures, with
|
|
167
|
+
`HasErrors: true` + `Notifications[]`. ShipFlow surfaces these as `APIError`, including
|
|
168
|
+
per-shipment errors inside an otherwise-clean `CreateShipments` batch.
|
|
169
|
+
- **Rates are supported** (`getRates` → `CalculateRate`), unlike Aymakan/SMSA.
|
|
170
|
+
- **`cancelShipment` is unsupported** (the classic API has no shipment-cancel operation) and
|
|
171
|
+
throws `UnsupportedOperationError`. Pickups can be cancelled via `cancelPickup`.
|
|
172
|
+
- **Labels resolve to a URL** — the `format` argument of `getLabel` can't be honored.
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
import { AramexAdapter, AramexProductType } from "shipflow/carriers/aramex";
|
|
176
|
+
|
|
177
|
+
const aramex = client.carrier("aramex");
|
|
178
|
+
|
|
179
|
+
// Create a domestic COD shipment (freight prepaid, cash collected on delivery)
|
|
180
|
+
const shipment = await aramex.createShipment({
|
|
181
|
+
shipper: {
|
|
182
|
+
name: "My Store",
|
|
183
|
+
company: "ShipFlow",
|
|
184
|
+
phone: "966500000000",
|
|
185
|
+
line1: "King Fahd Road",
|
|
186
|
+
city: "Riyadh",
|
|
187
|
+
countryCode: "SA",
|
|
188
|
+
},
|
|
189
|
+
consignee: {
|
|
190
|
+
name: "Customer",
|
|
191
|
+
phone: "966500000001",
|
|
192
|
+
line1: "Prince Sultan Road",
|
|
193
|
+
city: "Jeddah",
|
|
194
|
+
countryCode: "SA",
|
|
195
|
+
},
|
|
196
|
+
parcels: [{ weight: { value: 1, unit: "kg" }, pieces: 1 }],
|
|
197
|
+
cod: { enabled: true, amount: 150, currency: "SAR" },
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
// Quote a rate, then track
|
|
201
|
+
const rates = await aramex.getRates!(input);
|
|
202
|
+
const result = await aramex.track(shipment.trackingNumber);
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Product group / type & payment** — ShipFlow infers `DOM` (domestic) when shipper and consignee
|
|
206
|
+
share a country, else `EXP`, and picks a sensible default product type (`OND` for domestic, `EPX`
|
|
207
|
+
for express). Override with `serviceType` (a valid Aramex code) or
|
|
208
|
+
`options.metadata.productGroup` / `productType`.
|
|
209
|
+
|
|
210
|
+
The freight **`PaymentType`** — who pays the *shipping cost* — defaults to `P` and is independent
|
|
211
|
+
of COD: enabling COD adds the `CODS` service and the cash amount to collect from the consignee, but
|
|
212
|
+
does **not** charge them freight. Override the freight payer with `options.metadata.paymentType`:
|
|
213
|
+
|
|
214
|
+
| Value | Freight billed to | When to use |
|
|
215
|
+
| ----- | ----------------- | ----------- |
|
|
216
|
+
| `"P"` _(default)_ | Shipper's Aramex account (prepaid) | Standard KSA/GCC e-commerce — merchant pays shipping, even with COD |
|
|
217
|
+
| `"C"` | Consignee, collected at delivery | Customer pays shipping on top of any COD |
|
|
218
|
+
| `"3"` | A third-party account | Freight billed to someone other than shipper/consignee |
|
|
219
|
+
|
|
220
|
+
```typescript
|
|
221
|
+
// Default: COD shipment with prepaid freight (PaymentType "P")
|
|
222
|
+
await aramex.createShipment({
|
|
223
|
+
...input,
|
|
224
|
+
cod: { enabled: true, amount: 150, currency: "SAR" }, // freight stays "P"
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
// Override: charge the customer freight at the door (PaymentType "C")
|
|
228
|
+
await aramex.createShipment({
|
|
229
|
+
...input,
|
|
230
|
+
cod: { enabled: true, amount: 150, currency: "SAR" },
|
|
231
|
+
options: { metadata: { paymentType: "C" } },
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
// Override: bill freight to a third party (PaymentType "3")
|
|
235
|
+
await aramex.createShipment({
|
|
236
|
+
...input,
|
|
237
|
+
options: { metadata: { paymentType: "3" } },
|
|
238
|
+
});
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
> Aramex does not push webhooks — poll `track()` / `trackMultiple()` for status updates.
|
|
242
|
+
> Tracking `UpdateCode`s vary by region and aren't fully published, so ShipFlow maps known codes
|
|
243
|
+
> and falls back to a description-keyword heuristic (then `"unknown"`) — an unmapped code never
|
|
244
|
+
> breaks tracking.
|
|
139
245
|
|
|
140
246
|
## Webhook Handling
|
|
141
247
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aramex Carrier Adapter
|
|
3
|
+
* Implementation of the CarrierAdapter interface for the Aramex JSON Shipping
|
|
4
|
+
* Services API v2.
|
|
5
|
+
*
|
|
6
|
+
* Key differences from the other carriers:
|
|
7
|
+
* - Auth is a `ClientInfo` object sent in EVERY request body (not headers).
|
|
8
|
+
* - The four Aramex services (Shipping, Tracking, RateCalculator, Location)
|
|
9
|
+
* live on different base URLs, so the adapter holds one HttpClient per service.
|
|
10
|
+
* - Errors use the "Fake 200 OK" pattern (HTTP 200 + `HasErrors`/`Notifications`),
|
|
11
|
+
* surfaced via the shared HttpClient's `errorExtractor` hook on every call.
|
|
12
|
+
*/
|
|
13
|
+
import type { CarrierConfig, City, CreateShipmentInput, Location, Pickup, PickupRequest, Rate, Shipment, TrackingResult } from "../../core/types.js";
|
|
14
|
+
import { BaseCarrierAdapter } from "../base.js";
|
|
15
|
+
export interface AramexConfig extends CarrierConfig {
|
|
16
|
+
credentials: {
|
|
17
|
+
userName: string;
|
|
18
|
+
password: string;
|
|
19
|
+
accountNumber: string;
|
|
20
|
+
accountPin: string;
|
|
21
|
+
accountEntity: string;
|
|
22
|
+
accountCountryCode: string;
|
|
23
|
+
};
|
|
24
|
+
/** API source channel (default 24). */
|
|
25
|
+
source?: number;
|
|
26
|
+
/** ClientInfo version (default "v1.0"). */
|
|
27
|
+
version?: string;
|
|
28
|
+
/** Company name used when an address has no company set. */
|
|
29
|
+
companyName?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Optional override for the Location service base URL. Live Aramex WSDLs
|
|
32
|
+
* disagree on the production Location host (ws.aramex.net vs anfe02.aramex.com);
|
|
33
|
+
* set this if your account is provisioned on a different host.
|
|
34
|
+
*/
|
|
35
|
+
locationBaseUrl?: string;
|
|
36
|
+
}
|
|
37
|
+
export declare class AramexAdapter extends BaseCarrierAdapter {
|
|
38
|
+
readonly name = "aramex";
|
|
39
|
+
readonly supportedCountries: string[];
|
|
40
|
+
private shippingHttp;
|
|
41
|
+
private trackingHttp;
|
|
42
|
+
private rateHttp;
|
|
43
|
+
private locationHttp;
|
|
44
|
+
constructor(config: AramexConfig);
|
|
45
|
+
protected getBaseUrl(): string;
|
|
46
|
+
/** Derive a sibling service base URL by swapping the `/Shipping/` segment. */
|
|
47
|
+
private serviceBase;
|
|
48
|
+
private get aramexConfig();
|
|
49
|
+
private buildClientInfo;
|
|
50
|
+
/**
|
|
51
|
+
* Extracts the Aramex "Fake 200 OK" error (envelope-level `HasErrors` +
|
|
52
|
+
* `Notifications`). Passed to every request so the HttpClient raises APIError.
|
|
53
|
+
*/
|
|
54
|
+
private static aramexErrorExtractor;
|
|
55
|
+
private static notificationsToErrors;
|
|
56
|
+
protected executeCreateShipment(input: CreateShipmentInput): Promise<Shipment>;
|
|
57
|
+
/**
|
|
58
|
+
* Create multiple shipments in a single request. Aramex's `CreateShipments`
|
|
59
|
+
* operation is natively batch — it takes a `Shipments` array and returns one
|
|
60
|
+
* processed result per shipment, in request order.
|
|
61
|
+
*
|
|
62
|
+
* Fails loud: if ANY shipment in the batch errors, an `APIError` is thrown
|
|
63
|
+
* whose `raw` holds the full response, so already-created AWBs remain
|
|
64
|
+
* recoverable (the unified `Shipment` type has no per-item error channel).
|
|
65
|
+
*/
|
|
66
|
+
createBulkShipments(inputs: CreateShipmentInput[]): Promise<Shipment[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Aramex's classic Shipping Services API has no shipment-cancellation
|
|
69
|
+
* endpoint, so this is unsupported. (Pickups can be cancelled via cancelPickup.)
|
|
70
|
+
*/
|
|
71
|
+
cancelShipment(_trackingNumber: string): Promise<boolean>;
|
|
72
|
+
getLabel(trackingNumber: string, _format?: "PDF" | "ZPL" | "PNG"): Promise<string>;
|
|
73
|
+
track(trackingNumber: string): Promise<TrackingResult>;
|
|
74
|
+
trackMultiple(trackingNumbers: string[]): Promise<TrackingResult[]>;
|
|
75
|
+
trackByReference(reference: string): Promise<TrackingResult>;
|
|
76
|
+
getRates(input: CreateShipmentInput): Promise<Rate[]>;
|
|
77
|
+
createPickup(input: PickupRequest): Promise<Pickup>;
|
|
78
|
+
cancelPickup(pickupId: string | number): Promise<boolean>;
|
|
79
|
+
getCities(countryCode?: string): Promise<City[]>;
|
|
80
|
+
getDropoffLocations(countryCode?: string): Promise<Location[]>;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/carriers/aramex/adapter.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AAYH,OAAO,KAAK,EACV,aAAa,EACb,IAAI,EACJ,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,aAAa,EACb,IAAI,EACJ,QAAQ,EACR,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAsD7C,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,WAAW,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,aAAc,SAAQ,kBAAkB;IACnD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,kBAAkB,WAWzB;IAEF,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,YAAY,CAAa;gBAErB,MAAM,EAAE,YAAY;IAuBhC,SAAS,CAAC,UAAU,IAAI,MAAM;IAM9B,8EAA8E;IAC9E,OAAO,CAAC,WAAW;IAInB,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,CAAC,eAAe;IAQvB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAyBnC,OAAO,CAAC,MAAM,CAAC,qBAAqB;cAcpB,qBAAqB,CACnC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,QAAQ,CAAC;IA6CpB;;;;;;;;OAQG;IACG,mBAAmB,CACvB,MAAM,EAAE,mBAAmB,EAAE,GAC5B,OAAO,CAAC,QAAQ,EAAE,CAAC;IAwDtB;;;OAGG;IACH,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQnD,QAAQ,CACZ,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAC9B,OAAO,CAAC,MAAM,CAAC;IA8BZ,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAetD,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA4BnE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAU5D,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IA4BrD,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAyDnD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBzD,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAehD,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CAcrE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aramex Carrier Exports
|
|
3
|
+
* Import from 'shipflow/carriers/aramex' for tree-shaking.
|
|
4
|
+
*/
|
|
5
|
+
export { AramexAdapter, type AramexConfig } from "./adapter.js";
|
|
6
|
+
export { AramexProductGroup, AramexProductType, AramexPaymentType, AramexService, AramexStatusCodes, type AramexProductGroupType, type AramexProductTypeCode, type AramexPaymentTypeCode, } from "./services.js";
|
|
7
|
+
export { buildClientInfo, mapAramexStatus, statusFromDescription, parseAramexDate, type AramexCredentials, } from "./mappers.js";
|
|
8
|
+
export type { AramexClientInfo, AramexCreateShipmentsRequest, AramexCreateShipmentsResponse, AramexProcessedShipment, AramexShipmentLabel, AramexPrintLabelResponse, AramexTrackShipmentsRequest, AramexTrackShipmentsResponse, AramexTrackingResult, AramexCalculateRateRequest, AramexCalculateRateResponse, AramexCreatePickupRequest, AramexCreatePickupResponse, AramexCancelPickupRequest, AramexFetchCitiesResponse, AramexFetchOfficesResponse, } from "./types.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/carriers/aramex/index.ts"],"names":[],"mappings":"AACA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,KAAK,iBAAiB,GACvB,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,gBAAgB,EAChB,4BAA4B,EAC5B,6BAA6B,EAC7B,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,SAAS,CAAC"}
|