Skip to main content

Delivery Module

The delivery module manages delivery provider selection and configuration.

Configuration Options

export type FilterProvider = (
params: {
providers: DeliveryProvider[];
order: Order;
},
unchainedAPI: UnchainedAPI,
) => Promise<DeliveryProvider[]>;

export type DetermineDefaultProvider = (
params: {
providers: DeliveryProvider[];
order: Order;
},
unchainedAPI: UnchainedAPI,
) => Promise<DeliveryProvider | null>;

export interface DeliverySettingsOptions {
filterSupportedProviders?: FilterProviders;
determineDefaultProvider?: DetermineDefaultProvider;
}

Custom Filtering

const options = {
modules: {
delivery: {
filterSupportedProviders: ({ order, providers }) => {
return providers
.toSorted((left, right) => {
return new Date(left.created).getTime() - new Date(right.created).getTime();
})
.filter((provider) => {
return process.env.NODE_ENV === 'production' ? provider._id !== 'free' : true;
});
},
},
},
};

By default we return all providers based on the creation date and don't filter any. You can't return inactive delivery providers in general.

Default Provider Selection for New Orders

const options = {
modules: {
delivery: {
determineDefaultProvider: ({ order, providers }) => {
return providers?.find(({ _id }) => _id === 'this-id-always-default');
},
},
},
};

By default the default provider is defined as first in list of providers (transformed by filterSupportedProviders first).

Events

EventPayloadDescription
DELIVERY_PROVIDER_CREATE{ deliveryProvider }Emitted when a delivery provider is created
DELIVERY_PROVIDER_UPDATE{ deliveryProvider }Emitted when a delivery provider is updated
DELIVERY_PROVIDER_REMOVE{ deliveryProvider }Emitted when a delivery provider is removed

More Information

For API usage and detailed documentation, see the core-delivery package on GitHub.