mindoodb 0.0.85 → 0.0.86

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 (235) hide show
  1. package/README-server.md +1 -0
  2. package/README.md +6 -4
  3. package/dist/cloudflare/DurableObjectSql.d.ts +56 -0
  4. package/dist/cloudflare/DurableObjectSql.d.ts.map +1 -0
  5. package/dist/cloudflare/DurableObjectSql.js +180 -0
  6. package/dist/cloudflare/DurableObjectSql.js.map +1 -0
  7. package/dist/cloudflare/MindooDatabaseObject.d.ts +86 -0
  8. package/dist/cloudflare/MindooDatabaseObject.d.ts.map +1 -0
  9. package/dist/cloudflare/MindooDatabaseObject.js +614 -0
  10. package/dist/cloudflare/MindooDatabaseObject.js.map +1 -0
  11. package/dist/cloudflare/MindooServerObject.d.ts +63 -0
  12. package/dist/cloudflare/MindooServerObject.d.ts.map +1 -0
  13. package/dist/cloudflare/MindooServerObject.js +521 -0
  14. package/dist/cloudflare/MindooServerObject.js.map +1 -0
  15. package/dist/cloudflare/WorkersCryptoAdapter.d.ts +7 -0
  16. package/dist/cloudflare/WorkersCryptoAdapter.d.ts.map +1 -0
  17. package/dist/cloudflare/WorkersCryptoAdapter.js +14 -0
  18. package/dist/cloudflare/WorkersCryptoAdapter.js.map +1 -0
  19. package/dist/cloudflare/host.d.ts +49 -0
  20. package/dist/cloudflare/host.d.ts.map +1 -0
  21. package/dist/cloudflare/host.js +104 -0
  22. package/dist/cloudflare/host.js.map +1 -0
  23. package/dist/cloudflare/http.d.ts +91 -0
  24. package/dist/cloudflare/http.d.ts.map +1 -0
  25. package/dist/cloudflare/http.js +266 -0
  26. package/dist/cloudflare/http.js.map +1 -0
  27. package/dist/cloudflare/index.d.ts +12 -0
  28. package/dist/cloudflare/index.d.ts.map +1 -0
  29. package/dist/cloudflare/index.js +20 -0
  30. package/dist/cloudflare/index.js.map +1 -0
  31. package/dist/cloudflare/storeRpc.d.ts +22 -0
  32. package/dist/cloudflare/storeRpc.d.ts.map +1 -0
  33. package/dist/cloudflare/storeRpc.js +85 -0
  34. package/dist/cloudflare/storeRpc.js.map +1 -0
  35. package/dist/cloudflare/types.d.ts +101 -0
  36. package/dist/cloudflare/types.d.ts.map +1 -0
  37. package/dist/cloudflare/types.js +10 -0
  38. package/dist/cloudflare/types.js.map +1 -0
  39. package/dist/cloudflare/worker.d.ts +25 -0
  40. package/dist/cloudflare/worker.d.ts.map +1 -0
  41. package/dist/cloudflare/worker.js +170 -0
  42. package/dist/cloudflare/worker.js.map +1 -0
  43. package/dist/core/BaseMindooDB.d.ts +28 -1
  44. package/dist/core/BaseMindooDB.d.ts.map +1 -1
  45. package/dist/core/BaseMindooDB.js +180 -86
  46. package/dist/core/BaseMindooDB.js.map +1 -1
  47. package/dist/core/BaseMindooTenant.d.ts +14 -0
  48. package/dist/core/BaseMindooTenant.d.ts.map +1 -1
  49. package/dist/core/BaseMindooTenant.js +46 -0
  50. package/dist/core/BaseMindooTenant.js.map +1 -1
  51. package/dist/core/BaseMindooTenantDirectory.d.ts +10 -0
  52. package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
  53. package/dist/core/BaseMindooTenantDirectory.js +79 -8
  54. package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
  55. package/dist/core/ChangeDocDraft.d.ts +133 -0
  56. package/dist/core/ChangeDocDraft.d.ts.map +1 -0
  57. package/dist/core/ChangeDocDraft.js +492 -0
  58. package/dist/core/ChangeDocDraft.js.map +1 -0
  59. package/dist/core/appendonlystores/network/AuthenticationService.d.ts +8 -0
  60. package/dist/core/appendonlystores/network/AuthenticationService.d.ts.map +1 -1
  61. package/dist/core/appendonlystores/network/AuthenticationService.js +19 -0
  62. package/dist/core/appendonlystores/network/AuthenticationService.js.map +1 -1
  63. package/dist/core/appendonlystores/network/IrohStreamIO.d.ts.map +1 -1
  64. package/dist/core/appendonlystores/network/IrohStreamIO.js +3 -23
  65. package/dist/core/appendonlystores/network/IrohStreamIO.js.map +1 -1
  66. package/dist/core/appendonlystores/rpc/storeRpcCodec.d.ts.map +1 -1
  67. package/dist/core/appendonlystores/rpc/storeRpcCodec.js +3 -23
  68. package/dist/core/appendonlystores/rpc/storeRpcCodec.js.map +1 -1
  69. package/dist/core/appendonlystores/sqlite/SqliteContentAddressedStore.d.ts.map +1 -1
  70. package/dist/core/appendonlystores/sqlite/SqliteContentAddressedStore.js +21 -30
  71. package/dist/core/appendonlystores/sqlite/SqliteContentAddressedStore.js.map +1 -1
  72. package/dist/core/appendonlystores/sqlite/SqliteDriver.d.ts +37 -1
  73. package/dist/core/appendonlystores/sqlite/SqliteDriver.d.ts.map +1 -1
  74. package/dist/core/appendonlystores/sqlite/SqliteDriver.js +99 -40
  75. package/dist/core/appendonlystores/sqlite/SqliteDriver.js.map +1 -1
  76. package/dist/core/expressions/evaluateExpression.d.ts +8 -0
  77. package/dist/core/expressions/evaluateExpression.d.ts.map +1 -1
  78. package/dist/core/expressions/evaluateExpression.js +29 -4
  79. package/dist/core/expressions/evaluateExpression.js.map +1 -1
  80. package/dist/core/expressions/metadata.js +4 -4
  81. package/dist/core/expressions/metadata.js.map +1 -1
  82. package/dist/core/types.d.ts +61 -2
  83. package/dist/core/types.d.ts.map +1 -1
  84. package/dist/core/types.js.map +1 -1
  85. package/dist/core/uri/MindooURI.d.ts.map +1 -1
  86. package/dist/core/uri/MindooURI.js +3 -24
  87. package/dist/core/uri/MindooURI.js.map +1 -1
  88. package/dist/core/utils/base64.d.ts +17 -0
  89. package/dist/core/utils/base64.d.ts.map +1 -0
  90. package/dist/core/utils/base64.js +54 -0
  91. package/dist/core/utils/base64.js.map +1 -0
  92. package/dist/core/utils/idGeneration.d.ts.map +1 -1
  93. package/dist/core/utils/idGeneration.js +14 -3
  94. package/dist/core/utils/idGeneration.js.map +1 -1
  95. package/dist/node/server/FsServerDataStore.d.ts +23 -0
  96. package/dist/node/server/FsServerDataStore.d.ts.map +1 -0
  97. package/dist/node/server/FsServerDataStore.js +59 -0
  98. package/dist/node/server/FsServerDataStore.js.map +1 -0
  99. package/dist/node/server/IrohServerEndpoint.d.ts +1 -1
  100. package/dist/node/server/IrohServerEndpoint.d.ts.map +1 -1
  101. package/dist/node/server/IrohServerRpc.d.ts +5 -5
  102. package/dist/node/server/IrohServerRpc.d.ts.map +1 -1
  103. package/dist/node/server/IrohServerRpc.js +1 -1
  104. package/dist/node/server/IrohServerRpc.js.map +1 -1
  105. package/dist/node/server/MindooDBServer.d.ts +29 -150
  106. package/dist/node/server/MindooDBServer.d.ts.map +1 -1
  107. package/dist/node/server/MindooDBServer.js +160 -1573
  108. package/dist/node/server/MindooDBServer.js.map +1 -1
  109. package/dist/node/server/PurgedDocRegistry.d.ts +4 -27
  110. package/dist/node/server/PurgedDocRegistry.d.ts.map +1 -1
  111. package/dist/node/server/PurgedDocRegistry.js +6 -83
  112. package/dist/node/server/PurgedDocRegistry.js.map +1 -1
  113. package/dist/node/server/StoreFactory.d.ts +1 -1
  114. package/dist/node/server/StoreFactory.d.ts.map +1 -1
  115. package/dist/node/server/TenantManager.d.ts +16 -284
  116. package/dist/node/server/TenantManager.d.ts.map +1 -1
  117. package/dist/node/server/TenantManager.js +35 -1168
  118. package/dist/node/server/TenantManager.js.map +1 -1
  119. package/dist/node/server/add-to-network.js +1 -1
  120. package/dist/node/server/add-to-network.js.map +1 -1
  121. package/dist/node/server/config.d.ts +11 -15
  122. package/dist/node/server/config.d.ts.map +1 -1
  123. package/dist/node/server/config.js +30 -245
  124. package/dist/node/server/config.js.map +1 -1
  125. package/dist/node/server/expressAdapter.d.ts +23 -0
  126. package/dist/node/server/expressAdapter.d.ts.map +1 -0
  127. package/dist/node/server/expressAdapter.js +108 -0
  128. package/dist/node/server/expressAdapter.js.map +1 -0
  129. package/dist/node/server/nativeIrohStreamIO.d.ts +1 -1
  130. package/dist/node/server/nativeIrohStreamIO.d.ts.map +1 -1
  131. package/dist/node/server/peer/FileClusterAuditStorage.d.ts +16 -0
  132. package/dist/node/server/peer/FileClusterAuditStorage.d.ts.map +1 -0
  133. package/dist/node/server/peer/FileClusterAuditStorage.js +39 -0
  134. package/dist/node/server/peer/FileClusterAuditStorage.js.map +1 -0
  135. package/dist/node/server/peer/IrohPeerLink.d.ts +1 -1
  136. package/dist/node/server/peer/IrohPeerLink.d.ts.map +1 -1
  137. package/dist/node/server/peer/routes.d.ts +10 -44
  138. package/dist/node/server/peer/routes.d.ts.map +1 -1
  139. package/dist/node/server/peer/routes.js +33 -275
  140. package/dist/node/server/peer/routes.js.map +1 -1
  141. package/dist/node/server/resolveServerPassword.js +1 -1
  142. package/dist/node/server/resolveServerPassword.js.map +1 -1
  143. package/dist/node/server/server.js +1 -1
  144. package/dist/node/server/server.js.map +1 -1
  145. package/dist/node/server/serverinit.js +1 -1
  146. package/dist/node/server/serverinit.js.map +1 -1
  147. package/dist/server/CapabilityMatcher.d.ts +60 -0
  148. package/dist/server/CapabilityMatcher.d.ts.map +1 -0
  149. package/dist/server/CapabilityMatcher.js +138 -0
  150. package/dist/server/CapabilityMatcher.js.map +1 -0
  151. package/dist/server/DeviceDiscoveryService.d.ts +36 -0
  152. package/dist/server/DeviceDiscoveryService.d.ts.map +1 -0
  153. package/dist/server/DeviceDiscoveryService.js +165 -0
  154. package/dist/server/DeviceDiscoveryService.js.map +1 -0
  155. package/dist/server/PurgedDocRegistry.d.ts +35 -0
  156. package/dist/server/PurgedDocRegistry.d.ts.map +1 -0
  157. package/dist/server/PurgedDocRegistry.js +90 -0
  158. package/dist/server/PurgedDocRegistry.js.map +1 -0
  159. package/dist/server/ServerDataStore.d.ts +67 -0
  160. package/dist/server/ServerDataStore.d.ts.map +1 -0
  161. package/dist/server/ServerDataStore.js +88 -0
  162. package/dist/server/ServerDataStore.js.map +1 -0
  163. package/dist/server/SyncEventBus.d.ts +39 -0
  164. package/dist/server/SyncEventBus.d.ts.map +1 -0
  165. package/dist/server/SyncEventBus.js +41 -0
  166. package/dist/server/SyncEventBus.js.map +1 -0
  167. package/dist/server/SystemAdminAuth.d.ts +82 -0
  168. package/dist/server/SystemAdminAuth.d.ts.map +1 -0
  169. package/dist/server/SystemAdminAuth.js +228 -0
  170. package/dist/server/SystemAdminAuth.js.map +1 -0
  171. package/dist/server/TenantManager.d.ts +330 -0
  172. package/dist/server/TenantManager.d.ts.map +1 -0
  173. package/dist/server/TenantManager.js +1186 -0
  174. package/dist/server/TenantManager.js.map +1 -0
  175. package/dist/server/http/MindooDBServerCore.d.ts +313 -0
  176. package/dist/server/http/MindooDBServerCore.d.ts.map +1 -0
  177. package/dist/server/http/MindooDBServerCore.js +1403 -0
  178. package/dist/server/http/MindooDBServerCore.js.map +1 -0
  179. package/dist/server/http/types.d.ts +89 -0
  180. package/dist/server/http/types.d.ts.map +1 -0
  181. package/dist/server/http/types.js +29 -0
  182. package/dist/server/http/types.js.map +1 -0
  183. package/dist/server/index.d.ts +32 -0
  184. package/dist/server/index.d.ts.map +1 -0
  185. package/dist/server/index.js +76 -0
  186. package/dist/server/index.js.map +1 -0
  187. package/dist/server/peer/ClusterAuditLog.d.ts +71 -0
  188. package/dist/server/peer/ClusterAuditLog.d.ts.map +1 -0
  189. package/dist/server/peer/ClusterAuditLog.js +81 -0
  190. package/dist/server/peer/ClusterAuditLog.js.map +1 -0
  191. package/dist/server/peer/ClusterJobRunner.d.ts +43 -0
  192. package/dist/server/peer/ClusterJobRunner.d.ts.map +1 -0
  193. package/dist/server/peer/ClusterJobRunner.js +119 -0
  194. package/dist/server/peer/ClusterJobRunner.js.map +1 -0
  195. package/dist/server/peer/ClusterManager.d.ts +149 -0
  196. package/dist/server/peer/ClusterManager.d.ts.map +1 -0
  197. package/dist/server/peer/ClusterManager.js +292 -0
  198. package/dist/server/peer/ClusterManager.js.map +1 -0
  199. package/dist/server/peer/PeerAuthService.d.ts +69 -0
  200. package/dist/server/peer/PeerAuthService.d.ts.map +1 -0
  201. package/dist/server/peer/PeerAuthService.js +208 -0
  202. package/dist/server/peer/PeerAuthService.js.map +1 -0
  203. package/dist/server/peer/PeerReplicator.d.ts +303 -0
  204. package/dist/server/peer/PeerReplicator.d.ts.map +1 -0
  205. package/dist/server/peer/PeerReplicator.js +1071 -0
  206. package/dist/server/peer/PeerReplicator.js.map +1 -0
  207. package/dist/server/peer/clusterHttp.d.ts +113 -0
  208. package/dist/server/peer/clusterHttp.d.ts.map +1 -0
  209. package/dist/server/peer/clusterHttp.js +290 -0
  210. package/dist/server/peer/clusterHttp.js.map +1 -0
  211. package/dist/server/peer/types.d.ts +244 -0
  212. package/dist/server/peer/types.d.ts.map +1 -0
  213. package/dist/server/peer/types.js +189 -0
  214. package/dist/server/peer/types.js.map +1 -0
  215. package/dist/server/rateLimits.d.ts +119 -0
  216. package/dist/server/rateLimits.d.ts.map +1 -0
  217. package/dist/server/rateLimits.js +159 -0
  218. package/dist/server/rateLimits.js.map +1 -0
  219. package/dist/server/serverConfig.d.ts +37 -0
  220. package/dist/server/serverConfig.d.ts.map +1 -0
  221. package/dist/server/serverConfig.js +251 -0
  222. package/dist/server/serverConfig.js.map +1 -0
  223. package/dist/server/timestampProxy.d.ts +129 -0
  224. package/dist/server/timestampProxy.d.ts.map +1 -0
  225. package/dist/server/timestampProxy.js +361 -0
  226. package/dist/server/timestampProxy.js.map +1 -0
  227. package/dist/server/types.d.ts +267 -0
  228. package/dist/server/types.d.ts.map +1 -0
  229. package/dist/server/types.js +56 -0
  230. package/dist/server/types.js.map +1 -0
  231. package/dist/server/validation.d.ts +43 -0
  232. package/dist/server/validation.d.ts.map +1 -0
  233. package/dist/server/validation.js +104 -0
  234. package/dist/server/validation.js.map +1 -0
  235. package/package.json +9 -1
@@ -1,294 +1,26 @@
1
1
  /**
2
- * TenantManager handles loading, caching, and registration of tenants.
3
- *
4
- * Uses a global server identity (one per server, not per tenant) for
5
- * authenticating with remote servers and opening tenant directories.
6
- *
7
- * When a tenant has a $publicinfos key (sent during publishToServer), the
8
- * manager creates a real BaseMindooTenant for directory reading. User
9
- * authentication is then validated against the admin-signed directory DB
10
- * rather than a static JSON config.
11
- *
12
- * When no $publicinfos key is available, a SimpleMindooDirectory backed
13
- * by config.json users[] is used as a fallback (useful for tests).
14
- *
15
- * A CompositeMindooDirectory wraps whichever directory source is used and
16
- * also checks the global trusted-servers list, enabling server-to-server
17
- * auth without servers being in each tenant's user directory.
2
+ * Node host of the {@link CoreTenantManager}: tenant state lives in files
3
+ * below the data directory and every tenant database is an on-disk store in
4
+ * `<dataDir>/<tenantId>/stores` (see {@link StoreFactory}).
18
5
  */
19
6
  import { NodeCryptoAdapter } from "../crypto/NodeCryptoAdapter";
20
- import { AuthenticationService } from "../../core/appendonlystores/network/AuthenticationService";
21
- import { ServerNetworkContentAddressedStore } from "../../appendonlystores/network/ServerNetworkContentAddressedStore";
22
- import type { ServerPeerTokenResolver, ServerTrustedWitnessResolver } from "../../appendonlystores/network/ServerNetworkContentAddressedStore";
23
- import type { WitnessSigner } from "../../core/crypto/WitnessReceipt";
24
- import type { TimestampProvider } from "../../core/accesscontrol/timestamp/TimestampProvider";
25
- import type { MindooTenant, MindooTenantDirectory, ContentAddressedStore, DirectoryUserLookup } from "../../core/types";
26
- import { StoreKind } from "../../core/types";
27
- import type { PrivateUserId } from "../../core/userid";
7
+ import { TenantManager as CoreTenantManager } from "../../server/TenantManager";
8
+ import type { ServerStoreProvider } from "../../server/ServerDataStore";
9
+ import { FsServerDataStore } from "./FsServerDataStore";
28
10
  import { StoreFactory } from "./StoreFactory";
29
- import type { TenantConfig, TenantContext, RegisterTenantRequest, TrustedServer } from "./types";
30
- interface LoadedTenant {
31
- context: TenantContext;
32
- storeFactory: StoreFactory;
33
- authService: AuthenticationService;
34
- directory: MindooTenantDirectory;
35
- mindooTenant?: MindooTenant;
36
- serverStores: Map<string, ServerNetworkContentAddressedStore>;
37
- }
38
- interface RegisterTenantResult {
39
- context: TenantContext;
40
- created: boolean;
41
- }
42
- export declare class SimpleMindooDirectory implements Pick<MindooTenantDirectory, "getUserPublicKeys" | "isUserRevoked" | "validatePublicSigningKey" | "getUserBySigningPublicKey"> {
43
- /** Canonical index: entries are identified by their signing public key. */
44
- private usersByKey;
45
- /**
46
- * Backward-compat index by documentation-only username, populated only for
47
- * config entries that carry a `username`. Lets legacy username-based
48
- * challenges keep resolving; `username` is never required.
49
- */
50
- private usersByUsername;
51
- private revokedUsers;
52
- private adminSigningPublicKey;
53
- constructor(config: TenantConfig);
54
- getUserPublicKeys(username: string): Promise<{
55
- signingPublicKey: string;
56
- encryptionPublicKey: string;
57
- } | null>;
58
- getUserBySigningPublicKey(publicKey: string): Promise<DirectoryUserLookup | null>;
59
- private toLookup;
60
- isUserRevoked(username: string): Promise<boolean>;
61
- validatePublicSigningKey(publicKey: string, _opts?: {
62
- forceRefresh?: boolean;
63
- }): Promise<boolean>;
11
+ export { SimpleMindooDirectory, type LoadedTenant, type RegisterTenantResult, } from "../../server/TenantManager";
12
+ /** The on-disk stores of every tenant below `<dataDir>/<tenantId>/stores`. */
13
+ export declare class NodeServerStoreProvider implements ServerStoreProvider {
14
+ private readonly dataDir;
15
+ private readonly dataStore;
16
+ constructor(dataDir: string, dataStore: FsServerDataStore);
17
+ createTenantStores(tenantId: string, config: ConstructorParameters<typeof StoreFactory>[1]): StoreFactory;
18
+ listDatabases(tenantId: string): string[];
64
19
  }
65
- /**
66
- * TenantManager is responsible for:
67
- * - Loading the global server identity and trusted servers
68
- * - Loading tenant configurations from disk
69
- * - Caching loaded tenants
70
- * - Registering new tenants
71
- * - Managing tenant stores and authentication services
72
- * - Creating a real MindooDB tenant for directory reading (when keys available)
73
- * - Runtime management of trusted servers
74
- */
75
- export declare class TenantManager {
76
- private dataDir;
77
- private serverPassword;
78
- private cryptoAdapter;
79
- private loadedTenants;
80
- private serverIdentity;
81
- private trustedServers;
82
- /** Lazily-built, cached witness signer (server's Ed25519 signing identity). */
83
- private witnessSigner;
84
- /** Lazily-imported RSA private key for peer replication (see getServerEncryptionPrivateKey). */
85
- private serverEncryptionPrivateKey;
86
- /** Peer wiring handed down to every server store; see setPeerAccessControl. */
87
- private peerAccessControl;
88
- /** Per-tenant persistent registry of executed purges (docs/accesscontrol.md §13). */
89
- private purgedDocRegistries;
90
- /** In-flight purge executions, keyed by normalized tenant id (serializes runs). */
91
- private purgeInFlight;
20
+ export declare class TenantManager extends CoreTenantManager {
21
+ private readonly dataDir;
92
22
  constructor(dataDir: string, serverPassword?: string);
93
- getServerIdentity(): PrivateUserId | null;
94
- getServerPublicInfo(): TrustedServer | null;
95
23
  getDataDir(): string;
96
- /**
97
- * Teach every server store how to recognise a trusted peer.
98
- *
99
- * `MindooDBServer` calls this once at startup. Two hooks, both required for
100
- * peer replication to be correct:
101
- *
102
- * - `peerTokenResolver` lets a peer's cluster-level JWT through the tenant
103
- * sync routes. A peer holds no per-tenant grant, so without it the mirror
104
- * would need a second replication protocol; with it the peer reuses the
105
- * client one and the store skips the per-user gates that do not apply to a
106
- * full replica.
107
- * - `trustedWitnessResolver` decides whose witness receipts may be preserved
108
- * instead of re-stamped (convergence invariant 3). Without it a replicated
109
- * entry would get a fresh `receivedAt` on every hop and "trusted time"
110
- * would mean "time it reached the last server".
111
- *
112
- * Must be called before the first {@link getServerStore}, since stores are
113
- * cached per tenant and database.
114
- */
115
- setPeerAccessControl(options: {
116
- peerTokenResolver?: ServerPeerTokenResolver;
117
- trustedWitnessResolver?: ServerTrustedWitnessResolver;
118
- }): void;
119
- /**
120
- * Database ids this server holds for a tenant, read from
121
- * `{dataDir}/{tenantId}/stores`. Used by peer replication to mirror every
122
- * database rather than a configured subset.
123
- */
124
- listDatabases(tenantId: string): string[];
125
- /**
126
- * The server's own RSA private key, imported for decryption.
127
- *
128
- * Peer replication needs it because the remote wraps transported entries to
129
- * this server's `encryptionPublicKey` (the one in its `trusted-servers.json`),
130
- * exactly as it would wrap them for a client.
131
- */
132
- getServerEncryptionPrivateKey(): Promise<CryptoKey | undefined>;
133
- /**
134
- * Build (and cache) the server's witness identity used to stamp receipts on
135
- * accepted entries (docs/accesscontrol.md §5.3). Returns undefined when the
136
- * server identity or its unlock password is unavailable, in which case the
137
- * server runs in pre-access-control mode (no stamping, no Tier 1 advertised).
138
- */
139
- getWitnessSigner(): Promise<WitnessSigner | undefined>;
140
- /**
141
- * Build the trusted-time provider that stamps receipts on accepted entries
142
- * (docs/accesscontrol.md §5.3, §13). v1 wraps the server's Ed25519 witness
143
- * identity; returns undefined when no witness signer is available, leaving the
144
- * server in pre-access-control mode.
145
- */
146
- getTimestampProvider(): Promise<TimestampProvider | undefined>;
147
- listTrustedServers(): TrustedServer[];
148
- addTrustedServer(server: TrustedServer): void;
149
- /**
150
- * Add or replace a trusted server by name.
151
- *
152
- * Peer CRUD needs an upsert: `addTrustedServer` throws on an existing name,
153
- * which is right for `add-to-network` (a silent overwrite of a peer's keys
154
- * would be a trust change disguised as a config edit) but wrong for the admin
155
- * API, where changing a peer's url or role is the common case.
156
- */
157
- saveTrustedServer(server: TrustedServer): void;
158
- removeTrustedServer(name: string): boolean;
159
- private persistTrustedServers;
160
- private getServerKeyBagPath;
161
- private loadServerKeyBag;
162
- private createServerKeyBag;
163
- private saveServerKeyBag;
164
- private bytesToBase64;
165
- private mergeUniqueKeys;
166
- private computePublicInfosFingerprint;
167
- private resolveTenantDir;
168
- private resolveTenantConfigPath;
169
- private decryptEncryptedPublicInfosKey;
170
- private resolveIncomingPublicInfosKey;
171
- private getStoredPublicInfosKeys;
172
- private persistTenantPublicInfosKey;
173
- /**
174
- * All stored `$publicinfos` AES key versions for a tenant from `server.keybag`.
175
- * Empty when the tenant was never published or the server keybag is locked.
176
- */
177
- getPublicInfosKeysForTenant(tenantId: string): Promise<Uint8Array[]>;
178
- listTenantPublicInfosFingerprints(tenantId: string): Promise<string[]>;
179
- registerTenant(request: RegisterTenantRequest): Promise<RegisterTenantResult>;
180
- getTenant(tenantId: string): Promise<LoadedTenant>;
181
- tenantExists(tenantId: string): boolean;
182
- /**
183
- * Read the tenant's registered admin signing key without fully loading the
184
- * tenant. Returns `null` if the tenant is missing or the config is unreadable.
185
- */
186
- getTenantAdminSigningPublicKey(tenantId: string): string | null;
187
- /**
188
- * True when `publicsignkey` is the registered tenant-admin signing key for
189
- * `tenantId` (PEM whitespace-insensitive).
190
- */
191
- isTenantAdminSigningKeyFor(tenantId: string, publicsignkey: string): boolean;
192
- /**
193
- * True when `publicsignkey` is the registered admin signing key of any
194
- * tenant on this server. Used to issue a system JWT so that admin can
195
- * DELETE their own tenant; other `/system/*` routes stay capability-gated.
196
- */
197
- isRegisteredTenantAdminSigningKey(publicsignkey: string): boolean;
198
- listTenants(): string[];
199
- /**
200
- * Update operator-owned fields of an existing tenant configuration.
201
- * Only the fields present in `updates` are overwritten.
202
- */
203
- updateTenantConfig(tenantId: string, updates: Partial<Pick<TenantConfig, "defaultStoreType">>): void;
204
- removeTenant(tenantId: string): Promise<void>;
205
- getServerStore(tenantId: string, dbId: string, storeKind: StoreKind): Promise<ServerNetworkContentAddressedStore>;
206
- /**
207
- * Build a Tier 1 evaluator closure for a server store, or undefined when the
208
- * directory cannot evaluate access (e.g. config-based directory without the
209
- * access-control state chain). The closure resolves `$author` for non-create
210
- * ops by reading the document's `doc_create` entry creator key from the local
211
- * store (metadata only, no decryption) and comparing it to the change author.
212
- */
213
- /**
214
- * The witness's Tier 1 gate. The evaluation itself is shared with the peer
215
- * listener, which has to run it for entries that never reach a witness at
216
- * all — see `core/accesscontrol/tier1Evaluator.ts`.
217
- */
218
- private buildTier1Evaluator;
219
- /**
220
- * Builtin `userdirectory` write invariant: admin may create/delete, only the
221
- * owning person may change. `username_hash` is read from the decrypted
222
- * `doc_create` payload (`$publicinfos`). Personal documents are sealed to
223
- * their owner and therefore undecryptable here, so they are owned by whoever
224
- * signed their `doc_create` — `resolveCreatorSigningKey` answers that from
225
- * the entry chain alone.
226
- */
227
- private buildUserdirectoryWriteContext;
228
- private findCreateEntry;
229
- /**
230
- * Build a database-open evaluator closure for a server store, or undefined
231
- * when the directory cannot evaluate the database-open policy (e.g. a
232
- * config-based directory without the access-control state chain). When the
233
- * tenant policy is `"directory-restricted"`, this rejects sync for any
234
- * database id that is not in the allowlist; `"directory"` is always allowed
235
- * and the tenant admin is exempt (resolved from the principal signing key).
236
- */
237
- private buildDbAccessEvaluator;
238
- /**
239
- * Build a remote-wipe resolver closure for a server store, or undefined when
240
- * the directory does not support wipe directives (docs/accesscontrol.md §6.5).
241
- * Maps a wipe-targeted signing key to the admin-signed grant document id so
242
- * the server can serve only that document to the targeted device.
243
- */
244
- private buildWipeGrantDocIdResolver;
245
- /**
246
- * Build a per-user revoked-key blacklist resolver for a server store, or
247
- * undefined when the directory cannot resolve revoked keys (e.g. a
248
- * config-based directory). Maps the authenticated principal's signing key to
249
- * the set of decryption key ids revoked for them at the directory head
250
- * (docs/accesscontrol.md §13).
251
- */
252
- private buildRevokedKeyResolver;
253
- getStore(tenantId: string, dbId: string, storeKind: StoreKind): Promise<ContentAddressedStore>;
254
- /**
255
- * Documents purged from `dbId` on this server (the persistent purge
256
- * registry). Peer pull replication refuses their entries.
257
- */
258
- getPurgedDocIds(tenantId: string, dbId: string): ReadonlySet<string>;
259
- /** The (lazily-loaded, cached) purge registry for a tenant. */
260
- private getPurgedDocRegistry;
261
- /**
262
- * Execute any not-yet-processed document-history purge requests for a tenant
263
- * (docs/accesscontrol.md §13). Reads the admin-signed purge requests from the
264
- * tenant directory (server-readable `$publicinfos` envelope), physically
265
- * purges each requested document's history from the tenant's `docs` and
266
- * `attachments` stores, and records the purge in the persistent registry so
267
- * (a) it is never executed twice and (b) re-pushes of the purged docs are
268
- * rejected at sync time.
269
- *
270
- * No-op when the server cannot read the directory (config-based fallback, or
271
- * the directory does not expose the purge reader). Runs are serialized per
272
- * tenant; concurrent callers share the in-flight promise.
273
- */
274
- executePendingPurges(tenantId: string): Promise<void>;
275
- private executePendingPurgesInternal;
276
- /**
277
- * Purge one document from a database's docs and attachment stores. Attachment
278
- * chunks still referenced by another document are kept (see
279
- * `purgeDocumentHistory.ts`). Failures are logged, never thrown.
280
- */
281
- private purgeDocumentFromDatabase;
282
- getAuthService(tenantId: string): Promise<AuthenticationService>;
283
24
  getCryptoAdapter(): NodeCryptoAdapter;
284
- reloadTenant(tenantId: string): Promise<LoadedTenant>;
285
- clearCache(): void;
286
- private loadTenant;
287
- /**
288
- * Create a real BaseMindooTenant for directory reading using the global
289
- * server identity.
290
- */
291
- private createDirectoryTenant;
292
25
  }
293
- export {};
294
26
  //# sourceMappingURL=TenantManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TenantManager.d.ts","sourceRoot":"","sources":["../../../src/node/server/TenantManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TenantManager.d.ts","sourceRoot":"","sources":["../../../src/node/server/TenantManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EACL,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC;AAEpC,8EAA8E;AAC9E,qBAAa,uBAAwB,YAAW,mBAAmB;IAE/D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,iBAAiB;IAG/C,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;IAIzG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;CAiB1C;AAUD,qBAAa,aAAc,SAAQ,iBAAiB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;IAWpD,UAAU,IAAI,MAAM;IAIX,gBAAgB,IAAI,iBAAiB;CAG/C"}