@webiny/api-file-manager-s3 6.4.12-beta.5 → 6.5.0-beta.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.
Files changed (138) hide show
  1. package/assetDelivery/abstractions.d.ts +2 -0
  2. package/assetDelivery/abstractions.js.map +1 -1
  3. package/assetDelivery/assetDeliveryConfig.d.ts +1 -1
  4. package/assetDelivery/createAssetDelivery.js +1 -1
  5. package/assetDelivery/createAssetDelivery.js.map +1 -1
  6. package/assetDelivery/feature.js +2 -1
  7. package/assetDelivery/feature.js.map +1 -1
  8. package/assetDelivery/index.d.ts +1 -2
  9. package/assetDelivery/index.js +1 -2
  10. package/assetDelivery/s3/S3AssetResolver.d.ts +10 -9
  11. package/assetDelivery/s3/S3AssetResolver.js +10 -8
  12. package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
  13. package/assetDelivery/s3/S3ContentsReader.d.ts +6 -5
  14. package/assetDelivery/s3/S3ContentsReader.js +3 -0
  15. package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
  16. package/assetDelivery/s3/S3ErrorAssetReply.d.ts +3 -2
  17. package/assetDelivery/s3/S3ErrorAssetReply.js +4 -1
  18. package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
  19. package/assetDelivery/s3/S3OutputStrategy.d.ts +8 -6
  20. package/assetDelivery/s3/S3OutputStrategy.js +6 -5
  21. package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
  22. package/assetDelivery/s3/S3RedirectAssetReply.d.ts +1 -1
  23. package/assetDelivery/s3/S3RedirectAssetReply.js +1 -1
  24. package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
  25. package/assetDelivery/s3/SharpTransform.d.ts +13 -5
  26. package/assetDelivery/s3/SharpTransform.js +98 -74
  27. package/assetDelivery/s3/SharpTransform.js.map +1 -1
  28. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.d.ts +1 -1
  29. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +4 -3
  30. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -1
  31. package/assetDelivery/threatDetection/processThreatScanResult.js +10 -8
  32. package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -1
  33. package/assetDelivery/types.d.ts +3 -0
  34. package/features/CompleteMultiPartUpload/CompleteMultiPartUploadUseCase.d.ts +8 -0
  35. package/features/CompleteMultiPartUpload/CompleteMultiPartUploadUseCase.js +51 -0
  36. package/features/CompleteMultiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -0
  37. package/features/CompleteMultiPartUpload/feature.d.ts +4 -0
  38. package/features/CompleteMultiPartUpload/feature.js +11 -0
  39. package/features/CompleteMultiPartUpload/feature.js.map +1 -0
  40. package/features/CreateMultiPartUpload/CreateMultiPartUploadUseCase.d.ts +9 -0
  41. package/features/CreateMultiPartUpload/CreateMultiPartUploadUseCase.js +40 -0
  42. package/features/CreateMultiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -0
  43. package/features/CreateMultiPartUpload/feature.d.ts +4 -0
  44. package/features/CreateMultiPartUpload/feature.js +11 -0
  45. package/features/CreateMultiPartUpload/feature.js.map +1 -0
  46. package/features/DeleteFileFromBucket/DeleteS3FolderTask.d.ts +1 -1
  47. package/features/ExtractMetadata/ExtractMetadataHandler.d.ts +1 -11
  48. package/features/ExtractMetadata/ExtractMetadataHandler.js +1 -25
  49. package/features/ExtractMetadata/ExtractMetadataTask.d.ts +15 -17
  50. package/features/ExtractMetadata/ExtractMetadataTask.js +8 -10
  51. package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -1
  52. package/features/FlushCache/InvalidateCacheTask.d.ts +2 -2
  53. package/features/FlushCache/InvalidateCacheTask.js +1 -1
  54. package/features/FlushCache/InvalidateCacheTask.js.map +1 -1
  55. package/features/GetFileContentsById/GetFileContentsByIdUseCase.d.ts +3 -3
  56. package/features/GetFileContentsById/GetFileContentsByIdUseCase.js +4 -5
  57. package/features/GetFileContentsById/GetFileContentsByIdUseCase.js.map +1 -1
  58. package/features/GetUploadPayload/GetUploadPayloadUseCase.d.ts +14 -0
  59. package/features/GetUploadPayload/GetUploadPayloadUseCase.js +54 -0
  60. package/features/GetUploadPayload/GetUploadPayloadUseCase.js.map +1 -0
  61. package/features/{WriteFileMetadata → GetUploadPayload}/feature.d.ts +1 -1
  62. package/features/GetUploadPayload/feature.js +11 -0
  63. package/features/GetUploadPayload/feature.js.map +1 -0
  64. package/index.d.ts +2 -2
  65. package/index.js +8 -6
  66. package/index.js.map +1 -1
  67. package/package.json +18 -24
  68. package/types.d.ts +2 -20
  69. package/utils/uploadFileToS3.d.ts +1 -1
  70. package/assetDelivery/s3/S3StreamAssetReply.d.ts +0 -5
  71. package/assetDelivery/s3/S3StreamAssetReply.js +0 -17
  72. package/assetDelivery/s3/S3StreamAssetReply.js.map +0 -1
  73. package/assetDelivery/s3/transformation/AssetKeyGenerator.d.ts +0 -8
  74. package/assetDelivery/s3/transformation/AssetKeyGenerator.js +0 -21
  75. package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +0 -1
  76. package/assetDelivery/s3/transformation/CallableContentsReader.d.ts +0 -10
  77. package/assetDelivery/s3/transformation/CallableContentsReader.js +0 -11
  78. package/assetDelivery/s3/transformation/CallableContentsReader.js.map +0 -1
  79. package/assetDelivery/s3/transformation/WidthCollection.d.ts +0 -7
  80. package/assetDelivery/s3/transformation/WidthCollection.js +0 -19
  81. package/assetDelivery/s3/transformation/WidthCollection.js.map +0 -1
  82. package/assetDelivery/s3/transformation/utils.d.ts +0 -9
  83. package/assetDelivery/s3/transformation/utils.js +0 -31
  84. package/assetDelivery/s3/transformation/utils.js.map +0 -1
  85. package/assetDelivery/threatDetection/ObjectKey.d.ts +0 -7
  86. package/assetDelivery/threatDetection/ObjectKey.js +0 -18
  87. package/assetDelivery/threatDetection/ObjectKey.js.map +0 -1
  88. package/features/ExtractMetadata/ExtractMetadataHandler.js.map +0 -1
  89. package/features/WriteFileMetadata/MetadataReader.d.ts +0 -14
  90. package/features/WriteFileMetadata/MetadataReader.js +0 -13
  91. package/features/WriteFileMetadata/MetadataReader.js.map +0 -1
  92. package/features/WriteFileMetadata/MetadataWriter.d.ts +0 -10
  93. package/features/WriteFileMetadata/MetadataWriter.js +0 -26
  94. package/features/WriteFileMetadata/MetadataWriter.js.map +0 -1
  95. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +0 -12
  96. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +0 -23
  97. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +0 -1
  98. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +0 -12
  99. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +0 -25
  100. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +0 -1
  101. package/features/WriteFileMetadata/feature.js +0 -13
  102. package/features/WriteFileMetadata/feature.js.map +0 -1
  103. package/graphql/checkPermissions.d.ts +0 -5
  104. package/graphql/checkPermissions.js +0 -22
  105. package/graphql/checkPermissions.js.map +0 -1
  106. package/graphql/schema.d.ts +0 -1
  107. package/graphql/schema.js +0 -203
  108. package/graphql/schema.js.map +0 -1
  109. package/multiPartUpload/CompleteMultiPartUploadUseCase.d.ts +0 -15
  110. package/multiPartUpload/CompleteMultiPartUploadUseCase.js +0 -55
  111. package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +0 -1
  112. package/multiPartUpload/CreateMultiPartUploadUseCase.d.ts +0 -20
  113. package/multiPartUpload/CreateMultiPartUploadUseCase.js +0 -34
  114. package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +0 -1
  115. package/utils/FileExtension.d.ts +0 -6
  116. package/utils/FileExtension.js +0 -16
  117. package/utils/FileExtension.js.map +0 -1
  118. package/utils/FileKey.d.ts +0 -11
  119. package/utils/FileKey.js +0 -33
  120. package/utils/FileKey.js.map +0 -1
  121. package/utils/FileKey.test.d.ts +0 -1
  122. package/utils/FileKey.test.js +0 -59
  123. package/utils/FileKey.test.js.map +0 -1
  124. package/utils/FileNormalizer.d.ts +0 -18
  125. package/utils/FileNormalizer.js +0 -41
  126. package/utils/FileNormalizer.js.map +0 -1
  127. package/utils/FileUploadModifier.d.ts +0 -30
  128. package/utils/FileUploadModifier.js +0 -39
  129. package/utils/FileUploadModifier.js.map +0 -1
  130. package/utils/createFileNormalizerFromContext.d.ts +0 -3
  131. package/utils/createFileNormalizerFromContext.js +0 -9
  132. package/utils/createFileNormalizerFromContext.js.map +0 -1
  133. package/utils/getPresignedPostPayload.d.ts +0 -4
  134. package/utils/getPresignedPostPayload.js +0 -43
  135. package/utils/getPresignedPostPayload.js.map +0 -1
  136. package/utils/mimeTypes.d.ts +0 -5
  137. package/utils/mimeTypes.js +0 -9
  138. package/utils/mimeTypes.js.map +0 -1
package/graphql/schema.js DELETED
@@ -1,203 +0,0 @@
1
- import p_map from "p-map";
2
- import { createGraphQLSchemaPlugin } from "@webiny/handler-graphql";
3
- import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
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
- const createS3GraphQLSchema = ()=>createGraphQLSchemaPlugin({
14
- typeDefs: `
15
- type UploadFileResponseDataFile {
16
- id: ID!
17
- name: String!
18
- type: String!
19
- size: Long!
20
- key: String!
21
- }
22
-
23
- input PreSignedPostPayloadInput {
24
- id: ID
25
- name: String!
26
- type: String!
27
- size: Long!
28
- key: String
29
- keyPrefix: String
30
- }
31
-
32
- type GetPreSignedPostPayloadResponseDataFile {
33
- id: ID!
34
- name: String!
35
- type: String!
36
- size: Long!
37
- key: String!
38
- }
39
-
40
- type GetPreSignedPostPayloadResponseData {
41
- # Contains data that is necessary for initiating a file upload.
42
- data: JSON!
43
- file: UploadFileResponseDataFile!
44
- }
45
-
46
- type GetPreSignedPostPayloadResponse {
47
- error: FmError
48
- data: GetPreSignedPostPayloadResponseData
49
- }
50
-
51
- type MultiPartUploadFilePart {
52
- partNumber: Int!
53
- url: String!
54
- }
55
-
56
- type CreateMultiPartUploadResponseData {
57
- file: GetPreSignedPostPayloadResponseDataFile!
58
- uploadId: String!
59
- parts: [MultiPartUploadFilePart!]!
60
- }
61
-
62
- type CompleteMultiPartUploadResponse {
63
- data: Boolean
64
- error: FmError
65
- }
66
-
67
- type GetPreSignedPostPayloadsResponse {
68
- error: FmError
69
- data: [GetPreSignedPostPayloadResponseData!]!
70
- }
71
-
72
- extend type FmQuery {
73
- getPreSignedPostPayload(
74
- data: PreSignedPostPayloadInput!
75
- ): GetPreSignedPostPayloadResponse
76
- getPreSignedPostPayloads(
77
- data: [PreSignedPostPayloadInput]!
78
- ): GetPreSignedPostPayloadsResponse
79
- }
80
-
81
- type CreateMultiPartUploadResponse {
82
- data: CreateMultiPartUploadResponseData
83
- error: FmError
84
- }
85
-
86
- input MultiPartUploadFilePartInput {
87
- partNumber: Int!
88
- etag: String!
89
- }
90
-
91
- extend type FmMutation {
92
- createMultiPartUpload(
93
- data: PreSignedPostPayloadInput!
94
- numberOfParts: Number!
95
- ): CreateMultiPartUploadResponse
96
-
97
- completeMultiPartUpload(
98
- fileKey: String!
99
- uploadId: String!
100
- ): CompleteMultiPartUploadResponse
101
- }
102
- `,
103
- resolvers: {
104
- FmQuery: {
105
- getPreSignedPostPayload: async (_, args, context)=>{
106
- const identityContext = context.container.resolve(IdentityContext);
107
- const getSettings = context.container.resolve(GetSettingsUseCase);
108
- try {
109
- await checkPermissions(identityContext, {
110
- rwd: "w"
111
- });
112
- const data = args.data;
113
- const settingsResult = await getSettings.execute();
114
- if (settingsResult.isFail()) throw settingsResult.error;
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);
119
- } catch (e) {
120
- return new ErrorResponse({
121
- message: e.message,
122
- code: e.code,
123
- data: e.data
124
- });
125
- }
126
- },
127
- getPreSignedPostPayloads: async (_, args, context)=>{
128
- const identityContext = context.container.resolve(IdentityContext);
129
- const getSettings = context.container.resolve(GetSettingsUseCase);
130
- await checkPermissions(identityContext, {
131
- rwd: "w"
132
- });
133
- const files = args.data;
134
- try {
135
- const settingsResult = await getSettings.execute();
136
- if (settingsResult.isFail()) throw settingsResult.error;
137
- const settings = settingsResult.value;
138
- const normalizer = createFileNormalizerFromContext(context);
139
- const presignedPayloads = await p_map(files, async (data)=>getPresignedPostPayload(await normalizer.normalizeFile(data), settings, context.container.resolve(TenantContext)));
140
- return new Response(presignedPayloads);
141
- } catch (e) {
142
- return new ErrorResponse({
143
- message: e.message,
144
- code: e.code,
145
- data: e.data
146
- });
147
- }
148
- }
149
- },
150
- FmMutation: {
151
- createMultiPartUpload: async (_, args, context)=>{
152
- const identityContext = context.container.resolve(IdentityContext);
153
- await checkPermissions(identityContext, {
154
- rwd: "w"
155
- });
156
- const s3Client = new S3({
157
- region: process.env.AWS_REGION
158
- });
159
- try {
160
- const useCase = new CreateMultiPartUploadUseCase(String(process.env.S3_BUCKET), s3Client);
161
- const normalizer = createFileNormalizerFromContext(context);
162
- const multiPartUpload = await useCase.execute({
163
- file: await normalizer.normalizeFile(args.data),
164
- numberOfParts: args.numberOfParts
165
- });
166
- return new Response(multiPartUpload);
167
- } catch (e) {
168
- return new ErrorResponse({
169
- message: e.message,
170
- code: e.code,
171
- data: e.data
172
- });
173
- }
174
- },
175
- completeMultiPartUpload: async (_, args, context)=>{
176
- const identityContext = context.container.resolve(IdentityContext);
177
- await checkPermissions(identityContext, {
178
- rwd: "w"
179
- });
180
- const s3Client = new S3({
181
- region: process.env.AWS_REGION
182
- });
183
- try {
184
- const useCase = new CompleteMultiPartUploadUseCase(String(process.env.S3_BUCKET), s3Client);
185
- await useCase.execute({
186
- fileKey: args.fileKey,
187
- uploadId: args.uploadId
188
- });
189
- return new Response(true);
190
- } catch (e) {
191
- return new ErrorResponse({
192
- message: e.message,
193
- code: e.code,
194
- data: e.data
195
- });
196
- }
197
- }
198
- }
199
- }
200
- });
201
- export { createS3GraphQLSchema };
202
-
203
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graphql/schema.js","sources":["../../src/graphql/schema.ts"],"sourcesContent":["import pMap from \"p-map\";\nimport { createGraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\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 if (settingsResult.isFail()) {\n throw settingsResult.error;\n }\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 if (settingsResult.isFail()) {\n throw settingsResult.error;\n }\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"],"names":["createS3GraphQLSchema","createGraphQLSchemaPlugin","_","args","context","identityContext","IdentityContext","getSettings","GetSettingsUseCase","checkPermissions","data","settingsResult","settings","normalizer","createFileNormalizerFromContext","presignedPayload","getPresignedPostPayload","TenantContext","Response","e","ErrorResponse","files","presignedPayloads","pMap","s3Client","S3","process","useCase","CreateMultiPartUploadUseCase","String","multiPartUpload","CompleteMultiPartUploadUseCase"],"mappings":";;;;;;;;;;;;AAcO,MAAMA,wBAAwB,IAC1BC,0BAA0B;QAC7B,UAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwFzB,CAAC;QACD,WAAW;YACP,SAAS;gBACL,yBAAyB,OAAOC,GAAGC,MAAWC;oBAC1C,MAAMC,kBAAkBD,QAAQ,SAAS,CAAC,OAAO,CAACE;oBAClD,MAAMC,cAAcH,QAAQ,SAAS,CAAC,OAAO,CAACI;oBAE9C,IAAI;wBACA,MAAMC,iBAAiBJ,iBAAiB;4BAAE,KAAK;wBAAI;wBAEnD,MAAMK,OAAOP,KAAK,IAAI;wBAEtB,MAAMQ,iBAAiB,MAAMJ,YAAY,OAAO;wBAChD,IAAII,eAAe,MAAM,IACrB,MAAMA,eAAe,KAAK;wBAE9B,MAAMC,WAAWD,eAAe,KAAK;wBAErC,MAAME,aAAaC,gCAAgCV;wBACnD,MAAMW,mBAAmB,MAAMC,wBAC3B,MAAMH,WAAW,aAAa,CAACH,OAC/BE,UACAR,QAAQ,SAAS,CAAC,OAAO,CAACa;wBAG9B,OAAO,IAAIC,SAASH;oBACxB,EAAE,OAAOI,GAAG;wBACR,OAAO,IAAIC,cAAc;4BACrB,SAASD,EAAE,OAAO;4BAClB,MAAMA,EAAE,IAAI;4BACZ,MAAMA,EAAE,IAAI;wBAChB;oBACJ;gBACJ;gBACA,0BAA0B,OAAOjB,GAAGC,MAAMC;oBACtC,MAAMC,kBAAkBD,QAAQ,SAAS,CAAC,OAAO,CAACE;oBAClD,MAAMC,cAAcH,QAAQ,SAAS,CAAC,OAAO,CAACI;oBAC9C,MAAMC,iBAAiBJ,iBAAiB;wBAAE,KAAK;oBAAI;oBAEnD,MAAMgB,QAAQlB,KAAK,IAAI;oBAEvB,IAAI;wBACA,MAAMQ,iBAAiB,MAAMJ,YAAY,OAAO;wBAChD,IAAII,eAAe,MAAM,IACrB,MAAMA,eAAe,KAAK;wBAE9B,MAAMC,WAAWD,eAAe,KAAK;wBAErC,MAAME,aAAaC,gCAAgCV;wBAEnD,MAAMkB,oBAAoB,MAAMC,MAAKF,OAAO,OAAMX,OACvCM,wBACH,MAAMH,WAAW,aAAa,CAACH,OAC/BE,UACAR,QAAQ,SAAS,CAAC,OAAO,CAACa;wBAIlC,OAAO,IAAIC,SAASI;oBACxB,EAAE,OAAOH,GAAG;wBACR,OAAO,IAAIC,cAAc;4BACrB,SAASD,EAAE,OAAO;4BAClB,MAAMA,EAAE,IAAI;4BACZ,MAAMA,EAAE,IAAI;wBAChB;oBACJ;gBACJ;YACJ;YACA,YAAY;gBACR,uBAAuB,OAAOjB,GAAGC,MAAMC;oBACnC,MAAMC,kBAAkBD,QAAQ,SAAS,CAAC,OAAO,CAACE;oBAClD,MAAMG,iBAAiBJ,iBAAiB;wBAAE,KAAK;oBAAI;oBAEnD,MAAMmB,WAAW,IAAIC,GAAG;wBACpB,QAAQC,QAAQ,GAAG,CAAC,UAAU;oBAClC;oBAEA,IAAI;wBACA,MAAMC,UAAU,IAAIC,6BAChBC,OAAOH,QAAQ,GAAG,CAAC,SAAS,GAC5BF;wBAGJ,MAAMX,aAAaC,gCAAgCV;wBAEnD,MAAM0B,kBAAkB,MAAMH,QAAQ,OAAO,CAAC;4BAC1C,MAAM,MAAMd,WAAW,aAAa,CAACV,KAAK,IAAI;4BAC9C,eAAeA,KAAK,aAAa;wBACrC;wBAEA,OAAO,IAAIe,SAASY;oBACxB,EAAE,OAAOX,GAAG;wBACR,OAAO,IAAIC,cAAc;4BACrB,SAASD,EAAE,OAAO;4BAClB,MAAMA,EAAE,IAAI;4BACZ,MAAMA,EAAE,IAAI;wBAChB;oBACJ;gBACJ;gBACA,yBAAyB,OAAOjB,GAAGC,MAAMC;oBACrC,MAAMC,kBAAkBD,QAAQ,SAAS,CAAC,OAAO,CAACE;oBAClD,MAAMG,iBAAiBJ,iBAAiB;wBAAE,KAAK;oBAAI;oBAEnD,MAAMmB,WAAW,IAAIC,GAAG;wBACpB,QAAQC,QAAQ,GAAG,CAAC,UAAU;oBAClC;oBAEA,IAAI;wBACA,MAAMC,UAAU,IAAII,+BAChBF,OAAOH,QAAQ,GAAG,CAAC,SAAS,GAC5BF;wBAGJ,MAAMG,QAAQ,OAAO,CAAC;4BAClB,SAASxB,KAAK,OAAO;4BACrB,UAAUA,KAAK,QAAQ;wBAC3B;wBAEA,OAAO,IAAIe,SAAS;oBACxB,EAAE,OAAOC,GAAG;wBACR,OAAO,IAAIC,cAAc;4BACrB,SAASD,EAAE,OAAO;4BAClB,MAAMA,EAAE,IAAI;4BACZ,MAAMA,EAAE,IAAI;wBAChB;oBACJ;gBACJ;YACJ;QACJ;IACJ"}
@@ -1,15 +0,0 @@
1
- import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
2
- interface CompleteMultiPartUploadParams {
3
- fileKey: string;
4
- uploadId: string;
5
- }
6
- export declare class CompleteMultiPartUploadUseCase {
7
- private readonly s3;
8
- private readonly bucket;
9
- private readonly emptyMarkerValues;
10
- constructor(bucket: string, s3Client: S3);
11
- execute(params: CompleteMultiPartUploadParams): Promise<void>;
12
- private getAllUploadParts;
13
- private isMarkerEmpty;
14
- }
15
- export {};
@@ -1,55 +0,0 @@
1
- import { CompleteMultipartUploadCommand, ListPartsCommand } from "@webiny/aws-sdk/client-s3/index.js";
2
- class CompleteMultiPartUploadUseCase {
3
- constructor(bucket, s3Client){
4
- this.emptyMarkerValues = [
5
- void 0,
6
- "0"
7
- ];
8
- this.bucket = bucket;
9
- this.s3 = s3Client;
10
- }
11
- async execute(params) {
12
- const uploadParams = {
13
- Bucket: this.bucket,
14
- Key: params.fileKey,
15
- UploadId: params.uploadId
16
- };
17
- const allParts = await this.getAllUploadParts(uploadParams);
18
- const s3Params = {
19
- ...uploadParams,
20
- MultipartUpload: {
21
- Parts: allParts
22
- }
23
- };
24
- try {
25
- const command = new CompleteMultipartUploadCommand(s3Params);
26
- await this.s3.send(command);
27
- } catch (err) {
28
- console.error(err);
29
- throw err;
30
- }
31
- }
32
- async getAllUploadParts(params) {
33
- const parts = [];
34
- let marker;
35
- while(true){
36
- const { Parts, PartNumberMarker } = await this.s3.send(new ListPartsCommand({
37
- ...params,
38
- PartNumberMarker: marker
39
- }));
40
- if (Parts) Parts.forEach((part)=>parts.push(part));
41
- marker = PartNumberMarker || void 0;
42
- if (this.isMarkerEmpty(marker)) break;
43
- }
44
- return parts.map((part)=>({
45
- ETag: part.ETag,
46
- PartNumber: part.PartNumber
47
- }));
48
- }
49
- isMarkerEmpty(marker) {
50
- return this.emptyMarkerValues.includes(marker);
51
- }
52
- }
53
- export { CompleteMultiPartUploadUseCase };
54
-
55
- //# sourceMappingURL=CompleteMultiPartUploadUseCase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multiPartUpload/CompleteMultiPartUploadUseCase.js","sources":["../../src/multiPartUpload/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"],"names":["CompleteMultiPartUploadUseCase","bucket","s3Client","undefined","params","uploadParams","allParts","s3Params","command","CompleteMultipartUploadCommand","err","console","parts","marker","Parts","PartNumberMarker","ListPartsCommand","part"],"mappings":";AAiBO,MAAMA;IAKT,YAAYC,MAAc,EAAEC,QAAY,CAAE;aAFzB,iBAAiB,GAAG;YAACC;YAAW;SAAI;QAGjD,IAAI,CAAC,MAAM,GAAGF;QACd,IAAI,CAAC,EAAE,GAAGC;IACd;IAEA,MAAM,QAAQE,MAAqC,EAAE;QACjD,MAAMC,eAAe;YACjB,QAAQ,IAAI,CAAC,MAAM;YACnB,KAAKD,OAAO,OAAO;YACnB,UAAUA,OAAO,QAAQ;QAC7B;QAEA,MAAME,WAAW,MAAM,IAAI,CAAC,iBAAiB,CAACD;QAE9C,MAAME,WAAW;YACb,GAAGF,YAAY;YACf,iBAAiB;gBACb,OAAOC;YACX;QACJ;QAEA,IAAI;YACA,MAAME,UAAU,IAAIC,+BAA+BF;YACnD,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAACC;QACvB,EAAE,OAAOE,KAAK;YACVC,QAAQ,KAAK,CAACD;YACd,MAAMA;QACV;IACJ;IAEA,MAAc,kBAAkBN,MAA+B,EAAE;QAC7D,MAAMQ,QAAgB,EAAE;QAExB,IAAIC;QACJ,MAAO,KAAM;YACT,MAAM,EAAEC,KAAK,EAAEC,gBAAgB,EAAE,GAAoB,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CACnE,IAAIC,iBAAiB;gBACjB,GAAGZ,MAAM;gBACT,kBAAkBS;YACtB;YAGJ,IAAIC,OACAA,MAAM,OAAO,CAACG,CAAAA,OAAQL,MAAM,IAAI,CAACK;YAGrCJ,SAASE,oBAAoBZ;YAC7B,IAAI,IAAI,CAAC,aAAa,CAACU,SACnB;QAER;QAEA,OAAOD,MAAM,GAAG,CAACK,CAAAA,OAAS;gBACtB,MAAMA,KAAK,IAAI;gBACf,YAAYA,KAAK,UAAU;YAC/B;IACJ;IAEQ,cAAcJ,MAA0B,EAAE;QAC9C,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAACA;IAC3C;AACJ"}
@@ -1,20 +0,0 @@
1
- import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
2
- import type { FileData } from "../types.js";
3
- interface CreateMultiPartUploadParams {
4
- file: FileData;
5
- numberOfParts: number;
6
- }
7
- export declare class CreateMultiPartUploadUseCase {
8
- private readonly s3;
9
- private readonly bucket;
10
- constructor(bucket: string, s3Client: S3);
11
- execute({ file, numberOfParts }: CreateMultiPartUploadParams): Promise<{
12
- file: FileData;
13
- uploadId: string | undefined;
14
- parts: {
15
- url: string;
16
- partNumber: number;
17
- }[];
18
- }>;
19
- }
20
- export {};
@@ -1,34 +0,0 @@
1
- import { UploadPartCommand, getSignedUrl } from "@webiny/aws-sdk/client-s3/index.js";
2
- class CreateMultiPartUploadUseCase {
3
- constructor(bucket, s3Client){
4
- this.bucket = bucket;
5
- this.s3 = s3Client;
6
- }
7
- async execute({ file, numberOfParts }) {
8
- const s3Params = {
9
- Bucket: this.bucket,
10
- Key: file.key
11
- };
12
- const { UploadId } = await this.s3.createMultipartUpload(s3Params);
13
- const parts = await Promise.all(Array.from({
14
- length: numberOfParts
15
- }).map((_, index)=>getSignedUrl(this.s3, new UploadPartCommand({
16
- ...s3Params,
17
- UploadId,
18
- PartNumber: index + 1
19
- }), {
20
- expiresIn: 86400
21
- }).then((url)=>({
22
- url,
23
- partNumber: index + 1
24
- }))));
25
- return {
26
- file,
27
- uploadId: UploadId,
28
- parts
29
- };
30
- }
31
- }
32
- export { CreateMultiPartUploadUseCase };
33
-
34
- //# sourceMappingURL=CreateMultiPartUploadUseCase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multiPartUpload/CreateMultiPartUploadUseCase.js","sources":["../../src/multiPartUpload/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"],"names":["CreateMultiPartUploadUseCase","bucket","s3Client","file","numberOfParts","s3Params","UploadId","parts","Promise","Array","_","index","getSignedUrl","UploadPartCommand","url"],"mappings":";AASO,MAAMA;IAIT,YAAYC,MAAc,EAAEC,QAAY,CAAE;QACtC,IAAI,CAAC,MAAM,GAAGD;QACd,IAAI,CAAC,EAAE,GAAGC;IACd;IAEA,MAAM,QAAQ,EAAEC,IAAI,EAAEC,aAAa,EAA+B,EAAE;QAChE,MAAMC,WAAW;YAAE,QAAQ,IAAI,CAAC,MAAM;YAAE,KAAKF,KAAK,GAAG;QAAC;QAEtD,MAAM,EAAEG,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAACD;QAEzD,MAAME,QAAQ,MAAMC,QAAQ,GAAG,CAC3BC,MAAM,IAAI,CAAC;YAAE,QAAQL;QAAc,GAAG,GAAG,CAAC,CAACM,GAAGC,QACnCC,aACH,IAAI,CAAC,EAAE,EACP,IAAIC,kBAAkB;gBAAE,GAAGR,QAAQ;gBAAEC;gBAAU,YAAYK,QAAQ;YAAE,IACrE;gBAEI,WAAW;YACf,GACF,IAAI,CAACG,CAAAA,MAAQ;oBACXA;oBACA,YAAYH,QAAQ;gBACxB;QAIR,OAAO;YACHR;YACA,UAAUG;YACVC;QACJ;IACJ;AACJ"}
@@ -1,6 +0,0 @@
1
- import type { PresignedPostPayloadData } from "../types.js";
2
- export declare class FileExtension {
3
- private data;
4
- constructor(data: PresignedPostPayloadData);
5
- getValue(): string;
6
- }
@@ -1,16 +0,0 @@
1
- import { mimeTypes as external_mimeTypes_js_mimeTypes } from "./mimeTypes.js";
2
- class FileExtension {
3
- constructor(data){
4
- this.data = data;
5
- }
6
- getValue() {
7
- const name = (this.data.key || this.data.name).toLowerCase();
8
- const maybeExt = name.split(".").pop();
9
- const extensions = external_mimeTypes_js_mimeTypes[this.data.type];
10
- if (extensions && !extensions.includes(maybeExt)) return extensions[0];
11
- return "";
12
- }
13
- }
14
- export { FileExtension };
15
-
16
- //# sourceMappingURL=FileExtension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils/FileExtension.js","sources":["../../src/utils/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"],"names":["FileExtension","data","name","maybeExt","extensions","mimeTypes"],"mappings":";AAGO,MAAMA;IAGT,YAAYC,IAA8B,CAAE;QACxC,IAAI,CAAC,IAAI,GAAGA;IAChB;IAEA,WAAW;QACP,MAAMC,OAAQ,KAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAG,EAAG,WAAW;QAE1D,MAAMC,WAAWD,KAAK,KAAK,CAAC,KAAK,GAAG;QACpC,MAAME,aAAaC,+BAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C,IAAID,cAAc,CAACA,WAAW,QAAQ,CAACD,WACnC,OAAOC,UAAU,CAAC,EAAE;QAGxB,OAAO;IACX;AACJ"}
@@ -1,11 +0,0 @@
1
- import type { PresignedPostPayloadData } from "../types.js";
2
- export declare class FileKey {
3
- private data;
4
- private extension;
5
- private key;
6
- constructor(data: PresignedPostPayloadData);
7
- getExtension(): string;
8
- setKey(key: string): this;
9
- toString(): string;
10
- private getSanitizedKey;
11
- }
package/utils/FileKey.js DELETED
@@ -1,33 +0,0 @@
1
- import sanitize_filename from "sanitize-filename";
2
- import { FileExtension } from "./FileExtension.js";
3
- class FileKey {
4
- constructor(data){
5
- this.data = data;
6
- this.extension = new FileExtension(data);
7
- this.key = this.getSanitizedKey();
8
- }
9
- getExtension() {
10
- return this.extension.getValue();
11
- }
12
- setKey(key) {
13
- this.key = key;
14
- return this;
15
- }
16
- toString() {
17
- return [
18
- this.data.keyPrefix,
19
- this.data.id,
20
- this.key
21
- ].filter(Boolean).join("/");
22
- }
23
- getSanitizedKey() {
24
- const key = sanitize_filename(this.data.key || this.data.name).replace(/\s/g, "");
25
- return [
26
- key,
27
- this.getExtension()
28
- ].filter(Boolean).join(".");
29
- }
30
- }
31
- export { FileKey };
32
-
33
- //# sourceMappingURL=FileKey.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils/FileKey.js","sources":["../../src/utils/FileKey.ts"],"sourcesContent":["import sanitizeFilename from \"sanitize-filename\";\nimport type { PresignedPostPayloadData } from \"~/types.js\";\nimport { FileExtension } from \"~/utils/FileExtension.js\";\n\nexport class FileKey {\n private data: PresignedPostPayloadData;\n private extension: FileExtension;\n private key: string;\n\n constructor(data: PresignedPostPayloadData) {\n this.data = data;\n this.extension = new FileExtension(data);\n this.key = this.getSanitizedKey();\n }\n\n getExtension() {\n return this.extension.getValue();\n }\n\n setKey(key: string) {\n this.key = key;\n return this;\n }\n\n toString() {\n return [this.data.keyPrefix, this.data.id, this.key].filter(Boolean).join(\"/\");\n }\n\n private getSanitizedKey() {\n const key = sanitizeFilename(this.data.key || this.data.name).replace(/\\s/g, \"\");\n\n return [key, this.getExtension()].filter(Boolean).join(\".\");\n }\n}\n"],"names":["FileKey","data","FileExtension","key","Boolean","sanitizeFilename"],"mappings":";;AAIO,MAAMA;IAKT,YAAYC,IAA8B,CAAE;QACxC,IAAI,CAAC,IAAI,GAAGA;QACZ,IAAI,CAAC,SAAS,GAAG,IAAIC,cAAcD;QACnC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe;IACnC;IAEA,eAAe;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ;IAClC;IAEA,OAAOE,GAAW,EAAE;QAChB,IAAI,CAAC,GAAG,GAAGA;QACX,OAAO,IAAI;IACf;IAEA,WAAW;QACP,OAAO;YAAC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,GAAG;SAAC,CAAC,MAAM,CAACC,SAAS,IAAI,CAAC;IAC9E;IAEQ,kBAAkB;QACtB,MAAMD,MAAME,kBAAiB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO;QAE7E,OAAO;YAACF;YAAK,IAAI,CAAC,YAAY;SAAG,CAAC,MAAM,CAACC,SAAS,IAAI,CAAC;IAC3D;AACJ"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,59 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { FileKey } from "./FileKey.js";
3
- describe("FileKey", ()=>{
4
- it("should generate a file key (extension is included in the name)", ()=>{
5
- const fileKey = new FileKey({
6
- size: 1071690,
7
- name: "image-14.jpg",
8
- type: "image/jpeg"
9
- });
10
- expect(fileKey.toString()).toEqual("image-14.jpg");
11
- });
12
- it("should generate a file key (extension derived from file type)", ()=>{
13
- const fileKey = new FileKey({
14
- size: 1071690,
15
- name: "image-14",
16
- type: "image/jpeg"
17
- });
18
- expect(fileKey.toString()).toEqual("image-14.jpg");
19
- });
20
- it("should generate a file key containing id", ()=>{
21
- const fileKey = new FileKey({
22
- size: 1071690,
23
- name: "image-14.jpeg",
24
- type: "image/jpeg",
25
- id: "12345678"
26
- });
27
- expect(fileKey.toString()).toEqual("12345678/image-14.jpeg");
28
- });
29
- it("should generate a file key containing prefix", ()=>{
30
- const fileKey = new FileKey({
31
- size: 1071690,
32
- name: "image-14.jpeg",
33
- type: "image/jpeg",
34
- keyPrefix: "prefix"
35
- });
36
- expect(fileKey.toString()).toEqual("prefix/image-14.jpeg");
37
- });
38
- it("should generate a file key containing id and prefix", ()=>{
39
- const fileKey = new FileKey({
40
- size: 1071690,
41
- name: "image-14.jpeg",
42
- type: "image/jpeg",
43
- id: "12345678",
44
- keyPrefix: "prefix"
45
- });
46
- expect(fileKey.toString()).toEqual("prefix/12345678/image-14.jpeg");
47
- });
48
- it("should use the key defined in the input", ()=>{
49
- const fileKey = new FileKey({
50
- size: 1071690,
51
- name: "image",
52
- type: "image/jpeg",
53
- key: "image-14.jpg"
54
- });
55
- expect(fileKey.toString()).toEqual("image-14.jpg");
56
- });
57
- });
58
-
59
- //# sourceMappingURL=FileKey.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils/FileKey.test.js","sources":["../../src/utils/FileKey.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { FileKey } from \"./FileKey.js\";\n\ndescribe(\"FileKey\", () => {\n it(\"should generate a file key (extension is included in the name)\", () => {\n const fileKey = new FileKey({\n size: 1071690,\n name: \"image-14.jpg\",\n type: \"image/jpeg\"\n });\n\n expect(fileKey.toString()).toEqual(\"image-14.jpg\");\n });\n\n it(\"should generate a file key (extension derived from file type)\", () => {\n const fileKey = new FileKey({\n size: 1071690,\n name: \"image-14\",\n type: \"image/jpeg\"\n });\n\n expect(fileKey.toString()).toEqual(\"image-14.jpg\");\n });\n\n it(\"should generate a file key containing id\", () => {\n const fileKey = new FileKey({\n size: 1071690,\n name: \"image-14.jpeg\",\n type: \"image/jpeg\",\n id: \"12345678\"\n });\n\n expect(fileKey.toString()).toEqual(\"12345678/image-14.jpeg\");\n });\n\n it(\"should generate a file key containing prefix\", () => {\n const fileKey = new FileKey({\n size: 1071690,\n name: \"image-14.jpeg\",\n type: \"image/jpeg\",\n keyPrefix: \"prefix\"\n });\n\n expect(fileKey.toString()).toEqual(\"prefix/image-14.jpeg\");\n });\n\n it(\"should generate a file key containing id and prefix\", () => {\n const fileKey = new FileKey({\n size: 1071690,\n name: \"image-14.jpeg\",\n type: \"image/jpeg\",\n id: \"12345678\",\n keyPrefix: \"prefix\"\n });\n\n expect(fileKey.toString()).toEqual(\"prefix/12345678/image-14.jpeg\");\n });\n\n it(\"should use the key defined in the input\", () => {\n const fileKey = new FileKey({\n size: 1071690,\n name: \"image\",\n type: \"image/jpeg\",\n key: \"image-14.jpg\"\n });\n\n expect(fileKey.toString()).toEqual(\"image-14.jpg\");\n });\n});\n"],"names":["describe","it","fileKey","FileKey","expect"],"mappings":";;AAGAA,SAAS,WAAW;IAChBC,GAAG,kEAAkE;QACjE,MAAMC,UAAU,IAAIC,QAAQ;YACxB,MAAM;YACN,MAAM;YACN,MAAM;QACV;QAEAC,OAAOF,QAAQ,QAAQ,IAAI,OAAO,CAAC;IACvC;IAEAD,GAAG,iEAAiE;QAChE,MAAMC,UAAU,IAAIC,QAAQ;YACxB,MAAM;YACN,MAAM;YACN,MAAM;QACV;QAEAC,OAAOF,QAAQ,QAAQ,IAAI,OAAO,CAAC;IACvC;IAEAD,GAAG,4CAA4C;QAC3C,MAAMC,UAAU,IAAIC,QAAQ;YACxB,MAAM;YACN,MAAM;YACN,MAAM;YACN,IAAI;QACR;QAEAC,OAAOF,QAAQ,QAAQ,IAAI,OAAO,CAAC;IACvC;IAEAD,GAAG,gDAAgD;QAC/C,MAAMC,UAAU,IAAIC,QAAQ;YACxB,MAAM;YACN,MAAM;YACN,MAAM;YACN,WAAW;QACf;QAEAC,OAAOF,QAAQ,QAAQ,IAAI,OAAO,CAAC;IACvC;IAEAD,GAAG,uDAAuD;QACtD,MAAMC,UAAU,IAAIC,QAAQ;YACxB,MAAM;YACN,MAAM;YACN,MAAM;YACN,IAAI;YACJ,WAAW;QACf;QAEAC,OAAOF,QAAQ,QAAQ,IAAI,OAAO,CAAC;IACvC;IAEAD,GAAG,2CAA2C;QAC1C,MAAMC,UAAU,IAAIC,QAAQ;YACxB,MAAM;YACN,MAAM;YACN,MAAM;YACN,KAAK;QACT;QAEAC,OAAOF,QAAQ,QAAQ,IAAI,OAAO,CAAC;IACvC;AACJ"}
@@ -1,18 +0,0 @@
1
- import type { FileData, PresignedPostPayloadData } from "../types.js";
2
- import type { FileModifier } from "./FileUploadModifier.js";
3
- export interface FileToSign {
4
- name: string;
5
- key: string;
6
- type: string;
7
- size: number;
8
- }
9
- /**
10
- * FileNormalizer normalizes file data, before it's signed for upload to S3.
11
- * It generates a unique file id, and makes sure that the file key includes the unique id.
12
- *
13
- */
14
- export declare class FileNormalizer {
15
- private readonly modifier;
16
- constructor(modifier?: FileModifier);
17
- normalizeFile(payload: PresignedPostPayloadData): Promise<FileData>;
18
- }
@@ -1,41 +0,0 @@
1
- import { mdbid } from "@webiny/utils";
2
- import { FileKey } from "./FileKey.js";
3
- import { mimeTypes as external_mimeTypes_js_mimeTypes } from "./mimeTypes.js";
4
- const extensionToMime = new Map();
5
- for (const [mime, extensions] of Object.entries(external_mimeTypes_js_mimeTypes))for (const ext of extensions)if (!extensionToMime.has(ext)) extensionToMime.set(ext, mime);
6
- function resolveTypeFromName(name) {
7
- const ext = name.slice(name.lastIndexOf(".") + 1).toLowerCase();
8
- return extensionToMime.get(ext) || "application/octet-stream";
9
- }
10
- class FileNormalizer {
11
- constructor(modifier){
12
- this.modifier = modifier;
13
- }
14
- async normalizeFile(payload) {
15
- const data = {
16
- ...payload,
17
- id: payload.id || mdbid(),
18
- type: payload.type || resolveTypeFromName(payload.name)
19
- };
20
- const key = new FileKey(data);
21
- const defaultKey = key.toString();
22
- const file = {
23
- name: data.name,
24
- type: data.type,
25
- key: defaultKey,
26
- size: data.size
27
- };
28
- if (this.modifier) Object.assign(file, await this.modifier(file));
29
- if (defaultKey !== file.key) key.setKey(file.key);
30
- return {
31
- id: data.id,
32
- key: key.toString(),
33
- name: file.name,
34
- size: file.size,
35
- type: file.type
36
- };
37
- }
38
- }
39
- export { FileNormalizer };
40
-
41
- //# sourceMappingURL=FileNormalizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils/FileNormalizer.js","sources":["../../src/utils/FileNormalizer.ts"],"sourcesContent":["import { mdbid } from \"@webiny/utils\";\nimport type { FileData, PresignedPostPayloadData } from \"~/types.js\";\nimport { FileKey } from \"~/utils/FileKey.js\";\nimport { mimeTypes } from \"~/utils/mimeTypes.js\";\nimport type { FileModifier } from \"./FileUploadModifier.js\";\n\nexport interface FileToSign {\n name: string;\n key: string;\n type: string;\n size: number;\n}\n\nconst extensionToMime = new Map<string, string>();\nfor (const [mime, extensions] of Object.entries(mimeTypes)) {\n for (const ext of extensions) {\n if (!extensionToMime.has(ext)) {\n extensionToMime.set(ext, mime);\n }\n }\n}\n\nfunction resolveTypeFromName(name: string): string {\n const ext = name.slice(name.lastIndexOf(\".\") + 1).toLowerCase();\n return extensionToMime.get(ext) || \"application/octet-stream\";\n}\n\n/**\n * FileNormalizer normalizes file data, before it's signed for upload to S3.\n * It generates a unique file id, and makes sure that the file key includes the unique id.\n *\n */\nexport class FileNormalizer {\n private readonly modifier: FileModifier | undefined;\n\n constructor(modifier?: FileModifier) {\n this.modifier = modifier;\n }\n\n async normalizeFile(payload: PresignedPostPayloadData): Promise<FileData> {\n const data = {\n ...payload,\n id: payload.id || mdbid(),\n type: payload.type || resolveTypeFromName(payload.name)\n };\n\n const key = new FileKey(data);\n const defaultKey = key.toString();\n\n const file: FileToSign = {\n name: data.name,\n type: data.type,\n key: defaultKey,\n size: data.size\n };\n\n if (this.modifier) {\n Object.assign(file, await this.modifier(file));\n }\n\n if (defaultKey !== file.key) {\n key.setKey(file.key);\n }\n\n return {\n id: data.id,\n key: key.toString(),\n name: file.name,\n size: file.size,\n type: file.type\n };\n }\n}\n"],"names":["extensionToMime","Map","mime","extensions","Object","mimeTypes","ext","resolveTypeFromName","name","FileNormalizer","modifier","payload","data","mdbid","key","FileKey","defaultKey","file"],"mappings":";;;AAaA,MAAMA,kBAAkB,IAAIC;AAC5B,KAAK,MAAM,CAACC,MAAMC,WAAW,IAAIC,OAAO,OAAO,CAACC,iCAC5C,KAAK,MAAMC,OAAOH,WACd,IAAI,CAACH,gBAAgB,GAAG,CAACM,MACrBN,gBAAgB,GAAG,CAACM,KAAKJ;AAKrC,SAASK,oBAAoBC,IAAY;IACrC,MAAMF,MAAME,KAAK,KAAK,CAACA,KAAK,WAAW,CAAC,OAAO,GAAG,WAAW;IAC7D,OAAOR,gBAAgB,GAAG,CAACM,QAAQ;AACvC;AAOO,MAAMG;IAGT,YAAYC,QAAuB,CAAE;QACjC,IAAI,CAAC,QAAQ,GAAGA;IACpB;IAEA,MAAM,cAAcC,OAAiC,EAAqB;QACtE,MAAMC,OAAO;YACT,GAAGD,OAAO;YACV,IAAIA,QAAQ,EAAE,IAAIE;YAClB,MAAMF,QAAQ,IAAI,IAAIJ,oBAAoBI,QAAQ,IAAI;QAC1D;QAEA,MAAMG,MAAM,IAAIC,QAAQH;QACxB,MAAMI,aAAaF,IAAI,QAAQ;QAE/B,MAAMG,OAAmB;YACrB,MAAML,KAAK,IAAI;YACf,MAAMA,KAAK,IAAI;YACf,KAAKI;YACL,MAAMJ,KAAK,IAAI;QACnB;QAEA,IAAI,IAAI,CAAC,QAAQ,EACbR,OAAO,MAAM,CAACa,MAAM,MAAM,IAAI,CAAC,QAAQ,CAACA;QAG5C,IAAID,eAAeC,KAAK,GAAG,EACvBH,IAAI,MAAM,CAACG,KAAK,GAAG;QAGvB,OAAO;YACH,IAAIL,KAAK,EAAE;YACX,KAAKE,IAAI,QAAQ;YACjB,MAAMG,KAAK,IAAI;YACf,MAAMA,KAAK,IAAI;YACf,MAAMA,KAAK,IAAI;QACnB;IACJ;AACJ"}
@@ -1,30 +0,0 @@
1
- import { Plugin } from "@webiny/plugins";
2
- import type { FileToSign } from "../utils/FileNormalizer.js";
3
- interface Setter<T> {
4
- (param: T): T;
5
- }
6
- declare class FileUploadModifier {
7
- private fileSetters;
8
- setFile(setter: Setter<FileToSign>): void;
9
- execute(file: FileToSign): Promise<FileToSign>;
10
- }
11
- interface FileUploadModifierCallbackParams {
12
- modifier: {
13
- setFile: FileUploadModifier["setFile"];
14
- };
15
- }
16
- export declare class FileUploadModifierPlugin extends Plugin {
17
- static type: string;
18
- private readonly cb;
19
- constructor(cb: FileUploadModifierCallable);
20
- execute(params: FileUploadModifierCallbackParams): void;
21
- }
22
- interface FileUploadModifierCallable {
23
- (params: FileUploadModifierCallbackParams): void;
24
- }
25
- export declare const createFileUploadModifier: (cb: FileUploadModifierCallable) => FileUploadModifierPlugin;
26
- export interface FileModifier {
27
- (file: FileToSign): Promise<Partial<FileToSign>> | Partial<FileToSign>;
28
- }
29
- export declare const createModifierFromPlugins: (plugins?: FileUploadModifierPlugin[]) => FileModifier;
30
- export {};