{"_id":"@aios-medical/bullmq-dashboard-api","_rev":"3-f37f2d24d9e78757aa528225f4df0508","name":"@aios-medical/bullmq-dashboard-api","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@aios-medical/bullmq-dashboard-api","version":"1.0.0","keywords":["bull","bullmq","redis","queue","monitoring","dashboard","aios"],"license":"MIT","_id":"@aios-medical/bullmq-dashboard-api@1.0.0","maintainers":[{"name":"gentritabazi01","email":"gentritabazi01@gmail.com"}],"homepage":"https://github.com/fellahealth/aios-bullmq-dashboard#readme","bugs":{"url":"https://github.com/fellahealth/aios-bullmq-dashboard/issues"},"dist":{"shasum":"07cf3688e0820eec42c7afb16f2dcd6201cdf360","tarball":"https://registry.npmjs.org/@aios-medical/bullmq-dashboard-api/-/bullmq-dashboard-api-1.0.0.tgz","fileCount":141,"integrity":"sha512-YqprB3R4u1CPPAFbvI35rb+Qd0njvRCFHA80s8OIihP1nIKsV/ouBqBBPCyLXcs7Tl7R6ZVHbMrrK08lBnvDfg==","signatures":[{"sig":"MEUCIQD3pB4sM7V8i48jjk+Duc+FWfPWJQopKrFAC/P2tsyy8AIgZfvNc44jxr58ApjGCP4OfEOf6jigSAi4s1LmiDAmbUc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117652},"main":"dist/index.js","types":"./dist/index.d.ts","exports":{".":"./dist/index.js","./dist/*":"./dist/*","./typings/*":"./typings/*.d.ts","./baseAdapter":"./baseAdapter.d.ts","./bullAdapter":"./bullAdapter.js","./bullMQAdapter":"./bullMQAdapter.js","./constants/statuses":"./dist/constants/statuses.js"},"gitHead":"8c19569a50e5698d5d0f540f1e7dea6baa9f69ae","scripts":{"build":"yarn clean && tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"gentritabazi01","email":"gentritabazi01@gmail.com"},"repository":{"url":"git+https://github.com/fellahealth/aios-bullmq-dashboard.git","type":"git","directory":"packages/api"},"_npmVersion":"10.9.7","description":"Framework-agnostic API for the aios bullmq dashboard. Compatible with the @bull-board/api protocol.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"redis-info":"^3.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bull":"^4.16.5","bullmq":"^5.34.0","typescript":"^5.7.2","@types/redis-info":"^3.0.3"},"peerDependencies":{"@aios-medical/bullmq-dashboard-ui":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bullmq-dashboard-api_1.0.0_1779913663509_0.6646566090841168","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aios-medical/bullmq-dashboard-api","version":"1.0.1","keywords":["bull","bullmq","redis","queue","monitoring","dashboard","aios"],"license":"MIT","_id":"@aios-medical/bullmq-dashboard-api@1.0.1","maintainers":[{"name":"gentritabazi01","email":"gentritabazi01@gmail.com"}],"homepage":"https://github.com/fellahealth/aios-bullmq-dashboard#readme","bugs":{"url":"https://github.com/fellahealth/aios-bullmq-dashboard/issues"},"dist":{"shasum":"2f9c4d2a5b75e55ee95e5e87b3d2e455f8946d37","tarball":"https://registry.npmjs.org/@aios-medical/bullmq-dashboard-api/-/bullmq-dashboard-api-1.0.1.tgz","fileCount":142,"integrity":"sha512-I+0y/DFuNNTUth9sBkV81ifeIzUbrpdq43R/eJPvon/YAh/sk9z7diP1d16TNWKUCg5osfRVIZVZ53B+t/LsEQ==","signatures":[{"sig":"MEQCIH54OEo7cMpaP8oEBrjmdXKBKCPBhkA9zHHE2/FizDl6AiBuNw+px3gnajuN2FSO+RQqSN/mWsLHaAdj9QxpS6pnhg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125023},"main":"dist/index.js","types":"./dist/index.d.ts","exports":{".":"./dist/index.js","./dist/*":"./dist/*","./typings/*":"./typings/*.d.ts","./baseAdapter":"./baseAdapter.d.ts","./bullAdapter":"./bullAdapter.js","./bullMQAdapter":"./bullMQAdapter.js","./constants/statuses":"./dist/constants/statuses.js"},"gitHead":"c9fb8a7a89d35446b4af1138642fbf9372b31384","scripts":{"build":"yarn clean && tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"gentritabazi01","email":"gentritabazi01@gmail.com"},"repository":{"url":"git+https://github.com/fellahealth/aios-bullmq-dashboard.git","type":"git","directory":"packages/api"},"_npmVersion":"10.9.7","description":"Framework-agnostic API for the aios bullmq dashboard. Compatible with the @bull-board/api protocol.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"redis-info":"^3.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bull":"^4.16.5","bullmq":"^5.34.0","typescript":"^5.7.2","@types/redis-info":"^3.0.3"},"peerDependencies":{"@aios-medical/bullmq-dashboard-ui":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bullmq-dashboard-api_1.0.1_1780680511340_0.7676443672994944","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aios-medical/bullmq-dashboard-api","version":"1.0.2","description":"Framework-agnostic API for the aios bullmq dashboard.","repository":{"type":"git","url":"git+https://github.com/fellahealth/aios-bullmq-dashboard.git","directory":"packages/api"},"homepage":"https://github.com/fellahealth/aios-bullmq-dashboard#readme","bugs":{"url":"https://github.com/fellahealth/aios-bullmq-dashboard/issues"},"keywords":["bull","bullmq","redis","queue","monitoring","dashboard","aios"],"license":"MIT","main":"dist/index.js","exports":{".":"./dist/index.js","./dist/*":"./dist/*","./typings/*":"./typings/*.d.ts","./bullMQAdapter":"./bullMQAdapter.js","./bullAdapter":"./bullAdapter.js","./baseAdapter":"./baseAdapter.d.ts","./constants/statuses":"./dist/constants/statuses.js"},"scripts":{"build":"yarn clean && tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"dependencies":{"redis-info":"^3.1.0"},"devDependencies":{"@types/redis-info":"^3.0.3","bull":"^4.16.5","bullmq":"^5.34.0","typescript":"^5.7.2"},"peerDependencies":{"@aios-medical/bullmq-dashboard-ui":"^1.0.0"},"publishConfig":{"access":"public"},"_id":"@aios-medical/bullmq-dashboard-api@1.0.2","gitHead":"40a63d98ac4b1e37941704ea49e76fcd575be83a","types":"./dist/index.d.ts","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-CFJ+Gc35BjZcZiig8eg44RvvOy4pukAMVfBocZrN7aalMzV5iEekQyXiRnWRT4d3+J+RTGUFokiF3Nfub5I1aw==","shasum":"ac624c8819c8dfe59b873de25df32ff726f2175f","tarball":"https://registry.npmjs.org/@aios-medical/bullmq-dashboard-api/-/bullmq-dashboard-api-1.0.2.tgz","fileCount":142,"unpackedSize":125079,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGBkyMTq2idMO7F06LtFk13yr3lbVmjcr6v3W82JSe3HAiB+tk1O7wGLiBoTMfXyJxF6VufqyLT6nrBNoVFbplrzKA=="}]},"_npmUser":{"name":"gentritabazi01","email":"gentritabazi01@gmail.com"},"directories":{},"maintainers":[{"name":"gentritabazi01","email":"gentritabazi01@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bullmq-dashboard-api_1.0.2_1780681067404_0.48711925859455696"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-27T20:27:43.386Z","modified":"2026-06-05T17:37:47.677Z","1.0.0":"2026-05-27T20:27:43.671Z","1.0.1":"2026-06-05T17:28:31.503Z","1.0.2":"2026-06-05T17:37:47.535Z"},"bugs":{"url":"https://github.com/fellahealth/aios-bullmq-dashboard/issues"},"license":"MIT","homepage":"https://github.com/fellahealth/aios-bullmq-dashboard#readme","keywords":["bull","bullmq","redis","queue","monitoring","dashboard","aios"],"repository":{"type":"git","url":"git+https://github.com/fellahealth/aios-bullmq-dashboard.git","directory":"packages/api"},"description":"Framework-agnostic API for the aios bullmq dashboard.","maintainers":[{"name":"gentritabazi01","email":"gentritabazi01@gmail.com"}],"readme":"# @aios-medical/bullmq-dashboard-api\n\nFramework-agnostic API for the AIOS BullMQ Dashboard.\n\n<img alt=\"AIOS BullMQ Dashboard overview\" src=\"https://raw.githubusercontent.com/fellahealth/aios-bullmq-dashboard/main/screenshots/overview.png\" />\n\n## Installation\n\n```bash\nnpm install @aios-medical/bullmq-dashboard-api\n# or\nyarn add @aios-medical/bullmq-dashboard-api\n# or\npnpm add @aios-medical/bullmq-dashboard-api\n```\n\n## Overview\n\nThis package provides the core API for monitoring and managing Bull and BullMQ queues. It includes:\n\n- **BaseAdapter**: Abstract base class for creating custom queue adapters\n- **BullAdapter**: Adapter for Bull v4 queues\n- **BullMQAdapter**: Adapter for BullMQ v5 queues\n- **createDashboard**: Function to set up the dashboard with your queues\n\n## Usage\n\n### Basic Setup with BullMQ\n\n```typescript\nimport { createDashboard } from '@aios-medical/bullmq-dashboard-api';\nimport { BullMQAdapter } from '@aios-medical/bullmq-dashboard-api/bullMQAdapter';\nimport { Queue } from 'bullmq';\nimport { ExpressAdapter } from '@aios-medical/bullmq-dashboard-express';\n\nconst queue = new Queue('my-queue', { connection: { host: 'localhost', port: 6379 } });\n\nconst serverAdapter = new ExpressAdapter();\nserverAdapter.setBasePath('/admin/queues');\n\ncreateDashboard({\n  queues: [new BullMQAdapter(queue)],\n  serverAdapter,\n  options: {\n    uiConfig: {\n      title: 'My Queue Dashboard',\n      subtitle: 'Production',\n    },\n  },\n});\n\napp.use('/admin/queues', serverAdapter.getRouter());\n```\n\n### Basic Setup with Bull (Legacy)\n\n```typescript\nimport { createDashboard } from '@aios-medical/bullmq-dashboard-api';\nimport { BullAdapter } from '@aios-medical/bullmq-dashboard-api/bullAdapter';\nimport Queue from 'bull';\nimport { ExpressAdapter } from '@aios-medical/bullmq-dashboard-express';\n\nconst queue = new Queue('my-queue', { redis: { host: 'localhost', port: 6379 } });\n\nconst serverAdapter = new ExpressAdapter();\nserverAdapter.setBasePath('/admin/queues');\n\ncreateDashboard({\n  queues: [new BullAdapter(queue)],\n  serverAdapter,\n  options: {\n    uiConfig: {\n      title: 'My Queue Dashboard',\n    },\n  },\n});\n\napp.use('/admin/queues', serverAdapter.getRouter());\n```\n\n### Queue Adapter Options\n\nBoth `BullAdapter` and `BullMQAdapter` accept an options object:\n\n```typescript\nconst adapter = new BullMQAdapter(queue, {\n  readOnlyMode: false,           // Disable job modifications\n  allowRetries: true,            // Allow retrying failed jobs\n  description: 'Email queue',    // Queue description\n  displayName: 'Emails',         // Display name in UI\n  prefix: 'prod:',               // Queue name prefix\n  delimiter: '-',                // Delimiter for queue names\n  externalJobUrl: (job) => `https://myapp.com/jobs/${job.id}`, // Custom job URL\n});\n```\n\n### Dashboard Options\n\nConfigure the dashboard behavior and appearance:\n\n```typescript\ncreateDashboard({\n  queues: [new BullMQAdapter(queue)],\n  serverAdapter,\n  options: {\n    uiBasePath: '/custom/path',  // Custom path to UI assets\n    uiConfig: {\n      title: 'My Dashboard',\n      subtitle: 'Production',\n      favIcon: {\n        default: 'custom-icon.svg',\n        alternative: 'custom-favicon.png',\n      },\n      environment: {\n        label: 'Production',\n        color: '#ef4444',\n        textColor: '#ffffff',\n      },\n      pollingInterval: {\n        forceInterval: 5000, // Force 5-second polling (overrides user settings)\n      },\n      miscLinks: [\n        { text: 'Documentation', url: 'https://docs.example.com' },\n        { text: 'Support', url: 'https://support.example.com' },\n      ],\n      hideRedisDetails: false, // Hide Redis connection details\n    },\n  },\n});\n```\n\n### Dynamic Queue Management\n\nThe `createDashboard` function returns methods for managing queues dynamically:\n\n```typescript\nconst { setQueues, replaceQueues, addQueue, removeQueue } = createDashboard({\n  queues: [new BullMQAdapter(queue1)],\n  serverAdapter,\n});\n\n// Replace all queues\nreplaceQueues([new BullMQAdapter(queue2), new BullMQAdapter(queue3)]);\n\n// Add a queue dynamically\naddQueue(new BullMQAdapter(queue4));\n\n// Remove a queue dynamically\nremoveQueue('queue-name');\n\n// Set queues (alias for replaceQueues)\nsetQueues([new BullMQAdapter(queue5)]);\n```\n\n### Custom Formatters\n\nAdd custom formatters for job data:\n\n```typescript\nconst adapter = new BullMQAdapter(queue);\n\n// Format job names\nadapter.setFormatter('name', (data) => {\n  return `Custom: ${data.name}`;\n});\n\n// Format job data\nadapter.setFormatter('data', (data) => {\n  return { ...data, timestamp: new Date().toISOString() };\n});\n```\n\n### Visibility Guards\n\nControl queue visibility based on request context:\n\n```typescript\nconst adapter = new BullMQAdapter(queue);\n\nadapter.setVisibilityGuard((request) => {\n  // Only show queue to authenticated admins\n  return request.user?.role === 'admin';\n});\n```\n\n## API Reference\n\n### createDashboard\n\nCreates and configures the dashboard instance.\n\n```typescript\nfunction createDashboard(config: {\n  queues: ReadonlyArray<BaseAdapter>;\n  serverAdapter: IServerAdapter;\n  options?: DashboardOptions;\n}): {\n  setQueues: (queues: ReadonlyArray<BaseAdapter>) => void;\n  replaceQueues: (queues: ReadonlyArray<BaseAdapter>) => void;\n  addQueue: (queue: BaseAdapter) => void;\n  removeQueue: (queueName: string) => void;\n}\n```\n\n### BaseAdapter\n\nAbstract base class for queue adapters. Extend this to create custom adapters.\n\n#### Methods\n\n- `clean(queueStatus: JobCleanStatus, graceTimeMs: number): Promise<void>`\n- `addJob(name: string, data: any, options: QueueJobOptions): Promise<QueueJob>`\n- `getJob(id: string): Promise<QueueJob | undefined | null>`\n- `getJobCounts(): Promise<JobCounts>`\n- `getJobs(jobStatuses: JobStatus[], start?: number, end?: number): Promise<QueueJob[]>`\n- `getJobLogs(id: string): Promise<string[]>`\n- `getName(): string`\n- `getRedisInfo(): Promise<string>`\n- `isPaused(): Promise<boolean>`\n- `pause(): Promise<void>`\n- `resume(): Promise<void>`\n- `empty(): Promise<void>`\n- `obliterate(): Promise<void>`\n- `promoteAll(): Promise<void>`\n- `getStatuses(): Status[]`\n- `getJobStatuses(): JobStatus[]`\n- `getGlobalConcurrency(): Promise<number | null>`\n- `setGlobalConcurrency(concurrency: number): Promise<void>`\n- `setFormatter(field: FormatterField, formatter: (data: any) => any): void`\n- `setVisibilityGuard(guard: (request: DashboardRequest) => Promise<boolean> | boolean): void`\n\n### BullAdapter\n\nAdapter for Bull v4 queues.\n\n```typescript\nconstructor(queue: Queue, options?: Partial<QueueAdapterOptions>)\n```\n\n### BullMQAdapter\n\nAdapter for BullMQ v5 queues.\n\n```typescript\nconstructor(queue: Queue, options?: Partial<QueueAdapterOptions>)\n```\n\n## Status Constants\n\nImport status constants for type-safe job status handling:\n\n```typescript\nimport { STATUSES } from '@aios-medical/bullmq-dashboard-api/constants/statuses';\n\n// STATUSES includes: 'latest', 'active', 'waiting', 'delayed', 'failed', 'completed', etc.\n```\n\n## Peer Dependencies\n\nThis package requires `@aios-medical/bullmq-dashboard-ui` to be installed for the dashboard UI.\n\n## License\n\nMIT\n\n## Related Packages\n\n- [@aios-medical/bullmq-dashboard-ui](https://www.npmjs.com/package/@aios-medical/bullmq-dashboard-ui) - React UI component\n- [@aios-medical/bullmq-dashboard-express](https://www.npmjs.com/package/@aios-medical/bullmq-dashboard-express) - Express.js adapter\n- [@aios-medical/bullmq-dashboard-nestjs](https://www.npmjs.com/package/@aios-medical/bullmq-dashboard-nestjs) - NestJS module","readmeFilename":"README.md"}