@modelprofile.com/authswitch 9.0.0 → 9.2.0

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 (38) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/authority-contract.d.ts +71 -1
  3. package/dist_ts/authority-contract.js +13 -2
  4. package/dist_ts/authority-import-contract.d.ts +6 -0
  5. package/dist_ts/authority-runtime-contract.d.ts +29 -0
  6. package/dist_ts/classes.authoritybroker.d.ts +37 -15
  7. package/dist_ts/classes.authoritybroker.js +121 -35
  8. package/dist_ts/classes.authorityclient.d.ts +28 -3
  9. package/dist_ts/classes.authorityclient.js +101 -18
  10. package/dist_ts/classes.authoritydaemon.d.ts +24 -0
  11. package/dist_ts/classes.authoritydaemon.js +87 -40
  12. package/dist_ts/classes.authoritydatabase.d.ts +29 -4
  13. package/dist_ts/classes.authoritydatabase.js +98 -13
  14. package/dist_ts/classes.authorityimport.js +2 -2
  15. package/dist_ts/classes.authoritymodels.js +5 -3
  16. package/dist_ts/classes.codexmanaged.d.ts +0 -9
  17. package/dist_ts/classes.codexmanaged.js +8 -28
  18. package/dist_ts/codexcontract.d.ts +30 -0
  19. package/dist_ts/codexcontract.js +174 -0
  20. package/dist_ts/ts_migration/0004_container_setup_owner.d.ts +12 -0
  21. package/dist_ts/ts_migration/0004_container_setup_owner.js +19 -0
  22. package/dist_ts/ts_migration/index.js +3 -1
  23. package/package.json +8 -8
  24. package/readme.md +102 -25
  25. package/ts/00_commitinfo_data.ts +1 -1
  26. package/ts/authority-contract.ts +75 -4
  27. package/ts/authority-import-contract.ts +6 -0
  28. package/ts/authority-runtime-contract.ts +30 -0
  29. package/ts/classes.authoritybroker.ts +122 -36
  30. package/ts/classes.authorityclient.ts +107 -21
  31. package/ts/classes.authoritydaemon.ts +91 -33
  32. package/ts/classes.authoritydatabase.ts +100 -14
  33. package/ts/classes.authorityimport.ts +1 -1
  34. package/ts/classes.authoritymodels.ts +4 -1
  35. package/ts/classes.codexmanaged.ts +6 -26
  36. package/ts/codexcontract.ts +200 -0
  37. package/ts/ts_migration/0004_container_setup_owner.ts +19 -0
  38. package/ts/ts_migration/index.ts +2 -0
@@ -1,10 +1,18 @@
1
- import type { IAuthSwitchAccountEvent, IAuthSwitchSnapshot, IReq_AuthSwitchBeginAdd, IReq_AuthSwitchDoctor, IReq_AuthSwitchBeginReauth, IReq_AuthSwitchCancelOperation, IReq_AuthSwitchClaudeNativeHandoff, IReq_AuthSwitchClaudeNativeHandoffs, IReq_AuthSwitchSwitchClaudeNative, IReq_AuthSwitchEvents, IReq_AuthSwitchGetOperation, IReq_AuthSwitchListOperations, IReq_AuthSwitchRemoveAccount, IReq_AuthSwitchRenameAccount, IReq_AuthSwitchCancelPreuse, IReq_AuthSwitchGetPreuse, IReq_AuthSwitchSnapshot, IReq_AuthSwitchStartPreuse, IReq_AuthSwitchUsage } from './authority-contract.js';
2
- import type { IReq_AuthSwitchBindAccount, IReq_AuthSwitchReleaseBinding, IReq_AuthSwitchResolveAccess } from './authority-runtime-contract.js';
1
+ import type { IAuthSwitchAccountEvent, IAuthSwitchSnapshot, IReq_AuthSwitchBeginAdd, IReq_AuthSwitchDoctor, IReq_AuthSwitchBeginReauth, IReq_AuthSwitchCancelOperation, IReq_AuthSwitchClaudeNativeHandoff, IReq_AuthSwitchClaudeNativeHandoffs, IReq_AuthSwitchSwitchClaudeNative, IReq_AuthSwitchEvents, IReq_AuthSwitchGetBinding, IReq_AuthSwitchGetOperation, IReq_AuthSwitchListOperations, IReq_AuthSwitchRemoveAccount, IReq_AuthSwitchRenameAccount, IReq_AuthSwitchCancelPreuse, IReq_AuthSwitchGetPreuse, IReq_AuthSwitchSnapshot, IReq_AuthSwitchStartPreuse, IReq_AuthSwitchUsage } from './authority-contract.js';
2
+ import type { IReq_AuthSwitchBindAccount, IReq_AuthSwitchReleaseBinding, IReq_AuthSwitchResolveAccess, IReq_AuthSwitchUnbind } from './authority-runtime-contract.js';
3
3
  import type { IReq_AuthSwitchImportInventory, IReq_AuthSwitchImportStatus, IReq_AuthSwitchImportSubmit } from './authority-import-contract.js';
4
+ /**
5
+ * The daemon answered with an older contract than this client reads: it runs an authswitch release from before
6
+ * this one and was not restarted after the upgrade. Restarting it onto the installed release is the repair.
7
+ */
8
+ export declare class AuthSwitchDaemonOutdatedError extends Error {
9
+ constructor();
10
+ }
4
11
  /** A snapshot is usable only while state is current; lastVerifiedAt is the last successful daemon proof. */
5
12
  export interface IAuthSwitchSubscriptionStatus {
6
13
  state: 'current' | 'unavailable' | 'closed';
7
- reason: 'initial' | 'snapshot' | 'event' | 'heartbeat' | 'disconnect' | 'resync' | 'abort' | 'consumer_error';
14
+ /** `daemon_outdated`: the daemon runs an older release; see `AuthSwitchDaemonOutdatedError`. */
15
+ reason: 'initial' | 'snapshot' | 'event' | 'heartbeat' | 'disconnect' | 'resync' | 'abort' | 'consumer_error' | 'daemon_outdated';
8
16
  epoch: string | null;
9
17
  revision: number | null;
10
18
  lastVerifiedAt: string | null;
@@ -13,6 +21,8 @@ export interface IAuthSwitchSubscriptionOptions {
13
21
  onStatus?: (status: IAuthSwitchSubscriptionStatus) => void | Promise<void>;
14
22
  /** Bounded long-poll interval; defaults to 30 seconds. */
15
23
  heartbeatMs?: number;
24
+ /** Deliver snapshots that also carry removed accounts and logins; see `IReq_AuthSwitchSnapshot`. */
25
+ includeRemoved?: boolean;
16
26
  }
17
27
  /**
18
28
  * Node-only client for the per-user daemon. Each request has its own bounded Unix connection.
@@ -28,6 +38,7 @@ export declare class AuthSwitchClient {
28
38
  private readonly runtimeTarget;
29
39
  constructor(socketPath: string, runtimeSocketPath: string);
30
40
  private request;
41
+ /** One snapshot page; an older daemon's answer fails with `AuthSwitchDaemonOutdatedError`. */
31
42
  snapshot(options?: IReq_AuthSwitchSnapshot['request'], signal?: AbortSignal): Promise<IAuthSwitchSnapshot>;
32
43
  /** One independently stamped diagnostic page; callers may continue with its independent cursors. */
33
44
  doctorPage(options?: IReq_AuthSwitchDoctor['request'], signal?: AbortSignal): Promise<IReq_AuthSwitchDoctor['response']['page']>;
@@ -41,6 +52,7 @@ export declare class AuthSwitchClient {
41
52
  /** Assemble a consistent view from bounded database pages; restart if a writer changes the revision. */
42
53
  snapshotAll(options?: {
43
54
  limit?: number;
55
+ includeRemoved?: boolean;
44
56
  signal?: AbortSignal;
45
57
  }): Promise<IAuthSwitchSnapshot>;
46
58
  events(epoch: string, afterRevision: number, waitMs?: number, signal?: AbortSignal): Promise<IReq_AuthSwitchEvents['response']>;
@@ -50,6 +62,12 @@ export declare class AuthSwitchClient {
50
62
  beginReauthOpenAi(operationId: string, accountId: string, loginId: string, purpose: 'openai_managed', signal?: AbortSignal): Promise<IReq_AuthSwitchBeginReauth['response']['operation']>;
51
63
  listOperations(after?: string, limit?: number, signal?: AbortSignal): Promise<IReq_AuthSwitchListOperations['response']>;
52
64
  getOperation(operationId: string, signal?: AbortSignal): Promise<IReq_AuthSwitchGetOperation['response']['operation']>;
65
+ /**
66
+ * Waits up to `waitMs` for the sign-in to change past `afterRevision` and answers with it; a finished
67
+ * sign-in answers at once, and a timed-out wait with the unchanged operation. Follow a sign-in by passing
68
+ * each answer's `revision` back until its state is final.
69
+ */
70
+ watchOperation(operationId: string, afterRevision: number, waitMs?: number, signal?: AbortSignal): Promise<IReq_AuthSwitchGetOperation['response']['operation']>;
53
71
  cancelOperation(operationId: string, signal?: AbortSignal): Promise<IReq_AuthSwitchCancelOperation['response']['operation']>;
54
72
  startPreuse(input: IReq_AuthSwitchStartPreuse['request'], signal?: AbortSignal): Promise<IReq_AuthSwitchStartPreuse['response']['operation']>;
55
73
  getPreuse(operationId: string, signal?: AbortSignal): Promise<IReq_AuthSwitchGetPreuse['response']['operation']>;
@@ -59,7 +77,14 @@ export declare class AuthSwitchClient {
59
77
  switchClaudeNative(accountId: string, loginId: string, signal?: AbortSignal): Promise<IReq_AuthSwitchSwitchClaudeNative['response']['handoff']>;
60
78
  getClaudeNativeHandoff(operationId: string, signal?: AbortSignal): Promise<IReq_AuthSwitchClaudeNativeHandoff['response']['handoff']>;
61
79
  listClaudeNativeHandoffs(after?: string, limit?: number, signal?: AbortSignal): Promise<IReq_AuthSwitchClaudeNativeHandoffs['response']>;
80
+ /** The binding `bind` returned, credential-free, or null once this authority holds none by that id. */
81
+ getBinding(bindingId: string, signal?: AbortSignal): Promise<IReq_AuthSwitchGetBinding['response']['binding']>;
62
82
  bindAccount(input: IReq_AuthSwitchBindAccount['request'], signal?: AbortSignal): Promise<IReq_AuthSwitchBindAccount['response']>;
83
+ /**
84
+ * Releases the holder's own binding by the runtime, scope, incarnation and revision it was bound under,
85
+ * without its capability and without a ready login; `inactive` when no binding matches all four.
86
+ */
87
+ unbind(input: IReq_AuthSwitchUnbind['request'], signal?: AbortSignal): Promise<IReq_AuthSwitchUnbind['response']>;
63
88
  resolveAccess(input: IReq_AuthSwitchResolveAccess['request'], signal?: AbortSignal): Promise<IReq_AuthSwitchResolveAccess['response']>;
64
89
  releaseBinding(input: IReq_AuthSwitchReleaseBinding['request'], signal?: AbortSignal): Promise<IReq_AuthSwitchReleaseBinding['response']>;
65
90
  }
@@ -1,8 +1,19 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import { AuthSwitchAuthorityFrameReader, authSwitchAuthorityFrameBytes, maxAuthSwitchAuthorityFrameBytes } from './classes.authorityframing.js';
3
+ /**
4
+ * One request on one connection, bounded by its own deadline alone.
5
+ *
6
+ * `TypedRequest.fire` turns each request's `timeoutMs` into the abort of `signal`, so the transport arms no
7
+ * timer of its own: an idle limit here would end a request that was allowed longer -- an import submit is
8
+ * allowed 120 s -- before its deadline. Every authority request carries one; a request without it is refused.
9
+ */
3
10
  const post = (path, payload, signal) => {
4
11
  return new Promise((resolve, reject) => {
5
- if (signal?.aborted) {
12
+ if (!signal) {
13
+ reject(new Error('Authswitch daemon requests need a deadline.'));
14
+ return;
15
+ }
16
+ if (signal.aborted) {
6
17
  reject(signal.reason);
7
18
  return;
8
19
  }
@@ -13,7 +24,7 @@ const post = (path, payload, signal) => {
13
24
  if (settled)
14
25
  return;
15
26
  settled = true;
16
- signal?.removeEventListener('abort', abort);
27
+ signal.removeEventListener('abort', abort);
17
28
  socket.destroy();
18
29
  if (error)
19
30
  reject(error);
@@ -22,9 +33,8 @@ const post = (path, payload, signal) => {
22
33
  else
23
34
  reject(new Error('Authswitch daemon returned no response.'));
24
35
  };
25
- const abort = () => finish(signal?.reason ?? new Error('Account request was cancelled.'));
26
- signal?.addEventListener('abort', abort, { once: true });
27
- socket.setTimeout(35_000, () => finish(new Error('Authswitch daemon request timed out.')));
36
+ const abort = () => finish(signal.reason ?? new Error('Account request was cancelled.'));
37
+ signal.addEventListener('abort', abort, { once: true });
28
38
  socket.on('connect', () => {
29
39
  const raw = JSON.stringify(payload);
30
40
  if (authSwitchAuthorityFrameBytes(raw) > maxAuthSwitchAuthorityFrameBytes) {
@@ -59,6 +69,28 @@ const post = (path, payload, signal) => {
59
69
  socket.on('close', () => finish(new Error('Authswitch daemon connection closed before its response.')));
60
70
  });
61
71
  };
72
+ /**
73
+ * The daemon answered with an older contract than this client reads: it runs an authswitch release from before
74
+ * this one and was not restarted after the upgrade. Restarting it onto the installed release is the repair.
75
+ */
76
+ export class AuthSwitchDaemonOutdatedError extends Error {
77
+ constructor() {
78
+ super('The authswitch authority daemon runs an older release than this client. Restart it onto the '
79
+ + 'installed authswitch: authswitch authority service stop, then authswitch authority service start.');
80
+ this.name = 'AuthSwitchDaemonOutdatedError';
81
+ }
82
+ }
83
+ /**
84
+ * A snapshot page carries every member of this release's contract. `schemaVersion` is not bumped for an
85
+ * additive member, so an older daemon is told apart by the members its answer lacks.
86
+ */
87
+ const assertCurrentSnapshot = (snapshot) => {
88
+ const page = snapshot;
89
+ if (!Array.isArray(page.nativeAssignments) || page.nextNativeAssignmentCursor === undefined) {
90
+ throw new AuthSwitchDaemonOutdatedError();
91
+ }
92
+ return snapshot;
93
+ };
62
94
  /**
63
95
  * Node-only client for the per-user daemon. Each request has its own bounded Unix connection.
64
96
  *
@@ -87,8 +119,9 @@ export class AuthSwitchClient {
87
119
  return new plugins.typedrequest.TypedRequest(runtime ? this.runtimeTarget : this.target, method)
88
120
  .fire(request, { timeoutMs, maxRetries: 0, abortSignal: signal });
89
121
  }
122
+ /** One snapshot page; an older daemon's answer fails with `AuthSwitchDaemonOutdatedError`. */
90
123
  async snapshot(options = {}, signal) {
91
- return (await this.request('authswitch.authority.snapshot', options, 35_000, false, signal)).snapshot;
124
+ return assertCurrentSnapshot((await this.request('authswitch.authority.snapshot', options, 35_000, false, signal)).snapshot);
92
125
  }
93
126
  /** One independently stamped diagnostic page; callers may continue with its independent cursors. */
94
127
  async doctorPage(options = {}, signal) {
@@ -117,12 +150,16 @@ export class AuthSwitchClient {
117
150
  let accountAfter;
118
151
  let loginAfter;
119
152
  let bindingAfter;
153
+ let nativeAssignmentAfter;
120
154
  let aggregate;
121
155
  let changed = false;
122
156
  while (true) {
123
- const page = await this.snapshot({ accountAfter, loginAfter, bindingAfter, limit: options.limit }, options.signal);
124
- if (!aggregate)
125
- aggregate = { ...page, accounts: [...page.accounts], logins: [...page.logins], bindings: [...page.bindings] };
157
+ const page = await this.snapshot({ accountAfter, loginAfter, bindingAfter, nativeAssignmentAfter,
158
+ limit: options.limit, ...(options.includeRemoved ? { includeRemoved: true } : {}) }, options.signal);
159
+ if (!aggregate) {
160
+ aggregate = { ...page, accounts: [...page.accounts], logins: [...page.logins], bindings: [...page.bindings],
161
+ nativeAssignments: [...page.nativeAssignments] };
162
+ }
126
163
  else if (aggregate.epoch !== page.epoch || aggregate.revision !== page.revision) {
127
164
  changed = true;
128
165
  break;
@@ -131,12 +168,17 @@ export class AuthSwitchClient {
131
168
  aggregate.accounts.push(...page.accounts);
132
169
  aggregate.logins.push(...page.logins);
133
170
  aggregate.bindings.push(...page.bindings);
171
+ aggregate.nativeAssignments.push(...page.nativeAssignments);
134
172
  }
135
173
  accountAfter = page.nextAccountCursor ?? accountAfter ?? page.accounts.at(-1)?.id;
136
174
  loginAfter = page.nextLoginCursor ?? loginAfter ?? page.logins.at(-1)?.id;
137
175
  bindingAfter = page.nextBindingCursor ?? bindingAfter ?? page.bindings.at(-1)?.id;
138
- if (!page.nextAccountCursor && !page.nextLoginCursor && !page.nextBindingCursor) {
139
- return { ...aggregate, nextAccountCursor: null, nextLoginCursor: null, nextBindingCursor: null };
176
+ nativeAssignmentAfter = page.nextNativeAssignmentCursor ?? nativeAssignmentAfter
177
+ ?? page.nativeAssignments.at(-1)?.id;
178
+ if (!page.nextAccountCursor && !page.nextLoginCursor && !page.nextBindingCursor
179
+ && !page.nextNativeAssignmentCursor) {
180
+ return { ...aggregate, nextAccountCursor: null, nextLoginCursor: null, nextBindingCursor: null,
181
+ nextNativeAssignmentCursor: null };
140
182
  }
141
183
  }
142
184
  if (!changed)
@@ -166,12 +208,12 @@ export class AuthSwitchClient {
166
208
  * full, and since it holds nothing, a process whose only remaining handle it is can exit inside it --
167
209
  * dropping the closing status this loop owes its consumer.
168
210
  */
169
- const retry = () => new Promise(resolve => {
211
+ const retry = (delayMs = 250) => new Promise(resolve => {
170
212
  if (signal.aborted) {
171
213
  resolve();
172
214
  return;
173
215
  }
174
- const timer = setTimeout(() => { signal.removeEventListener('abort', aborted); resolve(); }, 250);
216
+ const timer = setTimeout(() => { signal.removeEventListener('abort', aborted); resolve(); }, delayMs);
175
217
  timer.unref();
176
218
  const aborted = () => { clearTimeout(timer); resolve(); };
177
219
  signal.addEventListener('abort', aborted, { once: true });
@@ -191,6 +233,23 @@ export class AuthSwitchClient {
191
233
  await status('unavailable', reason);
192
234
  }
193
235
  };
236
+ /**
237
+ * An older daemon answers every attempt the same way until it is restarted, so the consumer is told why once
238
+ * per outage, and the loop keeps trying at a slower pace: the restart that repairs it needs nothing else.
239
+ */
240
+ let outdatedReported = false;
241
+ const unreadable = async (error) => {
242
+ if (!(error instanceof AuthSwitchDaemonOutdatedError))
243
+ return false;
244
+ snapshot = undefined;
245
+ available = false;
246
+ if (!outdatedReported) {
247
+ outdatedReported = true;
248
+ await status('unavailable', 'daemon_outdated');
249
+ }
250
+ await retry(5_000);
251
+ return true;
252
+ };
194
253
  try {
195
254
  if (!signal.aborted)
196
255
  await status('unavailable', 'initial');
@@ -198,16 +257,19 @@ export class AuthSwitchClient {
198
257
  if (!snapshot) {
199
258
  let fresh;
200
259
  try {
201
- fresh = await this.snapshotAll({ signal });
260
+ fresh = await this.snapshotAll({ signal, includeRemoved: options.includeRemoved });
202
261
  }
203
- catch {
262
+ catch (error) {
204
263
  if (signal.aborted)
205
264
  break;
265
+ if (await unreadable(error))
266
+ continue;
206
267
  await invalidate('disconnect');
207
268
  await retry();
208
269
  continue;
209
270
  }
210
271
  snapshot = fresh;
272
+ outdatedReported = false;
211
273
  await onSnapshot(fresh);
212
274
  available = true;
213
275
  lastEpoch = fresh.epoch;
@@ -234,11 +296,13 @@ export class AuthSwitchClient {
234
296
  if (result.events.length) {
235
297
  let fresh;
236
298
  try {
237
- fresh = await this.snapshotAll({ signal });
299
+ fresh = await this.snapshotAll({ signal, includeRemoved: options.includeRemoved });
238
300
  }
239
- catch {
301
+ catch (error) {
240
302
  if (signal.aborted)
241
303
  break;
304
+ if (await unreadable(error))
305
+ continue;
242
306
  await invalidate('disconnect');
243
307
  await retry();
244
308
  continue;
@@ -279,6 +343,14 @@ export class AuthSwitchClient {
279
343
  async getOperation(operationId, signal) {
280
344
  return (await this.request('authswitch.authority.operation', { operationId }, 35_000, false, signal)).operation;
281
345
  }
346
+ /**
347
+ * Waits up to `waitMs` for the sign-in to change past `afterRevision` and answers with it; a finished
348
+ * sign-in answers at once, and a timed-out wait with the unchanged operation. Follow a sign-in by passing
349
+ * each answer's `revision` back until its state is final.
350
+ */
351
+ async watchOperation(operationId, afterRevision, waitMs = 30_000, signal) {
352
+ return (await this.request('authswitch.authority.operation', { operationId, afterRevision, waitMs }, waitMs + 5_000, false, signal)).operation;
353
+ }
282
354
  async cancelOperation(operationId, signal) {
283
355
  return (await this.request('authswitch.authority.cancel', { operationId }, 35_000, false, signal)).operation;
284
356
  }
@@ -306,9 +378,20 @@ export class AuthSwitchClient {
306
378
  listClaudeNativeHandoffs(after, limit, signal) {
307
379
  return this.request('authswitch.authority.claude.handoffs', { after, limit }, 35_000, false, signal);
308
380
  }
381
+ /** The binding `bind` returned, credential-free, or null once this authority holds none by that id. */
382
+ async getBinding(bindingId, signal) {
383
+ return (await this.request('authswitch.authority.binding', { bindingId }, 35_000, false, signal)).binding;
384
+ }
309
385
  bindAccount(input, signal) {
310
386
  return this.request('authswitch.authority.bind', input, 35_000, false, signal);
311
387
  }
388
+ /**
389
+ * Releases the holder's own binding by the runtime, scope, incarnation and revision it was bound under,
390
+ * without its capability and without a ready login; `inactive` when no binding matches all four.
391
+ */
392
+ unbind(input, signal) {
393
+ return this.request('authswitch.authority.unbind', input, 35_000, false, signal);
394
+ }
312
395
  resolveAccess(input, signal) {
313
396
  return this.request('authswitch.authority.resolveAccess', input, 35_000, true, signal);
314
397
  }
@@ -332,4 +415,4 @@ export class AuthSwitchRuntimeClient {
332
415
  return new plugins.typedrequest.TypedRequest(this.target, 'authswitch.authority.release').fire(input, { timeoutMs: 35_000, maxRetries: 0, abortSignal: signal });
333
416
  }
334
417
  }
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hdXRob3JpdHljbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmF1dGhvcml0eWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQWN4QyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsNkJBQTZCLEVBQ3BFLGdDQUFnQyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFMUUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFZLEVBQUUsT0FBc0IsRUFBRSxNQUFvQixFQUEwQixFQUFFO0lBQ2hHLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQUMsT0FBTztRQUFDLENBQUM7UUFDdkQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO1FBQ25ELE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBZSxFQUFFLFFBQXdCLEVBQVEsRUFBRTtZQUNqRSxJQUFJLE9BQU87Z0JBQUUsT0FBTztZQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ2YsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxLQUFLO2dCQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDcEIsSUFBSSxRQUFRO2dCQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7Z0JBQ2hDLE1BQU0sQ0FBQyxJ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
418
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hdXRob3JpdHljbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmF1dGhvcml0eWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQWV4QyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsNkJBQTZCLEVBQ3BFLGdDQUFnQyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFMUU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFZLEVBQUUsT0FBc0IsRUFBRSxNQUFvQixFQUEwQixFQUFFO0lBQ2hHLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUMsQ0FBQztZQUFDLE9BQU87UUFBQyxDQUFDO1FBQzFGLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUFDLE9BQU87UUFBQyxDQUFDO1FBQ3RELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLElBQUksOEJBQThCLEVBQUUsQ0FBQztRQUNuRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQWUsRUFBRSxRQUF3QixFQUFRLEVBQUU7WUFDakUsSUFBSSxPQUFPO2dCQUFFLE9BQU87WUFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNmLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0MsTUFBTSxDQUFDLE9BQU8sRUFBRSxD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
@@ -17,6 +17,11 @@ export interface IAuthSwitchAuthorityDaemonOptions extends IAuthSwitchAuthorityD
17
17
  claudeNative?: IClaudeNativeAuthorityOptions;
18
18
  /** Where the one-time import reads the legacy stores, or `'none'`. Never derived from this host here. */
19
19
  legacyImport: TAuthSwitchAuthorityLegacyImport;
20
+ /**
21
+ * How long an accepted connection has to deliver its complete request, counted from its acceptance and
22
+ * never extended by the bytes it sends: 35 s unless stated.
23
+ */
24
+ requestDeliveryMs?: number;
20
25
  }
21
26
  /**
22
27
  * Where a daemon's one-time import reads, stated by whoever builds it.
@@ -56,7 +61,11 @@ export declare class AuthSwitchAuthorityDaemon {
56
61
  private readonly runtimeBindingReleaseFences;
57
62
  private readonly runtimeBindingReleases;
58
63
  private closing;
64
+ /** Every admitted request until its answer is written; shutdown settles these before it closes the store. */
65
+ private readonly inFlight;
66
+ private readonly requestDeliveryMs;
59
67
  constructor(options: IAuthSwitchAuthorityDaemonOptions);
68
+ /** One exact capability of one binding: what a release fences and what an access resolution holds open. */
60
69
  private runtimeBindingKey;
61
70
  private beginRuntimeBindingAccess;
62
71
  private waitForRuntimeBindingAccess;
@@ -91,6 +100,21 @@ export declare class AuthSwitchAuthorityDaemon {
91
100
  private listen;
92
101
  /** A killed daemon leaves a pathname behind; only remove an unchanged, owned, refused Unix socket. */
93
102
  private clearStaleSocket;
103
+ /**
104
+ * Serves one request on one connection. A connection's failure is its own: a client that went away before
105
+ * its answer -- EPIPE or a reset on the write, a read error -- only destroys that socket, and the close
106
+ * that follows aborts the request it had admitted. Nothing one client does can end the daemon.
107
+ *
108
+ * A connection has one deadline to deliver its complete request, `requestDeliveryMs` from acceptance, which
109
+ * no byte it sends extends: a client dripping a request slowly holds its connection no longer than one that
110
+ * sends nothing. Once admitted, the request runs until it answers or its client goes away: the client's own
111
+ * deadline governs, which may be longer than the delivery deadline.
112
+ */
94
113
  private accept;
114
+ /**
115
+ * Stops admitting work -- the sockets keep listening so every new request is answered `authority_closing`
116
+ * -- settles everything already admitted, a waiting `events` or operation read being woken by the broker and
117
+ * answering from the still-open store, and only then closes the sockets and the store.
118
+ */
95
119
  close(): Promise<void>;
96
120
  }