mindoodb 0.0.93 → 0.0.95

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 (146) hide show
  1. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +17 -1
  2. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -1
  3. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +63 -4
  4. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -1
  5. package/dist/appendonlystores/network/HttpTransport.d.ts +10 -1
  6. package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -1
  7. package/dist/appendonlystores/network/HttpTransport.js +45 -3
  8. package/dist/appendonlystores/network/HttpTransport.js.map +1 -1
  9. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +22 -0
  10. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -1
  11. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +33 -0
  12. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -1
  13. package/dist/browser/index.mjs +39 -0
  14. package/dist/core/BaseMindooDB.d.ts +9 -0
  15. package/dist/core/BaseMindooDB.d.ts.map +1 -1
  16. package/dist/core/BaseMindooDB.js +65 -2
  17. package/dist/core/BaseMindooDB.js.map +1 -1
  18. package/dist/core/BaseMindooTenant.d.ts +75 -1
  19. package/dist/core/BaseMindooTenant.d.ts.map +1 -1
  20. package/dist/core/BaseMindooTenant.js +229 -7
  21. package/dist/core/BaseMindooTenant.js.map +1 -1
  22. package/dist/core/BaseMindooTenantDirectory.d.ts +165 -2
  23. package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
  24. package/dist/core/BaseMindooTenantDirectory.js +648 -112
  25. package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
  26. package/dist/core/BaseMindooTenantFactory.d.ts +30 -0
  27. package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
  28. package/dist/core/BaseMindooTenantFactory.js +95 -0
  29. package/dist/core/BaseMindooTenantFactory.js.map +1 -1
  30. package/dist/core/accesscontrol/DirectoryStateNode.d.ts +45 -0
  31. package/dist/core/accesscontrol/DirectoryStateNode.d.ts.map +1 -1
  32. package/dist/core/accesscontrol/DirectoryStateNode.js +58 -0
  33. package/dist/core/accesscontrol/DirectoryStateNode.js.map +1 -1
  34. package/dist/core/accesscontrol/adminKeys.d.ts +130 -0
  35. package/dist/core/accesscontrol/adminKeys.d.ts.map +1 -0
  36. package/dist/core/accesscontrol/adminKeys.js +164 -0
  37. package/dist/core/accesscontrol/adminKeys.js.map +1 -0
  38. package/dist/core/accesscontrol/directoryAdminResolver.d.ts +54 -0
  39. package/dist/core/accesscontrol/directoryAdminResolver.d.ts.map +1 -0
  40. package/dist/core/accesscontrol/directoryAdminResolver.js +217 -0
  41. package/dist/core/accesscontrol/directoryAdminResolver.js.map +1 -0
  42. package/dist/core/accesscontrol/directoryProjection.d.ts.map +1 -1
  43. package/dist/core/accesscontrol/directoryProjection.js +34 -0
  44. package/dist/core/accesscontrol/directoryProjection.js.map +1 -1
  45. package/dist/core/accesscontrol/grantKeys.d.ts +16 -0
  46. package/dist/core/accesscontrol/grantKeys.d.ts.map +1 -1
  47. package/dist/core/accesscontrol/grantKeys.js +37 -0
  48. package/dist/core/accesscontrol/grantKeys.js.map +1 -1
  49. package/dist/core/accesscontrol/types.d.ts +33 -2
  50. package/dist/core/accesscontrol/types.d.ts.map +1 -1
  51. package/dist/core/accesscontrol/types.js +32 -0
  52. package/dist/core/accesscontrol/types.js.map +1 -1
  53. package/dist/core/appendonlystores/network/AuthenticationService.d.ts.map +1 -1
  54. package/dist/core/appendonlystores/network/AuthenticationService.js +8 -0
  55. package/dist/core/appendonlystores/network/AuthenticationService.js.map +1 -1
  56. package/dist/core/appendonlystores/network/NetworkTransport.d.ts +16 -1
  57. package/dist/core/appendonlystores/network/NetworkTransport.d.ts.map +1 -1
  58. package/dist/core/appendonlystores/network/types.d.ts +13 -0
  59. package/dist/core/appendonlystores/network/types.d.ts.map +1 -1
  60. package/dist/core/appendonlystores/network/types.js.map +1 -1
  61. package/dist/core/builtinDbInvariants.d.ts +18 -2
  62. package/dist/core/builtinDbInvariants.d.ts.map +1 -1
  63. package/dist/core/builtinDbInvariants.js +41 -5
  64. package/dist/core/builtinDbInvariants.js.map +1 -1
  65. package/dist/core/index.d.ts +5 -2
  66. package/dist/core/index.d.ts.map +1 -1
  67. package/dist/core/index.js +28 -5
  68. package/dist/core/index.js.map +1 -1
  69. package/dist/core/live/LiveChannel.d.ts +41 -0
  70. package/dist/core/live/LiveChannel.d.ts.map +1 -0
  71. package/dist/core/live/LiveChannel.js +151 -0
  72. package/dist/core/live/LiveChannel.js.map +1 -0
  73. package/dist/core/types.d.ts +182 -0
  74. package/dist/core/types.d.ts.map +1 -1
  75. package/dist/core/types.js.map +1 -1
  76. package/dist/core/uri/MindooURI.d.ts +1 -1
  77. package/dist/core/uri/MindooURI.d.ts.map +1 -1
  78. package/dist/core/uri/MindooURI.js +2 -0
  79. package/dist/core/uri/MindooURI.js.map +1 -1
  80. package/dist/core/uri/adminUri.d.ts +52 -0
  81. package/dist/core/uri/adminUri.d.ts.map +1 -0
  82. package/dist/core/uri/adminUri.js +100 -0
  83. package/dist/core/uri/adminUri.js.map +1 -0
  84. package/dist/core/uri/joinRequestUri.d.ts.map +1 -1
  85. package/dist/core/uri/joinRequestUri.js +14 -1
  86. package/dist/core/uri/joinRequestUri.js.map +1 -1
  87. package/dist/core/userid/index.d.ts +9 -0
  88. package/dist/core/userid/index.d.ts.map +1 -1
  89. package/dist/core/userkeys/UserKeyDocument.d.ts +7 -1
  90. package/dist/core/userkeys/UserKeyDocument.d.ts.map +1 -1
  91. package/dist/core/userkeys/UserKeyDocument.js +14 -3
  92. package/dist/core/userkeys/UserKeyDocument.js.map +1 -1
  93. package/dist/core/userkeys/UserKeyManager.d.ts +95 -4
  94. package/dist/core/userkeys/UserKeyManager.d.ts.map +1 -1
  95. package/dist/core/userkeys/UserKeyManager.js +606 -59
  96. package/dist/core/userkeys/UserKeyManager.js.map +1 -1
  97. package/dist/core/userkeys/deviceCertificate.d.ts +46 -0
  98. package/dist/core/userkeys/deviceCertificate.d.ts.map +1 -0
  99. package/dist/core/userkeys/deviceCertificate.js +86 -0
  100. package/dist/core/userkeys/deviceCertificate.js.map +1 -0
  101. package/dist/core/userkeys/generationSignature.d.ts +32 -0
  102. package/dist/core/userkeys/generationSignature.d.ts.map +1 -0
  103. package/dist/core/userkeys/generationSignature.js +136 -0
  104. package/dist/core/userkeys/generationSignature.js.map +1 -0
  105. package/dist/core/userkeys/generationValidity.d.ts +75 -0
  106. package/dist/core/userkeys/generationValidity.d.ts.map +1 -0
  107. package/dist/core/userkeys/generationValidity.js +175 -0
  108. package/dist/core/userkeys/generationValidity.js.map +1 -0
  109. package/dist/core/userkeys/index.d.ts +5 -2
  110. package/dist/core/userkeys/index.d.ts.map +1 -1
  111. package/dist/core/userkeys/index.js +21 -1
  112. package/dist/core/userkeys/index.js.map +1 -1
  113. package/dist/core/userkeys/resolveUserKeyDocument.d.ts +16 -0
  114. package/dist/core/userkeys/resolveUserKeyDocument.d.ts.map +1 -1
  115. package/dist/core/userkeys/resolveUserKeyDocument.js +42 -1
  116. package/dist/core/userkeys/resolveUserKeyDocument.js.map +1 -1
  117. package/dist/core/userkeys/types.d.ts +26 -0
  118. package/dist/core/userkeys/types.d.ts.map +1 -1
  119. package/dist/core/userkeys/types.js +3 -1
  120. package/dist/core/userkeys/types.js.map +1 -1
  121. package/dist/core/userkeys/validateUserKeyDocument.d.ts.map +1 -1
  122. package/dist/core/userkeys/validateUserKeyDocument.js +7 -0
  123. package/dist/core/userkeys/validateUserKeyDocument.js.map +1 -1
  124. package/dist/node/server/MindooDBServer.d.ts.map +1 -1
  125. package/dist/node/server/MindooDBServer.js +11 -0
  126. package/dist/node/server/MindooDBServer.js.map +1 -1
  127. package/dist/server/SyncEventBus.d.ts +22 -0
  128. package/dist/server/SyncEventBus.d.ts.map +1 -1
  129. package/dist/server/SyncEventBus.js +21 -0
  130. package/dist/server/SyncEventBus.js.map +1 -1
  131. package/dist/server/TenantManager.d.ts +9 -0
  132. package/dist/server/TenantManager.d.ts.map +1 -1
  133. package/dist/server/TenantManager.js +96 -0
  134. package/dist/server/TenantManager.js.map +1 -1
  135. package/dist/server/http/MindooDBServerCore.d.ts +39 -1
  136. package/dist/server/http/MindooDBServerCore.d.ts.map +1 -1
  137. package/dist/server/http/MindooDBServerCore.js +121 -2
  138. package/dist/server/http/MindooDBServerCore.js.map +1 -1
  139. package/dist/server/http/types.d.ts +10 -1
  140. package/dist/server/http/types.d.ts.map +1 -1
  141. package/dist/server/http/types.js.map +1 -1
  142. package/dist/server/index.d.ts +2 -2
  143. package/dist/server/index.d.ts.map +1 -1
  144. package/dist/server/index.js +2 -1
  145. package/dist/server/index.js.map +1 -1
  146. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { MindooTenant, EncryptedPrivateKey, MindooDB, ContentAddressedStore, ContentAddressedStoreFactory, StoreKind, OpenDBOptions, MindooTenantFactory, MindooTenantDirectory, StoreEntryMetadata, SigningKeyPair, JoinRequest, JoinResponse, ApproveJoinRequestOptions, ConnectToServerOptions, PublishToServerOptions } from "./types";
1
+ import { MindooTenant, EncryptedPrivateKey, MindooDB, ContentAddressedStore, ContentAddressedStoreFactory, StoreKind, OpenDBOptions, MindooTenantFactory, MindooTenantDirectory, StoreEntryMetadata, SigningKeyPair, JoinRequest, JoinResponse, ApproveJoinRequestOptions, ApproveAdminRequestOptions, ConnectToServerOptions, PublishToServerOptions } from "./types";
2
2
  import { PrivateUserId, PublicUserId } from "./userid";
3
3
  import { CryptoAdapter } from "./crypto/CryptoAdapter";
4
4
  import { KeyBag } from "./keys/KeyBag";
@@ -9,8 +9,10 @@ import type { RecipientOptions, RecipientSpec } from "./userkeys/sealedTypes";
9
9
  import { type SealedValue } from "./userkeys/sealedValues";
10
10
  import { MindooDocSigner } from "./crypto/MindooDocSigner";
11
11
  import { Logger } from "./logging";
12
+ import { type AdminRequest, type AdminResponse } from "./uri/adminUri";
12
13
  import { type LocalCacheStore } from "./cache/LocalCacheStore";
13
14
  import { CacheManager } from "./cache/CacheManager";
15
+ import { DirectoryAdminKeyResolver } from "./accesscontrol/directoryAdminResolver";
14
16
  /**
15
17
  * BaseMindooTenant is a platform-agnostic implementation of MindooTenant
16
18
  * that works in both browser and server environments.
@@ -143,6 +145,12 @@ export declare class BaseMindooTenant implements MindooTenant {
143
145
  getCurrentPrivateUser(): PrivateUserId;
144
146
  getCurrentUserPassword(): string;
145
147
  getUserKeyManager(): UserKeyManager;
148
+ /**
149
+ * The document store of `dbId` without opening (materializing) the
150
+ * database: the open database's store, or a store handle from the factory.
151
+ * For readers that only scan entries, such as the device-certificate index.
152
+ */
153
+ getDocStoreForDb(dbId: string): ContentAddressedStore;
146
154
  isDatabaseOpen(dbId: string): boolean;
147
155
  /** Fully initialized (not merely in-flight). See UserKeyManager.canReconcileAgainstUserDirectory. */
148
156
  isDatabaseReady(dbId: string): boolean;
@@ -174,6 +182,20 @@ export declare class BaseMindooTenant implements MindooTenant {
174
182
  declineUserKeyDevice(fingerprint: string): Promise<void>;
175
183
  undoDeclineUserKeyDevice(fingerprint: string): Promise<void>;
176
184
  rotateUserKey(): Promise<void>;
185
+ getDeviceSelfGrantPublicKey(): Promise<string | null>;
186
+ issueDeviceCertificate(device: {
187
+ signingPublicKey: string;
188
+ encryptionPublicKey: string;
189
+ }, label?: string): Promise<{
190
+ docId: string;
191
+ certificate: import("./userkeys/deviceCertificate").DeviceCertificatePayload;
192
+ }>;
193
+ revokeOwnDeviceCertificate(fingerprint: string): Promise<number>;
194
+ listOwnDeviceCertificates(): Promise<Array<{
195
+ docId: string;
196
+ fingerprint: string;
197
+ certificate: import("./userkeys/deviceCertificate").DeviceCertificatePayload;
198
+ }>>;
177
199
  reconcileUserKeys(options?: {
178
200
  allowSelfCreate?: boolean;
179
201
  }): Promise<UserKeyEnrollmentStatus>;
@@ -250,6 +272,50 @@ export declare class BaseMindooTenant implements MindooTenant {
250
272
  * @return The administration public key (Ed25519, PEM format)
251
273
  */
252
274
  getAdministrationPublicKey(): string;
275
+ /**
276
+ * Signing keys this process writes with besides the current user's (e.g. a
277
+ * delegated admin key, docs/accesscontrol.md §6.13). Directory entries such a
278
+ * key wrote here count locally before a witness stamped them.
279
+ */
280
+ private readonly localSigningKeys;
281
+ /** Store-level admin-key resolver of the open `directory` database (§6.13). */
282
+ private directoryAdminResolver;
283
+ /** Public keys derived from admin private keys handed to directory methods. */
284
+ private readonly adminPublicKeyByPrivateKey;
285
+ /** Remember that this process signs with `publicKey` (see {@link isLocalSigningKey}). */
286
+ noteLocalSigningKey(publicKey: string): void;
287
+ /** Whether this process signs with `publicKey`: the current user or a noted key. */
288
+ isLocalSigningKey(publicKey: string): boolean;
289
+ /**
290
+ * The store-level admin-key resolver for this tenant's `directory` database,
291
+ * created on first use for `store`. Used by the directory load path and by
292
+ * {@link isAdminSigningKeyAt}; it reads root-signed admin-key documents
293
+ * straight from the store, so it never recurses into directory materialization.
294
+ */
295
+ getDirectoryAdminResolver(store: ContentAddressedStore): DirectoryAdminKeyResolver;
296
+ /**
297
+ * Whether `signingKey` is a tenant admin at time `T` (docs/accesscontrol.md
298
+ * §6.13): the root admin key always is; a delegated admin key is while its
299
+ * admin-key document's window covers `T`. `T` is a witness time, or "now"
300
+ * for live decisions.
301
+ */
302
+ isAdminSigningKeyAt(signingKey: string, T: number): Promise<boolean>;
303
+ /**
304
+ * Whether `signingKey` has ever been a delegated admin key of this tenant (an
305
+ * admin-key document exists, whatever its window). Such a key holds no grant,
306
+ * so its trust is decided by {@link isAdminSigningKeyAt} alone.
307
+ */
308
+ isKnownDelegatedAdminKey(signingKey: string): Promise<boolean>;
309
+ /**
310
+ * The signing key pair for an admin private key passed to a directory method.
311
+ * The root admin key pair is the default; for a delegated admin key
312
+ * (§6.13) the public key is derived from the private key once and cached.
313
+ * The derived key is remembered as a local signing key, so the directory
314
+ * entries it writes count here before a witness stamps them.
315
+ */
316
+ resolveAdminSigningKeyPair(privateKey: EncryptedPrivateKey, password: string): Promise<SigningKeyPair>;
317
+ /** Ed25519 public key (SPKI PEM) of an encrypted private signing key. */
318
+ private derivePublicSigningKey;
253
319
  /**
254
320
  * Get the administration encryption public key for this tenant.
255
321
  * Used for encrypting sensitive data in the directory that only admins can decrypt
@@ -466,6 +532,14 @@ export declare class BaseMindooTenant implements MindooTenant {
466
532
  format: "uri";
467
533
  }): Promise<string>;
468
534
  approveJoinRequest(joinRequest: JoinRequest | string, options: ApproveJoinRequestOptions): Promise<JoinResponse>;
535
+ /**
536
+ * Approve a delegated-admin request (docs/accesscontrol.md §6.13). Root admin
537
+ * key only: writes the admin-key document and the `tenantsetup` entry, then
538
+ * returns an admin response with `default` and `$publicinfos` wrapped to the
539
+ * new admin's encryption key. The response names the ROOT key as
540
+ * `adminSigningPublicKey`; the trust anchor never changes.
541
+ */
542
+ approveAdminRequest(adminRequest: AdminRequest | string, options: ApproveAdminRequestOptions): Promise<AdminResponse | string>;
469
543
  /**
470
544
  * Publish (register) this tenant on a MindooDB server.
471
545
  *
@@ -1 +1 @@
1
- {"version":3,"file":"BaseMindooTenant.d.ts","sourceRoot":"","sources":["../../src/core/BaseMindooTenant.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,qBAAqB,EACrB,4BAA4B,EAE5B,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,YAAY,EAGZ,yBAAyB,EACzB,sBAAsB,EAEtB,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAkB,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,MAAM,EAA2B,MAAM,eAAe,CAAC;AAIhE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAe3D,OAAO,EAAE,MAAM,EAA8C,MAAM,WAAW,CAAC;AAG/E,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAExF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMpD;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,iCAAiC,CAAS;IAClD,OAAO,CAAC,WAAW,CAAgB;IACnC,sEAAsE;IACtE,OAAO,CAAC,uBAAuB,CAAK;IACpC,OAAO,CAAC,iBAAiB,CAAgF;IACzG,OAAO,CAAC,mBAAmB,CAAS;IACpC,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,oBAAoB,CAA6C;IACzE,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,gBAAgB,CAA0D;IAClF;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB,CAAmC;IAC7D;;;OAGG;IACH,OAAO,CAAC,wBAAwB,CAA6B;IAC7D;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqD;IAGrF,OAAO,CAAC,uBAAuB,CAAC,CAAa;IAC7C,OAAO,CAAC,4BAA4B,CAAC,CAAY;IACjD,OAAO,CAAC,+BAA+B,CAAC,CAAY;IACpD;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgC;IACpE;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgC;IACvE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAO;IAC7D,OAAO,CAAC,MAAM,CAAS;IAQvB,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAMtC;IACH,OAAO,CAAC,yBAAyB,CAAS;IAC1C,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA+B;IAC/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;IACrE,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAC5D,6FAA6F;IAC7F,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IAGjE,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;;;;;;;OASG;IACH,OAAO,CAAC,qBAAqB,CAAC,CAA+B;gBAG3D,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,MAAM,EAChB,uBAAuB,EAAE,MAAM,EAC/B,iCAAiC,EAAE,MAAM,EACzC,WAAW,EAAE,aAAa,EAC1B,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,4BAA4B,EAC1C,aAAa,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,MAAM,EACf,qBAAqB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,eAAe,CAAC,EAAE,eAAe;IACjC;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE;QACrB,UAAU,CAAC,EAAE,SAAS,CAAC;QACvB,aAAa,CAAC,EAAE,SAAS,CAAC;QAC1B,kBAAkB,CAAC,EAAE,SAAS,CAAC;QAC/B,mBAAmB,CAAC,EAAE,UAAU,CAAC;KAClC;IA0FH;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB1C,oFAAoF;IACpF,OAAO,CAAC,iBAAiB,CAA8C;IAEjE,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkC/F,gBAAgB,IAAI,aAAa;IAIjC,OAAO,CAAC,uBAAuB;IAW/B,qBAAqB,IAAI,aAAa;IAItC,sBAAsB,IAAI,MAAM;IAIhC,iBAAiB,IAAI,cAAc;IAInC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,qGAAqG;IACrG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAItC;;;;;OAKG;IACH,wBAAwB,IAAI,IAAI;IAYhC;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAIjD;;;;;;OAMG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAezC,wBAAwB,IAAI,IAAI;IAIhC,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI5C,yBAAyB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAI5D,kBAAkB,IAAI,OAAO,CAAC,OAAO,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;IAI5E,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,iBAAiB,CAAC,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAI5F,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtC,0BAA0B,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAI9D,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;;;;OAKG;IACH,yBAAyB,CACvB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,UAAU,EAAE,EACzB,KAAK,CAAC,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,IAAI;IAQP,uDAAuD;IACvD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,UAAU,CAAA;KAAE,CAAC;IAMzE;;;;OAIG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAM7C;;;;OAIG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAO7C,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE;YAInC,gBAAgB;YAOhB,eAAe;IAc7B,mFAAmF;IACnF,OAAO,CAAC,iBAAiB;IAczB;;;;OAIG;IACG,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCvF;;;;;;OAMG;IACG,SAAS,CACb,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,aAAa,EAAE,EAC3B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,WAAW,CAAC;IAkBvB;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQtE;;;;;;OAMG;IACG,uBAAuB,CAC3B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,KAAK,CAAC;QAAE,UAAU,CAAC,EAAE,eAAe,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,EACnE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,IAAI,CAAC;IAkChB,UAAU,IAAI,mBAAmB;IAIjC,KAAK,IAAI,MAAM;IAIf;;;;;OAKG;IACH,0BAA0B,IAAI,MAAM;IAIpC;;;;;;OAMG;IACH,oCAAoC,IAAI,MAAM;IAI9C;;;;OAIG;YACW,kBAAkB;IA+B1B,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA8GjF,cAAc,CAAC,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsDhG;;;;;;;;OAQG;YACW,0BAA0B;IAYlC,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAqB3D;;;;;;;;;;;OAWG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAMrF;;;;;;;OAOG;IACG,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC;IAiBb,kBAAkB,CACtB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC;IAwDhB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgCtG;;;OAGG;YACW,qBAAqB;IAsB7B,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAgDlG;;;;;;;OAOG;YACW,yBAAyB;IAsBjC,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC;IAS/C;;;OAGG;IACH,wBAAwB,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAI9D,aAAa,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAQrD;;;;;;;;;;;;;;OAcG;IACG,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC;IA0BjD;;;;;;;;;;;OAWG;IACG,eAAe,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgChE,uEAAuE;YACzD,qBAAqB;YA8BrB,0BAA0B;IA+ElC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;YAuDtD,cAAc;IAqE5B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAMlC;IAEX;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAYhC;;;;;;OAMG;IACG,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmC/D;;;;OAIG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAmBtE;;;;;;;;OAQG;IACG,+BAA+B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjF;;;;;;;;OAQG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoD/F;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;YAI/B,kBAAkB;IAsChC;;;;;;;;;;;;OAYG;IACG,2BAA2B,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxF;;;;OAIG;IACG,+BAA+B,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5F;;;;;;OAMG;IACG,0CAA0C,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjE,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe;YAM9C,gCAAgC;IAqB9C,OAAO,CAAC,4BAA4B;IAMpC;;OAEG;IACG,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG;QAAE,MAAM,EAAE,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9H,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC;IA+QtH;;;;;;;;;;OAUG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6GzF;;;;;;;;;;;;OAYG;YACW,oBAAoB;IAyClC,OAAO,CAAC,eAAe;YAmBT,mBAAmB;YA2EnB,iCAAiC;IAsC/C;;OAEG;YACW,yBAAyB;IA6EvC;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,SAA0B,EACrC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,qBAAqB,CAAC;IAkFjC;;;OAGG;cACa,sBAAsB,IAAI,OAAO,CAAC,SAAS,CAAC;IA8B5D;;;OAGG;YACW,yBAAyB;IA4BvC;;;;;;OAMG;IACH,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAInD;;;;;;OAMG;IACG,mCAAmC,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IActE;;;;;;;;;OASG;IACU,iBAAiB,CAC5B,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC;IAsBvB;;;;;;;;OAQG;IACG,qBAAqB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YAalD,yBAAyB;IA8BvC;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IASxD;;;OAGG;IACI,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IAQpD;;;;OAIG;IACI,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW;IA0BjD;;;;OAIG;IACH,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,KAAQ;IACxD,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,6BAA6B,KAAQ;IAE/D;;;;;;OAMG;IACG,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAejE;;;;;;OAMG;IACG,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7C;;;;;OAKG;IACG,wBAAwB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAezE;;;;;;;;;;;;;;;;;;OAkBG;IACG,uCAAuC,IAAI,OAAO,CAAC;QACvD,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,gFAAgF;QAChF,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IA4DF;;;;OAIG;YACW,gCAAgC;IA6B9C;;;;;;OAMG;IACG,2CAA2C,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlE;;;;;;;;;OASG;IACG,8BAA8B,CAClC,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAS5E;;;;;;OAMG;IACG,4BAA4B,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,EACjB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;;;OAOG;IACG,oCAAoC,CACxC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC,GAClE,OAAO,CAAC,MAAM,CAAC;IAwBlB,8FAA8F;IACxF,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ7D;;;;;OAKG;IACG,sBAAsB,CAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAchF;;;;;;;;OAQG;IACG,wCAAwC,CAC5C,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,MAAM,CAAC;IAiClB,oEAAoE;IACpE,OAAO,CAAC,4BAA4B;IAKpC;;;;;;OAMG;cACa,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA8B7E;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,qCAAqC,IAAI,OAAO;IAI1D;;;;;;;;;;OAUG;IACG,wBAAwB,CAC5B,OAAO,EAAE,UAAU,EACnB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,UAAU,CAAC;IAgEtB;;;;;;;OAOG;IACG,wBAAwB,CAC5B,gBAAgB,EAAE,UAAU,EAC5B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,UAAU,CAAC;CA2DvB"}
1
+ {"version":3,"file":"BaseMindooTenant.d.ts","sourceRoot":"","sources":["../../src/core/BaseMindooTenant.ts"],"names":[],"mappings":"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"}
@@ -29,12 +29,15 @@ const errors_1 = require("./errors");
29
29
  const logging_1 = require("./logging");
30
30
  const MindooURI_1 = require("./uri/MindooURI");
31
31
  const joinRequestUri_1 = require("./uri/joinRequestUri");
32
+ const adminUri_1 = require("./uri/adminUri");
32
33
  const LocalCacheStore_1 = require("./cache/LocalCacheStore");
33
34
  const EncryptedLocalCacheStore_1 = require("./cache/EncryptedLocalCacheStore");
34
35
  const CacheManager_1 = require("./cache/CacheManager");
35
36
  const databaseIdValidation_1 = require("./databaseIdValidation");
36
37
  const BackgroundTaskTracker_1 = require("./BackgroundTaskTracker");
37
38
  const singleFlight_1 = require("./utils/singleFlight");
39
+ const directoryAdminResolver_1 = require("./accesscontrol/directoryAdminResolver");
40
+ const DirectoryStateNode_1 = require("./accesscontrol/DirectoryStateNode");
38
41
  const dynamicImportInterop_1 = require("./utils/dynamicImportInterop");
39
42
  /**
40
43
  * BaseMindooTenant is a platform-agnostic implementation of MindooTenant
@@ -133,6 +136,16 @@ class BaseMindooTenant {
133
136
  this.cacheManager = null;
134
137
  /** Imported HMAC subkeys of {@link computeKeyedHash}, keyed by key id + purpose. */
135
138
  this.keyedHashKeyCache = new Map();
139
+ /**
140
+ * Signing keys this process writes with besides the current user's (e.g. a
141
+ * delegated admin key, docs/accesscontrol.md §6.13). Directory entries such a
142
+ * key wrote here count locally before a witness stamped them.
143
+ */
144
+ this.localSigningKeys = new Set();
145
+ /** Store-level admin-key resolver of the open `directory` database (§6.13). */
146
+ this.directoryAdminResolver = null;
147
+ /** Public keys derived from admin private keys handed to directory methods. */
148
+ this.adminPublicKeyByPrivateKey = new WeakMap();
136
149
  this.factory = factory;
137
150
  this.tenantId = tenantId;
138
151
  this.administrationPublicKey = administrationPublicKey;
@@ -287,6 +300,17 @@ class BaseMindooTenant {
287
300
  getUserKeyManager() {
288
301
  return this.userKeys;
289
302
  }
303
+ /**
304
+ * The document store of `dbId` without opening (materializing) the
305
+ * database: the open database's store, or a store handle from the factory.
306
+ * For readers that only scan entries, such as the device-certificate index.
307
+ */
308
+ getDocStoreForDb(dbId) {
309
+ const live = this.databaseCache.get(dbId);
310
+ if (live)
311
+ return live.getStore();
312
+ return this.storeFactory.createStore(dbId).docStore;
313
+ }
290
314
  isDatabaseOpen(dbId) {
291
315
  return this.databaseCache.has(dbId) || this.databaseOpenInFlight.has(dbId);
292
316
  }
@@ -363,6 +387,18 @@ class BaseMindooTenant {
363
387
  async rotateUserKey() {
364
388
  return this.userKeys.rotateUserKey();
365
389
  }
390
+ async getDeviceSelfGrantPublicKey() {
391
+ return this.userKeys.getDeviceSelfGrantPublicKey();
392
+ }
393
+ async issueDeviceCertificate(device, label) {
394
+ return this.userKeys.issueDeviceCertificate(device, label);
395
+ }
396
+ async revokeOwnDeviceCertificate(fingerprint) {
397
+ return this.userKeys.revokeOwnDeviceCertificate(fingerprint);
398
+ }
399
+ async listOwnDeviceCertificates() {
400
+ return this.userKeys.listOwnDeviceCertificates();
401
+ }
366
402
  async reconcileUserKeys(options) {
367
403
  return this.userKeys.reconcile(options);
368
404
  }
@@ -582,6 +618,109 @@ class BaseMindooTenant {
582
618
  getAdministrationPublicKey() {
583
619
  return this.administrationPublicKey;
584
620
  }
621
+ /** Remember that this process signs with `publicKey` (see {@link isLocalSigningKey}). */
622
+ noteLocalSigningKey(publicKey) {
623
+ this.localSigningKeys.add(publicKey.replace(/\s+/g, ""));
624
+ }
625
+ /** Whether this process signs with `publicKey`: the current user or a noted key. */
626
+ isLocalSigningKey(publicKey) {
627
+ const normalized = publicKey.replace(/\s+/g, "");
628
+ if (this.currentUser.userSigningKeyPair.publicKey.replace(/\s+/g, "") === normalized)
629
+ return true;
630
+ return this.localSigningKeys.has(normalized);
631
+ }
632
+ /**
633
+ * The store-level admin-key resolver for this tenant's `directory` database,
634
+ * created on first use for `store`. Used by the directory load path and by
635
+ * {@link isAdminSigningKeyAt}; it reads root-signed admin-key documents
636
+ * straight from the store, so it never recurses into directory materialization.
637
+ */
638
+ getDirectoryAdminResolver(store) {
639
+ if (!this.directoryAdminResolver) {
640
+ this.directoryAdminResolver = new directoryAdminResolver_1.DirectoryAdminKeyResolver({
641
+ store,
642
+ rootAdminKey: () => this.administrationPublicKey,
643
+ decryptPayload: (encrypted, keyId) => this.decryptPayload(encrypted, keyId),
644
+ subtle: this.cryptoAdapter.getSubtle(),
645
+ isLocalSigningKey: (key) => this.isLocalSigningKey(key),
646
+ now: () => (0, timeSource_1.semanticNow)(),
647
+ });
648
+ }
649
+ return this.directoryAdminResolver;
650
+ }
651
+ /**
652
+ * Whether `signingKey` is a tenant admin at time `T` (docs/accesscontrol.md
653
+ * §6.13): the root admin key always is; a delegated admin key is while its
654
+ * admin-key document's window covers `T`. `T` is a witness time, or "now"
655
+ * for live decisions.
656
+ */
657
+ async isAdminSigningKeyAt(signingKey, T) {
658
+ if ((0, DirectoryStateNode_1.signingKeysEqual)(signingKey, this.administrationPublicKey))
659
+ return true;
660
+ if (!this.directoryAdminResolver) {
661
+ // Opening the directory registers the resolver. Never awaited from the
662
+ // directory's own load path: that path uses its resolver directly.
663
+ await this.openDB(types_1.DIRECTORY_DB_ID, { adminOnlyDb: true });
664
+ }
665
+ if (!this.directoryAdminResolver)
666
+ return false;
667
+ return this.directoryAdminResolver.isDelegatedAdminAt(signingKey, T);
668
+ }
669
+ /**
670
+ * Whether `signingKey` has ever been a delegated admin key of this tenant (an
671
+ * admin-key document exists, whatever its window). Such a key holds no grant,
672
+ * so its trust is decided by {@link isAdminSigningKeyAt} alone.
673
+ */
674
+ async isKnownDelegatedAdminKey(signingKey) {
675
+ if (!this.directoryAdminResolver)
676
+ return false;
677
+ return this.directoryAdminResolver.hasAdminKeyDocument(signingKey);
678
+ }
679
+ /**
680
+ * The signing key pair for an admin private key passed to a directory method.
681
+ * The root admin key pair is the default; for a delegated admin key
682
+ * (§6.13) the public key is derived from the private key once and cached.
683
+ * The derived key is remembered as a local signing key, so the directory
684
+ * entries it writes count here before a witness stamps them.
685
+ */
686
+ async resolveAdminSigningKeyPair(privateKey, password) {
687
+ let publicKey = this.adminPublicKeyByPrivateKey.get(privateKey);
688
+ if (!publicKey) {
689
+ try {
690
+ publicKey = await this.derivePublicSigningKey(privateKey, password);
691
+ }
692
+ catch (error) {
693
+ this.logger.debug(`resolveAdminSigningKeyPair: could not derive public key, assuming root: ${error}`);
694
+ publicKey = this.administrationPublicKey;
695
+ }
696
+ this.adminPublicKeyByPrivateKey.set(privateKey, publicKey);
697
+ }
698
+ if (!(0, DirectoryStateNode_1.signingKeysEqual)(publicKey, this.administrationPublicKey)) {
699
+ this.noteLocalSigningKey(publicKey);
700
+ }
701
+ return { publicKey: (0, DirectoryStateNode_1.signingKeysEqual)(publicKey, this.administrationPublicKey) ? this.administrationPublicKey : publicKey, privateKey };
702
+ }
703
+ /** Ed25519 public key (SPKI PEM) of an encrypted private signing key. */
704
+ async derivePublicSigningKey(privateKey, password) {
705
+ const subtle = this.cryptoAdapter.getSubtle();
706
+ const pkcs8 = await this.decryptPrivateKey(privateKey, password, "signing");
707
+ const key = await subtle.importKey("pkcs8", pkcs8, { name: "Ed25519" }, true, ["sign"]);
708
+ const jwk = (await subtle.exportKey("jwk", key));
709
+ if (!jwk.x)
710
+ throw new Error("Ed25519 JWK export carries no public key");
711
+ const base64 = jwk.x.replace(/-/g, "+").replace(/_/g, "/");
712
+ const padded = base64 + "=".repeat((4 - (base64.length % 4)) % 4);
713
+ const raw = Uint8Array.from(atob(padded), (c) => c.charCodeAt(0));
714
+ const spkiPrefix = [0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03, 0x21, 0x00];
715
+ const spki = new Uint8Array(spkiPrefix.length + raw.length);
716
+ spki.set(spkiPrefix, 0);
717
+ spki.set(raw, spkiPrefix.length);
718
+ let binary = "";
719
+ for (const byte of spki)
720
+ binary += String.fromCharCode(byte);
721
+ const body = btoa(binary).match(/.{1,64}/g).join("\n");
722
+ return `-----BEGIN PUBLIC KEY-----\n${body}\n-----END PUBLIC KEY-----`;
723
+ }
585
724
  /**
586
725
  * Get the administration encryption public key for this tenant.
587
726
  * Used for encrypting sensitive data in the directory that only admins can decrypt
@@ -917,7 +1056,20 @@ class BaseMindooTenant {
917
1056
  async verifyEntrySignature(entry, encryptedData) {
918
1057
  // The author key must be trusted by the tenant directory.
919
1058
  const directory = await this.openDirectory();
920
- const isTrusted = await directory.validatePublicSigningKey(entry.createdByPublicKey);
1059
+ // A delegated admin key (docs/accesscontrol.md §6.13) holds no grant. It is
1060
+ // trusted for what it signed while it was an admin (judged at the witness
1061
+ // time, or now for an un-witnessed entry), also after its window ended.
1062
+ // Checked first for keys the trust cache does not know as grant keys: the
1063
+ // store-level check never waits for the directory cache pass that may be
1064
+ // verifying this very entry.
1065
+ const peek = directory.peekTrustedKey;
1066
+ let isTrusted = (0, DirectoryStateNode_1.signingKeysEqual)(entry.createdByPublicKey, this.administrationPublicKey) ||
1067
+ (typeof peek === "function" &&
1068
+ peek.call(directory, entry.createdByPublicKey) !== true &&
1069
+ (await this.isAdminSigningKeyAt(entry.createdByPublicKey, entry.receivedAt ?? (0, timeSource_1.semanticNow)())));
1070
+ if (!isTrusted) {
1071
+ isTrusted = await directory.validatePublicSigningKey(entry.createdByPublicKey);
1072
+ }
921
1073
  if (!isTrusted) {
922
1074
  this.logger.warn(`Public key not trusted: ${entry.createdByPublicKey}`);
923
1075
  return false;
@@ -1106,7 +1258,7 @@ class BaseMindooTenant {
1106
1258
  return;
1107
1259
  }
1108
1260
  const currentUser = await this.getCurrentUserId();
1109
- if (currentUser.userSigningPublicKey === this.getAdministrationPublicKey()) {
1261
+ if (await this.isAdminSigningKeyAt(currentUser.userSigningPublicKey, (0, timeSource_1.semanticNow)())) {
1110
1262
  return;
1111
1263
  }
1112
1264
  const directory = await this.openDirectory();
@@ -1124,6 +1276,10 @@ class BaseMindooTenant {
1124
1276
  registeredUser?.signingPublicKey === currentUser.userSigningPublicKey &&
1125
1277
  registeredUser?.encryptionPublicKey === currentUser.userEncryptionPublicKey;
1126
1278
  }
1279
+ // A device its person certified (docs/userkeys.md §9.6).
1280
+ if (!hasMatchingGrant && typeof directory.resolveSignerToGrant === "function") {
1281
+ hasMatchingGrant = !!(await directory.resolveSignerToGrant(currentUser.userSigningPublicKey, Number.MAX_SAFE_INTEGER));
1282
+ }
1127
1283
  if (!hasMatchingGrant) {
1128
1284
  this.logger.warn(`Denied database open for ungranted user ${currentUser.username} on database ${id}`);
1129
1285
  throw new Error(`User "${currentUser.username}" does not have tenant access yet; the tenant admin must grant access first.`);
@@ -1562,6 +1718,9 @@ class BaseMindooTenant {
1562
1718
  }
1563
1719
  console.log(`[approveJoinRequest] Approving join request for user "${username}"`);
1564
1720
  this.logger.info(`Approving join request for user: ${username}`);
1721
+ // The approving admin: the root, or a delegated admin (§6.13).
1722
+ const approverKeyPair = await this.resolveAdminSigningKeyPair(options.adminSigningKey, options.adminPassword);
1723
+ const approverIsRoot = (0, DirectoryStateNode_1.signingKeysEqual)(approverKeyPair.publicKey, this.administrationPublicKey);
1565
1724
  // 1. Register the user in the directory
1566
1725
  const directory = await this.openDirectory();
1567
1726
  const publicUserId = {
@@ -1596,10 +1755,7 @@ class BaseMindooTenant {
1596
1755
  const userKeyDoc = await this.userKeys.createPendingFromJoin({
1597
1756
  username,
1598
1757
  userPublicKey,
1599
- signingKeyPair: {
1600
- publicKey: this.administrationPublicKey,
1601
- privateKey: options.adminSigningKey,
1602
- },
1758
+ signingKeyPair: approverKeyPair,
1603
1759
  signingKeyPassword: options.adminPassword,
1604
1760
  });
1605
1761
  const payload = (0, validateUserKeyDocument_1.asUserKeyPayload)(userKeyDoc.getData());
@@ -1613,6 +1769,15 @@ class BaseMindooTenant {
1613
1769
  // (`[$publicinfos]`) must not quietly hand out the tenant key.
1614
1770
  const wrapDefault = options.sharedDocKeyIds === undefined ||
1615
1771
  options.sharedDocKeyIds.includes(types_1.DEFAULT_TENANT_KEY_ID);
1772
+ // The person's first device brings their device self-grant key. Only
1773
+ // then is it the person's own key; an additional device's request
1774
+ // carries a key nobody else holds (docs/userkeys.md §9).
1775
+ const selfGrantKey = typeof request.deviceSelfGrantPublicKey === "string"
1776
+ ? request.deviceSelfGrantPublicKey.trim()
1777
+ : "";
1778
+ if (options.allowDeviceSelfGrant && selfGrantKey && publishedPublicKey === userPublicKey) {
1779
+ await directory.setDeviceSelfGrant(username, selfGrantKey, options.adminSigningKey, options.adminPassword);
1780
+ }
1616
1781
  if (wrapDefault && publishedPublicKey === userPublicKey) {
1617
1782
  await directory.autoDistributeKeysToUser(username, [types_1.DEFAULT_TENANT_KEY_ID], options.adminSigningKey, options.adminPassword, userPublicKey);
1618
1783
  }
@@ -1704,7 +1869,7 @@ class BaseMindooTenant {
1704
1869
  // Tenants created before `tenantsetup` recorded administrators have no
1705
1870
  // entry, leaving members with a fingerprint instead of a name. A grant is
1706
1871
  // where the admin supplies both its name and its keys, so heal it here.
1707
- if (options.adminUsername) {
1872
+ if (options.adminUsername && approverIsRoot) {
1708
1873
  try {
1709
1874
  const directoryDb = await this.openDB("directory", { adminOnlyDb: true });
1710
1875
  const written = await (0, tenantSetup_1.ensureTenantSetupAdministrator)(directoryDb, {
@@ -1732,6 +1897,63 @@ class BaseMindooTenant {
1732
1897
  }
1733
1898
  return joinResponse;
1734
1899
  }
1900
+ /**
1901
+ * Approve a delegated-admin request (docs/accesscontrol.md §6.13). Root admin
1902
+ * key only: writes the admin-key document and the `tenantsetup` entry, then
1903
+ * returns an admin response with `default` and `$publicinfos` wrapped to the
1904
+ * new admin's encryption key. The response names the ROOT key as
1905
+ * `adminSigningPublicKey`; the trust anchor never changes.
1906
+ */
1907
+ async approveAdminRequest(adminRequest, options) {
1908
+ const request = (0, adminUri_1.decodeAdminRequestUri)(adminRequest);
1909
+ if (request.tenantId && request.tenantId !== this.tenantId) {
1910
+ throw new Error(`This admin request is for tenant "${request.tenantId}", not "${this.tenantId}"`);
1911
+ }
1912
+ const name = (options.name ?? request.name ?? "").trim();
1913
+ if (!name) {
1914
+ throw new Error("Cannot approve admin request: no name in the request and none supplied via options.name");
1915
+ }
1916
+ const label = (options.label ?? request.label ?? "").trim();
1917
+ const directory = (await this.openDirectory());
1918
+ await directory.addAdminKey({
1919
+ signingPublicKey: request.signingPublicKey,
1920
+ encryptionPublicKey: request.encryptionPublicKey,
1921
+ name,
1922
+ ...(label ? { label } : {}),
1923
+ ...(typeof options.validFrom === "number" ? { validFrom: options.validFrom } : {}),
1924
+ }, options.adminSigningKey, options.adminPassword);
1925
+ const encryptedDocKeys = await Promise.all([types_1.DEFAULT_TENANT_KEY_ID, types_1.PUBLIC_INFOS_KEY_ID].map((keyId) => this.exportJoinResponseDocKeyVersions(keyId, request.encryptionPublicKey)));
1926
+ const response = {
1927
+ v: 1,
1928
+ tenantId: this.tenantId,
1929
+ adminSigningPublicKey: this.administrationPublicKey,
1930
+ adminEncryptionPublicKey: this.administrationEncryptionPublicKey,
1931
+ signingPublicKey: request.signingPublicKey,
1932
+ name,
1933
+ encryptedDocKeys,
1934
+ };
1935
+ if (label)
1936
+ response.label = label;
1937
+ if (options.serverUrl)
1938
+ response.serverUrl = options.serverUrl;
1939
+ const tenantLabel = options.tenantLabel?.trim();
1940
+ if (tenantLabel) {
1941
+ response.tenantLabel = tenantLabel;
1942
+ }
1943
+ else {
1944
+ try {
1945
+ const directoryDb = await this.openDB(types_1.DIRECTORY_DB_ID, { adminOnlyDb: true });
1946
+ const setupLabel = await (0, tenantSetup_1.readTenantSetupLabel)(directoryDb, this);
1947
+ if (setupLabel)
1948
+ response.tenantLabel = setupLabel;
1949
+ }
1950
+ catch {
1951
+ // Best-effort, as for join responses.
1952
+ }
1953
+ }
1954
+ this.logger.info(`Admin request approved for "${name}"`);
1955
+ return options.format === "uri" ? (0, adminUri_1.encodeAdminResponseUri)(response) : response;
1956
+ }
1735
1957
  /**
1736
1958
  * Publish (register) this tenant on a MindooDB server.
1737
1959
  *