@nubisco/openbridge 1.4.2 → 1.5.2

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.
Files changed (42) hide show
  1. package/dist/__tests__/mcp.test.d.ts +2 -0
  2. package/dist/__tests__/mcp.test.d.ts.map +1 -0
  3. package/dist/__tests__/mcp.test.js +478 -0
  4. package/dist/__tests__/mcp.test.js.map +1 -0
  5. package/dist/access.d.ts +148 -0
  6. package/dist/access.d.ts.map +1 -0
  7. package/dist/access.js +401 -0
  8. package/dist/access.js.map +1 -0
  9. package/dist/auth.d.ts +9 -1
  10. package/dist/auth.d.ts.map +1 -1
  11. package/dist/auth.js +11 -0
  12. package/dist/auth.js.map +1 -1
  13. package/dist/index.js +8 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/mcp/index.d.ts +54 -0
  16. package/dist/mcp/index.d.ts.map +1 -0
  17. package/dist/mcp/index.js +181 -0
  18. package/dist/mcp/index.js.map +1 -0
  19. package/dist/mcp/oauth.d.ts +35 -0
  20. package/dist/mcp/oauth.d.ts.map +1 -0
  21. package/dist/mcp/oauth.js +323 -0
  22. package/dist/mcp/oauth.js.map +1 -0
  23. package/dist/mcp/tools.d.ts +39 -0
  24. package/dist/mcp/tools.d.ts.map +1 -0
  25. package/dist/mcp/tools.js +432 -0
  26. package/dist/mcp/tools.js.map +1 -0
  27. package/dist/server.d.ts.map +1 -1
  28. package/dist/server.js +67 -114
  29. package/dist/server.js.map +1 -1
  30. package/dist/services/bridge.d.ts +102 -0
  31. package/dist/services/bridge.d.ts.map +1 -0
  32. package/dist/services/bridge.js +191 -0
  33. package/dist/services/bridge.js.map +1 -0
  34. package/dist/token-cli.d.ts +10 -0
  35. package/dist/token-cli.d.ts.map +1 -0
  36. package/dist/token-cli.js +76 -0
  37. package/dist/token-cli.js.map +1 -0
  38. package/package.json +6 -5
  39. package/ui-dist/assets/{index-CL7JhxrS.css → index-9bWNU3bq.css} +2 -2
  40. package/ui-dist/assets/index-DIyesg4J.js +109 -0
  41. package/ui-dist/index.html +2 -2
  42. package/ui-dist/assets/index-Rvs_bO_V.js +0 -109
@@ -0,0 +1,432 @@
1
+ /**
2
+ * The MCP tools. Each one is a record: name, description, zod schema, the
3
+ * scope it needs, and a handler that calls the same service functions as the
4
+ * REST routes (services/bridge.ts). The JSON Schema in tools/list is generated
5
+ * from the zod schema, never written by hand.
6
+ *
7
+ * Designed for an agent's context window, not as a mirror of the REST API:
8
+ * `overview` orients in one call, reads are compact unless asked for more, and
9
+ * history comes back with its summary already computed, so the model reports
10
+ * numbers the code worked out rather than doing arithmetic over raw points.
11
+ */
12
+ import { z } from 'zod';
13
+ import os from 'os';
14
+ import { ServiceError, controlDevice, deviceControls, deviceEvents, deviceMetrics, deviceObservations, getDevice, listAccessories, listDevices, readLogs, setCharacteristic, } from '../services/bridge.js';
15
+ import { CONTROL_SCOPE, READ_SCOPE } from '../access.js';
16
+ import { OPENBRIDGE_VERSION } from '../version.js';
17
+ /** A refusal the model must read: becomes `isError: true`, not a protocol error. */
18
+ export class Refusal extends Error {
19
+ }
20
+ export function isRefusal(err) {
21
+ return err instanceof Refusal || err instanceof ServiceError;
22
+ }
23
+ export function toolInputSchema(tool) {
24
+ const schema = z.toJSONSchema(tool.schema, { io: 'input' });
25
+ delete schema.$schema;
26
+ return schema;
27
+ }
28
+ // ── Compact shapes ──────────────────────────────────────────────────────────
29
+ /** Telemetry without bookkeeping keys, with long values cut so one device cannot flood the context. */
30
+ function compactTelemetry(t) {
31
+ const out = {};
32
+ for (const [k, v] of Object.entries(t)) {
33
+ if (k.startsWith('_'))
34
+ continue;
35
+ if (typeof v === 'string')
36
+ out[k] = v.length > 160 ? `${v.slice(0, 160)}…` : v;
37
+ else if (v !== null && typeof v === 'object') {
38
+ const s = JSON.stringify(v);
39
+ out[k] = s.length > 240 ? `${s.slice(0, 240)}…` : v;
40
+ }
41
+ else
42
+ out[k] = v;
43
+ }
44
+ return out;
45
+ }
46
+ function compactDevice(d, ctx) {
47
+ return {
48
+ id: d.id,
49
+ name: d.name,
50
+ type: d.homekitType ?? d.widgetType,
51
+ plugin: d.pluginId,
52
+ health: d.health.status,
53
+ ...(d.health.reason ? { health_reason: d.health.reason } : {}),
54
+ last_seen: d.health.lastSeen,
55
+ telemetry: compactTelemetry(d.telemetry),
56
+ ...(d.metrics?.length ? { metrics: d.metrics.map((m) => m.key) } : {}),
57
+ ...(() => {
58
+ const controls = deviceControls(ctx.bridge, d.id)
59
+ .filter((c) => !c.restricted)
60
+ .map((c) => c.id);
61
+ return controls.length ? { controls } : {};
62
+ })(),
63
+ };
64
+ }
65
+ /** HomeKit service and characteristic names that say nothing about the device's state. */
66
+ const NOISE_SERVICES = new Set(['AccessoryInformation', 'Accessory Information', 'ProtocolInformation']);
67
+ const NOISE_CHARS = new Set(['Name', 'Identify', 'ConfiguredName']);
68
+ function compactAccessory(a) {
69
+ const state = {};
70
+ for (const s of a.services) {
71
+ if (NOISE_SERVICES.has(s.name) || NOISE_SERVICES.has(s.displayName))
72
+ continue;
73
+ for (const c of s.characteristics) {
74
+ if (NOISE_CHARS.has(c.name))
75
+ continue;
76
+ state[`${s.displayName || s.name}.${c.name}`] = c.value;
77
+ }
78
+ }
79
+ return { uuid: a.uuid, name: a.displayName, reachable: a.reachable, state };
80
+ }
81
+ // ── Time ────────────────────────────────────────────────────────────────────
82
+ const DURATION = /^(\d+(?:\.\d+)?)\s*(m|h|d|w|y)$/i;
83
+ const UNIT_SECONDS = { m: 60, h: 3600, d: 86400, w: 7 * 86400, y: 365 * 86400 };
84
+ function parseDuration(s) {
85
+ const m = DURATION.exec(s.trim());
86
+ if (!m)
87
+ throw new Refusal(`"${s}" is not a duration. Use a number and a unit: 90m, 24h, 7d, 4w, 1y`);
88
+ return Math.round(Number(m[1]) * UNIT_SECONDS[m[2].toLowerCase()]);
89
+ }
90
+ function parseInstant(s, field) {
91
+ const ms = Date.parse(s);
92
+ if (Number.isNaN(ms))
93
+ throw new Refusal(`${field}: "${s}" is not an ISO 8601 date or time`);
94
+ return Math.floor(ms / 1000);
95
+ }
96
+ const isoOf = (t) => new Date(t * 1000).toISOString();
97
+ /** What a person asks about a series, worked out here so the model never has to. */
98
+ function summarise(points, kind) {
99
+ const valued = points.filter((p) => typeof p.value === 'number');
100
+ if (valued.length === 0)
101
+ return { count: 0 };
102
+ const first = valued[0];
103
+ const last = valued[valued.length - 1];
104
+ let lo = first;
105
+ let hi = first;
106
+ let sum = 0;
107
+ for (const p of valued) {
108
+ const pMin = p.min ?? p.value;
109
+ const pMax = p.max ?? p.value;
110
+ if (pMin < (lo.min ?? lo.value))
111
+ lo = p;
112
+ if (pMax > (hi.max ?? hi.value))
113
+ hi = p;
114
+ sum += p.value;
115
+ }
116
+ return {
117
+ count: valued.length,
118
+ first: { at: isoOf(first.t), value: first.value },
119
+ last: { at: isoOf(last.t), value: last.value },
120
+ min: { at: isoOf(lo.t), value: lo.min ?? lo.value },
121
+ max: { at: isoOf(hi.t), value: hi.max ?? hi.value },
122
+ ...(kind === 'cumulative' ? { delta: last.value - first.value } : { mean: sum / valued.length }),
123
+ };
124
+ }
125
+ // ── Write replay ────────────────────────────────────────────────────────────
126
+ /**
127
+ * Results of control ops, by caller and op_id, so a retry after a timeout gets
128
+ * the first answer back instead of pressing the gate button a second time.
129
+ */
130
+ const REPLAY_TTL_MS = 24 * 60 * 60 * 1000;
131
+ const REPLAY_MAX = 5000;
132
+ const replays = new Map();
133
+ function replayed(key) {
134
+ const hit = replays.get(key);
135
+ if (!hit)
136
+ return undefined;
137
+ if (Date.now() - hit.at > REPLAY_TTL_MS) {
138
+ replays.delete(key);
139
+ return undefined;
140
+ }
141
+ return hit.result;
142
+ }
143
+ function remember(key, result) {
144
+ if (replays.size >= REPLAY_MAX) {
145
+ const cutoff = Date.now() - REPLAY_TTL_MS;
146
+ for (const [k, v] of replays)
147
+ if (v.at < cutoff || replays.size >= REPLAY_MAX)
148
+ replays.delete(k);
149
+ }
150
+ replays.set(key, { at: Date.now(), result });
151
+ }
152
+ /** For tests: forget every remembered op. */
153
+ export function clearReplays() {
154
+ replays.clear();
155
+ }
156
+ // ── Schemas ─────────────────────────────────────────────────────────────────
157
+ const deviceId = z.string().min(1).describe('Device id, as `overview` lists it');
158
+ const overviewArgs = z.object({
159
+ detail: z
160
+ .enum(['compact', 'full'])
161
+ .default('compact')
162
+ .describe('compact (default) is enough to answer most questions. full adds descriptors and every characteristic'),
163
+ });
164
+ const deviceGetArgs = z.object({ device: deviceId });
165
+ const historyArgs = z.object({
166
+ device: deviceId,
167
+ metric: z
168
+ .string()
169
+ .optional()
170
+ .describe('Metric key from the device (see `overview` or `device_get`). Omit to list what the device records'),
171
+ last: z
172
+ .string()
173
+ .optional()
174
+ .describe('Window ending now (or at `to`): 90m, 24h, 7d, 4w, 1y. Default 24h. Ignored when `from` is set'),
175
+ from: z.string().optional().describe('ISO 8601 start, e.g. 2026-10-01 or 2026-10-01T06:00:00Z'),
176
+ to: z.string().optional().describe('ISO 8601 end. Default now'),
177
+ max_points: z
178
+ .number()
179
+ .int()
180
+ .min(0)
181
+ .max(2000)
182
+ .default(120)
183
+ .describe('Most points to return (default 120). 0 returns the summary only'),
184
+ });
185
+ const eventsArgs = z.object({
186
+ device: deviceId,
187
+ limit: z.number().int().min(1).max(500).default(50),
188
+ since: z.string().optional().describe('ISO 8601: only events after this'),
189
+ });
190
+ const observationsArgs = z.object({
191
+ device: deviceId,
192
+ limit: z.number().int().min(1).max(1000).default(50),
193
+ });
194
+ const logsArgs = z.object({
195
+ plugin: z.string().optional().describe('Only this plugin (or "system" for the daemon itself)'),
196
+ level: z.enum(['debug', 'info', 'warn', 'error']).optional().describe('This level and above'),
197
+ contains: z.string().optional().describe('Case-insensitive text the message must contain'),
198
+ since: z.string().optional().describe('ISO 8601: only entries after this'),
199
+ limit: z.number().int().min(1).max(1000).default(100).describe('Newest entries kept (default 100)'),
200
+ });
201
+ const opId = z.string().min(1).max(200).describe('Client id for this op. Re-sending it replays the first result');
202
+ const controlOp = z.union([
203
+ z.object({
204
+ op_id: opId,
205
+ device: deviceId,
206
+ control: z.string().min(1).describe('Control id from the device'),
207
+ value: z.unknown().optional().describe('What the control takes: true/false for a switch, a number for a setpoint'),
208
+ }),
209
+ z.object({
210
+ op_id: opId,
211
+ accessory: z.string().min(1).describe('Accessory uuid from `overview`'),
212
+ service: z.string().min(1).describe('Service name or uuid, e.g. "Switch"'),
213
+ characteristic: z.string().min(1).describe('Characteristic name or uuid, e.g. "On"'),
214
+ value: z.unknown(),
215
+ }),
216
+ ]);
217
+ const controlArgs = z.object({ ops: z.array(controlOp).min(1).max(100) });
218
+ // ── Tools ───────────────────────────────────────────────────────────────────
219
+ function tool(t) {
220
+ return { write: false, ...t, handler: t.handler };
221
+ }
222
+ export const MCP_TOOLS = [
223
+ tool({
224
+ name: 'overview',
225
+ description: 'Start here. One call returns the bridge, its plugins, every device with its current telemetry, health and ' +
226
+ 'metric and control ids, and the HomeKit accessories of Homebridge plugins with their current state. ' +
227
+ 'Health is ok, stale (stopped reporting) or unknown (never reported). `url_templates.device` links a device page.',
228
+ schema: overviewArgs,
229
+ scope: READ_SCOPE,
230
+ handler: (args, ctx) => {
231
+ const devices = listDevices(ctx.bridge);
232
+ const accessories = listAccessories(ctx.bridge);
233
+ const counts = new Map();
234
+ for (const d of devices)
235
+ counts.set(d.pluginId, (counts.get(d.pluginId) ?? 0) + 1);
236
+ return {
237
+ bridge: {
238
+ name: ctx.bridgeName(),
239
+ version: OPENBRIDGE_VERSION,
240
+ host: os.hostname(),
241
+ uptime_seconds: Math.round(process.uptime()),
242
+ now: new Date().toISOString(),
243
+ },
244
+ url_templates: { device: `${ctx.origin}/devices/{id}` },
245
+ plugins: ctx.bridge.registry.getAll().map((p) => ({
246
+ id: p.manifest.name,
247
+ status: p.status,
248
+ ...(p.disabled ? { disabled: true } : {}),
249
+ ...(p.source ? { source: p.source } : {}),
250
+ devices: counts.get(p.manifest.name) ?? 0,
251
+ })),
252
+ devices: args.detail === 'full'
253
+ ? devices.map((d) => ({ ...d, controls: deviceControls(ctx.bridge, d.id) }))
254
+ : devices.map((d) => compactDevice(d, ctx)),
255
+ accessories: args.detail === 'full' ? accessories : accessories.map(compactAccessory),
256
+ };
257
+ },
258
+ }),
259
+ tool({
260
+ name: 'device_get',
261
+ description: 'One device in full: its descriptor, all current telemetry, health, the metrics it records (with units and ' +
262
+ 'whether each is instant or cumulative), its controls and one-shot actions (with any confirmation text the ' +
263
+ 'plugin wants shown first), the observation form it offers, and its 10 most recent events.',
264
+ schema: deviceGetArgs,
265
+ scope: READ_SCOPE,
266
+ handler: (args, ctx) => {
267
+ const device = getDevice(ctx.bridge, args.device);
268
+ let recentEvents = [];
269
+ try {
270
+ recentEvents = deviceEvents(ctx.bridge, args.device, 10);
271
+ }
272
+ catch {
273
+ // The event log is optional; a device is still worth describing without it.
274
+ }
275
+ let observationCount = null;
276
+ try {
277
+ observationCount = deviceObservations(ctx.bridge, args.device, 1).total;
278
+ }
279
+ catch {
280
+ // Same: optional.
281
+ }
282
+ return {
283
+ ...device,
284
+ url: `${ctx.origin}/devices/${encodeURIComponent(device.id)}`,
285
+ controls: deviceControls(ctx.bridge, device.id),
286
+ observation_count: observationCount,
287
+ recent_events: recentEvents,
288
+ };
289
+ },
290
+ }),
291
+ tool({
292
+ name: 'device_history',
293
+ description: 'Recorded history of one metric. Pick the window with `last` (24h, 7d...) or `from`/`to` in ISO 8601. ' +
294
+ 'Returns a computed summary (first, last, min and max with when they happened, plus mean for instant metrics ' +
295
+ 'or delta for cumulative ones such as energy, where delta is the amount used in the window) and up to ' +
296
+ '`max_points` points as [unix_seconds, value] or [unix_seconds, mean, min, max]. Quote the summary rather ' +
297
+ 'than recomputing it. Storage keeps 10 s detail for 48 h, 1 min for 30 days, 5 min for a year and hourly ' +
298
+ 'for five years; `resolution_seconds` says which answered. Without `metric`, lists what the device records.',
299
+ schema: historyArgs,
300
+ scope: READ_SCOPE,
301
+ handler: (args, ctx) => {
302
+ const to = args.to ? parseInstant(args.to, 'to') : Math.floor(Date.now() / 1000);
303
+ const from = args.from ? parseInstant(args.from, 'from') : to - parseDuration(args.last ?? '24h');
304
+ if (!args.metric) {
305
+ const { metrics } = deviceMetrics(ctx.bridge, args.device, {});
306
+ return { device: args.device, metrics };
307
+ }
308
+ const result = deviceMetrics(ctx.bridge, args.device, {
309
+ metric: args.metric,
310
+ from,
311
+ to,
312
+ maxPoints: Math.max(args.max_points, 10),
313
+ });
314
+ const s = result.series;
315
+ const withExtremes = s.points.some((p) => p.min != null || p.max != null);
316
+ return {
317
+ device: args.device,
318
+ metric: s.metric,
319
+ from: isoOf(s.from),
320
+ to: isoOf(s.to),
321
+ resolution_seconds: s.resolution,
322
+ summary: summarise(s.points, s.metric.kind),
323
+ ...(args.max_points === 0
324
+ ? {}
325
+ : {
326
+ points: s.points
327
+ .slice(-args.max_points)
328
+ .map((p) => (withExtremes ? [p.t, p.value, p.min ?? null, p.max ?? null] : [p.t, p.value])),
329
+ }),
330
+ };
331
+ },
332
+ }),
333
+ tool({
334
+ name: 'device_events',
335
+ description: 'What happened to a device and what caused it, newest first: a gate opening, a command, a fault. ' +
336
+ 'Each event has `at`, `type`, a one-line `message` and, when known, `source` (homekit, schedule, device...).',
337
+ schema: eventsArgs,
338
+ scope: READ_SCOPE,
339
+ handler: (args, ctx) => {
340
+ const since = args.since ? new Date(parseInstant(args.since, 'since') * 1000).toISOString() : null;
341
+ const events = deviceEvents(ctx.bridge, args.device, args.limit);
342
+ return { device: args.device, events: since ? events.filter((e) => e.at > since) : events };
343
+ },
344
+ }),
345
+ tool({
346
+ name: 'device_observations',
347
+ description: 'What people reported about a room a device controls but cannot measure (for a heat pump: the room ' +
348
+ 'temperature and whether it felt cold, ok or warm), newest first, each with the machine state captured ' +
349
+ 'when it was filed. `total` is how many exist.',
350
+ schema: observationsArgs,
351
+ scope: READ_SCOPE,
352
+ handler: (args, ctx) => ({ device: args.device, ...deviceObservations(ctx.bridge, args.device, args.limit) }),
353
+ }),
354
+ tool({
355
+ name: 'logs',
356
+ description: 'Recent daemon and plugin log entries, oldest first, from the in-memory buffer (the last 1000 entries ' +
357
+ 'since the daemon started). Filter by plugin, minimum level, text and time.',
358
+ schema: logsArgs,
359
+ scope: READ_SCOPE,
360
+ handler: (args) => ({
361
+ entries: readLogs({
362
+ plugin: args.plugin,
363
+ limit: args.limit,
364
+ minLevel: args.level,
365
+ contains: args.contains,
366
+ since: args.since ? new Date(parseInstant(args.since, 'since') * 1000).toISOString() : undefined,
367
+ }).map((e) => ({ at: e.timestamp, level: e.level, plugin: e.plugin, message: e.message })),
368
+ }),
369
+ }),
370
+ tool({
371
+ name: 'device_control',
372
+ description: 'Operates devices. These move physical things: confirm with the person before opening, unlocking or ' +
373
+ 'switching anything they did not explicitly ask for, and before any action whose `confirm` text ' +
374
+ '`device_get` shows. Up to 100 ops, run in order, each answered on its own with `ok` or an `error`. ' +
375
+ 'An op is either a plugin control ({device, control, value}, ids from `device_get`) or a HomeKit ' +
376
+ 'characteristic of a Homebridge accessory ({accessory, service, characteristic, value}, names as ' +
377
+ '`overview` shows them, e.g. service "Switch", characteristic "On"). Re-sending an op_id returns the ' +
378
+ 'first result without running it again. Needs a token with control access.',
379
+ schema: controlArgs,
380
+ scope: CONTROL_SCOPE,
381
+ write: true,
382
+ handler: async (args, ctx) => {
383
+ const results = [];
384
+ for (const op of args.ops) {
385
+ const key = `${ctx.credential.id}\u0000${op.op_id}`;
386
+ const earlier = replayed(key);
387
+ if (earlier !== undefined) {
388
+ results.push({ ...earlier, replayed: true });
389
+ continue;
390
+ }
391
+ let result;
392
+ try {
393
+ if ('device' in op) {
394
+ await controlDevice(ctx.bridge, op.device, op.control, op.value);
395
+ }
396
+ else {
397
+ const target = resolveCharacteristic(ctx, op.accessory, op.service, op.characteristic);
398
+ setCharacteristic(ctx.bridge, op.accessory, target.service, target.characteristic, op.value);
399
+ }
400
+ result = { op_id: op.op_id, ok: true };
401
+ }
402
+ catch (err) {
403
+ if (!isRefusal(err))
404
+ throw err;
405
+ result = { op_id: op.op_id, ok: false, error: err.message };
406
+ }
407
+ remember(key, result);
408
+ results.push(result);
409
+ }
410
+ return { results };
411
+ },
412
+ }),
413
+ ];
414
+ /** Service and characteristic by uuid, display name or name. Ambiguity is refused, never guessed. */
415
+ function resolveCharacteristic(ctx, accessoryUuid, service, characteristic) {
416
+ const acc = listAccessories(ctx.bridge).find((a) => a.uuid === accessoryUuid);
417
+ if (!acc)
418
+ throw new Refusal(`Accessory '${accessoryUuid}' not found`);
419
+ const svcMatches = acc.services.filter((s) => s.uuid === service || s.displayName === service || s.name === service);
420
+ if (svcMatches.length === 0)
421
+ throw new Refusal(`Accessory '${acc.displayName}' has no service '${service}'`);
422
+ if (svcMatches.length > 1) {
423
+ throw new Refusal(`'${service}' matches ${svcMatches.length} services on '${acc.displayName}'; pass one of their uuids: ` +
424
+ svcMatches.map((s) => s.uuid).join(', '));
425
+ }
426
+ const svc = svcMatches[0];
427
+ const ch = svc.characteristics.find((c) => c.uuid === characteristic || c.name === characteristic);
428
+ if (!ch)
429
+ throw new Refusal(`Service '${svc.displayName || svc.name}' has no characteristic '${characteristic}'`);
430
+ return { service: svc.uuid, characteristic: ch.uuid };
431
+ }
432
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAa7B,OAAO,KAAK,EAAE,cAAc,EAA0C,MAAM,0BAA0B,CAAA;AAItG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAA;AASjF,OAAO,EAA4B,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAwC7B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAuB,MAAM,mBAAmB,CAAA;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,2BAA2B,CAAA;AAElC,MAAM,WAAW,OAAO;IACtB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAWD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,aAAa,GAAG,IAAW,EACnC,OAAO,GAAE,OAAO,GAAG,IAAW,EAC9B,kBAAkB,GAAE,MAAM,EAAO,EACjC,mBAAmB,GAAE,GAAG,CAAC,MAAM,CAAa,EAC5C,QAAQ,GAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAa,EAC3E,kBAAkB,GAAE,GAAG,CAAC,MAAM,CAAa,EAC3C,iBAAiB,GAAE,iBAAiB,GAAG,IAAW,EAClD,mBAAmB,GAAE,mBAAmB,GAAG,IAAW;AACtD;;;;GAIG;AACH,sBAAsB,GAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC,GAAG,IAAW;AAC5E,4EAA4E;AAC5E,mBAAmB,GAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAW;AACxE,6EAA6E;AAC7E,YAAY,GAAE,cAAc,GAAG,IAAW;AAC1C,+EAA+E;AAC/E,YAAY,GAAE,gBAAgB,GAAG,IAAW;AAC5C;;;;;GAKG;AACH,kBAAkB,GAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,GAAG,IAAW,sSAwzD9F"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAa7B,OAAO,KAAK,EAAE,cAAc,EAAU,MAAM,0BAA0B,CAAA;AAGtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAA;AAuBjF,OAAO,EAA4B,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAwC7B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAuB,MAAM,mBAAmB,CAAA;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,2BAA2B,CAAA;AAElC,MAAM,WAAW,OAAO;IACtB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,aAAa,GAAG,IAAW,EACnC,OAAO,GAAE,OAAO,GAAG,IAAW,EAC9B,kBAAkB,GAAE,MAAM,EAAO,EACjC,mBAAmB,GAAE,GAAG,CAAC,MAAM,CAAa,EAC5C,QAAQ,GAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAa,EAC3E,kBAAkB,GAAE,GAAG,CAAC,MAAM,CAAa,EAC3C,iBAAiB,GAAE,iBAAiB,GAAG,IAAW,EAClD,mBAAmB,GAAE,mBAAmB,GAAG,IAAW;AACtD;;;;GAIG;AACH,sBAAsB,GAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC,GAAG,IAAW;AAC5E,4EAA4E;AAC5E,mBAAmB,GAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAW;AACxE,6EAA6E;AAC7E,YAAY,GAAE,cAAc,GAAG,IAAW;AAC1C,+EAA+E;AAC/E,YAAY,GAAE,gBAAgB,GAAG,IAAW;AAC5C;;;;;GAKG;AACH,kBAAkB,GAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,GAAG,IAAW,sSAwwD9F"}