santifer/career-ops · error · Error

tkms: cannot resolve jobs host for ${entry.name}

Error message

tkms: cannot resolve jobs host for ${entry.name}

What it means

resolveConfig requires a valid https URL whose host is exactly 'jobs.tkmsgroup.com'; anything else (unparseable, non-https, or a different host) returns null and fetch throws. TKMS is a single-employer provider hardcoded to that one careers host, so the entry must point at it. An optional tkms: block can override subclient/locale but cannot change the host.

Source

Thrown at providers/tkms.mjs:137

function resolveMaxPages(entry) {
  const v = entry?.max_pages;
  if (Number.isInteger(v) && v > 0) return Math.min(v, MAX_PAGES);
  return MAX_PAGES;
}

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

  detect(entry) {
    const url = entry.api || entry.careers_url || '';
    if (typeof url !== 'string') return null;
    return resolveConfig({ api: url }) ? { url } : null;
  },

  async fetch(entry, ctx) {
    const cfg = resolveConfig(entry);
    if (!cfg) throw new Error(`tkms: cannot resolve jobs host for ${entry.name}`);

    const wait = (ms) => (ctx.sleep ? ctx.sleep(ms) : new Promise((r) => setTimeout(r, ms)));
    const maxPages = resolveMaxPages(entry);
    const jobs = [];
    const seen = new Set();

    for (let page = 0; page < maxPages; page++) {
      if (page > 0) await wait(PAGE_DELAY_MS);
      const json = await ctx.fetchJson(cfg.queryApi, {
        method: 'POST',
        redirect: 'error',
        headers: { 'content-type': 'application/json', accept: 'application/json' },
        body: JSON.stringify({ searchQuery: '', filter: {}, subclient: cfg.subclient, locale: cfg.locale, page }),
      });
      const { nextPage, rows } = parseQuery(json, cfg);
      if (rows.length === 0) break;

      let fresh = 0;

View on GitHub (pinned to 9b17a8ac97)

Solutions

  1. Set careers_url (or api) to https://jobs.tkmsgroup.com
  2. Ensure the scheme is https and the host is exactly jobs.tkmsgroup.com
  3. Optionally add a tkms: block with subclient/locale overrides if needed (defaults: subclient 'tkms', locale 'en')
  4. If the company is not thyssenkrupp Marine Systems, this provider does not apply

Example fix

# before
- name: TKMS
  provider: tkms
  careers_url: https://www.tkms.com
# after
- name: TKMS
  provider: tkms
  careers_url: https://jobs.tkmsgroup.com
Defensive patterns

Strategy: validation

Validate before calling

// Pre-check the TKMS host before fetch.
import { resolveConfig } from './providers/tkms.mjs';
if (!resolveConfig(entry)) {
  console.warn(`${entry.name}: tkms requires careers_url https://jobs.tkmsgroup.com`);
}

Prevention

When it happens

Trigger: entry.api/careers_url is missing, malformed, non-https, or points at a host other than jobs.tkmsgroup.com. A provider: tkms override on an entry with a different URL also hits this.

Common situations: The entry was added with the wrong corporate domain (e.g. tkms.com) rather than the careers app host, or the URL line was omitted.

Related errors


AI-assisted analysis of santifer/career-ops@9b17a8ac97 (2026-08-13). Data as JSON: /api/errors/cade3c5985fa0533. Report an issue: GitHub.