@quantabit/job-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +110 -0
- package/dist/index.cjs +784 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.esm.js +774 -0
- package/dist/index.esm.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/services/jobApi.js","../src/hooks/useJob.js","../src/i18n/index.js","../src/components/JobMonitor.jsx","../src/index.js"],"sourcesContent":["/**\n * QuantaBit Job SDK - jobApi Service\n * \n * 用于向后端分布式任务中心发送管理指令(如获取队列健康度、触发即时任务、重试失败任务)\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\nexport class JobApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/jobs', config);\n }\n\n // 获取所有队列的状态与统计信息\n async getQueueStats() {\n return this.get('/stats');\n }\n\n // 触发一个后台即时任务\n async triggerJob(jobName, payload = {}) {\n return this.post('/trigger', { jobName, payload });\n }\n\n // 停止指定任务\n async cancelJob(jobId) {\n return this.post(`/cancel/${jobId}`);\n }\n\n // 重试失败的任务\n async retryJob(jobId) {\n return this.post(`/retry/${jobId}`);\n }\n}\n\nexport const jobApi = new JobApiClient();\n","/**\n * QuantaBit Job SDK - useJob Hook\n * \n * 用于获取与管理分布式任务队列状态,支持手动触发、重试任务\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { jobApi } from '../services/jobApi.js';\n\nexport function useJob() {\n const [queues, setQueues] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n\n const fetchStats = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const data = await jobApi.getQueueStats();\n setQueues(data?.queues || []);\n } catch (err) {\n setError(err);\n // 开发阶段兜底模拟数据\n setQueues([\n { name: 'default-queue', active: 3, completed: 420, failed: 2, delayed: 0 },\n { name: 'email-sender', active: 0, completed: 1850, failed: 14, delayed: 2 },\n { name: 'chain-syncer', active: 1, completed: 95402, failed: 1, delayed: 0 }\n ]);\n } finally {\n setLoading(false);\n }\n }, []);\n\n const trigger = useCallback(async (jobName, payload) => {\n setLoading(true);\n try {\n await jobApi.triggerJob(jobName, payload);\n await fetchStats();\n return true;\n } catch (err) {\n setError(err);\n return false;\n } finally {\n setLoading(false);\n }\n }, [fetchStats]);\n\n const retry = useCallback(async (jobId) => {\n setLoading(true);\n try {\n await jobApi.retryJob(jobId);\n await fetchStats();\n return true;\n } catch (err) {\n setError(err);\n return false;\n } finally {\n setLoading(false);\n }\n }, [fetchStats]);\n\n useEffect(() => {\n fetchStats();\n }, [fetchStats]);\n\n return {\n queues,\n loading,\n error,\n refresh: fetchStats,\n trigger,\n retry,\n };\n}\n","/**\n * QuantaBit Job SDK - i18n support\n */\n\nconst messages = {\n en: {\n jobMonitor: 'Distributed Job Queue Monitor',\n queueName: 'Queue Name',\n activeJobs: 'Active',\n completedJobs: 'Completed',\n failedJobs: 'Failed',\n delayedJobs: 'Delayed',\n actions: 'Actions',\n triggerJob: 'Trigger Task',\n retryAll: 'Retry Failed',\n status: 'Status',\n lastUpdated: 'Last Updated',\n },\n zh: {\n jobMonitor: '分布式任务队列监视器',\n queueName: '队列名称',\n activeJobs: '活动中',\n completedJobs: '已完成',\n failedJobs: '已失败',\n delayedJobs: '已延迟',\n actions: '操作',\n triggerJob: '手动触发任务',\n retryAll: '重试失败任务',\n status: '状态',\n lastUpdated: '最近更新',\n },\n ja: {\n jobMonitor: '分散ジョブキューモニター',\n queueName: 'キュー名',\n activeJobs: '実行中',\n completedJobs: '完了済み',\n failedJobs: '失敗',\n delayedJobs: '遅延',\n actions: 'アクション',\n triggerJob: 'タスクをトリガー',\n retryAll: '失敗タスクを再試行',\n status: 'ステータス',\n lastUpdated: '最終更新',\n },\n ko: {\n jobMonitor: '분산 작업 큐 모니터',\n queueName: '큐 이름',\n activeJobs: '활성 작업',\n completedJobs: '완료됨',\n failedJobs: '실패함',\n delayedJobs: '지연됨',\n actions: '작업',\n triggerJob: '작업 트리거',\n retryAll: '실패 작업 재시도',\n status: '상태',\n lastUpdated: '최근 업데이트',\n }\n};\n\nconst SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\nlet currentLanguage = 'en';\n\nexport function setLanguage(lang) {\n if (SUPPORTED_LANGUAGES.includes(lang)) currentLanguage = lang;\n}\n\nexport function getLanguage() {\n return currentLanguage;\n}\n\nexport function t(key) {\n return (messages[currentLanguage] || messages.en)[key] || key;\n}\n\nexport { messages, SUPPORTED_LANGUAGES };\n","/**\n * QuantaBit Job SDK - JobMonitor Component\n * \n * 任务队列监控面板组件,实时展现当前系统的分布式任务引擎吞吐状况,并允许运维触发或重试任务。\n */\n\nimport React, { useState } from 'react';\nimport { t } from '../i18n';\nimport { useJob } from '../hooks/useJob';\n\nexport function JobMonitor({ className = '' }) {\n const { queues, loading, refresh, trigger, retry } = useJob();\n const [showTriggerModal, setShowTriggerModal] = useState(false);\n const [targetQueue, setTargetQueue] = useState('');\n const [jobPayload, setJobPayload] = useState('{}');\n\n const handleTriggerSubmit = async (e) => {\n e.preventDefault();\n let payloadObj = {};\n try {\n payloadObj = JSON.parse(jobPayload);\n } catch (_) {\n // 保持空对象\n }\n await trigger(targetQueue, payloadObj);\n setShowTriggerModal(false);\n };\n\n return (\n <div className={`qbit-job-monitor ${className}`}>\n <div className=\"qbit-monitor-header\">\n <h4>{t('jobMonitor')}</h4>\n <div className=\"qbit-monitor-actions\">\n <button className=\"qbit-btn-refresh\" onClick={refresh} disabled={loading}>\n {loading ? '...' : 'Refresh'}\n </button>\n </div>\n </div>\n\n <div className=\"qbit-monitor-body\">\n <table className=\"qbit-monitor-table\">\n <thead>\n <tr>\n <th>{t('queueName')}</th>\n <th>{t('activeJobs')}</th>\n <th>{t('completedJobs')}</th>\n <th>{t('failedJobs')}</th>\n <th>{t('delayedJobs')}</th>\n <th>{t('actions')}</th>\n </tr>\n </thead>\n <tbody>\n {queues.map((q) => (\n <tr key={q.name}>\n <td className=\"qbit-queue-name\">{q.name}</td>\n <td><span className=\"qbit-badge active\">{q.active}</span></td>\n <td><span className=\"qbit-badge completed\">{q.completed}</span></td>\n <td><span className=\"qbit-badge failed\">{q.failed}</span></td>\n <td><span className=\"qbit-badge delayed\">{q.delayed}</span></td>\n <td>\n <div className=\"qbit-row-actions\">\n <button \n className=\"qbit-btn-trigger\" \n onClick={() => {\n setTargetQueue(q.name);\n setShowTriggerModal(true);\n }}\n >\n {t('triggerJob')}\n </button>\n {q.failed > 0 && (\n <button \n className=\"qbit-btn-retry\" \n onClick={() => retry(q.name)}\n >\n {t('retryAll')}\n </button>\n )}\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {showTriggerModal && (\n <div className=\"qbit-monitor-modal-backdrop\">\n <div className=\"qbit-monitor-modal\">\n <div className=\"qbit-modal-header\">\n <h5>Trigger Job on [{targetQueue}]</h5>\n <button className=\"close\" onClick={() => setShowTriggerModal(false)}>×</button>\n </div>\n <form onSubmit={handleTriggerSubmit}>\n <div className=\"qbit-form-group\">\n <label>Job Payload (JSON)</label>\n <textarea \n value={jobPayload} \n onChange={(e) => setJobPayload(e.target.value)}\n rows={4}\n placeholder='{\"userId\": 101, \"action\": \"sync\"}'\n />\n </div>\n <div className=\"qbit-modal-footer\">\n <button type=\"button\" className=\"btn-cancel\" onClick={() => setShowTriggerModal(false)}>\n Cancel\n </button>\n <button type=\"submit\" className=\"btn-submit\">\n Submit Task\n </button>\n </div>\n </form>\n </div>\n </div>\n )}\n\n <style>{`\n .qbit-job-monitor {\n background: #0f172a;\n color: #f8fafc;\n border-radius: 12px;\n border: 1px solid #1e293b;\n font-family: ui-sans-serif, system-ui, -apple-system, sans-serif;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n width: 100%;\n }\n .qbit-monitor-header {\n background: #1e293b;\n padding: 16px 20px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-bottom: 1px solid #334155;\n }\n .qbit-monitor-header h4 {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: #f1f5f9;\n }\n .qbit-btn-refresh {\n background: transparent;\n border: 1px solid #475569;\n color: #cbd5e1;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n cursor: pointer;\n transition: background 0.2s;\n }\n .qbit-btn-refresh:hover {\n background: #334155;\n }\n .qbit-monitor-body {\n padding: 20px;\n overflow-x: auto;\n }\n .qbit-monitor-table {\n width: 100%;\n border-collapse: collapse;\n text-align: left;\n font-size: 13px;\n }\n .qbit-monitor-table th {\n color: #94a3b8;\n font-weight: 500;\n padding: 10px 12px;\n border-bottom: 1px solid #334155;\n text-transform: uppercase;\n font-size: 11px;\n }\n .qbit-monitor-table td {\n padding: 12px;\n border-bottom: 1px solid #33415540;\n color: #cbd5e1;\n }\n .qbit-queue-name {\n font-family: monospace;\n color: #38bdf8;\n font-weight: bold;\n }\n .qbit-badge {\n display: inline-block;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: bold;\n font-size: 11px;\n }\n .qbit-badge.active {\n background: rgba(59, 130, 246, 0.15);\n color: #60a5fa;\n }\n .qbit-badge.completed {\n background: rgba(16, 185, 129, 0.15);\n color: #34d399;\n }\n .qbit-badge.failed {\n background: rgba(239, 68, 68, 0.15);\n color: #f87171;\n }\n .qbit-badge.delayed {\n background: rgba(245, 158, 11, 0.15);\n color: #fbbf24;\n }\n .qbit-row-actions {\n display: flex;\n gap: 8px;\n }\n .qbit-btn-trigger, .qbit-btn-retry {\n background: #1e293b;\n border: 1px solid #334155;\n color: #94a3b8;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n cursor: pointer;\n transition: all 0.2s;\n }\n .qbit-btn-trigger:hover {\n background: #3b82f620;\n color: #60a5fa;\n border-color: #3b82f640;\n }\n .qbit-btn-retry:hover {\n background: #ef444420;\n color: #f87171;\n border-color: #ef444440;\n }\n .qbit-monitor-modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(15, 23, 42, 0.7);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1001;\n }\n .qbit-monitor-modal {\n background: #1e293b;\n color: #f8fafc;\n border-radius: 12px;\n border: 1px solid #334155;\n width: 90%;\n max-width: 440px;\n padding: 20px;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n }\n .qbit-modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n }\n .qbit-modal-header h5 {\n margin: 0;\n font-size: 14px;\n color: #f1f5f9;\n }\n .qbit-modal-header .close {\n background: transparent;\n border: none;\n color: #94a3b8;\n font-size: 20px;\n cursor: pointer;\n }\n .qbit-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-bottom: 16px;\n }\n .qbit-form-group label {\n font-size: 11px;\n color: #94a3b8;\n text-transform: uppercase;\n }\n .qbit-form-group textarea {\n background: #0f172a;\n border: 1px solid #334155;\n border-radius: 6px;\n padding: 8px;\n color: #f8fafc;\n font-family: monospace;\n outline: none;\n font-size: 12px;\n }\n .qbit-form-group textarea:focus {\n border-color: #3b82f6;\n }\n .qbit-modal-footer {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n }\n .btn-cancel, .btn-submit {\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 12px;\n cursor: pointer;\n border: none;\n font-weight: 500;\n }\n .btn-cancel {\n background: transparent;\n color: #cbd5e1;\n border: 1px solid #475569;\n }\n .btn-cancel:hover {\n background: #334155;\n }\n .btn-submit {\n background: #3b82f6;\n color: white;\n }\n .btn-submit:hover {\n background: #2563eb;\n }\n `}</style>\n </div>\n );\n}\n","'use strict';\n\nvar uuid = require('uuid');\nvar bullmq = require('bullmq');\nvar amqp = require('amqplib');\n\nclass BaseAdapter {\n constructor(config = {}) {\n this.config = config;\n }\n async connect() {\n throw new Error('connect() must be implemented');\n }\n async disconnect() {\n throw new Error('disconnect() must be implemented');\n }\n async publish(queueName, payload, options = {}) {\n throw new Error('publish() must be implemented');\n }\n async consume(queueName, callback, options = {}) {\n throw new Error('consume() must be implemented');\n }\n}\n\nclass RedisAdapter extends BaseAdapter {\n constructor(config = {}) {\n super(config);\n // BullMQ / ioredis connection\n if (!this.config.connection) {\n throw new Error('[RedisAdapter] config.connection is required (e.g. { host, port })');\n }\n this.connection = this.config.connection;\n this.queues = new Map();\n this.workers = new Map();\n }\n async connect() {\n // BullMQ automatically establishes connection upon queue creation\n console.log('[RedisAdapter] Initialized with redis config:', this.connection);\n }\n async disconnect() {\n for (const worker of this.workers.values()) {\n await worker.close();\n }\n for (const queue of this.queues.values()) {\n await queue.close();\n }\n this.workers.clear();\n this.queues.clear();\n console.log('[RedisAdapter] Disonnected gracefully');\n }\n _getQueue(queueName) {\n if (!this.queues.has(queueName)) {\n const q = new bullmq.Queue(queueName, {\n connection: this.connection\n });\n this.queues.set(queueName, q);\n }\n return this.queues.get(queueName);\n }\n async publish(queueName, payload, options = {}) {\n const q = this._getQueue(queueName);\n const jobName = options.jobName || 'defaultJob';\n\n // Transform standardize options into BullMQ options\n const bullOptions = {\n jobId: options.fixedId,\n // specific ID for deduplication \n delay: options.delay,\n // In ms\n attempts: options.retries || 3,\n backoff: options.backoff || {\n type: 'exponential',\n delay: 1000\n },\n ...options.adapterOptions\n };\n const job = await q.add(jobName, payload, bullOptions);\n return job.id;\n }\n async consume(queueName, callback, options = {}) {\n if (this.workers.has(queueName)) {\n console.warn(`[RedisAdapter] Worker for queue [${queueName}] already exists.`);\n return;\n }\n\n // Bullmq worker implementation\n const worker = new bullmq.Worker(queueName, async job => {\n // Execute standardized callback\n await callback(job.data, job);\n }, {\n connection: this.connection,\n concurrency: options.concurrency || 1,\n ...options.adapterOptions\n });\n worker.on('failed', (job, err) => {\n console.error(`[RedisAdapter] Job ${job?.id} failed in queue [${queueName}]:`, err.message);\n });\n this.workers.set(queueName, worker);\n console.log(`[RedisAdapter] Worker for queue [${queueName}] started (Concurrency: ${options.concurrency || 1})`);\n }\n}\n\nclass RabbitMQAdapter extends BaseAdapter {\n constructor(config = {}) {\n super(config);\n if (!this.config.url) {\n throw new Error('[RabbitMQAdapter] config.url is required (e.g. amqp://host)');\n }\n this.url = this.config.url;\n this.connection = null;\n this.channelPool = new Map(); // queueName -> channel\n }\n async connect() {\n if (!this.connection) {\n try {\n this.connection = await amqp.connect(this.url);\n console.log('[RabbitMQAdapter] Connected to amqp broker:', this.url);\n\n // Auto retry logic on unexpected close\n this.connection.on('error', err => {\n console.error('[RabbitMQAdapter] Connection error:', err.message);\n });\n this.connection.on('close', () => {\n console.warn('[RabbitMQAdapter] Connection closed!');\n this.connection = null;\n // You could implement auto-reconnect backoffs here\n });\n } catch (err) {\n console.error('[RabbitMQAdapter] Initial amqp connect failed:', err.message);\n throw err;\n }\n }\n }\n async disconnect() {\n for (const [queueName, channel] of this.channelPool.entries()) {\n await channel.close();\n }\n this.channelPool.clear();\n if (this.connection) {\n await this.connection.close();\n this.connection = null;\n }\n console.log('[RabbitMQAdapter] Disonnected gracefully');\n }\n async _getChannel() {\n if (!this.connection) await this.connect();\n return await this.connection.createChannel();\n }\n async publish(queueName, payload, options = {}) {\n const channel = await this._getChannel();\n await channel.assertQueue(queueName, {\n durable: true\n });\n\n // Support specific TTL / delay via rabbitmq x-message-ttl \n // Usually requires delayed-message-exchange plugin for robust delay,\n // this keeps it simple for now standard durable push\n const headers = options.headers || {};\n const sent = channel.sendToQueue(queueName, Buffer.from(JSON.stringify(payload)), {\n persistent: true,\n headers,\n ...options.adapterOptions\n });\n await channel.close();\n return sent ? 'sent' : 'failed';\n }\n async consume(queueName, callback, options = {}) {\n if (this.channelPool.has(queueName)) {\n console.warn(`[RabbitMQAdapter] Worker for queue [${queueName}] already attached.`);\n return;\n }\n const channel = await this._getChannel();\n await channel.assertQueue(queueName, {\n durable: true\n });\n if (options.concurrency) {\n await channel.prefetch(options.concurrency);\n }\n channel.consume(queueName, async msg => {\n if (msg !== null) {\n try {\n const payload = JSON.parse(msg.content.toString());\n await callback(payload, msg);\n channel.ack(msg); // ack securely\n } catch (err) {\n console.error(`[RabbitMQAdapter] Error processing standard message:`, err.message);\n // if re-queue flag isn't disabled, attempt multiple retries manually or drop it to dead-letter exchange\n const requeue = options.requeue !== false;\n channel.nack(msg, false, requeue);\n }\n }\n }, options.adapterOptions);\n this.channelPool.set(queueName, channel);\n console.log(`[RabbitMQAdapter] AMQP channel consuming [${queueName}] (Concurrency: ${options.concurrency || 1})`);\n }\n}\n\n/**\n * Universal Job Queue SDK designed for scalable infra.\n */\nclass JobQueue {\n /**\n * Initialize SDK with desired engine config.\n * @param {Object} options\n * @param {'redis' | 'rabbitmq'} [options.engine='redis'] - Core transport choice.\n * @param {Object} [options.config] - Driver-specific options block i.e., config.url or config.connection.\n */\n constructor(options = {}) {\n this.engine = options.engine || 'redis';\n this.config = options.config || {};\n\n // Plug matching adapter to uniform base footprint\n if (this.engine === 'redis') {\n this.adapter = new RedisAdapter(this.config);\n } else if (this.engine === 'rabbitmq') {\n this.adapter = new RabbitMQAdapter(this.config);\n } else {\n throw new Error(`Unsupported engine: ${this.engine}. Use 'redis' or 'rabbitmq'`);\n }\n }\n\n /**\n * Bind connections actively to infrastructure backing service.\n */\n async connect() {\n await this.adapter.connect();\n }\n\n /**\n * Drain queue streams and kill connections cleanly.\n */\n async disconnect() {\n await this.adapter.disconnect();\n }\n\n /**\n * Push unified shape job payload.\n * @param {string} queueName Queue tag.\n * @param {Object} customData Business domain object to be acted on.\n * @param {Object} options Standard SDK options mapping features consistently across engines.\n * @returns {Promise<string>} Trackable job/execution ID.\n */\n async publishTask(queueName, customData, options = {}) {\n const formattedTask = {\n taskId: uuid.v4(),\n timestamp: Date.now(),\n source: options.source || 'qbit-backend-sdk',\n data: customData || {},\n ...options.metadata\n };\n const executionId = await this.adapter.publish(queueName, formattedTask, options);\n console.log(`[JobQueue][${this.engine}] published task [${formattedTask.taskId}] to [${queueName}]`);\n return executionId || formattedTask.taskId;\n }\n\n /**\n * Subscribe uniform pipeline logic against generic engine transport loop.\n * \n * @param {string} queueName Event path.\n * @param {Function} handler The processor async (data, context) => {} -> context exposes tracing.\n * @param {Object} options Extra pipeline overrides matching to underlying plugins mapping cleanly.\n */\n async consumeTask(queueName, handler, options = {}) {\n console.log(`[JobQueue][${this.engine}] Init consuming [${queueName}] with driver mapping.`);\n await this.adapter.consume(queueName, async (rawPayload, rawJob) => {\n // Decode meta contexts & execute the business fn\n const bizData = rawPayload.data || rawPayload;\n const pipelineContext = {\n taskId: rawPayload.taskId,\n source: rawPayload.source,\n timestamp: rawPayload.timestamp,\n metadata: rawPayload,\n // Access extra decorated tags\n raw: rawJob // Break glass back to amqplib/bull node for rare deep interactions\n };\n await handler(bizData, pipelineContext);\n }, options);\n }\n}\n\nexports.BaseAdapter = BaseAdapter;\nexports.JobQueue = JobQueue;\nexports.RabbitMQAdapter = RabbitMQAdapter;\nexports.RedisAdapter = RedisAdapter;\n\n// API Service, Hooks, Component and i18n exports\nexport { jobApi, JobApiClient } from './services/jobApi.js';\nexport { useJob } from './hooks/useJob.js';\nexport { JobMonitor } from './components/JobMonitor.jsx';\nexport { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t } from './i18n/index.js';\n//# sourceMappingURL=index.js.map\n"],"names":["JobApiClient","BaseApiClient","constructor","config","getQueueStats","get","triggerJob","jobName","payload","post","cancelJob","jobId","retryJob","jobApi","useJob","queues","setQueues","useState","loading","setLoading","error","setError","fetchStats","useCallback","data","err","name","active","completed","failed","delayed","trigger","retry","useEffect","refresh","messages","en","jobMonitor","queueName","activeJobs","completedJobs","failedJobs","delayedJobs","actions","retryAll","status","lastUpdated","zh","ja","ko","SUPPORTED_LANGUAGES","currentLanguage","setLanguage","lang","includes","getLanguage","t","key","JobMonitor","className","showTriggerModal","setShowTriggerModal","targetQueue","setTargetQueue","jobPayload","setJobPayload","handleTriggerSubmit","e","preventDefault","payloadObj","JSON","parse","_","React","createElement","onClick","disabled","map","q","onSubmit","value","onChange","target","rows","placeholder","type","BaseAdapter","connect","Error","disconnect","publish","options","consume","callback"],"mappings":"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e,MAAM,CAACF,KAAK,CAAE;AAC/CG,IAAAA,IAAI,EAAE,CAAE;AACRC,IAAAA,WAAW,EAAC;AAAmC,GAChD,CACE,CAAC,eACNX,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKf,IAAAA,SAAS,EAAC;GAAmB,eAChCc,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQW,IAAAA,IAAI,EAAC,QAAQ;AAAC1B,IAAAA,SAAS,EAAC,YAAY;AAACgB,IAAAA,OAAO,EAAEA,MAAMd,mBAAmB,CAAC,KAAK;AAAE,GAAA,EAAC,QAEhF,CAAC,eACTY,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQW,IAAAA,IAAI,EAAC,QAAQ;AAAC1B,IAAAA,SAAS,EAAC;GAAY,EAAC,aAErC,CACL,CACD,CACH,CACF,CACN,eAEDc,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAA,CAAe,CACN,CAAC;AAEV;;;;;ACrUO,MAAMY,WAAW,CAAC;AACvBpF,EAAAA,WAAWA,CAACC,MAAM,GAAG,EAAE,EAAE;IACvB,IAAI,CAACA,MAAM,GAAGA,MAAM;AACtB,EAAA;EAEA,MAAMoF,OAAOA,GAAG;AACd,IAAA,MAAM,IAAIC,KAAK,CAAC,+BAA+B,CAAC;AAClD,EAAA;EAEA,MAAMC,UAAUA,GAAG;AACjB,IAAA,MAAM,IAAID,KAAK,CAAC,kCAAkC,CAAC;AACrD,EAAA;EAEA,MAAME,OAAOA,CAACpD,SAAS,EAAE9B,OAAO,EAAEmF,OAAO,GAAG,EAAE,EAAE;AAC9C,IAAA,MAAM,IAAIH,KAAK,CAAC,+BAA+B,CAAC;AAClD,EAAA;EAEA,MAAMI,OAAOA,CAACtD,SAAS,EAAEuD,QAAQ,EAAEF,OAAO,GAAG,EAAE,EAAE;AAC/C,IAAA,MAAM,IAAIH,KAAK,CAAC,+BAA+B,CAAC;AAClD,EAAA;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@quantabit/job-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "QuantaBit Job Queue SDK - Universal message queue wrapper with Redis/RabbitMQ multi-engine support",
|
|
6
|
+
"main": "dist/index.cjs",
|
|
7
|
+
"module": "dist/index.esm.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.esm.js",
|
|
12
|
+
"require": "./dist/index.cjs"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"test": "jest --passWithNoTests",
|
|
22
|
+
"clean": "rm -rf dist",
|
|
23
|
+
"build": "rollup -c",
|
|
24
|
+
"prepublishOnly": "npm run build"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"quantabit",
|
|
28
|
+
"job",
|
|
29
|
+
"sdk"
|
|
30
|
+
],
|
|
31
|
+
"author": "QuantaBit Team",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "https://github.com/quantabit-chain/qbit-sdk.git",
|
|
36
|
+
"directory": "packages/job-sdk"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/quantabit-chain/qbit-sdk/issues"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/quantabit-chain/qbit-sdk/tree/main/packages/job-sdk#readme",
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"amqplib": "^0.10.3",
|
|
44
|
+
"bullmq": "^4.12.0",
|
|
45
|
+
"ioredis": "^5.3.2",
|
|
46
|
+
"uuid": "^9.0.1",
|
|
47
|
+
"@quantabit/sdk-config": "^1.0.6"
|
|
48
|
+
},
|
|
49
|
+
"publishConfig": {
|
|
50
|
+
"access": "public",
|
|
51
|
+
"registry": "https://registry.npmjs.org"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@rollup/plugin-commonjs": "^25.0.0",
|
|
55
|
+
"@rollup/plugin-node-resolve": "^15.0.0",
|
|
56
|
+
"@babel/core": "^7.23.0",
|
|
57
|
+
"@babel/preset-react": "^7.23.0",
|
|
58
|
+
"@rollup/plugin-babel": "^6.0.0",
|
|
59
|
+
"rollup": "^4.0.0",
|
|
60
|
+
"rollup-plugin-postcss": "^4.0.0"
|
|
61
|
+
},
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": ">=18.0.0"
|
|
64
|
+
},
|
|
65
|
+
"sideEffects": false,
|
|
66
|
+
"qbit": {
|
|
67
|
+
"privacy": {
|
|
68
|
+
"level": "functional",
|
|
69
|
+
"dataCollection": "Feature-related data for personalization. Requires user consent.",
|
|
70
|
+
"gdprCompliant": true,
|
|
71
|
+
"ccpaCompliant": true
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|