```ts
export function firstDeadlineMiss(jobs: Array<Record<string, unknown>>): string {
  if (!Array.isArray(jobs)) {
    throw new Error("Invalid input: jobs must be an array");
  }

  const parsedJobs = jobs.map((job, index) => {
    const name = job.name as string;
    const work = job.work as number;
    const due = job.due as number;

    if (typeof name !== "string" || name.trim() === "") {
      throw new Error(`Invalid job at index ${index}: name must be a non-empty string`);
    }
    if (!Number.isInteger(work) || work <= 0) {
      throw new Error(`Invalid job at index ${index}: work must be a positive integer`);
    }
    if (!Number.isInteger(due) || due <= 0) {
      throw new Error(`Invalid job at index ${index}: due must be a positive integer`);
    }

    return { name, work, due };
  });

  const nameSet = new Set<string>();
  for (const job of parsedJobs) {
    if (nameSet.has(job.name)) {
      throw new Error(`Duplicate job name: ${job.name}`);
    }
    nameSet.add(job.name);
  }

  parsedJobs.sort((a, b) => a.due - b.due);

  let currentTime = 0;
  for (const job of parsedJobs) {
    currentTime += job.work;
    if (currentTime > job.due) {
      return job.name;
    }
  }

  return "";
}
```