feat(extractors): expand catalog, smoke coverage, and sourcing docs
CI / Linting (Biome) (push) Failing after 40s
CI / Tests (push) Successful in 5m54s
CI / Type Check (adzuna-extractor) (push) Successful in 1m8s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m11s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m8s
CI / Type Check (orchestrator) (push) Successful in 1m23s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m6s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m7s
CI / Documentation (push) Successful in 1m54s

Adds Arc.dev, BC T-Net, Eluta, iCIMS tenants, QAJobsBoard, and SmartRecruiters
manifests with registry/settings/UI wiring; registers full extractor list in
smoke-extractors and documents supplementary board access paths. Aligns Careerjet
v4 with the url query parameter and fixes strict typing in QAJobsBoard.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-15 22:36:23 -04:00
co-authored by Cursor
parent 67508d56ea
commit c840f289e1
50 changed files with 2926 additions and 101 deletions
+7 -7
View File
@@ -8,8 +8,11 @@
* Referer header and `user_ip` / `user_agent` query params. Register your
* server's outbound IP(s) in the Careerjet publisher dashboard.
*
* Env: CAREERJET_AFFID (API key), CAREERJET_REFERER (job-search page URL),
* CAREERJET_USER_IP (must match an allowlisted IP), optional CAREERJET_USER_AGENT.
* Publisher signup: careerjet.com/partners → register allowlisted server IP(s).
* Env: CAREERJET_AFFID (API key for Basic auth username), CAREERJET_REFERER (maps to
* Referer header and the API `url` query param — page where results would appear),
* CAREERJET_USER_IP (public egress IP allowlisted in dashboard; fraud-checked),
* optional CAREERJET_USER_AGENT. Missing user_ip / user_agent yields 403 per docs.
*/
import type {
@@ -117,6 +120,7 @@ async function fetchPage(args: {
url.searchParams.set("page_size", String(args.pageSize));
url.searchParams.set("user_ip", args.userIp);
url.searchParams.set("user_agent", args.userAgent);
url.searchParams.set("url", args.referer);
const response = await fetch(url.toString(), {
headers: {
@@ -213,11 +217,7 @@ export const manifest: ExtractorManifest = {
let collected = 0;
let page = 1;
let totalPages = Number.POSITIVE_INFINITY;
while (
collected < maxJobsPerTerm &&
page <= totalPages &&
page <= 10
) {
while (collected < maxJobsPerTerm && page <= totalPages && page <= 10) {
if (context.shouldCancel?.()) break;
const body = await fetchPage({
apiKey,