mindoodb 0.0.51 → 0.0.54
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.
- package/README-server.md +136 -71
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +30 -1
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +67 -20
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.d.ts +2 -0
- package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.js +6 -62
- package/dist/appendonlystores/network/HttpTransport.js.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +82 -0
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +229 -25
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -1
- package/dist/browser/index.mjs +59 -0
- package/dist/core/BaseMindooDB.d.ts +148 -80
- package/dist/core/BaseMindooDB.d.ts.map +1 -1
- package/dist/core/BaseMindooDB.js +890 -692
- package/dist/core/BaseMindooDB.js.map +1 -1
- package/dist/core/BaseMindooTenant.d.ts +59 -7
- package/dist/core/BaseMindooTenant.d.ts.map +1 -1
- package/dist/core/BaseMindooTenant.js +407 -86
- package/dist/core/BaseMindooTenant.js.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.d.ts +61 -9
- package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.js +363 -35
- package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
- package/dist/core/BaseMindooTenantFactory.d.ts +17 -1
- package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantFactory.js +286 -17
- package/dist/core/BaseMindooTenantFactory.js.map +1 -1
- package/dist/core/MindooDBServerAdmin.d.ts +44 -22
- package/dist/core/MindooDBServerAdmin.d.ts.map +1 -1
- package/dist/core/MindooDBServerAdmin.js +45 -21
- package/dist/core/MindooDBServerAdmin.js.map +1 -1
- package/dist/core/accesscontrol/DirectoryStateNode.d.ts +68 -1
- package/dist/core/accesscontrol/DirectoryStateNode.d.ts.map +1 -1
- package/dist/core/accesscontrol/DirectoryStateNode.js +157 -4
- package/dist/core/accesscontrol/DirectoryStateNode.js.map +1 -1
- package/dist/core/accesscontrol/directoryProjection.d.ts.map +1 -1
- package/dist/core/accesscontrol/directoryProjection.js +14 -5
- package/dist/core/accesscontrol/directoryProjection.js.map +1 -1
- package/dist/core/accesscontrol/grantKeys.d.ts +17 -14
- package/dist/core/accesscontrol/grantKeys.d.ts.map +1 -1
- package/dist/core/accesscontrol/grantKeys.js +51 -21
- package/dist/core/accesscontrol/grantKeys.js.map +1 -1
- package/dist/core/accesscontrol/types.d.ts +2 -1
- package/dist/core/accesscontrol/types.d.ts.map +1 -1
- package/dist/core/accesscontrol/types.js +3 -2
- package/dist/core/accesscontrol/types.js.map +1 -1
- package/dist/core/appendonlystores/network/AuthenticationService.d.ts +7 -0
- package/dist/core/appendonlystores/network/AuthenticationService.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/AuthenticationService.js +70 -14
- package/dist/core/appendonlystores/network/AuthenticationService.js.map +1 -1
- package/dist/core/appendonlystores/network/entryWireCodec.d.ts +51 -0
- package/dist/core/appendonlystores/network/entryWireCodec.d.ts.map +1 -0
- package/dist/core/appendonlystores/network/entryWireCodec.js +93 -0
- package/dist/core/appendonlystores/network/entryWireCodec.js.map +1 -0
- package/dist/core/appendonlystores/syncStores.d.ts +147 -0
- package/dist/core/appendonlystores/syncStores.d.ts.map +1 -0
- package/dist/core/appendonlystores/syncStores.js +612 -0
- package/dist/core/appendonlystores/syncStores.js.map +1 -0
- package/dist/core/builtinDbInvariants.d.ts +83 -0
- package/dist/core/builtinDbInvariants.d.ts.map +1 -0
- package/dist/core/builtinDbInvariants.js +244 -0
- package/dist/core/builtinDbInvariants.js.map +1 -0
- package/dist/core/copy/feasibility.d.ts.map +1 -1
- package/dist/core/copy/feasibility.js +3 -0
- package/dist/core/copy/feasibility.js.map +1 -1
- package/dist/core/copy/flatten.d.ts.map +1 -1
- package/dist/core/copy/flatten.js +6 -1
- package/dist/core/copy/flatten.js.map +1 -1
- package/dist/core/copy/host.d.ts +5 -0
- package/dist/core/copy/host.d.ts.map +1 -1
- package/dist/core/copy/preflight.d.ts.map +1 -1
- package/dist/core/copy/preflight.js +7 -1
- package/dist/core/copy/preflight.js.map +1 -1
- package/dist/core/copy/types.d.ts +7 -0
- package/dist/core/copy/types.d.ts.map +1 -1
- package/dist/core/crypto/EntrySignature.d.ts +8 -2
- package/dist/core/crypto/EntrySignature.d.ts.map +1 -1
- package/dist/core/crypto/EntrySignature.js +14 -5
- package/dist/core/crypto/EntrySignature.js.map +1 -1
- package/dist/core/crypto/MindooDocSigner.d.ts.map +1 -1
- package/dist/core/crypto/MindooDocSigner.js +11 -2
- package/dist/core/crypto/MindooDocSigner.js.map +1 -1
- package/dist/core/crypto/RSAEncryption.d.ts +19 -0
- package/dist/core/crypto/RSAEncryption.d.ts.map +1 -1
- package/dist/core/crypto/RSAEncryption.js +36 -3
- package/dist/core/crypto/RSAEncryption.js.map +1 -1
- package/dist/core/crypto/privateKeyEncryption.js +1 -1
- package/dist/core/crypto/privateKeyEncryption.js.map +1 -1
- package/dist/core/crypto/rsaOaep3072.d.ts +12 -0
- package/dist/core/crypto/rsaOaep3072.d.ts.map +1 -0
- package/dist/core/crypto/rsaOaep3072.js +30 -0
- package/dist/core/crypto/rsaOaep3072.js.map +1 -0
- package/dist/core/index.d.ts +7 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +33 -4
- package/dist/core/index.js.map +1 -1
- package/dist/core/join/deviceJoinBootstrap.d.ts +23 -0
- package/dist/core/join/deviceJoinBootstrap.d.ts.map +1 -0
- package/dist/core/join/deviceJoinBootstrap.js +37 -0
- package/dist/core/join/deviceJoinBootstrap.js.map +1 -0
- package/dist/core/keys/KeyBag.d.ts +20 -2
- package/dist/core/keys/KeyBag.d.ts.map +1 -1
- package/dist/core/keys/KeyBag.js +22 -10
- package/dist/core/keys/KeyBag.js.map +1 -1
- package/dist/core/logging/MindooLogger.d.ts.map +1 -1
- package/dist/core/logging/MindooLogger.js +65 -40
- package/dist/core/logging/MindooLogger.js.map +1 -1
- package/dist/core/tenantIdValidation.d.ts.map +1 -1
- package/dist/core/tenantIdValidation.js +1 -1
- package/dist/core/tenantIdValidation.js.map +1 -1
- package/dist/core/tenantSetup.d.ts +94 -9
- package/dist/core/tenantSetup.d.ts.map +1 -1
- package/dist/core/tenantSetup.js +208 -20
- package/dist/core/tenantSetup.js.map +1 -1
- package/dist/core/types.d.ts +313 -33
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +14 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/uri/joinRequestUri.d.ts.map +1 -1
- package/dist/core/uri/joinRequestUri.js +12 -3
- package/dist/core/uri/joinRequestUri.js.map +1 -1
- package/dist/core/userid/canonicalUsername.d.ts +66 -0
- package/dist/core/userid/canonicalUsername.d.ts.map +1 -0
- package/dist/core/userid/canonicalUsername.js +235 -0
- package/dist/core/userid/canonicalUsername.js.map +1 -0
- package/dist/core/userid/index.d.ts +9 -0
- package/dist/core/userid/index.d.ts.map +1 -1
- package/dist/core/userid/index.js +14 -0
- package/dist/core/userid/index.js.map +1 -1
- package/dist/core/userkeys/UserKeyDocument.d.ts +50 -0
- package/dist/core/userkeys/UserKeyDocument.d.ts.map +1 -0
- package/dist/core/userkeys/UserKeyDocument.js +145 -0
- package/dist/core/userkeys/UserKeyDocument.js.map +1 -0
- package/dist/core/userkeys/UserKeyManager.d.ts +170 -0
- package/dist/core/userkeys/UserKeyManager.d.ts.map +1 -0
- package/dist/core/userkeys/UserKeyManager.js +1277 -0
- package/dist/core/userkeys/UserKeyManager.js.map +1 -0
- package/dist/core/userkeys/fingerprint.d.ts +17 -0
- package/dist/core/userkeys/fingerprint.d.ts.map +1 -0
- package/dist/core/userkeys/fingerprint.js +59 -0
- package/dist/core/userkeys/fingerprint.js.map +1 -0
- package/dist/core/userkeys/index.d.ts +11 -0
- package/dist/core/userkeys/index.d.ts.map +1 -0
- package/dist/core/userkeys/index.js +49 -0
- package/dist/core/userkeys/index.js.map +1 -0
- package/dist/core/userkeys/recipients.d.ts +51 -0
- package/dist/core/userkeys/recipients.d.ts.map +1 -0
- package/dist/core/userkeys/recipients.js +292 -0
- package/dist/core/userkeys/recipients.js.map +1 -0
- package/dist/core/userkeys/resolveUserKeyDocument.d.ts +21 -0
- package/dist/core/userkeys/resolveUserKeyDocument.d.ts.map +1 -0
- package/dist/core/userkeys/resolveUserKeyDocument.js +98 -0
- package/dist/core/userkeys/resolveUserKeyDocument.js.map +1 -0
- package/dist/core/userkeys/sealedCrypto.d.ts +21 -0
- package/dist/core/userkeys/sealedCrypto.d.ts.map +1 -0
- package/dist/core/userkeys/sealedCrypto.js +79 -0
- package/dist/core/userkeys/sealedCrypto.js.map +1 -0
- package/dist/core/userkeys/sealedTypes.d.ts +72 -0
- package/dist/core/userkeys/sealedTypes.d.ts.map +1 -0
- package/dist/core/userkeys/sealedTypes.js +14 -0
- package/dist/core/userkeys/sealedTypes.js.map +1 -0
- package/dist/core/userkeys/types.d.ts +70 -0
- package/dist/core/userkeys/types.d.ts.map +1 -0
- package/dist/core/userkeys/types.js +48 -0
- package/dist/core/userkeys/types.js.map +1 -0
- package/dist/core/userkeys/validateUserKeyDocument.d.ts +19 -0
- package/dist/core/userkeys/validateUserKeyDocument.d.ts.map +1 -0
- package/dist/core/userkeys/validateUserKeyDocument.js +42 -0
- package/dist/core/userkeys/validateUserKeyDocument.js.map +1 -0
- package/dist/node/server/CapabilityMatcher.d.ts +7 -2
- package/dist/node/server/CapabilityMatcher.d.ts.map +1 -1
- package/dist/node/server/CapabilityMatcher.js +12 -3
- package/dist/node/server/CapabilityMatcher.js.map +1 -1
- package/dist/node/server/DeviceDiscoveryService.d.ts +36 -0
- package/dist/node/server/DeviceDiscoveryService.d.ts.map +1 -0
- package/dist/node/server/DeviceDiscoveryService.js +165 -0
- package/dist/node/server/DeviceDiscoveryService.js.map +1 -0
- package/dist/node/server/MindooDBServer.d.ts +27 -1
- package/dist/node/server/MindooDBServer.d.ts.map +1 -1
- package/dist/node/server/MindooDBServer.js +265 -220
- package/dist/node/server/MindooDBServer.js.map +1 -1
- package/dist/node/server/SyncEventBus.d.ts +10 -0
- package/dist/node/server/SyncEventBus.d.ts.map +1 -1
- package/dist/node/server/SyncEventBus.js.map +1 -1
- package/dist/node/server/SystemAdminAuth.d.ts +7 -0
- package/dist/node/server/SystemAdminAuth.d.ts.map +1 -1
- package/dist/node/server/SystemAdminAuth.js +4 -1
- package/dist/node/server/SystemAdminAuth.js.map +1 -1
- package/dist/node/server/TenantManager.d.ts +86 -5
- package/dist/node/server/TenantManager.d.ts.map +1 -1
- package/dist/node/server/TenantManager.js +235 -71
- package/dist/node/server/TenantManager.js.map +1 -1
- package/dist/node/server/add-to-network.d.ts.map +1 -1
- package/dist/node/server/add-to-network.js +33 -15
- package/dist/node/server/add-to-network.js.map +1 -1
- package/dist/node/server/canonicalSetupName.d.ts +22 -0
- package/dist/node/server/canonicalSetupName.d.ts.map +1 -0
- package/dist/node/server/canonicalSetupName.js +38 -0
- package/dist/node/server/canonicalSetupName.js.map +1 -0
- package/dist/node/server/config.d.ts.map +1 -1
- package/dist/node/server/config.js +33 -1
- package/dist/node/server/config.js.map +1 -1
- package/dist/node/server/peer/ClusterAuditLog.d.ts +64 -0
- package/dist/node/server/peer/ClusterAuditLog.d.ts.map +1 -0
- package/dist/node/server/peer/ClusterAuditLog.js +99 -0
- package/dist/node/server/peer/ClusterAuditLog.js.map +1 -0
- package/dist/node/server/peer/ClusterJobRunner.d.ts +43 -0
- package/dist/node/server/peer/ClusterJobRunner.d.ts.map +1 -0
- package/dist/node/server/peer/ClusterJobRunner.js +119 -0
- package/dist/node/server/peer/ClusterJobRunner.js.map +1 -0
- package/dist/node/server/peer/ClusterManager.d.ts +116 -0
- package/dist/node/server/peer/ClusterManager.d.ts.map +1 -0
- package/dist/node/server/peer/ClusterManager.js +274 -0
- package/dist/node/server/peer/ClusterManager.js.map +1 -0
- package/dist/node/server/peer/PeerAuthService.d.ts +69 -0
- package/dist/node/server/peer/PeerAuthService.d.ts.map +1 -0
- package/dist/node/server/peer/PeerAuthService.js +208 -0
- package/dist/node/server/peer/PeerAuthService.js.map +1 -0
- package/dist/node/server/peer/PeerReplicator.d.ts +232 -0
- package/dist/node/server/peer/PeerReplicator.d.ts.map +1 -0
- package/dist/node/server/peer/PeerReplicator.js +879 -0
- package/dist/node/server/peer/PeerReplicator.js.map +1 -0
- package/dist/node/server/peer/routes.d.ts +66 -0
- package/dist/node/server/peer/routes.d.ts.map +1 -0
- package/dist/node/server/peer/routes.js +322 -0
- package/dist/node/server/peer/routes.js.map +1 -0
- package/dist/node/server/peer/types.d.ts +244 -0
- package/dist/node/server/peer/types.d.ts.map +1 -0
- package/dist/node/server/peer/types.js +189 -0
- package/dist/node/server/peer/types.js.map +1 -0
- package/dist/node/server/server.d.ts +1 -1
- package/dist/node/server/server.js +18 -37
- package/dist/node/server/server.js.map +1 -1
- package/dist/node/server/serverinit.d.ts +2 -1
- package/dist/node/server/serverinit.d.ts.map +1 -1
- package/dist/node/server/serverinit.js +34 -12
- package/dist/node/server/serverinit.js.map +1 -1
- package/dist/node/server/types.d.ts +42 -30
- package/dist/node/server/types.d.ts.map +1 -1
- package/dist/node/server/types.js +1 -7
- package/dist/node/server/types.js.map +1 -1
- package/dist/node/server/validation.d.ts +0 -6
- package/dist/node/server/validation.d.ts.map +1 -1
- package/dist/node/server/validation.js +1 -7
- package/dist/node/server/validation.js.map +1 -1
- package/package.json +5 -5
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.CapabilityMatcher = void 0;
|
|
16
|
+
exports.parseSystemTenantItemPath = parseSystemTenantItemPath;
|
|
16
17
|
const config_1 = require("./config");
|
|
17
18
|
class CapabilityMatcher {
|
|
18
19
|
constructor(config) {
|
|
@@ -97,13 +98,13 @@ class CapabilityMatcher {
|
|
|
97
98
|
* Tenant creation targets exactly one path segment under `/system/tenants/`
|
|
98
99
|
* (the new tenant id) — e.g. `/system/tenants/acme`. A prefix (`startsWith`)
|
|
99
100
|
* test over-grants the wildcard tenant-creation principal to sub-resources of
|
|
100
|
-
* an *existing* tenant
|
|
101
|
-
*
|
|
101
|
+
* an *existing* tenant, e.g. any future `/system/tenants/acme/<sub>` route
|
|
102
|
+
* (audit #6). Require a segment-exact
|
|
102
103
|
* match so the wildcard authorizes creation only. A trailing slash is allowed
|
|
103
104
|
* but no further path segment.
|
|
104
105
|
*/
|
|
105
106
|
static isTenantCreationPath(path) {
|
|
106
|
-
return
|
|
107
|
+
return parseSystemTenantItemPath(path) !== null;
|
|
107
108
|
}
|
|
108
109
|
/**
|
|
109
110
|
* Match a path pattern against a request path.
|
|
@@ -126,4 +127,12 @@ class CapabilityMatcher {
|
|
|
126
127
|
}
|
|
127
128
|
}
|
|
128
129
|
exports.CapabilityMatcher = CapabilityMatcher;
|
|
130
|
+
/**
|
|
131
|
+
* Parse `/system/tenants/:tenantId` (optional trailing slash, no sub-resource).
|
|
132
|
+
* Returns the tenant id segment or `null`.
|
|
133
|
+
*/
|
|
134
|
+
function parseSystemTenantItemPath(path) {
|
|
135
|
+
const match = /^\/system\/tenants\/([^/]+)\/?$/.exec(path);
|
|
136
|
+
return match ? match[1] : null;
|
|
137
|
+
}
|
|
129
138
|
//# sourceMappingURL=CapabilityMatcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CapabilityMatcher.js","sourceRoot":"","sources":["../../../src/node/server/CapabilityMatcher.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;
|
|
1
|
+
{"version":3,"file":"CapabilityMatcher.js","sourceRoot":"","sources":["../../../src/node/server/CapabilityMatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-wide device discovery: prove possession of a device signing key,
|
|
3
|
+
* then scan all tenants for an active grant and deliver RSA-wrapped
|
|
4
|
+
* `$publicinfos` plus admin public keys and the per-device join bootstrap —
|
|
5
|
+
* no join-response URI required.
|
|
6
|
+
*/
|
|
7
|
+
import type { CryptoAdapter } from "../../core/crypto/CryptoAdapter";
|
|
8
|
+
import type { DeviceTenantDelivery } from "../../core/types";
|
|
9
|
+
import type { TenantManager } from "./TenantManager";
|
|
10
|
+
export type { DeviceTenantDelivery };
|
|
11
|
+
export interface DeviceDiscoverResult {
|
|
12
|
+
tenants: DeviceTenantDelivery[];
|
|
13
|
+
}
|
|
14
|
+
export declare class DeviceDiscoveryAuthError extends Error {
|
|
15
|
+
constructor(message: string);
|
|
16
|
+
}
|
|
17
|
+
export declare class DeviceDiscoveryService {
|
|
18
|
+
private readonly tenantManager;
|
|
19
|
+
private readonly cryptoAdapter;
|
|
20
|
+
private challenges;
|
|
21
|
+
constructor(tenantManager: TenantManager, cryptoAdapter: CryptoAdapter);
|
|
22
|
+
/**
|
|
23
|
+
* Issue a short-lived, single-use challenge bound to `signingPublicKey`.
|
|
24
|
+
* Does not require the key to be on any tenant yet (discovery finds that).
|
|
25
|
+
*/
|
|
26
|
+
createChallenge(signingPublicKey: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Verify the Ed25519 signature over the challenge, then scan every local
|
|
29
|
+
* tenant for an active grant containing this signing key. Matching tenants
|
|
30
|
+
* receive a delivery with RSA-wrapped `$publicinfos` (parallelized).
|
|
31
|
+
*/
|
|
32
|
+
discover(challenge: string, signature: Uint8Array): Promise<DeviceDiscoverResult>;
|
|
33
|
+
private verifySignature;
|
|
34
|
+
private cleanup;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=DeviceDiscoveryService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceDiscoveryService.d.ts","sourceRoot":"","sources":["../../../src/node/server/DeviceDiscoveryService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAarD,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,sBAAsB;IAI/B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAJhC,OAAO,CAAC,UAAU,CAAsC;gBAGrC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa;IAG/C;;;OAGG;IACH,eAAe,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAkBjD;;;;OAIG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC;YA0GzE,eAAe;IAkC7B,OAAO,CAAC,OAAO;CAahB"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Server-wide device discovery: prove possession of a device signing key,
|
|
4
|
+
* then scan all tenants for an active grant and deliver RSA-wrapped
|
|
5
|
+
* `$publicinfos` plus admin public keys and the per-device join bootstrap —
|
|
6
|
+
* no join-response URI required.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DeviceDiscoveryService = exports.DeviceDiscoveryAuthError = void 0;
|
|
10
|
+
const uuid_1 = require("uuid");
|
|
11
|
+
const RSAEncryption_1 = require("../../core/crypto/RSAEncryption");
|
|
12
|
+
const CHALLENGE_TTL_MS = 5 * 60 * 1000;
|
|
13
|
+
const MAX_CHALLENGES = 10000;
|
|
14
|
+
class DeviceDiscoveryAuthError extends Error {
|
|
15
|
+
constructor(message) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = "DeviceDiscoveryAuthError";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.DeviceDiscoveryAuthError = DeviceDiscoveryAuthError;
|
|
21
|
+
class DeviceDiscoveryService {
|
|
22
|
+
constructor(tenantManager, cryptoAdapter) {
|
|
23
|
+
this.tenantManager = tenantManager;
|
|
24
|
+
this.cryptoAdapter = cryptoAdapter;
|
|
25
|
+
this.challenges = new Map();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Issue a short-lived, single-use challenge bound to `signingPublicKey`.
|
|
29
|
+
* Does not require the key to be on any tenant yet (discovery finds that).
|
|
30
|
+
*/
|
|
31
|
+
createChallenge(signingPublicKey) {
|
|
32
|
+
const trimmed = signingPublicKey.trim();
|
|
33
|
+
if (!trimmed) {
|
|
34
|
+
throw new Error("signingPublicKey is required");
|
|
35
|
+
}
|
|
36
|
+
const challenge = (0, uuid_1.v7)();
|
|
37
|
+
const now = Date.now();
|
|
38
|
+
this.challenges.set(challenge, {
|
|
39
|
+
challenge,
|
|
40
|
+
signingPublicKey: trimmed,
|
|
41
|
+
createdAt: now,
|
|
42
|
+
expiresAt: now + CHALLENGE_TTL_MS,
|
|
43
|
+
used: false,
|
|
44
|
+
});
|
|
45
|
+
this.cleanup();
|
|
46
|
+
return challenge;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Verify the Ed25519 signature over the challenge, then scan every local
|
|
50
|
+
* tenant for an active grant containing this signing key. Matching tenants
|
|
51
|
+
* receive a delivery with RSA-wrapped `$publicinfos` (parallelized).
|
|
52
|
+
*/
|
|
53
|
+
async discover(challenge, signature) {
|
|
54
|
+
const authChallenge = this.challenges.get(challenge);
|
|
55
|
+
if (!authChallenge) {
|
|
56
|
+
throw new DeviceDiscoveryAuthError("Challenge not found or expired");
|
|
57
|
+
}
|
|
58
|
+
if (Date.now() > authChallenge.expiresAt) {
|
|
59
|
+
this.challenges.delete(challenge);
|
|
60
|
+
throw new DeviceDiscoveryAuthError("Challenge expired");
|
|
61
|
+
}
|
|
62
|
+
if (authChallenge.used) {
|
|
63
|
+
throw new DeviceDiscoveryAuthError("Challenge already used");
|
|
64
|
+
}
|
|
65
|
+
authChallenge.used = true;
|
|
66
|
+
const ok = await this.verifySignature(challenge, signature, authChallenge.signingPublicKey);
|
|
67
|
+
if (!ok) {
|
|
68
|
+
throw new DeviceDiscoveryAuthError("Invalid signature");
|
|
69
|
+
}
|
|
70
|
+
const signingPublicKey = authChallenge.signingPublicKey;
|
|
71
|
+
const tenantIds = this.tenantManager.listTenants();
|
|
72
|
+
const matches = [];
|
|
73
|
+
for (const tenantId of tenantIds) {
|
|
74
|
+
try {
|
|
75
|
+
const loaded = await this.tenantManager.getTenant(tenantId);
|
|
76
|
+
const lookup = await loaded.directory.getUserBySigningPublicKey(signingPublicKey);
|
|
77
|
+
if (!lookup?.encryptionPublicKey)
|
|
78
|
+
continue;
|
|
79
|
+
matches.push({
|
|
80
|
+
tenantId,
|
|
81
|
+
adminSigningPublicKey: loaded.context.config.adminSigningPublicKey,
|
|
82
|
+
adminEncryptionPublicKey: loaded.context.config.adminEncryptionPublicKey,
|
|
83
|
+
encryptionPublicKey: lookup.encryptionPublicKey,
|
|
84
|
+
username_hash: typeof lookup.username === "string" && /^[a-f0-9]{64}$/i.test(lookup.username)
|
|
85
|
+
? lookup.username
|
|
86
|
+
: undefined,
|
|
87
|
+
identity_hashes: lookup.identityHashes,
|
|
88
|
+
joinResponseWrapped: typeof lookup.joinResponseWrapped === "string" && lookup.joinResponseWrapped.trim()
|
|
89
|
+
? lookup.joinResponseWrapped.trim()
|
|
90
|
+
: undefined,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Tenant missing directory / not loadable — skip.
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (matches.length === 0) {
|
|
98
|
+
return { tenants: [] };
|
|
99
|
+
}
|
|
100
|
+
const rsa = new RSAEncryption_1.RSAEncryption(this.cryptoAdapter);
|
|
101
|
+
const deliveries = await Promise.all(matches.map(async (match) => {
|
|
102
|
+
try {
|
|
103
|
+
const keys = await this.tenantManager.getPublicInfosKeysForTenant(match.tenantId);
|
|
104
|
+
if (!keys.length)
|
|
105
|
+
return null;
|
|
106
|
+
const wrappedPublicInfosKeys = await Promise.all(keys.map((rawKey) => rsa.wrapKeyToBase64(rawKey, match.encryptionPublicKey)));
|
|
107
|
+
// getAllKeys is newest-first; keep wrappedPublicInfosKey as the current generation.
|
|
108
|
+
const wrappedPublicInfosKey = wrappedPublicInfosKeys[0];
|
|
109
|
+
console.log(`[DeviceDiscovery] Wrapped ${wrappedPublicInfosKeys.length} $publicinfos version(s) for tenant ${match.tenantId}`);
|
|
110
|
+
return {
|
|
111
|
+
tenantId: match.tenantId,
|
|
112
|
+
adminSigningPublicKey: match.adminSigningPublicKey,
|
|
113
|
+
adminEncryptionPublicKey: match.adminEncryptionPublicKey,
|
|
114
|
+
wrappedPublicInfosKey,
|
|
115
|
+
...(wrappedPublicInfosKeys.length > 1
|
|
116
|
+
? { wrappedPublicInfosKeys }
|
|
117
|
+
: {}),
|
|
118
|
+
...(match.joinResponseWrapped
|
|
119
|
+
? { wrappedJoinResponse: match.joinResponseWrapped }
|
|
120
|
+
: {}),
|
|
121
|
+
...(match.username_hash ? { username_hash: match.username_hash } : {}),
|
|
122
|
+
...(match.identity_hashes?.length
|
|
123
|
+
? { identity_hashes: match.identity_hashes }
|
|
124
|
+
: {}),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
}));
|
|
131
|
+
return { tenants: deliveries.filter((d) => d !== null) };
|
|
132
|
+
}
|
|
133
|
+
async verifySignature(challenge, signature, publicKeyPem) {
|
|
134
|
+
try {
|
|
135
|
+
const subtle = this.cryptoAdapter.getSubtle();
|
|
136
|
+
const pemContents = publicKeyPem
|
|
137
|
+
.replace(/-----BEGIN PUBLIC KEY-----/g, "")
|
|
138
|
+
.replace(/-----END PUBLIC KEY-----/g, "")
|
|
139
|
+
.replace(/\s/g, "");
|
|
140
|
+
const binaryDer = Uint8Array.from(atob(pemContents), (c) => c.charCodeAt(0));
|
|
141
|
+
const key = await subtle.importKey("spki", binaryDer.buffer, { name: "Ed25519" }, false, ["verify"]);
|
|
142
|
+
const data = new TextEncoder().encode(challenge);
|
|
143
|
+
return await subtle.verify("Ed25519", key, signature.buffer.slice(signature.byteOffset, signature.byteOffset + signature.byteLength), data.buffer);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
cleanup() {
|
|
150
|
+
const now = Date.now();
|
|
151
|
+
for (const [id, entry] of this.challenges) {
|
|
152
|
+
if (entry.used || entry.expiresAt <= now) {
|
|
153
|
+
this.challenges.delete(id);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
while (this.challenges.size > MAX_CHALLENGES) {
|
|
157
|
+
const oldest = this.challenges.keys().next().value;
|
|
158
|
+
if (oldest === undefined)
|
|
159
|
+
break;
|
|
160
|
+
this.challenges.delete(oldest);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.DeviceDiscoveryService = DeviceDiscoveryService;
|
|
165
|
+
//# sourceMappingURL=DeviceDiscoveryService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceDiscoveryService.js","sourceRoot":"","sources":["../../../src/node/server/DeviceDiscoveryService.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+BAAoC;AAEpC,mEAAgE;AAIhE,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACvC,MAAM,cAAc,GAAG,KAAM,CAAC;AAgB9B,MAAa,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AALD,4DAKC;AAED,MAAa,sBAAsB;IAGjC,YACmB,aAA4B,EAC5B,aAA4B;QAD5B,kBAAa,GAAb,aAAa,CAAe;QAC5B,kBAAa,GAAb,aAAa,CAAe;QAJvC,eAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;IAKrD,CAAC;IAEJ;;;OAGG;IACH,eAAe,CAAC,gBAAwB;QACtC,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,SAAS,GAAG,IAAA,SAAM,GAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE;YAC7B,SAAS;YACT,gBAAgB,EAAE,OAAO;YACzB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG,GAAG,gBAAgB;YACjC,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,SAAqB;QACrD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClC,MAAM,IAAI,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;QAC/D,CAAC;QACD,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC;QAE1B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CACnC,SAAS,EACT,SAAS,EACT,aAAa,CAAC,gBAAgB,CAC/B,CAAC;QACF,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QAWnD,MAAM,OAAO,GAAY,EAAE,CAAC;QAE5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;gBAClF,IAAI,CAAC,MAAM,EAAE,mBAAmB;oBAAE,SAAS;gBAE3C,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ;oBACR,qBAAqB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB;oBAClE,wBAAwB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,wBAAwB;oBACxE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;oBAC/C,aAAa,EACX,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;wBAC5E,CAAC,CAAC,MAAM,CAAC,QAAQ;wBACjB,CAAC,CAAC,SAAS;oBACf,eAAe,EAAE,MAAM,CAAC,cAAc;oBACtC,mBAAmB,EACjB,OAAO,MAAM,CAAC,mBAAmB,KAAK,QAAQ,IAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE;wBACjF,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE;wBACnC,CAAC,CAAC,SAAS;iBAChB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,6BAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAwC,EAAE;YAChE,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAClF,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAC;gBAC9B,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9C,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAC7E,CAAC;gBACF,oFAAoF;gBACpF,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,CAAC,CAAE,CAAC;gBACzD,OAAO,CAAC,GAAG,CACT,6BAA6B,sBAAsB,CAAC,MAAM,uCAAuC,KAAK,CAAC,QAAQ,EAAE,CAClH,CAAC;gBACF,OAAO;oBACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;oBAClD,wBAAwB,EAAE,KAAK,CAAC,wBAAwB;oBACxD,qBAAqB;oBACrB,GAAG,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC;wBACnC,CAAC,CAAC,EAAE,sBAAsB,EAAE;wBAC5B,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,KAAK,CAAC,mBAAmB;wBAC3B,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE;wBACpD,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtE,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM;wBAC/B,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE;wBAC5C,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAA6B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;IACtF,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,SAAiB,EACjB,SAAqB,EACrB,YAAoB;QAEpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;YAC9C,MAAM,WAAW,GAAG,YAAY;iBAC7B,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;iBAC1C,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;iBACxC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACtB,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAChC,MAAM,EACN,SAAS,CAAC,MAAqB,EAC/B,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,KAAK,EACL,CAAC,QAAQ,CAAC,CACX,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjD,OAAO,MAAM,MAAM,CAAC,MAAM,CACxB,SAAS,EACT,GAAG,EACH,SAAS,CAAC,MAAM,CAAC,KAAK,CACpB,SAAS,CAAC,UAAU,EACpB,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAC7B,EAChB,IAAI,CAAC,MAAqB,CAC3B,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;gBACzC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACnD,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM;YAChC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;CACF;AA5LD,wDA4LC"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* - Request size limits and timeouts
|
|
13
13
|
*/
|
|
14
14
|
import express from "express";
|
|
15
|
+
import { ClusterManager } from "./peer/ClusterManager";
|
|
15
16
|
import { TenantManager } from "./TenantManager";
|
|
16
17
|
import { SystemAdminAuthService } from "./SystemAdminAuth";
|
|
17
18
|
import type { ServerConfig } from "./types";
|
|
@@ -44,6 +45,9 @@ export declare class MindooDBServer {
|
|
|
44
45
|
private tenantManager;
|
|
45
46
|
private capabilityMatcher;
|
|
46
47
|
private systemAdminAuth;
|
|
48
|
+
private deviceDiscovery;
|
|
49
|
+
/** Peer sessions, replicators, cluster jobs and the audit log. */
|
|
50
|
+
private cluster;
|
|
47
51
|
private readonly staticDir;
|
|
48
52
|
private serverConfig;
|
|
49
53
|
private configPath;
|
|
@@ -68,6 +72,17 @@ export declare class MindooDBServer {
|
|
|
68
72
|
getApp(): express.Application;
|
|
69
73
|
getTenantManager(): TenantManager;
|
|
70
74
|
getSystemAdminAuth(): SystemAdminAuthService;
|
|
75
|
+
getClusterManager(): ClusterManager;
|
|
76
|
+
/**
|
|
77
|
+
* Begin replicating with every trusted server that has a `url`.
|
|
78
|
+
*
|
|
79
|
+
* Separate from the constructor so a server can serve the peer and cluster
|
|
80
|
+
* endpoints — answering handshakes, status and admin actions — without
|
|
81
|
+
* dialling out itself. That is what `--auto-sync` toggles, and it is what
|
|
82
|
+
* makes a passive mirror or a test harness possible.
|
|
83
|
+
*/
|
|
84
|
+
startCluster(): void;
|
|
85
|
+
stopCluster(): Promise<void>;
|
|
71
86
|
getServerConfig(): ServerConfig;
|
|
72
87
|
getConfigPath(): string;
|
|
73
88
|
/**
|
|
@@ -124,8 +139,18 @@ export declare class MindooDBServer {
|
|
|
124
139
|
* JWT-based middleware for /system/* routes (excluding /system/auth/*).
|
|
125
140
|
* Extracts and validates the bearer token, then checks capabilities
|
|
126
141
|
* for the current (method, path, username, publicsignkey).
|
|
142
|
+
*
|
|
143
|
+
* `DELETE /system/tenants/:tenantId` is also allowed when the JWT signing
|
|
144
|
+
* key is that tenant's registered `adminSigningPublicKey` (own-tenant
|
|
145
|
+
* delete). Sub-resources and other tenants stay capability-gated.
|
|
127
146
|
*/
|
|
128
147
|
private systemAdminMiddleware;
|
|
148
|
+
/**
|
|
149
|
+
* Owner bypass for deleting the caller's own tenant. Matches only
|
|
150
|
+
* `DELETE /system/tenants/:tenantId` (no sub-resource) and requires the
|
|
151
|
+
* JWT public key to equal that tenant's stored admin signing key.
|
|
152
|
+
*/
|
|
153
|
+
private isOwnTenantDeleteAuthorized;
|
|
129
154
|
private tenantMiddleware;
|
|
130
155
|
/**
|
|
131
156
|
* Wire up all /system/* routes. Auth endpoints sit outside the JWT
|
|
@@ -237,6 +262,8 @@ export declare class MindooDBServer {
|
|
|
237
262
|
private getClientIpForRateLimit;
|
|
238
263
|
private validateDbId;
|
|
239
264
|
private formatTenantNotFoundOnServerError;
|
|
265
|
+
private handleDeviceChallenge;
|
|
266
|
+
private handleDeviceDiscover;
|
|
240
267
|
private handleChallenge;
|
|
241
268
|
private handleAuthenticate;
|
|
242
269
|
private handleFindNewEntries;
|
|
@@ -295,7 +322,6 @@ export declare class MindooDBServer {
|
|
|
295
322
|
private handlePlanDocumentMaterialization;
|
|
296
323
|
private handlePlanDocumentMaterializationBatch;
|
|
297
324
|
private handlePlanAttachmentReadByWalkingMetadata;
|
|
298
|
-
private handleTriggerSync;
|
|
299
325
|
/**
|
|
300
326
|
* Derive the StoreKind from the request path. Both "docs" and
|
|
301
327
|
* "attachments" share the same handler implementations; the store kind
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MindooDBServer.d.ts","sourceRoot":"","sources":["../../../src/node/server/MindooDBServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,OAAoD,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"MindooDBServer.d.ts","sourceRoot":"","sources":["../../../src/node/server/MindooDBServer.ts"],"names":[],"mappings":"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"}
|