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.
Files changed (209) hide show
  1. package/README-server.md +1001 -0
  2. package/README.md +14 -26
  3. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +19 -0
  4. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -1
  5. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +58 -5
  6. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -1
  7. package/dist/appendonlystores/network/HttpTransport.d.ts +4 -0
  8. package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -1
  9. package/dist/appendonlystores/network/HttpTransport.js +43 -0
  10. package/dist/appendonlystores/network/HttpTransport.js.map +1 -1
  11. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +3 -0
  12. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -1
  13. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +15 -1
  14. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -1
  15. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts +5 -1
  16. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts.map +1 -1
  17. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js +59 -3
  18. package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js.map +1 -1
  19. package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts +21 -0
  20. package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts.map +1 -0
  21. package/dist/browser/cache/IndexedDBLocalCacheStore.js +106 -0
  22. package/dist/browser/cache/IndexedDBLocalCacheStore.js.map +1 -0
  23. package/dist/browser/index.d.ts +3 -0
  24. package/dist/browser/index.d.ts.map +1 -1
  25. package/dist/browser/index.js +9 -1
  26. package/dist/browser/index.js.map +1 -1
  27. package/dist/core/BaseMindooDB.d.ts +103 -13
  28. package/dist/core/BaseMindooDB.d.ts.map +1 -1
  29. package/dist/core/BaseMindooDB.js +1066 -205
  30. package/dist/core/BaseMindooDB.js.map +1 -1
  31. package/dist/core/BaseMindooTenant.d.ts +30 -1
  32. package/dist/core/BaseMindooTenant.d.ts.map +1 -1
  33. package/dist/core/BaseMindooTenant.js +143 -108
  34. package/dist/core/BaseMindooTenant.js.map +1 -1
  35. package/dist/core/BaseMindooTenantDirectory.d.ts +13 -10
  36. package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
  37. package/dist/core/BaseMindooTenantDirectory.js +134 -27
  38. package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
  39. package/dist/core/BaseMindooTenantFactory.d.ts +5 -1
  40. package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
  41. package/dist/core/BaseMindooTenantFactory.js +46 -69
  42. package/dist/core/BaseMindooTenantFactory.js.map +1 -1
  43. package/dist/core/MindooDBServerAdmin.d.ts +238 -0
  44. package/dist/core/MindooDBServerAdmin.d.ts.map +1 -0
  45. package/dist/core/MindooDBServerAdmin.js +345 -0
  46. package/dist/core/MindooDBServerAdmin.js.map +1 -0
  47. package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts +3 -1
  48. package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts.map +1 -1
  49. package/dist/core/appendonlystores/InMemoryContentAddressedStore.js +22 -0
  50. package/dist/core/appendonlystores/InMemoryContentAddressedStore.js.map +1 -1
  51. package/dist/core/appendonlystores/MaterializationPlanner.d.ts +49 -0
  52. package/dist/core/appendonlystores/MaterializationPlanner.d.ts.map +1 -0
  53. package/dist/core/appendonlystores/MaterializationPlanner.js +325 -0
  54. package/dist/core/appendonlystores/MaterializationPlanner.js.map +1 -0
  55. package/dist/core/appendonlystores/network/NetworkTransport.d.ts +15 -0
  56. package/dist/core/appendonlystores/network/NetworkTransport.d.ts.map +1 -1
  57. package/dist/core/appendonlystores/network/types.d.ts +2 -0
  58. package/dist/core/appendonlystores/network/types.d.ts.map +1 -1
  59. package/dist/core/appendonlystores/network/types.js.map +1 -1
  60. package/dist/core/appendonlystores/types.d.ts +83 -0
  61. package/dist/core/appendonlystores/types.d.ts.map +1 -1
  62. package/dist/core/cache/CacheManager.d.ts +75 -0
  63. package/dist/core/cache/CacheManager.d.ts.map +1 -0
  64. package/dist/core/cache/CacheManager.js +101 -0
  65. package/dist/core/cache/CacheManager.js.map +1 -0
  66. package/dist/core/cache/EncryptedLocalCacheStore.d.ts +41 -0
  67. package/dist/core/cache/EncryptedLocalCacheStore.d.ts.map +1 -0
  68. package/dist/core/cache/EncryptedLocalCacheStore.js +120 -0
  69. package/dist/core/cache/EncryptedLocalCacheStore.js.map +1 -0
  70. package/dist/core/cache/LocalCacheStore.d.ts +50 -0
  71. package/dist/core/cache/LocalCacheStore.d.ts.map +1 -0
  72. package/dist/core/cache/LocalCacheStore.js +39 -0
  73. package/dist/core/cache/LocalCacheStore.js.map +1 -0
  74. package/dist/core/crypto/privateKeyEncryption.d.ts +5 -0
  75. package/dist/core/crypto/privateKeyEncryption.d.ts.map +1 -0
  76. package/dist/core/crypto/privateKeyEncryption.js +87 -0
  77. package/dist/core/crypto/privateKeyEncryption.js.map +1 -0
  78. package/dist/core/index.d.ts +13 -6
  79. package/dist/core/index.d.ts.map +1 -1
  80. package/dist/core/index.js +13 -1
  81. package/dist/core/index.js.map +1 -1
  82. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts +4 -1
  83. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts.map +1 -1
  84. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js +39 -11
  85. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js.map +1 -1
  86. package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts +1 -0
  87. package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts.map +1 -1
  88. package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js +3 -0
  89. package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js.map +1 -1
  90. package/dist/core/indexing/virtualviews/VirtualView.d.ts +43 -0
  91. package/dist/core/indexing/virtualviews/VirtualView.d.ts.map +1 -1
  92. package/dist/core/indexing/virtualviews/VirtualView.js +173 -0
  93. package/dist/core/indexing/virtualviews/VirtualView.js.map +1 -1
  94. package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts +7 -0
  95. package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts.map +1 -1
  96. package/dist/core/indexing/virtualviews/VirtualViewEntryData.js +28 -0
  97. package/dist/core/indexing/virtualviews/VirtualViewEntryData.js.map +1 -1
  98. package/dist/core/keys/KeyBag.d.ts +38 -14
  99. package/dist/core/keys/KeyBag.d.ts.map +1 -1
  100. package/dist/core/keys/KeyBag.js +102 -76
  101. package/dist/core/keys/KeyBag.js.map +1 -1
  102. package/dist/core/keys/KeyContext.d.ts +3 -3
  103. package/dist/core/keys/KeyContext.d.ts.map +1 -1
  104. package/dist/core/keys/KeyContext.js +10 -4
  105. package/dist/core/keys/KeyContext.js.map +1 -1
  106. package/dist/core/types.d.ts +305 -21
  107. package/dist/core/types.d.ts.map +1 -1
  108. package/dist/core/types.js +7 -1
  109. package/dist/core/types.js.map +1 -1
  110. package/dist/core/utils/idGeneration.d.ts.map +1 -1
  111. package/dist/core/utils/idGeneration.js +37 -3
  112. package/dist/core/utils/idGeneration.js.map +1 -1
  113. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts +4 -1
  114. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +1 -1
  115. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js +24 -0
  116. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js.map +1 -1
  117. package/dist/node/attachments/writeAttachmentToFile.d.ts +15 -0
  118. package/dist/node/attachments/writeAttachmentToFile.d.ts.map +1 -0
  119. package/dist/node/attachments/writeAttachmentToFile.js +73 -0
  120. package/dist/node/attachments/writeAttachmentToFile.js.map +1 -0
  121. package/dist/node/cache/FileSystemLocalCacheStore.d.ts +17 -0
  122. package/dist/node/cache/FileSystemLocalCacheStore.d.ts.map +1 -0
  123. package/dist/node/cache/FileSystemLocalCacheStore.js +128 -0
  124. package/dist/node/cache/FileSystemLocalCacheStore.js.map +1 -0
  125. package/dist/node/cli/change-identity-password.d.ts +7 -0
  126. package/dist/node/cli/change-identity-password.d.ts.map +1 -0
  127. package/dist/node/cli/change-identity-password.js +67 -0
  128. package/dist/node/cli/change-identity-password.js.map +1 -0
  129. package/dist/node/cli/cli-utils.d.ts +16 -0
  130. package/dist/node/cli/cli-utils.d.ts.map +1 -0
  131. package/dist/node/cli/cli-utils.js +113 -0
  132. package/dist/node/cli/cli-utils.js.map +1 -0
  133. package/dist/node/cli/identity-export-public.d.ts +4 -0
  134. package/dist/node/cli/identity-export-public.d.ts.map +1 -0
  135. package/dist/node/cli/identity-export-public.js +55 -0
  136. package/dist/node/cli/identity-export-public.js.map +1 -0
  137. package/dist/node/cli/identity-info.d.ts +4 -0
  138. package/dist/node/cli/identity-info.d.ts.map +1 -0
  139. package/dist/node/cli/identity-info.js +57 -0
  140. package/dist/node/cli/identity-info.js.map +1 -0
  141. package/dist/node/index.d.ts +1 -0
  142. package/dist/node/index.d.ts.map +1 -1
  143. package/dist/node/index.js +4 -1
  144. package/dist/node/index.js.map +1 -1
  145. package/dist/node/server/CapabilityMatcher.d.ts +45 -0
  146. package/dist/node/server/CapabilityMatcher.d.ts.map +1 -0
  147. package/dist/node/server/CapabilityMatcher.js +117 -0
  148. package/dist/node/server/CapabilityMatcher.js.map +1 -0
  149. package/dist/node/server/MindooDBServer.d.ts +87 -0
  150. package/dist/node/server/MindooDBServer.d.ts.map +1 -0
  151. package/dist/node/server/MindooDBServer.js +1040 -0
  152. package/dist/node/server/MindooDBServer.js.map +1 -0
  153. package/dist/node/server/ServerSync.d.ts +41 -0
  154. package/dist/node/server/ServerSync.d.ts.map +1 -0
  155. package/dist/node/server/ServerSync.js +187 -0
  156. package/dist/node/server/ServerSync.js.map +1 -0
  157. package/dist/node/server/StoreFactory.d.ts +45 -0
  158. package/dist/node/server/StoreFactory.d.ts.map +1 -0
  159. package/dist/node/server/StoreFactory.js +89 -0
  160. package/dist/node/server/StoreFactory.js.map +1 -0
  161. package/dist/node/server/SystemAdminAuth.d.ts +65 -0
  162. package/dist/node/server/SystemAdminAuth.d.ts.map +1 -0
  163. package/dist/node/server/SystemAdminAuth.js +200 -0
  164. package/dist/node/server/SystemAdminAuth.js.map +1 -0
  165. package/dist/node/server/SystemIpAllowlist.d.ts +21 -0
  166. package/dist/node/server/SystemIpAllowlist.d.ts.map +1 -0
  167. package/dist/node/server/SystemIpAllowlist.js +210 -0
  168. package/dist/node/server/SystemIpAllowlist.js.map +1 -0
  169. package/dist/node/server/TenantManager.d.ts +85 -0
  170. package/dist/node/server/TenantManager.d.ts.map +1 -0
  171. package/dist/node/server/TenantManager.js +493 -0
  172. package/dist/node/server/TenantManager.js.map +1 -0
  173. package/dist/node/server/add-to-network.d.ts +20 -0
  174. package/dist/node/server/add-to-network.d.ts.map +1 -0
  175. package/dist/node/server/add-to-network.js +275 -0
  176. package/dist/node/server/add-to-network.js.map +1 -0
  177. package/dist/node/server/config.d.ts +51 -0
  178. package/dist/node/server/config.d.ts.map +1 -0
  179. package/dist/node/server/config.js +218 -0
  180. package/dist/node/server/config.js.map +1 -0
  181. package/dist/node/server/resolveServerPassword.d.ts +7 -0
  182. package/dist/node/server/resolveServerPassword.d.ts.map +1 -0
  183. package/dist/node/server/resolveServerPassword.js +25 -0
  184. package/dist/node/server/resolveServerPassword.js.map +1 -0
  185. package/dist/node/server/server.d.ts +22 -0
  186. package/dist/node/server/server.d.ts.map +1 -0
  187. package/dist/node/server/server.js +225 -0
  188. package/dist/node/server/server.js.map +1 -0
  189. package/dist/node/server/serverinit.d.ts +21 -0
  190. package/dist/node/server/serverinit.d.ts.map +1 -0
  191. package/dist/node/server/serverinit.js +317 -0
  192. package/dist/node/server/serverinit.js.map +1 -0
  193. package/dist/node/server/types.d.ts +162 -0
  194. package/dist/node/server/types.d.ts.map +1 -0
  195. package/dist/node/server/types.js +24 -0
  196. package/dist/node/server/types.js.map +1 -0
  197. package/dist/node/server/validation.d.ts +47 -0
  198. package/dist/node/server/validation.d.ts.map +1 -0
  199. package/dist/node/server/validation.js +114 -0
  200. package/dist/node/server/validation.js.map +1 -0
  201. package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts +48 -0
  202. package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts.map +1 -0
  203. package/dist/reactnative/cache/MMKVLocalCacheStore.js +113 -0
  204. package/dist/reactnative/cache/MMKVLocalCacheStore.js.map +1 -0
  205. package/dist/reactnative/index.d.ts +1 -0
  206. package/dist/reactnative/index.d.ts.map +1 -1
  207. package/dist/reactnative/index.js +4 -1
  208. package/dist/reactnative/index.js.map +1 -1
  209. package/package.json +14 -3
@@ -0,0 +1,16 @@
1
+ import type { PrivateUserId } from "../../core/userid";
2
+ export interface ParsedCliArgs {
3
+ values: Record<string, string>;
4
+ positionals: string[];
5
+ help: boolean;
6
+ }
7
+ export declare class CliUsageError extends Error {
8
+ exitCode: number;
9
+ constructor(message: string, exitCode?: number);
10
+ }
11
+ export declare function parseArgs(argv: string[]): ParsedCliArgs;
12
+ export declare function requireIdentityArg(args: ParsedCliArgs, helpText: string): string;
13
+ export declare function getOptionalArg(args: ParsedCliArgs, name: string): string | undefined;
14
+ export declare function loadPrivateIdentity(path: string): PrivateUserId;
15
+ export declare function promptHiddenLine(question: string): Promise<string>;
16
+ //# sourceMappingURL=cli-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../../../src/node/cli/cli-utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,EAAE,MAAM,CAAC;gBAEL,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAI;CAK1C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CA2BvD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWhF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEpF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAe/D;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgDxE"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliUsageError = void 0;
4
+ exports.parseArgs = parseArgs;
5
+ exports.requireIdentityArg = requireIdentityArg;
6
+ exports.getOptionalArg = getOptionalArg;
7
+ exports.loadPrivateIdentity = loadPrivateIdentity;
8
+ exports.promptHiddenLine = promptHiddenLine;
9
+ const fs_1 = require("fs");
10
+ const readline_1 = require("readline");
11
+ const stream_1 = require("stream");
12
+ class CliUsageError extends Error {
13
+ constructor(message, exitCode = 1) {
14
+ super(message);
15
+ this.name = "CliUsageError";
16
+ this.exitCode = exitCode;
17
+ }
18
+ }
19
+ exports.CliUsageError = CliUsageError;
20
+ function parseArgs(argv) {
21
+ const values = {};
22
+ const positionals = [];
23
+ let help = false;
24
+ for (let i = 0; i < argv.length; i++) {
25
+ const arg = argv[i];
26
+ if (arg === "--help" || arg === "-h") {
27
+ help = true;
28
+ continue;
29
+ }
30
+ if (arg.startsWith("--")) {
31
+ const key = arg.slice(2);
32
+ const nextArg = argv[i + 1];
33
+ if (!nextArg || nextArg.startsWith("-")) {
34
+ throw new CliUsageError(`Missing value for ${arg}`, 1);
35
+ }
36
+ values[key] = nextArg;
37
+ i++;
38
+ continue;
39
+ }
40
+ positionals.push(arg);
41
+ }
42
+ return { values, positionals, help };
43
+ }
44
+ function requireIdentityArg(args, helpText) {
45
+ if (args.help) {
46
+ throw new CliUsageError(helpText, 0);
47
+ }
48
+ const identityPath = args.values.identity;
49
+ if (!identityPath) {
50
+ throw new CliUsageError(helpText, 1);
51
+ }
52
+ return identityPath;
53
+ }
54
+ function getOptionalArg(args, name) {
55
+ return args.values[name];
56
+ }
57
+ function loadPrivateIdentity(path) {
58
+ const raw = (0, fs_1.readFileSync)(path, "utf8");
59
+ const parsed = JSON.parse(raw);
60
+ if (!parsed?.username ||
61
+ !parsed?.userSigningKeyPair?.publicKey ||
62
+ !parsed?.userSigningKeyPair?.privateKey ||
63
+ !parsed?.userEncryptionKeyPair?.publicKey ||
64
+ !parsed?.userEncryptionKeyPair?.privateKey) {
65
+ throw new Error(`Invalid identity file: ${path}`);
66
+ }
67
+ return parsed;
68
+ }
69
+ async function promptHiddenLine(question) {
70
+ if (!process.stdin.isTTY) {
71
+ const rl = (0, readline_1.createInterface)({
72
+ input: process.stdin,
73
+ output: process.stderr,
74
+ });
75
+ const answer = await new Promise((resolve) => {
76
+ rl.question(question, (value) => resolve(value));
77
+ });
78
+ rl.close();
79
+ return answer;
80
+ }
81
+ let muted = false;
82
+ const output = new stream_1.Writable({
83
+ write(chunk, encoding, callback) {
84
+ if (!muted) {
85
+ process.stderr.write(chunk, encoding);
86
+ }
87
+ callback();
88
+ },
89
+ });
90
+ const rl = (0, readline_1.createInterface)({
91
+ input: process.stdin,
92
+ output,
93
+ terminal: true,
94
+ });
95
+ return new Promise((resolve) => {
96
+ const cleanup = () => {
97
+ muted = false;
98
+ rl.close();
99
+ };
100
+ rl.on("SIGINT", () => {
101
+ cleanup();
102
+ process.kill(process.pid, "SIGINT");
103
+ });
104
+ process.stderr.write(question);
105
+ muted = true;
106
+ rl.question("", (answer) => {
107
+ process.stderr.write("\n");
108
+ cleanup();
109
+ resolve(answer);
110
+ });
111
+ });
112
+ }
113
+ //# sourceMappingURL=cli-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../../../src/node/cli/cli-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ export declare const HELP_TEXT = "mindoodb identity:export-public - export public keys from an identity file\n\nUsage:\n npm run identity:export-public -- --identity <path> [--output <path>]\n ./mindoodb-cli.sh identity:export-public <file> [--output <path>]\n\nOptions:\n --identity <path> Path to an *.identity.json file (required)\n --output <path> Write JSON to file instead of stdout\n --help Show this help\n";
3
+ export declare function run(argv?: string[]): Promise<number>;
4
+ //# sourceMappingURL=identity-export-public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-export-public.d.ts","sourceRoot":"","sources":["../../../src/node/cli/identity-export-public.ts"],"names":[],"mappings":";AAeA,eAAO,MAAM,SAAS,yZAUrB,CAAC;AAEF,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBjF"}
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.HELP_TEXT = void 0;
5
+ exports.run = run;
6
+ const fs_1 = require("fs");
7
+ const InMemoryContentAddressedStoreFactory_1 = require("../../appendonlystores/InMemoryContentAddressedStoreFactory");
8
+ const BaseMindooTenantFactory_1 = require("../../core/BaseMindooTenantFactory");
9
+ const NodeCryptoAdapter_1 = require("../crypto/NodeCryptoAdapter");
10
+ const cli_utils_1 = require("./cli-utils");
11
+ exports.HELP_TEXT = `mindoodb identity:export-public - export public keys from an identity file
12
+
13
+ Usage:
14
+ npm run identity:export-public -- --identity <path> [--output <path>]
15
+ ./mindoodb-cli.sh identity:export-public <file> [--output <path>]
16
+
17
+ Options:
18
+ --identity <path> Path to an *.identity.json file (required)
19
+ --output <path> Write JSON to file instead of stdout
20
+ --help Show this help
21
+ `;
22
+ async function run(argv = process.argv.slice(2)) {
23
+ const args = (0, cli_utils_1.parseArgs)(argv);
24
+ const identityPath = (0, cli_utils_1.requireIdentityArg)(args, exports.HELP_TEXT);
25
+ const outputPath = (0, cli_utils_1.getOptionalArg)(args, "output");
26
+ const identity = (0, cli_utils_1.loadPrivateIdentity)(identityPath);
27
+ const factory = new BaseMindooTenantFactory_1.BaseMindooTenantFactory(new InMemoryContentAddressedStoreFactory_1.InMemoryContentAddressedStoreFactory(), new NodeCryptoAdapter_1.NodeCryptoAdapter());
28
+ const publicIdentity = factory.toPublicUserId(identity);
29
+ const json = JSON.stringify(publicIdentity, null, 2);
30
+ if (outputPath) {
31
+ (0, fs_1.writeFileSync)(outputPath, `${json}\n`, "utf8");
32
+ console.log(`Public identity written to: ${outputPath}`);
33
+ }
34
+ else {
35
+ console.log(json);
36
+ }
37
+ return 0;
38
+ }
39
+ function isDirectExecution() {
40
+ const entry = process.argv[1];
41
+ if (!entry)
42
+ return false;
43
+ return /[/\\]identity-export-public\.(ts|js|mjs|cjs)$/.test(entry);
44
+ }
45
+ if (isDirectExecution()) {
46
+ run().then((exitCode) => process.exit(exitCode), (error) => {
47
+ if (error instanceof cli_utils_1.CliUsageError) {
48
+ console.log(error.message);
49
+ process.exit(error.exitCode);
50
+ }
51
+ console.error("Fatal error:", error);
52
+ process.exit(1);
53
+ });
54
+ }
55
+ //# sourceMappingURL=identity-export-public.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-export-public.js","sourceRoot":"","sources":["../../../src/node/cli/identity-export-public.ts"],"names":[],"mappings":";;;;AA2BA,kBAqBC;AA9CD,2BAAmC;AAEnC,sHAAmH;AACnH,gFAA6E;AAC7E,mEAAgE;AAChE,2CAMqB;AAER,QAAA,SAAS,GAAG;;;;;;;;;;CAUxB,CAAC;AAEK,KAAK,UAAU,GAAG,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,IAAA,qBAAS,EAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,YAAY,GAAG,IAAA,8BAAkB,EAAC,IAAI,EAAE,iBAAS,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,IAAA,0BAAc,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAA,+BAAmB,EAAC,YAAY,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,IAAI,iDAAuB,CACzC,IAAI,2EAAoC,EAAE,EAC1C,IAAI,qCAAiB,EAAE,CACxB,CAAC;IACF,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAErD,IAAI,UAAU,EAAE,CAAC;QACf,IAAA,kBAAa,EAAC,UAAU,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,+CAA+C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,IAAI,iBAAiB,EAAE,EAAE,CAAC;IACxB,GAAG,EAAE,CAAC,IAAI,CACR,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EACpC,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,KAAK,YAAY,yBAAa,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ export declare const HELP_TEXT = "mindoodb identity:info - display public information from an identity file\n\nUsage:\n npm run identity:info -- --identity <path>\n ./mindoodb-cli.sh identity:info <file>\n\nOptions:\n --identity <path> Path to an *.identity.json file (required)\n --help Show this help\n";
3
+ export declare function run(argv?: string[]): Promise<number>;
4
+ //# sourceMappingURL=identity-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-info.d.ts","sourceRoot":"","sources":["../../../src/node/cli/identity-info.ts"],"names":[],"mappings":";AAKA,eAAO,MAAM,SAAS,sSASrB,CAAC;AAYF,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAejF"}
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.HELP_TEXT = void 0;
5
+ exports.run = run;
6
+ const NodeCryptoAdapter_1 = require("../crypto/NodeCryptoAdapter");
7
+ const cli_utils_1 = require("./cli-utils");
8
+ exports.HELP_TEXT = `mindoodb identity:info - display public information from an identity file
9
+
10
+ Usage:
11
+ npm run identity:info -- --identity <path>
12
+ ./mindoodb-cli.sh identity:info <file>
13
+
14
+ Options:
15
+ --identity <path> Path to an *.identity.json file (required)
16
+ --help Show this help
17
+ `;
18
+ async function hashUsernameHex(username) {
19
+ const cryptoAdapter = new NodeCryptoAdapter_1.NodeCryptoAdapter();
20
+ const subtle = cryptoAdapter.getSubtle();
21
+ const bytes = new TextEncoder().encode(username.toLowerCase());
22
+ const digest = await subtle.digest("SHA-256", bytes);
23
+ return Array.from(new Uint8Array(digest))
24
+ .map((b) => b.toString(16).padStart(2, "0"))
25
+ .join("");
26
+ }
27
+ async function run(argv = process.argv.slice(2)) {
28
+ const args = (0, cli_utils_1.parseArgs)(argv);
29
+ const identityPath = (0, cli_utils_1.requireIdentityArg)(args, exports.HELP_TEXT);
30
+ const identity = (0, cli_utils_1.loadPrivateIdentity)(identityPath);
31
+ const usernameHash = await hashUsernameHex(identity.username);
32
+ console.log(`Identity file: ${identityPath}`);
33
+ console.log(`Username: ${identity.username}`);
34
+ console.log(`Public user ID (hex): ${usernameHash}`);
35
+ console.log(`Signing public key:\n${identity.userSigningKeyPair.publicKey}`);
36
+ console.log(`Encryption public key:\n${identity.userEncryptionKeyPair.publicKey}`);
37
+ console.log(`Salt strings: signing, encryption`);
38
+ console.log(`Encrypted private keys present: yes`);
39
+ return 0;
40
+ }
41
+ function isDirectExecution() {
42
+ const entry = process.argv[1];
43
+ if (!entry)
44
+ return false;
45
+ return /[/\\]identity-info\.(ts|js|mjs|cjs)$/.test(entry);
46
+ }
47
+ if (isDirectExecution()) {
48
+ run().then((exitCode) => process.exit(exitCode), (error) => {
49
+ if (error instanceof cli_utils_1.CliUsageError) {
50
+ console.log(error.message);
51
+ process.exit(error.exitCode);
52
+ }
53
+ console.error("Fatal error:", error);
54
+ process.exit(1);
55
+ });
56
+ }
57
+ //# sourceMappingURL=identity-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-info.js","sourceRoot":"","sources":["../../../src/node/cli/identity-info.ts"],"names":[],"mappings":";;;;AA0BA,kBAeC;AAvCD,mEAAgE;AAChE,2CAAgG;AAEnF,QAAA,SAAS,GAAG;;;;;;;;;CASxB,CAAC;AAEF,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,MAAM,aAAa,GAAG,IAAI,qCAAiB,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,GAAG,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,IAAA,qBAAS,EAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,YAAY,GAAG,IAAA,8BAAkB,EAAC,IAAI,EAAE,iBAAS,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,IAAA,+BAAmB,EAAC,YAAY,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,2BAA2B,QAAQ,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAEnD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,IAAI,iBAAiB,EAAE,EAAE,CAAC;IACxB,GAAG,EAAE,CAAC,IAAI,CACR,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EACpC,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,KAAK,YAAY,yBAAa,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from "../core";
2
2
  export { NodeCryptoAdapter, createCryptoAdapter } from "./crypto/NodeCryptoAdapter";
3
3
  export { BasicOnDiskContentAddressedStore, BasicOnDiskContentAddressedStoreFactory, } from "./appendonlystores/BasicOnDiskContentAddressedStore";
4
+ export { FileSystemLocalCacheStore } from "./cache/FileSystemLocalCacheStore";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAIA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGpF,OAAO,EACL,gCAAgC,EAChC,uCAAuC,GACxC,MAAM,qDAAqD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAIA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGpF,OAAO,EACL,gCAAgC,EAChC,uCAAuC,GACxC,MAAM,qDAAqD,CAAC;AAG7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC"}
@@ -16,7 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
17
17
  };
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.BasicOnDiskContentAddressedStoreFactory = exports.BasicOnDiskContentAddressedStore = exports.createCryptoAdapter = exports.NodeCryptoAdapter = void 0;
19
+ exports.FileSystemLocalCacheStore = exports.BasicOnDiskContentAddressedStoreFactory = exports.BasicOnDiskContentAddressedStore = exports.createCryptoAdapter = exports.NodeCryptoAdapter = void 0;
20
20
  // Re-export all core exports
21
21
  __exportStar(require("../core"), exports);
22
22
  // Node.js-specific crypto adapter
@@ -27,4 +27,7 @@ Object.defineProperty(exports, "createCryptoAdapter", { enumerable: true, get: f
27
27
  var BasicOnDiskContentAddressedStore_1 = require("./appendonlystores/BasicOnDiskContentAddressedStore");
28
28
  Object.defineProperty(exports, "BasicOnDiskContentAddressedStore", { enumerable: true, get: function () { return BasicOnDiskContentAddressedStore_1.BasicOnDiskContentAddressedStore; } });
29
29
  Object.defineProperty(exports, "BasicOnDiskContentAddressedStoreFactory", { enumerable: true, get: function () { return BasicOnDiskContentAddressedStore_1.BasicOnDiskContentAddressedStoreFactory; } });
30
+ // Node.js-specific cache store
31
+ var FileSystemLocalCacheStore_1 = require("./cache/FileSystemLocalCacheStore");
32
+ Object.defineProperty(exports, "FileSystemLocalCacheStore", { enumerable: true, get: function () { return FileSystemLocalCacheStore_1.FileSystemLocalCacheStore; } });
30
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":";AAAA,2BAA2B;AAC3B,wEAAwE;;;;;;;;;;;;;;;;;AAExE,6BAA6B;AAC7B,0CAAwB;AAExB,kCAAkC;AAClC,gEAAoF;AAA3E,sHAAA,iBAAiB,OAAA;AAAE,wHAAA,mBAAmB,OAAA;AAE/C,mDAAmD;AACnD,wGAG6D;AAF3D,oJAAA,gCAAgC,OAAA;AAChC,2JAAA,uCAAuC,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":";AAAA,2BAA2B;AAC3B,wEAAwE;;;;;;;;;;;;;;;;;AAExE,6BAA6B;AAC7B,0CAAwB;AAExB,kCAAkC;AAClC,gEAAoF;AAA3E,sHAAA,iBAAiB,OAAA;AAAE,wHAAA,mBAAmB,OAAA;AAE/C,mDAAmD;AACnD,wGAG6D;AAF3D,oJAAA,gCAAgC,OAAA;AAChC,2JAAA,uCAAuC,OAAA;AAGzC,+BAA+B;AAC/B,+EAA8E;AAArE,sIAAA,yBAAyB,OAAA"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Capability matching engine for system admin authorization.
3
+ *
4
+ * Parses `METHOD:PATHPATTERN` rules from config.json and checks whether
5
+ * a given (method, path, username, publicsignkey) tuple is authorized.
6
+ *
7
+ * Matching semantics:
8
+ * - Rule method `ALL` matches any HTTP method.
9
+ * - Path patterns use `*` as a wildcard that matches any remaining characters.
10
+ * - All matching rules are unioned; access is granted if *any* matching rule
11
+ * lists a principal with both the correct username AND publicsignkey.
12
+ */
13
+ import type { ServerConfig } from "./types";
14
+ export declare class CapabilityMatcher {
15
+ private rules;
16
+ constructor(config: ServerConfig);
17
+ /**
18
+ * Hot-swap the internal rules from a new config.
19
+ * Existing authorization decisions in-flight are unaffected;
20
+ * subsequent calls to `isAuthorized` / `principalExists` use the new rules.
21
+ */
22
+ reload(config: ServerConfig): void;
23
+ private parseConfig;
24
+ /**
25
+ * Check whether a request is authorized.
26
+ *
27
+ * @returns `true` if any matching capability rule lists the given principal.
28
+ */
29
+ isAuthorized(httpMethod: string, httpPath: string, username: string, publicsignkey: string): boolean;
30
+ /**
31
+ * Check whether a principal exists in *any* capability rule.
32
+ * Used during challenge generation to reject unknown principals early.
33
+ */
34
+ principalExists(username: string, publicsignkey: string): boolean;
35
+ private methodMatches;
36
+ private principalMatches;
37
+ private isTenantCreationRule;
38
+ private isTenantCreationRequest;
39
+ /**
40
+ * Match a path pattern against a request path.
41
+ * `*` matches any remaining characters (greedy).
42
+ */
43
+ private pathMatches;
44
+ }
45
+ //# sourceMappingURL=CapabilityMatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CapabilityMatcher.d.ts","sourceRoot":"","sources":["../../../src/node/server/CapabilityMatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,SAAS,CAAC;AASlE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAe;gBAEhB,MAAM,EAAE,YAAY;IAKhC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAKlC,OAAO,CAAC,WAAW;IAUnB;;;;OAIG;IACH,YAAY,CACV,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO;IA2BV;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAuBjE,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,uBAAuB;IAI/B;;;OAGG;IACH,OAAO,CAAC,WAAW;CAoBpB"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * Capability matching engine for system admin authorization.
4
+ *
5
+ * Parses `METHOD:PATHPATTERN` rules from config.json and checks whether
6
+ * a given (method, path, username, publicsignkey) tuple is authorized.
7
+ *
8
+ * Matching semantics:
9
+ * - Rule method `ALL` matches any HTTP method.
10
+ * - Path patterns use `*` as a wildcard that matches any remaining characters.
11
+ * - All matching rules are unioned; access is granted if *any* matching rule
12
+ * lists a principal with both the correct username AND publicsignkey.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CapabilityMatcher = void 0;
16
+ const config_1 = require("./config");
17
+ class CapabilityMatcher {
18
+ constructor(config) {
19
+ this.rules = [];
20
+ this.parseConfig(config);
21
+ }
22
+ /**
23
+ * Hot-swap the internal rules from a new config.
24
+ * Existing authorization decisions in-flight are unaffected;
25
+ * subsequent calls to `isAuthorized` / `principalExists` use the new rules.
26
+ */
27
+ reload(config) {
28
+ this.rules = [];
29
+ this.parseConfig(config);
30
+ }
31
+ parseConfig(config) {
32
+ for (const [ruleKey, principals] of Object.entries(config.capabilities)) {
33
+ const colonIdx = ruleKey.indexOf(":");
34
+ const method = ruleKey.substring(0, colonIdx).toUpperCase();
35
+ const pathPattern = ruleKey.substring(colonIdx + 1);
36
+ this.rules.push({ method, pathPattern, principals });
37
+ }
38
+ }
39
+ /**
40
+ * Check whether a request is authorized.
41
+ *
42
+ * @returns `true` if any matching capability rule lists the given principal.
43
+ */
44
+ isAuthorized(httpMethod, httpPath, username, publicsignkey) {
45
+ const method = httpMethod.toUpperCase();
46
+ const normalizedUsername = username.toLowerCase();
47
+ for (const rule of this.rules) {
48
+ if (!this.methodMatches(rule.method, method))
49
+ continue;
50
+ if (!this.pathMatches(rule.pathPattern, httpPath))
51
+ continue;
52
+ for (const principal of rule.principals) {
53
+ if (this.principalMatches(rule, method, httpPath, principal, normalizedUsername, publicsignkey)) {
54
+ return true;
55
+ }
56
+ }
57
+ }
58
+ return false;
59
+ }
60
+ /**
61
+ * Check whether a principal exists in *any* capability rule.
62
+ * Used during challenge generation to reject unknown principals early.
63
+ */
64
+ principalExists(username, publicsignkey) {
65
+ const normalizedUsername = username.toLowerCase();
66
+ for (const rule of this.rules) {
67
+ for (const principal of rule.principals) {
68
+ if (this.principalMatches(rule, rule.method, rule.pathPattern, principal, normalizedUsername, publicsignkey)) {
69
+ return true;
70
+ }
71
+ }
72
+ }
73
+ return false;
74
+ }
75
+ methodMatches(ruleMethod, requestMethod) {
76
+ return ruleMethod === "ALL" || ruleMethod === requestMethod;
77
+ }
78
+ principalMatches(rule, requestMethod, requestPath, principal, normalizedUsername, publicsignkey) {
79
+ if (principal.username.toLowerCase() === normalizedUsername &&
80
+ principal.publicsignkey === publicsignkey) {
81
+ return true;
82
+ }
83
+ if ((0, config_1.isWildcardSystemAdminPrincipal)(principal) &&
84
+ this.isTenantCreationRule(rule.method, rule.pathPattern) &&
85
+ this.isTenantCreationRequest(requestMethod, requestPath)) {
86
+ return true;
87
+ }
88
+ return false;
89
+ }
90
+ isTenantCreationRule(method, pathPattern) {
91
+ return method === "POST" && pathPattern.startsWith("/system/tenants/");
92
+ }
93
+ isTenantCreationRequest(method, path) {
94
+ return method === "POST" && path.startsWith("/system/tenants/");
95
+ }
96
+ /**
97
+ * Match a path pattern against a request path.
98
+ * `*` matches any remaining characters (greedy).
99
+ */
100
+ pathMatches(pattern, requestPath) {
101
+ const starIdx = pattern.indexOf("*");
102
+ if (starIdx === -1) {
103
+ return pattern === requestPath;
104
+ }
105
+ const prefix = pattern.substring(0, starIdx);
106
+ const suffix = pattern.substring(starIdx + 1);
107
+ if (!requestPath.startsWith(prefix)) {
108
+ return false;
109
+ }
110
+ if (suffix.length === 0) {
111
+ return true;
112
+ }
113
+ return requestPath.endsWith(suffix);
114
+ }
115
+ }
116
+ exports.CapabilityMatcher = CapabilityMatcher;
117
+ //# sourceMappingURL=CapabilityMatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CapabilityMatcher.js","sourceRoot":"","sources":["../../../src/node/server/CapabilityMatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * MindooDB Server - Express HTTP server implementing the sync API.
3
+ *
4
+ * Security features:
5
+ * - Capabilities-based system admin authorization via config.json
6
+ * - Challenge/response (Ed25519) authentication for /system/* endpoints
7
+ * - JWT-based session management for system admins
8
+ * - Input validation on all identifiers (path traversal prevention)
9
+ * - Rate limiting per endpoint tier
10
+ * - Security headers (helmet) and CORS
11
+ * - Error sanitization (no internal details leaked)
12
+ * - Request size limits and timeouts
13
+ */
14
+ import express from "express";
15
+ import { TenantManager } from "./TenantManager";
16
+ import { SystemAdminAuthService } from "./SystemAdminAuth";
17
+ import type { ServerConfig } from "./types";
18
+ declare global {
19
+ namespace Express {
20
+ interface Request {
21
+ tenantId?: string;
22
+ systemAdmin?: {
23
+ username: string;
24
+ publicsignkey: string;
25
+ };
26
+ }
27
+ }
28
+ }
29
+ export declare class MindooDBServer {
30
+ private app;
31
+ private tenantManager;
32
+ private capabilityMatcher;
33
+ private systemAdminAuth;
34
+ private readonly staticDir;
35
+ private serverConfig;
36
+ private configPath;
37
+ constructor(dataDir: string, serverPassword?: string, staticDir?: string, config?: ServerConfig, configPath?: string);
38
+ getApp(): express.Application;
39
+ getTenantManager(): TenantManager;
40
+ getSystemAdminAuth(): SystemAdminAuthService;
41
+ getServerConfig(): ServerConfig;
42
+ getConfigPath(): string;
43
+ reloadConfig(newConfig: ServerConfig): void;
44
+ listen(port: number): void;
45
+ listenTls(port: number, certPath: string, keyPath: string): void;
46
+ private setupMiddleware;
47
+ private setupRoutes;
48
+ /**
49
+ * JWT-based middleware for /system/* routes (excluding /system/auth/*).
50
+ * Extracts and validates the bearer token, then checks capabilities
51
+ * for the current (method, path, username, publicsignkey).
52
+ */
53
+ private systemAdminMiddleware;
54
+ private tenantMiddleware;
55
+ private setupSystemRoutes;
56
+ private handleSystemChallenge;
57
+ private handleSystemAuthenticate;
58
+ private handleUpdateConfig;
59
+ private createTenantRouter;
60
+ private validateDbId;
61
+ private handleChallenge;
62
+ private handleAuthenticate;
63
+ private handleFindNewEntries;
64
+ private handleFindNewEntriesForDoc;
65
+ private handleFindEntries;
66
+ private handleScanEntriesSince;
67
+ private handleGetIdBloomSummary;
68
+ private handleGetCapabilities;
69
+ private handleGetCompactionStatus;
70
+ private handleGetEntries;
71
+ private handlePutEntries;
72
+ private handleHasEntries;
73
+ private handleGetAllIds;
74
+ private handleResolveDependencies;
75
+ private handlePlanDocumentMaterialization;
76
+ private handlePlanDocumentMaterializationBatch;
77
+ private handleTriggerSync;
78
+ private extractToken;
79
+ private handleRequestError;
80
+ private getStatusForErrorType;
81
+ private errorHandler;
82
+ private serializeEntryMetadata;
83
+ private deserializeEntry;
84
+ private uint8ArrayToBase64;
85
+ private base64ToUint8Array;
86
+ }
87
+ //# sourceMappingURL=MindooDBServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MindooDBServer.d.ts","sourceRoot":"","sources":["../../../src/node/server/MindooDBServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,OAAoD,MAAM,SAAS,CAAC;AAqB3E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAc3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAwB5C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,WAAW,CAAC,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAC;gBAAC,aAAa,EAAE,MAAM,CAAA;aAAE,CAAC;SAC3D;KACF;CACF;AAsCD,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAS;gBAGzB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,YAAY,EACrB,UAAU,CAAC,EAAE,MAAM;IA8BrB,MAAM,IAAI,OAAO,CAAC,WAAW;IAI7B,gBAAgB,IAAI,aAAa;IAIjC,kBAAkB,IAAI,sBAAsB;IAI5C,eAAe,IAAI,YAAY;IAI/B,aAAa,IAAI,MAAM;IAIvB,YAAY,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAM3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ1B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAahE,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,WAAW;IAqEnB;;;;OAIG;YACW,qBAAqB;IA4CnC,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,iBAAiB;YAoVX,qBAAqB;YAmCrB,wBAAwB;YA2BxB,kBAAkB;IA2DhC,OAAO,CAAC,kBAAkB;IA4C1B,OAAO,CAAC,YAAY;YAMN,eAAe;YAef,kBAAkB;YAwBlB,oBAAoB;YAmBpB,0BAA0B;YAuB1B,iBAAiB;YAuBjB,sBAAsB;YA8BtB,uBAAuB;YAevB,qBAAqB;YAarB,yBAAyB;YAezB,gBAAgB;YAsBhB,gBAAgB;YAqBhB,gBAAgB;YAiBhB,eAAe;YAef,yBAAyB;YAoBzB,iCAAiC;YAqBjC,sCAAsC;YAoBtC,iBAAiB;IAM/B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,kBAAkB;CAG3B"}