mindoodb 0.0.3 → 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 +14 -26
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +19 -0
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +58 -5
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.d.ts +4 -0
- package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.js +43 -0
- package/dist/appendonlystores/network/HttpTransport.js.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +3 -0
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +15 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -1
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts +5 -1
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts.map +1 -1
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js +59 -3
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js.map +1 -1
- 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 +3 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +9 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/core/BaseMindooDB.d.ts +103 -13
- package/dist/core/BaseMindooDB.d.ts.map +1 -1
- package/dist/core/BaseMindooDB.js +1066 -205
- package/dist/core/BaseMindooDB.js.map +1 -1
- package/dist/core/BaseMindooTenant.d.ts +30 -1
- package/dist/core/BaseMindooTenant.d.ts.map +1 -1
- package/dist/core/BaseMindooTenant.js +143 -108
- 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 +134 -27
- package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
- package/dist/core/BaseMindooTenantFactory.d.ts +5 -1
- package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantFactory.js +46 -69
- 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/InMemoryContentAddressedStore.d.ts +3 -1
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts.map +1 -1
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.js +22 -0
- 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/network/NetworkTransport.d.ts +15 -0
- package/dist/core/appendonlystores/network/NetworkTransport.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/types.d.ts +2 -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 +83 -0
- package/dist/core/appendonlystores/types.d.ts.map +1 -1
- 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/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 +13 -6
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +13 -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 +38 -14
- package/dist/core/keys/KeyBag.d.ts.map +1 -1
- package/dist/core/keys/KeyBag.js +102 -76
- package/dist/core/keys/KeyBag.js.map +1 -1
- package/dist/core/keys/KeyContext.d.ts +3 -3
- package/dist/core/keys/KeyContext.d.ts.map +1 -1
- package/dist/core/keys/KeyContext.js +10 -4
- package/dist/core/keys/KeyContext.js.map +1 -1
- package/dist/core/types.d.ts +305 -21
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +7 -1
- package/dist/core/types.js.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 +4 -1
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +1 -1
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js +24 -0
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js.map +1 -1
- 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 +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +4 -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/index.d.ts +1 -0
- package/dist/reactnative/index.d.ts.map +1 -1
- package/dist/reactnative/index.js +4 -1
- package/dist/reactnative/index.js.map +1 -1
- package/package.json +14 -3
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* MindooDB Example Server - Entry Point
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npm run server:dev -- [options] (from repo root)
|
|
8
|
+
* node dist/node/server/server.js [options]
|
|
9
|
+
*
|
|
10
|
+
* Options:
|
|
11
|
+
* -d, --data-dir <path> Data directory path (default: ./data)
|
|
12
|
+
* -p, --port <port> Server port (default: 1661)
|
|
13
|
+
* -s, --auto-sync Enable automatic sync with remote servers
|
|
14
|
+
* -w, --static-dir <path> Serve static files from this directory at /statics/
|
|
15
|
+
* --tls-cert <path> Path to TLS certificate file (PEM)
|
|
16
|
+
* --tls-key <path> Path to TLS private key file (PEM)
|
|
17
|
+
* -h, --help Show this help message
|
|
18
|
+
*
|
|
19
|
+
* Environment variables:
|
|
20
|
+
* MINDOODB_SERVER_PASSWORD / MINDOODB_SERVER_PASSWORD_FILE — server identity password
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
const MindooDBServer_1 = require("./MindooDBServer");
|
|
24
|
+
const ServerSync_1 = require("./ServerSync");
|
|
25
|
+
const config_1 = require("./config");
|
|
26
|
+
const resolveServerPassword_1 = require("./resolveServerPassword");
|
|
27
|
+
const types_1 = require("./types");
|
|
28
|
+
function parseArgs(args) {
|
|
29
|
+
const options = {
|
|
30
|
+
dataDir: "./data",
|
|
31
|
+
port: 1661,
|
|
32
|
+
autoSync: false,
|
|
33
|
+
help: false,
|
|
34
|
+
};
|
|
35
|
+
for (let i = 0; i < args.length; i++) {
|
|
36
|
+
const arg = args[i];
|
|
37
|
+
const nextArg = args[i + 1];
|
|
38
|
+
switch (arg) {
|
|
39
|
+
case "-d":
|
|
40
|
+
case "--data-dir":
|
|
41
|
+
if (nextArg) {
|
|
42
|
+
options.dataDir = nextArg;
|
|
43
|
+
i++;
|
|
44
|
+
}
|
|
45
|
+
break;
|
|
46
|
+
case "-p":
|
|
47
|
+
case "--port":
|
|
48
|
+
if (nextArg) {
|
|
49
|
+
const port = parseInt(nextArg, 10);
|
|
50
|
+
if (!isNaN(port) && port > 0 && port < 65536) {
|
|
51
|
+
options.port = port;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.error(`Invalid port: ${nextArg}`);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
i++;
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
case "-s":
|
|
61
|
+
case "--auto-sync":
|
|
62
|
+
options.autoSync = true;
|
|
63
|
+
break;
|
|
64
|
+
case "--tls-cert":
|
|
65
|
+
if (nextArg) {
|
|
66
|
+
options.tlsCert = nextArg;
|
|
67
|
+
i++;
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
case "--tls-key":
|
|
71
|
+
if (nextArg) {
|
|
72
|
+
options.tlsKey = nextArg;
|
|
73
|
+
i++;
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
case "-w":
|
|
77
|
+
case "--static-dir":
|
|
78
|
+
if (nextArg) {
|
|
79
|
+
options.staticDir = nextArg;
|
|
80
|
+
i++;
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
case "--config":
|
|
84
|
+
if (nextArg) {
|
|
85
|
+
options.configPath = nextArg;
|
|
86
|
+
i++;
|
|
87
|
+
}
|
|
88
|
+
break;
|
|
89
|
+
case "-h":
|
|
90
|
+
case "--help":
|
|
91
|
+
options.help = true;
|
|
92
|
+
break;
|
|
93
|
+
default:
|
|
94
|
+
if (arg.startsWith("-")) {
|
|
95
|
+
console.error(`Unknown option: ${arg}`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return options;
|
|
101
|
+
}
|
|
102
|
+
function showHelp() {
|
|
103
|
+
console.log(`
|
|
104
|
+
MindooDB Example Server
|
|
105
|
+
|
|
106
|
+
Usage:
|
|
107
|
+
npm run server:dev -- [options] (from repo root)
|
|
108
|
+
node dist/node/server/server.js [options]
|
|
109
|
+
|
|
110
|
+
Options:
|
|
111
|
+
-d, --data-dir <path> Data directory path (default: ./data)
|
|
112
|
+
-p, --port <port> Server port (default: 1661)
|
|
113
|
+
-s, --auto-sync Enable automatic sync with remote servers
|
|
114
|
+
-w, --static-dir <path> Serve static files at /statics/ (e.g. bootstrap UI)
|
|
115
|
+
--config <path> Path to config.json (default: <dataDir>/config.json)
|
|
116
|
+
--tls-cert <path> Path to TLS certificate file (PEM format)
|
|
117
|
+
--tls-key <path> Path to TLS private key file (PEM format)
|
|
118
|
+
-h, --help Show this help message
|
|
119
|
+
|
|
120
|
+
Environment variables:
|
|
121
|
+
MINDOODB_SERVER_PASSWORD or MINDOODB_SERVER_PASSWORD_FILE — decrypt server identity
|
|
122
|
+
(required if server.identity.json exists)
|
|
123
|
+
|
|
124
|
+
Examples:
|
|
125
|
+
# Start server with default settings
|
|
126
|
+
npm run server:dev
|
|
127
|
+
|
|
128
|
+
# Start server with custom data directory and port
|
|
129
|
+
npm run server:dev -- -d /var/lib/mindoodb -p 8080
|
|
130
|
+
|
|
131
|
+
# Start server with auto-sync enabled
|
|
132
|
+
MINDOODB_SERVER_PASSWORD_FILE=./.server-password npm run server:dev -- -s
|
|
133
|
+
|
|
134
|
+
# Start server with explicit config file
|
|
135
|
+
npm run server:dev -- --config /etc/mindoodb/config.json
|
|
136
|
+
|
|
137
|
+
# Start server with static files (e.g. bootstrap UI for distributed web apps)
|
|
138
|
+
npm run server:dev -- -w ./webapp-bootstrap
|
|
139
|
+
|
|
140
|
+
# Start server with TLS (HTTPS)
|
|
141
|
+
npm run server:dev -- --tls-cert /path/to/fullchain.pem --tls-key /path/to/privkey.pem -p 443
|
|
142
|
+
`);
|
|
143
|
+
}
|
|
144
|
+
async function main() {
|
|
145
|
+
const args = process.argv.slice(2);
|
|
146
|
+
const options = parseArgs(args);
|
|
147
|
+
if (options.help) {
|
|
148
|
+
showHelp();
|
|
149
|
+
process.exit(0);
|
|
150
|
+
}
|
|
151
|
+
console.log("=".repeat(60));
|
|
152
|
+
console.log("MindooDB Example Server");
|
|
153
|
+
console.log("=".repeat(60));
|
|
154
|
+
console.log(`Data directory: ${options.dataDir}`);
|
|
155
|
+
console.log(`Port: ${options.port}`);
|
|
156
|
+
console.log(`Auto-sync: ${options.autoSync ? "enabled" : "disabled"}`);
|
|
157
|
+
console.log(`Static dir: ${options.staticDir || "not set"}`);
|
|
158
|
+
console.log(`TLS: ${options.tlsCert ? "enabled" : "disabled"}`);
|
|
159
|
+
if ((options.tlsCert && !options.tlsKey) || (!options.tlsCert && options.tlsKey)) {
|
|
160
|
+
console.error("Error: --tls-cert and --tls-key must both be provided");
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
const serverPassword = (0, resolveServerPassword_1.resolveServerPassword)();
|
|
164
|
+
console.log(`Config: ${options.configPath || "<dataDir>/config.json"}`);
|
|
165
|
+
console.log(`Server password: ${serverPassword ? "configured" : "not set"}`);
|
|
166
|
+
console.log("=".repeat(60));
|
|
167
|
+
// Load server config (capabilities-based system admin authorization)
|
|
168
|
+
const configPath = (0, config_1.resolveConfigPath)(options.dataDir, options.configPath);
|
|
169
|
+
const serverConfig = (0, config_1.loadServerConfig)(options.dataDir, options.configPath);
|
|
170
|
+
// Create and start the server
|
|
171
|
+
const server = new MindooDBServer_1.MindooDBServer(options.dataDir, serverPassword, options.staticDir, serverConfig, configPath);
|
|
172
|
+
// If auto-sync is enabled and we have server identity, start periodic sync
|
|
173
|
+
if (options.autoSync) {
|
|
174
|
+
const tenantManager = server.getTenantManager();
|
|
175
|
+
const serverIdentity = tenantManager.getServerIdentity();
|
|
176
|
+
if (!serverIdentity) {
|
|
177
|
+
console.warn("[Main] Auto-sync enabled but no server.identity.json found. " +
|
|
178
|
+
"Run 'npm run init' to create a server identity.");
|
|
179
|
+
}
|
|
180
|
+
else if (!serverPassword) {
|
|
181
|
+
console.warn("[Main] Auto-sync enabled but no server password (set " +
|
|
182
|
+
`${types_1.ENV_VARS.SERVER_PASSWORD} or ${types_1.ENV_VARS.SERVER_PASSWORD_FILE}). ` +
|
|
183
|
+
"Server-to-server sync will not work.");
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
const tenants = tenantManager.listTenants();
|
|
187
|
+
for (const tenantId of tenants) {
|
|
188
|
+
try {
|
|
189
|
+
const tenant = await tenantManager.getTenant(tenantId);
|
|
190
|
+
const config = tenant.context.config;
|
|
191
|
+
if (config.remoteServers && config.remoteServers.length > 0) {
|
|
192
|
+
const serverSync = new ServerSync_1.ServerSync(tenantManager.getCryptoAdapter(), tenantId, serverIdentity, serverPassword, async (dbId) => tenantManager.getStore(tenantId, dbId));
|
|
193
|
+
const stopSync = (0, ServerSync_1.startPeriodicSync)(serverSync, config.remoteServers);
|
|
194
|
+
process.on("SIGINT", () => {
|
|
195
|
+
console.log("\n[Main] Shutting down...");
|
|
196
|
+
stopSync();
|
|
197
|
+
process.exit(0);
|
|
198
|
+
});
|
|
199
|
+
process.on("SIGTERM", () => {
|
|
200
|
+
console.log("\n[Main] Shutting down...");
|
|
201
|
+
stopSync();
|
|
202
|
+
process.exit(0);
|
|
203
|
+
});
|
|
204
|
+
console.log(`[Main] Started auto-sync for tenant ${tenantId}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
console.error(`[Main] Error setting up auto-sync for tenant ${tenantId}:`, error);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Start listening
|
|
214
|
+
if (options.tlsCert && options.tlsKey) {
|
|
215
|
+
server.listenTls(options.port, options.tlsCert, options.tlsKey);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
server.listen(options.port);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
main().catch((error) => {
|
|
222
|
+
console.error("Fatal error:", error);
|
|
223
|
+
process.exit(1);
|
|
224
|
+
});
|
|
225
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/node/server/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* MindooDB Server Init - One-time setup that generates the server identity
|
|
4
|
+
* and optionally creates a first system admin keypair.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx ts-node src/serverinit.ts --name <serverName> [options]
|
|
8
|
+
*
|
|
9
|
+
* Options:
|
|
10
|
+
* -n, --name <name> Server name (e.g., "server1") -- required
|
|
11
|
+
* -d, --data-dir <path> Data directory path (default: ./data)
|
|
12
|
+
* -f, --force Overwrite existing server.identity.json
|
|
13
|
+
* --skip-admin Skip system admin keypair generation
|
|
14
|
+
* -h, --help Show this help message
|
|
15
|
+
*
|
|
16
|
+
* Environment variables:
|
|
17
|
+
* MINDOODB_SERVER_PASSWORD / MINDOODB_SERVER_PASSWORD_FILE — encrypt server identity.
|
|
18
|
+
* If neither is set, the user is prompted interactively.
|
|
19
|
+
*/
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=serverinit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverinit.d.ts","sourceRoot":"","sources":["../../../src/node/server/serverinit.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* MindooDB Server Init - One-time setup that generates the server identity
|
|
5
|
+
* and optionally creates a first system admin keypair.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx ts-node src/serverinit.ts --name <serverName> [options]
|
|
9
|
+
*
|
|
10
|
+
* Options:
|
|
11
|
+
* -n, --name <name> Server name (e.g., "server1") -- required
|
|
12
|
+
* -d, --data-dir <path> Data directory path (default: ./data)
|
|
13
|
+
* -f, --force Overwrite existing server.identity.json
|
|
14
|
+
* --skip-admin Skip system admin keypair generation
|
|
15
|
+
* -h, --help Show this help message
|
|
16
|
+
*
|
|
17
|
+
* Environment variables:
|
|
18
|
+
* MINDOODB_SERVER_PASSWORD / MINDOODB_SERVER_PASSWORD_FILE — encrypt server identity.
|
|
19
|
+
* If neither is set, the user is prompted interactively.
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
const fs_1 = require("fs");
|
|
23
|
+
const path_1 = require("path");
|
|
24
|
+
const readline_1 = require("readline");
|
|
25
|
+
const stream_1 = require("stream");
|
|
26
|
+
const NodeCryptoAdapter_1 = require("../crypto/NodeCryptoAdapter");
|
|
27
|
+
const BaseMindooTenantFactory_1 = require("../../core/BaseMindooTenantFactory");
|
|
28
|
+
const InMemoryContentAddressedStoreFactory_1 = require("../../appendonlystores/InMemoryContentAddressedStoreFactory");
|
|
29
|
+
const resolveServerPassword_1 = require("./resolveServerPassword");
|
|
30
|
+
const types_1 = require("./types");
|
|
31
|
+
function parseArgs(args) {
|
|
32
|
+
const options = {
|
|
33
|
+
name: "",
|
|
34
|
+
dataDir: "./data",
|
|
35
|
+
force: false,
|
|
36
|
+
skipAdmin: false,
|
|
37
|
+
help: false,
|
|
38
|
+
};
|
|
39
|
+
for (let i = 0; i < args.length; i++) {
|
|
40
|
+
const arg = args[i];
|
|
41
|
+
const nextArg = args[i + 1];
|
|
42
|
+
switch (arg) {
|
|
43
|
+
case "-n":
|
|
44
|
+
case "--name":
|
|
45
|
+
if (nextArg) {
|
|
46
|
+
options.name = nextArg;
|
|
47
|
+
i++;
|
|
48
|
+
}
|
|
49
|
+
break;
|
|
50
|
+
case "-d":
|
|
51
|
+
case "--data-dir":
|
|
52
|
+
if (nextArg) {
|
|
53
|
+
options.dataDir = nextArg;
|
|
54
|
+
i++;
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
case "-f":
|
|
58
|
+
case "--force":
|
|
59
|
+
options.force = true;
|
|
60
|
+
break;
|
|
61
|
+
case "--skip-admin":
|
|
62
|
+
options.skipAdmin = true;
|
|
63
|
+
break;
|
|
64
|
+
case "-h":
|
|
65
|
+
case "--help":
|
|
66
|
+
options.help = true;
|
|
67
|
+
break;
|
|
68
|
+
default:
|
|
69
|
+
if (arg.startsWith("-")) {
|
|
70
|
+
console.error(`Unknown option: ${arg}`);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return options;
|
|
76
|
+
}
|
|
77
|
+
function showHelp() {
|
|
78
|
+
console.log(`
|
|
79
|
+
MindooDB Server Init - Generate server identity and (optionally) a system admin
|
|
80
|
+
|
|
81
|
+
Usage:
|
|
82
|
+
npx ts-node src/serverinit.ts --name <serverName> [options]
|
|
83
|
+
|
|
84
|
+
Options:
|
|
85
|
+
-n, --name <name> Server name (e.g., "server1") -- required
|
|
86
|
+
-d, --data-dir <path> Data directory path (default: ./data)
|
|
87
|
+
-f, --force Overwrite existing server.identity.json
|
|
88
|
+
--skip-admin Skip interactive system admin keypair generation
|
|
89
|
+
-h, --help Show this help message
|
|
90
|
+
|
|
91
|
+
Environment variables:
|
|
92
|
+
MINDOODB_SERVER_PASSWORD or MINDOODB_SERVER_PASSWORD_FILE — encrypt server identity.
|
|
93
|
+
If neither is set, the user is prompted interactively.
|
|
94
|
+
|
|
95
|
+
Examples:
|
|
96
|
+
# Interactive (prompts for password and system admin setup):
|
|
97
|
+
npx ts-node src/serverinit.ts --name server1
|
|
98
|
+
|
|
99
|
+
# Non-interactive (password from file, skip admin):
|
|
100
|
+
MINDOODB_SERVER_PASSWORD_FILE=./.server-password npx ts-node src/serverinit.ts --name server1 --skip-admin
|
|
101
|
+
`);
|
|
102
|
+
}
|
|
103
|
+
function createReadline() {
|
|
104
|
+
return (0, readline_1.createInterface)({
|
|
105
|
+
input: process.stdin,
|
|
106
|
+
output: process.stderr,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
async function promptLine(rl, question) {
|
|
110
|
+
return new Promise((resolve) => {
|
|
111
|
+
rl.question(question, (answer) => resolve(answer));
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
async function promptHiddenLine(question) {
|
|
115
|
+
if (!process.stdin.isTTY) {
|
|
116
|
+
const rl = createReadline();
|
|
117
|
+
const answer = await promptLine(rl, question);
|
|
118
|
+
rl.close();
|
|
119
|
+
return answer;
|
|
120
|
+
}
|
|
121
|
+
let muted = false;
|
|
122
|
+
const output = new stream_1.Writable({
|
|
123
|
+
write(chunk, encoding, callback) {
|
|
124
|
+
if (!muted) {
|
|
125
|
+
process.stderr.write(chunk, encoding);
|
|
126
|
+
}
|
|
127
|
+
callback();
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
const rl = (0, readline_1.createInterface)({
|
|
131
|
+
input: process.stdin,
|
|
132
|
+
output,
|
|
133
|
+
terminal: true,
|
|
134
|
+
});
|
|
135
|
+
return new Promise((resolve) => {
|
|
136
|
+
const cleanup = () => {
|
|
137
|
+
muted = false;
|
|
138
|
+
rl.close();
|
|
139
|
+
};
|
|
140
|
+
rl.on("SIGINT", () => {
|
|
141
|
+
cleanup();
|
|
142
|
+
process.kill(process.pid, "SIGINT");
|
|
143
|
+
});
|
|
144
|
+
process.stderr.write(question);
|
|
145
|
+
muted = true;
|
|
146
|
+
rl.question("", (answer) => {
|
|
147
|
+
process.stderr.write("\n");
|
|
148
|
+
cleanup();
|
|
149
|
+
resolve(answer);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
async function main() {
|
|
154
|
+
const args = process.argv.slice(2);
|
|
155
|
+
const options = parseArgs(args);
|
|
156
|
+
if (options.help) {
|
|
157
|
+
showHelp();
|
|
158
|
+
process.exit(0);
|
|
159
|
+
}
|
|
160
|
+
if (!options.name) {
|
|
161
|
+
console.error("Error: --name is required. Use --help for usage.");
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
const identityPath = (0, path_1.join)(options.dataDir, "server.identity.json");
|
|
165
|
+
const trustedServersPath = (0, path_1.join)(options.dataDir, "trusted-servers.json");
|
|
166
|
+
const configPath = (0, path_1.join)(options.dataDir, "config.json");
|
|
167
|
+
if ((0, fs_1.existsSync)(identityPath) && !options.force) {
|
|
168
|
+
console.error(`Error: ${identityPath} already exists. Use --force to overwrite.`);
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
// Get password from env / file or prompt
|
|
172
|
+
let password = (0, resolveServerPassword_1.resolveServerPassword)();
|
|
173
|
+
if (!password) {
|
|
174
|
+
password = await promptHiddenLine("Enter password to encrypt server identity: ");
|
|
175
|
+
}
|
|
176
|
+
if (!password) {
|
|
177
|
+
console.error("Error: password is required.");
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
// Ensure data directory exists
|
|
181
|
+
if (!(0, fs_1.existsSync)(options.dataDir)) {
|
|
182
|
+
(0, fs_1.mkdirSync)(options.dataDir, { recursive: true });
|
|
183
|
+
}
|
|
184
|
+
console.log("=".repeat(60));
|
|
185
|
+
console.log("MindooDB Server Init");
|
|
186
|
+
console.log("=".repeat(60));
|
|
187
|
+
console.log(`Server name: ${options.name}`);
|
|
188
|
+
console.log(`Data directory: ${options.dataDir}`);
|
|
189
|
+
console.log("=".repeat(60));
|
|
190
|
+
const cryptoAdapter = new NodeCryptoAdapter_1.NodeCryptoAdapter();
|
|
191
|
+
const factory = new BaseMindooTenantFactory_1.BaseMindooTenantFactory(new InMemoryContentAddressedStoreFactory_1.InMemoryContentAddressedStoreFactory(), cryptoAdapter);
|
|
192
|
+
const serverUsername = `CN=${options.name}`;
|
|
193
|
+
console.log(`\nGenerating server identity for "${serverUsername}"...`);
|
|
194
|
+
console.log("(This may take a few seconds for RSA key generation)\n");
|
|
195
|
+
const identity = await factory.createUserId(serverUsername, password);
|
|
196
|
+
// Write server.identity.json
|
|
197
|
+
(0, fs_1.writeFileSync)(identityPath, JSON.stringify(identity, null, 2), "utf-8");
|
|
198
|
+
console.log(`\nServer identity written to: ${identityPath}`);
|
|
199
|
+
// Create trusted-servers.json if it doesn't exist
|
|
200
|
+
if (!(0, fs_1.existsSync)(trustedServersPath)) {
|
|
201
|
+
(0, fs_1.writeFileSync)(trustedServersPath, "[]", "utf-8");
|
|
202
|
+
console.log(`Created empty trusted-servers.json: ${trustedServersPath}`);
|
|
203
|
+
}
|
|
204
|
+
// Print public keys for sharing with other servers
|
|
205
|
+
console.log("\n" + "=".repeat(60));
|
|
206
|
+
console.log("SERVER PUBLIC KEYS (share these with other servers):");
|
|
207
|
+
console.log("=".repeat(60));
|
|
208
|
+
console.log(`\nServer name: ${serverUsername}`);
|
|
209
|
+
console.log(`\nSigning public key (Ed25519):\n${identity.userSigningKeyPair.publicKey}`);
|
|
210
|
+
console.log(`\nEncryption public key (RSA-OAEP):\n${identity.userEncryptionKeyPair.publicKey}`);
|
|
211
|
+
console.log("=".repeat(60));
|
|
212
|
+
// System admin keypair generation
|
|
213
|
+
if (!options.skipAdmin) {
|
|
214
|
+
await generateSystemAdmin(factory, options.dataDir, configPath);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
writeDefaultConfig(configPath);
|
|
218
|
+
console.log(`\nSkipped system admin generation (--skip-admin).`);
|
|
219
|
+
}
|
|
220
|
+
if (!process.env.MINDOODB_SKIP_NEXT_STEPS) {
|
|
221
|
+
console.log("\n" + "=".repeat(60));
|
|
222
|
+
console.log("NEXT STEPS:");
|
|
223
|
+
console.log("=".repeat(60));
|
|
224
|
+
console.log("1. Start the server:");
|
|
225
|
+
console.log(` ${types_1.ENV_VARS.SERVER_PASSWORD_FILE}=<path> or ${types_1.ENV_VARS.SERVER_PASSWORD}=<password> ` +
|
|
226
|
+
`node dist/node/server/server.js -d ${options.dataDir}`);
|
|
227
|
+
console.log("2. Edit config.json to configure system admin capabilities");
|
|
228
|
+
console.log("3. Use MindooDBServerAdmin or publishToServer to manage tenants");
|
|
229
|
+
console.log("=".repeat(60));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
async function generateSystemAdmin(factory, dataDir, configPath) {
|
|
233
|
+
const rl = createReadline();
|
|
234
|
+
const answer = await promptLine(rl, "\nCreate a system admin now? (y/N) ");
|
|
235
|
+
if (answer.toLowerCase() !== "y") {
|
|
236
|
+
rl.close();
|
|
237
|
+
writeDefaultConfig(configPath);
|
|
238
|
+
console.log("Skipped system admin generation.");
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
const adminUsername = await promptLine(rl, "System admin username (e.g. cn=sysadmin/o=myorg): ");
|
|
242
|
+
if (!adminUsername.trim()) {
|
|
243
|
+
rl.close();
|
|
244
|
+
console.error("Error: username cannot be empty.");
|
|
245
|
+
writeDefaultConfig(configPath);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const adminPassword = await promptHiddenLine("Password to protect the system admin private key: ");
|
|
249
|
+
if (!adminPassword) {
|
|
250
|
+
rl.close();
|
|
251
|
+
console.error("Error: password cannot be empty.");
|
|
252
|
+
writeDefaultConfig(configPath);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const adminPasswordConfirm = await promptHiddenLine("Confirm password: ");
|
|
256
|
+
rl.close();
|
|
257
|
+
if (adminPassword !== adminPasswordConfirm) {
|
|
258
|
+
console.error("Error: passwords do not match.");
|
|
259
|
+
writeDefaultConfig(configPath);
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
console.log(`\nGenerating system admin keypair for "${adminUsername}"...`);
|
|
263
|
+
console.log("(This may take a few seconds for RSA key generation)\n");
|
|
264
|
+
const adminIdentity = await factory.createUserId(adminUsername, adminPassword);
|
|
265
|
+
// Save the password-encrypted private key to a separate identity file
|
|
266
|
+
const safeFilename = adminUsername
|
|
267
|
+
.replace(/[^a-zA-Z0-9_=-]/g, "-")
|
|
268
|
+
.replace(/-+/g, "-")
|
|
269
|
+
.toLowerCase();
|
|
270
|
+
const identityFilePath = (0, path_1.join)(dataDir, `system-admin-${safeFilename}.identity.json`);
|
|
271
|
+
(0, fs_1.writeFileSync)(identityFilePath, JSON.stringify(adminIdentity, null, 2), "utf-8");
|
|
272
|
+
console.log(`System admin identity (password-encrypted) written to: ${identityFilePath}`);
|
|
273
|
+
// Write config.json with the admin's public key
|
|
274
|
+
const config = {
|
|
275
|
+
capabilities: {
|
|
276
|
+
"ALL:/system/*": [
|
|
277
|
+
{
|
|
278
|
+
username: adminUsername,
|
|
279
|
+
publicsignkey: adminIdentity.userSigningKeyPair.publicKey,
|
|
280
|
+
},
|
|
281
|
+
],
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
(0, fs_1.writeFileSync)(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
285
|
+
console.log(`Config written to: ${configPath}`);
|
|
286
|
+
console.log("\n" + "=".repeat(60));
|
|
287
|
+
console.log("SYSTEM ADMIN CREATED:");
|
|
288
|
+
console.log("=".repeat(60));
|
|
289
|
+
console.log(`Username: ${adminUsername}`);
|
|
290
|
+
console.log(`Identity file: ${identityFilePath}`);
|
|
291
|
+
console.log(`Config: ${configPath}`);
|
|
292
|
+
console.log("\nThe identity file contains the password-encrypted private key.");
|
|
293
|
+
console.log("The raw private key is never stored on disk.");
|
|
294
|
+
console.log("You will need the password when using MindooDBServerAdmin or publishToServer.");
|
|
295
|
+
console.log("=".repeat(60));
|
|
296
|
+
}
|
|
297
|
+
function writeDefaultConfig(configPath) {
|
|
298
|
+
if ((0, fs_1.existsSync)(configPath))
|
|
299
|
+
return;
|
|
300
|
+
const config = {
|
|
301
|
+
capabilities: {
|
|
302
|
+
"ALL:/system/*": [
|
|
303
|
+
{
|
|
304
|
+
username: "<INSERT_USERNAME>",
|
|
305
|
+
publicsignkey: "<INSERT_SIGNING_PUBLIC_KEY>",
|
|
306
|
+
},
|
|
307
|
+
],
|
|
308
|
+
},
|
|
309
|
+
};
|
|
310
|
+
(0, fs_1.writeFileSync)(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
311
|
+
console.log(`Default config.json (with placeholder) written to: ${configPath}`);
|
|
312
|
+
}
|
|
313
|
+
main().catch((error) => {
|
|
314
|
+
console.error("Fatal error:", error);
|
|
315
|
+
process.exit(1);
|
|
316
|
+
});
|
|
317
|
+
//# sourceMappingURL=serverinit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverinit.js","sourceRoot":"","sources":["../../../src/node/server/serverinit.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;;;;GAiBG;;AAEH,2BAAwE;AACxE,+BAA4B;AAC5B,uCAA2C;AAC3C,mCAAkC;AAElC,mEAAgE;AAChE,gFAA6E;AAC7E,sHAAmH;AAEnH,mEAAgE;AAChE,mCAAmC;AAWnC,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAgB;QAC3B,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE5B,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;oBACvB,CAAC,EAAE,CAAC;gBACN,CAAC;gBACD,MAAM;YAER,KAAK,IAAI,CAAC;YACV,KAAK,YAAY;gBACf,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;oBAC1B,CAAC,EAAE,CAAC;gBACN,CAAC;gBACD,MAAM;YAER,KAAK,IAAI,CAAC;YACV,KAAK,SAAS;gBACZ,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;gBACrB,MAAM;YAER,KAAK,cAAc;gBACjB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;gBACzB,MAAM;YAER,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;gBACpB,MAAM;YAER;gBACE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;oBACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuBb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,IAAA,0BAAe,EAAC;QACrB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,EAAsC,EAAE,QAAgB;IAChF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC9C,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,MAAM,MAAM,GAAG,IAAI,iBAAQ,CAAC;QAC1B,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ;YAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAA0B,CAAC,CAAC;YAC1D,CAAC;YACD,QAAQ,EAAE,CAAC;QACb,CAAC;KACF,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,IAAA,0BAAe,EAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM;QACN,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,KAAK,GAAG,KAAK,CAAC;YACd,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC,CAAC;QAEF,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACnB,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,KAAK,GAAG,IAAI,CAAC;QACb,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;IACnE,MAAM,kBAAkB,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAExD,IAAI,IAAA,eAAU,EAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,UAAU,YAAY,4CAA4C,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,yCAAyC;IACzC,IAAI,QAAQ,GAAG,IAAA,6CAAqB,GAAE,CAAC;IACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,MAAM,gBAAgB,CAAC,6CAA6C,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,IAAA,cAAS,EAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,MAAM,aAAa,GAAG,IAAI,qCAAiB,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,iDAAuB,CACzC,IAAI,2EAAoC,EAAE,EAC1C,aAAa,CACd,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,qCAAqC,cAAc,MAAM,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IAEtE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAEtE,6BAA6B;IAC7B,IAAA,kBAAa,EAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAC;IAE7D,kDAAkD;IAClD,IAAI,CAAC,IAAA,eAAU,EAAC,kBAAkB,CAAC,EAAE,CAAC;QACpC,IAAA,kBAAa,EAAC,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,uCAAuC,kBAAkB,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,mDAAmD;IACnD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,oCAAoC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,wCAAwC,QAAQ,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,kCAAkC;IAClC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CACT,MAAM,gBAAQ,CAAC,oBAAoB,cAAc,gBAAQ,CAAC,eAAe,cAAc;YACrF,sCAAsC,OAAO,CAAC,OAAO,EAAE,CAC1D,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,OAAgC,EAChC,OAAe,EACf,UAAkB;IAElB,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,qCAAqC,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;QACjC,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,oDAAoD,CAAC,CAAC;IACjG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1B,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,oDAAoD,CAAC,CAAC;IACnG,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,oBAAoB,GAAG,MAAM,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAC1E,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,aAAa,KAAK,oBAAoB,EAAE,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,0CAA0C,aAAa,MAAM,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IAEtE,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAE/E,sEAAsE;IACtE,MAAM,YAAY,GAAG,aAAa;SAC/B,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,WAAW,EAAE,CAAC;IACjB,MAAM,gBAAgB,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,gBAAgB,YAAY,gBAAgB,CAAC,CAAC;IACrF,IAAA,kBAAa,EAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,0DAA0D,gBAAgB,EAAE,CAAC,CAAC;IAE1F,gDAAgD;IAChD,MAAM,MAAM,GAAiB;QAC3B,YAAY,EAAE;YACZ,eAAe,EAAE;gBACf;oBACE,QAAQ,EAAE,aAAa;oBACvB,aAAa,EAAE,aAAa,CAAC,kBAAkB,CAAC,SAAmB;iBACpE;aACF;SACF;KACF,CAAC;IACF,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;IAEhD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,aAAa,aAAa,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,kBAAkB,gBAAgB,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC;QAAE,OAAO;IAEnC,MAAM,MAAM,GAAiB;QAC3B,YAAY,EAAE;YACZ,eAAe,EAAE;gBACf;oBACE,QAAQ,EAAE,mBAAmB;oBAC7B,aAAa,EAAE,6BAA6B;iBAC7C;aACF;SACF;KACF,CAAC;IACF,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,sDAAsD,UAAU,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|