borgmcp-server 0.1.1 → 0.1.4

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 (48) hide show
  1. package/README.md +69 -22
  2. package/dist/cli.js +62 -11
  3. package/dist/cli.js.map +1 -1
  4. package/dist/coordination-api.d.ts +2 -1
  5. package/dist/coordination-api.js +232 -18
  6. package/dist/coordination-api.js.map +1 -1
  7. package/dist/credentials.d.ts +10 -2
  8. package/dist/credentials.js +44 -6
  9. package/dist/credentials.js.map +1 -1
  10. package/dist/debug-log.d.ts +77 -0
  11. package/dist/debug-log.js +125 -0
  12. package/dist/debug-log.js.map +1 -0
  13. package/dist/https-server.d.ts +3 -0
  14. package/dist/https-server.js +80 -4
  15. package/dist/https-server.js.map +1 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/migrations.d.ts +4 -0
  18. package/dist/migrations.js +71 -0
  19. package/dist/migrations.js.map +1 -1
  20. package/dist/operator-error.d.ts +2 -1
  21. package/dist/operator-error.js +23 -5
  22. package/dist/operator-error.js.map +1 -1
  23. package/dist/role-section.d.ts +14 -0
  24. package/dist/role-section.js +87 -0
  25. package/dist/role-section.js.map +1 -0
  26. package/dist/service.d.ts +10 -3
  27. package/dist/service.js +218 -15
  28. package/dist/service.js.map +1 -1
  29. package/dist/start-options.d.ts +5 -1
  30. package/dist/start-options.js +17 -3
  31. package/dist/start-options.js.map +1 -1
  32. package/dist/store.d.ts +65 -1
  33. package/dist/store.js +398 -26
  34. package/dist/store.js.map +1 -1
  35. package/npm-shrinkwrap.json +2 -2
  36. package/package.json +1 -1
  37. package/src/cli.ts +61 -11
  38. package/src/coordination-api.ts +236 -14
  39. package/src/credentials.ts +71 -5
  40. package/src/debug-log.ts +165 -0
  41. package/src/https-server.ts +75 -2
  42. package/src/index.ts +1 -1
  43. package/src/migrations.ts +74 -0
  44. package/src/operator-error.ts +40 -6
  45. package/src/role-section.ts +108 -0
  46. package/src/service.ts +239 -18
  47. package/src/start-options.ts +21 -4
  48. package/src/store.ts +462 -28
@@ -1,12 +1,16 @@
1
+ import { randomUUID } from "node:crypto";
1
2
  import { assertServerDerivedPrincipal } from "./principal.js";
2
- import { CursorExpiredError, AttachConflictError, AccessDeniedError, CreateCubeConflictError, ScopedStoreError, StorageCapacityError, } from "./store.js";
3
+ import { disabledDebugLogger } from "./debug-log.js";
4
+ import { CursorExpiredError, AttachConflictError, AccessDeniedError, CreateCubeConflictError, DefaultRoleRequiredError, RoleConflictError, RoleSectionConflictError, ScopedStoreError, StorageCapacityError, } from "./store.js";
3
5
  export class CoordinationApi {
4
6
  #runtime;
5
7
  #authority;
8
+ #debugLogger;
6
9
  #replayBarrier;
7
- constructor(runtime, authority) {
10
+ constructor(runtime, authority, debugLogger = disabledDebugLogger) {
8
11
  this.#runtime = runtime;
9
12
  this.#authority = authority;
13
+ this.#debugLogger = debugLogger;
10
14
  }
11
15
  armReplayTransition() {
12
16
  let markReached;
@@ -46,6 +50,7 @@ export class CoordinationApi {
46
50
  token: attachment.credential,
47
51
  expires_at: attachment.expiresAt,
48
52
  generation: attachment.generation,
53
+ posture: attachment.posture,
49
54
  },
50
55
  reattached: attachment.reattached,
51
56
  });
@@ -113,15 +118,20 @@ export class CoordinationApi {
113
118
  throw error;
114
119
  }
115
120
  }
121
+ const roleMatch = /^\/api\/cubes\/([0-9a-f-]{36})\/roles\/([0-9a-f-]{36})(\/section-patch)?$/u
122
+ .exec(request.path);
116
123
  const match = /^\/api\/cubes\/([0-9a-f-]{36})(?:\/(roles|drones|logs|acks|decisions|stream))?$/u
117
124
  .exec(request.path);
118
- if (match === null)
125
+ if (match === null && roleMatch === null) {
119
126
  return failure(404, "NOT_FOUND", "The requested resource was not found.");
120
- const cubeId = match[1];
121
- if (!uuidPattern.test(cubeId)) {
127
+ }
128
+ const cubeId = (roleMatch?.[1] ?? match?.[1]);
129
+ const roleId = roleMatch?.[2];
130
+ if (!uuidPattern.test(cubeId) || (roleId !== undefined && !uuidPattern.test(roleId))) {
122
131
  return failure(404, "NOT_FOUND", "The requested resource was not found.");
123
132
  }
124
- const resource = match[2];
133
+ const resource = roleMatch === null ? match?.[2] : "role";
134
+ const sectionPatch = roleMatch?.[3] !== undefined;
125
135
  const store = this.#runtime.forPrincipal(authentication);
126
136
  try {
127
137
  if (resource === undefined && request.method === "GET") {
@@ -142,6 +152,98 @@ export class CoordinationApi {
142
152
  if (resource === "roles" && request.method === "GET") {
143
153
  return success(200, "roles-read", { roles: store.listRoles(cubeId) });
144
154
  }
155
+ if (resource === "roles" && request.method === "POST") {
156
+ const envelope = decodeEnvelope(request.body);
157
+ exactKeys(envelope.payload, ["name"], [
158
+ "short_description",
159
+ "detailed_description",
160
+ "is_default",
161
+ "is_mandatory",
162
+ "is_human_seat",
163
+ "can_broadcast",
164
+ "receives_all_direct",
165
+ ]);
166
+ const role = store.createRole(cubeId, {
167
+ name: requiredRoleName(envelope.payload, "name"),
168
+ shortDescription: optionalText(envelope.payload, "short_description", 1_024) ?? "",
169
+ detailedDescription: optionalText(envelope.payload, "detailed_description", 51_200) ?? "",
170
+ isDefault: optionalBoolean(envelope.payload["is_default"]),
171
+ isMandatory: optionalBoolean(envelope.payload["is_mandatory"]),
172
+ isHumanSeat: optionalBoolean(envelope.payload["is_human_seat"]),
173
+ canBroadcast: optionalBoolean(envelope.payload["can_broadcast"]),
174
+ receivesAllDirect: optionalBoolean(envelope.payload["receives_all_direct"]),
175
+ });
176
+ return success(201, envelope.requestId, { role });
177
+ }
178
+ if (resource === "role" && !sectionPatch && request.method === "PATCH") {
179
+ const envelope = decodeEnvelope(request.body);
180
+ exactKeys(envelope.payload, [], [
181
+ "name",
182
+ "short_description",
183
+ "detailed_description",
184
+ "is_default",
185
+ "is_mandatory",
186
+ "is_human_seat",
187
+ "can_broadcast",
188
+ "receives_all_direct",
189
+ ]);
190
+ if (Object.keys(envelope.payload).length === 0)
191
+ throw new InputError();
192
+ const name = envelope.payload["name"] === undefined
193
+ ? undefined
194
+ : requiredRoleName(envelope.payload, "name");
195
+ const shortDescription = optionalText(envelope.payload, "short_description", 1_024);
196
+ const detailedDescription = optionalText(envelope.payload, "detailed_description", 51_200);
197
+ const isDefault = optionalBooleanValue(envelope.payload["is_default"]);
198
+ const isMandatory = optionalBooleanValue(envelope.payload["is_mandatory"]);
199
+ const isHumanSeat = optionalBooleanValue(envelope.payload["is_human_seat"]);
200
+ const canBroadcast = optionalBooleanValue(envelope.payload["can_broadcast"]);
201
+ const receivesAllDirect = optionalBooleanValue(envelope.payload["receives_all_direct"]);
202
+ const role = store.updateRole(cubeId, roleId, {
203
+ ...(name === undefined ? {} : { name }),
204
+ ...(shortDescription === undefined ? {} : { shortDescription }),
205
+ ...(detailedDescription === undefined ? {} : { detailedDescription }),
206
+ ...(isDefault === undefined ? {} : { isDefault }),
207
+ ...(isMandatory === undefined ? {} : { isMandatory }),
208
+ ...(isHumanSeat === undefined ? {} : { isHumanSeat }),
209
+ ...(canBroadcast === undefined ? {} : { canBroadcast }),
210
+ ...(receivesAllDirect === undefined ? {} : { receivesAllDirect }),
211
+ });
212
+ return success(200, envelope.requestId, { role });
213
+ }
214
+ if (resource === "role" && sectionPatch && request.method === "POST") {
215
+ const envelope = decodeEnvelope(request.body);
216
+ const action = envelope.payload["action"];
217
+ if (action === "delete") {
218
+ exactKeys(envelope.payload, ["action", "heading"]);
219
+ const role = store.patchRoleSection(cubeId, roleId, {
220
+ action,
221
+ heading: requiredSectionHeading(envelope.payload, "heading"),
222
+ });
223
+ return success(200, envelope.requestId, { role });
224
+ }
225
+ if (action !== "replace" && action !== "insert")
226
+ throw new InputError();
227
+ exactKeys(envelope.payload, ["action", "heading", "body"], action === "insert" ? ["after"] : []);
228
+ const body = optionalText(envelope.payload, "body", 51_200);
229
+ if (body === undefined)
230
+ throw new InputError();
231
+ const heading = requiredSectionHeading(envelope.payload, "heading");
232
+ if (action === "replace") {
233
+ return success(200, envelope.requestId, {
234
+ role: store.patchRoleSection(cubeId, roleId, { action, heading, body }),
235
+ });
236
+ }
237
+ const after = optionalNullableSectionHeading(envelope.payload["after"]);
238
+ return success(200, envelope.requestId, {
239
+ role: store.patchRoleSection(cubeId, roleId, {
240
+ action,
241
+ heading,
242
+ body,
243
+ ...(after === undefined ? {} : { after }),
244
+ }),
245
+ });
246
+ }
145
247
  if (resource === "drones" && request.method === "GET") {
146
248
  return success(200, "drones-read", { drones: store.listDrones(cubeId) });
147
249
  }
@@ -160,6 +262,15 @@ export class CoordinationApi {
160
262
  ...(visibility === undefined ? {} : { visibility }),
161
263
  ...(recipientDroneIds === undefined ? {} : { recipientDroneIds }),
162
264
  });
265
+ this.#debugLogger.emit({
266
+ event: "activity_append",
267
+ cubeId,
268
+ entryId: entry.id,
269
+ principal: authentication,
270
+ droneId: entry.drone_id,
271
+ visibility: entry.visibility,
272
+ recipientDroneIds: entry.recipient_drone_ids,
273
+ });
163
274
  return success(201, envelope.requestId, { entry });
164
275
  }
165
276
  if (resource === "logs" && request.method === "PUT") {
@@ -167,7 +278,17 @@ export class CoordinationApi {
167
278
  exactKeys(envelope.payload, ["cursor"], ["limit"]);
168
279
  const cursor = decodeCursor(envelope.payload["cursor"]);
169
280
  const limit = optionalLimit(envelope.payload["limit"]);
170
- return success(200, envelope.requestId, store.readLog(cubeId, cursor, limit));
281
+ const page = store.readLog(cubeId, cursor, limit);
282
+ this.#debugLogger.emit({
283
+ event: "cursor_replay",
284
+ mode: "page",
285
+ cubeId,
286
+ cursorId: cursor?.id ?? null,
287
+ returnedCount: page.entries.length,
288
+ behindBy: page.behind_by,
289
+ truncated: page.has_more,
290
+ });
291
+ return success(200, envelope.requestId, page);
171
292
  }
172
293
  if (resource === "acks" && request.method === "POST") {
173
294
  const envelope = decodeEnvelope(request.body);
@@ -177,6 +298,7 @@ export class CoordinationApi {
177
298
  throw new InputError();
178
299
  exactKeys(envelope.payload, ["entry_id", "kind"]);
179
300
  store.acknowledge(cubeId, entryId, kind);
301
+ this.#debugLogger.emit({ event: "ack_write", cubeId, entryId, kind, principal: authentication });
180
302
  return { status: 204 };
181
303
  }
182
304
  if (resource === "decisions" && request.method === "POST") {
@@ -185,13 +307,18 @@ export class CoordinationApi {
185
307
  const topic = requiredString(envelope.payload, "topic", 120);
186
308
  const decision = requiredString(envelope.payload, "decision", 100_000);
187
309
  const rationale = optionalString(envelope.payload, "rationale", 100_000);
188
- return success(201, envelope.requestId, {
189
- decision: store.recordDecision(cubeId, {
190
- topic,
191
- decision,
192
- ...(rationale === undefined ? {} : { rationale }),
193
- }),
310
+ const decisionRecord = store.recordDecision(cubeId, {
311
+ topic,
312
+ decision,
313
+ ...(rationale === undefined ? {} : { rationale }),
314
+ });
315
+ this.#debugLogger.emit({
316
+ event: "decision_write",
317
+ cubeId,
318
+ decisionId: decisionRecord.id,
319
+ principal: authentication,
194
320
  });
321
+ return success(201, envelope.requestId, { decision: decisionRecord });
195
322
  }
196
323
  if (resource === "decisions" && request.method === "PUT") {
197
324
  const envelope = decodeEnvelope(request.body);
@@ -210,6 +337,15 @@ export class CoordinationApi {
210
337
  if (error instanceof ScopedStoreError) {
211
338
  return failure(404, "NOT_FOUND", error.message);
212
339
  }
340
+ if (error instanceof RoleConflictError) {
341
+ return failure(409, error.code, error.message, safeRequestId(request.body));
342
+ }
343
+ if (error instanceof DefaultRoleRequiredError) {
344
+ return failure(409, error.code, error.message, safeRequestId(request.body));
345
+ }
346
+ if (error instanceof RoleSectionConflictError) {
347
+ return failure(409, error.code, error.message, safeRequestId(request.body));
348
+ }
213
349
  if (error instanceof StorageCapacityError) {
214
350
  return failure(507, "CAPACITY_EXCEEDED", error.message, safeRequestId(request.body));
215
351
  }
@@ -221,13 +357,25 @@ export class CoordinationApi {
221
357
  }
222
358
  async #openStream(principal, cubeId, cursor, requestSignal) {
223
359
  const store = this.#runtime.forPrincipal(principal);
360
+ const connectionId = randomUUID();
224
361
  const session = this.#authority.registerLiveSession(principal);
225
362
  const signal = AbortSignal.any([requestSignal, session.signal]);
226
363
  let unsubscribe = () => undefined;
364
+ let subscribed = false;
365
+ let deliveryCount = 0;
227
366
  const queue = new AsyncStringQueue(() => {
228
367
  unsubscribe();
229
368
  session.release();
230
- });
369
+ if (subscribed) {
370
+ this.#debugLogger.emit({
371
+ event: "sse_unsubscribe",
372
+ connectionId,
373
+ cubeId,
374
+ principal,
375
+ deliveryCount,
376
+ });
377
+ }
378
+ }, () => { deliveryCount += 1; });
231
379
  const pending = [];
232
380
  let live = false;
233
381
  try {
@@ -244,7 +392,17 @@ export class CoordinationApi {
244
392
  pending.push(entry);
245
393
  });
246
394
  signal.addEventListener("abort", () => queue.close(), { once: true });
247
- const replay = store.readLog(cubeId, cursor, 200).entries;
395
+ const replayPage = store.readLog(cubeId, cursor, 200);
396
+ const replay = replayPage.entries;
397
+ this.#debugLogger.emit({
398
+ event: "cursor_replay",
399
+ mode: "sse",
400
+ cubeId,
401
+ cursorId: cursor?.id ?? null,
402
+ returnedCount: replay.length,
403
+ behindBy: replayPage.behind_by,
404
+ truncated: replayPage.has_more,
405
+ });
248
406
  const barrier = this.#replayBarrier;
249
407
  this.#replayBarrier = undefined;
250
408
  if (barrier !== undefined) {
@@ -266,6 +424,15 @@ export class CoordinationApi {
266
424
  replay_complete: true,
267
425
  })}\n\n`);
268
426
  live = true;
427
+ subscribed = true;
428
+ this.#debugLogger.emit({
429
+ event: "sse_subscribe",
430
+ connectionId,
431
+ cubeId,
432
+ principal,
433
+ replayCount: replay.length,
434
+ truncated: replayPage.has_more,
435
+ });
269
436
  return { status: 200, stream: queue };
270
437
  }
271
438
  catch (error) {
@@ -284,9 +451,11 @@ class AsyncStringQueue {
284
451
  #values = [];
285
452
  #waiters = [];
286
453
  #cleanup;
454
+ #onDelivered;
287
455
  #closed = false;
288
- constructor(cleanup) {
456
+ constructor(cleanup, onDelivered = () => undefined) {
289
457
  this.#cleanup = cleanup;
458
+ this.#onDelivered = onDelivered;
290
459
  }
291
460
  push(value) {
292
461
  if (this.#closed)
@@ -298,8 +467,10 @@ class AsyncStringQueue {
298
467
  const waiter = this.#waiters.shift();
299
468
  if (waiter === undefined)
300
469
  this.#values.push(value);
301
- else
470
+ else {
471
+ this.#onDelivered();
302
472
  waiter({ value, done: false });
473
+ }
303
474
  }
304
475
  close() {
305
476
  if (this.#closed)
@@ -313,8 +484,10 @@ class AsyncStringQueue {
313
484
  return {
314
485
  next: async () => {
315
486
  const value = this.#values.shift();
316
- if (value !== undefined)
487
+ if (value !== undefined) {
488
+ this.#onDelivered();
317
489
  return { value, done: false };
490
+ }
318
491
  if (this.#closed)
319
492
  return { value: undefined, done: true };
320
493
  return new Promise((resolve) => this.#waiters.push(resolve));
@@ -361,12 +534,53 @@ function requiredPresentationName(record, key) {
361
534
  throw new InputError();
362
535
  return value;
363
536
  }
537
+ function requiredRoleName(record, key) {
538
+ const value = record[key];
539
+ if (typeof value !== "string" || value.length < 1 || value.length > 64)
540
+ throw new InputError();
541
+ return value;
542
+ }
364
543
  function optionalString(record, key, maxBytes) {
365
544
  const value = record[key];
366
545
  if (value === undefined)
367
546
  return undefined;
368
547
  return requiredString(record, key, maxBytes);
369
548
  }
549
+ function optionalText(record, key, maxCharacters) {
550
+ const value = record[key];
551
+ if (value === undefined)
552
+ return undefined;
553
+ if (typeof value !== "string" || value.length > maxCharacters)
554
+ throw new InputError();
555
+ return value;
556
+ }
557
+ function optionalBoolean(value) {
558
+ if (value === undefined)
559
+ return false;
560
+ if (typeof value !== "boolean")
561
+ throw new InputError();
562
+ return value;
563
+ }
564
+ function optionalBooleanValue(value) {
565
+ if (value === undefined)
566
+ return undefined;
567
+ if (typeof value !== "boolean")
568
+ throw new InputError();
569
+ return value;
570
+ }
571
+ function requiredSectionHeading(record, key) {
572
+ const value = requiredString(record, key, 60);
573
+ const heading = value.trim();
574
+ if (heading.length === 0 || /^\s/u.test(value) || /[:\n\r]/u.test(heading) ||
575
+ /^[*\-#>`]/u.test(heading))
576
+ throw new InputError();
577
+ return heading;
578
+ }
579
+ function optionalNullableSectionHeading(value) {
580
+ if (value === undefined || value === null)
581
+ return value;
582
+ return requiredSectionHeading({ value }, "value");
583
+ }
370
584
  function requiredUuid(record, key) {
371
585
  const value = record[key];
372
586
  if (typeof value !== "string" || !uuidPattern.test(value))
@@ -1 +1 @@
1
- {"version":3,"file":"coordination-api.js","sourceRoot":"","sources":["../src/coordination-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coordination-api.js","sourceRoot":"","sources":["../src/coordination-api.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type Principal } from "./principal.js";
2
- import type { CredentialStore, DigestPair, ScopedStore, SeatAttachRecord } from "./store.js";
2
+ import type { CredentialStore, DigestPair, InvitationCubeScope, ScopedStore, SeatAttachRecord } from "./store.js";
3
+ import { type DebugLogger } from "./debug-log.js";
3
4
  type CredentialPurpose = "recovery" | "invitation" | "client" | "drone-session";
4
5
  export interface EnrollmentRequest {
5
6
  readonly invitation: string;
@@ -12,6 +13,9 @@ export interface EnrollmentResponse {
12
13
  readonly clientId: string;
13
14
  readonly serverCapabilities: readonly [] | readonly ["create_cube"];
14
15
  }
16
+ export interface CubeInvitationResult extends InvitationCubeScope {
17
+ readonly invitation: string;
18
+ }
15
19
  export interface SeatAttachResponse extends SeatAttachRecord {
16
20
  readonly credential: string;
17
21
  }
@@ -33,10 +37,14 @@ export declare class LiveCredentialRegistry {
33
37
  }
34
38
  export declare class CredentialAuthority {
35
39
  #private;
36
- constructor(store: CredentialStore, digester: CredentialDigester, clock?: () => Date, registry?: LiveCredentialRegistry);
40
+ constructor(store: CredentialStore, digester: CredentialDigester, clock?: () => Date, registry?: LiveCredentialRegistry, debugLogger?: DebugLogger);
37
41
  createRecoveryCredential(): string;
38
42
  createBootstrapInvitation(ttlMs: number): string;
39
43
  createInvitation(recoveryCredential: string, ttlMs: number): string | null;
44
+ createCubeInvitation(recoveryCredential: string, cubeSelector: {
45
+ readonly kind: "id" | "name";
46
+ readonly value: string;
47
+ }, access: "read" | "write" | "manage", ttlMs: number): CubeInvitationResult | null;
40
48
  replaceOwnerInvitation(recoveryCredential: string, ttlMs: number): string | null;
41
49
  exchangeInvitation(request: EnrollmentRequest): EnrollmentResponse | null;
42
50
  authenticate(authorization: string | undefined): Principal | null;
@@ -1,6 +1,7 @@
1
1
  import { createHmac, randomBytes, randomUUID, timingSafeEqual, } from "node:crypto";
2
2
  import { clientPrincipal, droneSessionPrincipal, } from "./principal.js";
3
3
  import { operatorErrors } from "./operator-error.js";
4
+ import { disabledDebugLogger } from "./debug-log.js";
4
5
  const tokenPattern = /^[A-Za-z0-9_-]{43,1024}$/u;
5
6
  const dummyVerifier = Buffer.alloc(32);
6
7
  export class CredentialDigester {
@@ -88,11 +89,13 @@ export class CredentialAuthority {
88
89
  #digester;
89
90
  #clock;
90
91
  #registry;
91
- constructor(store, digester, clock = () => new Date(), registry = new LiveCredentialRegistry()) {
92
+ #debugLogger;
93
+ constructor(store, digester, clock = () => new Date(), registry = new LiveCredentialRegistry(), debugLogger = disabledDebugLogger) {
92
94
  this.#store = store;
93
95
  this.#digester = digester;
94
96
  this.#clock = clock;
95
97
  this.#registry = registry;
98
+ this.#debugLogger = debugLogger;
96
99
  }
97
100
  createRecoveryCredential() {
98
101
  const secret = generateSecret();
@@ -109,6 +112,13 @@ export class CredentialAuthority {
109
112
  return null;
110
113
  return this.#createInvitation("client", ttlMs);
111
114
  }
115
+ createCubeInvitation(recoveryCredential, cubeSelector, access, ttlMs) {
116
+ const digest = safeDigest(this.#digester, recoveryCredential, "recovery");
117
+ const stored = this.#store.findRecoveryCredential(digest.lookup);
118
+ if (!this.#digester.verify(recoveryCredential, "recovery", stored?.verifier))
119
+ return null;
120
+ return this.#createInvitation("client", ttlMs, { cubeSelector, access });
121
+ }
112
122
  replaceOwnerInvitation(recoveryCredential, ttlMs) {
113
123
  const digest = safeDigest(this.#digester, recoveryCredential, "recovery");
114
124
  const stored = this.#store.findRecoveryCredential(digest.lookup);
@@ -116,18 +126,25 @@ export class CredentialAuthority {
116
126
  return null;
117
127
  return this.#createInvitation("owner", ttlMs);
118
128
  }
119
- #createInvitation(purpose, ttlMs) {
129
+ #createInvitation(purpose, ttlMs, scoped) {
120
130
  if (!Number.isSafeInteger(ttlMs) || ttlMs < 1_000 || ttlMs > 86_400_000) {
121
131
  throw new Error("Invitation TTL must be an integer from 1000 to 86400000 milliseconds.");
122
132
  }
123
133
  const secret = generateSecret();
124
- this.#store.createInvitation({
134
+ const scope = this.#store.createInvitation({
125
135
  id: randomUUID(),
126
136
  digest: this.#digester.digest(secret, "invitation"),
127
137
  expiresAt: new Date(this.#clock().getTime() + ttlMs).toISOString(),
128
138
  purpose,
139
+ ...(scoped === undefined ? {} : scoped),
129
140
  });
130
- return secret;
141
+ this.#debugLogger.emit({
142
+ event: "credential",
143
+ action: "invitation_created",
144
+ purpose,
145
+ ...(scope === null ? {} : { cubeId: scope.cubeId }),
146
+ });
147
+ return scope === null ? secret : { invitation: secret, ...scope };
131
148
  }
132
149
  exchangeInvitation(request) {
133
150
  const invitationDigest = safeDigest(this.#digester, request.invitation, "invitation");
@@ -142,11 +159,20 @@ export class CredentialAuthority {
142
159
  credentialId: randomUUID(),
143
160
  credentialDigest: safeDigest(this.#digester, request.clientCredential, "client"),
144
161
  });
145
- return !verified || stored?.expiresAt === undefined || claimed === null ? null : {
162
+ const result = !verified || stored?.expiresAt === undefined || claimed === null ? null : {
146
163
  purpose: claimed.purpose,
147
164
  clientId: claimed.clientId,
148
165
  serverCapabilities: claimed.serverCapabilities,
149
166
  };
167
+ this.#debugLogger.emit(result === null
168
+ ? { event: "credential", action: "enrollment_rejected" }
169
+ : {
170
+ event: "credential",
171
+ action: "enrollment_accepted",
172
+ purpose: result.purpose,
173
+ clientId: result.clientId,
174
+ });
175
+ return result;
150
176
  }
151
177
  authenticate(authorization) {
152
178
  const result = this.authenticateStatus(authorization);
@@ -192,8 +218,18 @@ export class CredentialAuthority {
192
218
  credentialDigest: this.#digester.digest(credential, "drone-session"),
193
219
  expiresAt: new Date(this.#clock().getTime() + 86_400_000).toISOString(),
194
220
  });
195
- for (const sessionId of record.revokedSessionIds)
221
+ for (const sessionId of record.revokedSessionIds) {
196
222
  this.#registry.invalidate(sessionId);
223
+ this.#debugLogger.emit({ event: "credential", action: "session_revoked", sessionId });
224
+ }
225
+ this.#debugLogger.emit({
226
+ event: "credential",
227
+ action: "session_created",
228
+ sessionId: record.sessionId,
229
+ cubeId: record.cube.id,
230
+ droneId: record.drone.id,
231
+ generation: record.generation,
232
+ });
197
233
  return { ...record, credential };
198
234
  }
199
235
  rotateClient(clientId) {
@@ -208,6 +244,7 @@ export class CredentialAuthority {
208
244
  if (!rotated)
209
245
  throw operatorErrors.CLIENT_NOT_FOUND;
210
246
  this.#registry.invalidate(clientId);
247
+ this.#debugLogger.emit({ event: "credential", action: "client_rotated", clientId });
211
248
  return secret;
212
249
  }
213
250
  revokeClient(clientId) {
@@ -215,6 +252,7 @@ export class CredentialAuthority {
215
252
  throw operatorErrors.CLIENT_NOT_FOUND;
216
253
  this.#store.revokeClientCredentials(clientId);
217
254
  this.#registry.invalidate(clientId);
255
+ this.#debugLogger.emit({ event: "credential", action: "client_revoked", clientId });
218
256
  }
219
257
  registerLiveSession(principal) {
220
258
  if (typeof principal === "string")