PHP code example of kazistm / vargo

1. Go to this page and download the library: Download kazistm/vargo library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

kazistm / vargo example snippets


// config/delivery.php

return [
    'default' => env('DELIVERY_PROVIDER', 'elogistia'),

    'providers' => [

        'elogistia' => [
            'driver'   => ElogistiaDriver::class,
            'base_url' => env('ELOGISTIA_BASE_URL', 'https://api.elogistia.com'),
        ],

        'yalidine' => [
            'driver'   => YalidineExpressDriver::class,
            'base_url' => env('YALIDINE_EXPRESS_BASE_URL', 'https://api.yalidine.app'),
        ],

        // Clone providers use alias_of to point to their parent driver
        'samex' => [
            'driver'   => SamexDriver::class,
            'alias_of' => 'ecotrack',
            'base_url' => env('SAMEX_BASE_URL', 'https://samex.ecotrack.dz'),
        ],

        // ... all 80+ providers
    ],
];

use KaziSTM\Vargo\Enums\DeliveryProviders;

// Get the service manager
$manager = delivery();

// Instantiate a driver with credentials
$driver = delivery_driver(DeliveryProviders::ELOGISTIA, [
    'api_key' => 'your-api-key',
]);

// Create a shipment
$result = $driver->createShipment([
    'recipientFirstName' => 'Ahmed',
    'recipientLastName'  => 'Benali',
    'recipientPhone'     => '0550000000',
    'recipientAddress'   => '12 Rue de la Paix',
    'destinationCommune' => 'Bab El Oued',
    'destinationWilaya'  => 'Alger',
    'originWilaya'       => 'Alger',
    'codAmount'          => 3500,
]);

echo $result->trackingNumber; // e.g. "ELG-20241234"
echo $result->success;        // true

use KaziSTM\Vargo\Facades\DeliveryManager;

$driver = DeliveryManager::using(DeliveryProviders::NOEST, [
    'api_token' => 'noest-token',
    'user_guid' => 'your-guid',
]);

// All providers share the same interface — swap freely
foreach ([DeliveryProviders::ELOGISTIA, DeliveryProviders::NOEST] as $provider) {
    $driver = delivery_driver($provider, $credentials[$provider->value]);
    $shipment = $driver->createShipment($payload);
}

use KaziSTM\Vargo\Services\DeliveryServiceManager;

$manager = delivery();

// Check if a provider is configured
$manager->supports('elogistia');       // bool
$manager->supports(DeliveryProviders::NOEST); // bool

// List all configured provider keys
$providers = $manager->availableProviders(); // ['yalidine', 'elogistia', ...]

// Fluent chaining
$driver = $manager
    ->provider(DeliveryProviders::ZR_EXPRESS)
    ->withCredentials(['api_key' => '...', 'tenant_id' => '...'])
    ->driver();

// One-line shorthand (equivalent)
$driver = $manager->using(DeliveryProviders::ZR_EXPRESS, ['api_key' => '...', 'tenant_id' => '...']);

use KaziSTM\Vargo\Facades\DeliveryManager;

// All DeliveryServiceManager methods available statically
DeliveryManager::supports('elogistia');         // bool
DeliveryManager::availableProviders();          // array
DeliveryManager::using($provider, $creds);      // DeliveryDriver
DeliveryManager::provider($provider)            // DeliveryServiceManager (chainable)
               ->withCredentials($creds)
               ->driver();

// Get capabilities for all or a specific provider
DeliveryManager::getProviderCapabilities();     // ['yalidine' => ['createShipment', ...], ...]
DeliveryManager::getProviderCapabilities('yalidine'); // ['createShipment', 'getTracking', ...]

/**
 * Returns the DeliveryServiceManager singleton.
 */
function delivery(): DeliveryServiceManager;

/**
 * Instantiates a driver for the given provider with credentials.
 *
 * @param DeliveryProviders|string $provider  Enum case or string value (e.g. 'elogistia')
 * @param array                    $credentials  Provider-specific credentials
 */
function delivery_driver(DeliveryProviders|string $provider, array $credentials): AbstractDriver;

$driver = delivery_driver('zr-express', [
    'api_key'   => 'zr-key',
    'tenant_id' => 'zr-tenant',
]);

use KaziSTM\Vargo\Enums\DeliveryProviders;

// Get a human-readable label
echo DeliveryProviders::ELOGISTIA->getLabel(); // "Elogistia"

// Get the logo URL
echo DeliveryProviders::YALIDINE_EXPRESS->getLogo(); // asset('assets/logo/yalidine.png')

use KaziSTM\Vargo\Enums\DriverCapability;

$driver = delivery_driver(DeliveryProviders::NOEST, $credentials);

// Check a single capability
if (in_array(DriverCapability::VALIDATE_ORDER, $driver->getCapabilities())) {
    $driver->validateShipment('TRACKING-123');
}

// Calling an unsupported method throws UnsupportedDriverFeatureException

use KaziSTM\Vargo\Enums\DeliveryMode;

DeliveryMode::HOME;       // value: 1 — home delivery
DeliveryMode::STOP_DESK;  // value: 2 — desk/stop-desk pickup

// Provider integer → Vargo DeliveryMode
$mode = $driver->normalizeDeliveryMode(1); // DeliveryMode::HOME

// Vargo DeliveryMode → Provider integer
$raw = $driver->denormalizeDeliveryMode(DeliveryMode::STOP_DESK); // provider-specific int

use KaziSTM\Vargo\Enums\DeliveryStatuses;

DeliveryStatuses::IN_PREPARATION;  // 'in_preparation' — shipment created, not yet picked up
DeliveryStatuses::SHIPPED;         // 'shipped'         — in transit
DeliveryStatuses::DELIVERED;       // 'delivered'       — successfully delivered
DeliveryStatuses::DELIVERY_FAILED; // 'delivery_failed' — delivery attempt failed
DeliveryStatuses::UNKNOWN;         // 'unknown'         — unmapped/unrecognized status

use KaziSTM\Vargo\DTOs\CreateShipmentData;

// Using the DTO (type-safe)
$result = $driver->createShipment(new CreateShipmentData(
    originWilaya:       'Alger',
    recipientId:        null,
    recipientFirstName: 'Fatima',
    recipientLastName:  'Zahra',
    recipientEmail:     '[email protected]',
    recipientPhone:     '0661234567',
    recipientAddress:   '5 Rue des Oliviers, Hydra',
    destinationCommune: 'Hydra',
    destinationWilaya:  'Alger',
    codAmount:          5000,
    notes:              'Leave with the concierge',
    stopdesk:           false,
    fragile:            true,
));

// Using a plain array (auto-converted to DTO)
$result = $driver->createShipment([
    'originWilaya'       => 'Oran',
    'recipientFirstName' => 'Karim',
    'recipientLastName'  => 'Hadj',
    'recipientPhone'     => '0770000000',
    'recipientAddress'   => '10 Blvd Mokhtar',
    'destinationCommune' => 'Oran Centre',
    'destinationWilaya'  => 'Oran',
    'codAmount'          => 2800,
]);

// Result
$result->success;        // bool
$result->trackingNumber; // string|null
$result->reference;      // string|null
$result->message;        // string|null
$result->raw;            // array — raw provider response

$result = $driver->updateShipment('TRACKING-123', [
    'codAmount'     => 3200,
    'recipientPhone' => '0551234567',
]);

$result = $driver->deleteShipment('TRACKING-123');
// or with DTO
$result = $driver->deleteShipment(new TrackShipmentData('TRACKING-123'));

$shipments = $driver->listShipments([
    'page'   => 1,
    'status' => 'delivered',
]);

foreach ($shipments as $shipment) {
    echo $shipment->trackingNumber;
    echo $shipment->status;
}

$shipment = $driver->getShipment('TRACKING-123');

$shipment->trackingNumber;
$shipment->status;
$shipment->recipientName;

$tracking = $driver->getTracking('TRACKING-123');

$tracking->trackingNumber;
$tracking->status;        // normalized status string
$tracking->events;        // array of tracking events

$history = $driver->getShipmentHistory('TRACKING-123');

$histories = $driver->getShipmentHistories([
    'TRACKING-001',
    'TRACKING-002',
    'TRACKING-003',
]);

$states = $driver->getStates();

foreach ($states as $state) {
    $state->id;   // wilaya ID
    $state->name; // wilaya name
}

// All communes
$communes = $driver->getMunicipalities();

// Filtered by wilaya
$communes = $driver->getMunicipalities(stateId: 16); // Wilaya 16 = Alger

$offices = $driver->getOffices(wilayaId: 31); // Oran offices

foreach ($offices as $office) {
    $office->id;
    $office->name;
    $office->address;
    $office->wilayaId;
}

$prices = $driver->fetchPrices([
    'from_wilaya_id' => 16,
    'to_wilaya_id'   => 31,
]);

foreach ($prices as $price) {
    $price->wilayaId;
    $price->homePrice;
    $price->deskPrice;
}

// Download label as HTTP response (contains PDF/ZPL binary)
$response = $driver->downloadShipmentLabel('TRACKING-123');

// With a format hint (provider-specific, e.g. 'pdf', 'zpl')
$response = $driver->downloadShipmentLabel('TRACKING-123', format: 'pdf');

// Stream to browser
return response($response->body(), 200, [
    'Content-Type'        => 'application/pdf',
    'Content-Disposition' => 'inline; filename="label.pdf"',
]);

// Validate a single shipment
$result = $driver->validateShipment('TRACKING-123');

// Validate multiple shipments at once
$results = $driver->validateShipments([
    'TRACKING-001',
    'TRACKING-002',
]);

$result = $driver->requestReturn('TRACKING-123');

// Some providers accept a payload array instead of just a tracking number
$result = $driver->requestReturn([
    'tracking_number' => 'TRACKING-123',
    'reason'          => 'Customer refused delivery',
]);

// Add an agent remark to a shipment
$result = $driver->addRemark('TRACKING-123', 'Customer not reachable, retry tomorrow');

// Get all remarks/updates for a shipment
$updates = $driver->getShipmentUpdates('TRACKING-123');

$matches = $driver->filterShipmentsByStatus(
    trackings: ['TRACKING-001', 'TRACKING-002', 'TRACKING-003'],
    statuses:  ['delivered', 'returned'],
);

// Returns array<int, ShipmentTrackingData>
foreach ($matches as $tracking) {
    echo $tracking->trackingNumber . ': ' . $tracking->status;
}

$driver = delivery_driver(DeliveryProviders::ZR_EXPRESS, [
    'api_key'   => 'your-api-key',
    'tenant_id' => 'your-tenant-id',
]);

// Search products
$products = $driver->searchProducts(['search' => 'shirt', 'page' => 1]);

// Get a product
$product = $driver->getProduct('prod-uuid');

// Update product
$driver->updateProduct('prod-uuid', ['price' => 2500]);

// Update price
$driver->updateProductPrice('prod-uuid', 2500.00);

// Update stock
$driver->updateProductStock('prod-uuid', 100);

// Create stock movement
$movementId = $driver->createStockMovement([
    ['product_id' => 'prod-uuid', 'quantity' => 10],
]);

$clients = $driver->searchClients(['phone' => '0550000000']);
$client  = $driver->getClient('client-uuid');
$id      = $driver->createClient(['name' => 'Ali', 'phone' => '0550000000']);
$driver->updateClient('client-uuid', ['name' => 'Ali Updated']);
$driver->deleteClient('client-uuid');

// Addresses
$addrId = $driver->addClientAddress('client-uuid', ['wilaya_id' => 16, ...]);
$driver->updateClientAddress('client-uuid', $addrId, ['address' => '...']);
$driver->deleteClientAddress('client-uuid', $addrId);

$claims  = $driver->searchClaims(['status' => 'open']);
$claim   = $driver->getClaim('claim-uuid');
$id      = $driver->createClaim(['tracking_number' => 'ZR-001', 'reason' => '...']);
$driver->updateClaim('claim-uuid', ['status' => 'resolved']);
$history = $driver->getClaimHistory('claim-uuid');
$driver->createClaimComment('claim-uuid', 'Investigating now');
$comments   = $driver->searchClaimComments('claim-uuid');
$categories = $driver->searchClaimCategories();

$payments = $driver->searchSupplierPayments(['page' => 1]);
$payment  = $driver->getSupplierPaymentDetails('payment-uuid');
$driver->acceptSupplierPayment('payment-uuid');
$stats    = $driver->getTransactionStats();
$balance  = $driver->getSupplierBalance();
$export   = $driver->exportSupplierPayments(['format' => 'csv']);

$bag    = $driver->createPickupBag(['wilaya_id' => 16]);
$bags   = $driver->searchPickupBags();
$bag    = $driver->getPickupBag('bag-uuid');
$driver->addParcelToBag('bag-uuid', 'TRACKING-123');
$driver->removeParcelFromBag('bag-uuid', 'TRACKING-123');
$label  = $driver->printPickupBag('bag-uuid');
$driver->deletePickupBag('bag-uuid');

$endpoint = $driver->createWebhookEndpoint([
    'url'    => 'https://myapp.com/webhooks/zr',
    'events' => ['shipment.delivered', 'shipment.returned'],
]);
$endpoints = $driver->listWebhookEndpoints();
$endpoint  = $driver->getWebhookEndpoint('endpoint-uuid');
$driver->updateWebhookEndpoint('endpoint-uuid', ['url' => 'https://...']);
$driver->deleteWebhookEndpoint('endpoint-uuid');
$headers   = $driver->getWebhookEndpointHeaders('endpoint-uuid');
$secret    = $driver->getWebhookEndpointSecret('endpoint-uuid');

$reports = $driver->searchReports();
$report  = $driver->downloadReport('report-uuid');

$driver = delivery_driver(DeliveryProviders::MAYSTRO_DELIVERY, [
    'access_token' => 'your-access-token',
    'store_id'     => 'your-store-uuid',
]);

$products = $driver->listProducts();
$product  = $driver->getProduct('prod-uuid');
$driver->createProduct([...]);
$driver->updateProduct('prod-uuid', [...]);
$driver->deleteProduct('prod-uuid');

$driver->createWebhookEndpoint(['url' => 'https://myapp.com/webhooks/maystro']);
$driver->listWebhookEndpoints();
$driver->deleteWebhookEndpoint('endpoint-uuid');

$driver = delivery_driver(DeliveryProviders::MDM_EXPRESS, [
    'api_token' => 'your-api-token',
]);

$driver->createStore([...]);
$stores    = $driver->searchStores();
$store     = $driver->getStore('store-uuid');
$driver->updateStore('store-uuid', [...]);
$metadata  = $driver->getStoreMetadata();

$products  = $driver->listProducts();
$driver->createProduct([...]);
$driver->updateProductPrice('prod-uuid', 1500.0);
$driver->updateProductDiscount('prod-uuid', ['percentage' => 10]);
$driver->addProductImage('prod-uuid', $imageData);

// Variants
$variants  = $driver->searchProductVariants('prod-uuid');
$driver->createProductVariant('prod-uuid', [...]);
$driver->updateProductVariant('prod-uuid', 'variant-uuid', [...]);

// Offers
$offers    = $driver->searchProductOffers('prod-uuid');
$driver->createProductOffer('prod-uuid', [...]);
$driver->updateProductOffer('prod-uuid', 'offer-uuid', [...]);

// Categories
$categories = $driver->searchCategories();
$driver->updateProductCategory('cat-uuid', [...]);

$stats   = $driver->getParcelStats();
$meta    = $driver->getAuthMetadata();
$profile = $driver->getMyProfile();
$media   = $driver->getMedia('media-uuid');

$driver = delivery_driver(DeliveryProviders::ZIMOU_EXPRESS, [
    'api_token' => 'your-api-token',
]);

$driver->createShipment($payload);
$driver->getTracking('ZM-001');
$driver->downloadShipmentLabel('ZM-001');
$driver->validateShipment('ZM-001');
$driver->validateShipments(['ZM-001', 'ZM-002']);
$driver->requestReturn('ZM-001');
$driver->filterShipmentsByStatus(['ZM-001'], ['delivered', 'returned']);
$driver->addRemark('ZM-001', 'Customer called, delay requested');
$updates = $driver->getShipmentUpdates('ZM-001');

$orders  = $driver->listZimouOrders(['page' => 1]);
$order   = $driver->getZimouOrder('order-id');
$driver->createZimouOrder([...]);
$driver->updateZimouOrder('order-id', [...]);
$driver->deleteZimouOrder('order-id');
$driver->updateZimouOrderStatus('order-id', 'confirmed');
$stats   = $driver->getZimouOrdersStatsByStatus();
$pkg     = $driver->convertZimouOrderToPackage('order-id');

// Standard products
$products = $driver->listZimouProducts();
$driver->createZimouProduct([...]);
$driver->updateZimouProduct('id', [...]);
$driver->deleteZimouProduct('id');
$quantities = $driver->getZimouProductsQuantities(['id1', 'id2']);

// Dropship
$dropship  = $driver->listZimouDropshipProducts();
$driver->getZimouDropshipProduct(42);
$driver->getZimouDropshipProductsQuantities([...]);
$driver->listZimouDropships();

// Warehouse
$wh = $driver->listZimouWarehouseProducts();
$driver->createZimouWarehouseProduct([...]);
$driver->updateZimouWarehouseProduct(42, [...]);
$driver->deleteZimouWarehouseProduct(42);
$driver->createZimouWarehouseProductDeliveries([...]);

$stores = $driver->listZimouDeliveryStores();
$store  = $driver->getZimouDeliveryStore(1);
$driver->updateZimouDeliveryStore(1, 'active');
$driver->printZimouDeliveryStore(1);
$myStores    = $driver->listZimouMyStores();
$delivTypes  = $driver->listZimouMyDeliveryTypes();
$stopdesks   = $driver->listZimouStoreStopdesks();
$comparators = $driver->getZimouComparators('commune-id');

$payments = $driver->listZimouPayments();
$driver->createZimouPayment([...]);
$payment  = $driver->getZimouPayment(1);
$driver->confirmZimouPayment(1);
$driver->exportZimouPayments();
$stats    = $driver->getZimouPaymentsStatsByPackageStatus();

$employees = $driver->listZimouEmployees();
$driver->createZimouEmployee([...]);
$employee  = $driver->getZimouEmployee(1);
$driver->updateZimouEmployee(1, [...]);
$driver->deleteZimouEmployee(1, $credentials);

// Stats & reporting
$stats  = $driver->getZimouPackagesStatsByStatus();
$stats  = $driver->getZimouPackagesStatsBySituation();
$stats  = $driver->getZimouStatistics(['from' => '2024-01-01']);
$driver->exportZimouPackages();
$driver->printZimouPackages(['ZM-001', 'ZM-002']);

// Status lookups
$statuses   = $driver->listZimouPackageStatuses();
$situations = $driver->listZimouPackageSituations();
$reasons    = $driver->listZimouReasons();

// Bulk & pricing
$driver->createZimouPackageBulk([...]);
$price = $driver->calculateZimouPackagePrice([...]);
$driver->createZimouPackagePriceChange('package-id', [...]);
$driver->markZimouPackagesAsDispatched([...]);

// Imports
$imports = $driver->listZimouPackageImportations();
$driver->createZimouPackageImportation([...]);

// Warehouses
$warehouses = $driver->listZimouWarehouses();

// Auth
$token = $driver->loginZimou('email', 'password');
$token = $driver->generateNewZimouToken();

use KaziSTM\Vargo\DTOs\CreateShipmentData;

new CreateShipmentData(
    originWilaya:       string,        // tring,        // string,        // tring,        // ng       = null,   // your internal order ID
    items:              ?array        = null,   // product items
    insured:            ?bool         = null,
    declaredValue:      int|float|null = null,
    height:             int|float|null = null,  // cm
    width:              int|float|null = null,  // cm
    length:             int|float|null = null,  // cm
    weight:             int|float|null = null,  // kg
    freeShipping:       ?bool         = null,
    stopdesk:           ?bool         = null,   // true = stop desk delivery
    stopdeskId:         mixed         = null,   // office ID
    exchange:           ?bool         = null,   // true = exchange shipment
    exchangeItems:      mixed         = null,
    fragile:            ?bool         = null,
    liquid:             ?bool         = null,
    openable:           ?bool         = null,   // can be opened on delivery
    notes:              ?string       = null,
);

use KaziSTM\Vargo\DTOs\TrackShipmentData;

new TrackShipmentData(trackingNumber: 'ELG-001234');

// All tracking methods accept either the DTO or a plain string:
$driver->getTracking('ELG-001234');
$driver->getTracking(new TrackShipmentData('ELG-001234'));

$result->provider;        // string — provider key
$result->action;          // string — action name (e.g. 'createShipment')
$result->success;         // bool
$result->trackingNumber;  // ?string
$result->reference;       // ?string — provider's internal reference
$result->message;         // ?string — success or error message from provider
$result->code;            // int|string|null — provider error code
$result->raw;             // array — full raw provider response

$tracking->trackingNumber; // string
$tracking->status;         // string — normalized (DeliveryStatuses value)
$tracking->providerStatus; // string — raw provider status
$tracking->isDelivered;    // bool
$tracking->isFailed;       // bool
$tracking->events;         // array<int, ShipmentEventData>
$tracking->raw;            // array

$event->status;        // string — normalized status
$event->providerStatus;// string — raw status
$event->label;         // string — human-readable description
$event->location;      // ?string
$event->occurredAt;    // ?\DateTimeInterface
$event->meta;          // ?array — additional provider data

$shipment->trackingNumber;          // string
$shipment->status;                  // string — normalized
$shipment->providerStatus;          // string — raw
$shipment->reference;               // ?string
$shipment->recipientName;           // ?string
$shipment->recipientPhone;          // ?string
$shipment->recipientPhone2;         // ?string
$shipment->recipientAddress;        // ?string
$shipment->destinationCommune;      // ?string
$shipment->destinationWilayaId;     // int|string|null
$shipment->destinationWilayaName;   // ?string
$shipment->codAmount;               // int|float|null
$shipment->deliveryFee;             // int|float|null
$shipment->returnFee;               // int|float|null
$shipment->createdAt;               // ?\DateTimeInterface
$shipment->raw;                     // array

$city->id;          // int
$city->code;        // string — e.g. '16'
$city->name;        // string — e.g. 'Alger'
$city->arabicName;  // string
$city->slug;        // string
$city->longitude;   // ?float
$city->latitude;    // ?float

$commune->id;          // int
$commune->wilayaId;    // int
$commune->postalCode;  // string
$commune->name;        // string
$commune->arabicName;  // string
$commune->slug;        // string
$commune->longitude;   // ?float
$commune->latitude;    // ?float

$office->name;        // string
$office->code;        // ?string
$office->address;     // ?string
$office->commune;     // ?string
$office->wilayaId;    // int|string|null
$office->wilayaName;  // ?string
$office->phones;      // array<int, string>
$office->email;       // ?string
$office->map;         // ?string — map URL
$office->raw;         // array

$price->wilayaId;       // int|string|null
$price->wilayaName;     // ?string
$price->communeId;      // int|string|null
$price->communeName;    // ?string
$price->fromWilayaId;   // int|string|null
$price->toWilayaId;     // int|string|null
$price->zone;           // ?int
$price->homePrice;      // int|float|null
$price->stopDeskPrice;  // int|float|null
$price->type;           // DeliveryType enum
$price->level;          // ?DeliveryServiceLevel enum
$price->raw;            // array

DeliveryStatuses::IN_PREPARATION  // 'in_preparation'
DeliveryStatuses::SHIPPED          // 'shipped'
DeliveryStatuses::DELIVERED        // 'delivered'
DeliveryStatuses::DELIVERY_FAILED  // 'delivery_failed'
DeliveryStatuses::UNKNOWN          // 'unknown'

DeliveryMode::HOME;       // 1
DeliveryMode::STOP_DESK;  // 2

DeliveryServiceLevel::EXPRESS_HOME;   // 'express_home'
DeliveryServiceLevel::EXPRESS_DESK;   // 'express_desk'
DeliveryServiceLevel::ECONOMIC_HOME;  // 'economic_home'
DeliveryServiceLevel::ECONOMIC_DESK;  // 'economic_desk'

DeliveryType::DELIVERY;    // 'delivery'
DeliveryType::PICKUP;      // 'pickup'
DeliveryType::RETURN;      // 'return'
DeliveryType::EXCHANGE;    // 'exchange'
DeliveryType::COLLECTION;  // 'collection'

HttpMethods::GET;     HttpMethods::POST;
HttpMethods::PUT;     HttpMethods::PATCH;
HttpMethods::DELETE;

$normalizerClass = $driver->getPackageStatusNormalizer();
// e.g. KaziSTM\Vargo\Services\Elogistia\Normalizers\ElogistiaPackageStatusNormalizer

// Get all raw statuses the provider uses
$statuses = $driver->getPackageStatuses();
// e.g. array of ElogistiaPackagesStatus enum cases

use KaziSTM\Vargo\Enums\DriverCapability;

$capabilities = $driver->getCapabilities();

// Using in_array
if (in_array(DriverCapability::REQUEST_RETURN, $capabilities)) {
    $driver->requestReturn('TRACKING-123');
}

// Check before webhook operations
if (in_array(DriverCapability::CREATE_WEBHOOK_ENDPOINT, $capabilities)) {
    $driver->createWebhookEndpoint([...]);
}

$driver = delivery_driver(DeliveryProviders::ELOGISTIA, [
    'api_key' => 'possible-invalid-key',
]);

if ($driver->validateConnection()) {
    // credentials are valid, proceed
} else {
    // show configuration error to user
}

use KaziSTM\Vargo\Exceptions\ProviderRequestException;
use KaziSTM\Vargo\Exceptions\UnsupportedDriverFeatureException;

try {
    $result = $driver->createShipment($payload);
} catch (ProviderRequestException $e) {
    // The provider returned an error response
    Log::error('Delivery provider error', ['message' => $e->getMessage()]);
} catch (UnsupportedDriverFeatureException $e) {
    // Method not available for this driver
    abort(422, $e->getMessage());
}

$fields = $driver->getAuthenticationFields();

// Example output for Yalidine:
// [
//     'api_id' => [
//         'type'  => 'text',
//         'label' => 'API ID',
//         'rules' => ['

use Illuminate\Support\Facades\Http;

Http::fake([
    'api.elogistia.com/*' => Http::response([
        'success'         => true,
        'tracking_number' => 'ELG-TEST-001',
    ], 200),
]);

$driver = delivery_driver(DeliveryProviders::ELOGISTIA, [
    'api_key' => 'test-key',
]);

$result = $driver->createShipment([...]);

expect($result->trackingNumber)->toBe('ELG-TEST-001');
expect($result->success)->toBeTrue();

// Configure all providers for testing
configureDeliveryProviders();

// Refresh location fixtures (wilayas/communes)
refreshDeliveryLocationFixtures();
bash
# Publish configuration file
php artisan vendor:publish --tag=vargo-config

# Publish logo assets
php artisan vendor:publish --tag=vargo-assets
bash
php artisan vendor:publish --provider="KaziSTM\Vargo\VargoServiceProvider"