@glidemq/hapi
Advanced tools
+6
-0
| # Changelog | ||
| ## 0.4.0 | ||
| - Expand the Hapi routes surface to track glide-mq 0.15.0: queue-wide events SSE, per-job lifecycle SSE, `jobs/wait`, workers, metrics, scheduler CRUD, usage summary, broadcast publish/SSE, DLQ inspection/replay, suspended-job inspection, revoke, and queue global rate-limit management. | ||
| - Add flow HTTP routes for `POST /flows`, `GET /flows/:id`, `GET /flows/:id/tree`, and `DELETE /flows/:id`. | ||
| - Require glide-mq >=0.15.0 for the new flow and proxy-parity endpoints. | ||
| ## 0.3.0 | ||
@@ -4,0 +10,0 @@ |
+2
-2
@@ -1,4 +0,4 @@ | ||
| import type { Server } from '@hapi/hapi'; | ||
| import type { GlideMQRoutesOptions, QueueRegistry } from './types'; | ||
| import type { Server } from "@hapi/hapi"; | ||
| import type { GlideMQRoutesOptions, QueueRegistry } from "./types"; | ||
| export declare function registerRoutes(server: Server, _registry: QueueRegistry, opts: GlideMQRoutesOptions): void; | ||
| //# sourceMappingURL=routes.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAA4B,MAAM,YAAY,CAAC;AAGnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAwBnE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAklBzG"} | ||
| {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAA4B,MAAM,YAAY,CAAC;AAGnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA4VnE,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,oBAAoB,GACzB,IAAI,CAg2CN"} |
+810
-78
@@ -16,5 +16,190 @@ "use strict"; | ||
| }; | ||
| const SSE_BLOCK_MS = 5_000; | ||
| const SSE_HEARTBEAT_MS = 15_000; | ||
| function asFlowQueue(queue) { | ||
| return queue; | ||
| } | ||
| function asFlowJob(job) { | ||
| return job; | ||
| } | ||
| function parseCsvQuery(raw) { | ||
| if (!raw) | ||
| return undefined; | ||
| const values = raw | ||
| .split(",") | ||
| .map((value) => value.trim()) | ||
| .filter(Boolean); | ||
| return values.length > 0 ? values : undefined; | ||
| } | ||
| function parseIntegerQuery(raw, name, opts) { | ||
| if (raw == null) | ||
| return undefined; | ||
| if (!/^-?\d+$/.test(raw)) { | ||
| throw boom_1.default.badRequest(`${name} must be an integer`); | ||
| } | ||
| const value = Number(raw); | ||
| if (!Number.isSafeInteger(value)) { | ||
| throw boom_1.default.badRequest(`${name} must be an integer`); | ||
| } | ||
| if (opts?.min != null && value < opts.min) { | ||
| throw boom_1.default.badRequest(`${name} must be >= ${opts.min}`); | ||
| } | ||
| return value; | ||
| } | ||
| function writeSSEChunk(stream, event, data, id) { | ||
| try { | ||
| if (stream.destroyed || stream.writableEnded) | ||
| return false; | ||
| if (id != null) | ||
| stream.write(`id: ${id}\n`); | ||
| stream.write(`event: ${event}\n`); | ||
| stream.write(`data: ${data}\n\n`); | ||
| return true; | ||
| } | ||
| catch { | ||
| return false; | ||
| } | ||
| } | ||
| function flowMetaKey(flowId, prefix) { | ||
| return `${prefix ?? "glide"}:flow:${flowId}:meta`; | ||
| } | ||
| function flowJobsKey(flowId, prefix) { | ||
| return `${prefix ?? "glide"}:flow:${flowId}:jobs`; | ||
| } | ||
| function flowRootsKey(flowId, prefix) { | ||
| return `${prefix ?? "glide"}:flow:${flowId}:roots`; | ||
| } | ||
| function encodeFlowJobRef(ref) { | ||
| return `${ref.queueName}:${ref.jobId}`; | ||
| } | ||
| function decodeFlowJobRef(raw) { | ||
| const separator = raw.indexOf(":"); | ||
| if (separator <= 0 || separator === raw.length - 1) | ||
| return null; | ||
| return { | ||
| queueName: raw.slice(0, separator), | ||
| jobId: raw.slice(separator + 1), | ||
| }; | ||
| } | ||
| function hashEntriesToRecord(hashData) { | ||
| if (!hashData) | ||
| return null; | ||
| if (!Array.isArray(hashData)) { | ||
| const entries = Object.entries(hashData); | ||
| if (entries.length === 0) | ||
| return null; | ||
| const record = Object.create(null); | ||
| for (const [key, value] of entries) { | ||
| record[key] = String(value); | ||
| } | ||
| return record; | ||
| } | ||
| if (hashData.length === 0) | ||
| return null; | ||
| const record = Object.create(null); | ||
| for (const entry of hashData) { | ||
| const key = entry?.field ?? entry?.key; | ||
| if (key == null) | ||
| continue; | ||
| record[String(key)] = String(entry.value); | ||
| } | ||
| return Object.keys(record).length > 0 ? record : null; | ||
| } | ||
| function collectFlowQueueNames(flow, acc = new Set()) { | ||
| acc.add(flow.queueName); | ||
| for (const child of flow.children ?? []) { | ||
| collectFlowQueueNames(child, acc); | ||
| } | ||
| return acc; | ||
| } | ||
| function collectDagQueueNames(dag) { | ||
| const names = new Set(); | ||
| for (const node of dag.nodes) { | ||
| names.add(node.queueName); | ||
| } | ||
| return names; | ||
| } | ||
| function buildFlowTreeNodes(flowId, roots, nodes) { | ||
| const nodeMap = new Map(); | ||
| const childrenByParent = new Map(); | ||
| for (const node of nodes) { | ||
| nodeMap.set(encodeFlowJobRef({ jobId: node.id, queueName: node.queueName }), node); | ||
| const parentRefs = []; | ||
| if (node.parentIds && | ||
| node.parentQueues && | ||
| node.parentIds.length === node.parentQueues.length) { | ||
| for (let i = 0; i < node.parentIds.length; i++) { | ||
| parentRefs.push({ | ||
| jobId: node.parentIds[i], | ||
| queueName: node.parentQueues[i], | ||
| }); | ||
| } | ||
| } | ||
| else if (node.parentId) { | ||
| parentRefs.push({ jobId: node.parentId, queueName: node.queueName }); | ||
| } | ||
| for (const parentRef of parentRefs) { | ||
| const key = encodeFlowJobRef(parentRef); | ||
| const siblings = childrenByParent.get(key); | ||
| if (siblings) | ||
| siblings.push(node); | ||
| else | ||
| childrenByParent.set(key, [node]); | ||
| } | ||
| } | ||
| function visit(ref, path) { | ||
| const key = encodeFlowJobRef(ref); | ||
| const node = nodeMap.get(key); | ||
| if (!node) { | ||
| return { | ||
| attemptsMade: 0, | ||
| children: [], | ||
| data: null, | ||
| failedReason: undefined, | ||
| finishedOn: undefined, | ||
| flowId, | ||
| id: ref.jobId, | ||
| name: "", | ||
| opts: {}, | ||
| parentId: undefined, | ||
| parentIds: undefined, | ||
| parentQueue: undefined, | ||
| parentQueues: undefined, | ||
| processedOn: undefined, | ||
| progress: 0, | ||
| queueName: ref.queueName, | ||
| returnvalue: undefined, | ||
| state: "missing", | ||
| timestamp: 0, | ||
| }; | ||
| } | ||
| const children = (childrenByParent.get(key) ?? []) | ||
| .slice() | ||
| .sort((a, b) => a.timestamp - b.timestamp || | ||
| a.queueName.localeCompare(b.queueName) || | ||
| a.id.localeCompare(b.id)) | ||
| .map((child) => { | ||
| const childKey = encodeFlowJobRef({ | ||
| jobId: child.id, | ||
| queueName: child.queueName, | ||
| }); | ||
| if (path.has(childKey)) { | ||
| return { ...child, children: [] }; | ||
| } | ||
| const nextPath = new Set(path); | ||
| nextPath.add(childKey); | ||
| return visit({ jobId: child.id, queueName: child.queueName }, nextPath); | ||
| }); | ||
| return { ...node, children }; | ||
| } | ||
| return roots | ||
| .slice() | ||
| .sort((a, b) => a.queueName.localeCompare(b.queueName) || | ||
| a.jobId.localeCompare(b.jobId)) | ||
| .map((root) => visit(root, new Set([encodeFlowJobRef(root)]))); | ||
| } | ||
| function registerRoutes(server, _registry, opts) { | ||
| const allowedQueues = opts?.queues; | ||
| const allowedProducers = opts?.producers; | ||
| const broadcastStreams = new Map(); | ||
| function requireQueue(request) { | ||
@@ -24,5 +209,5 @@ const { name } = request.params; | ||
| if (allowedQueues && !allowedQueues.includes(name)) | ||
| throw boom_1.default.notFound('Queue not found'); | ||
| throw boom_1.default.notFound("Queue not found"); | ||
| if (!registry.has(name)) | ||
| throw boom_1.default.notFound('Queue not found'); | ||
| throw boom_1.default.notFound("Queue not found"); | ||
| return { name, registry }; | ||
@@ -34,11 +219,301 @@ } | ||
| if (allowedProducers && !allowedProducers.includes(name)) | ||
| throw boom_1.default.notFound('Producer not found'); | ||
| throw boom_1.default.notFound("Producer not found"); | ||
| if (!registry.hasProducer(name)) | ||
| throw boom_1.default.notFound('Producer not found'); | ||
| throw boom_1.default.notFound("Producer not found"); | ||
| return { name, registry }; | ||
| } | ||
| function requireBroadcast(request) { | ||
| const { name } = request.params; | ||
| const registry = request.glidemq; | ||
| if (allowedQueues && !allowedQueues.includes(name)) | ||
| throw boom_1.default.notFound("Queue not found"); | ||
| return { name, registry }; | ||
| } | ||
| function getLiveConnection(registry, feature) { | ||
| const connection = registry.getConnection(); | ||
| if (!connection) { | ||
| throw boom_1.default.badImplementation(`Connection config required for ${feature}`); | ||
| } | ||
| return connection; | ||
| } | ||
| function getFlowClientQueueNames(registry) { | ||
| const names = allowedQueues ?? registry.names(); | ||
| return names.filter((name) => registry.has(name)); | ||
| } | ||
| async function getFlowClient(registry) { | ||
| const queueNames = getFlowClientQueueNames(registry); | ||
| if (queueNames.length === 0) { | ||
| throw boom_1.default.badImplementation("Flow HTTP endpoints require at least one configured queue"); | ||
| } | ||
| const { queue } = registry.get(queueNames[0]); | ||
| const client = await asFlowQueue(queue).getClient?.(); | ||
| if (!client) { | ||
| throw boom_1.default.badImplementation("Connection config required for flow HTTP endpoints"); | ||
| } | ||
| return client; | ||
| } | ||
| function assertAllowedFlowQueues(registry, queueNames) { | ||
| for (const queueName of queueNames) { | ||
| if (schemas_1.queueNameParamSchema.validate({ name: queueName }).error) { | ||
| throw boom_1.default.badRequest("Invalid queue name"); | ||
| } | ||
| if ((allowedQueues && !allowedQueues.includes(queueName)) || | ||
| !registry.has(queueName)) { | ||
| throw boom_1.default.notFound("Queue not found"); | ||
| } | ||
| } | ||
| } | ||
| async function registerFlowRecord(registry, flowId, kind, roots, jobs) { | ||
| const client = await getFlowClient(registry); | ||
| const prefix = registry.getPrefix(); | ||
| await client.hset(flowMetaKey(flowId, prefix), { | ||
| createdAt: Date.now().toString(), | ||
| kind, | ||
| }); | ||
| await client.del([ | ||
| flowJobsKey(flowId, prefix), | ||
| flowRootsKey(flowId, prefix), | ||
| ]); | ||
| if (jobs.length > 0) { | ||
| await client.sadd(flowJobsKey(flowId, prefix), jobs | ||
| .slice() | ||
| .sort((a, b) => a.queueName.localeCompare(b.queueName) || | ||
| a.jobId.localeCompare(b.jobId)) | ||
| .map(encodeFlowJobRef)); | ||
| await Promise.all(jobs.map(async (ref) => { | ||
| const { queue } = registry.get(ref.queueName); | ||
| await client.hset(asFlowQueue(queue).keys.job(ref.jobId), { flowId }); | ||
| })); | ||
| } | ||
| if (roots.length > 0) { | ||
| await client.sadd(flowRootsKey(flowId, prefix), roots | ||
| .slice() | ||
| .sort((a, b) => a.queueName.localeCompare(b.queueName) || | ||
| a.jobId.localeCompare(b.jobId)) | ||
| .map(encodeFlowJobRef)); | ||
| } | ||
| } | ||
| async function loadFlowRecord(registry, flowId) { | ||
| const client = await getFlowClient(registry); | ||
| const prefix = registry.getPrefix(); | ||
| const meta = hashEntriesToRecord(await client.hgetall(flowMetaKey(flowId, prefix))); | ||
| if (!meta?.kind) | ||
| return null; | ||
| const jobs = Array.from((await client.smembers(flowJobsKey(flowId, prefix))) ?? []) | ||
| .map((entry) => decodeFlowJobRef(String(entry))) | ||
| .filter((entry) => entry !== null); | ||
| const roots = Array.from((await client.smembers(flowRootsKey(flowId, prefix))) ?? []) | ||
| .map((entry) => decodeFlowJobRef(String(entry))) | ||
| .filter((entry) => entry !== null); | ||
| return { | ||
| createdAt: Number(meta.createdAt || "0"), | ||
| kind: meta.kind === "dag" ? "dag" : "tree", | ||
| jobs, | ||
| roots, | ||
| }; | ||
| } | ||
| async function deleteFlowRecord(registry, flowId) { | ||
| const client = await getFlowClient(registry); | ||
| const prefix = registry.getPrefix(); | ||
| await client.del([ | ||
| flowMetaKey(flowId, prefix), | ||
| flowJobsKey(flowId, prefix), | ||
| flowRootsKey(flowId, prefix), | ||
| ]); | ||
| } | ||
| async function buildFlowSnapshot(registry, flowId) { | ||
| const record = await loadFlowRecord(registry, flowId); | ||
| if (!record) | ||
| return null; | ||
| assertAllowedFlowQueues(registry, record.jobs.map((job) => job.queueName)); | ||
| const nodes = []; | ||
| const counts = Object.create(null); | ||
| const nodeResults = await Promise.all(record.jobs.map(async (ref) => { | ||
| const { queue } = registry.get(ref.queueName); | ||
| const job = await queue.getJob(ref.jobId); | ||
| if (!job) | ||
| return null; | ||
| const flowJob = asFlowJob(job); | ||
| const state = await flowJob.getState(); | ||
| return { | ||
| node: { | ||
| ...(0, serializers_1.serializeJob)(job), | ||
| flowId, | ||
| parentIds: flowJob.parentIds, | ||
| parentQueues: flowJob.parentQueues, | ||
| queueName: ref.queueName, | ||
| state, | ||
| }, | ||
| state, | ||
| }; | ||
| })); | ||
| for (const result of nodeResults) { | ||
| if (!result) | ||
| continue; | ||
| counts[result.state] = (counts[result.state] || 0) + 1; | ||
| nodes.push(result.node); | ||
| } | ||
| let usage = null; | ||
| let budget = null; | ||
| if (record.roots.length === 1) { | ||
| const root = record.roots[0]; | ||
| const { queue } = registry.get(root.queueName); | ||
| const flowQueue = asFlowQueue(queue); | ||
| try { | ||
| usage = await flowQueue.getFlowUsage(root.jobId); | ||
| } | ||
| catch { | ||
| usage = null; | ||
| } | ||
| try { | ||
| budget = await flowQueue.getFlowBudget(root.jobId); | ||
| } | ||
| catch { | ||
| budget = null; | ||
| } | ||
| } | ||
| return { | ||
| budget, | ||
| counts, | ||
| createdAt: record.createdAt, | ||
| flowId, | ||
| kind: record.kind, | ||
| nodes: nodes.sort((a, b) => a.timestamp - b.timestamp || | ||
| a.queueName.localeCompare(b.queueName) || | ||
| a.id.localeCompare(b.id)), | ||
| roots: record.roots | ||
| .slice() | ||
| .sort((a, b) => a.queueName.localeCompare(b.queueName) || | ||
| a.jobId.localeCompare(b.jobId)), | ||
| tree: buildFlowTreeNodes(flowId, record.roots, nodes), | ||
| usage, | ||
| }; | ||
| } | ||
| function removeBroadcastClient(shared, client) { | ||
| if (!shared.clients.delete(client)) | ||
| return; | ||
| try { | ||
| if (!client.stream.writableEnded) { | ||
| client.stream.end(); | ||
| } | ||
| } | ||
| catch { | ||
| // ignore | ||
| } | ||
| if (shared.clients.size === 0) { | ||
| void shared.close(); | ||
| } | ||
| } | ||
| async function getSharedBroadcastStream(name, subscription, registry) { | ||
| const prefix = registry.getPrefix(); | ||
| const cacheKey = `${prefix ?? ""}\u0000${name}\u0000${subscription}`; | ||
| const cached = broadcastStreams.get(cacheKey); | ||
| if (cached) { | ||
| await cached.ready; | ||
| return cached; | ||
| } | ||
| const connection = getLiveConnection(registry, "broadcast SSE"); | ||
| const { BroadcastWorker } = require("glide-mq"); | ||
| const clients = new Set(); | ||
| const shared = { | ||
| clients, | ||
| closing: false, | ||
| ready: Promise.resolve(), | ||
| worker: null, | ||
| close: async () => { | ||
| if (shared.closing) | ||
| return; | ||
| shared.closing = true; | ||
| broadcastStreams.delete(cacheKey); | ||
| for (const client of Array.from(clients)) { | ||
| try { | ||
| if (!client.stream.writableEnded) { | ||
| client.stream.end(); | ||
| } | ||
| } | ||
| catch { | ||
| // ignore | ||
| } | ||
| } | ||
| clients.clear(); | ||
| await shared.worker.close(); | ||
| }, | ||
| }; | ||
| const worker = new BroadcastWorker(name, async (job) => { | ||
| const payload = JSON.stringify({ | ||
| data: job.data, | ||
| id: job.id, | ||
| subject: job.name, | ||
| timestamp: job.timestamp, | ||
| }); | ||
| for (const client of Array.from(shared.clients)) { | ||
| if (client.matcher && !client.matcher(job.name)) | ||
| continue; | ||
| if (!writeSSEChunk(client.stream, "message", payload, job.id)) { | ||
| removeBroadcastClient(shared, client); | ||
| } | ||
| } | ||
| }, { | ||
| blockTimeout: SSE_BLOCK_MS, | ||
| connection, | ||
| prefix, | ||
| subscription, | ||
| }); | ||
| shared.worker = worker; | ||
| shared.ready = worker.waitUntilReady(); | ||
| broadcastStreams.set(cacheKey, shared); | ||
| try { | ||
| await shared.ready; | ||
| return shared; | ||
| } | ||
| catch (error) { | ||
| broadcastStreams.delete(cacheKey); | ||
| await worker.close().catch(() => undefined); | ||
| throw error; | ||
| } | ||
| } | ||
| server.ext({ | ||
| type: "onPostStop", | ||
| method: async () => { | ||
| for (const shared of Array.from(broadcastStreams.values())) { | ||
| await shared.close().catch(() => undefined); | ||
| } | ||
| broadcastStreams.clear(); | ||
| }, | ||
| }); | ||
| server.route({ | ||
| method: "GET", | ||
| path: "/usage/summary", | ||
| handler: async (request, h) => { | ||
| const registry = request.glidemq; | ||
| const query = request.query; | ||
| const requestedQueues = parseCsvQuery(query.queues); | ||
| if (requestedQueues) { | ||
| for (const queueName of requestedQueues) { | ||
| const { error } = schemas_1.queueNameParamSchema.validate({ name: queueName }); | ||
| if (error) | ||
| throw boom_1.default.badRequest("Invalid queue name"); | ||
| if (allowedQueues && !allowedQueues.includes(queueName)) | ||
| throw boom_1.default.notFound("Queue not found"); | ||
| } | ||
| } | ||
| if (query.window && query.windowMs && query.window !== query.windowMs) { | ||
| throw boom_1.default.badRequest("window and windowMs must match when both are provided"); | ||
| } | ||
| const { Queue } = require("glide-mq"); | ||
| const summary = await Queue.getUsageSummary({ | ||
| connection: getLiveConnection(registry, "usage summary"), | ||
| endTime: parseIntegerQuery(query.end, "end", { min: 0 }), | ||
| prefix: registry.getPrefix(), | ||
| queues: requestedQueues ?? allowedQueues, | ||
| startTime: parseIntegerQuery(query.start, "start", { min: 0 }), | ||
| windowMs: parseIntegerQuery(query.windowMs ?? query.window, query.windowMs ? "windowMs" : "window", { min: 1 }), | ||
| }); | ||
| return h.response(summary); | ||
| }, | ||
| }); | ||
| // POST /{name}/jobs - Add a job | ||
| server.route({ | ||
| method: 'POST', | ||
| path: '/{name}/jobs', | ||
| method: "POST", | ||
| path: "/{name}/jobs", | ||
| options: { | ||
@@ -54,6 +529,6 @@ validate: { | ||
| const { queue } = registry.get(name); | ||
| const { name: jobName, data, opts: jobOpts } = request.payload; | ||
| const { name: jobName, data, opts: jobOpts, } = request.payload; | ||
| const job = await queue.add(jobName, data, jobOpts); | ||
| if (!job) | ||
| throw boom_1.default.conflict('Job deduplicated'); | ||
| throw boom_1.default.conflict("Job deduplicated"); | ||
| return h.response((0, serializers_1.serializeJob)(job)).code(201); | ||
@@ -64,4 +539,4 @@ }, | ||
| server.route({ | ||
| method: 'POST', | ||
| path: '/{name}/jobs/wait', | ||
| method: "POST", | ||
| path: "/{name}/jobs/wait", | ||
| options: { | ||
@@ -77,3 +552,3 @@ validate: { | ||
| const { queue } = registry.get(name); | ||
| const { name: jobName, data, opts: jobOpts, waitTimeout } = request.payload; | ||
| const { name: jobName, data, opts: jobOpts, waitTimeout, } = request.payload; | ||
| const returnvalue = await queue.addAndWait(jobName, data, jobOpts, waitTimeout); | ||
@@ -85,4 +560,4 @@ return h.response({ returnvalue }); | ||
| server.route({ | ||
| method: 'GET', | ||
| path: '/{name}/jobs', | ||
| method: "GET", | ||
| path: "/{name}/jobs", | ||
| options: { | ||
@@ -107,4 +582,4 @@ validate: { | ||
| server.route({ | ||
| method: 'GET', | ||
| path: '/{name}/jobs/{id}', | ||
| method: "GET", | ||
| path: "/{name}/jobs/{id}", | ||
| options: { | ||
@@ -122,3 +597,3 @@ validate: { | ||
| if (!job) | ||
| throw boom_1.default.notFound('Job not found'); | ||
| throw boom_1.default.notFound("Job not found"); | ||
| return h.response((0, serializers_1.serializeJob)(job)); | ||
@@ -129,4 +604,4 @@ }, | ||
| server.route({ | ||
| method: 'POST', | ||
| path: '/{name}/jobs/{id}/priority', | ||
| method: "POST", | ||
| path: "/{name}/jobs/{id}/priority", | ||
| options: { | ||
@@ -145,3 +620,3 @@ validate: { | ||
| if (!job) | ||
| throw boom_1.default.notFound('Job not found'); | ||
| throw boom_1.default.notFound("Job not found"); | ||
| const { priority } = request.payload; | ||
@@ -154,4 +629,4 @@ await job.changePriority(priority); | ||
| server.route({ | ||
| method: 'POST', | ||
| path: '/{name}/jobs/{id}/delay', | ||
| method: "POST", | ||
| path: "/{name}/jobs/{id}/delay", | ||
| options: { | ||
@@ -170,3 +645,3 @@ validate: { | ||
| if (!job) | ||
| throw boom_1.default.notFound('Job not found'); | ||
| throw boom_1.default.notFound("Job not found"); | ||
| const { delay } = request.payload; | ||
@@ -179,4 +654,4 @@ await job.changeDelay(delay); | ||
| server.route({ | ||
| method: 'POST', | ||
| path: '/{name}/jobs/{id}/promote', | ||
| method: "POST", | ||
| path: "/{name}/jobs/{id}/promote", | ||
| options: { | ||
@@ -187,3 +662,3 @@ validate: { | ||
| }, | ||
| payload: { failAction: 'ignore' }, | ||
| payload: { failAction: "ignore" }, | ||
| }, | ||
@@ -196,3 +671,3 @@ handler: async (request, h) => { | ||
| if (!job) | ||
| throw boom_1.default.notFound('Job not found'); | ||
| throw boom_1.default.notFound("Job not found"); | ||
| await job.promote(); | ||
@@ -204,4 +679,4 @@ return h.response({ ok: true }); | ||
| server.route({ | ||
| method: 'GET', | ||
| path: '/{name}/counts', | ||
| method: "GET", | ||
| path: "/{name}/counts", | ||
| options: { | ||
@@ -222,4 +697,4 @@ validate: { | ||
| server.route({ | ||
| method: 'GET', | ||
| path: '/{name}/metrics', | ||
| method: "GET", | ||
| path: "/{name}/metrics", | ||
| options: { | ||
@@ -242,4 +717,4 @@ validate: { | ||
| server.route({ | ||
| method: 'POST', | ||
| path: '/{name}/pause', | ||
| method: "POST", | ||
| path: "/{name}/pause", | ||
| options: { | ||
@@ -250,3 +725,3 @@ validate: { | ||
| }, | ||
| payload: { failAction: 'ignore' }, | ||
| payload: { failAction: "ignore" }, | ||
| }, | ||
@@ -262,4 +737,4 @@ handler: async (request, h) => { | ||
| server.route({ | ||
| method: 'POST', | ||
| path: '/{name}/resume', | ||
| method: "POST", | ||
| path: "/{name}/resume", | ||
| options: { | ||
@@ -270,3 +745,3 @@ validate: { | ||
| }, | ||
| payload: { failAction: 'ignore' }, | ||
| payload: { failAction: "ignore" }, | ||
| }, | ||
@@ -282,4 +757,4 @@ handler: async (request, h) => { | ||
| server.route({ | ||
| method: 'POST', | ||
| path: '/{name}/drain', | ||
| method: "POST", | ||
| path: "/{name}/drain", | ||
| options: { | ||
@@ -290,3 +765,3 @@ validate: { | ||
| }, | ||
| payload: { failAction: 'ignore' }, | ||
| payload: { failAction: "ignore" }, | ||
| }, | ||
@@ -302,4 +777,4 @@ handler: async (request, h) => { | ||
| server.route({ | ||
| method: 'POST', | ||
| path: '/{name}/retry', | ||
| method: "POST", | ||
| path: "/{name}/retry", | ||
| options: { | ||
@@ -322,4 +797,4 @@ validate: { | ||
| server.route({ | ||
| method: 'DELETE', | ||
| path: '/{name}/clean', | ||
| method: "DELETE", | ||
| path: "/{name}/clean", | ||
| options: { | ||
@@ -342,4 +817,4 @@ validate: { | ||
| server.route({ | ||
| method: 'GET', | ||
| path: '/{name}/workers', | ||
| method: "GET", | ||
| path: "/{name}/workers", | ||
| options: { | ||
@@ -360,4 +835,4 @@ validate: { | ||
| server.route({ | ||
| method: 'POST', | ||
| path: '/{name}/produce', | ||
| method: "POST", | ||
| path: "/{name}/produce", | ||
| options: { | ||
@@ -373,6 +848,6 @@ validate: { | ||
| const producer = registry.getProducer(name); | ||
| const { name: jobName, data, opts: jobOpts } = request.payload; | ||
| const { name: jobName, data, opts: jobOpts, } = request.payload; | ||
| const id = await producer.add(jobName, data, jobOpts); | ||
| if (!id) | ||
| throw boom_1.default.conflict('Job deduplicated'); | ||
| throw boom_1.default.conflict("Job deduplicated"); | ||
| return h.response({ id }).code(201); | ||
@@ -384,4 +859,4 @@ }, | ||
| server.route({ | ||
| method: 'GET', | ||
| path: '/{name}/schedulers', | ||
| method: "GET", | ||
| path: "/{name}/schedulers", | ||
| options: { | ||
@@ -402,4 +877,4 @@ validate: { | ||
| server.route({ | ||
| method: 'GET', | ||
| path: '/{name}/schedulers/{schedulerName}', | ||
| method: "GET", | ||
| path: "/{name}/schedulers/{schedulerName}", | ||
| options: { | ||
@@ -417,3 +892,3 @@ validate: { | ||
| if (!scheduler) | ||
| throw boom_1.default.notFound('Scheduler not found'); | ||
| throw boom_1.default.notFound("Scheduler not found"); | ||
| return h.response(scheduler); | ||
@@ -424,4 +899,4 @@ }, | ||
| server.route({ | ||
| method: 'PUT', | ||
| path: '/{name}/schedulers/{schedulerName}', | ||
| method: "PUT", | ||
| path: "/{name}/schedulers/{schedulerName}", | ||
| options: { | ||
@@ -445,4 +920,4 @@ validate: { | ||
| server.route({ | ||
| method: 'DELETE', | ||
| path: '/{name}/schedulers/{schedulerName}', | ||
| method: "DELETE", | ||
| path: "/{name}/schedulers/{schedulerName}", | ||
| options: { | ||
@@ -463,6 +938,173 @@ validate: { | ||
| // --- AI-native endpoints --- | ||
| server.route({ | ||
| method: "POST", | ||
| path: "/flows", | ||
| handler: async (request, h) => { | ||
| const registry = request.glidemq; | ||
| const body = (request.payload ?? {}); | ||
| if ((!!body.flow && !!body.dag) || (!body.flow && !body.dag)) { | ||
| return h | ||
| .response({ error: "Body must include exactly one of: flow, dag" }) | ||
| .code(400); | ||
| } | ||
| const connection = getLiveConnection(registry, "flow HTTP endpoints"); | ||
| const { FlowProducer } = require("glide-mq"); | ||
| const producer = new FlowProducer({ | ||
| connection, | ||
| prefix: registry.getPrefix(), | ||
| }); | ||
| try { | ||
| if (body.flow) { | ||
| const queueNames = collectFlowQueueNames(body.flow); | ||
| assertAllowedFlowQueues(registry, queueNames); | ||
| const node = await producer.add(body.flow, body.budget ? { budget: body.budget } : undefined); | ||
| const refs = []; | ||
| const collectRefs = (flowDef, jobNode) => { | ||
| refs.push({ jobId: jobNode.job.id, queueName: flowDef.queueName }); | ||
| if (!flowDef.children || !jobNode.children) | ||
| return; | ||
| for (let i = 0; i < flowDef.children.length && i < jobNode.children.length; i++) { | ||
| collectRefs(flowDef.children[i], jobNode.children[i]); | ||
| } | ||
| }; | ||
| collectRefs(body.flow, node); | ||
| const root = { jobId: node.job.id, queueName: body.flow.queueName }; | ||
| await registerFlowRecord(registry, node.job.id, "tree", [root], refs); | ||
| return h | ||
| .response({ | ||
| flowId: node.job.id, | ||
| kind: "tree", | ||
| nodeCount: refs.length, | ||
| root, | ||
| roots: [root], | ||
| }) | ||
| .code(201); | ||
| } | ||
| if (body.budget) { | ||
| return h | ||
| .response({ | ||
| error: "budget is currently supported only for tree flows", | ||
| }) | ||
| .code(400); | ||
| } | ||
| const dag = body.dag; | ||
| const queueNames = collectDagQueueNames(dag); | ||
| assertAllowedFlowQueues(registry, queueNames); | ||
| const jobs = await producer.addDAG(dag); | ||
| const flowId = `dag-${Date.now()}-${Math.random().toString(16).slice(2, 10)}`; | ||
| const refs = dag.nodes.map((dagNode) => { | ||
| const job = jobs.get(dagNode.name); | ||
| if (!job) | ||
| throw boom_1.default.badImplementation(`Missing DAG job for node ${dagNode.name}`); | ||
| return { jobId: job.id, queueName: dagNode.queueName }; | ||
| }); | ||
| const roots = dag.nodes | ||
| .filter((dagNode) => !dagNode.deps || dagNode.deps.length === 0) | ||
| .map((dagNode) => ({ | ||
| jobId: jobs.get(dagNode.name).id, | ||
| queueName: dagNode.queueName, | ||
| })); | ||
| await registerFlowRecord(registry, flowId, "dag", roots, refs); | ||
| return h | ||
| .response({ | ||
| flowId, | ||
| jobs: dag.nodes.map((dagNode) => ({ | ||
| id: jobs.get(dagNode.name).id, | ||
| name: dagNode.name, | ||
| queueName: dagNode.queueName, | ||
| })), | ||
| kind: "dag", | ||
| nodeCount: refs.length, | ||
| roots, | ||
| }) | ||
| .code(201); | ||
| } | ||
| finally { | ||
| await producer.close().catch(() => undefined); | ||
| } | ||
| }, | ||
| }); | ||
| server.route({ | ||
| method: "GET", | ||
| path: "/flows/{id}", | ||
| handler: async (request, h) => { | ||
| const snapshot = await buildFlowSnapshot(request.glidemq, request.params.id); | ||
| if (!snapshot) | ||
| throw boom_1.default.notFound("Flow not found"); | ||
| return h.response(snapshot); | ||
| }, | ||
| }); | ||
| server.route({ | ||
| method: "GET", | ||
| path: "/flows/{id}/tree", | ||
| handler: async (request, h) => { | ||
| const snapshot = await buildFlowSnapshot(request.glidemq, request.params.id); | ||
| if (!snapshot) | ||
| throw boom_1.default.notFound("Flow not found"); | ||
| return h.response({ | ||
| budget: snapshot.budget, | ||
| counts: snapshot.counts, | ||
| createdAt: snapshot.createdAt, | ||
| flowId: snapshot.flowId, | ||
| kind: snapshot.kind, | ||
| roots: snapshot.roots, | ||
| tree: snapshot.tree, | ||
| usage: snapshot.usage, | ||
| }); | ||
| }, | ||
| }); | ||
| server.route({ | ||
| method: "DELETE", | ||
| path: "/flows/{id}", | ||
| handler: async (request, h) => { | ||
| const registry = request.glidemq; | ||
| const flowId = request.params.id; | ||
| const record = await loadFlowRecord(registry, flowId); | ||
| if (!record) | ||
| throw boom_1.default.notFound("Flow not found"); | ||
| assertAllowedFlowQueues(registry, record.jobs.map((job) => job.queueName)); | ||
| let revoked = 0; | ||
| let flagged = 0; | ||
| let skipped = 0; | ||
| const jobs = []; | ||
| const results = await Promise.all(record.jobs.map(async (ref) => { | ||
| const { queue } = registry.get(ref.queueName); | ||
| const job = await queue.getJob(ref.jobId); | ||
| if (!job) { | ||
| return { | ||
| id: ref.jobId, | ||
| queueName: ref.queueName, | ||
| status: "missing", | ||
| }; | ||
| } | ||
| const flowJob = asFlowJob(job); | ||
| const state = await flowJob.getState(); | ||
| if (state === "completed" || state === "failed") { | ||
| return { | ||
| id: ref.jobId, | ||
| queueName: ref.queueName, | ||
| state, | ||
| status: "skipped", | ||
| }; | ||
| } | ||
| const status = await asFlowQueue(queue).revoke(ref.jobId); | ||
| return { id: ref.jobId, queueName: ref.queueName, state, status }; | ||
| })); | ||
| for (const result of results) { | ||
| if (result.status === "revoked") | ||
| revoked += 1; | ||
| else if (result.status === "flagged") | ||
| flagged += 1; | ||
| else | ||
| skipped += 1; | ||
| jobs.push(result); | ||
| } | ||
| await deleteFlowRecord(registry, flowId); | ||
| return h.response({ flagged, flowId, jobs, revoked, skipped }); | ||
| }, | ||
| }); | ||
| // GET /{name}/flows/{id}/usage - Get aggregated token/cost usage for a flow | ||
| server.route({ | ||
| method: 'GET', | ||
| path: '/{name}/flows/{id}/usage', | ||
| method: "GET", | ||
| path: "/{name}/flows/{id}/usage", | ||
| options: { | ||
@@ -480,3 +1122,3 @@ validate: { | ||
| if (!usage) | ||
| throw boom_1.default.notFound('Flow not found'); | ||
| throw boom_1.default.notFound("Flow not found"); | ||
| return h.response(usage); | ||
@@ -487,4 +1129,4 @@ }, | ||
| server.route({ | ||
| method: 'GET', | ||
| path: '/{name}/flows/{id}/budget', | ||
| method: "GET", | ||
| path: "/{name}/flows/{id}/budget", | ||
| options: { | ||
@@ -502,3 +1144,3 @@ validate: { | ||
| if (!budget) | ||
| throw boom_1.default.notFound('Flow not found'); | ||
| throw boom_1.default.notFound("Flow not found"); | ||
| return h.response(budget); | ||
@@ -509,4 +1151,4 @@ }, | ||
| server.route({ | ||
| method: 'GET', | ||
| path: '/{name}/jobs/{id}/stream', | ||
| method: "GET", | ||
| path: "/{name}/jobs/{id}/stream", | ||
| options: { | ||
@@ -526,10 +1168,10 @@ validate: { | ||
| .response(stream) | ||
| .type('text/event-stream') | ||
| .header('Cache-Control', 'no-cache'); | ||
| stream.write(':ok\n\n'); | ||
| let lastId = request.headers['last-event-id'] | ||
| || request.query.lastId | ||
| || undefined; | ||
| .type("text/event-stream") | ||
| .header("Cache-Control", "no-cache"); | ||
| stream.write(":ok\n\n"); | ||
| let lastId = request.headers["last-event-id"] || | ||
| request.query.lastId || | ||
| undefined; | ||
| let running = true; | ||
| request.raw.req.on('close', () => { | ||
| request.raw.req.on("close", () => { | ||
| running = false; | ||
@@ -540,3 +1182,6 @@ }); | ||
| while (running) { | ||
| const entries = await queue.readStream(id, { lastId, count: 100 }); | ||
| const entries = await queue.readStream(id, { | ||
| lastId, | ||
| count: 100, | ||
| }); | ||
| for (const entry of entries) { | ||
@@ -550,4 +1195,7 @@ stream.write(`id: ${entry.id}\ndata: ${JSON.stringify(entry.fields)}\n\n`); | ||
| const state = await job.getState(); | ||
| if (state === 'completed' || state === 'failed') { | ||
| const trailing = await queue.readStream(id, { lastId, count: 100 }); | ||
| if (state === "completed" || state === "failed") { | ||
| const trailing = await queue.readStream(id, { | ||
| lastId, | ||
| count: 100, | ||
| }); | ||
| for (const entry of trailing) { | ||
@@ -576,4 +1224,4 @@ stream.write(`id: ${entry.id}\ndata: ${JSON.stringify(entry.fields)}\n\n`); | ||
| server.route({ | ||
| method: 'GET', | ||
| path: '/{name}/events', | ||
| method: "GET", | ||
| path: "/{name}/events", | ||
| options: { | ||
@@ -588,3 +1236,87 @@ validate: { | ||
| }); | ||
| server.route({ | ||
| method: "POST", | ||
| path: "/broadcast/{name}", | ||
| options: { | ||
| validate: { | ||
| params: schemas_1.queueNameParamSchema, | ||
| payload: joi_1.default.object({ | ||
| subject: joi_1.default.string().trim().min(1).required(), | ||
| data: joi_1.default.any(), | ||
| opts: joi_1.default.object().unknown(true), | ||
| }), | ||
| failAction, | ||
| }, | ||
| }, | ||
| handler: async (request, h) => { | ||
| const { name, registry } = requireBroadcast(request); | ||
| const { Broadcast } = require("glide-mq"); | ||
| const { subject, data, opts: jobOpts, } = request.payload; | ||
| const broadcast = new Broadcast(name, { | ||
| connection: getLiveConnection(registry, "broadcast publish"), | ||
| prefix: registry.getPrefix(), | ||
| }); | ||
| try { | ||
| const id = await broadcast.publish(subject, data ?? null, jobOpts); | ||
| return h | ||
| .response(id ? { id, subject } : { skipped: true }) | ||
| .code(id ? 201 : 200); | ||
| } | ||
| finally { | ||
| await broadcast.close().catch(() => undefined); | ||
| } | ||
| }, | ||
| }); | ||
| server.route({ | ||
| method: "GET", | ||
| path: "/broadcast/{name}/events", | ||
| options: { | ||
| validate: { | ||
| params: schemas_1.queueNameParamSchema, | ||
| query: joi_1.default.object({ | ||
| subscription: joi_1.default.string().trim().min(1).required(), | ||
| subjects: joi_1.default.string().optional(), | ||
| }), | ||
| failAction, | ||
| }, | ||
| timeout: { server: false, socket: false }, | ||
| }, | ||
| handler: async (request, h) => { | ||
| const { name, registry } = requireBroadcast(request); | ||
| const { subscription, subjects } = request.query; | ||
| const { compileSubjectMatcher } = require("glide-mq"); | ||
| const shared = await getSharedBroadcastStream(name, subscription, registry); | ||
| const stream = new stream_1.PassThrough(); | ||
| const client = { | ||
| matcher: compileSubjectMatcher(parseCsvQuery(subjects)), | ||
| stream, | ||
| }; | ||
| const response = h | ||
| .response(stream) | ||
| .type("text/event-stream") | ||
| .header("Cache-Control", "no-cache"); | ||
| stream.write(":ok\n\n"); | ||
| shared.clients.add(client); | ||
| request.raw.req.on("close", () => { | ||
| removeBroadcastClient(shared, client); | ||
| }); | ||
| (async () => { | ||
| try { | ||
| while (!stream.writableEnded) { | ||
| if (!writeSSEChunk(stream, "heartbeat", JSON.stringify({ time: Date.now() }))) { | ||
| break; | ||
| } | ||
| await new Promise((resolve) => setTimeout(resolve, SSE_HEARTBEAT_MS)); | ||
| } | ||
| } | ||
| finally { | ||
| removeBroadcastClient(shared, client); | ||
| } | ||
| })().catch(() => { | ||
| removeBroadcastClient(shared, client); | ||
| }); | ||
| return response; | ||
| }, | ||
| }); | ||
| } | ||
| //# sourceMappingURL=routes.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"} |
+3
-3
| { | ||
| "name": "@glidemq/hapi", | ||
| "version": "0.3.0", | ||
| "version": "0.4.0", | ||
| "description": "Hapi plugin for glide-mq - queue management REST API and SSE events", | ||
@@ -54,7 +54,7 @@ "main": "dist/index.js", | ||
| }, | ||
| "homepage": "https://avifenesh.github.io/glide-mq.dev/integrations/hapi", | ||
| "homepage": "https://glidemq.dev/integrations/hapi", | ||
| "sideEffects": false, | ||
| "peerDependencies": { | ||
| "@hapi/hapi": ">=21.0.0", | ||
| "glide-mq": ">=0.14.0", | ||
| "glide-mq": ">=0.15.0", | ||
| "joi": ">=17.0.0" | ||
@@ -61,0 +61,0 @@ }, |
+11
-2
@@ -6,3 +6,3 @@ # @glidemq/hapi | ||
| Hapi v21 plugin that turns [glide-mq](https://github.com/avifenesh/glide-mq) queues into a REST API with real-time SSE - one registration, 24 endpoints. Works as a general-purpose job queue API and as an AI orchestration layer with built-in usage tracking, budget monitoring, and streaming endpoints. | ||
| Hapi v21 plugin that turns [glide-mq](https://github.com/avifenesh/glide-mq) queues into a REST API with real-time SSE. Works as a general-purpose job queue API and as an AI orchestration layer with built-in usage tracking, budget monitoring, flow orchestration over HTTP, streaming endpoints, queue-wide usage summaries, and broadcast pub/sub over HTTP. | ||
@@ -61,5 +61,13 @@ ## Why | ||
| | `GET` | `/{name}/flows/{id}/budget` | Budget status and remaining limits for a flow | | ||
| | `POST` | `/flows` | Create a tree flow or DAG over HTTP with `{ flow, budget? }` or `{ dag }` | | ||
| | `GET` | `/flows/{id}` | Inspect a flow snapshot with nodes, roots, counts, usage, and budget | | ||
| | `GET` | `/flows/{id}/tree` | Inspect the nested tree view for a submitted tree flow or DAG | | ||
| | `DELETE` | `/flows/{id}` | Revoke or flag remaining jobs in a flow and delete the HTTP flow record | | ||
| | `GET` | `/usage/summary` | Rolling usage totals across one or more queues | | ||
| | `GET` | `/{name}/jobs/{id}/stream` | SSE stream of a job's output chunks | | ||
| | `POST` | `/broadcast/{name}` | Publish a broadcast message with `subject` + payload | | ||
| | `GET` | `/broadcast/{name}/events?subscription=...` | Durable SSE stream for a broadcast subscription | | ||
| Job serialization includes AI fields when present: `usage`, `signals`, `budgetKey`, `fallbackIndex`, `tpmTokens`. SSE events include `usage`, `suspended`, and `budget-exceeded` event types. | ||
| HTTP-submitted budgets are currently supported for tree flows only, not DAG payloads. | ||
@@ -120,2 +128,3 @@ All AI features are also accessible programmatically via the `server.glidemq` registry. See the [glide-mq docs](https://github.com/avifenesh/glide-mq) for details. | ||
| - `addAndWait` (`POST /{name}/jobs/wait`) is not available in testing mode. | ||
| - `/flows*`, `/usage/summary`, and `/broadcast/*` require a live connection and are not available in testing mode. | ||
| - Producers are not supported in testing mode. | ||
@@ -126,3 +135,3 @@ | ||
| - [glide-mq](https://github.com/avifenesh/glide-mq) - core library | ||
| - [Full documentation](https://avifenesh.github.io/glide-mq.dev/integrations/hapi) | ||
| - [Full documentation](https://glidemq.dev/integrations/hapi) | ||
| - [Issues](https://github.com/avifenesh/glidemq-hapi/issues) | ||
@@ -129,0 +138,0 @@ - [@glidemq/hono](https://github.com/avifenesh/glidemq-hono) | [@glidemq/fastify](https://github.com/avifenesh/glidemq-fastify) | [@glidemq/nestjs](https://github.com/avifenesh/glidemq-nestjs) | [@glidemq/dashboard](https://github.com/avifenesh/glidemq-dashboard) |
171975
48.68%2066
54.87%139
6.92%