shipflow 0.1.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.
- package/README.md +328 -0
- package/dist/carriers/aymakan/adapter.d.ts +87 -0
- package/dist/carriers/aymakan/adapter.d.ts.map +1 -0
- package/dist/carriers/aymakan/index.d.ts +9 -0
- package/dist/carriers/aymakan/index.d.ts.map +1 -0
- package/dist/carriers/aymakan/index.js +625 -0
- package/dist/carriers/aymakan/index.js.map +12 -0
- package/dist/carriers/aymakan/mappers.d.ts +21 -0
- package/dist/carriers/aymakan/mappers.d.ts.map +1 -0
- package/dist/carriers/aymakan/services.d.ts +47 -0
- package/dist/carriers/aymakan/services.d.ts.map +1 -0
- package/dist/carriers/aymakan/types.d.ts +287 -0
- package/dist/carriers/aymakan/types.d.ts.map +1 -0
- package/dist/carriers/base.d.ts +88 -0
- package/dist/carriers/base.d.ts.map +1 -0
- package/dist/carriers/smsaexpress/adapter.d.ts +57 -0
- package/dist/carriers/smsaexpress/adapter.d.ts.map +1 -0
- package/dist/carriers/smsaexpress/index.d.ts +9 -0
- package/dist/carriers/smsaexpress/index.d.ts.map +1 -0
- package/dist/carriers/smsaexpress/index.js +408 -0
- package/dist/carriers/smsaexpress/index.js.map +12 -0
- package/dist/carriers/smsaexpress/mappers.d.ts +45 -0
- package/dist/carriers/smsaexpress/mappers.d.ts.map +1 -0
- package/dist/carriers/smsaexpress/services.d.ts +21 -0
- package/dist/carriers/smsaexpress/services.d.ts.map +1 -0
- package/dist/carriers/smsaexpress/types.d.ts +197 -0
- package/dist/carriers/smsaexpress/types.d.ts.map +1 -0
- package/dist/client.d.ts +44 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/core/errors.d.ts +69 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/http.d.ts +72 -0
- package/dist/core/http.d.ts.map +1 -0
- package/dist/core/schemas.d.ts +832 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/types.d.ts +234 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/index-x8sk1kw9.js +4600 -0
- package/dist/index-x8sk1kw9.js.map +22 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +10 -0
- package/package.json +63 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/carriers/aymakan/services.ts", "../src/carriers/aymakan/mappers.ts", "../src/carriers/aymakan/adapter.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"// file: src/carriers/aymakan/services.ts\n/**\n * Aymakan Service Type Codes\n * Use these constants for type-safe service selection.\n */\n\nexport const AymakanService = {\n /** Default ecommerce service */\n ECOMMERCE: \"ONP\",\n /** Documents or banking docs service */\n DOCUMENTS: \"DOC\",\n /** Same day delivery service */\n SAME_DAY: \"SDD\",\n /** Reverse pickup service */\n REVERSE_PICKUP: \"RVP\",\n /** Exchange service */\n EXCHANGE: \"EXH\",\n /** Lockers service */\n LOCKERS: \"LOC\",\n /** Heavy and bulky service */\n HEAVY: \"BLK\",\n /** Pallet service */\n PALLET: \"PLT\",\n /** Import express (International) */\n IMPORT_EXPRESS: \"IPX\",\n /** Export express (International) */\n EXPORT_EXPRESS: \"EPX\",\n} as const;\n\nexport type AymakanServiceType =\n (typeof AymakanService)[keyof typeof AymakanService];\n\n/**\n * Aymakan Status Codes\n * Maps carrier-specific codes to our unified status.\n */\nexport const AymakanStatusCodes = {\n // Core lifecycle\n \"AY-0001\": \"created\", // Shipment created / AWB created at origin\n \"AY-0002\": \"picked_up\", // Collected from collection point\n \"AY-0003\": \"at_warehouse\", // Received at hub\n \"AY-0004\": \"out_for_delivery\", // Out for final destination\n \"AY-0005\": \"delivered\", // Delivered to customer\n \"AY-0006\": \"exception\", // Not delivered (failed attempt)\n\n // Warehouse / transfer\n \"AY-0026\": \"at_warehouse\", // Received at [City] Warehouse\n \"AY-0027\": \"in_transit\", // Transferred to destination city\n \"AY-0028\": \"in_transit\", // In transit between hubs\n\n // Pending / rescheduled (delivery was attempted but rescheduled)\n \"AY-0032\": \"pending\", // Pending — future delivery / rescheduled\n\n // Terminal states\n \"AY-0007\": \"returned\", // Returned to shipper\n \"AY-0008\": \"cancelled\", // Cancelled\n \"AY-0009\": \"returned\", // Return to origin\n} as const;\n",
|
|
6
|
+
"// file: src/carriers/aymakan/mappers.ts\n/**\n * Aymakan Data Mappers\n * Transform between unified ShipFlow types and Aymakan API formats.\n */\n\nimport { ValidationError, WebhookVerificationError } from \"../../core/errors\";\nimport type {\n Address,\n City,\n CreateShipmentInput,\n CustomerAddress,\n Pickup,\n PickupRequest,\n Shipment,\n ShipmentStatus,\n TrackingEvent,\n TrackingResult,\n WebhookConfig,\n WebhookEvent,\n} from \"../../core/types\";\nimport { AymakanService, AymakanStatusCodes } from \"./services\";\nimport type {\n AymakanAddressRequest,\n AymakanCity,\n AymakanCreateShipmentRequest,\n AymakanNationalAddressRequest,\n AymakanPickupRequest,\n AymakanPickupResponse,\n AymakanShipmentResponse,\n AymakanTrackingEvent,\n AymakanTrackShipmentData,\n AymakanWebhookPayload,\n} from \"./types\";\n\n// ============================================================================\n// STATUS MAPPING\n// ============================================================================\n\nexport function mapAymakanStatus(statusCode: string): ShipmentStatus | undefined {\n const mapped =\n AymakanStatusCodes[statusCode as keyof typeof AymakanStatusCodes];\n return mapped as ShipmentStatus | undefined;\n}\n\n// ============================================================================\n// REQUEST MAPPERS\n// ============================================================================\n\nfunction mapNationalAddress(\n addr?: Address[\"nationalAddress\"],\n): AymakanNationalAddressRequest | undefined {\n if (!addr) return undefined;\n return {\n short_code: addr.shortCode,\n building_number: addr.buildingNumber,\n street_name: addr.streetName,\n district: addr.district,\n additional_number: addr.additionalNumber,\n };\n}\n\n/** Strip non-digit characters from phone numbers (Aymakan requires digits only) */\nfunction sanitizePhone(phone: string): string {\n return phone.replace(/\\D/g, '');\n}\n\n/** Set of valid Aymakan service type codes */\nconst VALID_AYMAKAN_SERVICE_TYPES = new Set(\n Object.values(AymakanService) as string[],\n);\n\n/**\n * Resolve service type to a valid Aymakan code.\n * Returns undefined for unknown values so the API uses its default (ONP/ecommerce).\n */\nfunction resolveServiceType(serviceType?: string): string | undefined {\n if (!serviceType) return undefined;\n if (VALID_AYMAKAN_SERVICE_TYPES.has(serviceType)) return serviceType;\n return undefined;\n}\n\nexport function mapCreateShipmentRequest(\n input: CreateShipmentInput,\n): AymakanCreateShipmentRequest {\n const firstParcel = input.parcels[0];\n const totalPieces = input.parcels.reduce((sum, p) => sum + p.pieces, 0);\n const totalWeight = input.parcels.reduce(\n (sum, p) =>\n sum +\n (p.weight.unit === \"lb\" ? p.weight.value * 0.453592 : p.weight.value),\n 0,\n );\n const totalItems = input.parcels.reduce(\n (sum, p) => sum + (p.itemsCount ?? p.pieces),\n 0,\n );\n\n return {\n requested_by: input.options?.requestedBy ?? input.shipper.name,\n declared_value: input.declaredValue?.amount ?? input.cod?.amount ?? 0,\n declared_value_currency:\n input.declaredValue?.currency ?? input.cod?.currency ?? \"SAR\",\n reference: input.reference,\n customer_tracking: input.options?.customerTracking,\n service_type: resolveServiceType(input.serviceType),\n is_cod: input.cod?.enabled ? 1 : 0,\n cod_amount: input.cod?.enabled ? input.cod.amount : undefined,\n fulfilment_customer_name: input.options?.fulfilmentCustomerName,\n currency: input.cod?.currency ?? \"SAR\",\n\n // Delivery (consignee)\n delivery_name: input.consignee.name,\n delivery_email: input.consignee.email,\n delivery_city: input.consignee.city,\n delivery_address: input.consignee.line1,\n delivery_neighbourhood:\n input.consignee.neighbourhood ?? input.consignee.state,\n delivery_postcode: input.consignee.postalCode,\n delivery_country: input.consignee.countryCode,\n delivery_phone: sanitizePhone(input.consignee.phone),\n delivery_description: input.consignee.description,\n delivery_national_address: mapNationalAddress(\n input.consignee.nationalAddress,\n ),\n\n // Collection (shipper)\n collection_name: input.shipper.company ?? input.shipper.name,\n collection_email: input.shipper.email,\n collection_city: input.shipper.city,\n collection_address: input.shipper.line1,\n collection_neighbourhood:\n input.shipper.neighbourhood ?? input.shipper.state,\n collection_postcode: input.shipper.postalCode,\n collection_country: input.shipper.countryCode,\n collection_phone: sanitizePhone(input.shipper.phone),\n collection_description: input.shipper.description,\n collection_national_address: mapNationalAddress(\n input.shipper.nationalAddress,\n ),\n\n // Parcel details\n weight: totalWeight,\n length: firstParcel?.dimensions?.length,\n width: firstParcel?.dimensions?.width,\n height: firstParcel?.dimensions?.height,\n pieces: totalPieces,\n items_count: totalItems,\n is_insured: input.options?.isInsured ? 1 : 0,\n\n // International\n international_metadata: input.options?.internationalMetadata\n ? {\n document_id: input.options.internationalMetadata.documentId,\n tax_identification_number: input.options.internationalMetadata.taxId,\n invoice_number: input.options.internationalMetadata.invoiceNumber,\n invoice_date: input.options.internationalMetadata.invoiceDate,\n }\n : undefined,\n };\n}\n\nexport function mapPickupRequest(input: PickupRequest): AymakanPickupRequest {\n return {\n reference: input.trackingNumbers?.[0],\n pickup_date: input.date,\n time_slot: input.timeSlot,\n city: input.city,\n contact_name: input.contactName,\n contact_phone: input.contactPhone,\n address: input.address,\n shipments: input.shipmentCount,\n };\n}\n\nexport function mapCustomerAddressRequest(\n addr: CustomerAddress,\n): AymakanAddressRequest {\n return {\n title: addr.title,\n name: addr.name,\n email: addr.email,\n city: addr.city,\n address: addr.address,\n neighbourhood: addr.neighbourhood,\n postcode: addr.postalCode ?? \"\",\n phone: addr.phone,\n description: addr.description ?? \"\",\n };\n}\n\n// ============================================================================\n// RESPONSE MAPPERS\n// ============================================================================\n\nexport function mapShipmentResponse(data: AymakanShipmentResponse): Shipment {\n // Parse cod_amount: API returns string like \"150.00\", we need number\n const codAmount =\n data.cod_amount != null\n ? typeof data.cod_amount === \"string\"\n ? parseFloat(data.cod_amount)\n : data.cod_amount\n : undefined;\n\n return {\n carrier: \"aymakan\",\n trackingNumber: data.tracking_number,\n customerTracking: data.customer_tracking ?? undefined,\n reference: data.reference ?? undefined,\n status: mapAymakanStatus(data.status) ?? \"created\",\n statusLabel: data.status_label,\n labelUrl: data.label || undefined,\n pdfLabelUrl: data.pdf_label || undefined,\n codAmount: codAmount && !Number.isNaN(codAmount) ? codAmount : undefined,\n declaredValue: data.declared_value,\n currency: data.currency,\n createdAt: new Date(data.created_at),\n raw: data,\n };\n}\n\nexport function mapTrackingEvent(event: AymakanTrackingEvent): TrackingEvent {\n return {\n timestamp: new Date(event.created_at),\n statusCode: event.status_code,\n status: mapAymakanStatus(event.status_code) ?? \"unknown\",\n description: event.description,\n descriptionArabic: event.description_ar ?? undefined,\n };\n}\n\nexport function mapTrackingResult(\n data: AymakanTrackShipmentData,\n): TrackingResult {\n return {\n trackingNumber: data.tracking_number,\n carrier: \"aymakan\",\n reference: data.reference ?? undefined,\n status: mapAymakanStatus(data.status) ?? \"unknown\",\n statusLabel: data.status_label,\n events: data.tracking_info.map(mapTrackingEvent),\n deliveryDate: data.delivery_date ? new Date(data.delivery_date) : undefined,\n pickupDate: data.pickup_date ? new Date(data.pickup_date) : undefined,\n receivedAt: data.received_at ? new Date(data.received_at) : undefined,\n codAmount: data.cod_amount\n ? Number.isNaN(parseFloat(data.cod_amount))\n ? undefined\n : parseFloat(data.cod_amount)\n : undefined,\n weight: Number.isNaN(parseFloat(data.weight))\n ? undefined\n : parseFloat(data.weight),\n pieces: data.pieces,\n raw: data,\n };\n}\n\nexport function mapCity(city: AymakanCity): City {\n return {\n nameEn: city.city_en,\n nameAr: city.city_ar,\n };\n}\n\nexport function mapPickupResponse(data: AymakanPickupResponse[\"data\"]): Pickup {\n return {\n id: data.id,\n carrier: \"aymakan\",\n status: (\n [\"pending\", \"processing\", \"completed\", \"cancelled\"] as const\n ).includes(data.status as Pickup[\"status\"])\n ? (data.status as Pickup[\"status\"])\n : \"pending\",\n date: data.pickup_date,\n timeSlot: data.time_slot,\n city: data.city,\n contactName: data.contact_name,\n contactPhone: data.contact_phone,\n address: data.address,\n shipmentCount: data.shipments,\n warehouseId: data.warehouse_id,\n warehouseName: data.warehouse_name,\n createdAt: new Date(data.created_at),\n raw: data,\n };\n}\n\n// ============================================================================\n// WEBHOOK MAPPER\n// ============================================================================\n\n/**\n * Timing-safe string comparison to prevent timing attacks on auth tokens.\n */\nfunction timingSafeEqual(a: string, b: string): boolean {\n const encoder = new TextEncoder();\n const bufA = encoder.encode(a);\n const bufB = encoder.encode(b);\n if (bufA.byteLength !== bufB.byteLength) return false;\n // Use crypto.subtle-compatible constant-time compare\n let mismatch = 0;\n for (let i = 0; i < bufA.byteLength; i++) {\n mismatch |= bufA[i]! ^ bufB[i]!;\n }\n return mismatch === 0;\n}\n\nexport function parseAymakanWebhook(\n payload: unknown,\n options?: {\n headers?: Record<string, string>;\n queryParams?: Record<string, string>;\n config?: WebhookConfig;\n },\n): WebhookEvent {\n const { headers = {}, queryParams = {}, config } = options ?? {};\n\n // Validate required fields\n if (\n !payload ||\n typeof payload !== \"object\" ||\n !(\"tracking_number\" in payload) ||\n !(\"status\" in payload)\n ) {\n throw new ValidationError(\n \"Invalid webhook payload: missing required fields\",\n {\n raw: payload,\n },\n );\n }\n\n const data = payload as AymakanWebhookPayload;\n\n // Verify auth via header (case-insensitive lookup, timing-safe comparison)\n if (config?.authHeader && config?.authValue) {\n const lowerKey = config.authHeader.toLowerCase();\n const headerValue = Object.entries(headers).find(\n ([k]) => k.toLowerCase() === lowerKey,\n )?.[1];\n if (!headerValue || !timingSafeEqual(headerValue, config.authValue)) {\n throw new WebhookVerificationError(\"Invalid webhook auth header\", {\n carrier: \"aymakan\",\n });\n }\n }\n\n // Verify auth via query param (timing-safe comparison)\n if (config?.authQueryParam && config?.authQueryValue) {\n const paramValue = queryParams[config.authQueryParam];\n if (!paramValue || !timingSafeEqual(paramValue, config.authQueryValue)) {\n throw new WebhookVerificationError(\"Invalid webhook auth query param\", {\n carrier: \"aymakan\",\n });\n }\n }\n\n const eventType = data.event ?? \"status_update\";\n\n // Validate timestamp\n const timestamp = new Date(data.date_time);\n if (Number.isNaN(timestamp.getTime())) {\n throw new ValidationError(\n \"Invalid webhook payload: invalid date_time value\",\n { raw: data.date_time },\n );\n }\n\n return {\n carrier: \"aymakan\",\n eventType,\n trackingNumber: data.tracking_number,\n reference: data.reference ?? undefined,\n status: eventType === \"weight_update\" ? \"unknown\" : (mapAymakanStatus(data.status) ?? \"unknown\"),\n statusCode: data.status,\n statusLabel: data.status_label,\n reasonCode: data.reason_code ?? undefined,\n reasonLabel: data.reason_en ?? undefined,\n timestamp,\n raw: data,\n };\n}\n",
|
|
7
|
+
"// file: src/carriers/aymakan/adapter.ts\n/**\n * Aymakan Carrier Adapter\n * Full implementation of the CarrierAdapter interface for Aymakan API.\n */\n\nimport { APIError, UnsupportedOperationError } from \"../../core/errors\";\nimport { HttpClient } from \"../../core/http\";\nimport {\n validateCreateShipmentInput,\n validatePickupRequest,\n} from \"../../core/schemas\";\nimport type {\n Address,\n CarrierConfig,\n City,\n CreateShipmentInput,\n CustomerAddress,\n Pickup,\n PickupRequest,\n Shipment,\n TimeSlot,\n TrackingResult,\n WebhookConfig,\n WebhookEvent,\n} from \"../../core/types\";\nimport { BaseCarrierAdapter } from \"../base\";\nimport {\n mapCity,\n mapCreateShipmentRequest,\n mapCustomerAddressRequest,\n mapPickupRequest,\n mapPickupResponse,\n mapShipmentResponse,\n mapTrackingResult,\n parseAymakanWebhook,\n} from \"./mappers\";\nimport type {\n AymakanAddressResponse,\n AymakanCancelResponse,\n AymakanCitiesResponse,\n AymakanCreateShipmentResponse,\n AymakanPickupResponse,\n AymakanTrackResponse,\n} from \"./types\";\n\nconst AYMAKAN_SANDBOX_URL = \"https://dev-api.aymakan.com.sa/v2\";\nconst AYMAKAN_PRODUCTION_URL = \"https://api.aymakan.net/v2\";\n\nexport interface AymakanConfig extends CarrierConfig {\n credentials: {\n apiKey: string;\n };\n}\n\nexport class AymakanAdapter extends BaseCarrierAdapter {\n readonly name = \"aymakan\";\n readonly supportedCountries = [\"SA\", \"AE\", \"BH\", \"KW\", \"OM\", \"QA\"];\n\n private http: HttpClient;\n\n /** Cached Aymakan cities list for city name resolution */\n private citiesCache: City[] | null = null;\n private citiesCacheTime = 0;\n /** Cache TTL: 1 hour */\n private static readonly CITIES_CACHE_TTL = 60 * 60 * 1000;\n\n constructor(config: AymakanConfig) {\n super(config);\n this.http = new HttpClient({\n baseUrl: this.getBaseUrl(),\n carrier: \"aymakan\",\n headers: {\n Authorization: config.credentials.apiKey,\n },\n });\n }\n\n protected getBaseUrl(): string {\n return this.config.mode === \"production\"\n ? AYMAKAN_PRODUCTION_URL\n : AYMAKAN_SANDBOX_URL;\n }\n\n // =========================================================================\n // CITY RESOLUTION\n // =========================================================================\n\n /**\n * Load cities list from Aymakan API and cache it.\n * Silently falls back to empty list on failure so shipments can still be attempted.\n */\n private async ensureCitiesLoaded(): Promise<void> {\n if (\n this.citiesCache &&\n Date.now() - this.citiesCacheTime < AymakanAdapter.CITIES_CACHE_TTL\n ) {\n return;\n }\n try {\n this.citiesCache = await this.getCities();\n this.citiesCacheTime = Date.now();\n } catch {\n if (!this.citiesCache) this.citiesCache = [];\n }\n }\n\n /**\n * Normalize Arabic text for comparison:\n * - Strip diacritics (tashkeel)\n * - Normalize alef variants (أ إ آ → ا)\n * - Normalize taa marbuta (ة → ه)\n * - Trim whitespace\n */\n private static normalizeArabic(text: string): string {\n return text\n .trim()\n .replace(/[\\u064B-\\u065F\\u0670]/g, \"\") // strip tashkeel\n .replace(/[أإآ]/g, \"ا\") // normalize alef\n .replace(/ة/g, \"ه\"); // normalize taa marbuta\n }\n\n /**\n * Resolve a user-input city name to the valid Aymakan English city name.\n *\n * Matching strategy (first match wins):\n * 1. Exact match on English name (case-insensitive)\n * 2. Exact match on Arabic name\n * 3. Normalized Arabic match (handles tashkeel, alef variants, taa marbuta)\n * 4. Match after stripping \"ال\" prefix from Arabic input\n * 5. Substring/contains match on English name (case-insensitive)\n *\n * Falls back to the original input if no match is found.\n */\n private resolveCity(inputCity: string): string {\n if (!this.citiesCache || this.citiesCache.length === 0) return inputCity;\n\n const trimmed = inputCity.trim();\n if (!trimmed) return inputCity;\n const lower = trimmed.toLowerCase();\n\n // 1. Exact English match (case-insensitive)\n const exactEn = this.citiesCache.find(\n (c) => c.nameEn.toLowerCase() === lower,\n );\n if (exactEn) return exactEn.nameEn;\n\n // 2. Exact Arabic match\n const exactAr = this.citiesCache.find((c) => c.nameAr === trimmed);\n if (exactAr) return exactAr.nameEn;\n\n // 3. Normalized Arabic match\n const normalizedInput = AymakanAdapter.normalizeArabic(trimmed);\n const normalizedAr = this.citiesCache.find(\n (c) =>\n c.nameAr &&\n AymakanAdapter.normalizeArabic(c.nameAr) === normalizedInput,\n );\n if (normalizedAr) return normalizedAr.nameEn;\n\n // 4. Arabic without \"ال\" prefix\n const withoutAl = normalizedInput.startsWith(\"ال\")\n ? normalizedInput.slice(2)\n : `ال${normalizedInput}`;\n const alMatch = this.citiesCache.find(\n (c) => c.nameAr && AymakanAdapter.normalizeArabic(c.nameAr) === withoutAl,\n );\n if (alMatch) return alMatch.nameEn;\n\n // 5. Contains match on English name (for partial matches like \"Riyadh\" in \"Riyadh City\")\n const containsEn = this.citiesCache.find(\n (c) =>\n c.nameEn.toLowerCase().includes(lower) ||\n lower.includes(c.nameEn.toLowerCase()),\n );\n if (containsEn) return containsEn.nameEn;\n\n // No match — return as-is and let the API return a validation error\n return trimmed;\n }\n\n /**\n * Resolve city names in a CreateShipmentInput to valid Aymakan city names.\n */\n private resolveCitiesInInput(\n input: CreateShipmentInput,\n ): CreateShipmentInput {\n return {\n ...input,\n shipper: {\n ...input.shipper,\n city: this.resolveCity(input.shipper.city),\n },\n consignee: {\n ...input.consignee,\n city: this.resolveCity(input.consignee.city),\n },\n };\n }\n\n // =========================================================================\n // SHIPPING\n // =========================================================================\n\n protected async executeCreateShipment(\n input: CreateShipmentInput,\n ): Promise<Shipment> {\n await this.ensureCitiesLoaded();\n const resolved = this.resolveCitiesInInput(input);\n const request = mapCreateShipmentRequest(resolved);\n const response = await this.http.post<AymakanCreateShipmentResponse>(\n \"/shipping/create\",\n request,\n );\n\n if (!response.success) {\n throw new APIError(\"Failed to create shipment\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n return mapShipmentResponse(response.shipping);\n }\n\n async createBulkShipments(\n inputs: CreateShipmentInput[],\n ): Promise<Shipment[]> {\n inputs.forEach(validateCreateShipmentInput);\n await this.ensureCitiesLoaded();\n const requests = inputs\n .map((i) => this.resolveCitiesInInput(i))\n .map(mapCreateShipmentRequest);\n const response = await this.http.post<{\n success: boolean;\n data: { shipments: AymakanCreateShipmentResponse[\"shipping\"][] };\n }>(\"/shipping/create_bulk\", { data: requests });\n\n if (!response.success) {\n throw new APIError(\"Failed to create bulk shipments\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n return response.data.shipments.map(mapShipmentResponse);\n }\n\n async cancelShipment(trackingNumber: string): Promise<boolean> {\n // Try passing as body\n const response = await this.http.post<AymakanCancelResponse>(\n \"/shipping/cancel\",\n {\n tracking: trackingNumber,\n },\n );\n return response.success;\n }\n\n async cancelByReference(reference: string): Promise<boolean> {\n const response = await this.http.post<AymakanCancelResponse>(\n `/shipping/cancel/reference/${encodeURIComponent(reference)}`,\n );\n return response.success;\n }\n\n async updateDeliveryAddress(\n trackingNumber: string,\n address: Address,\n ): Promise<boolean> {\n await this.ensureCitiesLoaded();\n const resolvedCity = this.resolveCity(address.city);\n const response = await this.http.post<{ success: boolean }>(\n `/shipping/update_delivery_address/${encodeURIComponent(trackingNumber)}`,\n {\n delivery_name: address.name,\n delivery_email: address.email,\n delivery_city: resolvedCity,\n delivery_address: address.line1,\n delivery_neighbourhood: address.neighbourhood,\n delivery_postcode: address.postalCode,\n delivery_country: address.countryCode,\n delivery_phone: address.phone,\n },\n );\n return response.success;\n }\n\n // =========================================================================\n // TRACKING\n // =========================================================================\n\n async track(trackingNumber: string): Promise<TrackingResult> {\n const results = await this.trackMultiple([trackingNumber]);\n const result = results[0];\n if (!result) {\n throw new APIError(\"Shipment not found\", { carrier: \"aymakan\" });\n }\n return result;\n }\n\n async trackMultiple(trackingNumbers: string[]): Promise<TrackingResult[]> {\n const ids = trackingNumbers.map(encodeURIComponent).join(\",\");\n const response = await this.http.get<AymakanTrackResponse>(\n `/shipping/track/${ids}`,\n );\n\n if (!response.success) {\n throw new APIError(\"Failed to track shipments\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n return response.data.shipments.map(mapTrackingResult);\n }\n\n async trackByReference(reference: string): Promise<TrackingResult> {\n const response = await this.http.get<AymakanTrackResponse>(\n `/shipments/by_reference/${encodeURIComponent(reference)}`,\n );\n\n if (!response.success || !response.data.shipments[0]) {\n throw new APIError(\"Shipment not found\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n return mapTrackingResult(response.data.shipments[0]);\n }\n\n // =========================================================================\n // LABELS\n // =========================================================================\n\n async getLabel(\n trackingNumber: string,\n format?: \"PDF\" | \"PNG\",\n ): Promise<string> {\n const response = await this.http.get<{\n success: boolean;\n data: { label: string; pdf_label: string; awb_url: string };\n }>(`/shipping/awb/tracking/${encodeURIComponent(trackingNumber)}`);\n\n if (!response.success) {\n throw new APIError(\"Failed to get label\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n // Prefer the format the caller requested\n if (format === \"PNG\") {\n return (\n response.data.label || response.data.awb_url || response.data.pdf_label\n );\n }\n return (\n response.data.pdf_label || response.data.awb_url || response.data.label\n );\n }\n\n async getBulkLabels(trackingNumbers: string[]): Promise<string> {\n const response = await this.http.post<{\n success: boolean;\n data: { label_url: string };\n }>(\"/shipping/bulk_awb_labels\", {\n tracking_numbers: trackingNumbers,\n });\n\n if (!response.success) {\n throw new APIError(\"Failed to get bulk labels\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n return response.data.label_url;\n }\n\n // =========================================================================\n // PICKUPS\n // =========================================================================\n\n async getPickupCities(): Promise<City[]> {\n const response = await this.http.get<AymakanCitiesResponse>(\n \"/pickup_request/cities\",\n );\n\n if (!response.success) {\n throw new APIError(\"Failed to get pickup cities\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n return response.data.cities.map(mapCity);\n }\n\n async getTimeSlots(_city: string, date: string): Promise<TimeSlot[]> {\n const response = await this.http.get<{\n success: boolean;\n error?: boolean;\n message?: string;\n data: {\n date: string;\n slots: Record<string, string>;\n };\n }>(`/time_slots/${date}`);\n\n // Aymakan returns error responses for invalid dates (past, Fridays, etc.)\n if (!response.success || response.error || !response.data?.slots) {\n const msg = response.message ?? \"No slots available\";\n throw new APIError(msg, { carrier: \"aymakan\", raw: response });\n }\n\n // data.slots is an object like { \"afternoon\": \"After Noon (02 PM - 06 PM)\" }\n return Object.entries(response.data.slots).map(([id, label]) => ({\n id,\n label,\n }));\n }\n\n async createPickup(input: PickupRequest): Promise<Pickup> {\n validatePickupRequest(input);\n await this.ensureCitiesLoaded();\n const resolvedInput = { ...input, city: this.resolveCity(input.city) };\n const request = mapPickupRequest(resolvedInput);\n const response = await this.http.post<AymakanPickupResponse>(\n \"/pickup_request/create\",\n request,\n );\n\n if (!response.success) {\n throw new APIError(\"Failed to create pickup\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n return mapPickupResponse(response.data);\n }\n\n async cancelPickup(pickupId: string | number): Promise<boolean> {\n const response = await this.http.post<{ success: boolean }>(\n `/pickup_request/cancel/${encodeURIComponent(String(pickupId))}`,\n );\n return response.success;\n }\n\n async getPickupRequests(): Promise<Pickup[]> {\n const response = await this.http.get<{\n success: boolean;\n data: { pickup_requests: AymakanPickupResponse[\"data\"][] };\n }>(\"/pickup_requests\");\n\n if (!response.success) {\n throw new APIError(\"Failed to get pickup requests\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n return response.data.pickup_requests.map(mapPickupResponse);\n }\n\n // =========================================================================\n // CITIES & LOCATIONS\n // =========================================================================\n\n async getCities(): Promise<City[]> {\n const response = await this.http.get<AymakanCitiesResponse>(\"/cities\");\n\n if (!response.success) {\n throw new APIError(\"Failed to get cities\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n return response.data.cities.map(mapCity);\n }\n\n async getDropoffLocations(): Promise<\n {\n id: string;\n name: string;\n nameAr?: string;\n address?: string;\n city?: string;\n }[]\n > {\n const response = await this.http.get<{\n success: boolean;\n data: {\n locations: Array<{\n id: number;\n name: string;\n name_ar?: string;\n address?: string;\n city?: string;\n }>;\n };\n }>(\"/dropoff_locations\");\n\n if (!response.success) {\n throw new APIError(\"Failed to get dropoff locations\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n return response.data.locations.map((loc) => ({\n id: String(loc.id),\n name: loc.name,\n nameAr: loc.name_ar,\n address: loc.address,\n city: loc.city,\n }));\n }\n\n // =========================================================================\n // CUSTOMER ADDRESSES\n // =========================================================================\n\n async createCustomerAddress(\n address: CustomerAddress,\n ): Promise<CustomerAddress> {\n const request = mapCustomerAddressRequest(address);\n const response = await this.http.post<AymakanAddressResponse>(\n \"/address/create\",\n request,\n );\n\n if (!response.success) {\n throw new APIError(\"Failed to create address\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n const addr = response.data.address;\n return {\n id: addr.id,\n title: addr.title,\n name: addr.name,\n email: addr.email,\n phone: addr.phone,\n city: addr.city,\n address: addr.address,\n neighbourhood: addr.neighbourhood,\n postalCode: addr.postcode,\n countryCode: addr.country,\n description: addr.description,\n };\n }\n\n async getCustomerAddresses(): Promise<CustomerAddress[]> {\n const response = await this.http.get<{\n success: boolean;\n data: { addresses: AymakanAddressResponse[\"data\"][\"address\"][] };\n }>(\"/addresses\");\n\n if (!response.success) {\n throw new APIError(\"Failed to get customer addresses\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n return response.data.addresses.map((addr) => ({\n id: addr.id,\n title: addr.title,\n name: addr.name,\n email: addr.email,\n phone: addr.phone,\n city: addr.city,\n address: addr.address,\n neighbourhood: addr.neighbourhood,\n postalCode: addr.postcode,\n countryCode: addr.country,\n description: addr.description,\n }));\n }\n\n async updateCustomerAddress(\n id: number,\n address: Partial<CustomerAddress>,\n ): Promise<CustomerAddress> {\n const response = await this.http.put<AymakanAddressResponse>(\n `/address/update/${id}`,\n {\n title: address.title,\n name: address.name,\n email: address.email,\n city: address.city,\n address: address.address,\n neighbourhood: address.neighbourhood,\n postcode: address.postalCode,\n phone: address.phone,\n description: address.description,\n },\n );\n\n if (!response.success) {\n throw new APIError(\"Failed to update address\", {\n carrier: \"aymakan\",\n raw: response,\n });\n }\n\n const addr = response.data.address;\n return {\n id: addr.id,\n title: addr.title,\n name: addr.name,\n email: addr.email,\n phone: addr.phone,\n city: addr.city,\n address: addr.address,\n neighbourhood: addr.neighbourhood,\n postalCode: addr.postcode,\n countryCode: addr.country,\n description: addr.description,\n };\n }\n\n async deleteCustomerAddress(id: number): Promise<boolean> {\n const response = await this.http.delete<{ success: boolean }>(\n `/address/delete/${id}`,\n );\n return response.success;\n }\n\n // =========================================================================\n // WEBHOOKS\n // =========================================================================\n\n parseWebhook(\n payload: unknown,\n options?: {\n headers?: Record<string, string>;\n queryParams?: Record<string, string>;\n config?: WebhookConfig;\n },\n ): WebhookEvent {\n return parseAymakanWebhook(payload, options);\n }\n\n // =========================================================================\n // NOT SUPPORTED\n // =========================================================================\n\n getRates(): Promise<never> {\n throw new UnsupportedOperationError(\"aymakan\", \"getRates\");\n }\n}\n"
|
|
8
|
+
],
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "ECFB3CDDA31BC0F864756E2164756E21",
|
|
11
|
+
"names": []
|
|
12
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aymakan Data Mappers
|
|
3
|
+
* Transform between unified ShipFlow types and Aymakan API formats.
|
|
4
|
+
*/
|
|
5
|
+
import type { City, CreateShipmentInput, CustomerAddress, Pickup, PickupRequest, Shipment, ShipmentStatus, TrackingEvent, TrackingResult, WebhookConfig, WebhookEvent } from "../../core/types.js";
|
|
6
|
+
import type { AymakanAddressRequest, AymakanCity, AymakanCreateShipmentRequest, AymakanPickupRequest, AymakanPickupResponse, AymakanShipmentResponse, AymakanTrackingEvent, AymakanTrackShipmentData } from "./types.js";
|
|
7
|
+
export declare function mapAymakanStatus(statusCode: string): ShipmentStatus | undefined;
|
|
8
|
+
export declare function mapCreateShipmentRequest(input: CreateShipmentInput): AymakanCreateShipmentRequest;
|
|
9
|
+
export declare function mapPickupRequest(input: PickupRequest): AymakanPickupRequest;
|
|
10
|
+
export declare function mapCustomerAddressRequest(addr: CustomerAddress): AymakanAddressRequest;
|
|
11
|
+
export declare function mapShipmentResponse(data: AymakanShipmentResponse): Shipment;
|
|
12
|
+
export declare function mapTrackingEvent(event: AymakanTrackingEvent): TrackingEvent;
|
|
13
|
+
export declare function mapTrackingResult(data: AymakanTrackShipmentData): TrackingResult;
|
|
14
|
+
export declare function mapCity(city: AymakanCity): City;
|
|
15
|
+
export declare function mapPickupResponse(data: AymakanPickupResponse["data"]): Pickup;
|
|
16
|
+
export declare function parseAymakanWebhook(payload: unknown, options?: {
|
|
17
|
+
headers?: Record<string, string>;
|
|
18
|
+
queryParams?: Record<string, string>;
|
|
19
|
+
config?: WebhookConfig;
|
|
20
|
+
}): WebhookEvent;
|
|
21
|
+
//# sourceMappingURL=mappers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../../src/carriers/aymakan/mappers.ts"],"names":[],"mappings":"AACA;;;GAGG;AAGH,OAAO,KAAK,EAEV,IAAI,EACJ,mBAAmB,EACnB,eAAe,EACf,MAAM,EACN,aAAa,EACb,QAAQ,EACR,cAAc,EACd,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EACV,qBAAqB,EACrB,WAAW,EACX,4BAA4B,EAE5B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EAEzB,MAAM,SAAS,CAAC;AAMjB,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAI/E;AAuCD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,mBAAmB,GACzB,4BAA4B,CA4E9B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,oBAAoB,CAW3E;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,eAAe,GACpB,qBAAqB,CAYvB;AAMD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,QAAQ,CAwB3E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,GAAG,aAAa,CAQ3E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,wBAAwB,GAC7B,cAAc,CAsBhB;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAK/C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,MAAM,CAqB7E;AAsBD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,GACA,YAAY,CAmEd"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aymakan Service Type Codes
|
|
3
|
+
* Use these constants for type-safe service selection.
|
|
4
|
+
*/
|
|
5
|
+
export declare const AymakanService: {
|
|
6
|
+
/** Default ecommerce service */
|
|
7
|
+
readonly ECOMMERCE: "ONP";
|
|
8
|
+
/** Documents or banking docs service */
|
|
9
|
+
readonly DOCUMENTS: "DOC";
|
|
10
|
+
/** Same day delivery service */
|
|
11
|
+
readonly SAME_DAY: "SDD";
|
|
12
|
+
/** Reverse pickup service */
|
|
13
|
+
readonly REVERSE_PICKUP: "RVP";
|
|
14
|
+
/** Exchange service */
|
|
15
|
+
readonly EXCHANGE: "EXH";
|
|
16
|
+
/** Lockers service */
|
|
17
|
+
readonly LOCKERS: "LOC";
|
|
18
|
+
/** Heavy and bulky service */
|
|
19
|
+
readonly HEAVY: "BLK";
|
|
20
|
+
/** Pallet service */
|
|
21
|
+
readonly PALLET: "PLT";
|
|
22
|
+
/** Import express (International) */
|
|
23
|
+
readonly IMPORT_EXPRESS: "IPX";
|
|
24
|
+
/** Export express (International) */
|
|
25
|
+
readonly EXPORT_EXPRESS: "EPX";
|
|
26
|
+
};
|
|
27
|
+
export type AymakanServiceType = (typeof AymakanService)[keyof typeof AymakanService];
|
|
28
|
+
/**
|
|
29
|
+
* Aymakan Status Codes
|
|
30
|
+
* Maps carrier-specific codes to our unified status.
|
|
31
|
+
*/
|
|
32
|
+
export declare const AymakanStatusCodes: {
|
|
33
|
+
readonly "AY-0001": "created";
|
|
34
|
+
readonly "AY-0002": "picked_up";
|
|
35
|
+
readonly "AY-0003": "at_warehouse";
|
|
36
|
+
readonly "AY-0004": "out_for_delivery";
|
|
37
|
+
readonly "AY-0005": "delivered";
|
|
38
|
+
readonly "AY-0006": "exception";
|
|
39
|
+
readonly "AY-0026": "at_warehouse";
|
|
40
|
+
readonly "AY-0027": "in_transit";
|
|
41
|
+
readonly "AY-0028": "in_transit";
|
|
42
|
+
readonly "AY-0032": "pending";
|
|
43
|
+
readonly "AY-0007": "returned";
|
|
44
|
+
readonly "AY-0008": "cancelled";
|
|
45
|
+
readonly "AY-0009": "returned";
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=services.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/carriers/aymakan/services.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,eAAO,MAAM,cAAc;IACzB,gCAAgC;;IAEhC,wCAAwC;;IAExC,gCAAgC;;IAEhC,6BAA6B;;IAE7B,uBAAuB;;IAEvB,sBAAsB;;IAEtB,8BAA8B;;IAE9B,qBAAqB;;IAErB,qCAAqC;;IAErC,qCAAqC;;CAE7B,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAC5B,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAEvD;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;CAqBrB,CAAC"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aymakan Raw API Types
|
|
3
|
+
* These directly mirror the Aymakan API request/response formats.
|
|
4
|
+
*/
|
|
5
|
+
export interface AymakanNationalAddressRequest {
|
|
6
|
+
short_code: string;
|
|
7
|
+
building_number?: string;
|
|
8
|
+
street_name?: string;
|
|
9
|
+
district?: string;
|
|
10
|
+
city?: string;
|
|
11
|
+
post_code?: string;
|
|
12
|
+
additional_number?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface AymakanInternationalMetadata {
|
|
15
|
+
document_id?: number;
|
|
16
|
+
tax_identification_number?: string;
|
|
17
|
+
invoice_number?: string;
|
|
18
|
+
invoice_date?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface AymakanCreateShipmentRequest {
|
|
21
|
+
requested_by: string;
|
|
22
|
+
declared_value: number;
|
|
23
|
+
declared_value_currency?: string;
|
|
24
|
+
reference?: string;
|
|
25
|
+
customer_tracking?: string;
|
|
26
|
+
service_type?: string;
|
|
27
|
+
is_cod?: 0 | 1;
|
|
28
|
+
cod_amount?: number;
|
|
29
|
+
fulfilment_customer_name?: string;
|
|
30
|
+
currency?: string;
|
|
31
|
+
delivery_name: string;
|
|
32
|
+
delivery_email?: string;
|
|
33
|
+
delivery_city: string;
|
|
34
|
+
delivery_address: string;
|
|
35
|
+
delivery_neighbourhood?: string;
|
|
36
|
+
delivery_postcode?: string;
|
|
37
|
+
delivery_country: string;
|
|
38
|
+
delivery_phone: string;
|
|
39
|
+
delivery_description?: string;
|
|
40
|
+
delivery_national_address?: AymakanNationalAddressRequest;
|
|
41
|
+
collection_name: string;
|
|
42
|
+
collection_email?: string;
|
|
43
|
+
collection_city: string;
|
|
44
|
+
collection_address: string;
|
|
45
|
+
collection_neighbourhood?: string;
|
|
46
|
+
collection_postcode?: string;
|
|
47
|
+
collection_country: string;
|
|
48
|
+
collection_phone: string;
|
|
49
|
+
collection_description?: string;
|
|
50
|
+
collection_national_address?: AymakanNationalAddressRequest;
|
|
51
|
+
weight?: number;
|
|
52
|
+
length?: number;
|
|
53
|
+
width?: number;
|
|
54
|
+
height?: number;
|
|
55
|
+
pieces: number;
|
|
56
|
+
items_count?: number;
|
|
57
|
+
is_insured?: 0 | 1;
|
|
58
|
+
international_metadata?: AymakanInternationalMetadata;
|
|
59
|
+
}
|
|
60
|
+
export interface AymakanPickupRequest {
|
|
61
|
+
reference?: string;
|
|
62
|
+
pickup_date: string;
|
|
63
|
+
time_slot: string;
|
|
64
|
+
city: string;
|
|
65
|
+
contact_name: string;
|
|
66
|
+
contact_phone: string;
|
|
67
|
+
address: string;
|
|
68
|
+
shipments: number;
|
|
69
|
+
}
|
|
70
|
+
export interface AymakanAddressRequest {
|
|
71
|
+
title: string;
|
|
72
|
+
name: string;
|
|
73
|
+
email: string;
|
|
74
|
+
city: string;
|
|
75
|
+
address: string;
|
|
76
|
+
neighbourhood: string;
|
|
77
|
+
postcode: string;
|
|
78
|
+
phone: string;
|
|
79
|
+
description: string;
|
|
80
|
+
}
|
|
81
|
+
export interface AymakanShipmentResponse {
|
|
82
|
+
reference: string | null;
|
|
83
|
+
tracking_number: string;
|
|
84
|
+
customer_tracking: string | null;
|
|
85
|
+
customer_name: string;
|
|
86
|
+
requested_by: string;
|
|
87
|
+
price_set_amount: number | null;
|
|
88
|
+
price_set_amount_incl_tax: number | null;
|
|
89
|
+
tax_amount: number | null;
|
|
90
|
+
tax_rate: number | null;
|
|
91
|
+
cod_amount: string | number | null;
|
|
92
|
+
declared_value: number;
|
|
93
|
+
declared_value_currency: string;
|
|
94
|
+
currency: string;
|
|
95
|
+
delivery_name: string;
|
|
96
|
+
delivery_email: string | null;
|
|
97
|
+
delivery_city: string;
|
|
98
|
+
delivery_address: string;
|
|
99
|
+
delivery_neighbourhood: string | null;
|
|
100
|
+
delivery_postcode: string | null;
|
|
101
|
+
delivery_country: string;
|
|
102
|
+
delivery_phone: string;
|
|
103
|
+
delivery_description: string | null;
|
|
104
|
+
collection_name: string;
|
|
105
|
+
collection_email: string | null;
|
|
106
|
+
collection_city: string;
|
|
107
|
+
collection_address: string;
|
|
108
|
+
collection_region: string | null;
|
|
109
|
+
collection_postcode: string | null;
|
|
110
|
+
collection_country: string;
|
|
111
|
+
collection_phone: string;
|
|
112
|
+
collection_description: string | null;
|
|
113
|
+
submission_date: string;
|
|
114
|
+
pickup_date: string | null;
|
|
115
|
+
received_at: string | null;
|
|
116
|
+
delivery_date: string | null;
|
|
117
|
+
weight: number;
|
|
118
|
+
pieces: number;
|
|
119
|
+
items_count: number;
|
|
120
|
+
status: string;
|
|
121
|
+
status_label: string;
|
|
122
|
+
created_at: string;
|
|
123
|
+
is_reverse_pickup: 0 | 1;
|
|
124
|
+
label: string;
|
|
125
|
+
pdf_label: string;
|
|
126
|
+
}
|
|
127
|
+
export interface AymakanCreateShipmentResponse {
|
|
128
|
+
success: boolean;
|
|
129
|
+
shipping: AymakanShipmentResponse;
|
|
130
|
+
}
|
|
131
|
+
export interface AymakanTrackingEvent {
|
|
132
|
+
status_code: string;
|
|
133
|
+
description: string;
|
|
134
|
+
description_ar: string | null;
|
|
135
|
+
created_at: string;
|
|
136
|
+
}
|
|
137
|
+
export interface AymakanTrackShipmentData {
|
|
138
|
+
reference: string | null;
|
|
139
|
+
tracking_number: string;
|
|
140
|
+
customer_tracking: string | null;
|
|
141
|
+
customer_name: string;
|
|
142
|
+
requested_by: string;
|
|
143
|
+
cod_amount: string | null;
|
|
144
|
+
declared_value: number | null;
|
|
145
|
+
declared_value_currency: string | null;
|
|
146
|
+
currency: string;
|
|
147
|
+
delivery_name: string;
|
|
148
|
+
delivery_email: string | null;
|
|
149
|
+
delivery_city: string;
|
|
150
|
+
delivery_address: string;
|
|
151
|
+
delivery_region: string | null;
|
|
152
|
+
delivery_postcode: string | null;
|
|
153
|
+
delivery_country: string;
|
|
154
|
+
delivery_phone: string;
|
|
155
|
+
delivery_description: string | null;
|
|
156
|
+
collection_name: string;
|
|
157
|
+
collection_email: string | null;
|
|
158
|
+
collection_city: string;
|
|
159
|
+
collection_address: string;
|
|
160
|
+
collection_region: string | null;
|
|
161
|
+
collection_postcode: string | null;
|
|
162
|
+
collection_country: string;
|
|
163
|
+
collection_phone: string;
|
|
164
|
+
collection_description: string | null;
|
|
165
|
+
submission_date: string;
|
|
166
|
+
pickup_date: string | null;
|
|
167
|
+
received_at: string | null;
|
|
168
|
+
delivery_date: string | null;
|
|
169
|
+
weight: string;
|
|
170
|
+
pieces: number;
|
|
171
|
+
items_count: number;
|
|
172
|
+
status: string;
|
|
173
|
+
status_label: string;
|
|
174
|
+
reason_en: string | null;
|
|
175
|
+
reason_ar: string | null;
|
|
176
|
+
created_at: string;
|
|
177
|
+
id_customer: number;
|
|
178
|
+
is_reverse_pickup: 0 | 1;
|
|
179
|
+
tracking_info: AymakanTrackingEvent[];
|
|
180
|
+
}
|
|
181
|
+
export interface AymakanTrackResponse {
|
|
182
|
+
success: boolean;
|
|
183
|
+
data: {
|
|
184
|
+
shipments: AymakanTrackShipmentData[];
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
export interface AymakanCity {
|
|
188
|
+
city_en: string;
|
|
189
|
+
city_ar: string;
|
|
190
|
+
}
|
|
191
|
+
export interface AymakanCitiesResponse {
|
|
192
|
+
success: boolean;
|
|
193
|
+
data: {
|
|
194
|
+
cities: AymakanCity[];
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
export interface AymakanPickupResponse {
|
|
198
|
+
success: boolean;
|
|
199
|
+
message: string;
|
|
200
|
+
data: {
|
|
201
|
+
id: number;
|
|
202
|
+
customer_id: number;
|
|
203
|
+
contact_name: string;
|
|
204
|
+
contact_phone: string;
|
|
205
|
+
shipments: number;
|
|
206
|
+
time_slot: string;
|
|
207
|
+
pickup_date: string;
|
|
208
|
+
address: string;
|
|
209
|
+
lat_long: string;
|
|
210
|
+
status: string;
|
|
211
|
+
city: string;
|
|
212
|
+
warehouse_id: number;
|
|
213
|
+
warehouse_name: string;
|
|
214
|
+
reference: string | null;
|
|
215
|
+
created_at: string;
|
|
216
|
+
updated_at: string;
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
export interface AymakanAddressResponse {
|
|
220
|
+
success: boolean;
|
|
221
|
+
data: {
|
|
222
|
+
address: {
|
|
223
|
+
id: number;
|
|
224
|
+
title: string;
|
|
225
|
+
name: string;
|
|
226
|
+
email: string;
|
|
227
|
+
city: string;
|
|
228
|
+
address: string;
|
|
229
|
+
postcode: string;
|
|
230
|
+
neighbourhood: string;
|
|
231
|
+
phone: string;
|
|
232
|
+
country: string;
|
|
233
|
+
description: string;
|
|
234
|
+
};
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
export interface AymakanCancelResponse {
|
|
238
|
+
success: boolean;
|
|
239
|
+
shipping?: {
|
|
240
|
+
reference: string | null;
|
|
241
|
+
tracking_number: string;
|
|
242
|
+
status: string;
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
export interface AymakanWebhookPayload {
|
|
246
|
+
tracking_number: string;
|
|
247
|
+
reference: string | null;
|
|
248
|
+
status: string;
|
|
249
|
+
status_label: string;
|
|
250
|
+
reason_code: string | null;
|
|
251
|
+
reason_en: string | null;
|
|
252
|
+
date_time: string;
|
|
253
|
+
event: "status_update" | "weight_update";
|
|
254
|
+
requested_delivery_date: string | null;
|
|
255
|
+
delivery_name: string;
|
|
256
|
+
delivery_email: string | null;
|
|
257
|
+
delivery_city: string;
|
|
258
|
+
delivery_address: string;
|
|
259
|
+
delivery_postcode: string | null;
|
|
260
|
+
delivery_country: string;
|
|
261
|
+
delivery_phone: string;
|
|
262
|
+
delivery_description: string | null;
|
|
263
|
+
delivery_neighbourhood: string | null;
|
|
264
|
+
delivery_date: string | null;
|
|
265
|
+
collection_name: string;
|
|
266
|
+
collection_email: string | null;
|
|
267
|
+
collection_city: string;
|
|
268
|
+
collection_address: string;
|
|
269
|
+
collection_neighbourhood: string | null;
|
|
270
|
+
is_reverse_pickup: 0 | 1;
|
|
271
|
+
pickup_date: string | null;
|
|
272
|
+
received_at: string | null;
|
|
273
|
+
cod_amount: string | null;
|
|
274
|
+
pieces: number;
|
|
275
|
+
id_customer: number;
|
|
276
|
+
weight: string;
|
|
277
|
+
payment_method: string | null;
|
|
278
|
+
customer_name: string;
|
|
279
|
+
tracking_info: AymakanTrackingEvent[];
|
|
280
|
+
}
|
|
281
|
+
export interface AymakanErrorResponse {
|
|
282
|
+
error?: boolean;
|
|
283
|
+
message?: string;
|
|
284
|
+
errors?: Record<string, string[]>;
|
|
285
|
+
response?: string;
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/carriers/aymakan/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CarrierAdapter Interface
|
|
3
|
+
* All carrier implementations must adhere to this interface.
|
|
4
|
+
* Optional methods are marked with `?` for carriers that don't support certain operations.
|
|
5
|
+
*/
|
|
6
|
+
import type { Address, CarrierConfig, City, CreateShipmentInput, CustomerAddress, Location, Pickup, PickupRequest, Rate, Shipment, TimeSlot, TrackingResult, WebhookConfig, WebhookEvent } from "../core/types.js";
|
|
7
|
+
export interface CarrierAdapter {
|
|
8
|
+
/** Unique carrier identifier (lowercase) */
|
|
9
|
+
readonly name: string;
|
|
10
|
+
/** ISO 3166-1 alpha-2 country codes this carrier operates in */
|
|
11
|
+
readonly supportedCountries: string[];
|
|
12
|
+
/** Create a single shipment */
|
|
13
|
+
createShipment(input: CreateShipmentInput): Promise<Shipment>;
|
|
14
|
+
/** Create multiple shipments in one request (if supported) */
|
|
15
|
+
createBulkShipments?(inputs: CreateShipmentInput[]): Promise<Shipment[]>;
|
|
16
|
+
/** Cancel a shipment by tracking number */
|
|
17
|
+
cancelShipment(trackingNumber: string): Promise<boolean>;
|
|
18
|
+
/** Cancel a shipment by reference (if supported) */
|
|
19
|
+
cancelByReference?(reference: string): Promise<boolean>;
|
|
20
|
+
/** Update delivery address for an existing shipment */
|
|
21
|
+
updateDeliveryAddress?(trackingNumber: string, address: Address): Promise<boolean>;
|
|
22
|
+
/** Track a single shipment */
|
|
23
|
+
track(trackingNumber: string): Promise<TrackingResult>;
|
|
24
|
+
/** Track multiple shipments in one request */
|
|
25
|
+
trackMultiple(trackingNumbers: string[]): Promise<TrackingResult[]>;
|
|
26
|
+
/** Track shipment by reference */
|
|
27
|
+
trackByReference?(reference: string): Promise<TrackingResult>;
|
|
28
|
+
/** Get label URL for a shipment */
|
|
29
|
+
getLabel(trackingNumber: string, format?: "PDF" | "PNG"): Promise<string>;
|
|
30
|
+
/** Get bulk labels as single PDF (if supported) */
|
|
31
|
+
getBulkLabels?(trackingNumbers: string[]): Promise<string>;
|
|
32
|
+
/** Get cities available for pickup scheduling */
|
|
33
|
+
getPickupCities?(): Promise<City[]>;
|
|
34
|
+
/** Get available time slots for a city/date */
|
|
35
|
+
getTimeSlots?(city: string, date: string): Promise<TimeSlot[]>;
|
|
36
|
+
/** Schedule a pickup */
|
|
37
|
+
createPickup?(input: PickupRequest): Promise<Pickup>;
|
|
38
|
+
/** Cancel a scheduled pickup */
|
|
39
|
+
cancelPickup?(pickupId: string | number): Promise<boolean>;
|
|
40
|
+
/** Get list of pickup requests */
|
|
41
|
+
getPickupRequests?(): Promise<Pickup[]>;
|
|
42
|
+
/** Get all cities serviced by this carrier */
|
|
43
|
+
getCities?(): Promise<City[]>;
|
|
44
|
+
/** Get dropoff/locker locations */
|
|
45
|
+
getDropoffLocations?(): Promise<Location[]>;
|
|
46
|
+
/** Create a stored customer address */
|
|
47
|
+
createCustomerAddress?(address: CustomerAddress): Promise<CustomerAddress>;
|
|
48
|
+
/** Get all stored customer addresses */
|
|
49
|
+
getCustomerAddresses?(): Promise<CustomerAddress[]>;
|
|
50
|
+
/** Update a stored customer address */
|
|
51
|
+
updateCustomerAddress?(id: number, address: Partial<CustomerAddress>): Promise<CustomerAddress>;
|
|
52
|
+
/** Delete a stored customer address */
|
|
53
|
+
deleteCustomerAddress?(id: number): Promise<boolean>;
|
|
54
|
+
/** Calculate shipping rates */
|
|
55
|
+
getRates?(input: CreateShipmentInput): Promise<Rate[]>;
|
|
56
|
+
/** Parse incoming webhook payload into a single normalized event */
|
|
57
|
+
parseWebhook?(payload: unknown, options?: {
|
|
58
|
+
headers?: Record<string, string>;
|
|
59
|
+
queryParams?: Record<string, string>;
|
|
60
|
+
config?: WebhookConfig;
|
|
61
|
+
}): WebhookEvent;
|
|
62
|
+
/** Parse incoming webhook payload into multiple normalized events (batch) */
|
|
63
|
+
parseWebhookBatch?(payload: unknown, options?: {
|
|
64
|
+
headers?: Record<string, string>;
|
|
65
|
+
queryParams?: Record<string, string>;
|
|
66
|
+
config?: WebhookConfig;
|
|
67
|
+
}): WebhookEvent[];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Abstract base class for carrier adapters.
|
|
71
|
+
* Provides common functionality and enforces interface compliance.
|
|
72
|
+
*/
|
|
73
|
+
export declare abstract class BaseCarrierAdapter implements CarrierAdapter {
|
|
74
|
+
abstract readonly name: string;
|
|
75
|
+
abstract readonly supportedCountries: string[];
|
|
76
|
+
protected config: CarrierConfig;
|
|
77
|
+
constructor(config: CarrierConfig);
|
|
78
|
+
/** Validates input then delegates to executeCreateShipment() */
|
|
79
|
+
createShipment(input: CreateShipmentInput): Promise<Shipment>;
|
|
80
|
+
protected abstract executeCreateShipment(input: CreateShipmentInput): Promise<Shipment>;
|
|
81
|
+
abstract cancelShipment(trackingNumber: string): Promise<boolean>;
|
|
82
|
+
abstract track(trackingNumber: string): Promise<TrackingResult>;
|
|
83
|
+
abstract trackMultiple(trackingNumbers: string[]): Promise<TrackingResult[]>;
|
|
84
|
+
abstract getLabel(trackingNumber: string, format?: "PDF" | "PNG"): Promise<string>;
|
|
85
|
+
/** Get base URL based on mode (sandbox/production) */
|
|
86
|
+
protected abstract getBaseUrl(): string;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/carriers/base.ts"],"names":[],"mappings":"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"}
|