export async function runServerStartupBeforeListen({
  initializeDatabaseFn,
  ensureLocalUserWhenAuthDisabledFn,
  configureWebPushFn
}) {
  if (typeof initializeDatabaseFn !== 'function') {
    throw new TypeError('initializeDatabaseFn is required');
  }
  if (typeof ensureLocalUserWhenAuthDisabledFn !== 'function') {
    throw new TypeError('ensureLocalUserWhenAuthDisabledFn is required');
  }
  if (typeof configureWebPushFn !== 'function') {
    throw new TypeError('configureWebPushFn is required');
  }

  await initializeDatabaseFn();
  await ensureLocalUserWhenAuthDisabledFn();
  configureWebPushFn();
}

export async function startServerAfterStartup({
  startupFn,
  listenFn
}) {
  if (typeof startupFn !== 'function') {
    throw new TypeError('startupFn is required');
  }
  if (typeof listenFn !== 'function') {
    throw new TypeError('listenFn is required');
  }

  await startupFn();
  return await listenFn();
}