mindoodb 0.0.2 → 0.0.4
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 +1001 -0
- package/README.md +89 -28
- package/dist/__mocks__/expo-standard-web-crypto.d.ts +10 -0
- package/dist/__mocks__/expo-standard-web-crypto.d.ts.map +1 -0
- package/dist/__mocks__/expo-standard-web-crypto.js +22 -0
- package/dist/__mocks__/expo-standard-web-crypto.js.map +1 -0
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.d.ts +8 -0
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.d.ts.map +1 -0
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.js +16 -0
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.js.map +1 -0
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.d.ts +1 -1
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.d.ts.map +1 -1
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.js +2 -2
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.js.map +1 -1
- 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 +152 -5
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.d.ts +17 -2
- package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.js +129 -0
- package/dist/appendonlystores/network/HttpTransport.js.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +22 -2
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +110 -0
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -1
- package/dist/appendonlystores/network/index.d.ts +1 -1
- package/dist/appendonlystores/network/index.d.ts.map +1 -1
- package/dist/appendonlystores/network/index.js.map +1 -1
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts +65 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts.map +1 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js +741 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js.map +1 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStoreFactory.d.ts +25 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStoreFactory.d.ts.map +1 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStoreFactory.js +41 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStoreFactory.js.map +1 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts +21 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts.map +1 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.js +106 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.js.map +1 -0
- package/dist/browser/index.d.ts +8 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +21 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/core/BaseMindooDB.d.ts +115 -13
- package/dist/core/BaseMindooDB.d.ts.map +1 -1
- package/dist/core/BaseMindooDB.js +1232 -269
- package/dist/core/BaseMindooDB.js.map +1 -1
- package/dist/core/BaseMindooTenant.d.ts +69 -6
- package/dist/core/BaseMindooTenant.d.ts.map +1 -1
- package/dist/core/BaseMindooTenant.js +302 -109
- package/dist/core/BaseMindooTenant.js.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.d.ts +13 -10
- package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.js +144 -27
- package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
- package/dist/core/BaseMindooTenantFactory.d.ts +27 -29
- package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantFactory.js +185 -112
- package/dist/core/BaseMindooTenantFactory.js.map +1 -1
- package/dist/core/MindooDBServerAdmin.d.ts +238 -0
- package/dist/core/MindooDBServerAdmin.d.ts.map +1 -0
- package/dist/core/MindooDBServerAdmin.js +345 -0
- package/dist/core/MindooDBServerAdmin.js.map +1 -0
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.d.ts +68 -0
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +1 -0
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.js +659 -0
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.js.map +1 -0
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts +45 -3
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts.map +1 -1
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.js +184 -23
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.js.map +1 -1
- package/dist/core/appendonlystores/MaterializationPlanner.d.ts +49 -0
- package/dist/core/appendonlystores/MaterializationPlanner.d.ts.map +1 -0
- package/dist/core/appendonlystores/MaterializationPlanner.js +325 -0
- package/dist/core/appendonlystores/MaterializationPlanner.js.map +1 -0
- package/dist/core/appendonlystores/bloom.d.ts +85 -0
- package/dist/core/appendonlystores/bloom.d.ts.map +1 -0
- package/dist/core/appendonlystores/bloom.js +228 -0
- package/dist/core/appendonlystores/bloom.js.map +1 -0
- package/dist/core/appendonlystores/network/NetworkTransport.d.ts +37 -2
- package/dist/core/appendonlystores/network/NetworkTransport.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/types.d.ts +12 -0
- package/dist/core/appendonlystores/network/types.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/types.js.map +1 -1
- package/dist/core/appendonlystores/types.d.ts +206 -0
- package/dist/core/appendonlystores/types.d.ts.map +1 -1
- package/dist/core/automerge-adapter.d.ts +15 -0
- package/dist/core/automerge-adapter.d.ts.map +1 -0
- package/dist/core/automerge-adapter.js +73 -0
- package/dist/core/automerge-adapter.js.map +1 -0
- package/dist/core/cache/CacheManager.d.ts +75 -0
- package/dist/core/cache/CacheManager.d.ts.map +1 -0
- package/dist/core/cache/CacheManager.js +101 -0
- package/dist/core/cache/CacheManager.js.map +1 -0
- package/dist/core/cache/EncryptedLocalCacheStore.d.ts +41 -0
- package/dist/core/cache/EncryptedLocalCacheStore.d.ts.map +1 -0
- package/dist/core/cache/EncryptedLocalCacheStore.js +120 -0
- package/dist/core/cache/EncryptedLocalCacheStore.js.map +1 -0
- package/dist/core/cache/LocalCacheStore.d.ts +50 -0
- package/dist/core/cache/LocalCacheStore.d.ts.map +1 -0
- package/dist/core/cache/LocalCacheStore.js +39 -0
- package/dist/core/cache/LocalCacheStore.js.map +1 -0
- package/dist/core/crypto/pbkdf2Iterations.d.ts +12 -0
- package/dist/core/crypto/pbkdf2Iterations.d.ts.map +1 -0
- package/dist/core/crypto/pbkdf2Iterations.js +55 -0
- package/dist/core/crypto/pbkdf2Iterations.js.map +1 -0
- package/dist/core/crypto/privateKeyEncryption.d.ts +5 -0
- package/dist/core/crypto/privateKeyEncryption.d.ts.map +1 -0
- package/dist/core/crypto/privateKeyEncryption.js +87 -0
- package/dist/core/crypto/privateKeyEncryption.js.map +1 -0
- package/dist/core/index.d.ts +18 -6
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +42 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts +4 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js +39 -11
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js.map +1 -1
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts +1 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js +3 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualView.d.ts +43 -0
- package/dist/core/indexing/virtualviews/VirtualView.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualView.js +173 -0
- package/dist/core/indexing/virtualviews/VirtualView.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts +7 -0
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js +28 -0
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js.map +1 -1
- package/dist/core/keys/KeyBag.d.ts +56 -12
- package/dist/core/keys/KeyBag.d.ts.map +1 -1
- package/dist/core/keys/KeyBag.js +156 -70
- package/dist/core/keys/KeyBag.js.map +1 -1
- package/dist/core/keys/KeyContext.d.ts +4 -0
- package/dist/core/keys/KeyContext.d.ts.map +1 -0
- package/dist/core/keys/KeyContext.js +17 -0
- package/dist/core/keys/KeyContext.js.map +1 -0
- package/dist/core/types.d.ts +512 -60
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +9 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/uri/MindooURI.d.ts +58 -0
- package/dist/core/uri/MindooURI.d.ts.map +1 -0
- package/dist/core/uri/MindooURI.js +169 -0
- package/dist/core/uri/MindooURI.js.map +1 -0
- package/dist/core/userid/index.d.ts +0 -10
- package/dist/core/userid/index.d.ts.map +1 -1
- package/dist/core/utils/idGeneration.d.ts.map +1 -1
- package/dist/core/utils/idGeneration.js +37 -3
- package/dist/core/utils/idGeneration.js.map +1 -1
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts +544 -0
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +1 -0
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js +1358 -0
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js.map +1 -0
- package/dist/node/attachments/writeAttachmentToFile.d.ts +15 -0
- package/dist/node/attachments/writeAttachmentToFile.d.ts.map +1 -0
- package/dist/node/attachments/writeAttachmentToFile.js +73 -0
- package/dist/node/attachments/writeAttachmentToFile.js.map +1 -0
- package/dist/node/cache/FileSystemLocalCacheStore.d.ts +17 -0
- package/dist/node/cache/FileSystemLocalCacheStore.d.ts.map +1 -0
- package/dist/node/cache/FileSystemLocalCacheStore.js +128 -0
- package/dist/node/cache/FileSystemLocalCacheStore.js.map +1 -0
- package/dist/node/cli/change-identity-password.d.ts +7 -0
- package/dist/node/cli/change-identity-password.d.ts.map +1 -0
- package/dist/node/cli/change-identity-password.js +67 -0
- package/dist/node/cli/change-identity-password.js.map +1 -0
- package/dist/node/cli/cli-utils.d.ts +16 -0
- package/dist/node/cli/cli-utils.d.ts.map +1 -0
- package/dist/node/cli/cli-utils.js +113 -0
- package/dist/node/cli/cli-utils.js.map +1 -0
- package/dist/node/cli/identity-export-public.d.ts +4 -0
- package/dist/node/cli/identity-export-public.d.ts.map +1 -0
- package/dist/node/cli/identity-export-public.js +55 -0
- package/dist/node/cli/identity-export-public.js.map +1 -0
- package/dist/node/cli/identity-info.d.ts +4 -0
- package/dist/node/cli/identity-info.d.ts.map +1 -0
- package/dist/node/cli/identity-info.js +57 -0
- package/dist/node/cli/identity-info.js.map +1 -0
- package/dist/node/index.d.ts +2 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +8 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/server/CapabilityMatcher.d.ts +45 -0
- package/dist/node/server/CapabilityMatcher.d.ts.map +1 -0
- package/dist/node/server/CapabilityMatcher.js +117 -0
- package/dist/node/server/CapabilityMatcher.js.map +1 -0
- package/dist/node/server/MindooDBServer.d.ts +87 -0
- package/dist/node/server/MindooDBServer.d.ts.map +1 -0
- package/dist/node/server/MindooDBServer.js +1040 -0
- package/dist/node/server/MindooDBServer.js.map +1 -0
- package/dist/node/server/ServerSync.d.ts +41 -0
- package/dist/node/server/ServerSync.d.ts.map +1 -0
- package/dist/node/server/ServerSync.js +187 -0
- package/dist/node/server/ServerSync.js.map +1 -0
- package/dist/node/server/StoreFactory.d.ts +45 -0
- package/dist/node/server/StoreFactory.d.ts.map +1 -0
- package/dist/node/server/StoreFactory.js +89 -0
- package/dist/node/server/StoreFactory.js.map +1 -0
- package/dist/node/server/SystemAdminAuth.d.ts +65 -0
- package/dist/node/server/SystemAdminAuth.d.ts.map +1 -0
- package/dist/node/server/SystemAdminAuth.js +200 -0
- package/dist/node/server/SystemAdminAuth.js.map +1 -0
- package/dist/node/server/SystemIpAllowlist.d.ts +21 -0
- package/dist/node/server/SystemIpAllowlist.d.ts.map +1 -0
- package/dist/node/server/SystemIpAllowlist.js +210 -0
- package/dist/node/server/SystemIpAllowlist.js.map +1 -0
- package/dist/node/server/TenantManager.d.ts +85 -0
- package/dist/node/server/TenantManager.d.ts.map +1 -0
- package/dist/node/server/TenantManager.js +493 -0
- package/dist/node/server/TenantManager.js.map +1 -0
- package/dist/node/server/add-to-network.d.ts +20 -0
- package/dist/node/server/add-to-network.d.ts.map +1 -0
- package/dist/node/server/add-to-network.js +275 -0
- package/dist/node/server/add-to-network.js.map +1 -0
- package/dist/node/server/config.d.ts +51 -0
- package/dist/node/server/config.d.ts.map +1 -0
- package/dist/node/server/config.js +218 -0
- package/dist/node/server/config.js.map +1 -0
- package/dist/node/server/resolveServerPassword.d.ts +7 -0
- package/dist/node/server/resolveServerPassword.d.ts.map +1 -0
- package/dist/node/server/resolveServerPassword.js +25 -0
- package/dist/node/server/resolveServerPassword.js.map +1 -0
- package/dist/node/server/server.d.ts +22 -0
- package/dist/node/server/server.d.ts.map +1 -0
- package/dist/node/server/server.js +225 -0
- package/dist/node/server/server.js.map +1 -0
- package/dist/node/server/serverinit.d.ts +21 -0
- package/dist/node/server/serverinit.d.ts.map +1 -0
- package/dist/node/server/serverinit.js +317 -0
- package/dist/node/server/serverinit.js.map +1 -0
- package/dist/node/server/types.d.ts +162 -0
- package/dist/node/server/types.d.ts.map +1 -0
- package/dist/node/server/types.js +24 -0
- package/dist/node/server/types.js.map +1 -0
- package/dist/node/server/validation.d.ts +47 -0
- package/dist/node/server/validation.d.ts.map +1 -0
- package/dist/node/server/validation.js +114 -0
- package/dist/node/server/validation.js.map +1 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts +48 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts.map +1 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.js +113 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.js.map +1 -0
- package/dist/reactnative/crypto/AESAdapter.d.ts +18 -0
- package/dist/reactnative/crypto/AESAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/AESAdapter.js +112 -0
- package/dist/reactnative/crypto/AESAdapter.js.map +1 -0
- package/dist/reactnative/crypto/Ed25519Adapter.d.ts +34 -0
- package/dist/reactnative/crypto/Ed25519Adapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/Ed25519Adapter.js +386 -0
- package/dist/reactnative/crypto/Ed25519Adapter.js.map +1 -0
- package/dist/reactnative/crypto/ExpoGoCryptoAdapter.d.ts +23 -0
- package/dist/reactnative/crypto/ExpoGoCryptoAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/ExpoGoCryptoAdapter.js +51 -0
- package/dist/reactnative/crypto/ExpoGoCryptoAdapter.js.map +1 -0
- package/dist/reactnative/crypto/HMACAdapter.d.ts +13 -0
- package/dist/reactnative/crypto/HMACAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/HMACAdapter.js +50 -0
- package/dist/reactnative/crypto/HMACAdapter.js.map +1 -0
- package/dist/reactnative/crypto/KeyFormatConverter.d.ts +21 -0
- package/dist/reactnative/crypto/KeyFormatConverter.d.ts.map +1 -0
- package/dist/reactnative/crypto/KeyFormatConverter.js +72 -0
- package/dist/reactnative/crypto/KeyFormatConverter.js.map +1 -0
- package/dist/reactnative/crypto/PBKDF2Adapter.d.ts +19 -0
- package/dist/reactnative/crypto/PBKDF2Adapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/PBKDF2Adapter.js +67 -0
- package/dist/reactnative/crypto/PBKDF2Adapter.js.map +1 -0
- package/dist/reactnative/crypto/QuickCryptoAdapter.d.ts +37 -0
- package/dist/reactnative/crypto/QuickCryptoAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/QuickCryptoAdapter.js +72 -0
- package/dist/reactnative/crypto/QuickCryptoAdapter.js.map +1 -0
- package/dist/reactnative/crypto/RSAAdapter.d.ts +38 -0
- package/dist/reactnative/crypto/RSAAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/RSAAdapter.js +184 -0
- package/dist/reactnative/crypto/RSAAdapter.js.map +1 -0
- package/dist/reactnative/crypto/ReactNativeCryptoAdapter.d.ts +33 -0
- package/dist/reactnative/crypto/ReactNativeCryptoAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/ReactNativeCryptoAdapter.js +61 -0
- package/dist/reactnative/crypto/ReactNativeCryptoAdapter.js.map +1 -0
- package/dist/reactnative/crypto/SHA256Adapter.d.ts +9 -0
- package/dist/reactnative/crypto/SHA256Adapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/SHA256Adapter.js +29 -0
- package/dist/reactnative/crypto/SHA256Adapter.js.map +1 -0
- package/dist/reactnative/crypto/SubtleCryptoPolyfill.d.ts +63 -0
- package/dist/reactnative/crypto/SubtleCryptoPolyfill.d.ts.map +1 -0
- package/dist/reactnative/crypto/SubtleCryptoPolyfill.js +350 -0
- package/dist/reactnative/crypto/SubtleCryptoPolyfill.js.map +1 -0
- package/dist/reactnative/index.d.ts +9 -0
- package/dist/reactnative/index.d.ts.map +1 -0
- package/dist/reactnative/index.js +41 -0
- package/dist/reactnative/index.js.map +1 -0
- package/package.json +63 -7
- package/patches/PATCHES.md +111 -0
- package/patches/react-native+0.76.9.patch +34 -0
- package/patches/react-native-quick-crypto+1.0.7.patch +42 -0
- package/scripts/cli.js +21 -0
- package/scripts/setup-react-native.js +228 -0
- package/templates/reactnative/App.js +252 -0
- package/templates/reactnative/app.json +29 -0
- package/templates/reactnative/babel.config.js +6 -0
- package/templates/reactnative/index.js +26 -0
- package/templates/reactnative/metro.config.snippet.js +39 -0
- package/templates/reactnative/mindoodb-polyfills.js +116 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MindooDBServerAdmin — client for MindooDB server `/system/*` endpoints.
|
|
3
|
+
*
|
|
4
|
+
* Platform-agnostic: pass a {@link CryptoAdapter} (`NodeCryptoAdapter`,
|
|
5
|
+
* `createCryptoAdapter()` in browser, or React Native adapter). Uses `fetch`,
|
|
6
|
+
* Web Crypto via the adapter, and `atob`/`btoa` for base64 (no Node `Buffer`).
|
|
7
|
+
*/
|
|
8
|
+
import type { CryptoAdapter } from "./crypto/CryptoAdapter";
|
|
9
|
+
import type { PrivateUserId } from "./userid";
|
|
10
|
+
/**
|
|
11
|
+
* Connection and authentication options for {@link MindooDBServerAdmin}.
|
|
12
|
+
*/
|
|
13
|
+
export interface MindooDBServerAdminOptions {
|
|
14
|
+
serverUrl: string;
|
|
15
|
+
systemAdminUser: PrivateUserId;
|
|
16
|
+
systemAdminPassword: string;
|
|
17
|
+
/** Platform crypto (e.g. `NodeCryptoAdapter`, browser `createCryptoAdapter()`, RN adapter). */
|
|
18
|
+
cryptoAdapter: CryptoAdapter;
|
|
19
|
+
}
|
|
20
|
+
interface TrustedServer {
|
|
21
|
+
name: string;
|
|
22
|
+
signingPublicKey: string;
|
|
23
|
+
encryptionPublicKey: string;
|
|
24
|
+
}
|
|
25
|
+
interface SyncServerConfig {
|
|
26
|
+
name: string;
|
|
27
|
+
url: string;
|
|
28
|
+
syncIntervalMs?: number;
|
|
29
|
+
databases: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* One system-admin identity as stored in server `config.json`.
|
|
33
|
+
*
|
|
34
|
+
* A principal is uniquely identified by the combination of `username` and
|
|
35
|
+
* `publicsignkey`.
|
|
36
|
+
*/
|
|
37
|
+
export interface SystemAdminPrincipal {
|
|
38
|
+
username: string;
|
|
39
|
+
publicsignkey: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Runtime server config returned by `GET /system/config`.
|
|
43
|
+
*/
|
|
44
|
+
export interface ServerConfig {
|
|
45
|
+
capabilities: Record<string, SystemAdminPrincipal[]>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Metadata for one historical `config.json` backup.
|
|
49
|
+
*/
|
|
50
|
+
export interface ConfigBackupInfo {
|
|
51
|
+
file: string;
|
|
52
|
+
createdAt: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Response body for reading one historical config backup.
|
|
56
|
+
*/
|
|
57
|
+
export interface ConfigBackupResponse {
|
|
58
|
+
file: string;
|
|
59
|
+
config: ServerConfig;
|
|
60
|
+
}
|
|
61
|
+
interface RegisterTenantBody {
|
|
62
|
+
adminSigningPublicKey: string;
|
|
63
|
+
adminEncryptionPublicKey: string;
|
|
64
|
+
adminUsername?: string;
|
|
65
|
+
publicInfosKey?: string;
|
|
66
|
+
defaultStoreType?: "inmemory" | "file";
|
|
67
|
+
users?: Array<{
|
|
68
|
+
username: string;
|
|
69
|
+
signingPublicKey: string;
|
|
70
|
+
encryptionPublicKey: string;
|
|
71
|
+
}>;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* High-level client for authenticated access to MindooDB server `/system/*`
|
|
75
|
+
* endpoints.
|
|
76
|
+
*
|
|
77
|
+
* This wrapper performs the Ed25519 challenge/response flow automatically,
|
|
78
|
+
* caches the short-lived JWT, and exposes ergonomic methods for common server
|
|
79
|
+
* administration tasks such as tenant registration, runtime config updates,
|
|
80
|
+
* and delegated system-admin management.
|
|
81
|
+
*/
|
|
82
|
+
export declare class MindooDBServerAdmin {
|
|
83
|
+
private baseUrl;
|
|
84
|
+
private adminUser;
|
|
85
|
+
private adminPassword;
|
|
86
|
+
private cryptoAdapter;
|
|
87
|
+
private cachedToken;
|
|
88
|
+
private tokenExpiresAt;
|
|
89
|
+
/**
|
|
90
|
+
* Create a new system-admin API client for one MindooDB server.
|
|
91
|
+
*/
|
|
92
|
+
constructor(options: MindooDBServerAdminOptions);
|
|
93
|
+
/**
|
|
94
|
+
* List all tenant IDs currently registered on the server.
|
|
95
|
+
*/
|
|
96
|
+
listTenants(): Promise<string[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Create a new tenant on the server.
|
|
99
|
+
*
|
|
100
|
+
* The caller must already be authorized for `POST /system/tenants/:tenantId`
|
|
101
|
+
* by the server's runtime config.
|
|
102
|
+
*/
|
|
103
|
+
registerTenant(tenantId: string, body: RegisterTenantBody): Promise<{
|
|
104
|
+
success: boolean;
|
|
105
|
+
tenantId: string;
|
|
106
|
+
message?: string;
|
|
107
|
+
}>;
|
|
108
|
+
/**
|
|
109
|
+
* Update server-side metadata for an existing tenant.
|
|
110
|
+
*/
|
|
111
|
+
updateTenant(tenantId: string, updates: Record<string, unknown>): Promise<{
|
|
112
|
+
success: boolean;
|
|
113
|
+
message?: string;
|
|
114
|
+
}>;
|
|
115
|
+
/**
|
|
116
|
+
* Remove a tenant from the server.
|
|
117
|
+
*/
|
|
118
|
+
removeTenant(tenantId: string): Promise<{
|
|
119
|
+
success: boolean;
|
|
120
|
+
message?: string;
|
|
121
|
+
}>;
|
|
122
|
+
/**
|
|
123
|
+
* List globally trusted peer servers used for server-to-server sync.
|
|
124
|
+
*/
|
|
125
|
+
listTrustedServers(): Promise<TrustedServer[]>;
|
|
126
|
+
/**
|
|
127
|
+
* Add one globally trusted peer server.
|
|
128
|
+
*/
|
|
129
|
+
addTrustedServer(server: TrustedServer): Promise<{
|
|
130
|
+
success: boolean;
|
|
131
|
+
message?: string;
|
|
132
|
+
}>;
|
|
133
|
+
/**
|
|
134
|
+
* Remove one globally trusted peer server by name.
|
|
135
|
+
*/
|
|
136
|
+
removeTrustedServer(serverName: string): Promise<{
|
|
137
|
+
success: boolean;
|
|
138
|
+
message?: string;
|
|
139
|
+
}>;
|
|
140
|
+
/**
|
|
141
|
+
* List sync server targets configured for one tenant.
|
|
142
|
+
*/
|
|
143
|
+
listTenantSyncServers(tenantId: string): Promise<SyncServerConfig[]>;
|
|
144
|
+
/**
|
|
145
|
+
* Add one sync target for a tenant.
|
|
146
|
+
*/
|
|
147
|
+
addTenantSyncServer(tenantId: string, config: SyncServerConfig): Promise<{
|
|
148
|
+
success: boolean;
|
|
149
|
+
message?: string;
|
|
150
|
+
}>;
|
|
151
|
+
/**
|
|
152
|
+
* Remove one tenant-specific sync target.
|
|
153
|
+
*/
|
|
154
|
+
removeTenantSyncServer(tenantId: string, serverName: string): Promise<{
|
|
155
|
+
success: boolean;
|
|
156
|
+
message?: string;
|
|
157
|
+
}>;
|
|
158
|
+
/**
|
|
159
|
+
* Trigger an on-demand sync for one tenant.
|
|
160
|
+
*/
|
|
161
|
+
triggerTenantSync(tenantId: string): Promise<{
|
|
162
|
+
success: boolean;
|
|
163
|
+
message?: string;
|
|
164
|
+
}>;
|
|
165
|
+
/**
|
|
166
|
+
* Fetch the currently active runtime server config.
|
|
167
|
+
*/
|
|
168
|
+
getConfig(): Promise<ServerConfig>;
|
|
169
|
+
/**
|
|
170
|
+
* Replace the full runtime server config.
|
|
171
|
+
*
|
|
172
|
+
* The server remains the source of truth for validation, backup creation, and
|
|
173
|
+
* self-lockout protection.
|
|
174
|
+
*/
|
|
175
|
+
updateConfig(config: ServerConfig): Promise<{
|
|
176
|
+
success: boolean;
|
|
177
|
+
message?: string;
|
|
178
|
+
backupFile?: string;
|
|
179
|
+
}>;
|
|
180
|
+
/**
|
|
181
|
+
* List historical config backups created by prior runtime config updates.
|
|
182
|
+
*/
|
|
183
|
+
listConfigBackups(): Promise<ConfigBackupInfo[]>;
|
|
184
|
+
/**
|
|
185
|
+
* Read one historical config backup from the server.
|
|
186
|
+
*/
|
|
187
|
+
readConfigBackup(backupFile: string): Promise<ConfigBackupResponse>;
|
|
188
|
+
/**
|
|
189
|
+
* Read one historical config backup from the server.
|
|
190
|
+
*
|
|
191
|
+
* Alias for {@link readConfigBackup} kept for compatibility with earlier
|
|
192
|
+
* wrapper code.
|
|
193
|
+
*/
|
|
194
|
+
getConfigBackup(backupFile: string): Promise<ConfigBackupResponse>;
|
|
195
|
+
/**
|
|
196
|
+
* Return all capability rules that currently include the given principal.
|
|
197
|
+
*
|
|
198
|
+
* This is a client-side convenience method derived from `getConfig()`. It
|
|
199
|
+
* does not require a dedicated server endpoint.
|
|
200
|
+
*/
|
|
201
|
+
findSystemAdminAccess(principal: SystemAdminPrincipal): Promise<{
|
|
202
|
+
principal: SystemAdminPrincipal;
|
|
203
|
+
rules: string[];
|
|
204
|
+
}>;
|
|
205
|
+
/**
|
|
206
|
+
* Grant a principal access to one or more capability rules.
|
|
207
|
+
*
|
|
208
|
+
* Missing rules are created automatically. Existing principal entries are
|
|
209
|
+
* deduplicated by `username.toLowerCase()` + `publicsignkey`.
|
|
210
|
+
*/
|
|
211
|
+
grantSystemAdminAccess(principal: SystemAdminPrincipal, rules: string[]): Promise<{
|
|
212
|
+
success: boolean;
|
|
213
|
+
config: ServerConfig;
|
|
214
|
+
addedToRules: string[];
|
|
215
|
+
alreadyPresentRules: string[];
|
|
216
|
+
backupFile?: string;
|
|
217
|
+
}>;
|
|
218
|
+
/**
|
|
219
|
+
* Revoke a principal from selected capability rules, or from all rules when
|
|
220
|
+
* no `rules` filter is provided.
|
|
221
|
+
*/
|
|
222
|
+
revokeSystemAdminAccess(principal: SystemAdminPrincipal, options?: {
|
|
223
|
+
rules?: string[];
|
|
224
|
+
}): Promise<{
|
|
225
|
+
success: boolean;
|
|
226
|
+
config: ServerConfig;
|
|
227
|
+
removedFromRules: string[];
|
|
228
|
+
backupFile?: string;
|
|
229
|
+
}>;
|
|
230
|
+
private authenticatedRequest;
|
|
231
|
+
private ensureAuthenticated;
|
|
232
|
+
/**
|
|
233
|
+
* Decrypt a PBKDF2 + AES-GCM encrypted private key (same layout as BaseMindooTenant).
|
|
234
|
+
*/
|
|
235
|
+
private decryptPrivateKey;
|
|
236
|
+
}
|
|
237
|
+
export {};
|
|
238
|
+
//# sourceMappingURL=MindooDBServerAdmin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MindooDBServerAdmin.d.ts","sourceRoot":"","sources":["../../src/core/MindooDBServerAdmin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MindooDBServerAdmin — client for MindooDB server `/system/*` endpoints.
|
|
4
|
+
*
|
|
5
|
+
* Platform-agnostic: pass a {@link CryptoAdapter} (`NodeCryptoAdapter`,
|
|
6
|
+
* `createCryptoAdapter()` in browser, or React Native adapter). Uses `fetch`,
|
|
7
|
+
* Web Crypto via the adapter, and `atob`/`btoa` for base64 (no Node `Buffer`).
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.MindooDBServerAdmin = void 0;
|
|
11
|
+
const privateKeyEncryption_1 = require("./crypto/privateKeyEncryption");
|
|
12
|
+
function uint8ArrayToBase64(bytes) {
|
|
13
|
+
let binary = "";
|
|
14
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
15
|
+
binary += String.fromCharCode(bytes[i]);
|
|
16
|
+
}
|
|
17
|
+
return btoa(binary);
|
|
18
|
+
}
|
|
19
|
+
function normalizePrincipalKey(principal) {
|
|
20
|
+
return `${principal.username.toLowerCase()}\0${principal.publicsignkey}`;
|
|
21
|
+
}
|
|
22
|
+
function dedupePrincipals(principals) {
|
|
23
|
+
const seen = new Set();
|
|
24
|
+
const result = [];
|
|
25
|
+
for (const principal of principals) {
|
|
26
|
+
const key = normalizePrincipalKey(principal);
|
|
27
|
+
if (!seen.has(key)) {
|
|
28
|
+
seen.add(key);
|
|
29
|
+
result.push(principal);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
function cloneServerConfig(config) {
|
|
35
|
+
return {
|
|
36
|
+
capabilities: Object.fromEntries(Object.entries(config.capabilities).map(([rule, principals]) => [
|
|
37
|
+
rule,
|
|
38
|
+
principals.map((principal) => ({ ...principal })),
|
|
39
|
+
])),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* High-level client for authenticated access to MindooDB server `/system/*`
|
|
44
|
+
* endpoints.
|
|
45
|
+
*
|
|
46
|
+
* This wrapper performs the Ed25519 challenge/response flow automatically,
|
|
47
|
+
* caches the short-lived JWT, and exposes ergonomic methods for common server
|
|
48
|
+
* administration tasks such as tenant registration, runtime config updates,
|
|
49
|
+
* and delegated system-admin management.
|
|
50
|
+
*/
|
|
51
|
+
class MindooDBServerAdmin {
|
|
52
|
+
/**
|
|
53
|
+
* Create a new system-admin API client for one MindooDB server.
|
|
54
|
+
*/
|
|
55
|
+
constructor(options) {
|
|
56
|
+
this.cachedToken = null;
|
|
57
|
+
this.tokenExpiresAt = 0;
|
|
58
|
+
this.baseUrl = options.serverUrl.replace(/\/$/, "");
|
|
59
|
+
this.adminUser = options.systemAdminUser;
|
|
60
|
+
this.adminPassword = options.systemAdminPassword;
|
|
61
|
+
this.cryptoAdapter = options.cryptoAdapter;
|
|
62
|
+
}
|
|
63
|
+
// =========================================================================
|
|
64
|
+
// Tenant management
|
|
65
|
+
// =========================================================================
|
|
66
|
+
/**
|
|
67
|
+
* List all tenant IDs currently registered on the server.
|
|
68
|
+
*/
|
|
69
|
+
async listTenants() {
|
|
70
|
+
const res = await this.authenticatedRequest("GET", "/system/tenants");
|
|
71
|
+
return res.tenants;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create a new tenant on the server.
|
|
75
|
+
*
|
|
76
|
+
* The caller must already be authorized for `POST /system/tenants/:tenantId`
|
|
77
|
+
* by the server's runtime config.
|
|
78
|
+
*/
|
|
79
|
+
async registerTenant(tenantId, body) {
|
|
80
|
+
return await this.authenticatedRequest("POST", `/system/tenants/${encodeURIComponent(tenantId)}`, body);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Update server-side metadata for an existing tenant.
|
|
84
|
+
*/
|
|
85
|
+
async updateTenant(tenantId, updates) {
|
|
86
|
+
return await this.authenticatedRequest("PUT", `/system/tenants/${encodeURIComponent(tenantId)}`, updates);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Remove a tenant from the server.
|
|
90
|
+
*/
|
|
91
|
+
async removeTenant(tenantId) {
|
|
92
|
+
return await this.authenticatedRequest("DELETE", `/system/tenants/${encodeURIComponent(tenantId)}`);
|
|
93
|
+
}
|
|
94
|
+
// =========================================================================
|
|
95
|
+
// Trusted server management
|
|
96
|
+
// =========================================================================
|
|
97
|
+
/**
|
|
98
|
+
* List globally trusted peer servers used for server-to-server sync.
|
|
99
|
+
*/
|
|
100
|
+
async listTrustedServers() {
|
|
101
|
+
const res = await this.authenticatedRequest("GET", "/system/trusted-servers");
|
|
102
|
+
return res.servers;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Add one globally trusted peer server.
|
|
106
|
+
*/
|
|
107
|
+
async addTrustedServer(server) {
|
|
108
|
+
return await this.authenticatedRequest("POST", "/system/trusted-servers", server);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Remove one globally trusted peer server by name.
|
|
112
|
+
*/
|
|
113
|
+
async removeTrustedServer(serverName) {
|
|
114
|
+
return await this.authenticatedRequest("DELETE", `/system/trusted-servers/${encodeURIComponent(serverName)}`);
|
|
115
|
+
}
|
|
116
|
+
// =========================================================================
|
|
117
|
+
// Per-tenant sync server management
|
|
118
|
+
// =========================================================================
|
|
119
|
+
/**
|
|
120
|
+
* List sync server targets configured for one tenant.
|
|
121
|
+
*/
|
|
122
|
+
async listTenantSyncServers(tenantId) {
|
|
123
|
+
const res = await this.authenticatedRequest("GET", `/system/tenants/${encodeURIComponent(tenantId)}/sync-servers`);
|
|
124
|
+
return res.servers;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Add one sync target for a tenant.
|
|
128
|
+
*/
|
|
129
|
+
async addTenantSyncServer(tenantId, config) {
|
|
130
|
+
return await this.authenticatedRequest("POST", `/system/tenants/${encodeURIComponent(tenantId)}/sync-servers`, config);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Remove one tenant-specific sync target.
|
|
134
|
+
*/
|
|
135
|
+
async removeTenantSyncServer(tenantId, serverName) {
|
|
136
|
+
return await this.authenticatedRequest("DELETE", `/system/tenants/${encodeURIComponent(tenantId)}/sync-servers/${encodeURIComponent(serverName)}`);
|
|
137
|
+
}
|
|
138
|
+
// =========================================================================
|
|
139
|
+
// Trigger sync
|
|
140
|
+
// =========================================================================
|
|
141
|
+
/**
|
|
142
|
+
* Trigger an on-demand sync for one tenant.
|
|
143
|
+
*/
|
|
144
|
+
async triggerTenantSync(tenantId) {
|
|
145
|
+
return await this.authenticatedRequest("POST", `/system/tenants/${encodeURIComponent(tenantId)}/trigger-sync`);
|
|
146
|
+
}
|
|
147
|
+
// =========================================================================
|
|
148
|
+
// Runtime config management
|
|
149
|
+
// =========================================================================
|
|
150
|
+
/**
|
|
151
|
+
* Fetch the currently active runtime server config.
|
|
152
|
+
*/
|
|
153
|
+
async getConfig() {
|
|
154
|
+
return await this.authenticatedRequest("GET", "/system/config");
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Replace the full runtime server config.
|
|
158
|
+
*
|
|
159
|
+
* The server remains the source of truth for validation, backup creation, and
|
|
160
|
+
* self-lockout protection.
|
|
161
|
+
*/
|
|
162
|
+
async updateConfig(config) {
|
|
163
|
+
return await this.authenticatedRequest("PUT", "/system/config", config);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* List historical config backups created by prior runtime config updates.
|
|
167
|
+
*/
|
|
168
|
+
async listConfigBackups() {
|
|
169
|
+
const res = await this.authenticatedRequest("GET", "/system/config/backups");
|
|
170
|
+
return res.backups;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Read one historical config backup from the server.
|
|
174
|
+
*/
|
|
175
|
+
async readConfigBackup(backupFile) {
|
|
176
|
+
return await this.authenticatedRequest("GET", `/system/config/backups/${encodeURIComponent(backupFile)}`);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Read one historical config backup from the server.
|
|
180
|
+
*
|
|
181
|
+
* Alias for {@link readConfigBackup} kept for compatibility with earlier
|
|
182
|
+
* wrapper code.
|
|
183
|
+
*/
|
|
184
|
+
async getConfigBackup(backupFile) {
|
|
185
|
+
return await this.readConfigBackup(backupFile);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Return all capability rules that currently include the given principal.
|
|
189
|
+
*
|
|
190
|
+
* This is a client-side convenience method derived from `getConfig()`. It
|
|
191
|
+
* does not require a dedicated server endpoint.
|
|
192
|
+
*/
|
|
193
|
+
async findSystemAdminAccess(principal) {
|
|
194
|
+
const config = await this.getConfig();
|
|
195
|
+
const principalKey = normalizePrincipalKey(principal);
|
|
196
|
+
const rules = Object.entries(config.capabilities)
|
|
197
|
+
.filter(([, principals]) => principals.some((existing) => normalizePrincipalKey(existing) === principalKey))
|
|
198
|
+
.map(([rule]) => rule)
|
|
199
|
+
.sort();
|
|
200
|
+
return {
|
|
201
|
+
principal: { ...principal },
|
|
202
|
+
rules,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Grant a principal access to one or more capability rules.
|
|
207
|
+
*
|
|
208
|
+
* Missing rules are created automatically. Existing principal entries are
|
|
209
|
+
* deduplicated by `username.toLowerCase()` + `publicsignkey`.
|
|
210
|
+
*/
|
|
211
|
+
async grantSystemAdminAccess(principal, rules) {
|
|
212
|
+
if (rules.length === 0) {
|
|
213
|
+
throw new Error("grantSystemAdminAccess requires at least one rule");
|
|
214
|
+
}
|
|
215
|
+
const config = await this.getConfig();
|
|
216
|
+
const nextConfig = cloneServerConfig(config);
|
|
217
|
+
const principalKey = normalizePrincipalKey(principal);
|
|
218
|
+
const addedToRules = [];
|
|
219
|
+
const alreadyPresentRules = [];
|
|
220
|
+
for (const rule of rules) {
|
|
221
|
+
const existing = nextConfig.capabilities[rule] ?? [];
|
|
222
|
+
const alreadyPresent = existing.some((candidate) => normalizePrincipalKey(candidate) === principalKey);
|
|
223
|
+
if (alreadyPresent) {
|
|
224
|
+
alreadyPresentRules.push(rule);
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
nextConfig.capabilities[rule] = dedupePrincipals([
|
|
228
|
+
...existing,
|
|
229
|
+
{ ...principal },
|
|
230
|
+
]);
|
|
231
|
+
addedToRules.push(rule);
|
|
232
|
+
}
|
|
233
|
+
const result = await this.updateConfig(nextConfig);
|
|
234
|
+
return {
|
|
235
|
+
success: result.success,
|
|
236
|
+
config: nextConfig,
|
|
237
|
+
addedToRules,
|
|
238
|
+
alreadyPresentRules,
|
|
239
|
+
backupFile: result.backupFile,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Revoke a principal from selected capability rules, or from all rules when
|
|
244
|
+
* no `rules` filter is provided.
|
|
245
|
+
*/
|
|
246
|
+
async revokeSystemAdminAccess(principal, options) {
|
|
247
|
+
const config = await this.getConfig();
|
|
248
|
+
const nextConfig = cloneServerConfig(config);
|
|
249
|
+
const principalKey = normalizePrincipalKey(principal);
|
|
250
|
+
const targetRules = options?.rules ?? Object.keys(nextConfig.capabilities);
|
|
251
|
+
const removedFromRules = [];
|
|
252
|
+
for (const rule of targetRules) {
|
|
253
|
+
const existing = nextConfig.capabilities[rule];
|
|
254
|
+
if (!existing) {
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
const filtered = existing.filter((candidate) => normalizePrincipalKey(candidate) !== principalKey);
|
|
258
|
+
if (filtered.length === existing.length) {
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
removedFromRules.push(rule);
|
|
262
|
+
if (filtered.length === 0) {
|
|
263
|
+
delete nextConfig.capabilities[rule];
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
nextConfig.capabilities[rule] = filtered;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
const result = await this.updateConfig(nextConfig);
|
|
270
|
+
return {
|
|
271
|
+
success: result.success,
|
|
272
|
+
config: nextConfig,
|
|
273
|
+
removedFromRules,
|
|
274
|
+
backupFile: result.backupFile,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
// =========================================================================
|
|
278
|
+
// Internal: auth + request
|
|
279
|
+
// =========================================================================
|
|
280
|
+
async authenticatedRequest(method, path, body) {
|
|
281
|
+
const token = await this.ensureAuthenticated();
|
|
282
|
+
const headers = {
|
|
283
|
+
"Content-Type": "application/json",
|
|
284
|
+
Authorization: `Bearer ${token}`,
|
|
285
|
+
};
|
|
286
|
+
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
287
|
+
method,
|
|
288
|
+
headers,
|
|
289
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
290
|
+
});
|
|
291
|
+
if (!response.ok) {
|
|
292
|
+
const errorBody = await response.text();
|
|
293
|
+
throw new Error(`MindooDBServerAdmin: ${method} ${path} failed (HTTP ${response.status}): ${errorBody}`);
|
|
294
|
+
}
|
|
295
|
+
return response.json();
|
|
296
|
+
}
|
|
297
|
+
async ensureAuthenticated() {
|
|
298
|
+
if (this.cachedToken && Date.now() < this.tokenExpiresAt - 60000) {
|
|
299
|
+
return this.cachedToken;
|
|
300
|
+
}
|
|
301
|
+
const subtle = this.cryptoAdapter.getSubtle();
|
|
302
|
+
const signingKeyBuffer = await this.decryptPrivateKey(this.adminUser.userSigningKeyPair.privateKey, this.adminPassword, "signing");
|
|
303
|
+
const signingKey = await subtle.importKey("pkcs8", signingKeyBuffer, { name: "Ed25519" }, false, ["sign"]);
|
|
304
|
+
const challengeRes = await fetch(`${this.baseUrl}/system/auth/challenge`, {
|
|
305
|
+
method: "POST",
|
|
306
|
+
headers: { "Content-Type": "application/json" },
|
|
307
|
+
body: JSON.stringify({
|
|
308
|
+
username: this.adminUser.username,
|
|
309
|
+
publicsignkey: this.adminUser.userSigningKeyPair.publicKey,
|
|
310
|
+
}),
|
|
311
|
+
});
|
|
312
|
+
if (!challengeRes.ok) {
|
|
313
|
+
const errorBody = await challengeRes.text();
|
|
314
|
+
throw new Error(`MindooDBServerAdmin: challenge request failed (HTTP ${challengeRes.status}): ${errorBody}`);
|
|
315
|
+
}
|
|
316
|
+
const { challenge } = (await challengeRes.json());
|
|
317
|
+
const messageBytes = new TextEncoder().encode(challenge);
|
|
318
|
+
const signatureBuffer = await subtle.sign({ name: "Ed25519" }, signingKey, messageBytes);
|
|
319
|
+
const signatureBase64 = uint8ArrayToBase64(new Uint8Array(signatureBuffer));
|
|
320
|
+
const authRes = await fetch(`${this.baseUrl}/system/auth/authenticate`, {
|
|
321
|
+
method: "POST",
|
|
322
|
+
headers: { "Content-Type": "application/json" },
|
|
323
|
+
body: JSON.stringify({ challenge, signature: signatureBase64 }),
|
|
324
|
+
});
|
|
325
|
+
if (!authRes.ok) {
|
|
326
|
+
const errorBody = await authRes.text();
|
|
327
|
+
throw new Error(`MindooDBServerAdmin: authenticate request failed (HTTP ${authRes.status}): ${errorBody}`);
|
|
328
|
+
}
|
|
329
|
+
const result = (await authRes.json());
|
|
330
|
+
if (!result.success || !result.token) {
|
|
331
|
+
throw new Error(`MindooDBServerAdmin: authentication failed: ${result.error || "unknown error"}`);
|
|
332
|
+
}
|
|
333
|
+
this.cachedToken = result.token;
|
|
334
|
+
this.tokenExpiresAt = Date.now() + 55 * 60 * 1000;
|
|
335
|
+
return result.token;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Decrypt a PBKDF2 + AES-GCM encrypted private key (same layout as BaseMindooTenant).
|
|
339
|
+
*/
|
|
340
|
+
async decryptPrivateKey(encrypted, password, saltString) {
|
|
341
|
+
return (0, privateKeyEncryption_1.decryptPrivateKey)(this.cryptoAdapter, encrypted, password, saltString);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
exports.MindooDBServerAdmin = MindooDBServerAdmin;
|
|
345
|
+
//# sourceMappingURL=MindooDBServerAdmin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MindooDBServerAdmin.js","sourceRoot":"","sources":["../../src/core/MindooDBServerAdmin.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAGH,wEAAmG;AA2EnG,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,qBAAqB,CAAC,SAA+B;IAC5D,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAkC;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAoB;IAC7C,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;YAC9D,IAAI;YACJ,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;SAClD,CAAC,CACH;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAa,mBAAmB;IAS9B;;OAEG;IACH,YAAY,OAAmC;QANvC,gBAAW,GAAkB,IAAI,CAAC;QAClC,mBAAc,GAAW,CAAC,CAAC;QAMjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAC7C,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QACtE,OAAQ,GAA6B,CAAC,OAAO,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,IAAwB;QAExB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CACpC,MAAM,EACN,mBAAmB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EACjD,IAAI,CACL,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,QAAgB,EAChB,OAAgC;QAEhC,OAAO,MAAM,IAAI,CAAC,oBAAoB,CACpC,KAAK,EACL,mBAAmB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EACjD,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,QAAgB;QAEhB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CACpC,QAAQ,EACR,mBAAmB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAClD,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,4BAA4B;IAC5B,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;QAC9E,OAAQ,GAAoC,CAAC,OAAO,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAqB;QAC1C,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,yBAAyB,EAAE,MAAM,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,UAAkB;QAC1C,OAAO,MAAM,IAAI,CAAC,oBAAoB,CACpC,QAAQ,EACR,2BAA2B,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAC5D,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,oCAAoC;IACpC,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,QAAgB;QAC1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,oBAAoB,CACzC,KAAK,EACL,mBAAmB,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAC/D,CAAC;QACF,OAAQ,GAAuC,CAAC,OAAO,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACvB,QAAgB,EAChB,MAAwB;QAExB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CACpC,MAAM,EACN,mBAAmB,kBAAkB,CAAC,QAAQ,CAAC,eAAe,EAC9D,MAAM,CACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAC1B,QAAgB,EAChB,UAAkB;QAElB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CACpC,QAAQ,EACR,mBAAmB,kBAAkB,CAAC,QAAQ,CAAC,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,EAAE,CACjG,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,eAAe;IACf,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,QAAgB;QAEhB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CACpC,MAAM,EACN,mBAAmB,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAC/D,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,4BAA4B;IAC5B,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAClE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAChB,MAAoB;QAEpB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;QAC7E,OAAQ,GAAuC,CAAC,OAAO,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QACvC,OAAO,MAAM,IAAI,CAAC,oBAAoB,CACpC,KAAK,EACL,0BAA0B,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAC3D,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,qBAAqB,CACzB,SAA+B;QAE/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;aAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CACzB,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,YAAY,CAAC,CAChF;aACA,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;aACrB,IAAI,EAAE,CAAC;QAEV,OAAO;YACL,SAAS,EAAE,EAAE,GAAG,SAAS,EAAE;YAC3B,KAAK;SACN,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,sBAAsB,CAC1B,SAA+B,EAC/B,KAAe;QAQf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,mBAAmB,GAAa,EAAE,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACrD,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAClC,CAAC,SAAS,EAAE,EAAE,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK,YAAY,CACjE,CAAC;YAEF,IAAI,cAAc,EAAE,CAAC;gBACnB,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YAED,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;gBAC/C,GAAG,QAAQ;gBACX,EAAE,GAAG,SAAS,EAAE;aACjB,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACnD,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,UAAU;YAClB,YAAY;YACZ,mBAAmB;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,uBAAuB,CAC3B,SAA+B,EAC/B,OAA8B;QAO9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,OAAO,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC3E,MAAM,gBAAgB,GAAa,EAAE,CAAC;QAEtC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAC9B,CAAC,SAAS,EAAE,EAAE,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK,YAAY,CACjE,CAAC;YAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACxC,SAAS;YACX,CAAC;YAED,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACnD,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,UAAU;YAClB,gBAAgB;YAChB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,2BAA2B;IAC3B,4EAA4E;IAEpE,KAAK,CAAC,oBAAoB,CAChC,MAAc,EACd,IAAY,EACZ,IAAc;QAEd,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE/C,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,KAAK,EAAE;SACjC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACrD,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,wBAAwB,MAAM,IAAI,IAAI,iBAAiB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CACxF,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,KAAM,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QAE9C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACnD,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAiC,EACnE,IAAI,CAAC,aAAa,EAClB,SAAS,CACV,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,SAAS,CACvC,OAAO,EACP,gBAAgB,EAChB,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,KAAK,EACL,CAAC,MAAM,CAAC,CACT,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,wBAAwB,EAAE;YACxE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;gBACjC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS;aAC3D,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,uDAAuD,YAAY,CAAC,MAAM,MAAM,SAAS,EAAE,CAC5F,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAA0B,CAAC;QAE3E,MAAM,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,IAAI,CACvC,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,UAAU,EACV,YAAY,CACb,CAAC;QACF,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;QAE5E,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,2BAA2B,EAAE;YACtE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;SAChE,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,0DAA0D,OAAO,CAAC,MAAM,MAAM,SAAS,EAAE,CAC1F,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAInC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,+CAA+C,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CACjF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAElD,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC7B,SAA8B,EAC9B,QAAgB,EAChB,UAAkB;QAElB,OAAO,IAAA,wCAA6B,EAClC,IAAI,CAAC,aAAa,EAClB,SAAS,EACT,QAAQ,EACR,UAAU,CACX,CAAC;IACJ,CAAC;CACF;AAhdD,kDAgdC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ContentAddressedStore, ContentAddressedStoreFactory, CreateStoreResult, OpenStoreOptions, StoreIndexBuildStatus, AwaitIndexReadyOptions, StoreScanCursor, StoreScanFilters, StoreScanResult, StoreIdBloomSummary } from "./types";
|
|
2
|
+
import type { StoreEntry, StoreEntryMetadata, StoreEntryType } from "../types";
|
|
3
|
+
import { Logger } from "../logging";
|
|
4
|
+
/**
|
|
5
|
+
* Simple persistent on-disk ContentAddressedStore implementation.
|
|
6
|
+
* Uses metadata files by id and binary content files by contentHash.
|
|
7
|
+
* Supports reset-on-start and optional in-memory indexing.
|
|
8
|
+
*/
|
|
9
|
+
export declare class BasicOnDiskContentAddressedStore implements ContentAddressedStore {
|
|
10
|
+
private readonly dbId;
|
|
11
|
+
private readonly logger;
|
|
12
|
+
private readonly storeRoot;
|
|
13
|
+
private readonly entriesDir;
|
|
14
|
+
private readonly contentDir;
|
|
15
|
+
private readonly metadataIndexPath;
|
|
16
|
+
private readonly indexingEnabled;
|
|
17
|
+
private initPromise;
|
|
18
|
+
private entries;
|
|
19
|
+
private docIndex;
|
|
20
|
+
private contentRefCount;
|
|
21
|
+
private orderedMetadata;
|
|
22
|
+
private indexStatus;
|
|
23
|
+
constructor(dbId: string, logger?: Logger, options?: OpenStoreOptions);
|
|
24
|
+
private initialize;
|
|
25
|
+
private ensureInitialized;
|
|
26
|
+
private clearAllLocalDataInternal;
|
|
27
|
+
private rebuildInMemoryIndexes;
|
|
28
|
+
private tryLoadPersistedIndex;
|
|
29
|
+
private validatePersistedIndexCoverage;
|
|
30
|
+
private persistMetadataIndex;
|
|
31
|
+
private compareMetadata;
|
|
32
|
+
private lowerBoundForCursor;
|
|
33
|
+
private metadataMatchesFilters;
|
|
34
|
+
private insertOrderedMetadata;
|
|
35
|
+
private removeOrderedMetadataById;
|
|
36
|
+
private listEntryFiles;
|
|
37
|
+
private metadataPathForId;
|
|
38
|
+
private contentPathForHash;
|
|
39
|
+
private fileExists;
|
|
40
|
+
private writeFileAtomic;
|
|
41
|
+
private syncParentDirectory;
|
|
42
|
+
private readMetadataById;
|
|
43
|
+
private readMetadataByFileName;
|
|
44
|
+
private listAllMetadata;
|
|
45
|
+
getId(): string;
|
|
46
|
+
putEntries(entries: StoreEntry[]): Promise<void>;
|
|
47
|
+
getEntries(ids: string[]): Promise<StoreEntry[]>;
|
|
48
|
+
hasEntries(ids: string[]): Promise<string[]>;
|
|
49
|
+
findNewEntries(knownIds: string[]): Promise<StoreEntryMetadata[]>;
|
|
50
|
+
findNewEntriesForDoc(knownIds: string[], docId: string): Promise<StoreEntryMetadata[]>;
|
|
51
|
+
findEntries(type: StoreEntryType, creationDateFrom: number | null, creationDateUntil: number | null): Promise<StoreEntryMetadata[]>;
|
|
52
|
+
getAllIds(): Promise<string[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Cursor-based metadata scan for high-volume synchronization.
|
|
55
|
+
* Ordering: createdAt ASC, id ASC.
|
|
56
|
+
*/
|
|
57
|
+
scanEntriesSince(cursor: StoreScanCursor | null, limit?: number, filters?: StoreScanFilters): Promise<StoreScanResult>;
|
|
58
|
+
getIdBloomSummary(): Promise<StoreIdBloomSummary>;
|
|
59
|
+
resolveDependencies(startId: string, options?: Record<string, unknown>): Promise<string[]>;
|
|
60
|
+
purgeDocHistory(docId: string): Promise<void>;
|
|
61
|
+
clearAllLocalData(): Promise<void>;
|
|
62
|
+
awaitIndexReady(_options?: AwaitIndexReadyOptions): Promise<StoreIndexBuildStatus>;
|
|
63
|
+
getIndexBuildStatus(): StoreIndexBuildStatus;
|
|
64
|
+
}
|
|
65
|
+
export declare class BasicOnDiskContentAddressedStoreFactory implements ContentAddressedStoreFactory {
|
|
66
|
+
createStore(dbId: string, options?: OpenStoreOptions): CreateStoreResult;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=BasicOnDiskContentAddressedStore.d.ts.map
|