shipflow 0.3.1 → 0.4.0

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.
Files changed (35) hide show
  1. package/README.md +22 -0
  2. package/dist/carriers/aramex/adapter.d.ts.map +1 -1
  3. package/dist/carriers/aramex/index.js +12 -11
  4. package/dist/carriers/aramex/index.js.map +4 -4
  5. package/dist/carriers/aramex/mappers.d.ts +13 -5
  6. package/dist/carriers/aramex/mappers.d.ts.map +1 -1
  7. package/dist/carriers/aymakan/adapter.d.ts +17 -21
  8. package/dist/carriers/aymakan/adapter.d.ts.map +1 -1
  9. package/dist/carriers/aymakan/index.js +67 -53
  10. package/dist/carriers/aymakan/index.js.map +4 -4
  11. package/dist/carriers/aymakan/mappers.d.ts +2 -0
  12. package/dist/carriers/aymakan/mappers.d.ts.map +1 -1
  13. package/dist/carriers/aymakan/types.d.ts +1 -1
  14. package/dist/carriers/aymakan/types.d.ts.map +1 -1
  15. package/dist/carriers/smsaexpress/adapter.d.ts +43 -4
  16. package/dist/carriers/smsaexpress/adapter.d.ts.map +1 -1
  17. package/dist/carriers/smsaexpress/index.js +141 -25
  18. package/dist/carriers/smsaexpress/index.js.map +5 -5
  19. package/dist/carriers/smsaexpress/mappers.d.ts +12 -3
  20. package/dist/carriers/smsaexpress/mappers.d.ts.map +1 -1
  21. package/dist/carriers/smsaexpress/services.d.ts +3 -1
  22. package/dist/carriers/smsaexpress/services.d.ts.map +1 -1
  23. package/dist/core/city-resolver.d.ts +44 -0
  24. package/dist/core/city-resolver.d.ts.map +1 -0
  25. package/dist/core/http.d.ts +8 -0
  26. package/dist/core/http.d.ts.map +1 -1
  27. package/dist/core/retry.d.ts +8 -3
  28. package/dist/core/retry.d.ts.map +1 -1
  29. package/dist/{index-qnxj8bct.js → index-8cpdcbsf.js} +32 -6
  30. package/dist/{index-qnxj8bct.js.map → index-8cpdcbsf.js.map} +5 -5
  31. package/dist/index-dfx6rbm2.js +36 -0
  32. package/dist/index-dfx6rbm2.js.map +10 -0
  33. package/dist/index.js +3 -3
  34. package/dist/index.js.map +3 -3
  35. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/carriers/aymakan/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/carriers/aymakan/types.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,40 @@ export declare class SMSAExpressAdapter extends BaseCarrierAdapter {
14
14
  readonly name = "smsaexpress";
15
15
  readonly supportedCountries: string[];
16
16
  private http;
17
+ /** Cached SMSA Saudi cities list for city validation on booking */
18
+ private citiesCache;
19
+ private citiesCacheTime;
20
+ /** Timestamp of the last failed cities-lookup attempt, if any */
21
+ private citiesFetchFailedAt;
17
22
  constructor(config: SMSAExpressConfig);
18
23
  protected getBaseUrl(): string;
24
+ /**
25
+ * Ensure the input carries a `reference` so the OrderNumber the shipment is
26
+ * booked under is the exact value surfaced back on `Shipment.reference` (which
27
+ * the caller needs for {@link trackByReference}). When no reference is
28
+ * supplied we generate one here via the shared {@link generateOrderNumber} and
29
+ * pass this prepared input to BOTH the request mapper and the response mapper,
30
+ * so the request OrderNumber and the response reference always agree (otherwise
31
+ * each would call `Date.now()` independently and disagree).
32
+ */
33
+ private withOrderNumber;
34
+ /**
35
+ * Load the SMSA Saudi cities list and cache it, mirroring the Aymakan
36
+ * adapter's TTL + failure-cooldown behavior: a lookup outage falls back to
37
+ * an empty cache (pass-through resolution) so it never blocks bookings.
38
+ */
39
+ private ensureCitiesLoaded;
40
+ /**
41
+ * Validate/normalize a Saudi address city against SMSA's own city list
42
+ * before booking (SMSA's City field is list-validated server-side, so an
43
+ * unknown value previously produced an opaque carrier rejection). Strict:
44
+ * when the list is loaded and nothing matches, fail fast with a clear,
45
+ * field-scoped error. Lenient when the list is unavailable (outage) and for
46
+ * non-SA addresses, whose cities are not in the SA lookup.
47
+ */
48
+ private resolveCityStrict;
49
+ /** Resolve shipper + consignee cities for a booking (strict — see above). */
50
+ private resolveCitiesInInput;
19
51
  protected executeCreateShipment(input: CreateShipmentInput): Promise<Shipment>;
20
52
  private createC2BShipment;
21
53
  /**
@@ -24,10 +56,17 @@ export declare class SMSAExpressAdapter extends BaseCarrierAdapter {
24
56
  * **Important:** SMSA only supports cancellation for C2B/reverse-pickup
25
57
  * shipments, via the C2B endpoint. B2C shipments cannot be cancelled through
26
58
  * the SMSA API: the endpoint responds without a cancellation confirmation,
27
- * which is surfaced as an {@link APIError} rather than a misleading `false`.
28
- * That lets callers tell "the carrier could not cancel" apart from a genuine
29
- * refusal of a cancellable shipment and fall back accordingly. Consistent with
30
- * the other adapters, this method either returns `true` or throws.
59
+ * which is surfaced as an {@link APIError} (with `code: "CANCELLATION_UNCONFIRMED"`)
60
+ * rather than a misleading `false`. That `code` lets callers distinguish this
61
+ * "carrier did not confirm" case from a genuine request failure (network/4xx/5xx)
62
+ * and fall back accordingly. Consistent with the other adapters, this method
63
+ * either returns `true` or throws.
64
+ *
65
+ * Success is detected with a negation-aware check: a cancel token must be
66
+ * present AND no negation token may be. A bare `includes("cancelled")` would
67
+ * wrongly succeed on negatives like "Shipment cannot be cancelled",
68
+ * "not cancelled" or "cancellation failed". Note "already cancelled" carries
69
+ * no negation token, so it correctly reports success (idempotent cancel).
31
70
  */
32
71
  cancelShipment(trackingNumber: string): Promise<boolean>;
33
72
  track(trackingNumber: string): Promise<TrackingResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/carriers/smsaexpress/adapter.ts"],"names":[],"mappings":"AACA;;;GAGG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,IAAI,EACJ,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,aAAa,EACb,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAY7C,OAAO,KAAK,EAGV,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EAEtB,wBAAwB,EAEzB,MAAM,SAAS,CAAC;AAQjB,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,kBAAkB,WASzB;IAEF,OAAO,CAAC,IAAI,CAAa;gBAEb,MAAM,EAAE,iBAAiB;IAWrC,SAAS,CAAC,UAAU,IAAI,MAAM;cAUd,qBAAqB,CACnC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,QAAQ,CAAC;YAkBN,iBAAiB;IAY/B;;;;;;;;;;OAUG;IACG,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBxD,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQtD,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAUnE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAY5D,QAAQ,CACZ,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAC9B,OAAO,CAAC,MAAM,CAAC;IAsCZ,SAAS,CAAC,WAAW,SAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAQ9C,mBAAmB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAY1C,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAcjE,WAAW,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7D,oBAAoB,CACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,wBAAwB,CAAC;IAM9B,aAAa,CACjB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,yBAAyB,CAAC;IAWrC,YAAY,CACV,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,aAAa,CAAC;KACxB,GACA,YAAY;IAIf;;;;;;OAMG;IACH,iBAAiB,CACf,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,aAAa,CAAC;KACxB,GACA,YAAY,EAAE;CAGlB"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/carriers/smsaexpress/adapter.ts"],"names":[],"mappings":"AACA;;;GAGG;AASH,OAAO,KAAK,EACV,aAAa,EACb,IAAI,EACJ,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,aAAa,EACb,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAa7C,OAAO,KAAK,EAGV,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EAEtB,wBAAwB,EAEzB,MAAM,SAAS,CAAC;AAQjB,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,kBAAkB,WASzB;IAEF,OAAO,CAAC,IAAI,CAAa;IAEzB,mEAAmE;IACnE,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,eAAe,CAAK;IAC5B,iEAAiE;IACjE,OAAO,CAAC,mBAAmB,CAAK;gBAEpB,MAAM,EAAE,iBAAiB;IAWrC,SAAS,CAAC,UAAU,IAAI,MAAM;IAU9B;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAOvB;;;;OAIG;YACW,kBAAkB;IAkBhC;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAgBzB,6EAA6E;YAC/D,oBAAoB;cAiBlB,qBAAqB,CACnC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,QAAQ,CAAC;YAqBN,iBAAiB;IAY/B;;;;;;;;;;;;;;;;;OAiBG;IACG,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0CxD,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQtD,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAUnE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAY5D,QAAQ,CACZ,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAC9B,OAAO,CAAC,MAAM,CAAC;IA2CZ,SAAS,CAAC,WAAW,SAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAkB9C,mBAAmB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAmB1C,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiBjE,WAAW,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7D,oBAAoB,CACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,wBAAwB,CAAC;IAM9B,aAAa,CACjB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,yBAAyB,CAAC;IAWrC,YAAY,CACV,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,aAAa,CAAC;KACxB,GACA,YAAY;IAIf;;;;;;OAMG;IACH,iBAAiB,CACf,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,aAAa,CAAC;KACxB,GACA,YAAY,EAAE;CAGlB"}
@@ -1,10 +1,16 @@
1
+ import {
2
+ CITIES_CACHE_TTL,
3
+ CITIES_FAILURE_COOLDOWN,
4
+ findCityMatch
5
+ } from "../../index-dfx6rbm2.js";
1
6
  import {
2
7
  APIError,
3
8
  BaseCarrierAdapter,
4
9
  HttpClient,
10
+ RateLimitError,
5
11
  ValidationError,
6
12
  WebhookVerificationError
7
- } from "../../index-qnxj8bct.js";
13
+ } from "../../index-8cpdcbsf.js";
8
14
 
9
15
  // src/carriers/smsaexpress/services.ts
10
16
  var SMSAService = {
@@ -37,7 +43,13 @@ var SMSAStatusCodes = {
37
43
 
38
44
  // src/carriers/smsaexpress/mappers.ts
39
45
  function mapSMSAStatus(scanType) {
40
- return SMSAStatusCodes[scanType] ?? "in_transit";
46
+ return SMSAStatusCodes[scanType] ?? "unknown";
47
+ }
48
+ function scanDate(scan) {
49
+ return new Date(scan.ScanTimeZone ? `${scan.ScanDateTime}${scan.ScanTimeZone}` : scan.ScanDateTime);
50
+ }
51
+ function scanTimestampMs(scan) {
52
+ return scanDate(scan).getTime();
41
53
  }
42
54
  function deriveStatusFromScans(scans, isDelivered) {
43
55
  if (isDelivered) {
@@ -47,7 +59,7 @@ function deriveStatusFromScans(scans, isDelivered) {
47
59
  if (safeScans.length === 0) {
48
60
  return { status: "unknown", statusLabel: "Unknown" };
49
61
  }
50
- const sorted = [...safeScans].sort((a, b) => new Date(b.ScanDateTime).getTime() - new Date(a.ScanDateTime).getTime());
62
+ const sorted = [...safeScans].sort((a, b) => scanTimestampMs(b) - scanTimestampMs(a));
51
63
  const latest = sorted[0];
52
64
  return {
53
65
  status: mapSMSAStatus(latest.ScanType),
@@ -57,10 +69,19 @@ function deriveStatusFromScans(scans, isDelivered) {
57
69
  function roundWeight(weight) {
58
70
  return Math.round(weight * 1000) / 1000;
59
71
  }
72
+ function sanitizePhone(phone) {
73
+ return phone.replace(/\D/g, "");
74
+ }
75
+ function generateOrderNumber() {
76
+ return `ORD-${Date.now()}`;
77
+ }
78
+ function smsaShipDate() {
79
+ return new Date(Date.now() + 3 * 60 * 60 * 1000).toISOString().slice(0, 19);
80
+ }
60
81
  function mapAddress(addr, opts) {
61
82
  const result = {
62
83
  ContactName: addr.name,
63
- ContactPhoneNumber: addr.phone,
84
+ ContactPhoneNumber: sanitizePhone(addr.phone),
64
85
  Country: addr.countryCode,
65
86
  City: addr.city,
66
87
  AddressLine1: addr.line1,
@@ -88,12 +109,12 @@ function mapCreateB2CRequest(input) {
88
109
  return {
89
110
  ConsigneeAddress: consigneeAddress,
90
111
  ShipperAddress: mapAddress(input.shipper),
91
- OrderNumber: input.reference ?? `ORD-${Date.now()}`,
112
+ OrderNumber: input.reference ?? generateOrderNumber(),
92
113
  CODAmount: input.cod?.enabled ? input.cod.amount : 0,
93
114
  DeclaredValue: input.declaredValue?.amount ?? 0,
94
115
  ContentDescription: input.parcels[0]?.description ?? "Shipment contents",
95
116
  Parcels: totalPieces,
96
- ShipDate: new Date().toISOString().slice(0, 19),
117
+ ShipDate: smsaShipDate(),
97
118
  ShipmentCurrency: (input.cod?.enabled ? input.cod.currency : undefined) ?? input.declaredValue?.currency ?? input.cod?.currency ?? "SAR",
98
119
  Weight: roundWeight(totalWeight),
99
120
  WeightUnit: "KG",
@@ -110,11 +131,11 @@ function mapCreateC2BRequest(input) {
110
131
  return {
111
132
  PickupAddress: mapAddress(input.consignee, { includeShortCode: true }),
112
133
  ReturnToAddress: mapAddress(input.shipper),
113
- OrderNumber: input.reference ?? `ORD-${Date.now()}`,
134
+ OrderNumber: input.reference ?? generateOrderNumber(),
114
135
  DeclaredValue: input.declaredValue?.amount ?? 0.1,
115
136
  ContentDescription: input.parcels[0]?.description ?? "Return shipment contents",
116
137
  Parcels: totalPieces,
117
- ShipDate: new Date().toISOString().slice(0, 19),
138
+ ShipDate: smsaShipDate(),
118
139
  ShipmentCurrency: (input.cod?.enabled ? input.cod.currency : undefined) ?? input.declaredValue?.currency ?? input.cod?.currency ?? "SAR",
119
140
  Weight: roundWeight(totalWeight),
120
141
  WeightUnit: "KG",
@@ -202,11 +223,11 @@ function mapCreate2WayRequest(input) {
202
223
  return {
203
224
  ConsigneeAddress: consigneeAddress,
204
225
  ShipperAddress: mapAddress(input.shipper),
205
- OrderNumber: input.reference ?? `ORD-${Date.now()}`,
226
+ OrderNumber: input.reference ?? generateOrderNumber(),
206
227
  DeclaredValue: input.declaredValue?.amount ?? 0,
207
228
  ContentDescription: input.parcels[0]?.description ?? "Shipment contents",
208
229
  Parcels: totalPieces,
209
- ShipDate: new Date().toISOString().slice(0, 19),
230
+ ShipDate: smsaShipDate(),
210
231
  ShipmentCurrency: input.declaredValue?.currency ?? "SAR",
211
232
  Weight: roundWeight(totalWeight),
212
233
  WeightUnit: "KG",
@@ -251,9 +272,9 @@ function verifyWebhookAuth(options) {
251
272
  function mapWebhookShipmentToEvent(shipment) {
252
273
  const scans = shipment.Scans ?? [];
253
274
  const { status, statusLabel } = deriveStatusFromScans(scans, shipment.isDelivered);
254
- const sorted = [...scans].sort((a, b) => new Date(b.ScanDateTime).getTime() - new Date(a.ScanDateTime).getTime());
275
+ const sorted = [...scans].sort((a, b) => scanTimestampMs(b) - scanTimestampMs(a));
255
276
  const latestScan = sorted[0];
256
- const timestamp = latestScan ? new Date(latestScan.ScanTimeZone ? `${latestScan.ScanDateTime}${latestScan.ScanTimeZone}` : latestScan.ScanDateTime) : new Date;
277
+ const timestamp = latestScan ? scanDate(latestScan) : new Date;
257
278
  return {
258
279
  carrier: "smsaexpress",
259
280
  eventType: "status_update",
@@ -266,6 +287,28 @@ function mapWebhookShipmentToEvent(shipment) {
266
287
  raw: shipment
267
288
  };
268
289
  }
290
+ function mapWebhookShipmentToEvents(shipment) {
291
+ const scans = shipment.Scans ?? [];
292
+ if (scans.length === 0) {
293
+ return [mapWebhookShipmentToEvent(shipment)];
294
+ }
295
+ const sorted = [...scans].sort((a, b) => scanTimestampMs(a) - scanTimestampMs(b));
296
+ return sorted.map((scan, index) => {
297
+ const isLatest = index === sorted.length - 1;
298
+ const status = isLatest && shipment.isDelivered ? "delivered" : mapSMSAStatus(scan.ScanType);
299
+ return {
300
+ carrier: "smsaexpress",
301
+ eventType: "status_update",
302
+ trackingNumber: shipment.AWB,
303
+ reference: shipment.Reference || undefined,
304
+ status,
305
+ statusCode: scan.ScanType,
306
+ statusLabel: scan.ScanDescription,
307
+ timestamp: scanDate(scan),
308
+ raw: shipment
309
+ };
310
+ });
311
+ }
269
312
  function validateWebhookPayload(payload) {
270
313
  if (!Array.isArray(payload)) {
271
314
  throw new ValidationError("Invalid SMSA webhook payload: expected an array of shipments", { raw: payload });
@@ -276,8 +319,8 @@ function validateWebhookPayload(payload) {
276
319
  });
277
320
  }
278
321
  for (const item of payload) {
279
- if (!item || typeof item !== "object" || !("AWB" in item) || !("Scans" in item)) {
280
- throw new ValidationError("Invalid SMSA webhook payload: shipment missing required fields (AWB, Scans)", { raw: item });
322
+ if (!item || typeof item !== "object" || !("AWB" in item)) {
323
+ throw new ValidationError("Invalid SMSA webhook payload: shipment missing required field (AWB)", { raw: item });
281
324
  }
282
325
  }
283
326
  return payload;
@@ -290,7 +333,7 @@ function parseSMSAWebhook(payload, options) {
290
333
  function parseSMSAWebhookBatch(payload, options) {
291
334
  verifyWebhookAuth(options);
292
335
  const shipments = validateWebhookPayload(payload);
293
- return shipments.map(mapWebhookShipmentToEvent);
336
+ return shipments.flatMap(mapWebhookShipmentToEvents);
294
337
  }
295
338
 
296
339
  // src/carriers/smsaexpress/adapter.ts
@@ -311,6 +354,9 @@ class SMSAExpressAdapter extends BaseCarrierAdapter {
311
354
  "JO"
312
355
  ];
313
356
  http;
357
+ citiesCache = null;
358
+ citiesCacheTime = 0;
359
+ citiesFetchFailedAt = 0;
314
360
  constructor(config) {
315
361
  super(config);
316
362
  this.http = new HttpClient({
@@ -324,14 +370,65 @@ class SMSAExpressAdapter extends BaseCarrierAdapter {
324
370
  getBaseUrl() {
325
371
  return this.config.mode === "production" ? SMSA_PRODUCTION_URL : SMSA_SANDBOX_URL;
326
372
  }
373
+ withOrderNumber(input) {
374
+ if (input.reference) {
375
+ return input;
376
+ }
377
+ return { ...input, reference: generateOrderNumber() };
378
+ }
379
+ async ensureCitiesLoaded() {
380
+ const now = Date.now();
381
+ if (this.citiesCache && now - this.citiesCacheTime < CITIES_CACHE_TTL) {
382
+ return;
383
+ }
384
+ if (now - this.citiesFetchFailedAt < CITIES_FAILURE_COOLDOWN) {
385
+ if (!this.citiesCache)
386
+ this.citiesCache = [];
387
+ return;
388
+ }
389
+ try {
390
+ this.citiesCache = await this.getCities();
391
+ this.citiesCacheTime = now;
392
+ } catch {
393
+ this.citiesFetchFailedAt = now;
394
+ if (!this.citiesCache)
395
+ this.citiesCache = [];
396
+ }
397
+ }
398
+ resolveCityStrict(address, field) {
399
+ if (address.countryCode !== "SA")
400
+ return address.city;
401
+ if (!this.citiesCache || this.citiesCache.length === 0)
402
+ return address.city;
403
+ const match = findCityMatch(address.city, this.citiesCache);
404
+ if (!match) {
405
+ throw new ValidationError(`Unknown ${field.replace(".city", "")} city "${address.city}": not in SMSA's supported city list`, { field });
406
+ }
407
+ return match.nameEn;
408
+ }
409
+ async resolveCitiesInInput(input) {
410
+ await this.ensureCitiesLoaded();
411
+ return {
412
+ ...input,
413
+ shipper: {
414
+ ...input.shipper,
415
+ city: this.resolveCityStrict(input.shipper, "shipper.city")
416
+ },
417
+ consignee: {
418
+ ...input.consignee,
419
+ city: this.resolveCityStrict(input.consignee, "consignee.city")
420
+ }
421
+ };
422
+ }
327
423
  async executeCreateShipment(input) {
328
- const isC2B = input.serviceType !== undefined && C2B_SERVICE_CODES.has(input.serviceType);
424
+ const prepared = await this.resolveCitiesInInput(this.withOrderNumber(input));
425
+ const isC2B = prepared.serviceType !== undefined && C2B_SERVICE_CODES.has(prepared.serviceType.trim().toUpperCase());
329
426
  if (isC2B) {
330
- return this.createC2BShipment(input);
427
+ return this.createC2BShipment(prepared);
331
428
  }
332
- const request = mapCreateB2CRequest(input);
429
+ const request = mapCreateB2CRequest(prepared);
333
430
  const response = await this.http.post("/api/shipment/b2c/new", request);
334
- return mapShipmentResponse(response, input);
431
+ return mapShipmentResponse(response, prepared);
335
432
  }
336
433
  async createC2BShipment(input) {
337
434
  const request = mapCreateC2BRequest(input);
@@ -343,10 +440,16 @@ class SMSAExpressAdapter extends BaseCarrierAdapter {
343
440
  if (typeof response !== "string") {
344
441
  return true;
345
442
  }
346
- if (response.toLowerCase().includes("cancelled")) {
443
+ const hasCancelToken = /cancel/i.test(response);
444
+ const hasNegation = /\b(?:not|can\s?not|can'?t|cant|unable|fail(?:ed|ure)?|invalid|reject(?:ed)?|error)\b/i.test(response);
445
+ if (hasCancelToken && !hasNegation) {
347
446
  return true;
348
447
  }
349
- throw new APIError(response.trim() || "SMSA did not confirm cancellation (B2C shipments cannot be cancelled via the SMSA API)", { carrier: "smsaexpress", raw: response });
448
+ throw new APIError(response.trim() || "SMSA did not confirm cancellation", {
449
+ carrier: "smsaexpress",
450
+ code: "CANCELLATION_UNCONFIRMED",
451
+ raw: response
452
+ });
350
453
  }
351
454
  async track(trackingNumber) {
352
455
  const response = await this.http.get(`/api/track/single/${encodeURIComponent(trackingNumber)}`);
@@ -373,7 +476,7 @@ class SMSAExpressAdapter extends BaseCarrierAdapter {
373
476
  return `data:application/pdf;base64,${waybill.awbFile}`;
374
477
  }
375
478
  } catch (error) {
376
- if (!(error instanceof APIError) || error.statusCode === 401 || error.statusCode !== undefined && error.statusCode >= 500) {
479
+ if (!(error instanceof APIError) || error instanceof RateLimitError || error.statusCode !== undefined && error.statusCode >= 500) {
377
480
  throw error;
378
481
  }
379
482
  }
@@ -385,16 +488,29 @@ class SMSAExpressAdapter extends BaseCarrierAdapter {
385
488
  }
386
489
  async getCities(countryCode = "SA") {
387
490
  const response = await this.http.get(`/api/lookup/cities/${encodeURIComponent(countryCode)}`);
491
+ if (!Array.isArray(response)) {
492
+ throw new APIError("SMSA cities lookup returned an unexpected shape", {
493
+ carrier: "smsaexpress",
494
+ raw: response
495
+ });
496
+ }
388
497
  return response.map(mapCity);
389
498
  }
390
499
  async getDropoffLocations() {
391
500
  const response = await this.http.get("/api/lookup/smsaoffices");
501
+ if (!Array.isArray(response)) {
502
+ throw new APIError("SMSA offices lookup returned an unexpected shape", {
503
+ carrier: "smsaexpress",
504
+ raw: response
505
+ });
506
+ }
392
507
  return response.map(mapOffice);
393
508
  }
394
509
  async create2WayShipment(input) {
395
- const request = mapCreate2WayRequest(input);
510
+ const prepared = await this.resolveCitiesInInput(this.withOrderNumber(input));
511
+ const request = mapCreate2WayRequest(prepared);
396
512
  const response = await this.http.post("/api/TwoWayShipment/new", request);
397
- return mapShipmentResponse(response, input);
513
+ return mapShipmentResponse(response, prepared);
398
514
  }
399
515
  async sendInvoice(request) {
400
516
  return this.http.post("/api/invoice", request);
@@ -421,4 +537,4 @@ export {
421
537
  SMSAExpressAdapter
422
538
  };
423
539
 
424
- //# debugId=E494CE182FFD4CD964756E2164756E21
540
+ //# debugId=87215A69EE27862E64756E2164756E21