@modelprofile.com/authswitch 6.5.0 → 7.0.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 (98) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/authority-contract.d.ts +302 -6
  3. package/dist_ts/authority-contract.js +1 -1
  4. package/dist_ts/authority-runtime-contract.d.ts +13 -0
  5. package/dist_ts/authorityrehearsal.child.d.ts +1 -0
  6. package/dist_ts/authorityrehearsal.child.js +395 -0
  7. package/dist_ts/classes.accountlist.js +4 -3
  8. package/dist_ts/classes.authoritybackup.d.ts +134 -0
  9. package/dist_ts/classes.authoritybackup.js +769 -0
  10. package/dist_ts/classes.authoritybroker.d.ts +25 -5
  11. package/dist_ts/classes.authoritybroker.js +392 -123
  12. package/dist_ts/classes.authoritycli.d.ts +24 -0
  13. package/dist_ts/classes.authoritycli.js +675 -0
  14. package/dist_ts/classes.authorityclient.d.ts +19 -7
  15. package/dist_ts/classes.authorityclient.js +51 -14
  16. package/dist_ts/classes.authoritydaemon.d.ts +28 -1
  17. package/dist_ts/classes.authoritydaemon.js +482 -36
  18. package/dist_ts/classes.authoritydatabase.d.ts +175 -10
  19. package/dist_ts/classes.authoritydatabase.js +1100 -52
  20. package/dist_ts/classes.authoritymodels.d.ts +223 -1
  21. package/dist_ts/classes.authoritymodels.js +798 -9
  22. package/dist_ts/classes.authoritypreuse.d.ts +47 -0
  23. package/dist_ts/classes.authoritypreuse.js +278 -0
  24. package/dist_ts/classes.authorityregistry.d.ts +24 -0
  25. package/dist_ts/classes.authorityregistry.js +88 -0
  26. package/dist_ts/classes.authorityrehearsal.d.ts +127 -0
  27. package/dist_ts/classes.authorityrehearsal.js +632 -0
  28. package/dist_ts/classes.authorityusage.d.ts +160 -0
  29. package/dist_ts/classes.authorityusage.js +429 -0
  30. package/dist_ts/classes.claudeauthority.d.ts +66 -0
  31. package/dist_ts/classes.claudeauthority.js +532 -0
  32. package/dist_ts/classes.claudecodeharness.js +3 -2
  33. package/dist_ts/classes.claudecodelocks.d.ts +13 -0
  34. package/dist_ts/classes.claudecodelocks.js +75 -3
  35. package/dist_ts/classes.claudenative.d.ts +137 -0
  36. package/dist_ts/classes.claudenative.js +731 -0
  37. package/dist_ts/classes.claudestatus.d.ts +9 -0
  38. package/dist_ts/classes.claudestatus.js +26 -9
  39. package/dist_ts/classes.claudetokenrefresh.d.ts +15 -1
  40. package/dist_ts/classes.claudetokenrefresh.js +74 -21
  41. package/dist_ts/classes.codexharness.js +4 -2
  42. package/dist_ts/classes.codexmanaged.d.ts +11 -0
  43. package/dist_ts/classes.codexmanaged.js +75 -14
  44. package/dist_ts/classes.codexpreuse.d.ts +8 -0
  45. package/dist_ts/classes.codexpreuse.js +24 -6
  46. package/dist_ts/classes.fileharness.d.ts +2 -0
  47. package/dist_ts/classes.fileharness.js +6 -4
  48. package/dist_ts/classes.limits.js +12 -7
  49. package/dist_ts/classes.opencodeharness.js +2 -2
  50. package/dist_ts/claudehttp.d.ts +10 -0
  51. package/dist_ts/claudehttp.js +29 -3
  52. package/dist_ts/index.d.ts +1 -0
  53. package/dist_ts/index.js +7 -1
  54. package/dist_ts/interfaces.harness.d.ts +6 -0
  55. package/dist_ts/interfaces.list.d.ts +9 -3
  56. package/dist_ts/plugins.d.ts +5 -2
  57. package/dist_ts/plugins.js +7 -3
  58. package/dist_ts/ts_migration/0001_authority_meta.d.ts +3 -0
  59. package/dist_ts/ts_migration/0001_authority_meta.js +32 -0
  60. package/dist_ts/ts_migration/index.d.ts +3 -0
  61. package/dist_ts/ts_migration/index.js +6 -0
  62. package/package.json +4 -1
  63. package/readme.md +181 -14
  64. package/ts/00_commitinfo_data.ts +1 -1
  65. package/ts/authority-contract.ts +264 -9
  66. package/ts/authority-runtime-contract.ts +14 -0
  67. package/ts/authorityrehearsal.child.ts +330 -0
  68. package/ts/classes.accountlist.ts +3 -2
  69. package/ts/classes.authoritybackup.ts +780 -0
  70. package/ts/classes.authoritybroker.ts +389 -121
  71. package/ts/classes.authoritycli.ts +719 -0
  72. package/ts/classes.authorityclient.ts +75 -18
  73. package/ts/classes.authoritydaemon.ts +449 -36
  74. package/ts/classes.authoritydatabase.ts +1147 -55
  75. package/ts/classes.authoritymodels.ts +541 -6
  76. package/ts/classes.authoritypreuse.ts +297 -0
  77. package/ts/classes.authorityregistry.ts +118 -0
  78. package/ts/classes.authorityrehearsal.ts +625 -0
  79. package/ts/classes.authorityusage.ts +527 -0
  80. package/ts/classes.claudeauthority.ts +541 -0
  81. package/ts/classes.claudecodeharness.ts +2 -1
  82. package/ts/classes.claudecodelocks.ts +70 -1
  83. package/ts/classes.claudenative.ts +816 -0
  84. package/ts/classes.claudestatus.ts +38 -9
  85. package/ts/classes.claudetokenrefresh.ts +82 -19
  86. package/ts/classes.codexharness.ts +3 -1
  87. package/ts/classes.codexmanaged.ts +75 -12
  88. package/ts/classes.codexpreuse.ts +33 -5
  89. package/ts/classes.fileharness.ts +7 -3
  90. package/ts/classes.limits.ts +11 -6
  91. package/ts/classes.opencodeharness.ts +1 -1
  92. package/ts/claudehttp.ts +31 -2
  93. package/ts/index.ts +6 -0
  94. package/ts/interfaces.harness.ts +6 -0
  95. package/ts/interfaces.list.ts +9 -3
  96. package/ts/plugins.ts +7 -2
  97. package/ts/ts_migration/0001_authority_meta.ts +33 -0
  98. package/ts/ts_migration/index.ts +7 -0
@@ -1,25 +1,58 @@
1
- import { type IStoredAuthorityAccount, type IStoredAuthorityBinding, type IStoredAuthorityCodexHome, type IStoredAuthorityEnrollment, type IStoredAuthorityEvent, type IStoredAuthorityGrant, type IStoredAuthorityHandoff, type IStoredAuthorityMeta, type IStoredAuthorityMigrationLedger } from './classes.authoritymodels.js';
1
+ import * as plugins from './plugins.js';
2
+ import { type IStoredAuthorityAccount, type IStoredAuthorityBinding, type IStoredAuthorityClaudeHandoff, type IStoredAuthorityClaudeHome, type IStoredAuthorityCodexHome, type IStoredAuthorityEnrollment, type IStoredAuthorityEvent, type IStoredAuthorityGrant, type IStoredAuthorityHandoff, type IStoredAuthorityDeviceOperation, type IStoredAuthorityMeta, type IStoredAuthorityMigrationLedger, type IStoredAuthorityOperation, type IStoredAuthorityPreuseOperation } from './classes.authoritymodels.js';
3
+ import type { IAuthSwitchStoredUsage, IAuthSwitchUsageContext } from './classes.authorityusage.js';
4
+ import { type IAuthorityStoredRecord } from './classes.authorityregistry.js';
5
+ import type { IAuthorityBackupSnapshotAttempt, IAuthorityBackupSourceCapsule } from './classes.authoritybackup.js';
2
6
  export interface IAuthSwitchAuthorityDatabaseOptions {
3
7
  dataDirectory: string;
4
8
  socketPath: string;
5
9
  }
10
+ export interface IAuthoritySnapshotCaptureOptions {
11
+ /** Recreate capsules on every transaction retry from a source already held under qualified exclusion. */
12
+ sourceFactory: () => AsyncIterable<IAuthorityBackupSourceCapsule>;
13
+ signal?: AbortSignal;
14
+ pageSize?: number;
15
+ }
16
+ type TSession = plugins.smartdata.SmartdataSession;
17
+ type TStoredAuthorityDeviceOperationAdmission = Omit<IStoredAuthorityDeviceOperation, 'expectedGrantGeneration'>;
18
+ type TClaudeHandoffDraft = {
19
+ home: IStoredAuthorityClaudeHome;
20
+ handoff: IStoredAuthorityClaudeHandoff;
21
+ outgoing: IStoredAuthorityGrant;
22
+ incoming: IStoredAuthorityGrant;
23
+ };
6
24
  /** Separate account, grant, binding and journal records; the only global record is a revision counter. */
7
25
  export declare class AuthSwitchAuthorityDatabase {
8
26
  private readonly options;
9
27
  private engine?;
10
28
  private database?;
11
29
  private started;
30
+ private mode;
12
31
  constructor(options: IAuthSwitchAuthorityDatabaseOptions);
13
32
  private privateDirectory;
14
- start(): Promise<void>;
33
+ start(options?: {
34
+ mode?: 'normal' | 'closed_restore';
35
+ }): Promise<void>;
15
36
  private db;
16
37
  private transaction;
38
+ /** One repeatable SmartData transaction per capture attempt; portable staging happens inside visit. */
39
+ captureBackupSnapshot(options: IAuthoritySnapshotCaptureOptions, visit: (attempt: IAuthorityBackupSnapshotAttempt) => Promise<void>): Promise<void>;
40
+ /** Reopened closed restore readback uses the same exhaustive registry and stable keyset order. */
41
+ readStoredRecords(options?: {
42
+ signal?: AbortSignal;
43
+ pageSize?: number;
44
+ }): AsyncIterable<IAuthorityStoredRecord>;
45
+ restoreClosedMeta(meta: IStoredAuthorityMeta): Promise<void>;
46
+ insertClosedRestoredRecord(record: IAuthorityStoredRecord): Promise<void>;
47
+ assertOpenAdmission(): Promise<void>;
17
48
  readMeta(): Promise<IStoredAuthorityMeta>;
18
49
  readAccount(id: string): Promise<IStoredAuthorityAccount | null>;
19
50
  readBinding(id: string): Promise<IStoredAuthorityBinding | null>;
20
51
  readCodexHome(id: string): Promise<IStoredAuthorityCodexHome | null>;
52
+ /** Durable home claims must be inspected even when the daemon has lost its process map. */
53
+ codexHomesForAccount(accountId: string, after: string | null): Promise<IStoredAuthorityCodexHome[]>;
21
54
  /** Home path identity is hashed by the caller; no vendor files or raw paths enter SmartData. */
22
- reserveCodexHome(accountId: string, scopeId: string, homeId: string, updateId: string): Promise<{
55
+ reserveCodexHome(accountId: string, grantId: string, scopeId: string, homeId: string, updateId: string): Promise<{
23
56
  newlyRegistered: boolean;
24
57
  }>;
25
58
  /** Pre-spawn claim is durable; the exact socket lets a later daemon detect a child born before PID readback. */
@@ -34,21 +67,95 @@ export declare class AuthSwitchAuthorityDatabase {
34
67
  readEnrollment(id: string): Promise<IStoredAuthorityEnrollment | null>;
35
68
  readHandoff(id: string): Promise<IStoredAuthorityHandoff | null>;
36
69
  readMigrationLedger(id: string): Promise<IStoredAuthorityMigrationLedger | null>;
70
+ readOperation(id: string): Promise<IStoredAuthorityOperation | null>;
71
+ operationsPage(after: string | null, limit?: number): Promise<{
72
+ operations: IStoredAuthorityDeviceOperation[];
73
+ nextCursor: string | null;
74
+ }>;
75
+ operationsByState(state: IStoredAuthorityDeviceOperation['state'], after: string | null, limit?: number): Promise<IStoredAuthorityDeviceOperation[]>;
76
+ preuseOperationsByState(state: IStoredAuthorityPreuseOperation['state'], after: string | null, limit?: number): Promise<IStoredAuthorityPreuseOperation[]>;
77
+ /** Insert-or-read admission for one exact device-login intent. Existing receipts are never replayed. */
78
+ createOperation(intent: TStoredAuthorityDeviceOperationAdmission): Promise<{
79
+ operation: IStoredAuthorityDeviceOperation;
80
+ created: boolean;
81
+ }>;
82
+ /** Revalidate the durable owner and exact reauthentication generation after mutable runtime preparation. */
83
+ confirmOperationMayStart(operationId: string): Promise<IStoredAuthorityDeviceOperation>;
84
+ changeOperation(updateId: string, operationId: string, change: (operation: IStoredAuthorityDeviceOperation) => IStoredAuthorityDeviceOperation): Promise<IStoredAuthorityDeviceOperation>;
85
+ /** Insert-or-read idempotency for one exact preuse request. Existing records are never resumed here. */
86
+ createPreuseOperation(operation: IStoredAuthorityPreuseOperation): Promise<{
87
+ operation: IStoredAuthorityPreuseOperation;
88
+ created: boolean;
89
+ }>;
90
+ /** The committed marker precedes the only quota-consuming provider call. */
91
+ markPreuseRequestMayHaveStarted(operationId: string, updateId: string, model: string, grantGeneration: number, now: string): Promise<IStoredAuthorityPreuseOperation>;
92
+ changePreuseOperation(updateId: string, operationId: string, change: (operation: IStoredAuthorityPreuseOperation) => IStoredAuthorityPreuseOperation): Promise<IStoredAuthorityPreuseOperation>;
37
93
  migrationLedgerByStatus(status: IStoredAuthorityMigrationLedger['status'], after: string | null, limit?: number): Promise<IStoredAuthorityMigrationLedger[]>;
38
94
  readAccountAndPrimaryGrant(id: string): Promise<{
39
95
  account: IStoredAuthorityAccount | null;
40
96
  grant: IStoredAuthorityGrant | null;
41
97
  }>;
42
- page(accountAfter: string | null, bindingAfter: string | null, limit: number): Promise<{
98
+ readAccountAndGrant(accountId: string, grantId: string): Promise<{
99
+ account: IStoredAuthorityAccount | null;
100
+ grant: IStoredAuthorityGrant | null;
101
+ }>;
102
+ /** Epoch, account and exact login are read from one authority snapshot. */
103
+ readUsageContext(accountId: string, loginId: string): Promise<IAuthSwitchUsageContext | null>;
104
+ /** Backend-only view used to validate a usage token before and after unsealing. */
105
+ readUsageAccessView(accountId: string, loginId: string): Promise<{
106
+ context: IAuthSwitchUsageContext;
107
+ account: IStoredAuthorityAccount;
108
+ grant: IStoredAuthorityGrant;
109
+ } | null>;
110
+ /** Coherent native source ownership, including the home handoff fence. */
111
+ readClaudeNativeUsageView(homeId: string, accountId: string, loginId: string): Promise<{
112
+ context: IAuthSwitchUsageContext;
113
+ account: IStoredAuthorityAccount;
114
+ grant: IStoredAuthorityGrant;
115
+ home: IStoredAuthorityClaudeHome;
116
+ } | null>;
117
+ readUsage(accountId: string, loginId: string): Promise<IAuthSwitchStoredUsage | null>;
118
+ /** Publish one credential-free usage result only if its authority and predecessor still match. */
119
+ publishUsageIfCurrent(context: IAuthSwitchUsageContext, previousUpdateId: string | null, next: IAuthSwitchStoredUsage): Promise<boolean>;
120
+ page(accountAfter: string | null, grantAfter: string | null, bindingAfter: string | null, limit: number): Promise<{
43
121
  meta: IStoredAuthorityMeta;
44
- accounts: Array<{
45
- account: IStoredAuthorityAccount;
46
- grant: IStoredAuthorityGrant | null;
47
- }>;
122
+ accounts: IStoredAuthorityAccount[];
123
+ grants: IStoredAuthorityGrant[];
48
124
  bindings: IStoredAuthorityBinding[];
49
125
  nextAccountCursor: string | null;
126
+ nextGrantCursor: string | null;
50
127
  nextBindingCursor: string | null;
51
128
  }>;
129
+ /**
130
+ * One bounded, repeatable-read diagnostic page. Its metadata revision is authority state,
131
+ * not a complete change clock for every native-home record.
132
+ */
133
+ doctorPage(cursors: {
134
+ accountAfter: string | null;
135
+ loginAfter: string | null;
136
+ codexHomeAfter: string | null;
137
+ claudeHomeAfter: string | null;
138
+ claudeHandoffAfter: string | null;
139
+ nativeHandoffAfter: string | null;
140
+ migrationAfter: string | null;
141
+ }, limit: number): Promise<{
142
+ observedAt: string;
143
+ meta: IStoredAuthorityMeta;
144
+ accounts: IStoredAuthorityAccount[];
145
+ logins: IStoredAuthorityGrant[];
146
+ codexHomes: IStoredAuthorityCodexHome[];
147
+ claudeHomes: IStoredAuthorityClaudeHome[];
148
+ claudeHandoffs: IStoredAuthorityClaudeHandoff[];
149
+ nativeHandoffs: IStoredAuthorityHandoff[];
150
+ migrations: IStoredAuthorityMigrationLedger[];
151
+ nextAccountCursor: string | null;
152
+ nextLoginCursor: string | null;
153
+ nextCodexHomeCursor: string | null;
154
+ nextClaudeHomeCursor: string | null;
155
+ nextClaudeHandoffCursor: string | null;
156
+ nextNativeHandoffCursor: string | null;
157
+ nextMigrationCursor: string | null;
158
+ }>;
52
159
  grantsByState(state: IStoredAuthorityGrant['state'], after: string | null, limit?: number): Promise<IStoredAuthorityGrant[]>;
53
160
  grantsForAccount(accountId: string, after: string | null, limit?: number): Promise<IStoredAuthorityGrant[]>;
54
161
  eventsAfter(revision: number, limit?: number): Promise<IStoredAuthorityEvent[]>;
@@ -64,6 +171,15 @@ export declare class AuthSwitchAuthorityDatabase {
64
171
  account: IStoredAuthorityAccount;
65
172
  grant: IStoredAuthorityGrant;
66
173
  }>;
174
+ /** Device-login result, account and grant are one commit; a lost RPC response remains discoverable by operation ID. */
175
+ commitLoginOperation(updateId: string, operationId: string, accountId: string, grantId: string, change: (account: IStoredAuthorityAccount | null, grant: IStoredAuthorityGrant | null) => {
176
+ account: IStoredAuthorityAccount;
177
+ grant: IStoredAuthorityGrant;
178
+ }): Promise<{
179
+ account: IStoredAuthorityAccount;
180
+ grant: IStoredAuthorityGrant;
181
+ operation: IStoredAuthorityDeviceOperation;
182
+ }>;
67
183
  /** Grant transition and public account revision share a transaction and one event. */
68
184
  changeGrant(updateId: string, grantId: string, change: (grant: IStoredAuthorityGrant, account: IStoredAuthorityAccount) => IStoredAuthorityGrant): Promise<{
69
185
  meta: IStoredAuthorityMeta;
@@ -81,12 +197,15 @@ export declare class AuthSwitchAuthorityDatabase {
81
197
  meta: IStoredAuthorityMeta;
82
198
  account: IStoredAuthorityAccount;
83
199
  }>;
84
- changeBinding(updateId: string, bindingId: string, accountId: string, change: (draft: IStoredAuthorityBinding | null, account: IStoredAuthorityAccount, grant: IStoredAuthorityGrant | null) => IStoredAuthorityBinding): Promise<{
200
+ changeBinding(updateId: string, bindingId: string, accountId: string, grantId: string, change: (draft: IStoredAuthorityBinding | null, account: IStoredAuthorityAccount, grant: IStoredAuthorityGrant | null) => IStoredAuthorityBinding): Promise<{
85
201
  meta: IStoredAuthorityMeta;
86
202
  binding: IStoredAuthorityBinding;
87
203
  }>;
88
- /** Closing an owned runtime revokes only its exact capability/incarnation. */
204
+ private revokeBindingExact;
205
+ /** Closing an authority-owned runtime revokes its exact capability after owned cleanup. */
89
206
  revokeBinding(updateId: string, bindingId: string, capabilityHash: string): Promise<boolean>;
207
+ /** External callers can release only Flex/OpenCode bindings; managed Codex cleanup stays daemon-owned. */
208
+ releaseExternalBinding(updateId: string, bindingId: string, capabilityHash: string): Promise<boolean>;
90
209
  /** Enrollment metadata is sealed by the caller and cannot become detached from an account. */
91
210
  changeEnrollment(updateId: string, enrollmentId: string, accountId: string, change: (current: IStoredAuthorityEnrollment | null) => IStoredAuthorityEnrollment): Promise<IStoredAuthorityEnrollment>;
92
211
  /** Journal and grant advance together; no intermediate phase may expose an active daemon grant. */
@@ -97,7 +216,53 @@ export declare class AuthSwitchAuthorityDatabase {
97
216
  handoff: IStoredAuthorityHandoff;
98
217
  grant: IStoredAuthorityGrant;
99
218
  }>;
219
+ readClaudeHome(homeId: string): Promise<IStoredAuthorityClaudeHome | null>;
220
+ readClaudeHandoff(operationId: string): Promise<IStoredAuthorityClaudeHandoff | null>;
221
+ /** A backed-up backend import receipt, not an account snapshot, authorizes an inactive Claude grant. */
222
+ hasVerifiedClaudeGrantReceipt(accountId: string, grantId: string, session?: TSession): Promise<boolean>;
223
+ claudeHandoffsByPhase(phase: IStoredAuthorityClaudeHandoff['phase'], after: string | null): Promise<IStoredAuthorityClaudeHandoff[]>;
224
+ claudeHandoffsPage(after: string | null, limit?: number): Promise<{
225
+ handoffs: IStoredAuthorityClaudeHandoff[];
226
+ nextCursor: string | null;
227
+ }>;
228
+ /** Only a verified backend import receipt may adopt a native home. No startup autodiscovery exists. */
229
+ registerClaudeHomeFromReceipt(input: {
230
+ homeId: string;
231
+ accountId: string;
232
+ grantId: string;
233
+ receiptId: string;
234
+ sourceDigest: string;
235
+ accountUuid: string;
236
+ organizationUuid: string;
237
+ updateId: string;
238
+ now: string;
239
+ }): Promise<IStoredAuthorityClaudeHome>;
240
+ readClaudeHandoffContext(operationId: string): Promise<{
241
+ handoff: IStoredAuthorityClaudeHandoff;
242
+ home: IStoredAuthorityClaudeHome;
243
+ outgoing: IStoredAuthorityGrant;
244
+ incoming: IStoredAuthorityGrant;
245
+ outgoingAccount: IStoredAuthorityAccount;
246
+ incomingAccount: IStoredAuthorityAccount;
247
+ } | null>;
248
+ /** One phase advances both grants, home, journal and both account events atomically. */
249
+ changeClaudeHandoff(input: {
250
+ operationId: string;
251
+ homeId: string;
252
+ incomingGrantId: string;
253
+ updateId: string;
254
+ eventIds: readonly [string, string];
255
+ change: (current: {
256
+ home: IStoredAuthorityClaudeHome;
257
+ handoff: IStoredAuthorityClaudeHandoff | null;
258
+ outgoing: IStoredAuthorityGrant;
259
+ incoming: IStoredAuthorityGrant;
260
+ outgoingAccount: IStoredAuthorityAccount;
261
+ incomingAccount: IStoredAuthorityAccount;
262
+ }) => TClaudeHandoffDraft;
263
+ }): Promise<TClaudeHandoffDraft>;
100
264
  /** Ledger transitions never silently replace an active credential or waive backup proof. */
101
265
  changeMigrationLedger(updateId: string, ledgerId: string, change: (current: IStoredAuthorityMigrationLedger | null) => IStoredAuthorityMigrationLedger): Promise<IStoredAuthorityMigrationLedger>;
102
266
  stop(): Promise<void>;
103
267
  }
268
+ export {};