← Public packages
@kody/doordash-driver
Request DoorDash Drive (Dasher) deliveries with JWT auth from Developer Portal access keys.
src/settings.ts
84 lines · 2.2 KB · TypeScript/**
* Read or update DoorDash Drive Portal identity (developer_id + key_id).
* These are UUIDs from the access-key JSON — keep the signing_secret in a Kody
* secret (`doorDashSigningSecret`), not here.
*
* ```ts
* import settings from 'kody:@kody/doordash-driver/settings'
* await settings({
* developerId: '……',
* keyId: '……',
* })
* ```
*/
import { packageStorage } from 'kody:runtime'
import {
DEFAULT_SIGNING_SECRET,
DEVELOPER_PORTAL_URL,
SETTINGS_DEVELOPER_ID,
SETTINGS_KEY_ID,
signingSecretSetupUrl,
} from './core.ts'
const UUID_PATTERN =
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i
function trimString(value: unknown) {
return typeof value === 'string' ? value.trim() : ''
}
function requireUuid(value: unknown, label: string) {
const text = trimString(value)
if (!UUID_PATTERN.test(text)) {
throw new Error(
label + ' must be a UUID from the DoorDash Developer Portal access key JSON.',
)
}
return text
}
export type DoorDashSettings = {
developerId: string | null
keyId: string | null
signingSecretSecret: string
signingSecretUrl: string
portal: string
}
export async function readDriveSettings(): Promise<DoorDashSettings> {
const storage = packageStorage()
const developerId = trimString(await storage.get(SETTINGS_DEVELOPER_ID)) || null
const keyId = trimString(await storage.get(SETTINGS_KEY_ID)) || null
return {
developerId,
keyId,
signingSecretSecret: DEFAULT_SIGNING_SECRET,
signingSecretUrl: signingSecretSetupUrl(),
portal: DEVELOPER_PORTAL_URL,
}
}
export default async function settings(
input: { developerId?: string; keyId?: string } = {},
) {
const storage = packageStorage()
const updated: string[] = []
const nextDeveloperId = trimString(input.developerId)
const nextKeyId = trimString(input.keyId)
if (nextDeveloperId) {
await storage.set(SETTINGS_DEVELOPER_ID, requireUuid(nextDeveloperId, 'developerId'))
updated.push('developerId')
}
if (nextKeyId) {
await storage.set(SETTINGS_KEY_ID, requireUuid(nextKeyId, 'keyId'))
updated.push('keyId')
}
const current = await readDriveSettings()
if (updated.length) {
return { updated, settings: current }
}
return current
}