santifer/career-ops · error · Error
breezy: URL must use HTTPS: ${url}
Error message
breezy: URL must use HTTPS: ${url} What it means
The HTTPS-enforcement step of Breezy's SSRF guard. After the URL parses, any scheme other than `https:` is rejected, enforcing transport security to the Breezy tenant.
Source
Thrown at providers/breezy.mjs:26
// approach as the recruitee / bamboohr providers).
//
// Breezy boards expose every published position as a public JSON array at
// `<tenant>.breezy.hr/json` — title, absolute url, location, and a published
// date, all in the list payload at zero token cost (no per-job request, so the
// scanner stays zero-token). Breezy's authenticated REST API (api.breezy.hr) is
// intentionally NOT used; only the public board feed.
const BREEZY_HOST_RE = /^[a-z0-9][a-z0-9-]*\.breezy\.hr$/;
/** @param {string} url */
function assertBreezyUrl(url) {
let parsed;
try {
parsed = new URL(url);
} catch {
throw new Error(`breezy: invalid URL: ${url}`);
}
if (parsed.protocol !== 'https:') throw new Error(`breezy: URL must use HTTPS: ${url}`);
if (!BREEZY_HOST_RE.test(parsed.hostname)) {
throw new Error(`breezy: untrusted hostname "${parsed.hostname}" — must match <tenant>.breezy.hr`);
}
return url;
}
/**
* Resolve the tenant origin (`https://<tenant>.breezy.hr`) from an entry.
* Honours an explicit `api:` URL, else parses `careers_url`.
* @param {import('./_types.js').PortalEntry} entry
* @returns {string | null}
*/
function resolveOrigin(entry) {
const rawApi = typeof entry.api === 'string' ? entry.api : '';
const rawCareers = typeof entry.careers_url === 'string' ? entry.careers_url : '';
const raw = (rawApi || rawCareers).trim();
if (!raw) return null;
let parsed;View on GitHub (pinned to 9b17a8ac97)
Solutions
- Use `https://<tenant>.breezy.hr` for `api:` and `careers_url`.
- Remove http:// overrides from config/environment.
- Terminate TLS on any local test proxy rather than weakening the check.
Example fix
# before - name: Acme api: http://acme.breezy.hr # after - name: Acme api: https://acme.breezy.hr
Defensive patterns
Strategy: validation
Validate before calling
function ensureHttpsField(entry, field) {
if (!entry[field]) return;
if (new URL(entry[field]).protocol !== 'https:') {
throw new Error(`breezy: ${field} must be https: ${entry[field]}`);
}
}
ensureHttpsField(entry, 'api');
ensureHttpsField(entry, 'careers_url'); Prevention
- Normalize provider URLs to https at config load.
- Reject http:// values with a startup error.
- Terminate TLS on local test proxies rather than disabling the check.
When it happens
Trigger: `parsed.protocol !== 'https:'` for an otherwise-parseable URL — typically an `http://<tenant>.breezy.hr` value.
Common situations: A careers_url copied from an insecure source, a local proxy URL left in config, or a tool that downgraded the scheme.
Related errors
- arbeitnow: URL must use HTTPS: ${url}
- ashby: URL must use HTTPS: ${url}
- bamboohr: URL must use HTTPS: ${url}
- breezy: invalid URL: ${url}
- Refusing non-HTTP(S) URL: ${url}
AI-assisted analysis of santifer/career-ops@9b17a8ac97 (2026-08-13).
Data as JSON: /api/errors/385c711ce66f8654.
Report an issue: GitHub.