@86d-app/doordash
v0.0.40
Published
DoorDash Drive delivery integration module for 86d commerce platform
Readme
[!WARNING] This project is under active development and is not ready for production use.
DoorDash Module
📚 Documentation: 86d.app/docs/modules/doordash
DoorDash delivery integration for 86d. Manage deliveries, define delivery zones with radius-based availability checks, and track driver assignments in real time.
Installation
npm install @86d-app/doordashUsage
import doordash from "@86d-app/doordash";
const module = doordash({
apiKey: "your-doordash-api-key",
businessId: "your-business-id",
sandbox: "true",
});Configuration
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| apiKey | string | — | DoorDash API key |
| businessId | string | — | DoorDash business ID |
| sandbox | string | "true" | Use sandbox mode |
Store Endpoints
| Method | Path | Description |
|--------|------|-------------|
| POST | /doordash/deliveries | Create a delivery |
| GET | /doordash/deliveries/:id | Get delivery by ID |
| POST | /doordash/availability | Check delivery availability by lat/lng |
Admin Endpoints
| Method | Path | Description |
|--------|------|-------------|
| GET | /admin/doordash/deliveries | List all deliveries |
| POST | /admin/doordash/deliveries/create | Create a delivery (admin) |
| POST | /admin/doordash/deliveries/:id/status | Update delivery status |
| GET | /admin/doordash/zones | List delivery zones |
| POST | /admin/doordash/zones/create | Create a delivery zone |
| POST | /admin/doordash/zones/:id | Update a delivery zone |
| POST | /admin/doordash/zones/:id/delete | Delete a delivery zone |
Controller API
interface DoordashController extends ModuleController {
createDelivery(params: {
orderId: string;
pickupAddress: Record<string, unknown>;
dropoffAddress: Record<string, unknown>;
fee: number;
tip?: number;
metadata?: Record<string, unknown>;
}): Promise<Delivery>;
getDelivery(id: string): Promise<Delivery | null>;
cancelDelivery(id: string): Promise<Delivery | null>;
updateDeliveryStatus(id: string, status: DeliveryStatus): Promise<Delivery | null>;
listDeliveries(params?: { status?: DeliveryStatus; take?: number; skip?: number }): Promise<Delivery[]>;
createZone(params: {
name: string;
radius: number;
centerLat: number;
centerLng: number;
minOrderAmount?: number;
deliveryFee: number;
estimatedMinutes: number;
}): Promise<DeliveryZone>;
updateZone(id: string, params: Partial<DeliveryZone>): Promise<DeliveryZone | null>;
deleteZone(id: string): Promise<boolean>;
listZones(params?: { isActive?: boolean; take?: number; skip?: number }): Promise<DeliveryZone[]>;
checkDeliveryAvailability(address: { lat: number; lng: number }): Promise<DeliveryAvailability>;
}Types
type DeliveryStatus = "pending" | "accepted" | "picked-up" | "delivered" | "cancelled";
interface Delivery {
id: string;
orderId: string;
externalDeliveryId?: string;
status: DeliveryStatus;
pickupAddress: Record<string, unknown>;
dropoffAddress: Record<string, unknown>;
estimatedPickupTime?: Date;
estimatedDeliveryTime?: Date;
actualPickupTime?: Date;
actualDeliveryTime?: Date;
fee: number;
tip: number;
trackingUrl?: string;
driverName?: string;
driverPhone?: string;
metadata: Record<string, unknown>;
createdAt: Date;
updatedAt: Date;
}
interface DeliveryZone {
id: string;
name: string;
isActive: boolean;
radius: number;
centerLat: number;
centerLng: number;
minOrderAmount: number;
deliveryFee: number;
estimatedMinutes: number;
createdAt: Date;
updatedAt: Date;
}
interface DeliveryAvailability {
available: boolean;
zone?: DeliveryZone;
estimatedMinutes?: number;
deliveryFee?: number;
}Notes
- Zone availability uses haversine distance calculation (miles) to match customer coordinates against zone radius.
- Deliveries in
deliveredorcancelledstatus cannot be further updated. actualPickupTimeandactualDeliveryTimeare automatically set when status transitions topicked-upordelivered.- Events emitted:
doordash.delivery.created,doordash.delivery.picked-up,doordash.delivery.delivered,doordash.delivery.cancelled,doordash.webhook.received.
