{"_id":"@core-tecnologias-empresariales/core-jobs","name":"@core-tecnologias-empresariales/core-jobs","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@core-tecnologias-empresariales/core-jobs","version":"0.1.0","description":"Cola de procesos asíncronos con retry, backoff, prioridades, dead-letter e idempotencia para el ecosistema Core Tecnología Empresarial.","license":"UNLICENSED","publishConfig":{"access":"public"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":"./dist/index.js"},"dependencies":{"@core-tecnologias-empresariales/core-utils":"0.1.0"},"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.14.0"},"scripts":{"build":"tsc -p tsconfig.json","test":"tsc -p tsconfig.json && node --test dist"},"_id":"@core-tecnologias-empresariales/core-jobs@0.1.0","_integrity":"sha512-q8cqB+zUFGmtOaQ4m5ihEUDNMCqeZAOmp9Ln/8ru/BTsGR36dnWZNIz9ef+2WEeNxzrobvVzWloxqNVSSQkvSw==","_resolved":"C:\\Users\\Administrador\\AppData\\Local\\Temp\\ae960ba95ce1c9e02e0546db59396538\\core-tecnologias-empresariales-core-jobs-0.1.0.tgz","_from":"file:core-tecnologias-empresariales-core-jobs-0.1.0.tgz","_nodeVersion":"20.20.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-q8cqB+zUFGmtOaQ4m5ihEUDNMCqeZAOmp9Ln/8ru/BTsGR36dnWZNIz9ef+2WEeNxzrobvVzWloxqNVSSQkvSw==","shasum":"0ebade053e1297f7a74fbc4626e8107bf43fd13f","tarball":"https://registry.npmjs.org/@core-tecnologias-empresariales/core-jobs/-/core-jobs-0.1.0.tgz","fileCount":11,"unpackedSize":16929,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDVwCYqUwXMAvnufZrUKg7bGR9XZVL5cAtJD2XNxDkcfgIhAKW9gYlzW0n1XnF1/So8reECed3LARSebA/JKQc11HFV"}]},"_npmUser":{"name":"balamchac","email":"marcelosazop@gmail.com"},"directories":{},"maintainers":[{"name":"balamchac","email":"marcelosazop@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core-jobs_0.1.0_1788053559505_0.8680645978807164"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-30T01:32:39.319Z","0.1.0":"2026-08-30T01:32:39.658Z","modified":"2026-08-30T01:32:39.927Z"},"maintainers":[{"name":"balamchac","email":"marcelosazop@gmail.com"}],"description":"Cola de procesos asíncronos con retry, backoff, prioridades, dead-letter e idempotencia para el ecosistema Core Tecnología Empresarial.","license":"UNLICENSED","readme":"# @core-tecnologias-empresariales/core-jobs\n\nProcesos asíncronos del ecosistema Core Tecnología Empresarial: `Aplicación → Job → Queue → Worker → Resultado`.\n\n## v0.1: cola en memoria, modelo pull\n\nSin Redis/BullMQ/Kafka — regla de no sobreingeniería del `CLAUDE.md` (§28/§131): no incorporar infraestructura distribuida por anticipación. La cola vive en memoria del proceso; el consumidor escribe su propio loop de worker:\n\n```ts\nimport { createQueue } from \"@core-tecnologias-empresariales/core-jobs\";\n\nconst queue = createQueue(); // defaultMaxAttempts: 3, backoff exponencial (techo 30s)\n\nqueue.enqueue(\"send-email\", { to: \"user@example.com\" });\nqueue.enqueue(\"generate-report\", { reportId: \"r1\" }, { priority: 10 });          // se procesa antes\nqueue.enqueue(\"sync-inventory\", { skuId: \"sku-1\" }, { idempotencyKey: \"sync-1\" }); // reintentos no duplican\n\n// loop de worker (el consumidor lo escribe; no hay scheduler interno):\nwhile (true) {\n  const job = queue.claimNext();\n  if (!job) { await sleep(1000); continue; }\n  try {\n    await handlers[job.type](job.payload);\n    queue.complete(job.id);\n  } catch (error) {\n    queue.fail(job.id, error); // reintenta con backoff, o dead-letter si se acabaron los intentos\n  }\n}\n```\n\n## Políticas implementadas\n\n- **Retry + backoff** — `fail()` reintenta con backoff exponencial (configurable) hasta `maxAttempts`, luego mueve a `dead-letter`.\n- **Delay** — `enqueue(type, payload, { delayMs })`, no elegible hasta que pase el tiempo.\n- **Prioridades** — `claimNext()` ordena por `priority` desc, FIFO en empate.\n- **Idempotencia** — `idempotencyKey` reutiliza el job existente (no dead-letter) en vez de duplicar.\n- **Dead-letter** — `getDeadLetterJobs()` para inspección/reproceso manual.\n\n## Para qué NO sirve todavía (`ponytail:` diferido)\n\nBackend persistente/distribuido (Redis, SQS, BullMQ) — la interfaz `Queue` está pensada para que un adapter real la implemente cuando el volumen lo justifique, sin cambiar el código que la consume. Worker pool/concurrencia, cron/scheduled jobs recurrentes tampoco están en v0.1.\n\n## Instalación\n\n```bash\npnpm add @core-tecnologias-empresariales/core-jobs\n```\n\n## Desarrollo\n\n```bash\npnpm build\npnpm test\n```\n","readmeFilename":"README.md","_rev":"1-a1bcae05a031599e71ade0b7e91d443b"}