Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@glidemq/hapi

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@glidemq/hapi - npm Package Compare versions

Comparing version
0.3.0
to
0.4.0
+6
-0
CHANGELOG.md
# 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"}

@@ -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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"}
{
"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 @@ },

@@ -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)