```ts
export function windowQuota(limit: number, width: number, calls: (string | number)[][]): string[] {
  if (!Number.isInteger(limit) || limit <= 0) {
    throw new Error("Limit must be a positive integer.");
  }
  if (!Number.isInteger(width) || width <= 0) {
    throw new Error("Width must be a positive integer.");
  }

  const results: string[] = [];
  const frameCalls: Map<number, Map<string, number>> = new Map();

  for (let i = 0; i < calls.length; i++) {
    const [time, name] = calls[i];

    if (!Number.isInteger(time) || time < 0) {
      throw new Error("Time must be a non-negative integer.");
    }
    if (typeof name !== "string" || name.trim() === "") {
      throw new Error("Name must be a non-empty string.");
    }
    if (i > 0 && time < calls[i - 1][0]) {
      throw new Error("Calls must arrive in non-decreasing order of time.");
    }

    const frame = Math.floor(time / width);
    let nameCalls = frameCalls.get(frame);

    if (!nameCalls) {
      nameCalls = new Map();
      frameCalls.set(frame, nameCalls);
    }

    const count = (nameCalls.get(name) || 0) + 1;
    if (count <= limit) {
      results.push("ok");
      nameCalls.set(name, count);
    } else {
      results.push("over");
    }
  }

  return results;
}
```