@webiny/api-file-manager-s3 6.0.0-beta.0 → 6.0.0-rc.0
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/README.md +11 -1
- package/assetDelivery/assetDeliveryConfig.d.ts +2 -6
- package/assetDelivery/assetDeliveryConfig.js +24 -23
- package/assetDelivery/assetDeliveryConfig.js.map +1 -1
- package/assetDelivery/createAssetDelivery.d.ts +3 -3
- package/assetDelivery/createAssetDelivery.js +15 -12
- package/assetDelivery/createAssetDelivery.js.map +1 -1
- package/assetDelivery/index.d.ts +8 -9
- package/assetDelivery/index.js +8 -68
- package/assetDelivery/index.js.map +1 -1
- package/assetDelivery/s3/S3AssetResolver.d.ts +8 -5
- package/assetDelivery/s3/S3AssetResolver.js +19 -27
- package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
- package/assetDelivery/s3/S3ContentsReader.d.ts +2 -3
- package/assetDelivery/s3/S3ContentsReader.js +1 -8
- package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
- package/assetDelivery/s3/S3ErrorAssetReply.js +2 -9
- package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3OutputStrategy.d.ts +4 -3
- package/assetDelivery/s3/S3OutputStrategy.js +12 -17
- package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
- package/assetDelivery/s3/S3RedirectAssetReply.js +4 -11
- package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3StreamAssetReply.d.ts +2 -1
- package/assetDelivery/s3/S3StreamAssetReply.js +4 -11
- package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -1
- package/assetDelivery/s3/SharpTransform.d.ts +2 -2
- package/assetDelivery/s3/SharpTransform.js +63 -37
- package/assetDelivery/s3/SharpTransform.js.map +1 -1
- package/assetDelivery/s3/transformation/AssetKeyGenerator.d.ts +1 -1
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js +3 -12
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -1
- package/assetDelivery/s3/transformation/CallableContentsReader.d.ts +1 -2
- package/assetDelivery/s3/transformation/CallableContentsReader.js +1 -8
- package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -1
- package/assetDelivery/s3/transformation/WidthCollection.js +1 -8
- package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -1
- package/assetDelivery/s3/transformation/utils.d.ts +1 -3
- package/assetDelivery/s3/transformation/utils.js +23 -19
- package/assetDelivery/s3/transformation/utils.js.map +1 -1
- package/assetDelivery/threatDetection/ObjectKey.d.ts +7 -0
- package/assetDelivery/threatDetection/ObjectKey.js +17 -0
- package/assetDelivery/threatDetection/ObjectKey.js.map +1 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.d.ts +2 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +51 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.d.ts +2 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +6 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -0
- package/assetDelivery/threatDetection/index.d.ts +2 -0
- package/assetDelivery/threatDetection/index.js +4 -0
- package/assetDelivery/threatDetection/index.js.map +1 -0
- package/assetDelivery/threatDetection/processThreatScanResult.d.ts +3 -0
- package/assetDelivery/threatDetection/processThreatScanResult.js +65 -0
- package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -0
- package/assetDelivery/threatDetection/types.d.ts +9 -0
- package/assetDelivery/threatDetection/types.js +3 -0
- package/assetDelivery/threatDetection/types.js.map +1 -0
- package/assetDelivery/types.d.ts +10 -0
- package/assetDelivery/types.js +3 -0
- package/assetDelivery/types.js.map +1 -0
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.d.ts +11 -0
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js +19 -0
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js.map +1 -0
- package/enterprise/ApplyThreatScanning/feature.d.ts +1 -0
- package/enterprise/ApplyThreatScanning/feature.js +10 -0
- package/enterprise/ApplyThreatScanning/feature.js.map +1 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.d.ts +15 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js +36 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js.map +1 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.d.ts +31 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js +60 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js.map +1 -0
- package/features/DeleteFileFromBucket/feature.d.ts +1 -0
- package/features/DeleteFileFromBucket/feature.js +12 -0
- package/features/DeleteFileFromBucket/feature.js.map +1 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.d.ts +11 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.js +26 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.js.map +1 -0
- package/features/ExtractMetadata/ExtractMetadataTask.d.ts +23 -0
- package/features/ExtractMetadata/ExtractMetadataTask.js +128 -0
- package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -0
- package/features/ExtractMetadata/feature.d.ts +1 -0
- package/features/ExtractMetadata/feature.js +12 -0
- package/features/ExtractMetadata/feature.js.map +1 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.d.ts +12 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js +27 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js.map +1 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.d.ts +12 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js +35 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js.map +1 -0
- package/features/FlushCache/InvalidateCacheTask.d.ts +25 -0
- package/features/FlushCache/InvalidateCacheTask.js +86 -0
- package/features/FlushCache/InvalidateCacheTask.js.map +1 -0
- package/features/FlushCache/feature.d.ts +1 -0
- package/features/FlushCache/feature.js +14 -0
- package/features/FlushCache/feature.js.map +1 -0
- package/features/WriteFileMetadata/MetadataReader.d.ts +14 -0
- package/features/WriteFileMetadata/MetadataReader.js +14 -0
- package/features/WriteFileMetadata/MetadataReader.js.map +1 -0
- package/features/WriteFileMetadata/MetadataWriter.d.ts +10 -0
- package/features/WriteFileMetadata/MetadataWriter.js +28 -0
- package/features/WriteFileMetadata/MetadataWriter.js.map +1 -0
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +12 -0
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +21 -0
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +12 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +21 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -0
- package/features/WriteFileMetadata/feature.d.ts +1 -0
- package/features/WriteFileMetadata/feature.js +12 -0
- package/features/WriteFileMetadata/feature.js.map +1 -0
- package/graphql/checkPermissions.d.ts +5 -0
- package/{plugins → graphql}/checkPermissions.js +4 -11
- package/graphql/checkPermissions.js.map +1 -0
- package/graphql/schema.d.ts +1 -0
- package/{plugins/graphqlFileStorageS3.js → graphql/schema.js} +49 -57
- package/graphql/schema.js.map +1 -0
- package/index.d.ts +4 -5
- package/index.js +21 -32
- package/index.js.map +1 -1
- package/multiPartUpload/CompleteMultiPartUploadUseCase.d.ts +1 -1
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js +4 -11
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -1
- package/multiPartUpload/CreateMultiPartUploadUseCase.d.ts +2 -2
- package/multiPartUpload/CreateMultiPartUploadUseCase.js +3 -10
- package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -1
- package/package.json +23 -29
- package/types.d.ts +1 -1
- package/types.js +1 -5
- package/types.js.map +1 -1
- package/utils/CdnPathsGenerator.d.ts +3 -0
- package/utils/CdnPathsGenerator.js +7 -0
- package/utils/CdnPathsGenerator.js.map +1 -0
- package/utils/FileExtension.d.ts +1 -1
- package/utils/FileExtension.js +3 -10
- package/utils/FileExtension.js.map +1 -1
- package/utils/FileKey.d.ts +1 -1
- package/utils/FileKey.js +5 -13
- package/utils/FileKey.js.map +1 -1
- package/utils/FileKey.test.js +8 -9
- package/utils/FileKey.test.js.map +1 -1
- package/utils/FileNormalizer.d.ts +2 -2
- package/utils/FileNormalizer.js +5 -12
- package/utils/FileNormalizer.js.map +1 -1
- package/utils/FileUploadModifier.d.ts +1 -1
- package/utils/FileUploadModifier.js +6 -16
- package/utils/FileUploadModifier.js.map +1 -1
- package/utils/createFileNormalizerFromContext.d.ts +2 -2
- package/utils/createFileNormalizerFromContext.js +5 -12
- package/utils/createFileNormalizerFromContext.js.map +1 -1
- package/utils/getPresignedPostPayload.d.ts +4 -3
- package/utils/getPresignedPostPayload.js +10 -15
- package/utils/getPresignedPostPayload.js.map +1 -1
- package/utils/mimeTypes.js +5 -13
- package/utils/mimeTypes.js.map +1 -1
- package/utils/uploadFileToS3.d.ts +1 -3
- package/utils/uploadFileToS3.js +7 -20
- package/utils/uploadFileToS3.js.map +1 -1
- package/assetDelivery/createCustomAssetDelivery.d.ts +0 -12
- package/assetDelivery/createCustomAssetDelivery.js +0 -28
- package/assetDelivery/createCustomAssetDelivery.js.map +0 -1
- package/assetDelivery/customAssets/CustomAsset.d.ts +0 -6
- package/assetDelivery/customAssets/CustomAsset.js +0 -14
- package/assetDelivery/customAssets/CustomAsset.js.map +0 -1
- package/assetDelivery/customAssets/CustomAssetProcessor.d.ts +0 -10
- package/assetDelivery/customAssets/CustomAssetProcessor.js +0 -25
- package/assetDelivery/customAssets/CustomAssetProcessor.js.map +0 -1
- package/assetDelivery/customAssets/S3CustomAssetResolver.d.ts +0 -15
- package/assetDelivery/customAssets/S3CustomAssetResolver.js +0 -90
- package/assetDelivery/customAssets/S3CustomAssetResolver.js.map +0 -1
- package/assetDelivery/customAssets/customAssetDeliveryConfig.d.ts +0 -1
- package/assetDelivery/customAssets/customAssetDeliveryConfig.js +0 -30
- package/assetDelivery/customAssets/customAssetDeliveryConfig.js.map +0 -1
- package/assetDelivery/s3/S3AssetMetadataReader.d.ts +0 -15
- package/assetDelivery/s3/S3AssetMetadataReader.js +0 -36
- package/assetDelivery/s3/S3AssetMetadataReader.js.map +0 -1
- package/assetDelivery/s3/transformation/legacyUtils.d.ts +0 -12
- package/assetDelivery/s3/transformation/legacyUtils.js +0 -34
- package/assetDelivery/s3/transformation/legacyUtils.js.map +0 -1
- package/flushCdnCache/CdnPathsGenerator.d.ts +0 -4
- package/flushCdnCache/CdnPathsGenerator.js +0 -14
- package/flushCdnCache/CdnPathsGenerator.js.map +0 -1
- package/flushCdnCache/InvalidateCacheTask.d.ts +0 -18
- package/flushCdnCache/InvalidateCacheTask.js +0 -78
- package/flushCdnCache/InvalidateCacheTask.js.map +0 -1
- package/flushCdnCache/flushCacheOnFileDelete.d.ts +0 -3
- package/flushCdnCache/flushCacheOnFileDelete.js +0 -34
- package/flushCdnCache/flushCacheOnFileDelete.js.map +0 -1
- package/flushCdnCache/flushCacheOnFileUpdate.d.ts +0 -3
- package/flushCdnCache/flushCacheOnFileUpdate.js +0 -40
- package/flushCdnCache/flushCacheOnFileUpdate.js.map +0 -1
- package/flushCdnCache/index.d.ts +0 -1
- package/flushCdnCache/index.js +0 -15
- package/flushCdnCache/index.js.map +0 -1
- package/flushCdnCache/invalidateCacheTaskDefinition.d.ts +0 -2
- package/flushCdnCache/invalidateCacheTaskDefinition.js +0 -22
- package/flushCdnCache/invalidateCacheTaskDefinition.js.map +0 -1
- package/plugins/addFileMetadata.d.ts +0 -10
- package/plugins/addFileMetadata.js +0 -67
- package/plugins/addFileMetadata.js.map +0 -1
- package/plugins/checkPermissions.d.ts +0 -4
- package/plugins/checkPermissions.js.map +0 -1
- package/plugins/fileStorageS3.d.ts +0 -3
- package/plugins/fileStorageS3.js +0 -60
- package/plugins/fileStorageS3.js.map +0 -1
- package/plugins/graphqlFileStorageS3.d.ts +0 -4
- package/plugins/graphqlFileStorageS3.js.map +0 -1
|
@@ -1,23 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var _CompleteMultiPartUploadUseCase = require("../multiPartUpload/CompleteMultiPartUploadUseCase");
|
|
16
|
-
var _createFileNormalizerFromContext = require("../utils/createFileNormalizerFromContext");
|
|
17
|
-
const plugin = {
|
|
18
|
-
type: "graphql-schema",
|
|
19
|
-
name: "graphql-schema-api-file-manager-s3",
|
|
20
|
-
schema: {
|
|
1
|
+
import pMap from "p-map";
|
|
2
|
+
import { createGraphQLSchemaPlugin } from "@webiny/handler-graphql";
|
|
3
|
+
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
4
|
+
import { S3 } from "@webiny/aws-sdk/client-s3/index.js";
|
|
5
|
+
import { ErrorResponse, Response } from "@webiny/handler-graphql/responses.js";
|
|
6
|
+
import { getPresignedPostPayload } from "../utils/getPresignedPostPayload.js";
|
|
7
|
+
import { checkPermissions } from "./checkPermissions.js";
|
|
8
|
+
import { CreateMultiPartUploadUseCase } from "../multiPartUpload/CreateMultiPartUploadUseCase.js";
|
|
9
|
+
import { CompleteMultiPartUploadUseCase } from "../multiPartUpload/CompleteMultiPartUploadUseCase.js";
|
|
10
|
+
import { createFileNormalizerFromContext } from "../utils/createFileNormalizerFromContext.js";
|
|
11
|
+
import { GetSettingsUseCase } from "@webiny/api-file-manager/features/settings/GetSettings/abstractions.js";
|
|
12
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
13
|
+
export const createS3GraphQLSchema = () => {
|
|
14
|
+
return createGraphQLSchemaPlugin({
|
|
21
15
|
typeDefs: /* GraphQL */`
|
|
22
16
|
type UploadFileResponseDataFile {
|
|
23
17
|
id: ID!
|
|
@@ -28,6 +22,7 @@ const plugin = {
|
|
|
28
22
|
}
|
|
29
23
|
|
|
30
24
|
input PreSignedPostPayloadInput {
|
|
25
|
+
id: ID
|
|
31
26
|
name: String!
|
|
32
27
|
type: String!
|
|
33
28
|
size: Long!
|
|
@@ -109,22 +104,20 @@ const plugin = {
|
|
|
109
104
|
resolvers: {
|
|
110
105
|
FmQuery: {
|
|
111
106
|
getPreSignedPostPayload: async (_, args, context) => {
|
|
107
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
108
|
+
const getSettings = context.container.resolve(GetSettingsUseCase);
|
|
112
109
|
try {
|
|
113
|
-
await
|
|
110
|
+
await checkPermissions(identityContext, {
|
|
114
111
|
rwd: "w"
|
|
115
112
|
});
|
|
116
113
|
const data = args.data;
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
const normalizer = (0, _createFileNormalizerFromContext.createFileNormalizerFromContext)(context);
|
|
124
|
-
const presignedPayload = await (0, _getPresignedPostPayload.getPresignedPostPayload)(await normalizer.normalizeFile(data), settings);
|
|
125
|
-
return new _responses.Response(presignedPayload);
|
|
114
|
+
const settingsResult = await getSettings.execute();
|
|
115
|
+
const settings = settingsResult.value;
|
|
116
|
+
const normalizer = createFileNormalizerFromContext(context);
|
|
117
|
+
const presignedPayload = await getPresignedPostPayload(await normalizer.normalizeFile(data), settings, context.container.resolve(TenantContext));
|
|
118
|
+
return new Response(presignedPayload);
|
|
126
119
|
} catch (e) {
|
|
127
|
-
return new
|
|
120
|
+
return new ErrorResponse({
|
|
128
121
|
message: e.message,
|
|
129
122
|
code: e.code,
|
|
130
123
|
data: e.data
|
|
@@ -132,24 +125,22 @@ const plugin = {
|
|
|
132
125
|
}
|
|
133
126
|
},
|
|
134
127
|
getPreSignedPostPayloads: async (_, args, context) => {
|
|
135
|
-
|
|
128
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
129
|
+
const getSettings = context.container.resolve(GetSettingsUseCase);
|
|
130
|
+
await checkPermissions(identityContext, {
|
|
136
131
|
rwd: "w"
|
|
137
132
|
});
|
|
138
133
|
const files = args.data;
|
|
139
134
|
try {
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
const normalizer = (0, _createFileNormalizerFromContext.createFileNormalizerFromContext)(context);
|
|
147
|
-
const presignedPayloads = await (0, _pMap.default)(files, async data => {
|
|
148
|
-
return (0, _getPresignedPostPayload.getPresignedPostPayload)(await normalizer.normalizeFile(data), settings);
|
|
135
|
+
const settingsResult = await getSettings.execute();
|
|
136
|
+
const settings = settingsResult.value;
|
|
137
|
+
const normalizer = createFileNormalizerFromContext(context);
|
|
138
|
+
const presignedPayloads = await pMap(files, async data => {
|
|
139
|
+
return getPresignedPostPayload(await normalizer.normalizeFile(data), settings, context.container.resolve(TenantContext));
|
|
149
140
|
});
|
|
150
|
-
return new
|
|
141
|
+
return new Response(presignedPayloads);
|
|
151
142
|
} catch (e) {
|
|
152
|
-
return new
|
|
143
|
+
return new ErrorResponse({
|
|
153
144
|
message: e.message,
|
|
154
145
|
code: e.code,
|
|
155
146
|
data: e.data
|
|
@@ -159,22 +150,23 @@ const plugin = {
|
|
|
159
150
|
},
|
|
160
151
|
FmMutation: {
|
|
161
152
|
createMultiPartUpload: async (_, args, context) => {
|
|
162
|
-
|
|
153
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
154
|
+
await checkPermissions(identityContext, {
|
|
163
155
|
rwd: "w"
|
|
164
156
|
});
|
|
165
|
-
const s3Client = new
|
|
157
|
+
const s3Client = new S3({
|
|
166
158
|
region: process.env.AWS_REGION
|
|
167
159
|
});
|
|
168
160
|
try {
|
|
169
|
-
const useCase = new
|
|
170
|
-
const normalizer =
|
|
161
|
+
const useCase = new CreateMultiPartUploadUseCase(String(process.env.S3_BUCKET), s3Client);
|
|
162
|
+
const normalizer = createFileNormalizerFromContext(context);
|
|
171
163
|
const multiPartUpload = await useCase.execute({
|
|
172
164
|
file: await normalizer.normalizeFile(args.data),
|
|
173
165
|
numberOfParts: args.numberOfParts
|
|
174
166
|
});
|
|
175
|
-
return new
|
|
167
|
+
return new Response(multiPartUpload);
|
|
176
168
|
} catch (e) {
|
|
177
|
-
return new
|
|
169
|
+
return new ErrorResponse({
|
|
178
170
|
message: e.message,
|
|
179
171
|
code: e.code,
|
|
180
172
|
data: e.data
|
|
@@ -182,21 +174,22 @@ const plugin = {
|
|
|
182
174
|
}
|
|
183
175
|
},
|
|
184
176
|
completeMultiPartUpload: async (_, args, context) => {
|
|
185
|
-
|
|
177
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
178
|
+
await checkPermissions(identityContext, {
|
|
186
179
|
rwd: "w"
|
|
187
180
|
});
|
|
188
|
-
const s3Client = new
|
|
181
|
+
const s3Client = new S3({
|
|
189
182
|
region: process.env.AWS_REGION
|
|
190
183
|
});
|
|
191
184
|
try {
|
|
192
|
-
const useCase = new
|
|
185
|
+
const useCase = new CompleteMultiPartUploadUseCase(String(process.env.S3_BUCKET), s3Client);
|
|
193
186
|
await useCase.execute({
|
|
194
187
|
fileKey: args.fileKey,
|
|
195
188
|
uploadId: args.uploadId
|
|
196
189
|
});
|
|
197
|
-
return new
|
|
190
|
+
return new Response(true);
|
|
198
191
|
} catch (e) {
|
|
199
|
-
return new
|
|
192
|
+
return new ErrorResponse({
|
|
200
193
|
message: e.message,
|
|
201
194
|
code: e.code,
|
|
202
195
|
data: e.data
|
|
@@ -205,8 +198,7 @@ const plugin = {
|
|
|
205
198
|
}
|
|
206
199
|
}
|
|
207
200
|
}
|
|
208
|
-
}
|
|
201
|
+
});
|
|
209
202
|
};
|
|
210
|
-
var _default = exports.default = plugin;
|
|
211
203
|
|
|
212
|
-
//# sourceMappingURL=
|
|
204
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["pMap","createGraphQLSchemaPlugin","IdentityContext","S3","ErrorResponse","Response","getPresignedPostPayload","checkPermissions","CreateMultiPartUploadUseCase","CompleteMultiPartUploadUseCase","createFileNormalizerFromContext","GetSettingsUseCase","TenantContext","createS3GraphQLSchema","typeDefs","resolvers","FmQuery","getPreSignedPostPayload","_","args","context","identityContext","container","resolve","getSettings","rwd","data","settingsResult","execute","settings","value","normalizer","presignedPayload","normalizeFile","e","message","code","getPreSignedPostPayloads","files","presignedPayloads","FmMutation","createMultiPartUpload","s3Client","region","process","env","AWS_REGION","useCase","String","S3_BUCKET","multiPartUpload","file","numberOfParts","completeMultiPartUpload","fileKey","uploadId"],"sources":["schema.ts"],"sourcesContent":["import pMap from \"p-map\";\nimport { createGraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { IdentityContext } from \"@webiny/api-core/features/IdentityContext\";\nimport { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { ErrorResponse, Response } from \"@webiny/handler-graphql/responses.js\";\nimport { getPresignedPostPayload } from \"~/utils/getPresignedPostPayload.js\";\nimport { checkPermissions } from \"./checkPermissions.js\";\nimport type { PresignedPostPayloadData } from \"~/types.js\";\nimport { CreateMultiPartUploadUseCase } from \"~/multiPartUpload/CreateMultiPartUploadUseCase.js\";\nimport { CompleteMultiPartUploadUseCase } from \"~/multiPartUpload/CompleteMultiPartUploadUseCase.js\";\nimport { createFileNormalizerFromContext } from \"~/utils/createFileNormalizerFromContext.js\";\nimport { GetSettingsUseCase } from \"@webiny/api-file-manager/features/settings/GetSettings/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\n\nexport const createS3GraphQLSchema = () => {\n return createGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type UploadFileResponseDataFile {\n id: ID!\n name: String!\n type: String!\n size: Long!\n key: String!\n }\n\n input PreSignedPostPayloadInput {\n id: ID\n name: String!\n type: String!\n size: Long!\n key: String\n keyPrefix: String\n }\n\n type GetPreSignedPostPayloadResponseDataFile {\n id: ID!\n name: String!\n type: String!\n size: Long!\n key: String!\n }\n\n type GetPreSignedPostPayloadResponseData {\n # Contains data that is necessary for initiating a file upload.\n data: JSON!\n file: UploadFileResponseDataFile!\n }\n\n type GetPreSignedPostPayloadResponse {\n error: FmError\n data: GetPreSignedPostPayloadResponseData\n }\n\n type MultiPartUploadFilePart {\n partNumber: Int!\n url: String!\n }\n\n type CreateMultiPartUploadResponseData {\n file: GetPreSignedPostPayloadResponseDataFile!\n uploadId: String!\n parts: [MultiPartUploadFilePart!]!\n }\n\n type CompleteMultiPartUploadResponse {\n data: Boolean\n error: FmError\n }\n\n type GetPreSignedPostPayloadsResponse {\n error: FmError\n data: [GetPreSignedPostPayloadResponseData!]!\n }\n\n extend type FmQuery {\n getPreSignedPostPayload(\n data: PreSignedPostPayloadInput!\n ): GetPreSignedPostPayloadResponse\n getPreSignedPostPayloads(\n data: [PreSignedPostPayloadInput]!\n ): GetPreSignedPostPayloadsResponse\n }\n\n type CreateMultiPartUploadResponse {\n data: CreateMultiPartUploadResponseData\n error: FmError\n }\n\n input MultiPartUploadFilePartInput {\n partNumber: Int!\n etag: String!\n }\n\n extend type FmMutation {\n createMultiPartUpload(\n data: PreSignedPostPayloadInput!\n numberOfParts: Number!\n ): CreateMultiPartUploadResponse\n\n completeMultiPartUpload(\n fileKey: String!\n uploadId: String!\n ): CompleteMultiPartUploadResponse\n }\n `,\n resolvers: {\n FmQuery: {\n getPreSignedPostPayload: async (_, args: any, context) => {\n const identityContext = context.container.resolve(IdentityContext);\n const getSettings = context.container.resolve(GetSettingsUseCase);\n\n try {\n await checkPermissions(identityContext, { rwd: \"w\" });\n\n const data = args.data as PresignedPostPayloadData;\n\n const settingsResult = await getSettings.execute();\n const settings = settingsResult.value;\n\n const normalizer = createFileNormalizerFromContext(context);\n const presignedPayload = await getPresignedPostPayload(\n await normalizer.normalizeFile(data),\n settings,\n context.container.resolve(TenantContext)\n );\n\n return new Response(presignedPayload);\n } catch (e) {\n return new ErrorResponse({\n message: e.message,\n code: e.code,\n data: e.data\n });\n }\n },\n getPreSignedPostPayloads: async (_, args, context) => {\n const identityContext = context.container.resolve(IdentityContext);\n const getSettings = context.container.resolve(GetSettingsUseCase);\n await checkPermissions(identityContext, { rwd: \"w\" });\n\n const files = args.data as PresignedPostPayloadData[];\n\n try {\n const settingsResult = await getSettings.execute();\n const settings = settingsResult.value;\n\n const normalizer = createFileNormalizerFromContext(context);\n\n const presignedPayloads = await pMap(files, async data => {\n return getPresignedPostPayload(\n await normalizer.normalizeFile(data),\n settings,\n context.container.resolve(TenantContext)\n );\n });\n\n return new Response(presignedPayloads);\n } catch (e) {\n return new ErrorResponse({\n message: e.message,\n code: e.code,\n data: e.data\n });\n }\n }\n },\n FmMutation: {\n createMultiPartUpload: async (_, args, context) => {\n const identityContext = context.container.resolve(IdentityContext);\n await checkPermissions(identityContext, { rwd: \"w\" });\n\n const s3Client = new S3({\n region: process.env.AWS_REGION\n });\n\n try {\n const useCase = new CreateMultiPartUploadUseCase(\n String(process.env.S3_BUCKET),\n s3Client\n );\n\n const normalizer = createFileNormalizerFromContext(context);\n\n const multiPartUpload = await useCase.execute({\n file: await normalizer.normalizeFile(args.data),\n numberOfParts: args.numberOfParts\n });\n\n return new Response(multiPartUpload);\n } catch (e) {\n return new ErrorResponse({\n message: e.message,\n code: e.code,\n data: e.data\n });\n }\n },\n completeMultiPartUpload: async (_, args, context) => {\n const identityContext = context.container.resolve(IdentityContext);\n await checkPermissions(identityContext, { rwd: \"w\" });\n\n const s3Client = new S3({\n region: process.env.AWS_REGION\n });\n\n try {\n const useCase = new CompleteMultiPartUploadUseCase(\n String(process.env.S3_BUCKET),\n s3Client\n );\n\n await useCase.execute({\n fileKey: args.fileKey,\n uploadId: args.uploadId\n });\n\n return new Response(true);\n } catch (e) {\n return new ErrorResponse({\n message: e.message,\n code: e.code,\n data: e.data\n });\n }\n }\n }\n }\n });\n};\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,OAAO;AACxB,SAASC,yBAAyB,QAAQ,yBAAyB;AACnE,SAASC,eAAe,QAAQ,2CAA2C;AAC3E,SAASC,EAAE,QAAQ,oCAAoC;AACvD,SAASC,aAAa,EAAEC,QAAQ,QAAQ,sCAAsC;AAC9E,SAASC,uBAAuB;AAChC,SAASC,gBAAgB;AAEzB,SAASC,4BAA4B;AACrC,SAASC,8BAA8B;AACvC,SAASC,+BAA+B;AACxC,SAASC,kBAAkB,QAAQ,wEAAwE;AAC3G,SAASC,aAAa,QAAQ,0DAA0D;AAExF,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACvC,OAAOZ,yBAAyB,CAAC;IAC7Ba,QAAQ,EAAE,aAAc;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;IACDC,SAAS,EAAE;MACPC,OAAO,EAAE;QACLC,uBAAuB,EAAE,MAAAA,CAAOC,CAAC,EAAEC,IAAS,EAAEC,OAAO,KAAK;UACtD,MAAMC,eAAe,GAAGD,OAAO,CAACE,SAAS,CAACC,OAAO,CAACrB,eAAe,CAAC;UAClE,MAAMsB,WAAW,GAAGJ,OAAO,CAACE,SAAS,CAACC,OAAO,CAACZ,kBAAkB,CAAC;UAEjE,IAAI;YACA,MAAMJ,gBAAgB,CAACc,eAAe,EAAE;cAAEI,GAAG,EAAE;YAAI,CAAC,CAAC;YAErD,MAAMC,IAAI,GAAGP,IAAI,CAACO,IAAgC;YAElD,MAAMC,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","ignoreList":[]}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
declare const
|
|
5
|
-
export default _default;
|
|
1
|
+
import { ContextPlugin } from "@webiny/api";
|
|
2
|
+
export { createFileUploadModifier } from "./utils/FileUploadModifier.js";
|
|
3
|
+
export { createAssetDelivery } from "./assetDelivery/createAssetDelivery.js";
|
|
4
|
+
export declare const createFileManagerS3: () => (import("@webiny/handler-graphql/index.js").GraphQLSchemaPlugin<import("@webiny/api/types.js").Context> | ContextPlugin<import("@webiny/api/types.js").Context>)[];
|
package/index.js
CHANGED
|
@@ -1,36 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
enumerable: true,
|
|
21
|
-
get: function () {
|
|
22
|
-
return _FileUploadModifier.createFileUploadModifier;
|
|
1
|
+
import { ContextPlugin } from "@webiny/api";
|
|
2
|
+
import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js";
|
|
3
|
+
import { createS3GraphQLSchema } from "./graphql/schema.js";
|
|
4
|
+
import { DeleteFileFromBucketFeature } from "./features/DeleteFileFromBucket/feature.js";
|
|
5
|
+
import { WriteFileMetadataFeature } from "./features/WriteFileMetadata/feature.js";
|
|
6
|
+
import { ApplyThreatScanningFeature } from "./enterprise/ApplyThreatScanning/feature.js";
|
|
7
|
+
import { FlushCacheFeature } from "./features/FlushCache/feature.js";
|
|
8
|
+
import { ExtractMetadataFeature } from "./features/ExtractMetadata/feature.js";
|
|
9
|
+
export { createFileUploadModifier } from "./utils/FileUploadModifier.js";
|
|
10
|
+
export { createAssetDelivery } from "./assetDelivery/createAssetDelivery.js";
|
|
11
|
+
const contextPlugin = new ContextPlugin(context => {
|
|
12
|
+
const container = context.container;
|
|
13
|
+
FlushCacheFeature.register(container);
|
|
14
|
+
DeleteFileFromBucketFeature.register(container);
|
|
15
|
+
ExtractMetadataFeature.register(container);
|
|
16
|
+
WriteFileMetadataFeature.register(container);
|
|
17
|
+
const wcp = container.resolve(WcpContext);
|
|
18
|
+
if (wcp.canUseFileManagerThreatDetection()) {
|
|
19
|
+
ApplyThreatScanningFeature.register(container);
|
|
23
20
|
}
|
|
24
21
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
var _fileStorageS = _interopRequireDefault(require("./plugins/fileStorageS3"));
|
|
28
|
-
var _addFileMetadata = require("./plugins/addFileMetadata");
|
|
29
|
-
var _flushCdnCache = require("./flushCdnCache");
|
|
30
|
-
var _FileUploadModifier = require("./utils/FileUploadModifier");
|
|
31
|
-
var _createAssetDelivery = require("./assetDelivery/createAssetDelivery");
|
|
32
|
-
var _createCustomAssetDelivery = require("./assetDelivery/createCustomAssetDelivery");
|
|
33
|
-
var _default = () => [(0, _fileStorageS.default)(), _graphqlFileStorageS.default, (0, _addFileMetadata.addFileMetadata)(), (0, _flushCdnCache.flushCdnCache)()];
|
|
34
|
-
exports.default = _default;
|
|
22
|
+
contextPlugin.name = `fileManagerS3.context`;
|
|
23
|
+
export const createFileManagerS3 = () => [contextPlugin, createS3GraphQLSchema()];
|
|
35
24
|
|
|
36
25
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["ContextPlugin","WcpContext","createS3GraphQLSchema","DeleteFileFromBucketFeature","WriteFileMetadataFeature","ApplyThreatScanningFeature","FlushCacheFeature","ExtractMetadataFeature","createFileUploadModifier","createAssetDelivery","contextPlugin","context","container","register","wcp","resolve","canUseFileManagerThreatDetection","name","createFileManagerS3"],"sources":["index.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { WcpContext } from \"@webiny/api-core/features/wcp/WcpContext/index.js\";\nimport { createS3GraphQLSchema } from \"./graphql/schema.js\";\nimport { DeleteFileFromBucketFeature } from \"~/features/DeleteFileFromBucket/feature.js\";\nimport { WriteFileMetadataFeature } from \"~/features/WriteFileMetadata/feature.js\";\nimport { ApplyThreatScanningFeature } from \"~/enterprise/ApplyThreatScanning/feature.js\";\nimport { FlushCacheFeature } from \"~/features/FlushCache/feature.js\";\nimport { ExtractMetadataFeature } from \"~/features/ExtractMetadata/feature.js\";\nexport { createFileUploadModifier } from \"./utils/FileUploadModifier.js\";\nexport { createAssetDelivery } from \"./assetDelivery/createAssetDelivery.js\";\n\nconst contextPlugin = new ContextPlugin(context => {\n const container = context.container;\n\n FlushCacheFeature.register(container);\n DeleteFileFromBucketFeature.register(container);\n ExtractMetadataFeature.register(container);\n WriteFileMetadataFeature.register(container);\n\n const wcp = container.resolve(WcpContext);\n if (wcp.canUseFileManagerThreatDetection()) {\n ApplyThreatScanningFeature.register(container);\n }\n});\n\ncontextPlugin.name = `fileManagerS3.context`;\n\nexport const createFileManagerS3 = () => [contextPlugin, createS3GraphQLSchema()];\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,aAAa;AAC3C,SAASC,UAAU,QAAQ,mDAAmD;AAC9E,SAASC,qBAAqB;AAC9B,SAASC,2BAA2B;AACpC,SAASC,wBAAwB;AACjC,SAASC,0BAA0B;AACnC,SAASC,iBAAiB;AAC1B,SAASC,sBAAsB;AAC/B,SAASC,wBAAwB;AACjC,SAASC,mBAAmB;AAE5B,MAAMC,aAAa,GAAG,IAAIV,aAAa,CAACW,OAAO,IAAI;EAC/C,MAAMC,SAAS,GAAGD,OAAO,CAACC,SAAS;EAEnCN,iBAAiB,CAACO,QAAQ,CAACD,SAAS,CAAC;EACrCT,2BAA2B,CAACU,QAAQ,CAACD,SAAS,CAAC;EAC/CL,sBAAsB,CAACM,QAAQ,CAACD,SAAS,CAAC;EAC1CR,wBAAwB,CAACS,QAAQ,CAACD,SAAS,CAAC;EAE5C,MAAME,GAAG,GAAGF,SAAS,CAACG,OAAO,CAACd,UAAU,CAAC;EACzC,IAAIa,GAAG,CAACE,gCAAgC,CAAC,CAAC,EAAE;IACxCX,0BAA0B,CAACQ,QAAQ,CAACD,SAAS,CAAC;EAClD;AACJ,CAAC,CAAC;AAEFF,aAAa,CAACO,IAAI,GAAG,uBAAuB;AAE5C,OAAO,MAAMC,mBAAmB,GAAGA,CAAA,KAAM,CAACR,aAAa,EAAER,qBAAqB,CAAC,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.CompleteMultiPartUploadUseCase = void 0;
|
|
7
|
-
var _clientS = require("@webiny/aws-sdk/client-s3");
|
|
8
|
-
class CompleteMultiPartUploadUseCase {
|
|
1
|
+
import { ListPartsCommand, CompleteMultipartUploadCommand } from "@webiny/aws-sdk/client-s3/index.js";
|
|
2
|
+
export class CompleteMultiPartUploadUseCase {
|
|
9
3
|
emptyMarkerValues = [undefined, "0"];
|
|
10
4
|
constructor(bucket, s3Client) {
|
|
11
5
|
this.bucket = bucket;
|
|
@@ -25,7 +19,7 @@ class CompleteMultiPartUploadUseCase {
|
|
|
25
19
|
}
|
|
26
20
|
};
|
|
27
21
|
try {
|
|
28
|
-
const command = new
|
|
22
|
+
const command = new CompleteMultipartUploadCommand(s3Params);
|
|
29
23
|
await this.s3.send(command);
|
|
30
24
|
} catch (err) {
|
|
31
25
|
console.error(err);
|
|
@@ -39,7 +33,7 @@ class CompleteMultiPartUploadUseCase {
|
|
|
39
33
|
const {
|
|
40
34
|
Parts,
|
|
41
35
|
PartNumberMarker
|
|
42
|
-
} = await this.s3.send(new
|
|
36
|
+
} = await this.s3.send(new ListPartsCommand({
|
|
43
37
|
...params,
|
|
44
38
|
PartNumberMarker: marker
|
|
45
39
|
}));
|
|
@@ -60,6 +54,5 @@ class CompleteMultiPartUploadUseCase {
|
|
|
60
54
|
return this.emptyMarkerValues.includes(marker);
|
|
61
55
|
}
|
|
62
56
|
}
|
|
63
|
-
exports.CompleteMultiPartUploadUseCase = CompleteMultiPartUploadUseCase;
|
|
64
57
|
|
|
65
58
|
//# sourceMappingURL=CompleteMultiPartUploadUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["ListPartsCommand","CompleteMultipartUploadCommand","CompleteMultiPartUploadUseCase","emptyMarkerValues","undefined","constructor","bucket","s3Client","s3","execute","params","uploadParams","Bucket","Key","fileKey","UploadId","uploadId","allParts","getAllUploadParts","s3Params","MultipartUpload","Parts","command","send","err","console","error","parts","marker","PartNumberMarker","forEach","part","push","isMarkerEmpty","map","ETag","PartNumber","includes"],"sources":["CompleteMultiPartUploadUseCase.ts"],"sourcesContent":["import type { S3, Part, ListPartsOutput } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport {\n ListPartsCommand,\n CompleteMultipartUploadCommand\n} from \"@webiny/aws-sdk/client-s3/index.js\";\n\ninterface CompleteMultiPartUploadParams {\n fileKey: string;\n uploadId: string;\n}\n\ninterface GetAllUploadPartsParams {\n Bucket: string;\n Key: string;\n UploadId: string;\n}\n\nexport class CompleteMultiPartUploadUseCase {\n private readonly s3: S3;\n private readonly bucket: string;\n private readonly emptyMarkerValues = [undefined, \"0\"];\n\n constructor(bucket: string, s3Client: S3) {\n this.bucket = bucket;\n this.s3 = s3Client;\n }\n\n async execute(params: CompleteMultiPartUploadParams) {\n const uploadParams = {\n Bucket: this.bucket,\n Key: params.fileKey,\n UploadId: params.uploadId\n };\n\n const allParts = await this.getAllUploadParts(uploadParams);\n\n const s3Params = {\n ...uploadParams,\n MultipartUpload: {\n Parts: allParts\n }\n };\n\n try {\n const command = new CompleteMultipartUploadCommand(s3Params);\n await this.s3.send(command);\n } catch (err) {\n console.error(err);\n throw err;\n }\n }\n\n private async getAllUploadParts(params: GetAllUploadPartsParams) {\n const parts: Part[] = [];\n\n let marker: string | undefined = undefined;\n while (true) {\n const { Parts, PartNumberMarker }: ListPartsOutput = await this.s3.send(\n new ListPartsCommand({\n ...params,\n PartNumberMarker: marker\n })\n );\n\n if (Parts) {\n Parts.forEach(part => parts.push(part));\n }\n\n marker = PartNumberMarker || undefined;\n if (this.isMarkerEmpty(marker)) {\n break;\n }\n }\n\n return parts.map(part => ({\n ETag: part.ETag as string,\n PartNumber: part.PartNumber as number\n }));\n }\n\n private isMarkerEmpty(marker: string | undefined) {\n return this.emptyMarkerValues.includes(marker);\n }\n}\n"],"mappings":"AACA,SACIA,gBAAgB,EAChBC,8BAA8B,QAC3B,oCAAoC;AAa3C,OAAO,MAAMC,8BAA8B,CAAC;EAGvBC,iBAAiB,GAAG,CAACC,SAAS,EAAE,GAAG,CAAC;EAErDC,WAAWA,CAACC,MAAc,EAAEC,QAAY,EAAE;IACtC,IAAI,CAACD,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACE,EAAE,GAAGD,QAAQ;EACtB;EAEA,MAAME,OAAOA,CAACC,MAAqC,EAAE;IACjD,MAAMC,YAAY,GAAG;MACjBC,MAAM,EAAE,IAAI,CAACN,MAAM;MACnBO,GAAG,EAAEH,MAAM,CAACI,OAAO;MACnBC,QAAQ,EAAEL,MAAM,CAACM;IACrB,CAAC;IAED,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACC,iBAAiB,CAACP,YAAY,CAAC;IAE3D,MAAMQ,QAAQ,GAAG;MACb,GAAGR,YAAY;MACfS,eAAe,EAAE;QACbC,KAAK,EAAEJ;MACX;IACJ,CAAC;IAED,IAAI;MACA,MAAMK,OAAO,GAAG,IAAIrB,8BAA8B,CAACkB,QAAQ,CAAC;MAC5D,MAAM,IAAI,CAACX,EAAE,CAACe,IAAI,CAACD,OAAO,CAAC;IAC/B,CAAC,CAAC,OAAOE,GAAG,EAAE;MACVC,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC;MAClB,MAAMA,GAAG;IACb;EACJ;EAEA,MAAcN,iBAAiBA,CAACR,MAA+B,EAAE;IAC7D,MAAMiB,KAAa,GAAG,EAAE;IAExB,IAAIC,MAA0B,GAAGxB,SAAS;IAC1C,OAAO,IAAI,EAAE;MACT,MAAM;QAAEiB,KAAK;QAAEQ;MAAkC,CAAC,GAAG,MAAM,IAAI,CAACrB,EAAE,CAACe,IAAI,CACnE,IAAIvB,gBAAgB,CAAC;QACjB,GAAGU,MAAM;QACTmB,gBAAgB,EAAED;MACtB,CAAC,CACL,CAAC;MAED,IAAIP,KAAK,EAAE;QACPA,KAAK,CAACS,OAAO,CAACC,IAAI,IAAIJ,KAAK,CAACK,IAAI,CAACD,IAAI,CAAC,CAAC;MAC3C;MAEAH,MAAM,GAAGC,gBAAgB,IAAIzB,SAAS;MACtC,IAAI,IAAI,CAAC6B,aAAa,CAACL,MAAM,CAAC,EAAE;QAC5B;MACJ;IACJ;IAEA,OAAOD,KAAK,CAACO,GAAG,CAACH,IAAI,KAAK;MACtBI,IAAI,EAAEJ,IAAI,CAACI,IAAc;MACzBC,UAAU,EAAEL,IAAI,CAACK;IACrB,CAAC,CAAC,CAAC;EACP;EAEQH,aAAaA,CAACL,MAA0B,EAAE;IAC9C,OAAO,IAAI,CAACzB,iBAAiB,CAACkC,QAAQ,CAACT,MAAM,CAAC;EAClD;AACJ","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S3 } from "@webiny/aws-sdk/client-s3";
|
|
2
|
-
import { FileData } from "../types";
|
|
1
|
+
import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
|
|
2
|
+
import type { FileData } from "../types.js";
|
|
3
3
|
interface CreateMultiPartUploadParams {
|
|
4
4
|
file: FileData;
|
|
5
5
|
numberOfParts: number;
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.CreateMultiPartUploadUseCase = void 0;
|
|
7
|
-
var _clientS = require("@webiny/aws-sdk/client-s3");
|
|
8
|
-
class CreateMultiPartUploadUseCase {
|
|
1
|
+
import { getSignedUrl, UploadPartCommand } from "@webiny/aws-sdk/client-s3/index.js";
|
|
2
|
+
export class CreateMultiPartUploadUseCase {
|
|
9
3
|
constructor(bucket, s3Client) {
|
|
10
4
|
this.bucket = bucket;
|
|
11
5
|
this.s3 = s3Client;
|
|
@@ -24,7 +18,7 @@ class CreateMultiPartUploadUseCase {
|
|
|
24
18
|
const parts = await Promise.all(Array.from({
|
|
25
19
|
length: numberOfParts
|
|
26
20
|
}).map((_, index) => {
|
|
27
|
-
return
|
|
21
|
+
return getSignedUrl(this.s3, new UploadPartCommand({
|
|
28
22
|
...s3Params,
|
|
29
23
|
UploadId,
|
|
30
24
|
PartNumber: index + 1
|
|
@@ -43,6 +37,5 @@ class CreateMultiPartUploadUseCase {
|
|
|
43
37
|
};
|
|
44
38
|
}
|
|
45
39
|
}
|
|
46
|
-
exports.CreateMultiPartUploadUseCase = CreateMultiPartUploadUseCase;
|
|
47
40
|
|
|
48
41
|
//# sourceMappingURL=CreateMultiPartUploadUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["getSignedUrl","UploadPartCommand","CreateMultiPartUploadUseCase","constructor","bucket","s3Client","s3","execute","file","numberOfParts","s3Params","Bucket","Key","key","UploadId","createMultipartUpload","parts","Promise","all","Array","from","length","map","_","index","PartNumber","expiresIn","then","url","partNumber","uploadId"],"sources":["CreateMultiPartUploadUseCase.ts"],"sourcesContent":["import type { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { getSignedUrl, UploadPartCommand } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type { FileData } from \"~/types.js\";\n\ninterface CreateMultiPartUploadParams {\n file: FileData;\n numberOfParts: number;\n}\n\nexport class CreateMultiPartUploadUseCase {\n private readonly s3: S3;\n private readonly bucket: string;\n\n constructor(bucket: string, s3Client: S3) {\n this.bucket = bucket;\n this.s3 = s3Client;\n }\n\n async execute({ file, numberOfParts }: CreateMultiPartUploadParams) {\n const s3Params = { Bucket: this.bucket, Key: file.key };\n\n const { UploadId } = await this.s3.createMultipartUpload(s3Params);\n\n const parts = await Promise.all(\n Array.from({ length: numberOfParts }).map((_, index) => {\n return getSignedUrl(\n this.s3,\n new UploadPartCommand({ ...s3Params, UploadId, PartNumber: index + 1 }),\n {\n // URL expires after 24 hours.\n expiresIn: 86400\n }\n ).then(url => ({\n url,\n partNumber: index + 1\n }));\n })\n );\n\n return {\n file,\n uploadId: UploadId,\n parts\n };\n }\n}\n"],"mappings":"AACA,SAASA,YAAY,EAAEC,iBAAiB,QAAQ,oCAAoC;AAQpF,OAAO,MAAMC,4BAA4B,CAAC;EAItCC,WAAWA,CAACC,MAAc,EAAEC,QAAY,EAAE;IACtC,IAAI,CAACD,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACE,EAAE,GAAGD,QAAQ;EACtB;EAEA,MAAME,OAAOA,CAAC;IAAEC,IAAI;IAAEC;EAA2C,CAAC,EAAE;IAChE,MAAMC,QAAQ,GAAG;MAAEC,MAAM,EAAE,IAAI,CAACP,MAAM;MAAEQ,GAAG,EAAEJ,IAAI,CAACK;IAAI,CAAC;IAEvD,MAAM;MAAEC;IAAS,CAAC,GAAG,MAAM,IAAI,CAACR,EAAE,CAACS,qBAAqB,CAACL,QAAQ,CAAC;IAElE,MAAMM,KAAK,GAAG,MAAMC,OAAO,CAACC,GAAG,CAC3BC,KAAK,CAACC,IAAI,CAAC;MAAEC,MAAM,EAAEZ;IAAc,CAAC,CAAC,CAACa,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,KAAK;MACpD,OAAOxB,YAAY,CACf,IAAI,CAACM,EAAE,EACP,IAAIL,iBAAiB,CAAC;QAAE,GAAGS,QAAQ;QAAEI,QAAQ;QAAEW,UAAU,EAAED,KAAK,GAAG;MAAE,CAAC,CAAC,EACvE;QACI;QACAE,SAAS,EAAE;MACf,CACJ,CAAC,CAACC,IAAI,CAACC,GAAG,KAAK;QACXA,GAAG;QACHC,UAAU,EAAEL,KAAK,GAAG;MACxB,CAAC,CAAC,CAAC;IACP,CAAC,CACL,CAAC;IAED,OAAO;MACHhB,IAAI;MACJsB,QAAQ,EAAEhB,QAAQ;MAClBE;IACJ,CAAC;EACL;AACJ","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-file-manager-s3",
|
|
3
|
-
"version": "6.0.0-
|
|
3
|
+
"version": "6.0.0-rc.0",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"main": "index.js",
|
|
5
6
|
"repository": {
|
|
6
7
|
"type": "git",
|
|
@@ -10,42 +11,35 @@
|
|
|
10
11
|
"author": "Webiny Ltd",
|
|
11
12
|
"license": "MIT",
|
|
12
13
|
"dependencies": {
|
|
13
|
-
"@webiny/api": "6.0.0-
|
|
14
|
-
"@webiny/api-
|
|
15
|
-
"@webiny/api-
|
|
16
|
-
"@webiny/
|
|
17
|
-
"@webiny/
|
|
18
|
-
"@webiny/
|
|
19
|
-
"@webiny/handler
|
|
20
|
-
"@webiny/
|
|
21
|
-
"@webiny/
|
|
22
|
-
"@webiny/
|
|
23
|
-
"@webiny/
|
|
24
|
-
"
|
|
14
|
+
"@webiny/api": "6.0.0-rc.0",
|
|
15
|
+
"@webiny/api-core": "6.0.0-rc.0",
|
|
16
|
+
"@webiny/api-file-manager": "6.0.0-rc.0",
|
|
17
|
+
"@webiny/api-websockets": "6.0.0-rc.0",
|
|
18
|
+
"@webiny/aws-sdk": "6.0.0-rc.0",
|
|
19
|
+
"@webiny/feature": "6.0.0-rc.0",
|
|
20
|
+
"@webiny/handler": "6.0.0-rc.0",
|
|
21
|
+
"@webiny/handler-aws": "6.0.0-rc.0",
|
|
22
|
+
"@webiny/handler-graphql": "6.0.0-rc.0",
|
|
23
|
+
"@webiny/plugins": "6.0.0-rc.0",
|
|
24
|
+
"@webiny/utils": "6.0.0-rc.0",
|
|
25
|
+
"@webiny/validation": "6.0.0-rc.0",
|
|
26
|
+
"exifreader": "4.36.2",
|
|
25
27
|
"mime": "3.0.0",
|
|
26
|
-
"node-fetch": "2.7.0",
|
|
27
28
|
"object-hash": "3.0.0",
|
|
28
|
-
"p-map": "
|
|
29
|
-
"p-reduce": "
|
|
29
|
+
"p-map": "7.0.4",
|
|
30
|
+
"p-reduce": "3.0.0",
|
|
30
31
|
"sanitize-filename": "1.6.3",
|
|
31
|
-
"sharp": "0.
|
|
32
|
+
"sharp": "0.34.5"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|
|
34
|
-
"@
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"@webiny/project-utils": "6.0.0-beta.0",
|
|
39
|
-
"rimraf": "5.0.5",
|
|
40
|
-
"typescript": "4.7.4"
|
|
35
|
+
"@webiny/build-tools": "6.0.0-rc.0",
|
|
36
|
+
"rimraf": "6.1.3",
|
|
37
|
+
"typescript": "5.9.3",
|
|
38
|
+
"vitest": "4.0.18"
|
|
41
39
|
},
|
|
42
40
|
"publishConfig": {
|
|
43
41
|
"access": "public",
|
|
44
42
|
"directory": "dist"
|
|
45
43
|
},
|
|
46
|
-
"
|
|
47
|
-
"build": "yarn webiny run build",
|
|
48
|
-
"watch": "yarn webiny run watch"
|
|
49
|
-
},
|
|
50
|
-
"gitHead": "aa8dbfbbd5ad13ec271adba6f2431e02991a300f"
|
|
44
|
+
"gitHead": "0f2aa699f4642e550ab62c96fcd050e8d02345c9"
|
|
51
45
|
}
|
package/types.d.ts
CHANGED
package/types.js
CHANGED
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { PresignedPost } from \"@webiny/aws-sdk/client-s3\";\n\nexport interface PresignedPostPayloadData {\n name: string;\n type: string;\n size: number;\n id?: string;\n key?: string;\n keyPrefix?: string;\n}\n\nexport interface FileData {\n id: string;\n key: string;\n name: string;\n size: number;\n type: string;\n}\n\nexport interface PresignedPostPayloadDataResponse {\n data: PresignedPost;\n file: FileData;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { PresignedPost } from \"@webiny/aws-sdk/client-s3/index.js\";\n\nexport interface PresignedPostPayloadData {\n name: string;\n type: string;\n size: number;\n id?: string;\n key?: string;\n keyPrefix?: string;\n}\n\nexport interface FileData {\n id: string;\n key: string;\n name: string;\n size: number;\n type: string;\n}\n\nexport interface PresignedPostPayloadDataResponse {\n data: PresignedPost;\n file: FileData;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CdnPathsGenerator","generate","fileId"],"sources":["CdnPathsGenerator.ts"],"sourcesContent":["export class CdnPathsGenerator {\n generate(fileId: string): string[] {\n return [`/files/${fileId}/*`, `/private/${fileId}/*`];\n }\n}\n"],"mappings":"AAAA,OAAO,MAAMA,iBAAiB,CAAC;EAC3BC,QAAQA,CAACC,MAAc,EAAY;IAC/B,OAAO,CAAC,UAAUA,MAAM,IAAI,EAAE,YAAYA,MAAM,IAAI,CAAC;EACzD;AACJ","ignoreList":[]}
|
package/utils/FileExtension.d.ts
CHANGED
package/utils/FileExtension.js
CHANGED
|
@@ -1,24 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.FileExtension = void 0;
|
|
7
|
-
var _mimeTypes = require("./mimeTypes");
|
|
8
|
-
class FileExtension {
|
|
1
|
+
import { mimeTypes } from "./mimeTypes.js";
|
|
2
|
+
export class FileExtension {
|
|
9
3
|
constructor(data) {
|
|
10
4
|
this.data = data;
|
|
11
5
|
}
|
|
12
6
|
getValue() {
|
|
13
7
|
const name = (this.data.key || this.data.name).toLowerCase();
|
|
14
8
|
const maybeExt = name.split(".").pop();
|
|
15
|
-
const extensions =
|
|
9
|
+
const extensions = mimeTypes[this.data.type];
|
|
16
10
|
if (extensions && !extensions.includes(maybeExt)) {
|
|
17
11
|
return extensions[0];
|
|
18
12
|
}
|
|
19
13
|
return "";
|
|
20
14
|
}
|
|
21
15
|
}
|
|
22
|
-
exports.FileExtension = FileExtension;
|
|
23
16
|
|
|
24
17
|
//# sourceMappingURL=FileExtension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["mimeTypes","FileExtension","constructor","data","getValue","name","key","toLowerCase","maybeExt","split","pop","extensions","type","includes"],"sources":["FileExtension.ts"],"sourcesContent":["import { mimeTypes } from \"~/utils/mimeTypes.js\";\nimport type { PresignedPostPayloadData } from \"~/types.js\";\n\nexport class FileExtension {\n private data: PresignedPostPayloadData;\n\n constructor(data: PresignedPostPayloadData) {\n this.data = data;\n }\n\n getValue() {\n const name = (this.data.key || this.data.name).toLowerCase();\n\n const maybeExt = name.split(\".\").pop() as string;\n const extensions = mimeTypes[this.data.type];\n if (extensions && !extensions.includes(maybeExt)) {\n return extensions[0];\n }\n\n return \"\";\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAGlB,OAAO,MAAMC,aAAa,CAAC;EAGvBC,WAAWA,CAACC,IAA8B,EAAE;IACxC,IAAI,CAACA,IAAI,GAAGA,IAAI;EACpB;EAEAC,QAAQA,CAAA,EAAG;IACP,MAAMC,IAAI,GAAG,CAAC,IAAI,CAACF,IAAI,CAACG,GAAG,IAAI,IAAI,CAACH,IAAI,CAACE,IAAI,EAAEE,WAAW,CAAC,CAAC;IAE5D,MAAMC,QAAQ,GAAGH,IAAI,CAACI,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAAC,CAAW;IAChD,MAAMC,UAAU,GAAGX,SAAS,CAAC,IAAI,CAACG,IAAI,CAACS,IAAI,CAAC;IAC5C,IAAID,UAAU,IAAI,CAACA,UAAU,CAACE,QAAQ,CAACL,QAAQ,CAAC,EAAE;MAC9C,OAAOG,UAAU,CAAC,CAAC,CAAC;IACxB;IAEA,OAAO,EAAE;EACb;AACJ","ignoreList":[]}
|
package/utils/FileKey.d.ts
CHANGED