export type RequireKeys<T extends object, K extends keyof T> = Required<
  Pick<T, K>
> &
  Omit<T, K> extends infer O
  ? { [P in keyof O]: O[P] }
  : never;

export type Prettify<T> = {
  [K in keyof T]: T[K];
} & {};

declare const __brand: unique symbol;
type Brand<B> = { [__brand]: B };
type Branded<T, B> = T & Brand<B>;

export type IdempotencyKey = Branded<string, "IdempotencyKey">;
