@marinoscar/platform-api 0.1.0-next.21 → 0.1.0-next.23
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 +28 -0
- package/dist/ai/features/ai-feature.registry.d.ts +7 -0
- package/dist/ai/features/ai-feature.registry.d.ts.map +1 -1
- package/dist/ai/features/ai-feature.registry.js +3 -0
- package/dist/ai/features/ai-feature.registry.js.map +1 -1
- package/dist/ai/keys/ai-key-resolver.service.d.ts +16 -0
- package/dist/ai/keys/ai-key-resolver.service.d.ts.map +1 -1
- package/dist/ai/keys/ai-key-resolver.service.js +44 -0
- package/dist/ai/keys/ai-key-resolver.service.js.map +1 -1
- package/dist/ai/keys/usable-models.service.d.ts +13 -1
- package/dist/ai/keys/usable-models.service.d.ts.map +1 -1
- package/dist/ai/keys/usable-models.service.js +37 -12
- package/dist/ai/keys/usable-models.service.js.map +1 -1
- package/dist/ai/runtime/ai-limits.service.d.ts +2 -1
- package/dist/ai/runtime/ai-limits.service.d.ts.map +1 -1
- package/dist/ai/runtime/ai-limits.service.js +7 -2
- package/dist/ai/runtime/ai-limits.service.js.map +1 -1
- package/dist/ai/runtime/ai-runtime.types.d.ts +46 -1
- package/dist/ai/runtime/ai-runtime.types.d.ts.map +1 -1
- package/dist/ai/runtime/ai-runtime.types.js.map +1 -1
- package/dist/ai/runtime/ai.service.d.ts +142 -5
- package/dist/ai/runtime/ai.service.d.ts.map +1 -1
- package/dist/ai/runtime/ai.service.js +353 -46
- package/dist/ai/runtime/ai.service.js.map +1 -1
- package/dist/ai/runtime/index.d.ts +1 -1
- package/dist/ai/runtime/index.d.ts.map +1 -1
- package/dist/ai/runtime/target-resolver.d.ts +2 -2
- package/dist/ai/runtime/target-resolver.d.ts.map +1 -1
- package/dist/ai/runtime/target-resolver.js +2 -1
- package/dist/ai/runtime/target-resolver.js.map +1 -1
- package/dist/ai/testing/conformance/ai-key-policy.suite.d.ts.map +1 -1
- package/dist/ai/testing/conformance/ai-key-policy.suite.js +54 -0
- package/dist/ai/testing/conformance/ai-key-policy.suite.js.map +1 -1
- package/dist/ai/testing/conformance/ai-secret-egress.suite.d.ts.map +1 -1
- package/dist/ai/testing/conformance/ai-secret-egress.suite.js +59 -0
- package/dist/ai/testing/conformance/ai-secret-egress.suite.js.map +1 -1
- package/dist/identity/device-auth/device-auth.service.d.ts +9 -2
- package/dist/identity/device-auth/device-auth.service.d.ts.map +1 -1
- package/dist/identity/device-auth/device-auth.service.js +44 -4
- package/dist/identity/device-auth/device-auth.service.js.map +1 -1
- package/dist/identity/device-auth/dto/device-code-request.dto.d.ts +12 -0
- package/dist/identity/device-auth/dto/device-code-request.dto.d.ts.map +1 -1
- package/dist/identity/identity.options.d.ts +25 -0
- package/dist/identity/identity.options.d.ts.map +1 -1
- package/dist/identity/identity.options.js +11 -0
- package/dist/identity/identity.options.js.map +1 -1
- package/dist/identity/index.d.ts +1 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/nodes/current-node.decorator.d.ts +18 -0
- package/dist/nodes/current-node.decorator.d.ts.map +1 -0
- package/dist/nodes/current-node.decorator.js +28 -0
- package/dist/nodes/current-node.decorator.js.map +1 -0
- package/dist/nodes/index.d.ts +8 -0
- package/dist/nodes/index.d.ts.map +1 -1
- package/dist/nodes/index.js +21 -2
- package/dist/nodes/index.js.map +1 -1
- package/dist/nodes/node-ownership.d.ts +34 -0
- package/dist/nodes/node-ownership.d.ts.map +1 -0
- package/dist/nodes/node-ownership.js +92 -0
- package/dist/nodes/node-ownership.js.map +1 -0
- package/dist/nodes/node-route.decorator.d.ts +31 -0
- package/dist/nodes/node-route.decorator.d.ts.map +1 -0
- package/dist/nodes/node-route.decorator.js +54 -0
- package/dist/nodes/node-route.decorator.js.map +1 -0
- package/dist/nodes/node-route.guard.d.ts +22 -0
- package/dist/nodes/node-route.guard.d.ts.map +1 -0
- package/dist/nodes/node-route.guard.js +74 -0
- package/dist/nodes/node-route.guard.js.map +1 -0
- package/dist/nodes/node-route.module.d.ts +21 -0
- package/dist/nodes/node-route.module.d.ts.map +1 -0
- package/dist/nodes/node-route.module.js +99 -0
- package/dist/nodes/node-route.module.js.map +1 -0
- package/dist/nodes/node-route.options.d.ts +59 -0
- package/dist/nodes/node-route.options.d.ts.map +1 -0
- package/dist/nodes/node-route.options.js +29 -0
- package/dist/nodes/node-route.options.js.map +1 -0
- package/dist/nodes/node-route.paths.d.ts +47 -0
- package/dist/nodes/node-route.paths.d.ts.map +1 -0
- package/dist/nodes/node-route.paths.js +129 -0
- package/dist/nodes/node-route.paths.js.map +1 -0
- package/dist/nodes/nodes.service.d.ts.map +1 -1
- package/dist/nodes/nodes.service.js +3 -15
- package/dist/nodes/nodes.service.js.map +1 -1
- package/dist/nodes/testing/conformance.d.ts +86 -0
- package/dist/nodes/testing/conformance.d.ts.map +1 -0
- package/dist/nodes/testing/conformance.js +230 -0
- package/dist/nodes/testing/conformance.js.map +1 -0
- package/dist/nodes/testing/discover.d.ts +13 -0
- package/dist/nodes/testing/discover.d.ts.map +1 -0
- package/dist/nodes/testing/discover.js +42 -0
- package/dist/nodes/testing/discover.js.map +1 -0
- package/dist/nodes/testing/index.d.ts +3 -0
- package/dist/nodes/testing/index.d.ts.map +1 -0
- package/dist/nodes/testing/index.js +13 -0
- package/dist/nodes/testing/index.js.map +1 -0
- package/dist/notifications/channels/browser-notification.channel.d.ts +11 -0
- package/dist/notifications/channels/browser-notification.channel.d.ts.map +1 -1
- package/dist/notifications/channels/browser-notification.channel.js +71 -48
- package/dist/notifications/channels/browser-notification.channel.js.map +1 -1
- package/dist/notifications/data/notifications-db.d.ts +19 -0
- package/dist/notifications/data/notifications-db.d.ts.map +1 -1
- package/dist/notifications/dto/notification.dto.d.ts +4 -0
- package/dist/notifications/dto/notification.dto.d.ts.map +1 -1
- package/dist/notifications/index.d.ts +1 -1
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/notification-inbox-writer.d.ts +112 -0
- package/dist/notifications/notification-inbox-writer.d.ts.map +1 -0
- package/dist/notifications/notification-inbox-writer.js +217 -0
- package/dist/notifications/notification-inbox-writer.js.map +1 -0
- package/dist/notifications/notification-store.service.d.ts +10 -0
- package/dist/notifications/notification-store.service.d.ts.map +1 -1
- package/dist/notifications/notification-store.service.js +55 -10
- package/dist/notifications/notification-store.service.js.map +1 -1
- package/dist/notifications/notification-stream.service.d.ts +8 -0
- package/dist/notifications/notification-stream.service.d.ts.map +1 -1
- package/dist/notifications/notification-stream.service.js.map +1 -1
- package/dist/notifications/notification.types.d.ts +74 -0
- package/dist/notifications/notification.types.d.ts.map +1 -1
- package/dist/notifications/notification.types.js.map +1 -1
- package/dist/notifications/notifications.controller.d.ts +1 -0
- package/dist/notifications/notifications.controller.d.ts.map +1 -1
- package/dist/notifications/notifications.controller.js +23 -0
- package/dist/notifications/notifications.controller.js.map +1 -1
- package/dist/notifications/notifications.service.d.ts +56 -1
- package/dist/notifications/notifications.service.d.ts.map +1 -1
- package/dist/notifications/notifications.service.js +122 -0
- package/dist/notifications/notifications.service.js.map +1 -1
- package/dist/notifications/registry/event.registry.d.ts +15 -0
- package/dist/notifications/registry/event.registry.d.ts.map +1 -1
- package/dist/notifications/registry/event.registry.js +3 -0
- package/dist/notifications/registry/event.registry.js.map +1 -1
- package/dist/notifications/retention/notification-inbox-purge.handler.d.ts.map +1 -1
- package/dist/notifications/retention/notification-inbox-purge.handler.js +16 -4
- package/dist/notifications/retention/notification-inbox-purge.handler.js.map +1 -1
- package/dist/notifications/testing/index.d.ts +2 -0
- package/dist/notifications/testing/index.d.ts.map +1 -1
- package/dist/notifications/testing/index.js +5 -1
- package/dist/notifications/testing/index.js.map +1 -1
- package/dist/storage/config/storage-config.service.d.ts +24 -0
- package/dist/storage/config/storage-config.service.d.ts.map +1 -1
- package/dist/storage/config/storage-config.service.js +31 -5
- package/dist/storage/config/storage-config.service.js.map +1 -1
- package/dist/storage/handlers/storage-cleanup.handler.d.ts +3 -1
- package/dist/storage/handlers/storage-cleanup.handler.d.ts.map +1 -1
- package/dist/storage/handlers/storage-cleanup.handler.js +10 -3
- package/dist/storage/handlers/storage-cleanup.handler.js.map +1 -1
- package/dist/storage/index.d.ts +5 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +12 -3
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/objects/dto/get-part-urls.dto.d.ts +26 -0
- package/dist/storage/objects/dto/get-part-urls.dto.d.ts.map +1 -0
- package/dist/storage/objects/dto/get-part-urls.dto.js +25 -0
- package/dist/storage/objects/dto/get-part-urls.dto.js.map +1 -0
- package/dist/storage/objects/dto/init-upload.dto.d.ts +2 -1
- package/dist/storage/objects/dto/init-upload.dto.d.ts.map +1 -1
- package/dist/storage/objects/objects.controller.d.ts +13 -1
- package/dist/storage/objects/objects.controller.d.ts.map +1 -1
- package/dist/storage/objects/objects.controller.js +88 -1
- package/dist/storage/objects/objects.controller.js.map +1 -1
- package/dist/storage/objects/objects.service.d.ts +46 -1
- package/dist/storage/objects/objects.service.d.ts.map +1 -1
- package/dist/storage/objects/objects.service.js +277 -23
- package/dist/storage/objects/objects.service.js.map +1 -1
- package/dist/storage/objects/part-body-parser.d.ts +30 -0
- package/dist/storage/objects/part-body-parser.d.ts.map +1 -0
- package/dist/storage/objects/part-body-parser.js +45 -0
- package/dist/storage/objects/part-body-parser.js.map +1 -0
- package/dist/storage/objects/part-body.d.ts +23 -0
- package/dist/storage/objects/part-body.d.ts.map +1 -0
- package/dist/storage/objects/part-body.js +48 -0
- package/dist/storage/objects/part-body.js.map +1 -0
- package/dist/storage/processing/object-processing.service.d.ts +4 -1
- package/dist/storage/processing/object-processing.service.d.ts.map +1 -1
- package/dist/storage/processing/object-processing.service.js +11 -3
- package/dist/storage/processing/object-processing.service.js.map +1 -1
- package/dist/storage/profile-image/avatar.service.d.ts +3 -1
- package/dist/storage/profile-image/avatar.service.d.ts.map +1 -1
- package/dist/storage/profile-image/avatar.service.js +8 -3
- package/dist/storage/profile-image/avatar.service.js.map +1 -1
- package/dist/storage/profile-image/profile-image.service.d.ts +4 -1
- package/dist/storage/profile-image/profile-image.service.d.ts.map +1 -1
- package/dist/storage/profile-image/profile-image.service.js +11 -5
- package/dist/storage/profile-image/profile-image.service.js.map +1 -1
- package/dist/storage/providers/index.d.ts +3 -1
- package/dist/storage/providers/index.d.ts.map +1 -1
- package/dist/storage/providers/index.js +8 -1
- package/dist/storage/providers/index.js.map +1 -1
- package/dist/storage/providers/resolving-storage.provider.d.ts +11 -0
- package/dist/storage/providers/resolving-storage.provider.d.ts.map +1 -1
- package/dist/storage/providers/resolving-storage.provider.js +13 -0
- package/dist/storage/providers/resolving-storage.provider.js.map +1 -1
- package/dist/storage/providers/s3/s3-storage.provider.d.ts +9 -1
- package/dist/storage/providers/s3/s3-storage.provider.d.ts.map +1 -1
- package/dist/storage/providers/s3/s3-storage.provider.js +37 -0
- package/dist/storage/providers/s3/s3-storage.provider.js.map +1 -1
- package/dist/storage/providers/storage-provider-router.d.ts +64 -0
- package/dist/storage/providers/storage-provider-router.d.ts.map +1 -0
- package/dist/storage/providers/storage-provider-router.js +161 -0
- package/dist/storage/providers/storage-provider-router.js.map +1 -0
- package/dist/storage/providers/storage-provider.interface.d.ts +34 -1
- package/dist/storage/providers/storage-provider.interface.d.ts.map +1 -1
- package/dist/storage/providers/storage-provider.interface.js.map +1 -1
- package/dist/storage/providers/storage-provider.types.d.ts +86 -0
- package/dist/storage/providers/storage-provider.types.d.ts.map +1 -1
- package/dist/storage/providers/storage-provider.types.js +78 -0
- package/dist/storage/providers/storage-provider.types.js.map +1 -1
- package/dist/storage/providers/storage-providers.module.d.ts.map +1 -1
- package/dist/storage/providers/storage-providers.module.js +3 -1
- package/dist/storage/providers/storage-providers.module.js.map +1 -1
- package/dist/storage/testing/conformance.d.ts +12 -0
- package/dist/storage/testing/conformance.d.ts.map +1 -1
- package/dist/storage/testing/conformance.js +112 -0
- package/dist/storage/testing/conformance.js.map +1 -1
- package/dist/storage/testing/driver-conformance.d.ts +13 -1
- package/dist/storage/testing/driver-conformance.d.ts.map +1 -1
- package/dist/storage/testing/driver-conformance.js +134 -0
- package/dist/storage/testing/driver-conformance.js.map +1 -1
- package/dist/storage/testing/index.d.ts +1 -1
- package/dist/storage/testing/index.d.ts.map +1 -1
- package/dist/storage/testing/index.js +2 -1
- package/dist/storage/testing/index.js.map +1 -1
- package/dist/telemetry/stack/dto/telemetry-stack.dto.d.ts +1 -1
- package/package.json +7 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.controller.js","sourceRoot":"","sources":["../../../src/storage/objects/objects.controller.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"objects.controller.js","sourceRoot":"","sources":["../../../src/storage/objects/objects.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { ConfigService } from '@nestjs/config';
|
|
2
2
|
import { Readable } from 'node:stream';
|
|
3
3
|
import type { StorageProvider } from '../providers/storage-provider.interface';
|
|
4
|
+
import { StorageProviderRouter } from '../providers/storage-provider-router';
|
|
5
|
+
import { type StoredPart } from '../providers/storage-provider.types';
|
|
4
6
|
import { InitUploadDto, InitUploadResponseDto } from './dto/init-upload.dto';
|
|
5
7
|
import { CompleteUploadDto } from './dto/complete-upload.dto';
|
|
8
|
+
import type { GetPartUrlsDto, GetPartUrlsResponse } from '@marinoscar/platform-contract/storage';
|
|
6
9
|
import { ObjectResponseDto, UploadStatusResponseDto } from './dto/object-response.dto';
|
|
7
10
|
import { ObjectListQueryDto, ObjectListResponseDto } from './dto/object-list-query.dto';
|
|
8
11
|
import { UpdateMetadataDto } from './dto/update-metadata.dto';
|
|
@@ -36,10 +39,15 @@ export declare class ObjectsService {
|
|
|
36
39
|
private readonly processing;
|
|
37
40
|
private readonly jobs;
|
|
38
41
|
private readonly options?;
|
|
42
|
+
private readonly router?;
|
|
39
43
|
private readonly logger;
|
|
40
|
-
constructor(prisma: StoragePrisma, storageProvider: StorageProvider, config: ConfigService, processing: ObjectProcessingService, jobs: JobsService, options?: ResolvedStorageModuleOptions | undefined);
|
|
44
|
+
constructor(prisma: StoragePrisma, storageProvider: StorageProvider, config: ConfigService, processing: ObjectProcessingService, jobs: JobsService, options?: ResolvedStorageModuleOptions | undefined, router?: StorageProviderRouter | undefined);
|
|
41
45
|
/** The multipart part size: the forRoot option, else the deployment's `storage.partSize`. */
|
|
42
46
|
private partSize;
|
|
47
|
+
/** The provider that holds `object`'s bytes (its recorded provider and bucket). */
|
|
48
|
+
private providerFor;
|
|
49
|
+
/** The provider new uploads go to (the active one). */
|
|
50
|
+
private activeProvider;
|
|
43
51
|
/**
|
|
44
52
|
* The database client scoped to the caller's organization (row-level
|
|
45
53
|
* security, issue #725): every statement runs with `app.org_id` set, so
|
|
@@ -55,6 +63,43 @@ export declare class ObjectsService {
|
|
|
55
63
|
* Initialize a resumable multipart upload
|
|
56
64
|
*/
|
|
57
65
|
initUpload(dto: InitUploadDto, userId: string, orgId: string): Promise<InitUploadResponseDto>;
|
|
66
|
+
/**
|
|
67
|
+
* Part URLs a client can actually PUT to, and how to authenticate them.
|
|
68
|
+
*
|
|
69
|
+
* A presigned driver (S3, R2, the default) returns its signed URLs verbatim
|
|
70
|
+
* with `partUploadAuth: 'none'`. A `proxied` driver cannot sign anything, so
|
|
71
|
+
* the client gets this API's own part route with `partUploadAuth: 'bearer'`.
|
|
72
|
+
*/
|
|
73
|
+
private buildPartUrls;
|
|
74
|
+
/** How many parts an object of `objectSize` has, the exact size of each and the configured part size. */
|
|
75
|
+
private partLayout;
|
|
76
|
+
/** 409 `UPLOAD_PARTS_MISSING`: re-send exactly `partNumbers`, then complete again. */
|
|
77
|
+
private partsMissing;
|
|
78
|
+
/** 409 `UPLOAD_SESSION_INVALID`: the backend no longer knows the session; abort and re-initialise. */
|
|
79
|
+
private sessionInvalid;
|
|
80
|
+
/**
|
|
81
|
+
* The upload an owner may work on, or a 404: another user's upload and a
|
|
82
|
+
* missing one are indistinguishable. The in-progress rule (an open session
|
|
83
|
+
* and a `pending`/`uploading` row) is a 400 `UPLOAD_NOT_ACTIVE`.
|
|
84
|
+
*/
|
|
85
|
+
private ownedOpenUpload;
|
|
86
|
+
/**
|
|
87
|
+
* More part URLs for an upload in progress (at most 100 per call), from the
|
|
88
|
+
* provider that holds the upload, so an active-provider switch mid-upload
|
|
89
|
+
* cannot misroute them.
|
|
90
|
+
*/
|
|
91
|
+
getPartUrls(objectId: string, dto: GetPartUrlsDto, userId: string, orgId: string): Promise<GetPartUrlsResponse>;
|
|
92
|
+
/**
|
|
93
|
+
* Receives one part of a multipart upload THROUGH the API, for a driver with
|
|
94
|
+
* no presigned URLs. The body is streamed to the driver and never buffered;
|
|
95
|
+
* the platform bounds it to the exact part size, so a short or long body is a
|
|
96
|
+
* 400 `PART_SIZE_MISMATCH` and nothing of it is kept. The part is recorded in
|
|
97
|
+
* `storage_object_chunks` (its real size) so status reports it.
|
|
98
|
+
*
|
|
99
|
+
* @param declaredLength - the request's Content-Length, when sent; a wrong value is refused before a byte is read.
|
|
100
|
+
* @returns the part's ETag, quoted like S3's.
|
|
101
|
+
*/
|
|
102
|
+
uploadPart(objectId: string, partNumber: number, userId: string, orgId: string, body: Readable, declaredLength?: number): Promise<StoredPart>;
|
|
58
103
|
/**
|
|
59
104
|
* Get upload status and progress
|
|
60
105
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.service.d.ts","sourceRoot":"","sources":["../../../src/storage/objects/objects.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"objects.service.d.ts","sourceRoot":"","sources":["../../../src/storage/objects/objects.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,10 @@ const storage_key_prefix_registry_1 = require("../storage-key-prefix.registry");
|
|
|
25
25
|
const profile_image_1 = require("../profile-image/profile-image");
|
|
26
26
|
const mime_type_match_1 = require("../mime-type-match");
|
|
27
27
|
const storage_provider_interface_1 = require("../providers/storage-provider.interface");
|
|
28
|
+
const storage_provider_router_1 = require("../providers/storage-provider-router");
|
|
29
|
+
const storage_provider_types_1 = require("../providers/storage-provider.types");
|
|
30
|
+
const storage_1 = require("@marinoscar/platform-contract/storage");
|
|
31
|
+
const part_body_1 = require("./part-body");
|
|
28
32
|
const index_1 = require("../../jobs/index");
|
|
29
33
|
const object_processing_service_1 = require("../processing/object-processing.service");
|
|
30
34
|
const processing_metadata_1 = require("../processing/processing-metadata");
|
|
@@ -33,6 +37,21 @@ const storage_job_input_1 = require("../storage-job-input");
|
|
|
33
37
|
const index_2 = require("../../core/index");
|
|
34
38
|
const storage_db_1 = require("../data/storage-db");
|
|
35
39
|
const storage_options_1 = require("../storage.options");
|
|
40
|
+
/** Statuses of an object whose multipart upload is still open. */
|
|
41
|
+
const IN_PROGRESS_STATUSES = new Set(['pending', 'uploading']);
|
|
42
|
+
/** The API's own part route, appended to the deployment origin for a `proxied` driver. */
|
|
43
|
+
const PART_ROUTE_PREFIX = '/api/storage/objects';
|
|
44
|
+
/**
|
|
45
|
+
* Whether an error means the backend no longer knows the multipart session
|
|
46
|
+
* (completed, aborted, garbage-collected): the S3 `NoSuchUpload`, or a driver's
|
|
47
|
+
* {@link MultipartSessionNotFoundError}. A client-state error, never a 500.
|
|
48
|
+
*/
|
|
49
|
+
function isStaleMultipartSessionError(error) {
|
|
50
|
+
if (error instanceof storage_provider_types_1.MultipartSessionNotFoundError)
|
|
51
|
+
return true;
|
|
52
|
+
const named = error;
|
|
53
|
+
return named?.name === 'NoSuchUpload' || named?.Code === 'NoSuchUpload';
|
|
54
|
+
}
|
|
36
55
|
/**
|
|
37
56
|
* Longest transaction recording the parts of a completed multipart upload
|
|
38
57
|
* (Prisma's default is 5 s; an upload can have 10 000 parts).
|
|
@@ -60,17 +79,19 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
60
79
|
processing;
|
|
61
80
|
jobs;
|
|
62
81
|
options;
|
|
82
|
+
router;
|
|
63
83
|
logger = new common_1.Logger(ObjectsService_1.name);
|
|
64
84
|
constructor(prisma, storageProvider, config,
|
|
65
85
|
// #520: post-upload processing is a queue job. These two decide, at
|
|
66
86
|
// upload time, whether one is needed and queue it — see `settleUpload`.
|
|
67
|
-
processing, jobs, options) {
|
|
87
|
+
processing, jobs, options, router) {
|
|
68
88
|
this.prisma = prisma;
|
|
69
89
|
this.storageProvider = storageProvider;
|
|
70
90
|
this.config = config;
|
|
71
91
|
this.processing = processing;
|
|
72
92
|
this.jobs = jobs;
|
|
73
93
|
this.options = options;
|
|
94
|
+
this.router = router;
|
|
74
95
|
// The `uploads` key prefix this service builds keys under (#736); a no-op
|
|
75
96
|
// when `StorageModule.forRoot()` or the app's manifest registered it.
|
|
76
97
|
(0, storage_key_prefixes_1.ensureStorageSliceKeyPrefixes)();
|
|
@@ -79,6 +100,14 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
79
100
|
partSize() {
|
|
80
101
|
return this.options?.partSizeBytes ?? this.config.get('storage.partSize', storage_options_1.DEFAULT_STORAGE_PART_SIZE_BYTES);
|
|
81
102
|
}
|
|
103
|
+
/** The provider that holds `object`'s bytes (its recorded provider and bucket). */
|
|
104
|
+
providerFor(object) {
|
|
105
|
+
return this.router ? this.router.forObject(object) : Promise.resolve(this.storageProvider);
|
|
106
|
+
}
|
|
107
|
+
/** The provider new uploads go to (the active one). */
|
|
108
|
+
activeProvider() {
|
|
109
|
+
return this.router ? this.router.forLocation(null) : Promise.resolve(this.storageProvider);
|
|
110
|
+
}
|
|
82
111
|
/**
|
|
83
112
|
* The database client scoped to the caller's organization (row-level
|
|
84
113
|
* security, issue #725): every statement runs with `app.org_id` set, so
|
|
@@ -119,8 +148,10 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
119
148
|
// or anywhere rebuilds a key for an existing row.
|
|
120
149
|
const storageKey = this.newUploadKey(orgId, name);
|
|
121
150
|
this.logger.log(`Initializing upload for ${name}, ${totalParts} parts`);
|
|
151
|
+
// New bytes go to the ACTIVE provider; the row records which one.
|
|
152
|
+
const provider = await this.activeProvider();
|
|
122
153
|
// Initialize multipart upload with storage provider
|
|
123
|
-
const { uploadId } = await
|
|
154
|
+
const { uploadId } = await provider.initMultipartUpload(storageKey, { mimeType });
|
|
124
155
|
// Create StorageObject record
|
|
125
156
|
const storageObject = await this.db(orgId, userId).storageObject.create({
|
|
126
157
|
data: {
|
|
@@ -133,20 +164,18 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
133
164
|
// must not leave a trail of rows claiming their objects are in S3. It
|
|
134
165
|
// comes from the same snapshot `getBucket()` answers from, so this pair
|
|
135
166
|
// names one configuration.
|
|
136
|
-
storageProvider:
|
|
137
|
-
bucket:
|
|
167
|
+
storageProvider: provider.kind,
|
|
168
|
+
bucket: provider.getBucket(),
|
|
138
169
|
status: 'pending',
|
|
139
170
|
s3UploadId: uploadId,
|
|
140
171
|
uploadedById: userId,
|
|
141
172
|
orgId,
|
|
142
173
|
},
|
|
143
174
|
});
|
|
144
|
-
//
|
|
145
|
-
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
url: await this.storageProvider.getSignedUploadUrl(storageKey, uploadId, partNumber),
|
|
149
|
-
})));
|
|
175
|
+
// Part URLs for the first batch (at most 10): presigned provider URLs, or
|
|
176
|
+
// this API's own part route when the driver has none.
|
|
177
|
+
const urlBatchSize = Math.min(storage_1.INIT_UPLOAD_PART_URL_BATCH, totalParts);
|
|
178
|
+
const { presignedUrls, partUploadAuth } = await this.buildPartUrls(provider, storageObject.id, storageKey, uploadId, Array.from({ length: urlBatchSize }, (_, i) => i + 1));
|
|
150
179
|
this.logger.log(`Upload initialized: ${storageObject.id}, uploadId: ${uploadId}`);
|
|
151
180
|
return {
|
|
152
181
|
objectId: storageObject.id,
|
|
@@ -154,8 +183,153 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
154
183
|
partSize,
|
|
155
184
|
totalParts,
|
|
156
185
|
presignedUrls,
|
|
186
|
+
partUploadAuth,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Part URLs a client can actually PUT to, and how to authenticate them.
|
|
191
|
+
*
|
|
192
|
+
* A presigned driver (S3, R2, the default) returns its signed URLs verbatim
|
|
193
|
+
* with `partUploadAuth: 'none'`. A `proxied` driver cannot sign anything, so
|
|
194
|
+
* the client gets this API's own part route with `partUploadAuth: 'bearer'`.
|
|
195
|
+
*/
|
|
196
|
+
async buildPartUrls(provider, objectId, storageKey, uploadId, partNumbers) {
|
|
197
|
+
if (provider.partUploadMode === 'proxied') {
|
|
198
|
+
const origin = (this.config.get('appUrl') ?? '').replace(/\/+$/, '');
|
|
199
|
+
return {
|
|
200
|
+
presignedUrls: partNumbers.map((partNumber) => ({
|
|
201
|
+
partNumber,
|
|
202
|
+
url: `${origin}${PART_ROUTE_PREFIX}/${objectId}/upload/parts/${partNumber}`,
|
|
203
|
+
})),
|
|
204
|
+
partUploadAuth: 'bearer',
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
const presignedUrls = await Promise.all(partNumbers.map(async (partNumber) => ({
|
|
208
|
+
partNumber,
|
|
209
|
+
url: await provider.getSignedUploadUrl(storageKey, uploadId, partNumber),
|
|
210
|
+
})));
|
|
211
|
+
return { presignedUrls, partUploadAuth: 'none' };
|
|
212
|
+
}
|
|
213
|
+
/** How many parts an object of `objectSize` has, the exact size of each and the configured part size. */
|
|
214
|
+
partLayout(objectSize) {
|
|
215
|
+
const partSize = this.partSize();
|
|
216
|
+
const totalParts = Math.max(1, Math.ceil(objectSize / partSize));
|
|
217
|
+
return {
|
|
218
|
+
partSize,
|
|
219
|
+
totalParts,
|
|
220
|
+
sizeOf: (partNumber) => (partNumber < totalParts ? partSize : objectSize - partSize * (totalParts - 1)),
|
|
157
221
|
};
|
|
158
222
|
}
|
|
223
|
+
/** 409 `UPLOAD_PARTS_MISSING`: re-send exactly `partNumbers`, then complete again. */
|
|
224
|
+
partsMissing(objectId, partNumbers) {
|
|
225
|
+
const sorted = [...new Set(partNumbers)].sort((a, b) => a - b);
|
|
226
|
+
this.logger.warn(`Refusing to complete upload ${objectId}: missing or mismatching part(s) ${sorted.join(', ')}`);
|
|
227
|
+
return new common_1.ConflictException({
|
|
228
|
+
message: 'Some parts of this upload are missing or do not match their ETag. Re-send the listed parts, then complete the upload again.',
|
|
229
|
+
details: { reason: storage_1.UPLOAD_ERROR_REASONS.UPLOAD_PARTS_MISSING, partNumbers: sorted },
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
/** 409 `UPLOAD_SESSION_INVALID`: the backend no longer knows the session; abort and re-initialise. */
|
|
233
|
+
sessionInvalid(objectId) {
|
|
234
|
+
this.logger.warn(`Multipart session for object ${objectId} is no longer valid on the storage backend`);
|
|
235
|
+
return new common_1.ConflictException({
|
|
236
|
+
message: 'The multipart upload session is no longer valid on the storage backend. Re-initialize the upload and send the parts again.',
|
|
237
|
+
details: { reason: storage_1.UPLOAD_ERROR_REASONS.UPLOAD_SESSION_INVALID },
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* The upload an owner may work on, or a 404: another user's upload and a
|
|
242
|
+
* missing one are indistinguishable. The in-progress rule (an open session
|
|
243
|
+
* and a `pending`/`uploading` row) is a 400 `UPLOAD_NOT_ACTIVE`.
|
|
244
|
+
*/
|
|
245
|
+
async ownedOpenUpload(objectId, userId, orgId) {
|
|
246
|
+
const row = await this.db(orgId, userId).storageObject.findUnique({ where: { id: objectId } });
|
|
247
|
+
if (!row || row.uploadedById !== userId) {
|
|
248
|
+
throw new common_1.NotFoundException('Upload not found');
|
|
249
|
+
}
|
|
250
|
+
if (!row.s3UploadId || !IN_PROGRESS_STATUSES.has(row.status)) {
|
|
251
|
+
throw new common_1.BadRequestException({
|
|
252
|
+
message: `Upload is not in progress (status: ${row.status})`,
|
|
253
|
+
details: { reason: storage_1.UPLOAD_ERROR_REASONS.UPLOAD_NOT_ACTIVE, status: row.status },
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
return row;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* More part URLs for an upload in progress (at most 100 per call), from the
|
|
260
|
+
* provider that holds the upload, so an active-provider switch mid-upload
|
|
261
|
+
* cannot misroute them.
|
|
262
|
+
*/
|
|
263
|
+
async getPartUrls(objectId, dto, userId, orgId) {
|
|
264
|
+
const row = await this.ownedOpenUpload(objectId, userId, orgId);
|
|
265
|
+
const { totalParts } = this.partLayout(Number(row.size));
|
|
266
|
+
const outOfRange = dto.partNumbers.filter((n) => n > totalParts);
|
|
267
|
+
if (outOfRange.length > 0) {
|
|
268
|
+
throw new common_1.BadRequestException({
|
|
269
|
+
message: `Part numbers must be between 1 and ${totalParts}`,
|
|
270
|
+
details: { reason: storage_1.UPLOAD_ERROR_REASONS.PART_OUT_OF_RANGE, totalParts, partNumbers: outOfRange },
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
const provider = await this.providerFor(row);
|
|
274
|
+
const result = await this.buildPartUrls(provider, objectId, row.storageKey, row.s3UploadId, dto.partNumbers);
|
|
275
|
+
this.logger.log(`Minted ${result.presignedUrls.length} part URL(s) for object ${objectId}`);
|
|
276
|
+
return result;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Receives one part of a multipart upload THROUGH the API, for a driver with
|
|
280
|
+
* no presigned URLs. The body is streamed to the driver and never buffered;
|
|
281
|
+
* the platform bounds it to the exact part size, so a short or long body is a
|
|
282
|
+
* 400 `PART_SIZE_MISMATCH` and nothing of it is kept. The part is recorded in
|
|
283
|
+
* `storage_object_chunks` (its real size) so status reports it.
|
|
284
|
+
*
|
|
285
|
+
* @param declaredLength - the request's Content-Length, when sent; a wrong value is refused before a byte is read.
|
|
286
|
+
* @returns the part's ETag, quoted like S3's.
|
|
287
|
+
*/
|
|
288
|
+
async uploadPart(objectId, partNumber, userId, orgId, body, declaredLength) {
|
|
289
|
+
const row = await this.ownedOpenUpload(objectId, userId, orgId);
|
|
290
|
+
const provider = await this.providerFor(row);
|
|
291
|
+
if (provider.partUploadMode !== 'proxied' || !provider.uploadPart) {
|
|
292
|
+
throw new common_1.BadRequestException({
|
|
293
|
+
message: 'This upload takes its parts at the presigned URLs returned by upload/init and upload/part-urls, not through the API.',
|
|
294
|
+
details: { reason: storage_1.UPLOAD_ERROR_REASONS.PRESIGNED_PARTS_REQUIRED },
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
const { partSize, totalParts, sizeOf } = this.partLayout(Number(row.size));
|
|
298
|
+
if (!Number.isInteger(partNumber) || partNumber < 1 || partNumber > totalParts) {
|
|
299
|
+
throw new common_1.BadRequestException({
|
|
300
|
+
message: `Part number must be between 1 and ${totalParts}`,
|
|
301
|
+
details: { reason: storage_1.UPLOAD_ERROR_REASONS.PART_OUT_OF_RANGE, totalParts },
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
const expectedSize = sizeOf(partNumber);
|
|
305
|
+
const mismatch = (receivedSize) => new common_1.BadRequestException({
|
|
306
|
+
message: `Part ${partNumber} must be exactly ${expectedSize} bytes`,
|
|
307
|
+
details: { reason: storage_1.UPLOAD_ERROR_REASONS.PART_SIZE_MISMATCH, partNumber, expectedSize, receivedSize, partSize },
|
|
308
|
+
});
|
|
309
|
+
if (declaredLength !== undefined && declaredLength !== expectedSize) {
|
|
310
|
+
// Refuse before reading anything; discard the unread body.
|
|
311
|
+
body.resume();
|
|
312
|
+
throw mismatch(declaredLength);
|
|
313
|
+
}
|
|
314
|
+
let stored;
|
|
315
|
+
try {
|
|
316
|
+
stored = await provider.uploadPart(row.storageKey, row.s3UploadId, partNumber, (0, part_body_1.boundPartBody)(body, partNumber, expectedSize), expectedSize);
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
if (error instanceof storage_provider_types_1.PartSizeMismatchError)
|
|
320
|
+
throw mismatch(error.exceeded ? null : error.receivedSize);
|
|
321
|
+
if (isStaleMultipartSessionError(error))
|
|
322
|
+
throw this.sessionInvalid(objectId);
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
325
|
+
const eTag = `"${(0, storage_provider_types_1.normalizeEtag)(stored.eTag)}"`;
|
|
326
|
+
await this.db(orgId, userId).storageObjectChunk.upsert({
|
|
327
|
+
where: { objectId_partNumber: { objectId, partNumber } },
|
|
328
|
+
create: { objectId, orgId, partNumber, eTag, size: BigInt(expectedSize) },
|
|
329
|
+
update: { eTag, size: BigInt(expectedSize) },
|
|
330
|
+
});
|
|
331
|
+
return { eTag };
|
|
332
|
+
}
|
|
159
333
|
/**
|
|
160
334
|
* Get upload status and progress
|
|
161
335
|
*/
|
|
@@ -171,10 +345,30 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
171
345
|
if (storageObject.uploadedById !== userId) {
|
|
172
346
|
throw new common_1.ForbiddenException('You do not own this upload');
|
|
173
347
|
}
|
|
174
|
-
|
|
348
|
+
let uploadedParts = storageObject.chunks
|
|
175
349
|
.map((chunk) => chunk.partNumber)
|
|
176
350
|
.sort((a, b) => a - b);
|
|
177
|
-
|
|
351
|
+
let uploadedBytes = storageObject.chunks.reduce((sum, chunk) => sum + chunk.size, BigInt(0));
|
|
352
|
+
// While the upload is open, what the BACKEND holds is the truth: a client
|
|
353
|
+
// PUTs parts straight to S3 and never reports each one, so the chunk rows
|
|
354
|
+
// (written at `complete`) would always read empty to a client resuming
|
|
355
|
+
// after a crash. A driver that cannot list parts keeps the chunk rows.
|
|
356
|
+
if (storageObject.s3UploadId && IN_PROGRESS_STATUSES.has(storageObject.status)) {
|
|
357
|
+
const provider = await this.providerFor(storageObject);
|
|
358
|
+
if (provider.listUploadedParts) {
|
|
359
|
+
let held;
|
|
360
|
+
try {
|
|
361
|
+
held = await provider.listUploadedParts(storageObject.storageKey, storageObject.s3UploadId);
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
if (isStaleMultipartSessionError(error))
|
|
365
|
+
throw this.sessionInvalid(objectId);
|
|
366
|
+
throw error;
|
|
367
|
+
}
|
|
368
|
+
uploadedParts = held.map((part) => part.partNumber).sort((a, b) => a - b);
|
|
369
|
+
uploadedBytes = held.reduce((sum, part) => sum + BigInt(part.size), BigInt(0));
|
|
370
|
+
}
|
|
371
|
+
}
|
|
178
372
|
const partSize = this.partSize();
|
|
179
373
|
const totalParts = Math.ceil(Number(storageObject.size) / partSize);
|
|
180
374
|
return {
|
|
@@ -206,6 +400,44 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
206
400
|
}
|
|
207
401
|
const { parts } = dto;
|
|
208
402
|
this.logger.log(`Completing upload ${objectId} with ${parts.length} parts`);
|
|
403
|
+
// The provider that holds this upload, not the active one.
|
|
404
|
+
const provider = await this.providerFor(storageObject);
|
|
405
|
+
// A backend that can list its parts says exactly which are missing, or whose
|
|
406
|
+
// ETag differs from the client's, BEFORE anything is recorded or completed.
|
|
407
|
+
// Every part of the object must be listed too: concatenating 1 and 3 without
|
|
408
|
+
// 2 is a corrupt file, not a smaller one.
|
|
409
|
+
if (provider.listUploadedParts || provider.partUploadMode === 'proxied') {
|
|
410
|
+
const { totalParts } = this.partLayout(Number(storageObject.size));
|
|
411
|
+
const listed = new Set(parts.map((part) => part.partNumber));
|
|
412
|
+
const outOfRange = [...listed].filter((n) => n > totalParts);
|
|
413
|
+
if (outOfRange.length > 0) {
|
|
414
|
+
throw new common_1.BadRequestException({
|
|
415
|
+
message: `Part numbers must be between 1 and ${totalParts}`,
|
|
416
|
+
details: { reason: storage_1.UPLOAD_ERROR_REASONS.PART_OUT_OF_RANGE, totalParts, partNumbers: outOfRange.sort((a, b) => a - b) },
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
const unlisted = Array.from({ length: totalParts }, (_, i) => i + 1).filter((n) => !listed.has(n));
|
|
420
|
+
let missing = unlisted;
|
|
421
|
+
if (provider.listUploadedParts) {
|
|
422
|
+
let held;
|
|
423
|
+
try {
|
|
424
|
+
held = await provider.listUploadedParts(storageObject.storageKey, storageObject.s3UploadId);
|
|
425
|
+
}
|
|
426
|
+
catch (error) {
|
|
427
|
+
if (isStaleMultipartSessionError(error))
|
|
428
|
+
throw this.sessionInvalid(objectId);
|
|
429
|
+
throw error;
|
|
430
|
+
}
|
|
431
|
+
const heldEtags = new Map(held.map((part) => [part.partNumber, (0, storage_provider_types_1.normalizeEtag)(part.eTag)]));
|
|
432
|
+
const mismatching = parts
|
|
433
|
+
.filter((part) => heldEtags.get(part.partNumber) !== (0, storage_provider_types_1.normalizeEtag)(part.eTag))
|
|
434
|
+
.map((part) => part.partNumber);
|
|
435
|
+
missing = [...unlisted, ...mismatching];
|
|
436
|
+
}
|
|
437
|
+
if (missing.length > 0) {
|
|
438
|
+
throw this.partsMissing(objectId, missing);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
209
441
|
// Record chunks in database: one scoped transaction for all parts (a
|
|
210
442
|
// scoped client would open one transaction per upsert, and a large upload
|
|
211
443
|
// has thousands of parts). Each chunk carries its object's org_id, which
|
|
@@ -232,8 +464,27 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
232
464
|
});
|
|
233
465
|
}
|
|
234
466
|
}, { userId, timeout: CHUNK_RECORD_TIMEOUT_MS });
|
|
235
|
-
// Complete upload with
|
|
236
|
-
|
|
467
|
+
// Complete upload with the provider that holds it. A dead session or a part
|
|
468
|
+
// the backend rejects is CLIENT STATE, not a server fault: say which, so the
|
|
469
|
+
// client re-sends those parts or re-initialises instead of seeing a 500.
|
|
470
|
+
try {
|
|
471
|
+
await provider.completeMultipartUpload(storageObject.storageKey, storageObject.s3UploadId, parts);
|
|
472
|
+
}
|
|
473
|
+
catch (error) {
|
|
474
|
+
if (error instanceof storage_provider_types_1.MultipartPartsMissingError) {
|
|
475
|
+
// Forget the bad parts so status stops reporting them as uploaded.
|
|
476
|
+
await this.db(orgId, userId).storageObjectChunk.deleteMany({
|
|
477
|
+
where: { objectId, partNumber: { in: error.partNumbers } },
|
|
478
|
+
});
|
|
479
|
+
throw this.partsMissing(objectId, error.partNumbers);
|
|
480
|
+
}
|
|
481
|
+
if (isStaleMultipartSessionError(error))
|
|
482
|
+
throw this.sessionInvalid(objectId);
|
|
483
|
+
if (error?.name === 'InvalidPart') {
|
|
484
|
+
throw this.partsMissing(objectId, parts.map((part) => part.partNumber));
|
|
485
|
+
}
|
|
486
|
+
throw error;
|
|
487
|
+
}
|
|
237
488
|
// `processing`, then either `ready` (no processor applies) or a queued
|
|
238
489
|
// processing job — in ONE transaction, so the row never reads
|
|
239
490
|
// `processing` without a job that will settle it.
|
|
@@ -289,8 +540,8 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
289
540
|
throw new common_1.BadRequestException('Upload ID not found');
|
|
290
541
|
}
|
|
291
542
|
this.logger.log(`Aborting upload ${objectId}`);
|
|
292
|
-
// Abort with
|
|
293
|
-
await this.
|
|
543
|
+
// Abort with the provider that holds the upload
|
|
544
|
+
await (await this.providerFor(storageObject)).abortMultipartUpload(storageObject.storageKey, storageObject.s3UploadId);
|
|
294
545
|
// Delete database records
|
|
295
546
|
await this.db(orgId, userId).storageObject.delete({
|
|
296
547
|
where: { id: objectId },
|
|
@@ -322,11 +573,13 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
322
573
|
// Generate storage key (org-aware since #736; see `initUpload`).
|
|
323
574
|
const storageKey = this.newUploadKey(orgId, filename);
|
|
324
575
|
this.logger.log(`Simple upload starting: ${filename}`);
|
|
325
|
-
// Upload to storage
|
|
326
|
-
|
|
576
|
+
// Upload to storage: new bytes go to the active provider, and the row
|
|
577
|
+
// records which one took them.
|
|
578
|
+
const provider = await this.activeProvider();
|
|
579
|
+
const result = await provider.upload(storageKey, stream, {
|
|
327
580
|
mimeType: mimetype,
|
|
328
581
|
});
|
|
329
|
-
const storageProvider =
|
|
582
|
+
const storageProvider = provider.kind;
|
|
330
583
|
// We don't know the size until after upload for streams
|
|
331
584
|
// Use a default size of 0, should be updated in post-processing.
|
|
332
585
|
// Created and settled (`ready`, or a queued processing job) in ONE
|
|
@@ -420,7 +673,7 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
420
673
|
}
|
|
421
674
|
const defaultExpiry = this.config.get('storage.signedUrlExpiry', 3600);
|
|
422
675
|
const expiry = expiresIn || defaultExpiry;
|
|
423
|
-
const url = await this.
|
|
676
|
+
const url = await (await this.providerFor(object)).getSignedDownloadUrl(object.storageKey, { expiresIn: expiry });
|
|
424
677
|
this.logger.log(`Generated download URL for object ${id}, expires in ${expiry}s`);
|
|
425
678
|
return {
|
|
426
679
|
url,
|
|
@@ -448,8 +701,8 @@ let ObjectsService = ObjectsService_1 = class ObjectsService {
|
|
|
448
701
|
? await this.getObjectForDeleteAny(id, userId, orgId)
|
|
449
702
|
: await this.getObjectWithAuthCheck(id, userId, orgId);
|
|
450
703
|
this.logger.log(`Deleting object ${id} from storage and database`);
|
|
451
|
-
// Delete from
|
|
452
|
-
await this.
|
|
704
|
+
// Delete from the provider that holds the bytes, not the active one
|
|
705
|
+
await (await this.providerFor(object)).delete(object.storageKey);
|
|
453
706
|
// Delete from database (cascade deletes chunks)
|
|
454
707
|
await this.db(orgId, userId).storageObject.delete({
|
|
455
708
|
where: { id },
|
|
@@ -635,8 +888,9 @@ exports.ObjectsService = ObjectsService = ObjectsService_1 = __decorate([
|
|
|
635
888
|
__param(1, (0, common_2.Inject)(storage_provider_interface_1.STORAGE_PROVIDER)),
|
|
636
889
|
__param(5, (0, common_1.Optional)()),
|
|
637
890
|
__param(5, (0, common_2.Inject)(storage_options_1.STORAGE_OPTIONS)),
|
|
891
|
+
__param(6, (0, common_1.Optional)()),
|
|
638
892
|
__metadata("design:paramtypes", [Object, Object, config_1.ConfigService,
|
|
639
893
|
object_processing_service_1.ObjectProcessingService,
|
|
640
|
-
index_1.JobsService, Object])
|
|
894
|
+
index_1.JobsService, Object, storage_provider_router_1.StorageProviderRouter])
|
|
641
895
|
], ObjectsService);
|
|
642
896
|
//# sourceMappingURL=objects.service.js.map
|