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.
- package/CHANGELOG.md +1432 -0
- package/LICENSE +661 -0
- package/README.md +305 -0
- package/common/css/materialize.1.0.0.min.css +13 -0
- package/dist/auth-header-hooks.d.ts +84 -0
- package/dist/auth-header-hooks.d.ts.map +1 -0
- package/dist/auth-header-hooks.js +136 -0
- package/dist/auth-header-hooks.js.map +1 -0
- package/dist/authorize.d.ts +45 -0
- package/dist/authorize.d.ts.map +1 -0
- package/dist/authorize.js +76 -0
- package/dist/authorize.js.map +1 -0
- package/dist/backends/filesystem.d.ts +1179 -0
- package/dist/backends/filesystem.d.ts.map +1 -0
- package/dist/backends/filesystem.js +2727 -0
- package/dist/backends/filesystem.js.map +1 -0
- package/dist/backends/postgres.d.ts +833 -0
- package/dist/backends/postgres.d.ts.map +1 -0
- package/dist/backends/postgres.js +2164 -0
- package/dist/backends/postgres.js.map +1 -0
- package/dist/backends/postgresSchema.d.ts +36 -0
- package/dist/backends/postgresSchema.d.ts.map +1 -0
- package/dist/backends/postgresSchema.js +203 -0
- package/dist/backends/postgresSchema.js.map +1 -0
- package/dist/config.default.d.ts +360 -0
- package/dist/config.default.d.ts.map +1 -0
- package/dist/config.default.js +493 -0
- package/dist/config.default.js.map +1 -0
- package/dist/corsProxy.d.ts +45 -0
- package/dist/corsProxy.d.ts.map +1 -0
- package/dist/corsProxy.js +278 -0
- package/dist/corsProxy.js.map +1 -0
- package/dist/digest.d.ts +45 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +174 -0
- package/dist/digest.js.map +1 -0
- package/dist/errors.d.ts +654 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +960 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/atomicFile.d.ts +61 -0
- package/dist/lib/atomicFile.d.ts.map +1 -0
- package/dist/lib/atomicFile.js +150 -0
- package/dist/lib/atomicFile.js.map +1 -0
- package/dist/lib/backendRegistry.d.ts +59 -0
- package/dist/lib/backendRegistry.d.ts.map +1 -0
- package/dist/lib/backendRegistry.js +92 -0
- package/dist/lib/backendRegistry.js.map +1 -0
- package/dist/lib/backendUsage.d.ts +28 -0
- package/dist/lib/backendUsage.d.ts.map +1 -0
- package/dist/lib/backendUsage.js +55 -0
- package/dist/lib/backendUsage.js.map +1 -0
- package/dist/lib/backends.d.ts +142 -0
- package/dist/lib/backends.d.ts.map +1 -0
- package/dist/lib/backends.js +272 -0
- package/dist/lib/backends.js.map +1 -0
- package/dist/lib/blindedIndex.d.ts +156 -0
- package/dist/lib/blindedIndex.d.ts.map +1 -0
- package/dist/lib/blindedIndex.js +338 -0
- package/dist/lib/blindedIndex.js.map +1 -0
- package/dist/lib/collectionDescription.d.ts +33 -0
- package/dist/lib/collectionDescription.d.ts.map +1 -0
- package/dist/lib/collectionDescription.js +21 -0
- package/dist/lib/collectionDescription.js.map +1 -0
- package/dist/lib/cursor.d.ts +18 -0
- package/dist/lib/cursor.d.ts.map +1 -0
- package/dist/lib/cursor.js +50 -0
- package/dist/lib/cursor.js.map +1 -0
- package/dist/lib/edvEnvelope.d.ts +50 -0
- package/dist/lib/edvEnvelope.d.ts.map +1 -0
- package/dist/lib/edvEnvelope.js +106 -0
- package/dist/lib/edvEnvelope.js.map +1 -0
- package/dist/lib/encryption.d.ts +192 -0
- package/dist/lib/encryption.d.ts.map +1 -0
- package/dist/lib/encryption.js +383 -0
- package/dist/lib/encryption.js.map +1 -0
- package/dist/lib/etag.d.ts +33 -0
- package/dist/lib/etag.d.ts.map +1 -0
- package/dist/lib/etag.js +36 -0
- package/dist/lib/etag.js.map +1 -0
- package/dist/lib/exportManifest.d.ts +29 -0
- package/dist/lib/exportManifest.d.ts.map +1 -0
- package/dist/lib/exportManifest.js +77 -0
- package/dist/lib/exportManifest.js.map +1 -0
- package/dist/lib/importTar.d.ts +81 -0
- package/dist/lib/importTar.d.ts.map +1 -0
- package/dist/lib/importTar.js +301 -0
- package/dist/lib/importTar.js.map +1 -0
- package/dist/lib/isJson.d.ts +16 -0
- package/dist/lib/isJson.d.ts.map +1 -0
- package/dist/lib/isJson.js +17 -0
- package/dist/lib/isJson.js.map +1 -0
- package/dist/lib/keyEpoch.d.ts +38 -0
- package/dist/lib/keyEpoch.d.ts.map +1 -0
- package/dist/lib/keyEpoch.js +75 -0
- package/dist/lib/keyEpoch.js.map +1 -0
- package/dist/lib/keyedMutex.d.ts +28 -0
- package/dist/lib/keyedMutex.d.ts.map +1 -0
- package/dist/lib/keyedMutex.js +45 -0
- package/dist/lib/keyedMutex.js.map +1 -0
- package/dist/lib/kmsModule.d.ts +62 -0
- package/dist/lib/kmsModule.d.ts.map +1 -0
- package/dist/lib/kmsModule.js +327 -0
- package/dist/lib/kmsModule.js.map +1 -0
- package/dist/lib/kmsRecordCipher.d.ts +82 -0
- package/dist/lib/kmsRecordCipher.d.ts.map +1 -0
- package/dist/lib/kmsRecordCipher.js +226 -0
- package/dist/lib/kmsRecordCipher.js.map +1 -0
- package/dist/lib/pagination.d.ts +19 -0
- package/dist/lib/pagination.d.ts.map +1 -0
- package/dist/lib/pagination.js +21 -0
- package/dist/lib/pagination.js.map +1 -0
- package/dist/lib/paths.d.ts +273 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +270 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/preconditions.d.ts +65 -0
- package/dist/lib/preconditions.d.ts.map +1 -0
- package/dist/lib/preconditions.js +112 -0
- package/dist/lib/preconditions.js.map +1 -0
- package/dist/lib/resourceFileName.d.ts +41 -0
- package/dist/lib/resourceFileName.d.ts.map +1 -0
- package/dist/lib/resourceFileName.js +58 -0
- package/dist/lib/resourceFileName.js.map +1 -0
- package/dist/lib/revocations.d.ts +49 -0
- package/dist/lib/revocations.d.ts.map +1 -0
- package/dist/lib/revocations.js +86 -0
- package/dist/lib/revocations.js.map +1 -0
- package/dist/lib/validateDid.d.ts +19 -0
- package/dist/lib/validateDid.d.ts.map +1 -0
- package/dist/lib/validateDid.js +35 -0
- package/dist/lib/validateDid.js.map +1 -0
- package/dist/lib/validateId.d.ts +66 -0
- package/dist/lib/validateId.d.ts.map +1 -0
- package/dist/lib/validateId.js +126 -0
- package/dist/lib/validateId.js.map +1 -0
- package/dist/plugin.d.ts +115 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +134 -0
- package/dist/plugin.js.map +1 -0
- package/dist/policy.d.ts +78 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +115 -0
- package/dist/policy.js.map +1 -0
- package/dist/provisioning.d.ts +38 -0
- package/dist/provisioning.d.ts.map +1 -0
- package/dist/provisioning.js +72 -0
- package/dist/provisioning.js.map +1 -0
- package/dist/requests/BackendRequest.d.ts +61 -0
- package/dist/requests/BackendRequest.d.ts.map +1 -0
- package/dist/requests/BackendRequest.js +152 -0
- package/dist/requests/BackendRequest.js.map +1 -0
- package/dist/requests/CollectionRequest.d.ts +234 -0
- package/dist/requests/CollectionRequest.d.ts.map +1 -0
- package/dist/requests/CollectionRequest.js +705 -0
- package/dist/requests/CollectionRequest.js.map +1 -0
- package/dist/requests/KeyRequest.d.ts +115 -0
- package/dist/requests/KeyRequest.d.ts.map +1 -0
- package/dist/requests/KeyRequest.js +468 -0
- package/dist/requests/KeyRequest.js.map +1 -0
- package/dist/requests/KeystoreRequest.d.ts +99 -0
- package/dist/requests/KeystoreRequest.d.ts.map +1 -0
- package/dist/requests/KeystoreRequest.js +247 -0
- package/dist/requests/KeystoreRequest.js.map +1 -0
- package/dist/requests/PolicyRequest.d.ts +53 -0
- package/dist/requests/PolicyRequest.d.ts.map +1 -0
- package/dist/requests/PolicyRequest.js +124 -0
- package/dist/requests/PolicyRequest.js.map +1 -0
- package/dist/requests/ResourceRequest.d.ts +134 -0
- package/dist/requests/ResourceRequest.d.ts.map +1 -0
- package/dist/requests/ResourceRequest.js +548 -0
- package/dist/requests/ResourceRequest.js.map +1 -0
- package/dist/requests/RevocationRequest.d.ts +67 -0
- package/dist/requests/RevocationRequest.d.ts.map +1 -0
- package/dist/requests/RevocationRequest.js +187 -0
- package/dist/requests/RevocationRequest.js.map +1 -0
- package/dist/requests/SpaceRequest.d.ts +204 -0
- package/dist/requests/SpaceRequest.d.ts.map +1 -0
- package/dist/requests/SpaceRequest.js +520 -0
- package/dist/requests/SpaceRequest.js.map +1 -0
- package/dist/requests/SpacesRepositoryRequest.d.ts +50 -0
- package/dist/requests/SpacesRepositoryRequest.d.ts.map +1 -0
- package/dist/requests/SpacesRepositoryRequest.js +159 -0
- package/dist/requests/SpacesRepositoryRequest.js.map +1 -0
- package/dist/requests/collectionContext.d.ts +21 -0
- package/dist/requests/collectionContext.d.ts.map +1 -0
- package/dist/requests/collectionContext.js +30 -0
- package/dist/requests/collectionContext.js.map +1 -0
- package/dist/requests/controllerConsent.d.ts +58 -0
- package/dist/requests/controllerConsent.d.ts.map +1 -0
- package/dist/requests/controllerConsent.js +73 -0
- package/dist/requests/controllerConsent.js.map +1 -0
- package/dist/requests/keystoreContext.d.ts +68 -0
- package/dist/requests/keystoreContext.d.ts.map +1 -0
- package/dist/requests/keystoreContext.js +87 -0
- package/dist/requests/keystoreContext.js.map +1 -0
- package/dist/requests/resourceInput.d.ts +19 -0
- package/dist/requests/resourceInput.d.ts.map +1 -0
- package/dist/requests/resourceInput.js +102 -0
- package/dist/requests/resourceInput.js.map +1 -0
- package/dist/requests/spaceContext.d.ts +127 -0
- package/dist/requests/spaceContext.d.ts.map +1 -0
- package/dist/requests/spaceContext.js +201 -0
- package/dist/requests/spaceContext.js.map +1 -0
- package/dist/routes.d.ts +55 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +306 -0
- package/dist/routes.js.map +1 -0
- package/dist/server.d.ts +20 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +60 -0
- package/dist/server.js.map +1 -0
- package/dist/start.d.ts +7 -0
- package/dist/start.d.ts.map +1 -0
- package/dist/start.js +61 -0
- package/dist/start.js.map +1 -0
- package/dist/storage.d.ts +29 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +47 -0
- package/dist/storage.js.map +1 -0
- package/dist/types.d.ts +915 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/views/home.hbs +9 -0
- package/dist/views/templates/main.hbs +12 -0
- package/dist/zcap.d.ts +267 -0
- package/dist/zcap.d.ts.map +1 -0
- package/dist/zcap.js +478 -0
- package/dist/zcap.js.map +1 -0
- package/package.json +109 -0
- package/src/auth-header-hooks.ts +163 -0
- package/src/authorize.ts +117 -0
- package/src/backends/filesystem.ts +3626 -0
- package/src/backends/postgres.ts +3073 -0
- package/src/backends/postgresSchema.ts +231 -0
- package/src/config.default.ts +657 -0
- package/src/corsProxy.ts +326 -0
- package/src/declarations.d.ts +28 -0
- package/src/digest.ts +223 -0
- package/src/errors.ts +1122 -0
- package/src/index.ts +21 -0
- package/src/lib/atomicFile.ts +176 -0
- package/src/lib/backendRegistry.ts +139 -0
- package/src/lib/backendUsage.ts +79 -0
- package/src/lib/backends.ts +351 -0
- package/src/lib/blindedIndex.ts +466 -0
- package/src/lib/collectionDescription.ts +43 -0
- package/src/lib/cursor.ts +52 -0
- package/src/lib/edvEnvelope.ts +120 -0
- package/src/lib/encryption.ts +472 -0
- package/src/lib/etag.ts +40 -0
- package/src/lib/exportManifest.ts +115 -0
- package/src/lib/importTar.ts +381 -0
- package/src/lib/isJson.ts +18 -0
- package/src/lib/keyEpoch.ts +89 -0
- package/src/lib/keyedMutex.ts +45 -0
- package/src/lib/kmsModule.ts +451 -0
- package/src/lib/kmsRecordCipher.ts +292 -0
- package/src/lib/pagination.ts +22 -0
- package/src/lib/paths.ts +382 -0
- package/src/lib/preconditions.ts +145 -0
- package/src/lib/resourceFileName.ts +69 -0
- package/src/lib/revocations.ts +116 -0
- package/src/lib/validateDid.ts +41 -0
- package/src/lib/validateId.ts +148 -0
- package/src/plugin.ts +288 -0
- package/src/policy.ts +176 -0
- package/src/provisioning.ts +98 -0
- package/src/requests/BackendRequest.ts +219 -0
- package/src/requests/CollectionRequest.ts +899 -0
- package/src/requests/KeyRequest.ts +617 -0
- package/src/requests/KeystoreRequest.ts +325 -0
- package/src/requests/PolicyRequest.ts +169 -0
- package/src/requests/ResourceRequest.ts +649 -0
- package/src/requests/RevocationRequest.ts +267 -0
- package/src/requests/SpaceRequest.ts +686 -0
- package/src/requests/SpacesRepositoryRequest.ts +194 -0
- package/src/requests/collectionContext.ts +41 -0
- package/src/requests/controllerConsent.ts +108 -0
- package/src/requests/keystoreContext.ts +124 -0
- package/src/requests/resourceInput.ts +118 -0
- package/src/requests/spaceContext.ts +311 -0
- package/src/routes.ts +420 -0
- package/src/server.ts +69 -0
- package/src/start.ts +71 -0
- package/src/storage.ts +60 -0
- package/src/types.ts +1016 -0
- package/src/views/home.hbs +9 -0
- package/src/views/templates/main.hbs +12 -0
- 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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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":"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"}
|
|
@@ -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"}
|