Skip to content
← Public packages

@kody/doordash

Order food on DoorDash as a customer through the consumer MCP used by dd-cli.

src/index.ts

113 lines · 2.5 KB · TypeScript
/**
 * @kody/doordash — DoorDash consumer MCP client (dd-cli compatible).
 */

import adapt from './adapt.ts'
import address from './address.ts'
import callTool from './call-tool.ts'
import cart from './cart.ts'
import findItems from './find-items.ts'
import findNearbyStores from './find-nearby-stores.ts'
import itemDetails from './item-details.ts'
import listTools from './list-tools.ts'
import menu from './menu.ts'
import order from './order.ts'
import paymentMethod from './payment-method.ts'
import promo from './promo.ts'
import search from './search.ts'
import settings from './settings.ts'
import smokeTest from './smoke-test.ts'
import storeDetails from './store-details.ts'

const ACTIONS = [
	'smoke-test',
	'list-tools',
	'call-tool',
	'search',
	'menu',
	'store-details',
	'find-nearby-stores',
	'find-items',
	'item-details',
	'cart',
	'order',
	'address',
	'payment-method',
	'promo',
	'settings',
	'adapt',
] as const

function parseAction(value: unknown, fallback: string) {
	const action = value == null || value === '' ? fallback : String(value)
	if ((ACTIONS as readonly string[]).includes(action)) return action
	throw new Error('Unknown doordash action: ' + action + '. Valid: ' + ACTIONS.join(', '))
}

export default async function doordash(input: Record<string, unknown> = {}) {
	const action = parseAction(input.action, 'smoke-test')
	switch (action) {
		case 'smoke-test':
			return smokeTest(input as any)
		case 'list-tools':
			return listTools(input as any)
		case 'call-tool':
			return callTool(input as any)
		case 'search':
			return search(input as any)
		case 'menu':
			return menu(input as any)
		case 'store-details':
			return storeDetails(input as any)
		case 'find-nearby-stores':
			return findNearbyStores(input as any)
		case 'find-items':
			return findItems(input as any)
		case 'item-details':
			return itemDetails(input as any)
		case 'cart':
			return cart(input as any)
		case 'order':
			return order(input as any)
		case 'address':
			return address(input as any)
		case 'payment-method':
			return paymentMethod(input as any)
		case 'promo':
			return promo(input as any)
		case 'settings':
			return settings(input as any)
		case 'adapt':
			return adapt()
		default:
			throw new Error('Unhandled action: ' + action)
	}
}

export {
	adapt,
	address,
	callTool,
	cart,
	findItems,
	findNearbyStores,
	itemDetails,
	listTools,
	menu,
	order,
	paymentMethod,
	promo,
	search,
	settings,
	smokeTest,
	storeDetails,
}

export {
	TOOLS,
	callMcpTool,
	mcpRequest,
	setupUrls,
	accessTokenSetupUrl,
	CONSUMER_MCP_URL,
} from './mcp.ts'