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
- Set careers_url (or api) to https://jobs.tkmsgroup.com
- Ensure the scheme is https and the host is exactly jobs.tkmsgroup.com
- Optionally add a tkms: block with subclient/locale overrides if needed (defaults: subclient 'tkms', locale 'en')
- 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
- Pin tkms entries to https://jobs.tkmsgroup.com.
- Run resolveConfig(entry) in a config-lint pass before scanning.
- Remember tkms is single-employer; do not point it at other domains.
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
- softgarden: cannot resolve widget URL for ${entry.name}
- solidjobs: untrusted hostname "${parsed.hostname}" — must be
- successfactors: cannot resolve origin for ${entry.name}
- teamtailor: untrusted hostname "${parsed.hostname}" — must b
- glints: invalid URL: ${url}
AI-assisted analysis of santifer/career-ops@9b17a8ac97 (2026-08-13).
Data as JSON: /api/errors/cade3c5985fa0533.
Report an issue: GitHub.