← Public packages
@kody/doordash-driver
Request DoorDash Drive (Dasher) deliveries with JWT auth from Developer Portal access keys.
src/create-delivery.ts
86 lines · 2.3 KB · TypeScript/**
* Create a DoorDash Drive delivery (`POST /drive/v2/deliveries`).
* Dry-run by default — pass `confirm: true` to submit live.
*
* ```ts
* import { createDelivery } from 'kody:@kody/doordash-driver/create-delivery'
* await createDelivery({
* external_delivery_id: 'order-123',
* pickup_address: '901 Market Street, San Francisco, CA 94103',
* pickup_business_name: 'Store',
* pickup_phone_number: '+16505555555',
* dropoff_address: '901 Market Street, San Francisco, CA 94103',
* dropoff_phone_number: '+16505555555',
* order_value: 1999,
* confirm: true,
* })
* ```
*/
import { doorDashRequest, type DoorDashAuthInput, type DoorDashObject } from './core.ts'
export type CreateDeliveryInput = DoorDashAuthInput & {
/** Full Drive create-delivery JSON body, or flatten common fields at top level. */
body?: DoorDashObject
external_delivery_id?: string
pickup_address?: string
pickup_business_name?: string
pickup_phone_number?: string
pickup_instructions?: string
dropoff_address?: string
dropoff_business_name?: string
dropoff_phone_number?: string
dropoff_instructions?: string
dropoff_contact_given_name?: string
dropoff_contact_family_name?: string
order_value?: number
currency?: string
items?: DoorDashObject[]
tip?: number
dryRun?: boolean
confirm?: boolean
}
function buildBody(input: CreateDeliveryInput): DoorDashObject {
if (input.body && typeof input.body === 'object') {
return { ...input.body }
}
const body: DoorDashObject = {}
const keys = [
'external_delivery_id',
'pickup_address',
'pickup_business_name',
'pickup_phone_number',
'pickup_instructions',
'dropoff_address',
'dropoff_business_name',
'dropoff_phone_number',
'dropoff_instructions',
'dropoff_contact_given_name',
'dropoff_contact_family_name',
'order_value',
'currency',
'items',
'tip',
] as const
for (const key of keys) {
const value = input[key]
if (value !== undefined) body[key] = value
}
return body
}
export async function createDelivery(input: CreateDeliveryInput = {}) {
const body = buildBody(input)
if (!body.external_delivery_id && input.confirm === true && input.dryRun !== true) {
throw new Error('external_delivery_id is required to create a delivery.')
}
return doorDashRequest({
...input,
method: 'POST',
path: '/drive/v2/deliveries',
body,
})
}
export default createDelivery