mindoodb 0.0.84 → 0.0.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/README-server.md +1 -0
  2. package/README.md +6 -4
  3. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +15 -0
  4. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -1
  5. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +75 -1
  6. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -1
  7. package/dist/appendonlystores/network/HttpTransport.d.ts +9 -1
  8. package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -1
  9. package/dist/appendonlystores/network/HttpTransport.js +38 -10
  10. package/dist/appendonlystores/network/HttpTransport.js.map +1 -1
  11. package/dist/cloudflare/DurableObjectSql.d.ts +56 -0
  12. package/dist/cloudflare/DurableObjectSql.d.ts.map +1 -0
  13. package/dist/cloudflare/DurableObjectSql.js +180 -0
  14. package/dist/cloudflare/DurableObjectSql.js.map +1 -0
  15. package/dist/cloudflare/MindooDatabaseObject.d.ts +86 -0
  16. package/dist/cloudflare/MindooDatabaseObject.d.ts.map +1 -0
  17. package/dist/cloudflare/MindooDatabaseObject.js +614 -0
  18. package/dist/cloudflare/MindooDatabaseObject.js.map +1 -0
  19. package/dist/cloudflare/MindooServerObject.d.ts +63 -0
  20. package/dist/cloudflare/MindooServerObject.d.ts.map +1 -0
  21. package/dist/cloudflare/MindooServerObject.js +521 -0
  22. package/dist/cloudflare/MindooServerObject.js.map +1 -0
  23. package/dist/cloudflare/WorkersCryptoAdapter.d.ts +7 -0
  24. package/dist/cloudflare/WorkersCryptoAdapter.d.ts.map +1 -0
  25. package/dist/cloudflare/WorkersCryptoAdapter.js +14 -0
  26. package/dist/cloudflare/WorkersCryptoAdapter.js.map +1 -0
  27. package/dist/cloudflare/host.d.ts +49 -0
  28. package/dist/cloudflare/host.d.ts.map +1 -0
  29. package/dist/cloudflare/host.js +104 -0
  30. package/dist/cloudflare/host.js.map +1 -0
  31. package/dist/cloudflare/http.d.ts +91 -0
  32. package/dist/cloudflare/http.d.ts.map +1 -0
  33. package/dist/cloudflare/http.js +266 -0
  34. package/dist/cloudflare/http.js.map +1 -0
  35. package/dist/cloudflare/index.d.ts +12 -0
  36. package/dist/cloudflare/index.d.ts.map +1 -0
  37. package/dist/cloudflare/index.js +20 -0
  38. package/dist/cloudflare/index.js.map +1 -0
  39. package/dist/cloudflare/storeRpc.d.ts +22 -0
  40. package/dist/cloudflare/storeRpc.d.ts.map +1 -0
  41. package/dist/cloudflare/storeRpc.js +85 -0
  42. package/dist/cloudflare/storeRpc.js.map +1 -0
  43. package/dist/cloudflare/types.d.ts +101 -0
  44. package/dist/cloudflare/types.d.ts.map +1 -0
  45. package/dist/cloudflare/types.js +10 -0
  46. package/dist/cloudflare/types.js.map +1 -0
  47. package/dist/cloudflare/worker.d.ts +25 -0
  48. package/dist/cloudflare/worker.d.ts.map +1 -0
  49. package/dist/cloudflare/worker.js +170 -0
  50. package/dist/cloudflare/worker.js.map +1 -0
  51. package/dist/core/BaseMindooDB.d.ts +43 -1
  52. package/dist/core/BaseMindooDB.d.ts.map +1 -1
  53. package/dist/core/BaseMindooDB.js +209 -87
  54. package/dist/core/BaseMindooDB.js.map +1 -1
  55. package/dist/core/BaseMindooTenant.d.ts +14 -0
  56. package/dist/core/BaseMindooTenant.d.ts.map +1 -1
  57. package/dist/core/BaseMindooTenant.js +46 -0
  58. package/dist/core/BaseMindooTenant.js.map +1 -1
  59. package/dist/core/BaseMindooTenantDirectory.d.ts +10 -0
  60. package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
  61. package/dist/core/BaseMindooTenantDirectory.js +79 -8
  62. package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
  63. package/dist/core/ChangeDocDraft.d.ts +133 -0
  64. package/dist/core/ChangeDocDraft.d.ts.map +1 -0
  65. package/dist/core/ChangeDocDraft.js +492 -0
  66. package/dist/core/ChangeDocDraft.js.map +1 -0
  67. package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts.map +1 -1
  68. package/dist/core/appendonlystores/InMemoryContentAddressedStore.js +1 -0
  69. package/dist/core/appendonlystores/InMemoryContentAddressedStore.js.map +1 -1
  70. package/dist/core/appendonlystores/network/AuthenticationService.d.ts +8 -0
  71. package/dist/core/appendonlystores/network/AuthenticationService.d.ts.map +1 -1
  72. package/dist/core/appendonlystores/network/AuthenticationService.js +19 -0
  73. package/dist/core/appendonlystores/network/AuthenticationService.js.map +1 -1
  74. package/dist/core/appendonlystores/network/IrohStreamIO.d.ts.map +1 -1
  75. package/dist/core/appendonlystores/network/IrohStreamIO.js +3 -23
  76. package/dist/core/appendonlystores/network/IrohStreamIO.js.map +1 -1
  77. package/dist/core/appendonlystores/network/NetworkTransport.d.ts +7 -1
  78. package/dist/core/appendonlystores/network/NetworkTransport.d.ts.map +1 -1
  79. package/dist/core/appendonlystores/network/types.d.ts +23 -0
  80. package/dist/core/appendonlystores/network/types.d.ts.map +1 -1
  81. package/dist/core/appendonlystores/network/types.js.map +1 -1
  82. package/dist/core/appendonlystores/rpc/storeRpcCodec.d.ts.map +1 -1
  83. package/dist/core/appendonlystores/rpc/storeRpcCodec.js +3 -23
  84. package/dist/core/appendonlystores/rpc/storeRpcCodec.js.map +1 -1
  85. package/dist/core/appendonlystores/sqlite/SqliteContentAddressedStore.d.ts.map +1 -1
  86. package/dist/core/appendonlystores/sqlite/SqliteContentAddressedStore.js +21 -30
  87. package/dist/core/appendonlystores/sqlite/SqliteContentAddressedStore.js.map +1 -1
  88. package/dist/core/appendonlystores/sqlite/SqliteDriver.d.ts +37 -1
  89. package/dist/core/appendonlystores/sqlite/SqliteDriver.d.ts.map +1 -1
  90. package/dist/core/appendonlystores/sqlite/SqliteDriver.js +99 -40
  91. package/dist/core/appendonlystores/sqlite/SqliteDriver.js.map +1 -1
  92. package/dist/core/appendonlystores/syncStores.d.ts.map +1 -1
  93. package/dist/core/appendonlystores/syncStores.js +253 -168
  94. package/dist/core/appendonlystores/syncStores.js.map +1 -1
  95. package/dist/core/appendonlystores/types.d.ts +8 -0
  96. package/dist/core/appendonlystores/types.d.ts.map +1 -1
  97. package/dist/core/appendonlystores/types.js.map +1 -1
  98. package/dist/core/expressions/evaluateExpression.d.ts +8 -0
  99. package/dist/core/expressions/evaluateExpression.d.ts.map +1 -1
  100. package/dist/core/expressions/evaluateExpression.js +29 -4
  101. package/dist/core/expressions/evaluateExpression.js.map +1 -1
  102. package/dist/core/expressions/metadata.js +4 -4
  103. package/dist/core/expressions/metadata.js.map +1 -1
  104. package/dist/core/types.d.ts +61 -2
  105. package/dist/core/types.d.ts.map +1 -1
  106. package/dist/core/types.js.map +1 -1
  107. package/dist/core/uri/MindooURI.d.ts.map +1 -1
  108. package/dist/core/uri/MindooURI.js +3 -24
  109. package/dist/core/uri/MindooURI.js.map +1 -1
  110. package/dist/core/utils/base64.d.ts +17 -0
  111. package/dist/core/utils/base64.d.ts.map +1 -0
  112. package/dist/core/utils/base64.js +54 -0
  113. package/dist/core/utils/base64.js.map +1 -0
  114. package/dist/core/utils/idGeneration.d.ts.map +1 -1
  115. package/dist/core/utils/idGeneration.js +14 -3
  116. package/dist/core/utils/idGeneration.js.map +1 -1
  117. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +1 -1
  118. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js +1 -0
  119. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js.map +1 -1
  120. package/dist/node/server/FsServerDataStore.d.ts +23 -0
  121. package/dist/node/server/FsServerDataStore.d.ts.map +1 -0
  122. package/dist/node/server/FsServerDataStore.js +59 -0
  123. package/dist/node/server/FsServerDataStore.js.map +1 -0
  124. package/dist/node/server/IrohServerEndpoint.d.ts +1 -1
  125. package/dist/node/server/IrohServerEndpoint.d.ts.map +1 -1
  126. package/dist/node/server/IrohServerRpc.d.ts +5 -5
  127. package/dist/node/server/IrohServerRpc.d.ts.map +1 -1
  128. package/dist/node/server/IrohServerRpc.js +1 -1
  129. package/dist/node/server/IrohServerRpc.js.map +1 -1
  130. package/dist/node/server/MindooDBServer.d.ts +29 -150
  131. package/dist/node/server/MindooDBServer.d.ts.map +1 -1
  132. package/dist/node/server/MindooDBServer.js +160 -1568
  133. package/dist/node/server/MindooDBServer.js.map +1 -1
  134. package/dist/node/server/PurgedDocRegistry.d.ts +4 -27
  135. package/dist/node/server/PurgedDocRegistry.d.ts.map +1 -1
  136. package/dist/node/server/PurgedDocRegistry.js +6 -83
  137. package/dist/node/server/PurgedDocRegistry.js.map +1 -1
  138. package/dist/node/server/StoreFactory.d.ts +1 -1
  139. package/dist/node/server/StoreFactory.d.ts.map +1 -1
  140. package/dist/node/server/TenantManager.d.ts +16 -284
  141. package/dist/node/server/TenantManager.d.ts.map +1 -1
  142. package/dist/node/server/TenantManager.js +35 -1168
  143. package/dist/node/server/TenantManager.js.map +1 -1
  144. package/dist/node/server/add-to-network.js +1 -1
  145. package/dist/node/server/add-to-network.js.map +1 -1
  146. package/dist/node/server/compressionMiddleware.d.ts +14 -0
  147. package/dist/node/server/compressionMiddleware.d.ts.map +1 -1
  148. package/dist/node/server/compressionMiddleware.js +46 -3
  149. package/dist/node/server/compressionMiddleware.js.map +1 -1
  150. package/dist/node/server/config.d.ts +11 -15
  151. package/dist/node/server/config.d.ts.map +1 -1
  152. package/dist/node/server/config.js +30 -245
  153. package/dist/node/server/config.js.map +1 -1
  154. package/dist/node/server/expressAdapter.d.ts +23 -0
  155. package/dist/node/server/expressAdapter.d.ts.map +1 -0
  156. package/dist/node/server/expressAdapter.js +108 -0
  157. package/dist/node/server/expressAdapter.js.map +1 -0
  158. package/dist/node/server/nativeIrohStreamIO.d.ts +1 -1
  159. package/dist/node/server/nativeIrohStreamIO.d.ts.map +1 -1
  160. package/dist/node/server/peer/FileClusterAuditStorage.d.ts +16 -0
  161. package/dist/node/server/peer/FileClusterAuditStorage.d.ts.map +1 -0
  162. package/dist/node/server/peer/FileClusterAuditStorage.js +39 -0
  163. package/dist/node/server/peer/FileClusterAuditStorage.js.map +1 -0
  164. package/dist/node/server/peer/IrohPeerLink.d.ts +1 -1
  165. package/dist/node/server/peer/IrohPeerLink.d.ts.map +1 -1
  166. package/dist/node/server/peer/routes.d.ts +10 -44
  167. package/dist/node/server/peer/routes.d.ts.map +1 -1
  168. package/dist/node/server/peer/routes.js +33 -275
  169. package/dist/node/server/peer/routes.js.map +1 -1
  170. package/dist/node/server/resolveServerPassword.js +1 -1
  171. package/dist/node/server/resolveServerPassword.js.map +1 -1
  172. package/dist/node/server/server.js +1 -1
  173. package/dist/node/server/server.js.map +1 -1
  174. package/dist/node/server/serverinit.js +1 -1
  175. package/dist/node/server/serverinit.js.map +1 -1
  176. package/dist/server/CapabilityMatcher.d.ts +60 -0
  177. package/dist/server/CapabilityMatcher.d.ts.map +1 -0
  178. package/dist/server/CapabilityMatcher.js +138 -0
  179. package/dist/server/CapabilityMatcher.js.map +1 -0
  180. package/dist/server/DeviceDiscoveryService.d.ts +36 -0
  181. package/dist/server/DeviceDiscoveryService.d.ts.map +1 -0
  182. package/dist/server/DeviceDiscoveryService.js +165 -0
  183. package/dist/server/DeviceDiscoveryService.js.map +1 -0
  184. package/dist/server/PurgedDocRegistry.d.ts +35 -0
  185. package/dist/server/PurgedDocRegistry.d.ts.map +1 -0
  186. package/dist/server/PurgedDocRegistry.js +90 -0
  187. package/dist/server/PurgedDocRegistry.js.map +1 -0
  188. package/dist/server/ServerDataStore.d.ts +67 -0
  189. package/dist/server/ServerDataStore.d.ts.map +1 -0
  190. package/dist/server/ServerDataStore.js +88 -0
  191. package/dist/server/ServerDataStore.js.map +1 -0
  192. package/dist/server/SyncEventBus.d.ts +39 -0
  193. package/dist/server/SyncEventBus.d.ts.map +1 -0
  194. package/dist/server/SyncEventBus.js +41 -0
  195. package/dist/server/SyncEventBus.js.map +1 -0
  196. package/dist/server/SystemAdminAuth.d.ts +82 -0
  197. package/dist/server/SystemAdminAuth.d.ts.map +1 -0
  198. package/dist/server/SystemAdminAuth.js +228 -0
  199. package/dist/server/SystemAdminAuth.js.map +1 -0
  200. package/dist/server/TenantManager.d.ts +330 -0
  201. package/dist/server/TenantManager.d.ts.map +1 -0
  202. package/dist/server/TenantManager.js +1186 -0
  203. package/dist/server/TenantManager.js.map +1 -0
  204. package/dist/server/http/MindooDBServerCore.d.ts +313 -0
  205. package/dist/server/http/MindooDBServerCore.d.ts.map +1 -0
  206. package/dist/server/http/MindooDBServerCore.js +1403 -0
  207. package/dist/server/http/MindooDBServerCore.js.map +1 -0
  208. package/dist/server/http/types.d.ts +89 -0
  209. package/dist/server/http/types.d.ts.map +1 -0
  210. package/dist/server/http/types.js +29 -0
  211. package/dist/server/http/types.js.map +1 -0
  212. package/dist/server/index.d.ts +32 -0
  213. package/dist/server/index.d.ts.map +1 -0
  214. package/dist/server/index.js +76 -0
  215. package/dist/server/index.js.map +1 -0
  216. package/dist/server/peer/ClusterAuditLog.d.ts +71 -0
  217. package/dist/server/peer/ClusterAuditLog.d.ts.map +1 -0
  218. package/dist/server/peer/ClusterAuditLog.js +81 -0
  219. package/dist/server/peer/ClusterAuditLog.js.map +1 -0
  220. package/dist/server/peer/ClusterJobRunner.d.ts +43 -0
  221. package/dist/server/peer/ClusterJobRunner.d.ts.map +1 -0
  222. package/dist/server/peer/ClusterJobRunner.js +119 -0
  223. package/dist/server/peer/ClusterJobRunner.js.map +1 -0
  224. package/dist/server/peer/ClusterManager.d.ts +149 -0
  225. package/dist/server/peer/ClusterManager.d.ts.map +1 -0
  226. package/dist/server/peer/ClusterManager.js +292 -0
  227. package/dist/server/peer/ClusterManager.js.map +1 -0
  228. package/dist/server/peer/PeerAuthService.d.ts +69 -0
  229. package/dist/server/peer/PeerAuthService.d.ts.map +1 -0
  230. package/dist/server/peer/PeerAuthService.js +208 -0
  231. package/dist/server/peer/PeerAuthService.js.map +1 -0
  232. package/dist/server/peer/PeerReplicator.d.ts +303 -0
  233. package/dist/server/peer/PeerReplicator.d.ts.map +1 -0
  234. package/dist/server/peer/PeerReplicator.js +1071 -0
  235. package/dist/server/peer/PeerReplicator.js.map +1 -0
  236. package/dist/server/peer/clusterHttp.d.ts +113 -0
  237. package/dist/server/peer/clusterHttp.d.ts.map +1 -0
  238. package/dist/server/peer/clusterHttp.js +290 -0
  239. package/dist/server/peer/clusterHttp.js.map +1 -0
  240. package/dist/server/peer/types.d.ts +244 -0
  241. package/dist/server/peer/types.d.ts.map +1 -0
  242. package/dist/server/peer/types.js +189 -0
  243. package/dist/server/peer/types.js.map +1 -0
  244. package/dist/server/rateLimits.d.ts +119 -0
  245. package/dist/server/rateLimits.d.ts.map +1 -0
  246. package/dist/server/rateLimits.js +159 -0
  247. package/dist/server/rateLimits.js.map +1 -0
  248. package/dist/server/serverConfig.d.ts +37 -0
  249. package/dist/server/serverConfig.d.ts.map +1 -0
  250. package/dist/server/serverConfig.js +251 -0
  251. package/dist/server/serverConfig.js.map +1 -0
  252. package/dist/server/timestampProxy.d.ts +129 -0
  253. package/dist/server/timestampProxy.d.ts.map +1 -0
  254. package/dist/server/timestampProxy.js +361 -0
  255. package/dist/server/timestampProxy.js.map +1 -0
  256. package/dist/server/types.d.ts +267 -0
  257. package/dist/server/types.d.ts.map +1 -0
  258. package/dist/server/types.js +56 -0
  259. package/dist/server/types.js.map +1 -0
  260. package/dist/server/validation.d.ts +43 -0
  261. package/dist/server/validation.d.ts.map +1 -0
  262. package/dist/server/validation.js +104 -0
  263. package/dist/server/validation.js.map +1 -0
  264. package/package.json +9 -1
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkersCryptoAdapter = void 0;
4
+ /** WebCrypto of the Workers runtime (`globalThis.crypto`). */
5
+ class WorkersCryptoAdapter {
6
+ getSubtle() {
7
+ return globalThis.crypto.subtle;
8
+ }
9
+ getRandomValues(array) {
10
+ return globalThis.crypto.getRandomValues(array);
11
+ }
12
+ }
13
+ exports.WorkersCryptoAdapter = WorkersCryptoAdapter;
14
+ //# sourceMappingURL=WorkersCryptoAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkersCryptoAdapter.js","sourceRoot":"","sources":["../../src/cloudflare/WorkersCryptoAdapter.ts"],"names":[],"mappings":";;;AAEA,8DAA8D;AAC9D,MAAa,oBAAoB;IAC/B,SAAS;QACP,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,eAAe,CAAC,KAAiB;QAC/B,OAAO,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;CACF;AARD,oDAQC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Settings and helpers shared by the Worker and its Durable Objects.
3
+ */
4
+ import { type TsaProviderConfig } from "../server/timestampProxy";
5
+ import type { ServerDataStore } from "../server/ServerDataStore";
6
+ import type { DurableObjectStub, MindooCloudflareEnv, RateLimitBinding } from "./types";
7
+ /**
8
+ * Workers' WebCrypto refuses PBKDF2 above 100 000 iterations. Key bags the
9
+ * server derives itself use this count; the server identity must be created
10
+ * with it as well (`cloudflare/scripts/setup.mjs` does).
11
+ */
12
+ export declare const WORKERS_PBKDF2_ITERATIONS = 100000;
13
+ export interface HostSettings {
14
+ jsonBodyLimit: string;
15
+ jsonBodyLimitBytes: number | null;
16
+ tsaProviders: TsaProviderConfig[];
17
+ allowInsecureSyncUrls: boolean;
18
+ }
19
+ export declare function createHostSettings(env: MindooCloudflareEnv): HostSettings;
20
+ /** Put the server identity from the secret where the tenant manager reads it. */
21
+ export declare function seedServerIdentity(dataStore: ServerDataStore, env: MindooCloudflareEnv): void;
22
+ /** Headers naming the addressed object's tenant and database on every request to it. */
23
+ export declare const OBJECT_HEADER: {
24
+ readonly tenantId: "x-mindoodb-tenant";
25
+ readonly dbId: "x-mindoodb-db";
26
+ };
27
+ export declare function objectHeaders(tenantId: string, dbId: string): Record<string, string>;
28
+ /** Headers of a call from one object to another (reaches `/internal/*`). */
29
+ export declare function internalHeaders(tenantId?: string, dbId?: string): Record<string, string>;
30
+ /** The object serving one database of a tenant; `directory` is also the tenant's hub. */
31
+ export declare function databaseObject(env: MindooCloudflareEnv, tenantId: string, dbId: string): DurableObjectStub;
32
+ export declare function serverObject(env: MindooCloudflareEnv): DurableObjectStub;
33
+ /**
34
+ * Enforce one limiter tier; returns the 429 to send, or null. A missing
35
+ * binding means the tier is not configured for this deployment.
36
+ */
37
+ export declare function rateLimited(binding: RateLimitBinding | undefined, key: string, message: string): Promise<Response | null>;
38
+ /**
39
+ * Per-tenant sync-token key: HMAC-SHA256(MINDOODB_JWT_SECRET, "tenant:<id>").
40
+ * Every object serving the tenant derives the same key, so a token issued by
41
+ * the tenant's directory object is accepted by all of its databases.
42
+ */
43
+ export declare function deriveTenantJwtSecret(env: MindooCloudflareEnv, tenantId: string): Promise<Uint8Array>;
44
+ /**
45
+ * Peer-token key, HMAC-SHA256(MINDOODB_JWT_SECRET, "peer"): the server object
46
+ * issues peer tokens, the database objects accept them on the sync routes.
47
+ */
48
+ export declare function derivePeerJwtSecret(env: MindooCloudflareEnv): Promise<Uint8Array>;
49
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/cloudflare/host.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAExF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,SAAU,CAAC;AAKjD,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,YAAY,CAWzE;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAK7F;AAED,wFAAwF;AACxF,eAAO,MAAM,aAAa;;;CAGhB,CAAC;AAEX,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEpF;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKxF;AAED,yFAAyF;AACzF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,mBAAmB,EACxB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,iBAAiB,CAEnB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,mBAAmB,GAAG,iBAAiB,CAExE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAI1B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAErG;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAEjF"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ /**
3
+ * Settings and helpers shared by the Worker and its Durable Objects.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OBJECT_HEADER = exports.WORKERS_PBKDF2_ITERATIONS = void 0;
7
+ exports.createHostSettings = createHostSettings;
8
+ exports.seedServerIdentity = seedServerIdentity;
9
+ exports.objectHeaders = objectHeaders;
10
+ exports.internalHeaders = internalHeaders;
11
+ exports.databaseObject = databaseObject;
12
+ exports.serverObject = serverObject;
13
+ exports.rateLimited = rateLimited;
14
+ exports.deriveTenantJwtSecret = deriveTenantJwtSecret;
15
+ exports.derivePeerJwtSecret = derivePeerJwtSecret;
16
+ const MindooDBServerCore_1 = require("../server/http/MindooDBServerCore");
17
+ const timestampProxy_1 = require("../server/timestampProxy");
18
+ const base64_1 = require("../core/utils/base64");
19
+ const http_1 = require("./http");
20
+ /**
21
+ * Workers' WebCrypto refuses PBKDF2 above 100 000 iterations. Key bags the
22
+ * server derives itself use this count; the server identity must be created
23
+ * with it as well (`cloudflare/scripts/setup.mjs` does).
24
+ */
25
+ exports.WORKERS_PBKDF2_ITERATIONS = 100000;
26
+ globalThis.__MINDOODB_PBKDF2_ITERATIONS =
27
+ exports.WORKERS_PBKDF2_ITERATIONS;
28
+ function createHostSettings(env) {
29
+ const jsonBodyLimit = env.MINDOODB_JSON_BODY_LIMIT?.trim() || "5mb";
30
+ const allowInsecureSyncUrls = /^(1|true)$/i.test(env.MINDOODB_ALLOW_INSECURE_SYNC_URLS ?? "");
31
+ return {
32
+ jsonBodyLimit,
33
+ jsonBodyLimitBytes: (0, MindooDBServerCore_1.parseBodySizeLimitToBytes)(jsonBodyLimit),
34
+ tsaProviders: (0, timestampProxy_1.parseTsaProviders)(env.MINDOODB_TSA_PROVIDERS, {
35
+ allowInsecureUrls: allowInsecureSyncUrls,
36
+ }),
37
+ allowInsecureSyncUrls,
38
+ };
39
+ }
40
+ /** Put the server identity from the secret where the tenant manager reads it. */
41
+ function seedServerIdentity(dataStore, env) {
42
+ const identity = env.MINDOODB_SERVER_IDENTITY?.trim();
43
+ if (identity && dataStore.readText("server.identity.json") !== identity) {
44
+ dataStore.writeText("server.identity.json", identity);
45
+ }
46
+ }
47
+ /** Headers naming the addressed object's tenant and database on every request to it. */
48
+ exports.OBJECT_HEADER = {
49
+ tenantId: "x-mindoodb-tenant",
50
+ dbId: "x-mindoodb-db",
51
+ };
52
+ function objectHeaders(tenantId, dbId) {
53
+ return { [exports.OBJECT_HEADER.tenantId]: tenantId, [exports.OBJECT_HEADER.dbId]: dbId };
54
+ }
55
+ /** Headers of a call from one object to another (reaches `/internal/*`). */
56
+ function internalHeaders(tenantId, dbId) {
57
+ return {
58
+ ...(tenantId && dbId ? objectHeaders(tenantId, dbId) : {}),
59
+ [http_1.INTERNAL_HEADER.internalCall]: "1",
60
+ };
61
+ }
62
+ /** The object serving one database of a tenant; `directory` is also the tenant's hub. */
63
+ function databaseObject(env, tenantId, dbId) {
64
+ return env.MINDOODB_DATABASES.get(env.MINDOODB_DATABASES.idFromName(`${tenantId}/${dbId}`));
65
+ }
66
+ function serverObject(env) {
67
+ return env.MINDOODB_SERVER.get(env.MINDOODB_SERVER.idFromName("server"));
68
+ }
69
+ /**
70
+ * Enforce one limiter tier; returns the 429 to send, or null. A missing
71
+ * binding means the tier is not configured for this deployment.
72
+ */
73
+ async function rateLimited(binding, key, message) {
74
+ if (!binding)
75
+ return null;
76
+ const { success } = await binding.limit({ key });
77
+ return success ? null : (0, http_1.jsonResponse)(429, { error: message });
78
+ }
79
+ /**
80
+ * Per-tenant sync-token key: HMAC-SHA256(MINDOODB_JWT_SECRET, "tenant:<id>").
81
+ * Every object serving the tenant derives the same key, so a token issued by
82
+ * the tenant's directory object is accepted by all of its databases.
83
+ */
84
+ function deriveTenantJwtSecret(env, tenantId) {
85
+ return deriveJwtSecret(env, `tenant:${tenantId}`);
86
+ }
87
+ /**
88
+ * Peer-token key, HMAC-SHA256(MINDOODB_JWT_SECRET, "peer"): the server object
89
+ * issues peer tokens, the database objects accept them on the sync routes.
90
+ */
91
+ function derivePeerJwtSecret(env) {
92
+ return deriveJwtSecret(env, "peer");
93
+ }
94
+ async function deriveJwtSecret(env, label) {
95
+ const secret = env.MINDOODB_JWT_SECRET?.trim();
96
+ if (!secret) {
97
+ throw new Error("MINDOODB_JWT_SECRET is not set; run cloudflare/scripts/setup.mjs");
98
+ }
99
+ const subtle = globalThis.crypto.subtle;
100
+ const key = await subtle.importKey("raw", (0, base64_1.base64ToBytes)(secret), { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
101
+ const mac = await subtle.sign("HMAC", key, new TextEncoder().encode(label));
102
+ return new Uint8Array(mac);
103
+ }
104
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/cloudflare/host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * HTTP glue between the Workers `fetch` API and the platform-neutral handlers:
3
+ * route matching, body parsing, responses, CORS and security headers. The
4
+ * Node server gets the same from Express, helmet, cors and body-parser; this
5
+ * module mirrors their observable behaviour for the MindooDB API.
6
+ */
7
+ import { StoreKind } from "../core/appendonlystores/types";
8
+ import { type SyncRouteName } from "../server/http/MindooDBServerCore";
9
+ import { type ServerRequest, type ServerResponse } from "../server/http/types";
10
+ /** Headers the Worker sets on requests it forwards to Durable Objects. */
11
+ export declare const INTERNAL_HEADER: {
12
+ readonly clientIp: "x-mindoodb-client-ip";
13
+ /** The sync-events read gate already ran against `?dbId=` in that database's object. */
14
+ readonly eventsGatePassed: "x-mindoodb-events-gate-passed";
15
+ /**
16
+ * Marks calls between the objects themselves. `/internal/*` routes refuse
17
+ * requests without it; the Worker drops every `x-mindoodb-*` header a
18
+ * client sends, so no outside request can carry it.
19
+ */
20
+ readonly internalCall: "x-mindoodb-internal-call";
21
+ };
22
+ export declare function isInternalCall(request: Request): boolean;
23
+ /** Host name of requests between the Worker and its Durable Objects. */
24
+ export declare const INTERNAL_ORIGIN = "https://mindoodb.internal";
25
+ export type MatchedRoute = {
26
+ kind: "health";
27
+ } | {
28
+ kind: "serverInfo";
29
+ } | {
30
+ kind: "clusterMirrors";
31
+ } | {
32
+ kind: "publicInfosFingerprints";
33
+ tenantId: string;
34
+ } | {
35
+ kind: "unsupported";
36
+ feature: string;
37
+ } | {
38
+ kind: "system";
39
+ path: string;
40
+ } | {
41
+ kind: "peer";
42
+ path: string;
43
+ } | {
44
+ kind: "tenantAuth";
45
+ tenantId: string;
46
+ phase: "challenge" | "authenticate";
47
+ } | {
48
+ kind: "timestamp";
49
+ tenantId: string;
50
+ } | {
51
+ kind: "sync";
52
+ tenantId: string;
53
+ storeKind: StoreKind;
54
+ name: SyncRouteName;
55
+ } | {
56
+ kind: "tenantNotFound";
57
+ tenantId: string;
58
+ } | {
59
+ kind: "notFound";
60
+ };
61
+ /**
62
+ * Map a request onto the API. Like Express's defaults, literal segments match
63
+ * case-insensitively and a trailing slash is ignored.
64
+ */
65
+ export declare function matchRoute(method: string, pathname: string): MatchedRoute;
66
+ export declare function jsonResponse(status: number, body: unknown, headers?: HeadersInit): Response;
67
+ /** Turn a handler result into a `Response`. Event streams are the caller's business. */
68
+ export declare function toResponse(response: ServerResponse): Response;
69
+ export interface ParseRequestOptions {
70
+ params: Record<string, string | undefined>;
71
+ jsonBodyLimitBytes: number | null;
72
+ /** Body bytes the Worker already read (to route by `dbId`). */
73
+ body?: Uint8Array;
74
+ }
75
+ /**
76
+ * Build a {@link ServerRequest}, or the error response body-parser would have
77
+ * sent (413 too large, 400 invalid JSON).
78
+ */
79
+ export declare function toServerRequest(request: Request, options: ParseRequestOptions): Promise<ServerRequest | Response>;
80
+ export declare function parseCorsOrigins(raw: string | undefined): string[];
81
+ /** Answer a CORS preflight, or null when CORS is off (then OPTIONS falls through). */
82
+ export declare function corsPreflight(request: Request, origins: string[]): Response | null;
83
+ /** Security and CORS headers on every response. */
84
+ export declare function decorateResponse(request: Request, response: Response, origins: string[]): Response;
85
+ /**
86
+ * Rate-limit key for a client address. IPv6 addresses collapse to their /56
87
+ * prefix like express-rate-limit's `ipKeyGenerator`: one client routinely
88
+ * holds many addresses of a /64.
89
+ */
90
+ export declare function clientAddressKey(address: string | null | undefined): string;
91
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/cloudflare/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ /**
3
+ * HTTP glue between the Workers `fetch` API and the platform-neutral handlers:
4
+ * route matching, body parsing, responses, CORS and security headers. The
5
+ * Node server gets the same from Express, helmet, cors and body-parser; this
6
+ * module mirrors their observable behaviour for the MindooDB API.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.INTERNAL_ORIGIN = exports.INTERNAL_HEADER = void 0;
10
+ exports.isInternalCall = isInternalCall;
11
+ exports.matchRoute = matchRoute;
12
+ exports.jsonResponse = jsonResponse;
13
+ exports.toResponse = toResponse;
14
+ exports.toServerRequest = toServerRequest;
15
+ exports.parseCorsOrigins = parseCorsOrigins;
16
+ exports.corsPreflight = corsPreflight;
17
+ exports.decorateResponse = decorateResponse;
18
+ exports.clientAddressKey = clientAddressKey;
19
+ const binaryEntryFraming_1 = require("../core/appendonlystores/network/binaryEntryFraming");
20
+ const types_1 = require("../core/appendonlystores/types");
21
+ const MindooDBServerCore_1 = require("../server/http/MindooDBServerCore");
22
+ const types_2 = require("../server/http/types");
23
+ const timestampProxy_1 = require("../server/timestampProxy");
24
+ /** Headers the Worker sets on requests it forwards to Durable Objects. */
25
+ exports.INTERNAL_HEADER = {
26
+ clientIp: "x-mindoodb-client-ip",
27
+ /** The sync-events read gate already ran against `?dbId=` in that database's object. */
28
+ eventsGatePassed: "x-mindoodb-events-gate-passed",
29
+ /**
30
+ * Marks calls between the objects themselves. `/internal/*` routes refuse
31
+ * requests without it; the Worker drops every `x-mindoodb-*` header a
32
+ * client sends, so no outside request can carry it.
33
+ */
34
+ internalCall: "x-mindoodb-internal-call",
35
+ };
36
+ function isInternalCall(request) {
37
+ return request.headers.get(exports.INTERNAL_HEADER.internalCall) === "1";
38
+ }
39
+ /** Host name of requests between the Worker and its Durable Objects. */
40
+ exports.INTERNAL_ORIGIN = "https://mindoodb.internal";
41
+ function decodeSegment(segment) {
42
+ try {
43
+ return decodeURIComponent(segment);
44
+ }
45
+ catch {
46
+ return segment;
47
+ }
48
+ }
49
+ /**
50
+ * Map a request onto the API. Like Express's defaults, literal segments match
51
+ * case-insensitively and a trailing slash is ignored.
52
+ */
53
+ function matchRoute(method, pathname) {
54
+ const trimmed = pathname.length > 1 && pathname.endsWith("/") ? pathname.slice(0, -1) : pathname;
55
+ const segments = trimmed.split("/").slice(1).map(decodeSegment);
56
+ const lower = segments.map((segment) => segment.toLowerCase());
57
+ const m = method.toUpperCase();
58
+ if (m === "GET" && lower.length === 1 && lower[0] === "health")
59
+ return { kind: "health" };
60
+ if (lower[0] === ".well-known") {
61
+ if (m === "GET" && lower.length === 2 && lower[1] === "mindoodb-server-info")
62
+ return { kind: "serverInfo" };
63
+ if (m === "GET" && lower.length === 2 && lower[1] === "mindoodb-cluster")
64
+ return { kind: "clusterMirrors" };
65
+ if (m === "GET" &&
66
+ lower.length === 4 &&
67
+ lower[1] === "mindoodb-tenants" &&
68
+ lower[3] === "publicinfos-fingerprints") {
69
+ return { kind: "publicInfosFingerprints", tenantId: segments[2] };
70
+ }
71
+ return { kind: "notFound" };
72
+ }
73
+ if (lower[0] === "device")
74
+ return { kind: "unsupported", feature: "Device discovery" };
75
+ if (lower[0] === "system") {
76
+ if (lower[1] === "peer")
77
+ return { kind: "peer", path: trimmed };
78
+ return { kind: "system", path: trimmed };
79
+ }
80
+ if (lower.length < 2 || segments[0] === "")
81
+ return { kind: "notFound" };
82
+ const tenantId = segments[0];
83
+ if (m === "POST" && lower.length === 3 && lower[1] === "auth") {
84
+ if (lower[2] === "challenge" || lower[2] === "authenticate") {
85
+ return { kind: "tenantAuth", tenantId, phase: lower[2] };
86
+ }
87
+ }
88
+ if (m === "POST" && lower.length === 3 && lower[1] === "timestamps" && lower[2] === "rfc3161") {
89
+ return { kind: "timestamp", tenantId };
90
+ }
91
+ if (lower.length === 4 && lower[1] === "sync") {
92
+ const storeKind = lower[2] === "docs" ? types_1.StoreKind.docs : lower[2] === "attachments" ? types_1.StoreKind.attachments : null;
93
+ const route = MindooDBServerCore_1.SYNC_ROUTES.find((candidate) => candidate.name.toLowerCase() === lower[3]);
94
+ if (storeKind && route && route.method === m) {
95
+ return { kind: "sync", tenantId, storeKind, name: route.name };
96
+ }
97
+ }
98
+ // Express runs the tenant guard before matching tenant routes, so an
99
+ // unknown tenant answers 404 "not found on server" for any path below it.
100
+ return { kind: "tenantNotFound", tenantId };
101
+ }
102
+ function jsonResponse(status, body, headers) {
103
+ const result = new Response(JSON.stringify(body), { status, headers });
104
+ result.headers.set("content-type", "application/json; charset=utf-8");
105
+ return result;
106
+ }
107
+ /** Turn a handler result into a `Response`. Event streams are the caller's business. */
108
+ function toResponse(response) {
109
+ if ((0, types_2.isJsonResponse)(response)) {
110
+ return jsonResponse(response.status, response.json, response.headers);
111
+ }
112
+ if ((0, types_2.isBytesResponse)(response)) {
113
+ // Cloudflare compresses at the edge when the client accepts it.
114
+ return new Response(response.bytes, { status: response.status, headers: response.headers });
115
+ }
116
+ throw new Error("Event stream responses must be handled by the caller");
117
+ }
118
+ function parseBodyLimit(contentType) {
119
+ const type = (contentType ?? "").split(";")[0].trim().toLowerCase();
120
+ if (type === "application/json" || type.endsWith("+json"))
121
+ return "json";
122
+ if (type === binaryEntryFraming_1.BINARY_ENTRIES_CONTENT_TYPE || type === timestampProxy_1.TIMESTAMP_QUERY_CONTENT_TYPE)
123
+ return "raw";
124
+ return "none";
125
+ }
126
+ /**
127
+ * Build a {@link ServerRequest}, or the error response body-parser would have
128
+ * sent (413 too large, 400 invalid JSON).
129
+ */
130
+ async function toServerRequest(request, options) {
131
+ const url = new URL(request.url);
132
+ const headers = {};
133
+ request.headers.forEach((value, name) => {
134
+ headers[name.toLowerCase()] = value;
135
+ });
136
+ const query = {};
137
+ for (const key of new Set(url.searchParams.keys())) {
138
+ const values = url.searchParams.getAll(key);
139
+ query[key] = values.length === 1 ? values[0] : values;
140
+ }
141
+ let body = {};
142
+ let rawBody;
143
+ let jsonBodyBytes;
144
+ const kind = parseBodyLimit(request.headers.get("content-type"));
145
+ if (kind !== "none" && request.method !== "GET" && request.method !== "HEAD") {
146
+ const bytes = options.body ?? new Uint8Array(await request.arrayBuffer());
147
+ if (options.jsonBodyLimitBytes !== null && bytes.byteLength > options.jsonBodyLimitBytes) {
148
+ return jsonResponse(413, { error: "Request body too large" });
149
+ }
150
+ if (kind === "json") {
151
+ if (bytes.byteLength > 0) {
152
+ try {
153
+ body = JSON.parse(new TextDecoder().decode(bytes));
154
+ }
155
+ catch {
156
+ return jsonResponse(400, { error: "Invalid JSON body" });
157
+ }
158
+ jsonBodyBytes = bytes.byteLength;
159
+ }
160
+ }
161
+ else {
162
+ rawBody = bytes;
163
+ }
164
+ }
165
+ return {
166
+ method: request.method.toUpperCase(),
167
+ path: url.pathname,
168
+ params: options.params,
169
+ query,
170
+ headers,
171
+ body,
172
+ rawBody,
173
+ jsonBodyBytes,
174
+ httpVersion: "1.1",
175
+ clientIp: headers[exports.INTERNAL_HEADER.clientIp] ?? headers["cf-connecting-ip"],
176
+ };
177
+ }
178
+ /**
179
+ * Headers helmet sets by default on the Node server. Kept identical so a
180
+ * client sees the same security posture from both hosts.
181
+ */
182
+ const SECURITY_HEADERS = {
183
+ "content-security-policy": "default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests",
184
+ "cross-origin-opener-policy": "same-origin",
185
+ "cross-origin-resource-policy": "same-origin",
186
+ "origin-agent-cluster": "?1",
187
+ "referrer-policy": "no-referrer",
188
+ "strict-transport-security": "max-age=31536000; includeSubDomains",
189
+ "x-content-type-options": "nosniff",
190
+ "x-dns-prefetch-control": "off",
191
+ "x-download-options": "noopen",
192
+ "x-frame-options": "SAMEORIGIN",
193
+ "x-permitted-cross-domain-policies": "none",
194
+ "x-xss-protection": "0",
195
+ };
196
+ function parseCorsOrigins(raw) {
197
+ return (raw ?? "")
198
+ .split(",")
199
+ .map((entry) => entry.trim())
200
+ .filter((entry) => entry.length > 0);
201
+ }
202
+ /**
203
+ * The `Access-Control-Allow-Origin` value the `cors` package would send:
204
+ * a single configured origin always, one of several only when it matches.
205
+ */
206
+ function allowedOrigin(origins, requestOrigin) {
207
+ if (origins.length === 0)
208
+ return null;
209
+ if (origins.length === 1)
210
+ return origins[0];
211
+ return requestOrigin && origins.includes(requestOrigin) ? requestOrigin : null;
212
+ }
213
+ /** Answer a CORS preflight, or null when CORS is off (then OPTIONS falls through). */
214
+ function corsPreflight(request, origins) {
215
+ if (request.method !== "OPTIONS" || origins.length === 0)
216
+ return null;
217
+ const response = new Response(null, { status: 204 });
218
+ const origin = allowedOrigin(origins, request.headers.get("origin"));
219
+ if (origin)
220
+ response.headers.set("access-control-allow-origin", origin);
221
+ response.headers.set("vary", "Origin, Access-Control-Request-Headers");
222
+ response.headers.set("access-control-allow-methods", "GET,POST,PUT,DELETE");
223
+ response.headers.set("access-control-allow-headers", "Content-Type,Authorization");
224
+ response.headers.set("content-length", "0");
225
+ return withSecurityHeaders(response);
226
+ }
227
+ /** Security and CORS headers on every response. */
228
+ function decorateResponse(request, response, origins) {
229
+ // Responses from fetch() and Durable Objects have immutable headers.
230
+ const decorated = new Response(response.body, response);
231
+ const origin = allowedOrigin(origins, request.headers.get("origin"));
232
+ if (origin) {
233
+ decorated.headers.set("access-control-allow-origin", origin);
234
+ decorated.headers.append("vary", "Origin");
235
+ }
236
+ return withSecurityHeaders(decorated);
237
+ }
238
+ function withSecurityHeaders(response) {
239
+ for (const [name, value] of Object.entries(SECURITY_HEADERS)) {
240
+ if (!response.headers.has(name))
241
+ response.headers.set(name, value);
242
+ }
243
+ return response;
244
+ }
245
+ /**
246
+ * Rate-limit key for a client address. IPv6 addresses collapse to their /56
247
+ * prefix like express-rate-limit's `ipKeyGenerator`: one client routinely
248
+ * holds many addresses of a /64.
249
+ */
250
+ function clientAddressKey(address) {
251
+ if (!address)
252
+ return "unknown";
253
+ if (!address.includes(":"))
254
+ return address;
255
+ const [head, tail = ""] = address.split("::");
256
+ const headGroups = head ? head.split(":") : [];
257
+ const tailGroups = tail ? tail.split(":") : [];
258
+ const groups = address.includes("::")
259
+ ? [...headGroups, ...new Array(Math.max(0, 8 - headGroups.length - tailGroups.length)).fill("0"), ...tailGroups]
260
+ : headGroups;
261
+ const hex = groups.slice(0, 4).map((group) => group.padStart(4, "0"));
262
+ if (hex.length < 4)
263
+ return address;
264
+ return `${hex[0]}:${hex[1]}:${hex[2]}:${hex[3].substring(0, 2)}00::/56`;
265
+ }
266
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/cloudflare/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * MindooDB server on Cloudflare Workers + Durable Objects.
3
+ *
4
+ * A Worker project re-exports these (see `cloudflare/src/index.ts`):
5
+ * the default export is the Worker, the two classes are the Durable Objects
6
+ * bound as `MINDOODB_SERVER` and `MINDOODB_DATABASES`.
7
+ */
8
+ export { default } from "./worker";
9
+ export { MindooServerObject } from "./MindooServerObject";
10
+ export { MindooDatabaseObject } from "./MindooDatabaseObject";
11
+ export type { MindooCloudflareEnv } from "./types";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * MindooDB server on Cloudflare Workers + Durable Objects.
4
+ *
5
+ * A Worker project re-exports these (see `cloudflare/src/index.ts`):
6
+ * the default export is the Worker, the two classes are the Durable Objects
7
+ * bound as `MINDOODB_SERVER` and `MINDOODB_DATABASES`.
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.MindooDatabaseObject = exports.MindooServerObject = exports.default = void 0;
14
+ var worker_1 = require("./worker");
15
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(worker_1).default; } });
16
+ var MindooServerObject_1 = require("./MindooServerObject");
17
+ Object.defineProperty(exports, "MindooServerObject", { enumerable: true, get: function () { return MindooServerObject_1.MindooServerObject; } });
18
+ var MindooDatabaseObject_1 = require("./MindooDatabaseObject");
19
+ Object.defineProperty(exports, "MindooDatabaseObject", { enumerable: true, get: function () { return MindooDatabaseObject_1.MindooDatabaseObject; } });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;AAEH,mCAAmC;AAA1B,kHAAA,OAAO,OAAA;AAChB,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Entry stores of a database object, reached from another object.
3
+ *
4
+ * Peer replication runs in the server object but the stores live in the
5
+ * database objects. The existing store RPC ({@link RpcContentAddressedStore} /
6
+ * {@link StoreRpcServer}) carries the calls: JSON for metadata, raw bytes for
7
+ * entry payloads, over internal requests between the objects.
8
+ */
9
+ import type { StoreKind } from "../core/appendonlystores/types";
10
+ import type { ContentAddressedStore } from "../core/types";
11
+ import type { DurableObjectStub } from "./types";
12
+ /** A store of `dbId` in the object `stub`; `headers` address and authorize the call. */
13
+ export declare function remoteObjectStore(stub: DurableObjectStub, headers: Record<string, string>, tenantId: string, dbId: string, kind: StoreKind): ContentAddressedStore;
14
+ /** Payload buffers between the calls of one store RPC exchange. */
15
+ export declare class StoreRpcBytes {
16
+ private readonly buffers;
17
+ take(blobId: string): Promise<Uint8Array | null>;
18
+ offer(blobId: string, bytes: Uint8Array): Promise<void>;
19
+ /** Serve the byte routes under {@link RPC_PATH}; null for anything else. */
20
+ handle(path: string, request: Request): Promise<Response | null>;
21
+ }
22
+ //# sourceMappingURL=storeRpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storeRpc.d.ts","sourceRoot":"","sources":["../../src/cloudflare/storeRpc.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAyCjD,wFAAwF;AACxF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,GACd,qBAAqB,CAMvB;AAED,mEAAmE;AACnE,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IAEnD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAMhD,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,4EAA4E;IACtE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAavE"}