santifer/career-ops · error · Error

getro: ${entry.name} needs an https careers_url

Error message

getro: ${entry.name} needs an https careers_url

What it means

The getro provider's fetch entry point first resolves the careers URL via resolveCareersUrl(entry), which requires an https careers_url on the entry. If that returns null (missing, non-URL, or non-https), fetch throws this error naming the entry. Getro cannot discover a collection_id without a careers page to scrape.

Source

Thrown at providers/getro.mjs:208

  return parts.join(', ');
}

/** @type {Provider} */
export default {
  id: 'getro',

  // Getro tenants live on arbitrary vanity domains (careers.atomico.com,
  // talent.cherry.vc, ...) with no common suffix to auto-detect against.
  // Still reports a hit when `getro_collection` is set explicitly, so
  // verify-portals has a probe URL for those entries without a live fetch.
  detect(entry) {
    const id = resolveCollectionOverride(entry);
    return id ? { url: `${API_BASE}/${id}/search/jobs` } : null;
  },

  async fetch(entry, ctx) {
    const careersUrl = resolveCareersUrl(entry);
    if (!careersUrl) throw new Error(`getro: ${entry.name} needs an https careers_url`);

    const collectionId = await resolveCollectionId(entry, ctx, careersUrl);
    const apiUrl = `${API_BASE}/${collectionId}/search/jobs`;

    const requestedMaxPages = Number.isInteger(entry.getro_max_pages) && entry.getro_max_pages > 0
      ? Math.min(entry.getro_max_pages, HARD_MAX_PAGES) : DEFAULT_MAX_PAGES;
    const ctxCap = Number.isInteger(ctx?.maxPages) && ctx.maxPages > 0 ? ctx.maxPages : Infinity;
    const maxPages = Math.min(requestedMaxPages, ctxCap);

    const maxAgeDays = Number.isFinite(entry.getro_max_age_days) && entry.getro_max_age_days >= 0
      ? entry.getro_max_age_days : DEFAULT_MAX_AGE_DAYS;
    const cutoffMs = maxAgeDays > 0 ? Date.now() - maxAgeDays * 86_400_000 : 0;

    const out = [];
    let total = Infinity;
    for (let page = 0; page < maxPages && page * HITS_PER_PAGE < total; page++) {
      if (page > 0) await sleep(INTER_PAGE_DELAY_MS, ctx);

View on GitHub (pinned to 1696bec4d0)

Solutions

  1. Add `careers_url: https://...` (an absolute https URL) to the getro entry in portals.yml.
  2. Upgrade any http:// careers_url to https://.
  3. Check YAML indentation so careers_url lands on the entry object the provider actually reads.
  4. Alternatively provide `getro_collection` if you only want the API path — but the careers_url requirement in fetch remains, so set both as applicable.

Example fix

// before (portals entry)
{ name: 'Acme', provider: 'getro' }
// after
{ name: 'Acme', provider: 'getro', careers_url: 'https://acme.getro.com/careers' }
Defensive patterns

Strategy: validation

Validate before calling

const u = entry.careers_url && new URL(entry.careers_url);
if (!u || u.protocol !== 'https:') {
  throw new Error(`getro entry "${entry.name}" requires an absolute https careers_url, got: ${entry.careers_url}`);
}

Type guard

function hasHttpsCareersUrl(entry) {
  if (typeof entry?.careers_url !== 'string') return false;
  try { return new URL(entry.careers_url).protocol === 'https:'; } catch { return false; }
}

Try / catch

try {
  await getroProvider.fetch(entry, ctx);
} catch (e) {
  if (e.message.includes('needs an https careers_url')) {
    console.error(`Config error in entry "${entry.name}": add careers_url: https://... to portals.yml`);
    return null;
  }
  throw e;
}

Prevention

When it happens

Trigger: Calling the getro provider's fetch for an entry that has no careers_url field, an empty string, a relative path, or an http:// (non-https) URL — i.e. any entry for which resolveCareersUrl returns null.

Common situations: portals.yml entry added with only a name; careers_url left blank after a template copy; scheme typed as http; URL accidentally nested under the wrong YAML key so the provider sees undefined.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of santifer/career-ops@1696bec4d0 (2026-09-01). Data as JSON: /api/errors/90c5dcd157a14eec. Report an issue: GitHub.