was-teaching-server 0.9.1

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 (295) hide show
  1. package/CHANGELOG.md +1432 -0
  2. package/LICENSE +661 -0
  3. package/README.md +305 -0
  4. package/common/css/materialize.1.0.0.min.css +13 -0
  5. package/dist/auth-header-hooks.d.ts +84 -0
  6. package/dist/auth-header-hooks.d.ts.map +1 -0
  7. package/dist/auth-header-hooks.js +136 -0
  8. package/dist/auth-header-hooks.js.map +1 -0
  9. package/dist/authorize.d.ts +45 -0
  10. package/dist/authorize.d.ts.map +1 -0
  11. package/dist/authorize.js +76 -0
  12. package/dist/authorize.js.map +1 -0
  13. package/dist/backends/filesystem.d.ts +1179 -0
  14. package/dist/backends/filesystem.d.ts.map +1 -0
  15. package/dist/backends/filesystem.js +2727 -0
  16. package/dist/backends/filesystem.js.map +1 -0
  17. package/dist/backends/postgres.d.ts +833 -0
  18. package/dist/backends/postgres.d.ts.map +1 -0
  19. package/dist/backends/postgres.js +2164 -0
  20. package/dist/backends/postgres.js.map +1 -0
  21. package/dist/backends/postgresSchema.d.ts +36 -0
  22. package/dist/backends/postgresSchema.d.ts.map +1 -0
  23. package/dist/backends/postgresSchema.js +203 -0
  24. package/dist/backends/postgresSchema.js.map +1 -0
  25. package/dist/config.default.d.ts +360 -0
  26. package/dist/config.default.d.ts.map +1 -0
  27. package/dist/config.default.js +493 -0
  28. package/dist/config.default.js.map +1 -0
  29. package/dist/corsProxy.d.ts +45 -0
  30. package/dist/corsProxy.d.ts.map +1 -0
  31. package/dist/corsProxy.js +278 -0
  32. package/dist/corsProxy.js.map +1 -0
  33. package/dist/digest.d.ts +45 -0
  34. package/dist/digest.d.ts.map +1 -0
  35. package/dist/digest.js +174 -0
  36. package/dist/digest.js.map +1 -0
  37. package/dist/errors.d.ts +654 -0
  38. package/dist/errors.d.ts.map +1 -0
  39. package/dist/errors.js +960 -0
  40. package/dist/errors.js.map +1 -0
  41. package/dist/index.d.ts +22 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +21 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/lib/atomicFile.d.ts +61 -0
  46. package/dist/lib/atomicFile.d.ts.map +1 -0
  47. package/dist/lib/atomicFile.js +150 -0
  48. package/dist/lib/atomicFile.js.map +1 -0
  49. package/dist/lib/backendRegistry.d.ts +59 -0
  50. package/dist/lib/backendRegistry.d.ts.map +1 -0
  51. package/dist/lib/backendRegistry.js +92 -0
  52. package/dist/lib/backendRegistry.js.map +1 -0
  53. package/dist/lib/backendUsage.d.ts +28 -0
  54. package/dist/lib/backendUsage.d.ts.map +1 -0
  55. package/dist/lib/backendUsage.js +55 -0
  56. package/dist/lib/backendUsage.js.map +1 -0
  57. package/dist/lib/backends.d.ts +142 -0
  58. package/dist/lib/backends.d.ts.map +1 -0
  59. package/dist/lib/backends.js +272 -0
  60. package/dist/lib/backends.js.map +1 -0
  61. package/dist/lib/blindedIndex.d.ts +156 -0
  62. package/dist/lib/blindedIndex.d.ts.map +1 -0
  63. package/dist/lib/blindedIndex.js +338 -0
  64. package/dist/lib/blindedIndex.js.map +1 -0
  65. package/dist/lib/collectionDescription.d.ts +33 -0
  66. package/dist/lib/collectionDescription.d.ts.map +1 -0
  67. package/dist/lib/collectionDescription.js +21 -0
  68. package/dist/lib/collectionDescription.js.map +1 -0
  69. package/dist/lib/cursor.d.ts +18 -0
  70. package/dist/lib/cursor.d.ts.map +1 -0
  71. package/dist/lib/cursor.js +50 -0
  72. package/dist/lib/cursor.js.map +1 -0
  73. package/dist/lib/edvEnvelope.d.ts +50 -0
  74. package/dist/lib/edvEnvelope.d.ts.map +1 -0
  75. package/dist/lib/edvEnvelope.js +106 -0
  76. package/dist/lib/edvEnvelope.js.map +1 -0
  77. package/dist/lib/encryption.d.ts +192 -0
  78. package/dist/lib/encryption.d.ts.map +1 -0
  79. package/dist/lib/encryption.js +383 -0
  80. package/dist/lib/encryption.js.map +1 -0
  81. package/dist/lib/etag.d.ts +33 -0
  82. package/dist/lib/etag.d.ts.map +1 -0
  83. package/dist/lib/etag.js +36 -0
  84. package/dist/lib/etag.js.map +1 -0
  85. package/dist/lib/exportManifest.d.ts +29 -0
  86. package/dist/lib/exportManifest.d.ts.map +1 -0
  87. package/dist/lib/exportManifest.js +77 -0
  88. package/dist/lib/exportManifest.js.map +1 -0
  89. package/dist/lib/importTar.d.ts +81 -0
  90. package/dist/lib/importTar.d.ts.map +1 -0
  91. package/dist/lib/importTar.js +301 -0
  92. package/dist/lib/importTar.js.map +1 -0
  93. package/dist/lib/isJson.d.ts +16 -0
  94. package/dist/lib/isJson.d.ts.map +1 -0
  95. package/dist/lib/isJson.js +17 -0
  96. package/dist/lib/isJson.js.map +1 -0
  97. package/dist/lib/keyEpoch.d.ts +38 -0
  98. package/dist/lib/keyEpoch.d.ts.map +1 -0
  99. package/dist/lib/keyEpoch.js +75 -0
  100. package/dist/lib/keyEpoch.js.map +1 -0
  101. package/dist/lib/keyedMutex.d.ts +28 -0
  102. package/dist/lib/keyedMutex.d.ts.map +1 -0
  103. package/dist/lib/keyedMutex.js +45 -0
  104. package/dist/lib/keyedMutex.js.map +1 -0
  105. package/dist/lib/kmsModule.d.ts +62 -0
  106. package/dist/lib/kmsModule.d.ts.map +1 -0
  107. package/dist/lib/kmsModule.js +327 -0
  108. package/dist/lib/kmsModule.js.map +1 -0
  109. package/dist/lib/kmsRecordCipher.d.ts +82 -0
  110. package/dist/lib/kmsRecordCipher.d.ts.map +1 -0
  111. package/dist/lib/kmsRecordCipher.js +226 -0
  112. package/dist/lib/kmsRecordCipher.js.map +1 -0
  113. package/dist/lib/pagination.d.ts +19 -0
  114. package/dist/lib/pagination.d.ts.map +1 -0
  115. package/dist/lib/pagination.js +21 -0
  116. package/dist/lib/pagination.js.map +1 -0
  117. package/dist/lib/paths.d.ts +273 -0
  118. package/dist/lib/paths.d.ts.map +1 -0
  119. package/dist/lib/paths.js +270 -0
  120. package/dist/lib/paths.js.map +1 -0
  121. package/dist/lib/preconditions.d.ts +65 -0
  122. package/dist/lib/preconditions.d.ts.map +1 -0
  123. package/dist/lib/preconditions.js +112 -0
  124. package/dist/lib/preconditions.js.map +1 -0
  125. package/dist/lib/resourceFileName.d.ts +41 -0
  126. package/dist/lib/resourceFileName.d.ts.map +1 -0
  127. package/dist/lib/resourceFileName.js +58 -0
  128. package/dist/lib/resourceFileName.js.map +1 -0
  129. package/dist/lib/revocations.d.ts +49 -0
  130. package/dist/lib/revocations.d.ts.map +1 -0
  131. package/dist/lib/revocations.js +86 -0
  132. package/dist/lib/revocations.js.map +1 -0
  133. package/dist/lib/validateDid.d.ts +19 -0
  134. package/dist/lib/validateDid.d.ts.map +1 -0
  135. package/dist/lib/validateDid.js +35 -0
  136. package/dist/lib/validateDid.js.map +1 -0
  137. package/dist/lib/validateId.d.ts +66 -0
  138. package/dist/lib/validateId.d.ts.map +1 -0
  139. package/dist/lib/validateId.js +126 -0
  140. package/dist/lib/validateId.js.map +1 -0
  141. package/dist/plugin.d.ts +115 -0
  142. package/dist/plugin.d.ts.map +1 -0
  143. package/dist/plugin.js +134 -0
  144. package/dist/plugin.js.map +1 -0
  145. package/dist/policy.d.ts +78 -0
  146. package/dist/policy.d.ts.map +1 -0
  147. package/dist/policy.js +115 -0
  148. package/dist/policy.js.map +1 -0
  149. package/dist/provisioning.d.ts +38 -0
  150. package/dist/provisioning.d.ts.map +1 -0
  151. package/dist/provisioning.js +72 -0
  152. package/dist/provisioning.js.map +1 -0
  153. package/dist/requests/BackendRequest.d.ts +61 -0
  154. package/dist/requests/BackendRequest.d.ts.map +1 -0
  155. package/dist/requests/BackendRequest.js +152 -0
  156. package/dist/requests/BackendRequest.js.map +1 -0
  157. package/dist/requests/CollectionRequest.d.ts +234 -0
  158. package/dist/requests/CollectionRequest.d.ts.map +1 -0
  159. package/dist/requests/CollectionRequest.js +705 -0
  160. package/dist/requests/CollectionRequest.js.map +1 -0
  161. package/dist/requests/KeyRequest.d.ts +115 -0
  162. package/dist/requests/KeyRequest.d.ts.map +1 -0
  163. package/dist/requests/KeyRequest.js +468 -0
  164. package/dist/requests/KeyRequest.js.map +1 -0
  165. package/dist/requests/KeystoreRequest.d.ts +99 -0
  166. package/dist/requests/KeystoreRequest.d.ts.map +1 -0
  167. package/dist/requests/KeystoreRequest.js +247 -0
  168. package/dist/requests/KeystoreRequest.js.map +1 -0
  169. package/dist/requests/PolicyRequest.d.ts +53 -0
  170. package/dist/requests/PolicyRequest.d.ts.map +1 -0
  171. package/dist/requests/PolicyRequest.js +124 -0
  172. package/dist/requests/PolicyRequest.js.map +1 -0
  173. package/dist/requests/ResourceRequest.d.ts +134 -0
  174. package/dist/requests/ResourceRequest.d.ts.map +1 -0
  175. package/dist/requests/ResourceRequest.js +548 -0
  176. package/dist/requests/ResourceRequest.js.map +1 -0
  177. package/dist/requests/RevocationRequest.d.ts +67 -0
  178. package/dist/requests/RevocationRequest.d.ts.map +1 -0
  179. package/dist/requests/RevocationRequest.js +187 -0
  180. package/dist/requests/RevocationRequest.js.map +1 -0
  181. package/dist/requests/SpaceRequest.d.ts +204 -0
  182. package/dist/requests/SpaceRequest.d.ts.map +1 -0
  183. package/dist/requests/SpaceRequest.js +520 -0
  184. package/dist/requests/SpaceRequest.js.map +1 -0
  185. package/dist/requests/SpacesRepositoryRequest.d.ts +50 -0
  186. package/dist/requests/SpacesRepositoryRequest.d.ts.map +1 -0
  187. package/dist/requests/SpacesRepositoryRequest.js +159 -0
  188. package/dist/requests/SpacesRepositoryRequest.js.map +1 -0
  189. package/dist/requests/collectionContext.d.ts +21 -0
  190. package/dist/requests/collectionContext.d.ts.map +1 -0
  191. package/dist/requests/collectionContext.js +30 -0
  192. package/dist/requests/collectionContext.js.map +1 -0
  193. package/dist/requests/controllerConsent.d.ts +58 -0
  194. package/dist/requests/controllerConsent.d.ts.map +1 -0
  195. package/dist/requests/controllerConsent.js +73 -0
  196. package/dist/requests/controllerConsent.js.map +1 -0
  197. package/dist/requests/keystoreContext.d.ts +68 -0
  198. package/dist/requests/keystoreContext.d.ts.map +1 -0
  199. package/dist/requests/keystoreContext.js +87 -0
  200. package/dist/requests/keystoreContext.js.map +1 -0
  201. package/dist/requests/resourceInput.d.ts +19 -0
  202. package/dist/requests/resourceInput.d.ts.map +1 -0
  203. package/dist/requests/resourceInput.js +102 -0
  204. package/dist/requests/resourceInput.js.map +1 -0
  205. package/dist/requests/spaceContext.d.ts +127 -0
  206. package/dist/requests/spaceContext.d.ts.map +1 -0
  207. package/dist/requests/spaceContext.js +201 -0
  208. package/dist/requests/spaceContext.js.map +1 -0
  209. package/dist/routes.d.ts +55 -0
  210. package/dist/routes.d.ts.map +1 -0
  211. package/dist/routes.js +306 -0
  212. package/dist/routes.js.map +1 -0
  213. package/dist/server.d.ts +20 -0
  214. package/dist/server.d.ts.map +1 -0
  215. package/dist/server.js +60 -0
  216. package/dist/server.js.map +1 -0
  217. package/dist/start.d.ts +7 -0
  218. package/dist/start.d.ts.map +1 -0
  219. package/dist/start.js +61 -0
  220. package/dist/start.js.map +1 -0
  221. package/dist/storage.d.ts +29 -0
  222. package/dist/storage.d.ts.map +1 -0
  223. package/dist/storage.js +47 -0
  224. package/dist/storage.js.map +1 -0
  225. package/dist/types.d.ts +915 -0
  226. package/dist/types.d.ts.map +1 -0
  227. package/dist/types.js +2 -0
  228. package/dist/types.js.map +1 -0
  229. package/dist/views/home.hbs +9 -0
  230. package/dist/views/templates/main.hbs +12 -0
  231. package/dist/zcap.d.ts +267 -0
  232. package/dist/zcap.d.ts.map +1 -0
  233. package/dist/zcap.js +478 -0
  234. package/dist/zcap.js.map +1 -0
  235. package/package.json +109 -0
  236. package/src/auth-header-hooks.ts +163 -0
  237. package/src/authorize.ts +117 -0
  238. package/src/backends/filesystem.ts +3626 -0
  239. package/src/backends/postgres.ts +3073 -0
  240. package/src/backends/postgresSchema.ts +231 -0
  241. package/src/config.default.ts +657 -0
  242. package/src/corsProxy.ts +326 -0
  243. package/src/declarations.d.ts +28 -0
  244. package/src/digest.ts +223 -0
  245. package/src/errors.ts +1122 -0
  246. package/src/index.ts +21 -0
  247. package/src/lib/atomicFile.ts +176 -0
  248. package/src/lib/backendRegistry.ts +139 -0
  249. package/src/lib/backendUsage.ts +79 -0
  250. package/src/lib/backends.ts +351 -0
  251. package/src/lib/blindedIndex.ts +466 -0
  252. package/src/lib/collectionDescription.ts +43 -0
  253. package/src/lib/cursor.ts +52 -0
  254. package/src/lib/edvEnvelope.ts +120 -0
  255. package/src/lib/encryption.ts +472 -0
  256. package/src/lib/etag.ts +40 -0
  257. package/src/lib/exportManifest.ts +115 -0
  258. package/src/lib/importTar.ts +381 -0
  259. package/src/lib/isJson.ts +18 -0
  260. package/src/lib/keyEpoch.ts +89 -0
  261. package/src/lib/keyedMutex.ts +45 -0
  262. package/src/lib/kmsModule.ts +451 -0
  263. package/src/lib/kmsRecordCipher.ts +292 -0
  264. package/src/lib/pagination.ts +22 -0
  265. package/src/lib/paths.ts +382 -0
  266. package/src/lib/preconditions.ts +145 -0
  267. package/src/lib/resourceFileName.ts +69 -0
  268. package/src/lib/revocations.ts +116 -0
  269. package/src/lib/validateDid.ts +41 -0
  270. package/src/lib/validateId.ts +148 -0
  271. package/src/plugin.ts +288 -0
  272. package/src/policy.ts +176 -0
  273. package/src/provisioning.ts +98 -0
  274. package/src/requests/BackendRequest.ts +219 -0
  275. package/src/requests/CollectionRequest.ts +899 -0
  276. package/src/requests/KeyRequest.ts +617 -0
  277. package/src/requests/KeystoreRequest.ts +325 -0
  278. package/src/requests/PolicyRequest.ts +169 -0
  279. package/src/requests/ResourceRequest.ts +649 -0
  280. package/src/requests/RevocationRequest.ts +267 -0
  281. package/src/requests/SpaceRequest.ts +686 -0
  282. package/src/requests/SpacesRepositoryRequest.ts +194 -0
  283. package/src/requests/collectionContext.ts +41 -0
  284. package/src/requests/controllerConsent.ts +108 -0
  285. package/src/requests/keystoreContext.ts +124 -0
  286. package/src/requests/resourceInput.ts +118 -0
  287. package/src/requests/spaceContext.ts +311 -0
  288. package/src/routes.ts +420 -0
  289. package/src/server.ts +69 -0
  290. package/src/start.ts +71 -0
  291. package/src/storage.ts +60 -0
  292. package/src/types.ts +1016 -0
  293. package/src/views/home.hbs +9 -0
  294. package/src/views/templates/main.hbs +12 -0
  295. package/src/zcap.ts +657 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Library entry point: the surface a downstream composition consumes when this
3
+ * package is used as a dependency rather than run standalone. Exports the
4
+ * `fastifyWas` protocol plugin, the community-edition `createApp()`
5
+ * composition, the
6
+ * storage pieces a custom backend needs (the `StorageBackend` contract types,
7
+ * the reference `FileSystemBackend`, and `defaultBackend()`), and the typed
8
+ * protocol errors a backend or composition throws and handles.
9
+ *
10
+ * Importing anything from here also loads the Fastify module augmentation in
11
+ * types.ts (`FastifyInstance.serverUrl` / `.storage`, `FastifyRequest.zcap`),
12
+ * so consumers get the decorated instance typed for free.
13
+ */
14
+ export { fastifyWas, type FastifyWasOptions } from './plugin.js';
15
+ export { createApp } from './server.js';
16
+ export { defaultBackend } from './storage.js';
17
+ export { FileSystemBackend } from './backends/filesystem.js';
18
+ export { PostgresBackend } from './backends/postgres.js';
19
+ export { onboardingTokenAuthorizer } from './provisioning.js';
20
+ export type * from './types.js';
21
+ export * from './errors.js';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,mBAAmB,YAAY,CAAA;AAC/B,cAAc,aAAa,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Library entry point: the surface a downstream composition consumes when this
3
+ * package is used as a dependency rather than run standalone. Exports the
4
+ * `fastifyWas` protocol plugin, the community-edition `createApp()`
5
+ * composition, the
6
+ * storage pieces a custom backend needs (the `StorageBackend` contract types,
7
+ * the reference `FileSystemBackend`, and `defaultBackend()`), and the typed
8
+ * protocol errors a backend or composition throws and handles.
9
+ *
10
+ * Importing anything from here also loads the Fastify module augmentation in
11
+ * types.ts (`FastifyInstance.serverUrl` / `.storage`, `FastifyRequest.zcap`),
12
+ * so consumers get the decorated instance typed for free.
13
+ */
14
+ export { fastifyWas } from './plugin.js';
15
+ export { createApp } from './server.js';
16
+ export { defaultBackend } from './storage.js';
17
+ export { FileSystemBackend } from './backends/filesystem.js';
18
+ export { PostgresBackend } from './backends/postgres.js';
19
+ export { onboardingTokenAuthorizer } from './provisioning.js';
20
+ export * from './errors.js';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,UAAU,EAA0B,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAE7D,cAAc,aAAa,CAAA"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * The temp path a write for `filePath` stages into: a `.tmp-<uuid>` dot-file in
3
+ * the SAME directory as the target, so the final `rename` / `link` stays on one
4
+ * filesystem (a cross-device move is not atomic).
5
+ * @param filePath {string} the final destination path
6
+ * @returns {string}
7
+ */
8
+ export declare function tempPathFor(filePath: string): string;
9
+ /**
10
+ * fsync a directory so a just-created/renamed entry within it is durable.
11
+ * Swallows the errors platforms raise when a directory handle cannot be fsync'd
12
+ * (e.g. Windows), but lets genuine failures propagate.
13
+ * @param dirPath {string}
14
+ * @returns {Promise<void>}
15
+ */
16
+ export declare function fsyncDirectory(dirPath: string): Promise<void>;
17
+ /**
18
+ * Atomically and durably writes `data` to `filePath` (full replacement):
19
+ * write + fsync a temp file, `rename` it onto `filePath`, then fsync the
20
+ * directory. The final path never observes a partially-written file. On any
21
+ * failure the temp file is cleaned up.
22
+ * @param options {object}
23
+ * @param options.filePath {string}
24
+ * @param options.data {string|Buffer}
25
+ * @returns {Promise<void>}
26
+ */
27
+ export declare function atomicWriteFile({ filePath, data }: {
28
+ filePath: string;
29
+ data: string | Buffer;
30
+ }): Promise<void>;
31
+ /**
32
+ * Atomically and durably creates `filePath`, failing if it already exists --
33
+ * the `wx`-style create-only semantics, preserved atomically: write + fsync a
34
+ * temp file, then `fs.promises.link` it onto `filePath` (which rejects with
35
+ * `EEXIST` when the target exists), unlink the temp, and fsync the directory.
36
+ * An `EEXIST` propagates so callers can map it to their conflict errors; on any
37
+ * failure the temp file is cleaned up while `filePath` is left untouched.
38
+ * @param options {object}
39
+ * @param options.filePath {string}
40
+ * @param options.data {string|Buffer}
41
+ * @returns {Promise<void>}
42
+ */
43
+ export declare function atomicCreateFile({ filePath, data }: {
44
+ filePath: string;
45
+ data: string | Buffer;
46
+ }): Promise<void>;
47
+ /**
48
+ * Commits a temp file a caller streamed into (see `tempPathFor`) onto its final
49
+ * path durably: fsync the temp's bytes, `rename` it onto `filePath`, then fsync
50
+ * the directory. The caller owns cleanup of the temp file on a streaming
51
+ * failure (it never reaches here in that case).
52
+ * @param options {object}
53
+ * @param options.tempPath {string}
54
+ * @param options.filePath {string}
55
+ * @returns {Promise<void>}
56
+ */
57
+ export declare function commitTempFile({ tempPath, filePath }: {
58
+ tempPath: string;
59
+ filePath: string;
60
+ }): Promise<void>;
61
+ //# sourceMappingURL=atomicFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomicFile.d.ts","sourceRoot":"","sources":["../../src/lib/atomicFile.ts"],"names":[],"mappings":"AAqBA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBnE;AA2BD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,EACpC,QAAQ,EACR,IAAI,EACL,EAAE;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,QAAQ,EACR,IAAI,EACL,EAAE;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAahB;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,EACnC,QAAQ,EACR,QAAQ,EACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAShB"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Atomic, durable filesystem write helpers, shared by the filesystem backend so
3
+ * every write goes through one audited path. A durable write must survive a
4
+ * crash or power loss without leaving a torn (partially-written) or missing
5
+ * file: bytes land in a temp file in the SAME directory, the file descriptor is
6
+ * fsync'd before close, the temp is `rename`d (or hard-`link`ed) onto the final
7
+ * path -- an atomic metadata operation -- and finally the containing directory
8
+ * is fsync'd so the new directory entry itself is on stable storage.
9
+ *
10
+ * Pure and backend-agnostic (no backend imports). Temp files use a `.tmp-`
11
+ * dot-prefix that no directory enumeration in the tree parses or filters on
12
+ * (those match `r.`, `.meta.`, `.space.`, `.collection.`, `.policy.`,
13
+ * `.backend.`, or a `.json` suffix), so a temp file transiently present during
14
+ * a write is never mistaken for a Resource, sidecar, or config record.
15
+ */
16
+ import path from 'node:path';
17
+ import { randomUUID } from 'node:crypto';
18
+ import fs from 'node:fs';
19
+ const { open, rename, unlink, link } = fs.promises;
20
+ /**
21
+ * The temp path a write for `filePath` stages into: a `.tmp-<uuid>` dot-file in
22
+ * the SAME directory as the target, so the final `rename` / `link` stays on one
23
+ * filesystem (a cross-device move is not atomic).
24
+ * @param filePath {string} the final destination path
25
+ * @returns {string}
26
+ */
27
+ export function tempPathFor(filePath) {
28
+ return path.join(path.dirname(filePath), `.tmp-${randomUUID()}`);
29
+ }
30
+ /**
31
+ * fsync a directory so a just-created/renamed entry within it is durable.
32
+ * Swallows the errors platforms raise when a directory handle cannot be fsync'd
33
+ * (e.g. Windows), but lets genuine failures propagate.
34
+ * @param dirPath {string}
35
+ * @returns {Promise<void>}
36
+ */
37
+ export async function fsyncDirectory(dirPath) {
38
+ let handle;
39
+ try {
40
+ handle = await open(dirPath, 'r');
41
+ await handle.sync();
42
+ }
43
+ catch (err) {
44
+ const code = err.code;
45
+ // Platforms that cannot fsync a directory handle report one of these; the
46
+ // rename/link itself already succeeded, so treat directory fsync as a
47
+ // best-effort durability step rather than a hard failure.
48
+ if (code === 'EISDIR' ||
49
+ code === 'EPERM' ||
50
+ code === 'EBADF' ||
51
+ code === 'ENOTSUP' ||
52
+ code === 'EINVAL') {
53
+ return;
54
+ }
55
+ throw err;
56
+ }
57
+ finally {
58
+ await handle?.close();
59
+ }
60
+ }
61
+ /**
62
+ * Writes `data` to `tempPath` (exclusive create) and fsyncs the file descriptor
63
+ * before closing, so the bytes are on stable storage before any rename/link
64
+ * publishes the temp under a caller-visible name.
65
+ * @param options {object}
66
+ * @param options.tempPath {string}
67
+ * @param options.data {string|Buffer}
68
+ * @returns {Promise<void>}
69
+ */
70
+ async function writeAndSyncTemp({ tempPath, data }) {
71
+ const handle = await open(tempPath, 'wx');
72
+ try {
73
+ await handle.writeFile(data);
74
+ await handle.sync();
75
+ }
76
+ finally {
77
+ await handle.close();
78
+ }
79
+ }
80
+ /**
81
+ * Atomically and durably writes `data` to `filePath` (full replacement):
82
+ * write + fsync a temp file, `rename` it onto `filePath`, then fsync the
83
+ * directory. The final path never observes a partially-written file. On any
84
+ * failure the temp file is cleaned up.
85
+ * @param options {object}
86
+ * @param options.filePath {string}
87
+ * @param options.data {string|Buffer}
88
+ * @returns {Promise<void>}
89
+ */
90
+ export async function atomicWriteFile({ filePath, data }) {
91
+ const tempPath = tempPathFor(filePath);
92
+ try {
93
+ await writeAndSyncTemp({ tempPath, data });
94
+ await rename(tempPath, filePath);
95
+ }
96
+ catch (err) {
97
+ await unlink(tempPath).catch(() => { });
98
+ throw err;
99
+ }
100
+ await fsyncDirectory(path.dirname(filePath));
101
+ }
102
+ /**
103
+ * Atomically and durably creates `filePath`, failing if it already exists --
104
+ * the `wx`-style create-only semantics, preserved atomically: write + fsync a
105
+ * temp file, then `fs.promises.link` it onto `filePath` (which rejects with
106
+ * `EEXIST` when the target exists), unlink the temp, and fsync the directory.
107
+ * An `EEXIST` propagates so callers can map it to their conflict errors; on any
108
+ * failure the temp file is cleaned up while `filePath` is left untouched.
109
+ * @param options {object}
110
+ * @param options.filePath {string}
111
+ * @param options.data {string|Buffer}
112
+ * @returns {Promise<void>}
113
+ */
114
+ export async function atomicCreateFile({ filePath, data }) {
115
+ const tempPath = tempPathFor(filePath);
116
+ try {
117
+ await writeAndSyncTemp({ tempPath, data });
118
+ await link(tempPath, filePath);
119
+ }
120
+ catch (err) {
121
+ // Only ever remove the temp file here, never `filePath`: on an EEXIST the
122
+ // pre-existing target must survive intact.
123
+ await unlink(tempPath).catch(() => { });
124
+ throw err;
125
+ }
126
+ await unlink(tempPath).catch(() => { });
127
+ await fsyncDirectory(path.dirname(filePath));
128
+ }
129
+ /**
130
+ * Commits a temp file a caller streamed into (see `tempPathFor`) onto its final
131
+ * path durably: fsync the temp's bytes, `rename` it onto `filePath`, then fsync
132
+ * the directory. The caller owns cleanup of the temp file on a streaming
133
+ * failure (it never reaches here in that case).
134
+ * @param options {object}
135
+ * @param options.tempPath {string}
136
+ * @param options.filePath {string}
137
+ * @returns {Promise<void>}
138
+ */
139
+ export async function commitTempFile({ tempPath, filePath }) {
140
+ const handle = await open(tempPath, 'r+');
141
+ try {
142
+ await handle.sync();
143
+ }
144
+ finally {
145
+ await handle.close();
146
+ }
147
+ await rename(tempPath, filePath);
148
+ await fsyncDirectory(path.dirname(filePath));
149
+ }
150
+ //# sourceMappingURL=atomicFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomicFile.js","sourceRoot":"","sources":["../../src/lib/atomicFile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAA;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,UAAU,EAAE,EAAE,CAAC,CAAA;AAClE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,IAAI,MAA0C,CAAA;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACjC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAA;QAChD,0EAA0E;QAC1E,sEAAsE;QACtE,0DAA0D;QAC1D,IACE,IAAI,KAAK,QAAQ;YACjB,IAAI,KAAK,OAAO;YAChB,IAAI,KAAK,OAAO;YAChB,IAAI,KAAK,SAAS;YAClB,IAAI,KAAK,QAAQ,EACjB,CAAC;YACD,OAAM;QACR,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,EAAE,KAAK,EAAE,CAAA;IACvB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,gBAAgB,CAAC,EAC9B,QAAQ,EACR,IAAI,EAIL;IACC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,QAAQ,EACR,IAAI,EAIL;IACC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;IACtC,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,MAAM,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACtC,MAAM,GAAG,CAAA;IACX,CAAC;IACD,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC9C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EACrC,QAAQ,EACR,IAAI,EAIL;IACC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;IACtC,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,MAAM,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,0EAA0E;QAC1E,2CAA2C;QAC3C,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACtC,MAAM,GAAG,CAAA;IACX,CAAC;IACD,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACtC,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,QAAQ,EACR,QAAQ,EAIT;IACC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IACD,MAAM,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAChC,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC9C,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Per-Collection backend resolver (spec "Backends"; stage 3 of the BYOS plan).
3
+ * Maps a Collection's selected `backend.id` to the live `StorageBackend` that
4
+ * serves its **data plane** (resource bytes, metadata, listings, change feed),
5
+ * while the server `default` backend (`request.server.storage`) keeps the
6
+ * **control plane** (Space/Collection descriptions, policies, the backend
7
+ * registry records). For the `default` backend the two planes are the same
8
+ * instance, so behavior is byte-for-byte unchanged.
9
+ *
10
+ * `resolveBackend` short-circuits to the default backend for the common
11
+ * `default`/absent selection (one branch, no extra I/O). For a Collection that
12
+ * selects a registered `external` backend it loads the (secret-bearing) backend
13
+ * record from the control plane and builds -- memoized -- the provider adapter
14
+ * from the injected `backendProviders` registry; with no factory for the record's
15
+ * `provider` it fails closed with `unsupported-backend` (409). Memoization
16
+ * mirrors spaceContext.ts: one `LruCache` per registry (a `WeakMap`), so adapter
17
+ * instances are reused across requests and a registry's adapters are GC'd with
18
+ * it.
19
+ */
20
+ import type { FastifyRequest } from 'fastify';
21
+ import type { BackendProviderRegistry, CollectionDescription, StorageBackend } from '../types.js';
22
+ /**
23
+ * Resolves the data-plane `StorageBackend` for a Collection. Returns the server
24
+ * default backend when the Collection selects `default` (or selects nothing);
25
+ * otherwise builds (memoized) the provider adapter for its registered backend.
26
+ *
27
+ * @param options {object}
28
+ * @param options.request {FastifyRequest} supplies `request.server` (the
29
+ * control-plane `storage`, the `backendProviders` registry, and the
30
+ * non-request instance `log` passed to the memoized adapter factory)
31
+ * @param options.spaceId {string}
32
+ * @param options.collectionId {string}
33
+ * @param [options.collectionDescription] {CollectionDescription} the
34
+ * already-fetched description (most handlers fetch it for auth); read from the
35
+ * control plane when omitted
36
+ * @returns {Promise<StorageBackend>}
37
+ */
38
+ export declare function resolveBackend({ request, spaceId, collectionId, collectionDescription }: {
39
+ request: FastifyRequest;
40
+ spaceId: string;
41
+ collectionId: string;
42
+ collectionDescription?: CollectionDescription;
43
+ }): Promise<StorageBackend>;
44
+ /**
45
+ * Drops the memoized adapter for a backend record. Call after a record changes
46
+ * (register-replace / deregister) so the next resolve rebuilds the adapter from
47
+ * the new connection material.
48
+ * @param options {object}
49
+ * @param options.providers {BackendProviderRegistry}
50
+ * @param options.spaceId {string}
51
+ * @param options.backendId {string}
52
+ * @returns {void}
53
+ */
54
+ export declare function invalidateResolvedBackend({ providers, spaceId, backendId }: {
55
+ providers: BackendProviderRegistry;
56
+ spaceId: string;
57
+ backendId: string;
58
+ }): void;
59
+ //# sourceMappingURL=backendRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backendRegistry.d.ts","sourceRoot":"","sources":["../../src/lib/backendRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAK7C,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EACf,MAAM,aAAa,CAAA;AA0BpB;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAAC,EACnC,OAAO,EACP,OAAO,EACP,YAAY,EACZ,qBAAqB,EACtB,EAAE;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;CAC9C,GAAG,OAAO,CAAC,cAAc,CAAC,CAmC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,SAAS,EACT,OAAO,EACP,SAAS,EACV,EAAE;IACD,SAAS,EAAE,uBAAuB,CAAA;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,IAAI,CAGP"}
@@ -0,0 +1,92 @@
1
+ import { LruCache } from '@interop/lru-memoize';
2
+ import { DEFAULT_BACKEND_ID } from './backends.js';
3
+ import { UnsupportedBackendError } from '../errors.js';
4
+ import { RESOLVED_BACKEND_CACHE_MAX } from '../config.default.js';
5
+ /**
6
+ * One adapter cache per provider registry, keyed by `${spaceId}/${backendId}`.
7
+ * Scoped to the registry instance via a `WeakMap` (rather than module-global) so
8
+ * parallel test suites never share adapters, and a cache is discarded with its
9
+ * registry. `memoize` evicts a rejected promise automatically, so a failed
10
+ * resolution (missing record / no factory) is retried on the next request rather
11
+ * than cached.
12
+ */
13
+ const adapterCaches = new WeakMap();
14
+ /**
15
+ * Returns the (lazily created) adapter cache for a provider registry.
16
+ * @param providers {BackendProviderRegistry}
17
+ * @returns {LruCache}
18
+ */
19
+ function adapterCacheFor(providers) {
20
+ let cache = adapterCaches.get(providers);
21
+ if (!cache) {
22
+ cache = new LruCache({ max: RESOLVED_BACKEND_CACHE_MAX });
23
+ adapterCaches.set(providers, cache);
24
+ }
25
+ return cache;
26
+ }
27
+ /**
28
+ * Resolves the data-plane `StorageBackend` for a Collection. Returns the server
29
+ * default backend when the Collection selects `default` (or selects nothing);
30
+ * otherwise builds (memoized) the provider adapter for its registered backend.
31
+ *
32
+ * @param options {object}
33
+ * @param options.request {FastifyRequest} supplies `request.server` (the
34
+ * control-plane `storage`, the `backendProviders` registry, and the
35
+ * non-request instance `log` passed to the memoized adapter factory)
36
+ * @param options.spaceId {string}
37
+ * @param options.collectionId {string}
38
+ * @param [options.collectionDescription] {CollectionDescription} the
39
+ * already-fetched description (most handlers fetch it for auth); read from the
40
+ * control plane when omitted
41
+ * @returns {Promise<StorageBackend>}
42
+ */
43
+ export async function resolveBackend({ request, spaceId, collectionId, collectionDescription }) {
44
+ const { storage, backendProviders } = request.server;
45
+ const description = collectionDescription ??
46
+ (await storage.getCollectionDescription({ spaceId, collectionId }));
47
+ const backendId = description?.backend?.id;
48
+ // Fast path: the default backend is both control and data plane (unchanged).
49
+ if (backendId === undefined || backendId === DEFAULT_BACKEND_ID) {
50
+ return storage;
51
+ }
52
+ return adapterCacheFor(backendProviders).memoize({
53
+ key: `${spaceId}/${backendId}`,
54
+ fn: async () => {
55
+ // Control-plane read: the secret-bearing record lives on the default backend.
56
+ const record = await storage.getBackend({ spaceId, backendId });
57
+ if (!record) {
58
+ throw new UnsupportedBackendError({ backendId });
59
+ }
60
+ // Status gating is deferred (stage 4): the resolver keys on whether a
61
+ // provider factory is registered, not on `connection.status` (which only
62
+ // becomes `connected` once the OAuth exchange exists).
63
+ const factory = backendProviders.get(record.provider);
64
+ if (!factory) {
65
+ throw new UnsupportedBackendError({
66
+ backendId,
67
+ detail: `Backend '${backendId}' is registered but not connected/operable yet.`
68
+ });
69
+ }
70
+ // Wire the non-request instance logger (as `createApp` does for the
71
+ // primary backend), NOT `request.log`: the adapter is memoized and reused
72
+ // across requests, so capturing the first request's per-request child
73
+ // logger would mis-tag every later log line with that first request's id.
74
+ return factory(record, { logger: request.server.log });
75
+ }
76
+ });
77
+ }
78
+ /**
79
+ * Drops the memoized adapter for a backend record. Call after a record changes
80
+ * (register-replace / deregister) so the next resolve rebuilds the adapter from
81
+ * the new connection material.
82
+ * @param options {object}
83
+ * @param options.providers {BackendProviderRegistry}
84
+ * @param options.spaceId {string}
85
+ * @param options.backendId {string}
86
+ * @returns {void}
87
+ */
88
+ export function invalidateResolvedBackend({ providers, spaceId, backendId }) {
89
+ // Only touch a cache that already exists for this registry.
90
+ adapterCaches.get(providers)?.delete(`${spaceId}/${backendId}`);
91
+ }
92
+ //# sourceMappingURL=backendRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backendRegistry.js","sourceRoot":"","sources":["../../src/lib/backendRegistry.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AAOjE;;;;;;;GAOG;AACH,MAAM,aAAa,GAAG,IAAI,OAAO,EAAqC,CAAA;AAEtE;;;;GAIG;AACH,SAAS,eAAe,CAAC,SAAkC;IACzD,IAAI,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAI,QAAQ,CAAC,EAAE,GAAG,EAAE,0BAA0B,EAAE,CAAC,CAAA;QACzD,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,OAAO,EACP,OAAO,EACP,YAAY,EACZ,qBAAqB,EAMtB;IACC,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAA;IACpD,MAAM,WAAW,GACf,qBAAqB;QACrB,CAAC,MAAM,OAAO,CAAC,wBAAwB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;IACrE,MAAM,SAAS,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,CAAA;IAC1C,6EAA6E;IAC7E,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;QAChE,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,OAAO,eAAe,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAiB;QAC/D,GAAG,EAAE,GAAG,OAAO,IAAI,SAAS,EAAE;QAC9B,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,8EAA8E;YAC9E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;YAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,uBAAuB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;YAClD,CAAC;YACD,sEAAsE;YACtE,yEAAyE;YACzE,uDAAuD;YACvD,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACrD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,uBAAuB,CAAC;oBAChC,SAAS;oBACT,MAAM,EAAE,YAAY,SAAS,iDAAiD;iBAC/E,CAAC,CAAA;YACJ,CAAC;YACD,oEAAoE;YACpE,0EAA0E;YAC1E,sEAAsE;YACtE,0EAA0E;YAC1E,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAA;QACxD,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CAAC,EACxC,SAAS,EACT,OAAO,EACP,SAAS,EAKV;IACC,4DAA4D;IAC5D,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,GAAG,OAAO,IAAI,SAAS,EAAE,CAAC,CAAA;AACjE,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { BackendUsage } from '../types.js';
2
+ /**
3
+ * Builds the backend-identity and condition fields shared by the Space and
4
+ * per-Collection quota reports. `usageBytes` is what the report shows (the
5
+ * Space total or a single Collection's slice); `spaceTotalBytes` drives the
6
+ * `state` / `restrictedActions`, which are backend-wide (the quota is a
7
+ * per-Space limit) and so always measured against the Space total. The
8
+ * `constraints.maxUploadBytes` cap is advertised when configured.
9
+ * @param options {object}
10
+ * @param options.usageBytes {number} the usage figure to report
11
+ * @param options.spaceTotalBytes {number} the Space total, for state
12
+ * @param [options.capacityBytes] {number} the configured per-Space limit
13
+ * @param [options.maxUploadBytes] {number} the per-upload cap to advertise
14
+ * @param options.id {string} the backend's id (from `describe()`)
15
+ * @param [options.name] {string} the backend's display name
16
+ * @param options.managedBy {string} the backend's custody mode
17
+ * @returns {Omit<BackendUsage, 'measuredAt' | 'usageByCollection'>}
18
+ */
19
+ export declare function backendUsageFields({ usageBytes, spaceTotalBytes, capacityBytes, maxUploadBytes, id, name, managedBy }: {
20
+ usageBytes: number;
21
+ spaceTotalBytes: number;
22
+ capacityBytes?: number;
23
+ maxUploadBytes?: number;
24
+ id: string;
25
+ name?: string;
26
+ managedBy: BackendUsage['managedBy'];
27
+ }): Omit<BackendUsage, 'measuredAt' | 'usageByCollection'>;
28
+ //# sourceMappingURL=backendUsage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backendUsage.d.ts","sourceRoot":"","sources":["../../src/lib/backendUsage.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAGV,YAAY,EAEb,MAAM,aAAa,CAAA;AAEpB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,EAAE,EACF,IAAI,EACJ,SAAS,EACV,EAAE;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,CAAA;CACrC,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,mBAAmB,CAAC,CA8BzD"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Backend-agnostic derivation of the quota-report condition fields (spec
3
+ * "Quotas"). Both storage backends build their `BackendUsage` entries through
4
+ * this helper so the `state` / `limit` / `restrictedActions` thresholds cannot
5
+ * drift between them; only the usage *measurement* (a `du` pass vs a
6
+ * transactional counter) is backend-specific.
7
+ */
8
+ import { QUOTA_NEAR_LIMIT_FRACTION } from '../config.default.js';
9
+ /**
10
+ * Builds the backend-identity and condition fields shared by the Space and
11
+ * per-Collection quota reports. `usageBytes` is what the report shows (the
12
+ * Space total or a single Collection's slice); `spaceTotalBytes` drives the
13
+ * `state` / `restrictedActions`, which are backend-wide (the quota is a
14
+ * per-Space limit) and so always measured against the Space total. The
15
+ * `constraints.maxUploadBytes` cap is advertised when configured.
16
+ * @param options {object}
17
+ * @param options.usageBytes {number} the usage figure to report
18
+ * @param options.spaceTotalBytes {number} the Space total, for state
19
+ * @param [options.capacityBytes] {number} the configured per-Space limit
20
+ * @param [options.maxUploadBytes] {number} the per-upload cap to advertise
21
+ * @param options.id {string} the backend's id (from `describe()`)
22
+ * @param [options.name] {string} the backend's display name
23
+ * @param options.managedBy {string} the backend's custody mode
24
+ * @returns {Omit<BackendUsage, 'measuredAt' | 'usageByCollection'>}
25
+ */
26
+ export function backendUsageFields({ usageBytes, spaceTotalBytes, capacityBytes, maxUploadBytes, id, name, managedBy }) {
27
+ const limit = capacityBytes === undefined
28
+ ? { isUnlimited: true }
29
+ : { capacityBytes, isUnlimited: false };
30
+ let state = 'ok';
31
+ let restrictedActions = [];
32
+ if (capacityBytes !== undefined) {
33
+ if (spaceTotalBytes >= capacityBytes) {
34
+ state = 'over-quota';
35
+ // The backend is full: writes are restricted, reads/deletes still work.
36
+ restrictedActions = ['POST', 'PUT'];
37
+ }
38
+ else if (spaceTotalBytes >= capacityBytes * QUOTA_NEAR_LIMIT_FRACTION) {
39
+ state = 'near-limit';
40
+ }
41
+ }
42
+ return {
43
+ id,
44
+ ...(name !== undefined && { name }),
45
+ managedBy,
46
+ state,
47
+ usageBytes,
48
+ limit,
49
+ ...(maxUploadBytes !== undefined && {
50
+ constraints: { maxUploadBytes }
51
+ }),
52
+ restrictedActions
53
+ };
54
+ }
55
+ //# sourceMappingURL=backendUsage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backendUsage.js","sourceRoot":"","sources":["../../src/lib/backendUsage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAQhE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,UAAU,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,EAAE,EACF,IAAI,EACJ,SAAS,EASV;IACC,MAAM,KAAK,GACT,aAAa,KAAK,SAAS;QACzB,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE;QACvB,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;IAE3C,IAAI,KAAK,GAAiB,IAAI,CAAA;IAC9B,IAAI,iBAAiB,GAAa,EAAE,CAAA;IACpC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,eAAe,IAAI,aAAa,EAAE,CAAC;YACrC,KAAK,GAAG,YAAY,CAAA;YACpB,wEAAwE;YACxE,iBAAiB,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACrC,CAAC;aAAM,IAAI,eAAe,IAAI,aAAa,GAAG,yBAAyB,EAAE,CAAC;YACxE,KAAK,GAAG,YAAY,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO;QACL,EAAE;QACF,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC;QACnC,SAAS;QACT,KAAK;QACL,UAAU;QACV,KAAK;QACL,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI;YAClC,WAAW,EAAE,EAAE,cAAc,EAAE;SAChC,CAAC;QACF,iBAAiB;KAClB,CAAA;AACH,CAAC"}