@researchdatabox/redbox-core 0.0.1-beta.9228 → 0.0.1-beta.9474
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/dist/CoreController.d.ts +4 -0
- package/dist/CoreController.d.ts.map +1 -1
- package/dist/CoreController.js +33 -1
- package/dist/DatastreamService.d.ts +5 -2
- package/dist/DatastreamService.d.ts.map +1 -1
- package/dist/QueueService.d.ts +1 -1
- package/dist/QueueService.d.ts.map +1 -1
- package/dist/RecordsService.d.ts +38 -2
- package/dist/RecordsService.d.ts.map +1 -1
- package/dist/StorageService.d.ts +2 -1
- package/dist/StorageService.d.ts.map +1 -1
- package/dist/api-routes/apib.d.ts +7 -0
- package/dist/api-routes/apib.d.ts.map +1 -0
- package/dist/api-routes/apib.js +43 -0
- package/dist/api-routes/define.d.ts +4 -0
- package/dist/api-routes/define.d.ts.map +1 -0
- package/dist/api-routes/define.js +29 -0
- package/dist/api-routes/groups/admin.d.ts +6 -0
- package/dist/api-routes/groups/admin.d.ts.map +1 -0
- package/dist/api-routes/groups/admin.js +53 -0
- package/dist/api-routes/groups/appconfig.d.ts +4 -0
- package/dist/api-routes/groups/appconfig.d.ts.map +1 -0
- package/dist/api-routes/groups/appconfig.js +33 -0
- package/dist/api-routes/groups/branding.d.ts +8 -0
- package/dist/api-routes/groups/branding.d.ts.map +1 -0
- package/dist/api-routes/groups/branding.js +61 -0
- package/dist/api-routes/groups/dashboard-config.d.ts +11 -0
- package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -0
- package/dist/api-routes/groups/dashboard-config.js +90 -0
- package/dist/api-routes/groups/export.d.ts +3 -0
- package/dist/api-routes/groups/export.d.ts.map +1 -0
- package/dist/api-routes/groups/export.js +30 -0
- package/dist/api-routes/groups/forms.d.ts +4 -0
- package/dist/api-routes/groups/forms.d.ts.map +1 -0
- package/dist/api-routes/groups/forms.js +29 -0
- package/dist/api-routes/groups/integration-audit.d.ts +3 -0
- package/dist/api-routes/groups/integration-audit.d.ts.map +1 -0
- package/dist/api-routes/groups/integration-audit.js +35 -0
- package/dist/api-routes/groups/notifications.d.ts +3 -0
- package/dist/api-routes/groups/notifications.d.ts.map +1 -0
- package/dist/api-routes/groups/notifications.js +20 -0
- package/dist/api-routes/groups/records.d.ts +28 -0
- package/dist/api-routes/groups/records.d.ts.map +1 -0
- package/dist/api-routes/groups/records.js +349 -0
- package/dist/api-routes/groups/recordtypes.d.ts +4 -0
- package/dist/api-routes/groups/recordtypes.d.ts.map +1 -0
- package/dist/api-routes/groups/recordtypes.js +27 -0
- package/dist/api-routes/groups/reports.d.ts +3 -0
- package/dist/api-routes/groups/reports.d.ts.map +1 -0
- package/dist/api-routes/groups/reports.js +20 -0
- package/dist/api-routes/groups/search-query.d.ts +4 -0
- package/dist/api-routes/groups/search-query.d.ts.map +1 -0
- package/dist/api-routes/groups/search-query.js +51 -0
- package/dist/api-routes/groups/search.d.ts +6 -0
- package/dist/api-routes/groups/search.d.ts.map +1 -0
- package/dist/api-routes/groups/search.js +31 -0
- package/dist/api-routes/groups/translation.d.ts +8 -0
- package/dist/api-routes/groups/translation.d.ts.map +1 -0
- package/dist/api-routes/groups/translation.js +78 -0
- package/dist/api-routes/groups/users.d.ts +17 -0
- package/dist/api-routes/groups/users.d.ts.map +1 -0
- package/dist/api-routes/groups/users.js +149 -0
- package/dist/api-routes/groups/vocabulary.d.ts +10 -0
- package/dist/api-routes/groups/vocabulary.d.ts.map +1 -0
- package/dist/api-routes/groups/vocabulary.js +97 -0
- package/dist/api-routes/helpers.d.ts +29 -0
- package/dist/api-routes/helpers.d.ts.map +1 -0
- package/dist/api-routes/helpers.js +486 -0
- package/dist/api-routes/index.d.ts +25 -0
- package/dist/api-routes/index.d.ts.map +1 -0
- package/dist/api-routes/index.js +41 -0
- package/dist/api-routes/openapi.d.ts +27 -0
- package/dist/api-routes/openapi.d.ts.map +1 -0
- package/dist/api-routes/openapi.js +273 -0
- package/dist/api-routes/request-extraction.d.ts +14 -0
- package/dist/api-routes/request-extraction.d.ts.map +1 -0
- package/dist/api-routes/request-extraction.js +100 -0
- package/dist/api-routes/route-factory.d.ts +3 -0
- package/dist/api-routes/route-factory.d.ts.map +1 -0
- package/dist/api-routes/route-factory.js +30 -0
- package/dist/api-routes/route-registry.d.ts +24 -0
- package/dist/api-routes/route-registry.d.ts.map +1 -0
- package/dist/api-routes/route-registry.js +113 -0
- package/dist/api-routes/route-resolution.d.ts +4 -0
- package/dist/api-routes/route-resolution.d.ts.map +1 -0
- package/dist/api-routes/route-resolution.js +57 -0
- package/dist/api-routes/schemas/common.d.ts +37 -0
- package/dist/api-routes/schemas/common.d.ts.map +1 -0
- package/dist/api-routes/schemas/common.js +147 -0
- package/dist/api-routes/schemas/responses.d.ts +2904 -0
- package/dist/api-routes/schemas/responses.d.ts.map +1 -0
- package/dist/api-routes/schemas/responses.js +417 -0
- package/dist/api-routes/types.d.ts +70 -0
- package/dist/api-routes/types.d.ts.map +1 -0
- package/dist/api-routes/types.js +3 -0
- package/dist/api-routes/validation.d.ts +32 -0
- package/dist/api-routes/validation.d.ts.map +1 -0
- package/dist/api-routes/validation.js +142 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +10 -10
- package/dist/config/agendaQueue.config.d.ts +25 -1
- package/dist/config/agendaQueue.config.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.js +19 -2
- package/dist/config/auth.config.d.ts.map +1 -1
- package/dist/config/auth.config.js +21 -2
- package/dist/config/brandingConfigurationDefaults.config.js +3 -3
- package/dist/config/dashboardtype.config.d.ts +5 -0
- package/dist/config/dashboardtype.config.d.ts.map +1 -1
- package/dist/config/dashboardtype.config.js +1 -1
- package/dist/config/dashboardview.config.d.ts +24 -0
- package/dist/config/dashboardview.config.d.ts.map +1 -0
- package/dist/config/dashboardview.config.js +137 -0
- package/dist/config/dompurify.config.d.ts.map +1 -1
- package/dist/config/dompurify.config.js +2 -2
- package/dist/config/http.config.d.ts.map +1 -1
- package/dist/config/http.config.js +5 -3
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -1
- package/dist/config/namedQuery.config.d.ts +10 -2
- package/dist/config/namedQuery.config.d.ts.map +1 -1
- package/dist/config/namedQuery.config.js +17 -17
- package/dist/config/policies.config.d.ts +3 -0
- package/dist/config/policies.config.d.ts.map +1 -1
- package/dist/config/policies.config.js +35 -1
- package/dist/config/record.config.d.ts.map +1 -1
- package/dist/config/record.config.js +2 -1
- package/dist/config/recordtype.config.d.ts +28 -0
- package/dist/config/recordtype.config.d.ts.map +1 -1
- package/dist/config/recordtype.config.js +85 -9
- package/dist/config/routes.config.d.ts +5 -2
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +24 -110
- package/dist/config/storage.config.d.ts +20 -2
- package/dist/config/storage.config.d.ts.map +1 -1
- package/dist/config/storage.config.js +2 -1
- package/dist/config/vocab.config.d.ts +30 -0
- package/dist/config/vocab.config.d.ts.map +1 -1
- package/dist/config/vocab.config.js +21 -1
- package/dist/config/webpack.config.d.ts.map +1 -1
- package/dist/config/webpack.config.js +13 -7
- package/dist/config/workflow.config.d.ts +0 -1
- package/dist/config/workflow.config.d.ts.map +1 -1
- package/dist/config/workflow.config.js +1 -137
- package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
- package/dist/configmodels/AdminSidebarConfig.js +1 -2
- package/dist/configmodels/ConfigModels.d.ts +1 -1
- package/dist/configmodels/ConfigModels.d.ts.map +1 -1
- package/dist/configmodels/ConfigModels.js +9 -1
- package/dist/configmodels/DashboardTableOverrideConfig.d.ts +1011 -0
- package/dist/configmodels/DashboardTableOverrideConfig.d.ts.map +1 -0
- package/dist/configmodels/DashboardTableOverrideConfig.js +138 -0
- package/dist/controllers/AdminController.d.ts +0 -1
- package/dist/controllers/AdminController.d.ts.map +1 -1
- package/dist/controllers/AdminController.js +2 -32
- package/dist/controllers/BrandingController.d.ts +3 -5
- package/dist/controllers/BrandingController.d.ts.map +1 -1
- package/dist/controllers/BrandingController.js +29 -21
- package/dist/controllers/DashboardConfigController.d.ts +8 -0
- package/dist/controllers/DashboardConfigController.d.ts.map +1 -0
- package/dist/controllers/DashboardConfigController.js +17 -0
- package/dist/controllers/DynamicAssetController.d.ts +1 -0
- package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
- package/dist/controllers/DynamicAssetController.js +20 -1
- package/dist/controllers/EmailController.d.ts.map +1 -1
- package/dist/controllers/EmailController.js +16 -12
- package/dist/controllers/FormVocabularyController.d.ts +1 -0
- package/dist/controllers/FormVocabularyController.d.ts.map +1 -1
- package/dist/controllers/FormVocabularyController.js +94 -4
- package/dist/controllers/RecordController.d.ts +18 -1
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +274 -124
- package/dist/controllers/RenderViewController.d.ts.map +1 -1
- package/dist/controllers/RenderViewController.js +4 -2
- package/dist/controllers/TranslationController.d.ts.map +1 -1
- package/dist/controllers/TranslationController.js +3 -2
- package/dist/controllers/WorkspaceTypesController.d.ts +3 -2
- package/dist/controllers/WorkspaceTypesController.d.ts.map +1 -1
- package/dist/controllers/WorkspaceTypesController.js +120 -31
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +7 -4
- package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
- package/dist/controllers/webservice/AdminController.js +15 -16
- package/dist/controllers/webservice/AppConfigController.d.ts.map +1 -1
- package/dist/controllers/webservice/AppConfigController.js +19 -20
- package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
- package/dist/controllers/webservice/BrandingController.js +101 -48
- package/dist/controllers/webservice/DashboardConfigController.d.ts +26 -0
- package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -0
- package/dist/controllers/webservice/DashboardConfigController.js +241 -0
- package/dist/controllers/webservice/ExportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ExportController.js +11 -11
- package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/FormManagementController.js +11 -13
- package/dist/controllers/webservice/RecordController.d.ts +4 -0
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordController.js +428 -257
- package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordTypeController.js +9 -10
- package/dist/controllers/webservice/ReportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ReportController.js +18 -20
- package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
- package/dist/controllers/webservice/SearchController.js +28 -35
- package/dist/controllers/webservice/TranslationController.d.ts.map +1 -1
- package/dist/controllers/webservice/TranslationController.js +61 -39
- package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/UserManagementController.js +112 -99
- package/dist/controllers/webservice/VocabularyController.d.ts.map +1 -1
- package/dist/controllers/webservice/VocabularyController.js +76 -28
- package/dist/hooks/defineRedboxHook.d.ts +3 -0
- package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
- package/dist/hooks/defineRedboxHook.js +4 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/loader/index.d.ts +6 -0
- package/dist/loader/index.d.ts.map +1 -1
- package/dist/loader/index.js +57 -10
- package/dist/middleware/redboxSession.js +1 -1
- package/dist/model/DashboardTypeResponseModel.d.ts +13 -1
- package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.js +12 -4
- package/dist/model/DashboardViewResponseModel.d.ts +20 -0
- package/dist/model/DashboardViewResponseModel.d.ts.map +1 -0
- package/dist/model/DashboardViewResponseModel.js +38 -0
- package/dist/model/RecordTypeResponseModel.d.ts +3 -1
- package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
- package/dist/model/RecordTypeResponseModel.js +4 -2
- package/dist/model/index.d.ts +1 -0
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +5 -2
- package/dist/model/storage/BrandingModel.d.ts +0 -16
- package/dist/model/storage/BrandingModel.d.ts.map +1 -1
- package/dist/model/storage/BrandingModel.js +2 -51
- package/dist/model/storage/DashboardTypeModel.d.ts +4 -0
- package/dist/model/storage/DashboardTypeModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.d.ts +16 -0
- package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.js +9 -1
- package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
- package/dist/policies/contentSecurityPolicy.js +23 -2
- package/dist/policies/index.d.ts +3 -0
- package/dist/policies/index.d.ts.map +1 -1
- package/dist/policies/index.js +6 -2
- package/dist/policies/validateApiContractRequest.d.ts +3 -0
- package/dist/policies/validateApiContractRequest.d.ts.map +1 -0
- package/dist/policies/validateApiContractRequest.js +74 -0
- package/dist/responses/badRequest.d.ts.map +1 -1
- package/dist/responses/badRequest.js +5 -3
- package/dist/responses/created.d.ts.map +1 -1
- package/dist/responses/created.js +5 -3
- package/dist/responses/forbidden.d.ts.map +1 -1
- package/dist/responses/forbidden.js +5 -3
- package/dist/responses/ok.d.ts.map +1 -1
- package/dist/responses/ok.js +5 -3
- package/dist/responses/serverError.d.ts.map +1 -1
- package/dist/responses/serverError.js +5 -3
- package/dist/responses/siteTitle.d.ts +6 -0
- package/dist/responses/siteTitle.d.ts.map +1 -0
- package/dist/responses/siteTitle.js +28 -0
- package/dist/sails.d.ts +7 -0
- package/dist/sails.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.d.ts +38 -17
- package/dist/services/AgendaQueueService.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.js +311 -81
- package/dist/services/AttachmentMetadataService.d.ts +34 -0
- package/dist/services/AttachmentMetadataService.d.ts.map +1 -0
- package/dist/services/AttachmentMetadataService.js +133 -0
- package/dist/services/BrandingLogoService.d.ts +6 -8
- package/dist/services/BrandingLogoService.d.ts.map +1 -1
- package/dist/services/BrandingLogoService.js +66 -72
- package/dist/services/DashboardConfigService.d.ts +71 -0
- package/dist/services/DashboardConfigService.d.ts.map +1 -0
- package/dist/services/DashboardConfigService.js +309 -0
- package/dist/services/DashboardTypesService.d.ts +61 -63
- package/dist/services/DashboardTypesService.d.ts.map +1 -1
- package/dist/services/DashboardTypesService.js +361 -198
- package/dist/services/DoiService.d.ts +11 -0
- package/dist/services/DoiService.d.ts.map +1 -1
- package/dist/services/DoiService.js +206 -1
- package/dist/services/FigshareService.d.ts.map +1 -1
- package/dist/services/FigshareService.js +5 -1
- package/dist/services/FormVocabularyService.d.ts +45 -0
- package/dist/services/FormVocabularyService.d.ts.map +1 -0
- package/dist/services/FormVocabularyService.js +326 -0
- package/dist/services/I18nEntriesService.d.ts +3 -0
- package/dist/services/I18nEntriesService.d.ts.map +1 -1
- package/dist/services/I18nEntriesService.js +14 -2
- package/dist/services/NamedQueryService.d.ts +27 -9
- package/dist/services/NamedQueryService.d.ts.map +1 -1
- package/dist/services/NamedQueryService.js +223 -55
- package/dist/services/RDMPService.d.ts.map +1 -1
- package/dist/services/RDMPService.js +3 -2
- package/dist/services/RecordsService.d.ts +8 -2
- package/dist/services/RecordsService.d.ts.map +1 -1
- package/dist/services/RecordsService.js +64 -16
- package/dist/services/ReportsService.d.ts.map +1 -1
- package/dist/services/ReportsService.js +7 -1
- package/dist/services/StandardDatastreamService.d.ts +32 -5
- package/dist/services/StandardDatastreamService.d.ts.map +1 -1
- package/dist/services/StandardDatastreamService.js +490 -38
- package/dist/services/StorageManagerService.d.ts +12 -1
- package/dist/services/StorageManagerService.d.ts.map +1 -1
- package/dist/services/StorageManagerService.js +72 -7
- package/dist/services/index.d.ts +9 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +17 -7
- package/dist/storage/GridFSDriver.d.ts +101 -0
- package/dist/storage/GridFSDriver.d.ts.map +1 -0
- package/dist/storage/GridFSDriver.js +291 -0
- package/dist/storage/TusStorageManagerDataStore.d.ts +49 -0
- package/dist/storage/TusStorageManagerDataStore.d.ts.map +1 -0
- package/dist/storage/TusStorageManagerDataStore.js +300 -0
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +6 -3
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.js +19 -1
- package/dist/visitor/validator.visitor.d.ts.map +1 -1
- package/dist/visitor/validator.visitor.js +11 -3
- package/dist/waterline-models/AttachmentAccessAudit.d.ts +26 -0
- package/dist/waterline-models/AttachmentAccessAudit.d.ts.map +1 -0
- package/dist/waterline-models/AttachmentAccessAudit.js +63 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts +40 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -0
- package/dist/waterline-models/AttachmentMetadata.js +147 -0
- package/dist/waterline-models/BrandingConfig.d.ts +0 -2
- package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfig.js +1 -6
- package/dist/waterline-models/DashboardType.d.ts +7 -0
- package/dist/waterline-models/DashboardType.d.ts.map +1 -1
- package/dist/waterline-models/DashboardType.js +16 -1
- package/dist/waterline-models/I18nTranslation.d.ts +2 -0
- package/dist/waterline-models/I18nTranslation.d.ts.map +1 -1
- package/dist/waterline-models/I18nTranslation.js +6 -1
- package/dist/waterline-models/NamedQuery.d.ts +6 -0
- package/dist/waterline-models/NamedQuery.d.ts.map +1 -1
- package/dist/waterline-models/NamedQuery.js +16 -1
- package/dist/waterline-models/index.d.ts +4 -0
- package/dist/waterline-models/index.d.ts.map +1 -1
- package/dist/waterline-models/index.js +7 -1
- package/package.json +31 -21
- package/dist/controllers/VocabController.d.ts +0 -43
- package/dist/controllers/VocabController.d.ts.map +0 -1
- package/dist/controllers/VocabController.js +0 -190
- package/dist/services/VocabService.d.ts +0 -81
- package/dist/services/VocabService.d.ts.map +0 -1
- package/dist/services/VocabService.js +0 -424
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GridFSDriver = void 0;
|
|
4
|
+
/// <reference path="../sails.ts" />
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const node_stream_1 = require("node:stream");
|
|
8
|
+
const promises_1 = require("node:stream/promises");
|
|
9
|
+
const mongodb_1 = require("mongodb");
|
|
10
|
+
class GridFSDriver {
|
|
11
|
+
static dbCache = new Map();
|
|
12
|
+
options;
|
|
13
|
+
bucketFactory;
|
|
14
|
+
dbFactory;
|
|
15
|
+
cachedBucket = null;
|
|
16
|
+
constructor(options = {}, bucketFactory = (db, bucketOptions) => new mongodb_1.GridFSBucket(db, bucketOptions), dbFactory = (resolvedOptions) => GridFSDriver.connectDb(resolvedOptions)) {
|
|
17
|
+
this.options = GridFSDriver.resolveOptions(options);
|
|
18
|
+
this.bucketFactory = bucketFactory;
|
|
19
|
+
this.dbFactory = dbFactory;
|
|
20
|
+
}
|
|
21
|
+
async exists(key) {
|
|
22
|
+
return (await this.findLatestFile(key)) !== null;
|
|
23
|
+
}
|
|
24
|
+
async get(key) {
|
|
25
|
+
const bytes = await this.getBytes(key);
|
|
26
|
+
return Buffer.from(bytes).toString('utf8');
|
|
27
|
+
}
|
|
28
|
+
async getStream(key) {
|
|
29
|
+
await this.requireLatestFile(key);
|
|
30
|
+
return (await this.getBucket()).openDownloadStreamByName(key, { revision: -1 });
|
|
31
|
+
}
|
|
32
|
+
async getBytes(key) {
|
|
33
|
+
const stream = await this.getStream(key);
|
|
34
|
+
const buffer = await this.readStreamToBuffer(stream);
|
|
35
|
+
return new Uint8Array(buffer);
|
|
36
|
+
}
|
|
37
|
+
async getMetaData(key) {
|
|
38
|
+
const file = await this.requireLatestFile(key);
|
|
39
|
+
return this.fileToMetaData(file);
|
|
40
|
+
}
|
|
41
|
+
async getVisibility(key) {
|
|
42
|
+
const file = await this.requireLatestFile(key);
|
|
43
|
+
const metadata = this.readStoredMetadata(file);
|
|
44
|
+
return metadata.visibility ?? this.options.visibility;
|
|
45
|
+
}
|
|
46
|
+
async getUrl(key) {
|
|
47
|
+
await this.requireLatestFile(key);
|
|
48
|
+
return this.syntheticUrl(key);
|
|
49
|
+
}
|
|
50
|
+
async getSignedUrl(key, _options) {
|
|
51
|
+
await this.requireLatestFile(key);
|
|
52
|
+
return this.syntheticUrl(key);
|
|
53
|
+
}
|
|
54
|
+
async getSignedUploadUrl(key, _options) {
|
|
55
|
+
return this.syntheticUrl(key);
|
|
56
|
+
}
|
|
57
|
+
async setVisibility(key, _visibility) {
|
|
58
|
+
await this.requireLatestFile(key);
|
|
59
|
+
throw new Error('GridFSDriver: visibility changes are not supported');
|
|
60
|
+
}
|
|
61
|
+
async put(key, contents, options) {
|
|
62
|
+
const stream = typeof contents === 'string'
|
|
63
|
+
? node_stream_1.Readable.from([contents])
|
|
64
|
+
: node_stream_1.Readable.from([Buffer.from(contents)]);
|
|
65
|
+
await this.putStream(key, stream, options);
|
|
66
|
+
}
|
|
67
|
+
async putStream(key, contents, options) {
|
|
68
|
+
await this.deleteMatchingFiles(key);
|
|
69
|
+
const bucket = await this.getBucket();
|
|
70
|
+
const upload = bucket.openUploadStream(key, {
|
|
71
|
+
metadata: this.buildMetadata(options),
|
|
72
|
+
});
|
|
73
|
+
try {
|
|
74
|
+
await (0, promises_1.pipeline)(contents, upload);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const uploadId = upload.id;
|
|
78
|
+
if (uploadId) {
|
|
79
|
+
try {
|
|
80
|
+
await bucket.delete(uploadId);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Best effort cleanup for partial uploads.
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async copy(source, destination, options) {
|
|
90
|
+
if (source === destination) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const sourceFile = await this.requireLatestFile(source);
|
|
94
|
+
const sourceStream = await this.getStream(source);
|
|
95
|
+
await this.putStream(destination, sourceStream, {
|
|
96
|
+
...this.readStoredMetadata(sourceFile),
|
|
97
|
+
...options,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
async move(source, destination, options) {
|
|
101
|
+
if (source === destination) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
await this.copy(source, destination, options);
|
|
105
|
+
await this.delete(source);
|
|
106
|
+
}
|
|
107
|
+
async delete(key) {
|
|
108
|
+
await this.deleteMatchingFiles(key);
|
|
109
|
+
}
|
|
110
|
+
async deleteAll(prefix) {
|
|
111
|
+
const files = await this.findFilesByPrefix(prefix);
|
|
112
|
+
const bucket = await this.getBucket();
|
|
113
|
+
await Promise.all(files.map((file) => bucket.delete(file._id)));
|
|
114
|
+
}
|
|
115
|
+
async listAll(prefix, _options) {
|
|
116
|
+
const files = await this.findFilesByPrefix(prefix);
|
|
117
|
+
const objects = files
|
|
118
|
+
.sort((left, right) => left.filename.localeCompare(right.filename))
|
|
119
|
+
.map((file) => ({
|
|
120
|
+
key: file.filename,
|
|
121
|
+
name: (0, node_path_1.basename)(file.filename),
|
|
122
|
+
...this.fileToMetaData(file),
|
|
123
|
+
}));
|
|
124
|
+
return {
|
|
125
|
+
paginationToken: undefined,
|
|
126
|
+
objects,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
bucket(bucketName) {
|
|
130
|
+
return new GridFSDriver({ ...this.options, bucketName }, this.bucketFactory, this.dbFactory);
|
|
131
|
+
}
|
|
132
|
+
static async dispose() {
|
|
133
|
+
const cachedDbs = Array.from(GridFSDriver.dbCache.values());
|
|
134
|
+
GridFSDriver.dbCache.clear();
|
|
135
|
+
await Promise.all(cachedDbs.map(async (cachedDb) => {
|
|
136
|
+
const { client } = await cachedDb;
|
|
137
|
+
await client.close?.();
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
static resolveOptions(options) {
|
|
141
|
+
return {
|
|
142
|
+
datastore: GridFSDriver.readNonEmptyString(options.datastore, 'mongodb'),
|
|
143
|
+
url: GridFSDriver.readNonEmptyString(options.url, ''),
|
|
144
|
+
databaseName: GridFSDriver.readNonEmptyString(options.databaseName, ''),
|
|
145
|
+
bucketName: GridFSDriver.readNonEmptyString(options.bucketName, 'fs'),
|
|
146
|
+
visibility: GridFSDriver.normalizeVisibility(options.visibility),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
static readNonEmptyString(value, fallback) {
|
|
150
|
+
return typeof value === 'string' && value.trim() ? value : fallback;
|
|
151
|
+
}
|
|
152
|
+
static normalizeVisibility(value) {
|
|
153
|
+
return value === 'private' ? 'private' : 'public';
|
|
154
|
+
}
|
|
155
|
+
async getBucket() {
|
|
156
|
+
if (this.cachedBucket) {
|
|
157
|
+
return this.cachedBucket;
|
|
158
|
+
}
|
|
159
|
+
const db = await this.dbFactory(this.options);
|
|
160
|
+
this.cachedBucket = this.bucketFactory(db, { bucketName: this.options.bucketName });
|
|
161
|
+
return this.cachedBucket;
|
|
162
|
+
}
|
|
163
|
+
static async connectDb(options) {
|
|
164
|
+
const url = options.url || GridFSDriver.readDatastoreUrl(options.datastore);
|
|
165
|
+
if (!url) {
|
|
166
|
+
throw new Error(`GridFSDriver: datastore '${options.datastore}' does not have a MongoDB URL configured`);
|
|
167
|
+
}
|
|
168
|
+
const cacheKey = `${url}::${options.databaseName}`;
|
|
169
|
+
let cachedPromise = GridFSDriver.dbCache.get(cacheKey);
|
|
170
|
+
if (!cachedPromise) {
|
|
171
|
+
cachedPromise = GridFSDriver.createMongoClientDb(url, options.databaseName, cacheKey).catch((error) => {
|
|
172
|
+
GridFSDriver.dbCache.delete(cacheKey);
|
|
173
|
+
throw error;
|
|
174
|
+
});
|
|
175
|
+
GridFSDriver.dbCache.set(cacheKey, cachedPromise);
|
|
176
|
+
}
|
|
177
|
+
return (await cachedPromise).db;
|
|
178
|
+
}
|
|
179
|
+
static readDatastoreUrl(datastoreName) {
|
|
180
|
+
const datastores = sails.config?.datastores;
|
|
181
|
+
return GridFSDriver.readNonEmptyString(datastores?.[datastoreName]?.url, '');
|
|
182
|
+
}
|
|
183
|
+
static async createMongoClientDb(url, databaseName, cacheKey) {
|
|
184
|
+
const clientOptions = {};
|
|
185
|
+
const client = await mongodb_1.MongoClient.connect(url, clientOptions);
|
|
186
|
+
client.on?.('close', () => {
|
|
187
|
+
GridFSDriver.dbCache.delete(cacheKey);
|
|
188
|
+
});
|
|
189
|
+
client.on?.('error', () => {
|
|
190
|
+
GridFSDriver.dbCache.delete(cacheKey);
|
|
191
|
+
});
|
|
192
|
+
return {
|
|
193
|
+
client,
|
|
194
|
+
db: databaseName ? client.db(databaseName) : client.db(),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
async findLatestFile(key) {
|
|
198
|
+
const files = await this.findFilesByFilename(key);
|
|
199
|
+
return files[0] ?? null;
|
|
200
|
+
}
|
|
201
|
+
async requireLatestFile(key) {
|
|
202
|
+
const file = await this.findLatestFile(key);
|
|
203
|
+
if (!file) {
|
|
204
|
+
throw this.createNotFoundError(key);
|
|
205
|
+
}
|
|
206
|
+
return file;
|
|
207
|
+
}
|
|
208
|
+
async findFilesByFilename(key) {
|
|
209
|
+
const files = await (await this.getBucket()).find({ filename: key }).toArray();
|
|
210
|
+
return files.sort((left, right) => right.uploadDate.getTime() - left.uploadDate.getTime());
|
|
211
|
+
}
|
|
212
|
+
async findFilesByPrefix(prefix) {
|
|
213
|
+
const normalizedPrefix = this.normalizePrefix(prefix);
|
|
214
|
+
const filter = normalizedPrefix
|
|
215
|
+
? { filename: { $regex: `^${this.escapeRegExp(normalizedPrefix)}` } }
|
|
216
|
+
: {};
|
|
217
|
+
return (await this.getBucket()).find(filter).toArray();
|
|
218
|
+
}
|
|
219
|
+
async deleteMatchingFiles(key) {
|
|
220
|
+
const files = await this.findFilesByFilename(key);
|
|
221
|
+
const bucket = await this.getBucket();
|
|
222
|
+
await Promise.all(files.map((file) => bucket.delete(file._id)));
|
|
223
|
+
}
|
|
224
|
+
fileToMetaData(file) {
|
|
225
|
+
const metadata = this.readStoredMetadata(file);
|
|
226
|
+
return {
|
|
227
|
+
contentType: metadata.contentType,
|
|
228
|
+
contentLength: metadata.contentLength ?? file.length,
|
|
229
|
+
etag: this.fileEtag(file),
|
|
230
|
+
lastModified: file.uploadDate,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
fileEtag(file) {
|
|
234
|
+
const idValue = file._id;
|
|
235
|
+
if (typeof idValue?.toHexString === 'function') {
|
|
236
|
+
return idValue.toHexString();
|
|
237
|
+
}
|
|
238
|
+
return (0, node_crypto_1.createHash)('sha1').update(`${file.filename}:${file.uploadDate.toISOString()}:${file.length}`).digest('hex');
|
|
239
|
+
}
|
|
240
|
+
buildMetadata(options) {
|
|
241
|
+
return {
|
|
242
|
+
visibility: options?.visibility ?? this.options.visibility,
|
|
243
|
+
contentType: options?.contentType,
|
|
244
|
+
contentLanguage: options?.contentLanguage,
|
|
245
|
+
contentEncoding: options?.contentEncoding,
|
|
246
|
+
contentDisposition: options?.contentDisposition,
|
|
247
|
+
cacheControl: options?.cacheControl,
|
|
248
|
+
contentLength: options?.contentLength,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
readStoredMetadata(file) {
|
|
252
|
+
const metadata = file.metadata;
|
|
253
|
+
if (!metadata || typeof metadata !== 'object' || Array.isArray(metadata)) {
|
|
254
|
+
return {};
|
|
255
|
+
}
|
|
256
|
+
return metadata;
|
|
257
|
+
}
|
|
258
|
+
normalizePrefix(prefix) {
|
|
259
|
+
if (!prefix || prefix === '/') {
|
|
260
|
+
return '';
|
|
261
|
+
}
|
|
262
|
+
return node_path_1.posix.normalize(prefix).replace(/^\.\//, '').replace(/^\//, '');
|
|
263
|
+
}
|
|
264
|
+
syntheticUrl(key) {
|
|
265
|
+
return `gridfs://${this.options.datastore}/${this.options.bucketName}/${encodeURIComponent(key)}`;
|
|
266
|
+
}
|
|
267
|
+
escapeRegExp(value) {
|
|
268
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
269
|
+
}
|
|
270
|
+
createNotFoundError(key) {
|
|
271
|
+
const error = new Error(`GridFS object not found: ${key}`);
|
|
272
|
+
error.code = 'ENOENT';
|
|
273
|
+
return error;
|
|
274
|
+
}
|
|
275
|
+
async readStreamToBuffer(stream) {
|
|
276
|
+
const chunks = [];
|
|
277
|
+
return new Promise((resolve, reject) => {
|
|
278
|
+
stream.on('data', (chunk) => {
|
|
279
|
+
if (typeof chunk === 'string') {
|
|
280
|
+
chunks.push(Buffer.from(chunk));
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
chunks.push(Buffer.from(chunk));
|
|
284
|
+
});
|
|
285
|
+
stream.once('end', () => resolve(Buffer.concat(chunks)));
|
|
286
|
+
stream.once('error', (error) => reject(error));
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
exports.GridFSDriver = GridFSDriver;
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JpZEZTRHJpdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JhZ2UvR3JpZEZTRHJpdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9DQUFvQztBQUNwQyw2Q0FBeUM7QUFDekMseUNBQTRDO0FBQzVDLDZDQUF1QztBQUN2QyxtREFBZ0Q7QUFFaEQscUNBQW9EO0FBaURwRCxNQUFhLFlBQVk7SUFDZixNQUFNLENBQUMsT0FBTyxHQUF3QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXhELE9BQU8sQ0FBZ0M7SUFFdEMsYUFBYSxDQUFzQjtJQUNuQyxTQUFTLENBQWlCO0lBQ25DLFlBQVksR0FBNEIsSUFBSSxDQUFDO0lBRXJELFlBQ0UsVUFBK0IsRUFBRSxFQUNqQyxnQkFBcUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLHNCQUFZLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxFQUMvRixZQUE0QixDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7UUFFeEYsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztJQUNuRCxDQUFDO0lBRU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQzFCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FB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
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Readable } from 'node:stream';
|
|
2
|
+
import { DataStore, Upload } from '@tus/server';
|
|
3
|
+
import type { Services } from '../services/StorageManagerService';
|
|
4
|
+
type TusLogger = Pick<typeof sails.log, 'verbose' | 'warn' | 'error'>;
|
|
5
|
+
type TusOptions = {
|
|
6
|
+
disk: Services.IDisk;
|
|
7
|
+
prefix?: string;
|
|
8
|
+
logger?: TusLogger;
|
|
9
|
+
expirationPeriodInMilliseconds?: number;
|
|
10
|
+
};
|
|
11
|
+
export declare class TusStorageManagerDataStore extends DataStore {
|
|
12
|
+
private readonly disk;
|
|
13
|
+
private readonly prefix;
|
|
14
|
+
private readonly logger?;
|
|
15
|
+
private readonly expirationPeriodInMilliseconds;
|
|
16
|
+
private readonly writeLocks;
|
|
17
|
+
constructor(options: TusOptions);
|
|
18
|
+
create(file: Upload): Promise<Upload>;
|
|
19
|
+
remove(id: string): Promise<void>;
|
|
20
|
+
write(readable: Readable, id: string, offset: number): Promise<number>;
|
|
21
|
+
getUpload(id: string): Promise<Upload>;
|
|
22
|
+
declareUploadLength(id: string, uploadLength: number): Promise<void>;
|
|
23
|
+
deleteExpired(): Promise<number>;
|
|
24
|
+
getExpiration(): number;
|
|
25
|
+
private normalizePrefix;
|
|
26
|
+
private uploadPrefix;
|
|
27
|
+
private finalKey;
|
|
28
|
+
private infoKey;
|
|
29
|
+
private partsPrefix;
|
|
30
|
+
private partKey;
|
|
31
|
+
private toStoredUpload;
|
|
32
|
+
private writeUploadInfo;
|
|
33
|
+
private readStoredUpload;
|
|
34
|
+
private materializeUpload;
|
|
35
|
+
private streamPartsSequential;
|
|
36
|
+
private validateWriteInputs;
|
|
37
|
+
private withUploadLock;
|
|
38
|
+
private readStream;
|
|
39
|
+
private listUploadIds;
|
|
40
|
+
private listPartKeys;
|
|
41
|
+
private listedObjectKey;
|
|
42
|
+
private deleteUploadKeys;
|
|
43
|
+
private readExpirationTimestamp;
|
|
44
|
+
private isDiskNotFound;
|
|
45
|
+
private isTusNotFound;
|
|
46
|
+
private escapeRegExp;
|
|
47
|
+
}
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=TusStorageManagerDataStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TusStorageManagerDataStore.d.ts","sourceRoot":"","sources":["../../src/storage/TusStorageManagerDataStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAU,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAElE,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AActE,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC,CAAC;AAQF,qBAAa,0BAA2B,SAAQ,SAAS;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAS;IACxD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;gBAE5C,OAAO,EAAE,UAAU;IAehB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOrC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8CtE,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWtC,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpE,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IA+BtC,aAAa,IAAI,MAAM;IAIvC,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,cAAc;YAWR,eAAe;YAIf,gBAAgB;YAYhB,iBAAiB;YAehB,qBAAqB;IASpC,OAAO,CAAC,mBAAmB;YASb,cAAc;YAqBd,UAAU;YAQV,aAAa;YAeb,YAAY;IAO1B,OAAO,CAAC,eAAe;YAKT,gBAAgB;IAO9B,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,cAAc;IA8BtB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;CAGrB"}
|