@taskcast/server 0.2.0 → 0.3.1

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.
@@ -1,25 +1,98 @@
1
- import { Hono } from 'hono';
2
- import { z } from 'zod';
1
+ import { OpenAPIHono, createRoute, z } from '@hono/zod-openapi';
3
2
  import { checkScope } from '../auth.js';
4
- const CreateTaskSchema = z.object({
5
- id: z.string().optional(),
6
- type: z.string().optional(),
7
- params: z.record(z.unknown()).optional(),
8
- metadata: z.record(z.unknown()).optional(),
9
- ttl: z.number().int().positive().optional(),
10
- webhooks: z.array(z.unknown()).optional(),
11
- cleanup: z.object({ rules: z.array(z.unknown()) }).optional(),
3
+ import { CreateTaskSchema, PublishEventSchema, TransitionSchema, TaskSchema, TaskEventSchema, ErrorSchema, } from '../schemas.js';
4
+ // ─── Route Definitions ─────────────────────────────────────────────────────
5
+ const createTaskRoute = createRoute({
6
+ method: 'post',
7
+ path: '/',
8
+ tags: ['Tasks'],
9
+ summary: 'Create a new task',
10
+ security: [{ Bearer: [] }],
11
+ request: {
12
+ body: { content: { 'application/json': { schema: CreateTaskSchema } } },
13
+ },
14
+ responses: {
15
+ 201: { description: 'Task created', content: { 'application/json': { schema: TaskSchema } } },
16
+ 400: { description: 'Validation error', content: { 'application/json': { schema: ErrorSchema } } },
17
+ 403: { description: 'Forbidden', content: { 'application/json': { schema: ErrorSchema } } },
18
+ },
12
19
  });
13
- const PublishEventSchema = z.object({
14
- type: z.string(),
15
- level: z.enum(['debug', 'info', 'warn', 'error']),
16
- data: z.unknown(),
17
- seriesId: z.string().optional(),
18
- seriesMode: z.enum(['keep-all', 'accumulate', 'latest']).optional(),
20
+ const getTaskRoute = createRoute({
21
+ method: 'get',
22
+ path: '/{taskId}',
23
+ tags: ['Tasks'],
24
+ summary: 'Get task by ID',
25
+ security: [{ Bearer: [] }],
26
+ request: {
27
+ params: z.object({ taskId: z.string() }),
28
+ },
29
+ responses: {
30
+ 200: { description: 'Task details', content: { 'application/json': { schema: TaskSchema } } },
31
+ 404: { description: 'Task not found', content: { 'application/json': { schema: ErrorSchema } } },
32
+ 403: { description: 'Forbidden', content: { 'application/json': { schema: ErrorSchema } } },
33
+ },
34
+ });
35
+ const transitionRoute = createRoute({
36
+ method: 'patch',
37
+ path: '/{taskId}/status',
38
+ tags: ['Tasks'],
39
+ summary: 'Transition task status',
40
+ security: [{ Bearer: [] }],
41
+ request: {
42
+ params: z.object({ taskId: z.string() }),
43
+ body: { content: { 'application/json': { schema: TransitionSchema } } },
44
+ },
45
+ responses: {
46
+ 200: { description: 'Updated task', content: { 'application/json': { schema: TaskSchema } } },
47
+ 400: { description: 'Invalid transition', content: { 'application/json': { schema: ErrorSchema } } },
48
+ 404: { description: 'Task not found', content: { 'application/json': { schema: ErrorSchema } } },
49
+ 403: { description: 'Forbidden', content: { 'application/json': { schema: ErrorSchema } } },
50
+ },
51
+ });
52
+ const publishEventsRoute = createRoute({
53
+ method: 'post',
54
+ path: '/{taskId}/events',
55
+ tags: ['Events'],
56
+ summary: 'Publish events to a task',
57
+ description: 'Supports single event or batch (array) publishing.',
58
+ security: [{ Bearer: [] }],
59
+ request: {
60
+ params: z.object({ taskId: z.string() }),
61
+ body: { content: { 'application/json': { schema: z.union([PublishEventSchema, z.array(PublishEventSchema)]) } } },
62
+ },
63
+ responses: {
64
+ 201: { description: 'Events published', content: { 'application/json': { schema: z.union([TaskEventSchema, z.array(TaskEventSchema)]) } } },
65
+ 400: { description: 'Validation error', content: { 'application/json': { schema: ErrorSchema } } },
66
+ 404: { description: 'Task not found', content: { 'application/json': { schema: ErrorSchema } } },
67
+ 403: { description: 'Forbidden', content: { 'application/json': { schema: ErrorSchema } } },
68
+ },
69
+ });
70
+ const eventHistoryRoute = createRoute({
71
+ method: 'get',
72
+ path: '/{taskId}/events/history',
73
+ tags: ['Events'],
74
+ summary: 'Query event history',
75
+ security: [{ Bearer: [] }],
76
+ request: {
77
+ params: z.object({ taskId: z.string() }),
78
+ query: z.object({
79
+ 'since.id': z.string().optional(),
80
+ 'since.index': z.string().optional(),
81
+ 'since.timestamp': z.string().optional(),
82
+ types: z.string().optional(),
83
+ levels: z.string().optional(),
84
+ }),
85
+ },
86
+ responses: {
87
+ 200: { description: 'Event list', content: { 'application/json': { schema: z.array(TaskEventSchema) } } },
88
+ 404: { description: 'Task not found', content: { 'application/json': { schema: ErrorSchema } } },
89
+ 403: { description: 'Forbidden', content: { 'application/json': { schema: ErrorSchema } } },
90
+ },
19
91
  });
20
92
  export function createTasksRouter(engine) {
21
- const router = new Hono();
22
- router.post('/', async (c) => {
93
+ const router = new OpenAPIHono();
94
+ const register = router.openapi.bind(router);
95
+ register(createTaskRoute, async (c) => {
23
96
  const auth = c.get('auth');
24
97
  if (!checkScope(auth, 'task:create'))
25
98
  return c.json({ error: 'Forbidden' }, 403);
@@ -39,11 +112,25 @@ export function createTasksRouter(engine) {
39
112
  input.metadata = d.metadata;
40
113
  if (d.ttl !== undefined)
41
114
  input.ttl = d.ttl;
115
+ if (d.tags !== undefined)
116
+ input.tags = d.tags;
117
+ if (d.assignMode !== undefined)
118
+ input.assignMode = d.assignMode;
119
+ if (d.cost !== undefined)
120
+ input.cost = d.cost;
121
+ if (d.disconnectPolicy !== undefined)
122
+ input.disconnectPolicy = d.disconnectPolicy;
123
+ if (d.webhooks !== undefined)
124
+ input.webhooks = d.webhooks;
125
+ if (d.cleanup !== undefined)
126
+ input.cleanup = d.cleanup;
127
+ if (d.authConfig !== undefined)
128
+ input.authConfig = d.authConfig;
42
129
  const task = await engine.createTask(input);
43
130
  return c.json(task, 201);
44
131
  });
45
- router.get('/:taskId', async (c) => {
46
- const { taskId } = c.req.param();
132
+ register(getTaskRoute, async (c) => {
133
+ const taskId = c.req.param('taskId');
47
134
  const auth = c.get('auth');
48
135
  if (!checkScope(auth, 'event:subscribe', taskId))
49
136
  return c.json({ error: 'Forbidden' }, 403);
@@ -52,25 +139,13 @@ export function createTasksRouter(engine) {
52
139
  return c.json({ error: 'Task not found' }, 404);
53
140
  return c.json(task);
54
141
  });
55
- router.patch('/:taskId/status', async (c) => {
56
- const { taskId } = c.req.param();
142
+ register(transitionRoute, async (c) => {
143
+ const taskId = c.req.param('taskId');
57
144
  const auth = c.get('auth');
58
145
  if (!checkScope(auth, 'task:manage', taskId))
59
146
  return c.json({ error: 'Forbidden' }, 403);
60
147
  const body = await c.req.json();
61
- const schema = z.object({
62
- status: z.enum(['running', 'paused', 'blocked', 'completed', 'failed', 'timeout', 'cancelled']),
63
- result: z.record(z.unknown()).optional(),
64
- error: z.object({
65
- code: z.string().optional(),
66
- message: z.string(),
67
- details: z.record(z.unknown()).optional(),
68
- }).optional(),
69
- reason: z.string().optional(),
70
- ttl: z.number().int().positive().optional(),
71
- resumeAfterMs: z.number().int().positive().optional(),
72
- });
73
- const parsed = schema.safeParse(body);
148
+ const parsed = TransitionSchema.safeParse(body);
74
149
  if (!parsed.success)
75
150
  return c.json({ error: parsed.error.flatten() }, 400);
76
151
  try {
@@ -92,6 +167,12 @@ export function createTasksRouter(engine) {
92
167
  payload.ttl = parsed.data.ttl;
93
168
  if (parsed.data.resumeAfterMs !== undefined)
94
169
  payload.resumeAfterMs = parsed.data.resumeAfterMs;
170
+ if (parsed.data.blockedRequest !== undefined) {
171
+ payload.blockedRequest = {
172
+ type: parsed.data.blockedRequest.type,
173
+ data: parsed.data.blockedRequest.data,
174
+ };
175
+ }
95
176
  const task = await engine.transitionTask(taskId, parsed.data.status, payload);
96
177
  return c.json(task);
97
178
  }
@@ -102,8 +183,8 @@ export function createTasksRouter(engine) {
102
183
  return c.json({ error: msg }, 400);
103
184
  }
104
185
  });
105
- router.post('/:taskId/events', async (c) => {
106
- const { taskId } = c.req.param();
186
+ register(publishEventsRoute, async (c) => {
187
+ const taskId = c.req.param('taskId');
107
188
  const auth = c.get('auth');
108
189
  if (!checkScope(auth, 'event:publish', taskId))
109
190
  return c.json({ error: 'Forbidden' }, 403);
@@ -122,6 +203,8 @@ export function createTasksRouter(engine) {
122
203
  eventInput.seriesId = d.seriesId;
123
204
  if (d.seriesMode !== undefined)
124
205
  eventInput.seriesMode = d.seriesMode;
206
+ if (d.seriesAccField !== undefined)
207
+ eventInput.seriesAccField = d.seriesAccField;
125
208
  const event = await engine.publishEvent(taskId, eventInput);
126
209
  events.push(event);
127
210
  }
@@ -134,8 +217,8 @@ export function createTasksRouter(engine) {
134
217
  }
135
218
  return c.json(isBatch ? events : events[0], 201);
136
219
  });
137
- router.get('/:taskId/events/history', async (c) => {
138
- const { taskId } = c.req.param();
220
+ register(eventHistoryRoute, async (c) => {
221
+ const taskId = c.req.param('taskId');
139
222
  const auth = c.get('auth');
140
223
  if (!checkScope(auth, 'event:history', taskId))
141
224
  return c.json({ error: 'Forbidden' }, 403);
@@ -158,6 +241,49 @@ export function createTasksRouter(engine) {
158
241
  const events = await engine.getEvents(taskId, since !== undefined ? { since } : undefined);
159
242
  return c.json(events);
160
243
  });
244
+ // ─── POST /tasks/:taskId/resolve — Resolve a blocked task ─────────────────
245
+ router.post('/:taskId/resolve', async (c) => {
246
+ const taskId = c.req.param('taskId');
247
+ const auth = c.get('auth');
248
+ if (!checkScope(auth, 'task:resolve', taskId))
249
+ return c.json({ error: 'Forbidden' }, 403);
250
+ const task = await engine.getTask(taskId);
251
+ if (!task)
252
+ return c.json({ error: 'Task not found' }, 404);
253
+ if (task.status !== 'blocked')
254
+ return c.json({ error: 'Task is not blocked' }, 400);
255
+ const body = await c.req.json();
256
+ const schema = z.object({ data: z.unknown() });
257
+ const parsed = schema.safeParse(body);
258
+ if (!parsed.success)
259
+ return c.json({ error: parsed.error.flatten() }, 400);
260
+ try {
261
+ const updated = await engine.transitionTask(taskId, 'running', {
262
+ result: typeof parsed.data.data === 'object' && parsed.data.data !== null
263
+ ? parsed.data.data
264
+ : { resolution: parsed.data.data },
265
+ });
266
+ return c.json(updated);
267
+ }
268
+ catch (err) {
269
+ const msg = err instanceof Error ? err.message : String(err);
270
+ return c.json({ error: msg }, 400);
271
+ }
272
+ });
273
+ // ─── GET /tasks/:taskId/request — Get blocked request ────────────────────
274
+ router.get('/:taskId/request', async (c) => {
275
+ const taskId = c.req.param('taskId');
276
+ const auth = c.get('auth');
277
+ if (!checkScope(auth, 'task:resolve', taskId))
278
+ return c.json({ error: 'Forbidden' }, 403);
279
+ const task = await engine.getTask(taskId);
280
+ if (!task)
281
+ return c.json({ error: 'Task not found' }, 404);
282
+ if (task.status !== 'blocked' || !task.blockedRequest) {
283
+ return c.json({ error: 'No blocked request' }, 404);
284
+ }
285
+ return c.json(task.blockedRequest);
286
+ });
161
287
  return router;
162
288
  }
163
289
  //# sourceMappingURL=tasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/routes/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/routes/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { Task, WorkerManager } from '@taskcast/core';
2
+ import type { AuthContext } from '../auth.js';
3
+ export interface WSLike {
4
+ send(data: string): void;
5
+ close(): void;
6
+ }
7
+ export type TaskSummary = {
8
+ id: string;
9
+ type?: string;
10
+ tags?: string[];
11
+ cost?: number;
12
+ params?: Record<string, unknown>;
13
+ };
14
+ export declare class WorkerWSRegistry {
15
+ private handlers;
16
+ register(workerId: string, handler: WorkerWSHandler): void;
17
+ unregister(workerId: string): void;
18
+ get(workerId: string): WorkerWSHandler | undefined;
19
+ getAll(): Map<string, WorkerWSHandler>;
20
+ }
21
+ export declare class WorkerWSHandler {
22
+ private manager;
23
+ private ws;
24
+ private auth?;
25
+ private registry?;
26
+ private workerId;
27
+ private pendingOffers;
28
+ private pingTimer;
29
+ constructor(manager: WorkerManager, ws: WSLike, auth?: AuthContext | undefined, registry?: WorkerWSRegistry | undefined);
30
+ get registeredWorkerId(): string | null;
31
+ handleMessage(raw: string): Promise<void>;
32
+ offerTask(task: Task): void;
33
+ broadcastAvailable(task: Task): void;
34
+ handleDisconnect(): Promise<void>;
35
+ stopPingTimer(): void;
36
+ private handleRegister;
37
+ private handleUpdate;
38
+ private handleAccept;
39
+ private handleDecline;
40
+ private handleClaim;
41
+ private handleDrain;
42
+ private handlePong;
43
+ private startPingTimer;
44
+ private requireRegistered;
45
+ private send;
46
+ }
47
+ //# sourceMappingURL=worker-ws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-ws.d.ts","sourceRoot":"","sources":["../../src/routes/worker-ws.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAqE,MAAM,gBAAgB,CAAA;AAC5H,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAI7C,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC,CAAA;AAeD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAqC;IAErD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAI1D,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIlC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIlD,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;CAGvC;AAID,qBAAa,eAAe;IAMxB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,IAAI,CAAC;IACb,OAAO,CAAC,QAAQ,CAAC;IARnB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,SAAS,CAA8C;gBAGrD,OAAO,EAAE,aAAa,EACtB,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE,WAAW,YAAA,EAClB,QAAQ,CAAC,EAAE,gBAAgB,YAAA;IAKrC,IAAI,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAEtC;IAEK,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC/C,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAK3B,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI9B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQvC,aAAa,IAAI,IAAI;YASP,cAAc;YAmBd,YAAY;YASZ,YAAY;YAgBZ,aAAa;YAcb,WAAW;YAWX,WAAW;YAKX,UAAU;IAOxB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,IAAI;CAGb"}
@@ -0,0 +1,211 @@
1
+ // ─── Helper ─────────────────────────────────────────────────────────────────
2
+ function toSummary(task) {
3
+ const summary = { id: task.id };
4
+ if (task.type !== undefined)
5
+ summary.type = task.type;
6
+ if (task.tags !== undefined)
7
+ summary.tags = task.tags;
8
+ if (task.cost !== undefined)
9
+ summary.cost = task.cost;
10
+ if (task.params !== undefined)
11
+ summary.params = task.params;
12
+ return summary;
13
+ }
14
+ // ─── WorkerWSRegistry ──────────────────────────────────────────────────────
15
+ export class WorkerWSRegistry {
16
+ handlers = new Map();
17
+ register(workerId, handler) {
18
+ this.handlers.set(workerId, handler);
19
+ }
20
+ unregister(workerId) {
21
+ this.handlers.delete(workerId);
22
+ }
23
+ get(workerId) {
24
+ return this.handlers.get(workerId);
25
+ }
26
+ getAll() {
27
+ return this.handlers;
28
+ }
29
+ }
30
+ // ─── WorkerWSHandler ────────────────────────────────────────────────────────
31
+ export class WorkerWSHandler {
32
+ manager;
33
+ ws;
34
+ auth;
35
+ registry;
36
+ workerId = null;
37
+ pendingOffers = new Map();
38
+ pingTimer = null;
39
+ constructor(manager, ws, auth, registry) {
40
+ this.manager = manager;
41
+ this.ws = ws;
42
+ this.auth = auth;
43
+ this.registry = registry;
44
+ }
45
+ // ─── Public API ─────────────────────────────────────────────────────────
46
+ get registeredWorkerId() {
47
+ return this.workerId;
48
+ }
49
+ async handleMessage(raw) {
50
+ let msg;
51
+ try {
52
+ msg = JSON.parse(raw);
53
+ }
54
+ catch {
55
+ this.send({ type: 'error', message: 'Invalid JSON' });
56
+ return;
57
+ }
58
+ const type = msg.type;
59
+ switch (type) {
60
+ case 'register':
61
+ await this.handleRegister(msg);
62
+ break;
63
+ case 'update':
64
+ await this.handleUpdate(msg);
65
+ break;
66
+ case 'accept':
67
+ await this.handleAccept(msg);
68
+ break;
69
+ case 'decline':
70
+ await this.handleDecline(msg);
71
+ break;
72
+ case 'claim':
73
+ await this.handleClaim(msg);
74
+ break;
75
+ case 'drain':
76
+ await this.handleDrain();
77
+ break;
78
+ case 'pong':
79
+ await this.handlePong();
80
+ break;
81
+ default:
82
+ this.send({ type: 'error', message: `Unknown message type: ${String(type)}` });
83
+ break;
84
+ }
85
+ }
86
+ offerTask(task) {
87
+ this.pendingOffers.set(task.id, task);
88
+ this.send({ type: 'offer', taskId: task.id, task: toSummary(task) });
89
+ }
90
+ broadcastAvailable(task) {
91
+ this.send({ type: 'available', taskId: task.id, task: toSummary(task) });
92
+ }
93
+ async handleDisconnect() {
94
+ this.stopPingTimer();
95
+ if (this.workerId) {
96
+ this.registry?.unregister(this.workerId);
97
+ await this.manager.unregisterWorker(this.workerId);
98
+ }
99
+ }
100
+ stopPingTimer() {
101
+ if (this.pingTimer) {
102
+ clearInterval(this.pingTimer);
103
+ this.pingTimer = null;
104
+ }
105
+ }
106
+ // ─── Message Handlers ──────────────────────────────────────────────────
107
+ async handleRegister(msg) {
108
+ if (typeof msg.workerId === 'string' && this.auth?.workerId && this.auth.workerId !== msg.workerId) {
109
+ this.send({ type: 'error', message: 'Forbidden: worker ID mismatch', code: 'FORBIDDEN' });
110
+ return;
111
+ }
112
+ const reg = {
113
+ matchRule: msg.matchRule ?? {},
114
+ capacity: msg.capacity ?? 10,
115
+ connectionMode: 'websocket',
116
+ };
117
+ if (typeof msg.workerId === 'string')
118
+ reg.id = msg.workerId;
119
+ if (typeof msg.weight === 'number')
120
+ reg.weight = msg.weight;
121
+ const worker = await this.manager.registerWorker(reg);
122
+ this.workerId = worker.id;
123
+ this.registry?.register(worker.id, this);
124
+ this.send({ type: 'registered', workerId: worker.id });
125
+ this.startPingTimer();
126
+ }
127
+ async handleUpdate(msg) {
128
+ if (!this.requireRegistered())
129
+ return;
130
+ const update = {};
131
+ if (typeof msg.weight === 'number')
132
+ update.weight = msg.weight;
133
+ if (typeof msg.capacity === 'number')
134
+ update.capacity = msg.capacity;
135
+ if (msg.matchRule !== undefined)
136
+ update.matchRule = msg.matchRule;
137
+ await this.manager.updateWorker(this.workerId, update);
138
+ }
139
+ async handleAccept(msg) {
140
+ if (!this.requireRegistered())
141
+ return;
142
+ if (typeof msg.taskId !== 'string') {
143
+ this.send({ type: 'error', message: 'taskId is required and must be a string', code: 'INVALID_MESSAGE' });
144
+ return;
145
+ }
146
+ const taskId = msg.taskId;
147
+ const result = await this.manager.claimTask(taskId, this.workerId);
148
+ if (result.success) {
149
+ this.pendingOffers.delete(taskId);
150
+ this.send({ type: 'assigned', taskId });
151
+ }
152
+ else {
153
+ this.send({ type: 'error', message: result.reason, taskId });
154
+ }
155
+ }
156
+ async handleDecline(msg) {
157
+ if (!this.requireRegistered())
158
+ return;
159
+ if (typeof msg.taskId !== 'string') {
160
+ this.send({ type: 'error', message: 'taskId is required and must be a string', code: 'INVALID_MESSAGE' });
161
+ return;
162
+ }
163
+ const taskId = msg.taskId;
164
+ this.pendingOffers.delete(taskId);
165
+ const opts = {};
166
+ if (typeof msg.blacklist === 'boolean')
167
+ opts.blacklist = msg.blacklist;
168
+ await this.manager.declineTask(taskId, this.workerId, opts);
169
+ this.send({ type: 'declined', taskId });
170
+ }
171
+ async handleClaim(msg) {
172
+ if (!this.requireRegistered())
173
+ return;
174
+ if (typeof msg.taskId !== 'string') {
175
+ this.send({ type: 'error', message: 'taskId is required and must be a string', code: 'INVALID_MESSAGE' });
176
+ return;
177
+ }
178
+ const taskId = msg.taskId;
179
+ const result = await this.manager.claimTask(taskId, this.workerId);
180
+ this.send({ type: 'claimed', taskId, success: result.success });
181
+ }
182
+ async handleDrain() {
183
+ if (!this.requireRegistered())
184
+ return;
185
+ await this.manager.updateWorker(this.workerId, { status: 'draining' });
186
+ }
187
+ async handlePong() {
188
+ if (!this.requireRegistered())
189
+ return;
190
+ await this.manager.heartbeat(this.workerId);
191
+ }
192
+ // ─── Helpers ──────────────────────────────────────────────────────────
193
+ startPingTimer() {
194
+ this.stopPingTimer();
195
+ const intervalMs = this.manager.heartbeatIntervalMs;
196
+ this.pingTimer = setInterval(() => {
197
+ this.send({ type: 'ping' });
198
+ }, intervalMs);
199
+ }
200
+ requireRegistered() {
201
+ if (!this.workerId) {
202
+ this.send({ type: 'error', message: 'Not registered' });
203
+ return false;
204
+ }
205
+ return true;
206
+ }
207
+ send(data) {
208
+ this.ws.send(JSON.stringify(data));
209
+ }
210
+ }
211
+ //# sourceMappingURL=worker-ws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-ws.js","sourceRoot":"","sources":["../../src/routes/worker-ws.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Hono } from 'hono';
2
+ import type { WorkerManager, TaskEngine } from '@taskcast/core';
3
+ export { WorkerWSHandler, WorkerWSRegistry } from './worker-ws.js';
4
+ export type { WSLike, TaskSummary } from './worker-ws.js';
5
+ export declare function createWorkersRouter(manager: WorkerManager, engine: TaskEngine): Hono;
6
+ //# sourceMappingURL=workers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers.d.ts","sourceRoot":"","sources":["../../src/routes/workers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAKhC,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE/D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAClE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AA4FzD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA+EpF"}