@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.
Files changed (208) hide show
  1. package/README.md +11 -1
  2. package/assetDelivery/assetDeliveryConfig.d.ts +2 -6
  3. package/assetDelivery/assetDeliveryConfig.js +24 -23
  4. package/assetDelivery/assetDeliveryConfig.js.map +1 -1
  5. package/assetDelivery/createAssetDelivery.d.ts +3 -3
  6. package/assetDelivery/createAssetDelivery.js +15 -12
  7. package/assetDelivery/createAssetDelivery.js.map +1 -1
  8. package/assetDelivery/index.d.ts +8 -9
  9. package/assetDelivery/index.js +8 -68
  10. package/assetDelivery/index.js.map +1 -1
  11. package/assetDelivery/s3/S3AssetResolver.d.ts +8 -5
  12. package/assetDelivery/s3/S3AssetResolver.js +19 -27
  13. package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
  14. package/assetDelivery/s3/S3ContentsReader.d.ts +2 -3
  15. package/assetDelivery/s3/S3ContentsReader.js +1 -8
  16. package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
  17. package/assetDelivery/s3/S3ErrorAssetReply.js +2 -9
  18. package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
  19. package/assetDelivery/s3/S3OutputStrategy.d.ts +4 -3
  20. package/assetDelivery/s3/S3OutputStrategy.js +12 -17
  21. package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
  22. package/assetDelivery/s3/S3RedirectAssetReply.js +4 -11
  23. package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
  24. package/assetDelivery/s3/S3StreamAssetReply.d.ts +2 -1
  25. package/assetDelivery/s3/S3StreamAssetReply.js +4 -11
  26. package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -1
  27. package/assetDelivery/s3/SharpTransform.d.ts +2 -2
  28. package/assetDelivery/s3/SharpTransform.js +63 -37
  29. package/assetDelivery/s3/SharpTransform.js.map +1 -1
  30. package/assetDelivery/s3/transformation/AssetKeyGenerator.d.ts +1 -1
  31. package/assetDelivery/s3/transformation/AssetKeyGenerator.js +3 -12
  32. package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -1
  33. package/assetDelivery/s3/transformation/CallableContentsReader.d.ts +1 -2
  34. package/assetDelivery/s3/transformation/CallableContentsReader.js +1 -8
  35. package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -1
  36. package/assetDelivery/s3/transformation/WidthCollection.js +1 -8
  37. package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -1
  38. package/assetDelivery/s3/transformation/utils.d.ts +1 -3
  39. package/assetDelivery/s3/transformation/utils.js +23 -19
  40. package/assetDelivery/s3/transformation/utils.js.map +1 -1
  41. package/assetDelivery/threatDetection/ObjectKey.d.ts +7 -0
  42. package/assetDelivery/threatDetection/ObjectKey.js +17 -0
  43. package/assetDelivery/threatDetection/ObjectKey.js.map +1 -0
  44. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.d.ts +2 -0
  45. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +51 -0
  46. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -0
  47. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.d.ts +2 -0
  48. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +6 -0
  49. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -0
  50. package/assetDelivery/threatDetection/index.d.ts +2 -0
  51. package/assetDelivery/threatDetection/index.js +4 -0
  52. package/assetDelivery/threatDetection/index.js.map +1 -0
  53. package/assetDelivery/threatDetection/processThreatScanResult.d.ts +3 -0
  54. package/assetDelivery/threatDetection/processThreatScanResult.js +65 -0
  55. package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -0
  56. package/assetDelivery/threatDetection/types.d.ts +9 -0
  57. package/assetDelivery/threatDetection/types.js +3 -0
  58. package/assetDelivery/threatDetection/types.js.map +1 -0
  59. package/assetDelivery/types.d.ts +10 -0
  60. package/assetDelivery/types.js +3 -0
  61. package/assetDelivery/types.js.map +1 -0
  62. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.d.ts +11 -0
  63. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js +19 -0
  64. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js.map +1 -0
  65. package/enterprise/ApplyThreatScanning/feature.d.ts +1 -0
  66. package/enterprise/ApplyThreatScanning/feature.js +10 -0
  67. package/enterprise/ApplyThreatScanning/feature.js.map +1 -0
  68. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.d.ts +15 -0
  69. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js +36 -0
  70. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js.map +1 -0
  71. package/features/DeleteFileFromBucket/DeleteS3FolderTask.d.ts +31 -0
  72. package/features/DeleteFileFromBucket/DeleteS3FolderTask.js +60 -0
  73. package/features/DeleteFileFromBucket/DeleteS3FolderTask.js.map +1 -0
  74. package/features/DeleteFileFromBucket/feature.d.ts +1 -0
  75. package/features/DeleteFileFromBucket/feature.js +12 -0
  76. package/features/DeleteFileFromBucket/feature.js.map +1 -0
  77. package/features/ExtractMetadata/ExtractMetadataHandler.d.ts +11 -0
  78. package/features/ExtractMetadata/ExtractMetadataHandler.js +26 -0
  79. package/features/ExtractMetadata/ExtractMetadataHandler.js.map +1 -0
  80. package/features/ExtractMetadata/ExtractMetadataTask.d.ts +23 -0
  81. package/features/ExtractMetadata/ExtractMetadataTask.js +128 -0
  82. package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -0
  83. package/features/ExtractMetadata/feature.d.ts +1 -0
  84. package/features/ExtractMetadata/feature.js +12 -0
  85. package/features/ExtractMetadata/feature.js.map +1 -0
  86. package/features/FlushCache/FlushCacheOnFileDeleteHandler.d.ts +12 -0
  87. package/features/FlushCache/FlushCacheOnFileDeleteHandler.js +27 -0
  88. package/features/FlushCache/FlushCacheOnFileDeleteHandler.js.map +1 -0
  89. package/features/FlushCache/FlushCacheOnFileUpdateHandler.d.ts +12 -0
  90. package/features/FlushCache/FlushCacheOnFileUpdateHandler.js +35 -0
  91. package/features/FlushCache/FlushCacheOnFileUpdateHandler.js.map +1 -0
  92. package/features/FlushCache/InvalidateCacheTask.d.ts +25 -0
  93. package/features/FlushCache/InvalidateCacheTask.js +86 -0
  94. package/features/FlushCache/InvalidateCacheTask.js.map +1 -0
  95. package/features/FlushCache/feature.d.ts +1 -0
  96. package/features/FlushCache/feature.js +14 -0
  97. package/features/FlushCache/feature.js.map +1 -0
  98. package/features/WriteFileMetadata/MetadataReader.d.ts +14 -0
  99. package/features/WriteFileMetadata/MetadataReader.js +14 -0
  100. package/features/WriteFileMetadata/MetadataReader.js.map +1 -0
  101. package/features/WriteFileMetadata/MetadataWriter.d.ts +10 -0
  102. package/features/WriteFileMetadata/MetadataWriter.js +28 -0
  103. package/features/WriteFileMetadata/MetadataWriter.js.map +1 -0
  104. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +12 -0
  105. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +21 -0
  106. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -0
  107. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +12 -0
  108. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +21 -0
  109. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -0
  110. package/features/WriteFileMetadata/feature.d.ts +1 -0
  111. package/features/WriteFileMetadata/feature.js +12 -0
  112. package/features/WriteFileMetadata/feature.js.map +1 -0
  113. package/graphql/checkPermissions.d.ts +5 -0
  114. package/{plugins → graphql}/checkPermissions.js +4 -11
  115. package/graphql/checkPermissions.js.map +1 -0
  116. package/graphql/schema.d.ts +1 -0
  117. package/{plugins/graphqlFileStorageS3.js → graphql/schema.js} +49 -57
  118. package/graphql/schema.js.map +1 -0
  119. package/index.d.ts +4 -5
  120. package/index.js +21 -32
  121. package/index.js.map +1 -1
  122. package/multiPartUpload/CompleteMultiPartUploadUseCase.d.ts +1 -1
  123. package/multiPartUpload/CompleteMultiPartUploadUseCase.js +4 -11
  124. package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -1
  125. package/multiPartUpload/CreateMultiPartUploadUseCase.d.ts +2 -2
  126. package/multiPartUpload/CreateMultiPartUploadUseCase.js +3 -10
  127. package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -1
  128. package/package.json +23 -29
  129. package/types.d.ts +1 -1
  130. package/types.js +1 -5
  131. package/types.js.map +1 -1
  132. package/utils/CdnPathsGenerator.d.ts +3 -0
  133. package/utils/CdnPathsGenerator.js +7 -0
  134. package/utils/CdnPathsGenerator.js.map +1 -0
  135. package/utils/FileExtension.d.ts +1 -1
  136. package/utils/FileExtension.js +3 -10
  137. package/utils/FileExtension.js.map +1 -1
  138. package/utils/FileKey.d.ts +1 -1
  139. package/utils/FileKey.js +5 -13
  140. package/utils/FileKey.js.map +1 -1
  141. package/utils/FileKey.test.js +8 -9
  142. package/utils/FileKey.test.js.map +1 -1
  143. package/utils/FileNormalizer.d.ts +2 -2
  144. package/utils/FileNormalizer.js +5 -12
  145. package/utils/FileNormalizer.js.map +1 -1
  146. package/utils/FileUploadModifier.d.ts +1 -1
  147. package/utils/FileUploadModifier.js +6 -16
  148. package/utils/FileUploadModifier.js.map +1 -1
  149. package/utils/createFileNormalizerFromContext.d.ts +2 -2
  150. package/utils/createFileNormalizerFromContext.js +5 -12
  151. package/utils/createFileNormalizerFromContext.js.map +1 -1
  152. package/utils/getPresignedPostPayload.d.ts +4 -3
  153. package/utils/getPresignedPostPayload.js +10 -15
  154. package/utils/getPresignedPostPayload.js.map +1 -1
  155. package/utils/mimeTypes.js +5 -13
  156. package/utils/mimeTypes.js.map +1 -1
  157. package/utils/uploadFileToS3.d.ts +1 -3
  158. package/utils/uploadFileToS3.js +7 -20
  159. package/utils/uploadFileToS3.js.map +1 -1
  160. package/assetDelivery/createCustomAssetDelivery.d.ts +0 -12
  161. package/assetDelivery/createCustomAssetDelivery.js +0 -28
  162. package/assetDelivery/createCustomAssetDelivery.js.map +0 -1
  163. package/assetDelivery/customAssets/CustomAsset.d.ts +0 -6
  164. package/assetDelivery/customAssets/CustomAsset.js +0 -14
  165. package/assetDelivery/customAssets/CustomAsset.js.map +0 -1
  166. package/assetDelivery/customAssets/CustomAssetProcessor.d.ts +0 -10
  167. package/assetDelivery/customAssets/CustomAssetProcessor.js +0 -25
  168. package/assetDelivery/customAssets/CustomAssetProcessor.js.map +0 -1
  169. package/assetDelivery/customAssets/S3CustomAssetResolver.d.ts +0 -15
  170. package/assetDelivery/customAssets/S3CustomAssetResolver.js +0 -90
  171. package/assetDelivery/customAssets/S3CustomAssetResolver.js.map +0 -1
  172. package/assetDelivery/customAssets/customAssetDeliveryConfig.d.ts +0 -1
  173. package/assetDelivery/customAssets/customAssetDeliveryConfig.js +0 -30
  174. package/assetDelivery/customAssets/customAssetDeliveryConfig.js.map +0 -1
  175. package/assetDelivery/s3/S3AssetMetadataReader.d.ts +0 -15
  176. package/assetDelivery/s3/S3AssetMetadataReader.js +0 -36
  177. package/assetDelivery/s3/S3AssetMetadataReader.js.map +0 -1
  178. package/assetDelivery/s3/transformation/legacyUtils.d.ts +0 -12
  179. package/assetDelivery/s3/transformation/legacyUtils.js +0 -34
  180. package/assetDelivery/s3/transformation/legacyUtils.js.map +0 -1
  181. package/flushCdnCache/CdnPathsGenerator.d.ts +0 -4
  182. package/flushCdnCache/CdnPathsGenerator.js +0 -14
  183. package/flushCdnCache/CdnPathsGenerator.js.map +0 -1
  184. package/flushCdnCache/InvalidateCacheTask.d.ts +0 -18
  185. package/flushCdnCache/InvalidateCacheTask.js +0 -78
  186. package/flushCdnCache/InvalidateCacheTask.js.map +0 -1
  187. package/flushCdnCache/flushCacheOnFileDelete.d.ts +0 -3
  188. package/flushCdnCache/flushCacheOnFileDelete.js +0 -34
  189. package/flushCdnCache/flushCacheOnFileDelete.js.map +0 -1
  190. package/flushCdnCache/flushCacheOnFileUpdate.d.ts +0 -3
  191. package/flushCdnCache/flushCacheOnFileUpdate.js +0 -40
  192. package/flushCdnCache/flushCacheOnFileUpdate.js.map +0 -1
  193. package/flushCdnCache/index.d.ts +0 -1
  194. package/flushCdnCache/index.js +0 -15
  195. package/flushCdnCache/index.js.map +0 -1
  196. package/flushCdnCache/invalidateCacheTaskDefinition.d.ts +0 -2
  197. package/flushCdnCache/invalidateCacheTaskDefinition.js +0 -22
  198. package/flushCdnCache/invalidateCacheTaskDefinition.js.map +0 -1
  199. package/plugins/addFileMetadata.d.ts +0 -10
  200. package/plugins/addFileMetadata.js +0 -67
  201. package/plugins/addFileMetadata.js.map +0 -1
  202. package/plugins/checkPermissions.d.ts +0 -4
  203. package/plugins/checkPermissions.js.map +0 -1
  204. package/plugins/fileStorageS3.d.ts +0 -3
  205. package/plugins/fileStorageS3.js +0 -60
  206. package/plugins/fileStorageS3.js.map +0 -1
  207. package/plugins/graphqlFileStorageS3.d.ts +0 -4
  208. package/plugins/graphqlFileStorageS3.js.map +0 -1
@@ -1,67 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.addFileMetadata = exports.MetadataWriter = void 0;
7
- var _clientS = require("@webiny/aws-sdk/client-s3");
8
- var _api = require("@webiny/api");
9
- var _utils = require("@webiny/utils");
10
- class MetadataWriter {
11
- constructor(bucket) {
12
- this.bucket = bucket;
13
- }
14
- async write(files) {
15
- const s3 = this.getS3();
16
-
17
- /**
18
- * We need to write each file with retry.
19
- */
20
- const writers = files.map(file => {
21
- const writer = () => {
22
- return s3.putObject({
23
- Bucket: this.bucket,
24
- Key: `${file.key}.metadata`,
25
- Body: JSON.stringify(this.getMetadata(file)),
26
- ContentType: "application/json",
27
- CacheControl: "max-age=31536000"
28
- });
29
- };
30
- return (0, _utils.executeWithRetry)(writer);
31
- });
32
- await Promise.all(writers);
33
- }
34
- getS3() {
35
- return new _clientS.S3({
36
- region: process.env.AWS_REGION
37
- });
38
- }
39
- getMetadata(file) {
40
- return {
41
- id: file.id,
42
- tenant: file.tenant,
43
- locale: file.locale,
44
- size: file.size,
45
- contentType: file.type
46
- };
47
- }
48
- }
49
- exports.MetadataWriter = MetadataWriter;
50
- const addFileMetadata = () => {
51
- return new _api.ContextPlugin(context => {
52
- const metadataWriter = new MetadataWriter(String(process.env.S3_BUCKET));
53
- context.fileManager.onFileAfterCreate.subscribe(({
54
- file
55
- }) => {
56
- return metadataWriter.write([file]);
57
- });
58
- context.fileManager.onFileAfterBatchCreate.subscribe(({
59
- files
60
- }) => {
61
- return metadataWriter.write(files);
62
- });
63
- });
64
- };
65
- exports.addFileMetadata = addFileMetadata;
66
-
67
- //# sourceMappingURL=addFileMetadata.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_clientS","require","_api","_utils","MetadataWriter","constructor","bucket","write","files","s3","getS3","writers","map","file","writer","putObject","Bucket","Key","key","Body","JSON","stringify","getMetadata","ContentType","CacheControl","executeWithRetry","Promise","all","S3","region","process","env","AWS_REGION","id","tenant","locale","size","contentType","type","exports","addFileMetadata","ContextPlugin","context","metadataWriter","String","S3_BUCKET","fileManager","onFileAfterCreate","subscribe","onFileAfterBatchCreate"],"sources":["addFileMetadata.ts"],"sourcesContent":["import { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { FileManagerContext, File } from \"@webiny/api-file-manager/types\";\nimport { executeWithRetry } from \"@webiny/utils\";\n\nexport class MetadataWriter {\n private readonly bucket: string;\n\n constructor(bucket: string) {\n this.bucket = bucket;\n }\n\n async write(files: File[]) {\n const s3 = this.getS3();\n\n /**\n * We need to write each file with retry.\n */\n const writers = files.map(file => {\n const writer = () => {\n return s3.putObject({\n Bucket: this.bucket,\n Key: `${file.key}.metadata`,\n Body: JSON.stringify(this.getMetadata(file)),\n ContentType: \"application/json\",\n CacheControl: \"max-age=31536000\"\n });\n };\n\n return executeWithRetry(writer);\n });\n\n await Promise.all(writers);\n }\n\n private getS3() {\n return new S3({ region: process.env.AWS_REGION });\n }\n\n private getMetadata(file: File) {\n return {\n id: file.id,\n tenant: file.tenant,\n locale: file.locale,\n size: file.size,\n contentType: file.type\n };\n }\n}\n\nexport const addFileMetadata = () => {\n return new ContextPlugin<FileManagerContext>(context => {\n const metadataWriter = new MetadataWriter(String(process.env.S3_BUCKET));\n\n context.fileManager.onFileAfterCreate.subscribe(({ file }) => {\n return metadataWriter.write([file]);\n });\n\n context.fileManager.onFileAfterBatchCreate.subscribe(({ files }) => {\n return metadataWriter.write(files);\n });\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AAEO,MAAMG,cAAc,CAAC;EAGxBC,WAAWA,CAACC,MAAc,EAAE;IACxB,IAAI,CAACA,MAAM,GAAGA,MAAM;EACxB;EAEA,MAAMC,KAAKA,CAACC,KAAa,EAAE;IACvB,MAAMC,EAAE,GAAG,IAAI,CAACC,KAAK,CAAC,CAAC;;IAEvB;AACR;AACA;IACQ,MAAMC,OAAO,GAAGH,KAAK,CAACI,GAAG,CAACC,IAAI,IAAI;MAC9B,MAAMC,MAAM,GAAGA,CAAA,KAAM;QACjB,OAAOL,EAAE,CAACM,SAAS,CAAC;UAChBC,MAAM,EAAE,IAAI,CAACV,MAAM;UACnBW,GAAG,EAAG,GAAEJ,IAAI,CAACK,GAAI,WAAU;UAC3BC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACC,WAAW,CAACT,IAAI,CAAC,CAAC;UAC5CU,WAAW,EAAE,kBAAkB;UAC/BC,YAAY,EAAE;QAClB,CAAC,CAAC;MACN,CAAC;MAED,OAAO,IAAAC,uBAAgB,EAACX,MAAM,CAAC;IACnC,CAAC,CAAC;IAEF,MAAMY,OAAO,CAACC,GAAG,CAAChB,OAAO,CAAC;EAC9B;EAEQD,KAAKA,CAAA,EAAG;IACZ,OAAO,IAAIkB,WAAE,CAAC;MAAEC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC;IAAW,CAAC,CAAC;EACrD;EAEQV,WAAWA,CAACT,IAAU,EAAE;IAC5B,OAAO;MACHoB,EAAE,EAAEpB,IAAI,CAACoB,EAAE;MACXC,MAAM,EAAErB,IAAI,CAACqB,MAAM;MACnBC,MAAM,EAAEtB,IAAI,CAACsB,MAAM;MACnBC,IAAI,EAAEvB,IAAI,CAACuB,IAAI;MACfC,WAAW,EAAExB,IAAI,CAACyB;IACtB,CAAC;EACL;AACJ;AAACC,OAAA,CAAAnC,cAAA,GAAAA,cAAA;AAEM,MAAMoC,eAAe,GAAGA,CAAA,KAAM;EACjC,OAAO,IAAIC,kBAAa,CAAqBC,OAAO,IAAI;IACpD,MAAMC,cAAc,GAAG,IAAIvC,cAAc,CAACwC,MAAM,CAACd,OAAO,CAACC,GAAG,CAACc,SAAS,CAAC,CAAC;IAExEH,OAAO,CAACI,WAAW,CAACC,iBAAiB,CAACC,SAAS,CAAC,CAAC;MAAEnC;IAAK,CAAC,KAAK;MAC1D,OAAO8B,cAAc,CAACpC,KAAK,CAAC,CAACM,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF6B,OAAO,CAACI,WAAW,CAACG,sBAAsB,CAACD,SAAS,CAAC,CAAC;MAAExC;IAAM,CAAC,KAAK;MAChE,OAAOmC,cAAc,CAACpC,KAAK,CAACC,KAAK,CAAC;IACtC,CAAC,CAAC;EACN,CAAC,CAAC;AACN,CAAC;AAAC+B,OAAA,CAAAC,eAAA,GAAAA,eAAA","ignoreList":[]}
@@ -1,4 +0,0 @@
1
- import { FileManagerContext, FilePermission } from "@webiny/api-file-manager/types";
2
- export declare const checkPermissions: (context: FileManagerContext, check?: {
3
- rwd?: string;
4
- }) => Promise<FilePermission[]>;
@@ -1 +0,0 @@
1
- {"version":3,"names":["_apiSecurity","require","checkPermissions","context","check","filePermissions","security","getPermissions","relevantFilePermissions","filter","current","rwd","hasRwd","length","NotAuthorizedError","exports","filesFilePermissions","Array","isArray","permissionWithoutRwdRestrictions","some","permission","includes"],"sources":["checkPermissions.ts"],"sourcesContent":["import { FileManagerContext, FilePermission } from \"@webiny/api-file-manager/types\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\n\nexport const checkPermissions = async (\n context: FileManagerContext,\n check: { rwd?: string } = {}\n) => {\n const filePermissions = await context.security.getPermissions<FilePermission>(\"fm.file\");\n\n const relevantFilePermissions = filePermissions.filter(current => {\n if (check.rwd && !hasRwd(current, check.rwd)) {\n return false;\n }\n\n return true;\n });\n\n if (relevantFilePermissions.length === 0) {\n throw new NotAuthorizedError();\n }\n\n return relevantFilePermissions;\n};\n\nconst hasRwd = (filesFilePermissions: FilePermission | FilePermission[], rwd: string): boolean => {\n if (!Array.isArray(filesFilePermissions)) {\n filesFilePermissions = [filesFilePermissions];\n }\n\n if (!rwd) {\n return true;\n }\n\n // Is there a permission that doesn't restrict RWD permissions, that means all RWD permissions are allowed.\n const permissionWithoutRwdRestrictions = filesFilePermissions.some(permission => {\n return typeof permission.rwd !== \"string\";\n });\n\n if (permissionWithoutRwdRestrictions) {\n return true;\n }\n\n // If there is no permission that doesn't restrict RWD permissions, that means we need to check if the RWD.\n return filesFilePermissions.some(permission => {\n return permission.rwd && permission.rwd.includes(rwd);\n });\n};\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEO,MAAMC,gBAAgB,GAAG,MAAAA,CAC5BC,OAA2B,EAC3BC,KAAuB,GAAG,CAAC,CAAC,KAC3B;EACD,MAAMC,eAAe,GAAG,MAAMF,OAAO,CAACG,QAAQ,CAACC,cAAc,CAAiB,SAAS,CAAC;EAExF,MAAMC,uBAAuB,GAAGH,eAAe,CAACI,MAAM,CAACC,OAAO,IAAI;IAC9D,IAAIN,KAAK,CAACO,GAAG,IAAI,CAACC,MAAM,CAACF,OAAO,EAAEN,KAAK,CAACO,GAAG,CAAC,EAAE;MAC1C,OAAO,KAAK;IAChB;IAEA,OAAO,IAAI;EACf,CAAC,CAAC;EAEF,IAAIH,uBAAuB,CAACK,MAAM,KAAK,CAAC,EAAE;IACtC,MAAM,IAAIC,+BAAkB,CAAC,CAAC;EAClC;EAEA,OAAON,uBAAuB;AAClC,CAAC;AAACO,OAAA,CAAAb,gBAAA,GAAAA,gBAAA;AAEF,MAAMU,MAAM,GAAGA,CAACI,oBAAuD,EAAEL,GAAW,KAAc;EAC9F,IAAI,CAACM,KAAK,CAACC,OAAO,CAACF,oBAAoB,CAAC,EAAE;IACtCA,oBAAoB,GAAG,CAACA,oBAAoB,CAAC;EACjD;EAEA,IAAI,CAACL,GAAG,EAAE;IACN,OAAO,IAAI;EACf;;EAEA;EACA,MAAMQ,gCAAgC,GAAGH,oBAAoB,CAACI,IAAI,CAACC,UAAU,IAAI;IAC7E,OAAO,OAAOA,UAAU,CAACV,GAAG,KAAK,QAAQ;EAC7C,CAAC,CAAC;EAEF,IAAIQ,gCAAgC,EAAE;IAClC,OAAO,IAAI;EACf;;EAEA;EACA,OAAOH,oBAAoB,CAACI,IAAI,CAACC,UAAU,IAAI;IAC3C,OAAOA,UAAU,CAACV,GAAG,IAAIU,UAAU,CAACV,GAAG,CAACW,QAAQ,CAACX,GAAG,CAAC;EACzD,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
@@ -1,3 +0,0 @@
1
- import { ContextPlugin } from "@webiny/api";
2
- declare const _default: () => ContextPlugin<import("@webiny/api/types").Context>;
3
- export default _default;
@@ -1,60 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = void 0;
8
- var _clientS = require("@webiny/aws-sdk/client-s3");
9
- var _FilePhysicalStoragePlugin = require("@webiny/api-file-manager/plugins/FilePhysicalStoragePlugin");
10
- var _getPresignedPostPayload = require("../utils/getPresignedPostPayload");
11
- var _uploadFileToS = _interopRequireDefault(require("../utils/uploadFileToS3"));
12
- var _api = require("@webiny/api");
13
- var _createFileNormalizerFromContext = require("../utils/createFileNormalizerFromContext");
14
- const S3_BUCKET = process.env.S3_BUCKET;
15
- var _default = () => {
16
- /**
17
- * We need to extend the type for FilePhysicalStoragePlugin.
18
- * Otherwise, the `getPresignedPostPayload` doesn't know it has all required values in params.
19
- */
20
- return new _api.ContextPlugin(context => {
21
- context.plugins.register(new _FilePhysicalStoragePlugin.FilePhysicalStoragePlugin({
22
- upload: async params => {
23
- const {
24
- settings,
25
- buffer,
26
- ...data
27
- } = params;
28
- const normalizer = (0, _createFileNormalizerFromContext.createFileNormalizerFromContext)(context);
29
- const {
30
- data: preSignedPostPayload,
31
- file
32
- } = await (0, _getPresignedPostPayload.getPresignedPostPayload)(await normalizer.normalizeFile(data), settings);
33
- const response = await (0, _uploadFileToS.default)(buffer, preSignedPostPayload);
34
- if (!response.ok) {
35
- throw Error("Unable to upload file.");
36
- }
37
- return {
38
- data: preSignedPostPayload,
39
- file
40
- };
41
- },
42
- delete: async params => {
43
- const {
44
- key
45
- } = params;
46
- const s3 = new _clientS.S3();
47
- if (!key || !S3_BUCKET) {
48
- return;
49
- }
50
- await s3.deleteObject({
51
- Bucket: S3_BUCKET,
52
- Key: key
53
- });
54
- }
55
- }));
56
- });
57
- };
58
- exports.default = _default;
59
-
60
- //# sourceMappingURL=fileStorageS3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_clientS","require","_FilePhysicalStoragePlugin","_getPresignedPostPayload","_uploadFileToS","_interopRequireDefault","_api","_createFileNormalizerFromContext","S3_BUCKET","process","env","_default","ContextPlugin","context","plugins","register","FilePhysicalStoragePlugin","upload","params","settings","buffer","data","normalizer","createFileNormalizerFromContext","preSignedPostPayload","file","getPresignedPostPayload","normalizeFile","response","uploadFileToS3","ok","Error","delete","key","s3","S3","deleteObject","Bucket","Key","exports","default"],"sources":["fileStorageS3.ts"],"sourcesContent":["import { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { FilePhysicalStoragePlugin } from \"@webiny/api-file-manager/plugins/FilePhysicalStoragePlugin\";\nimport { getPresignedPostPayload } from \"~/utils/getPresignedPostPayload\";\nimport uploadFileToS3 from \"../utils/uploadFileToS3\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { createFileNormalizerFromContext } from \"~/utils/createFileNormalizerFromContext\";\nimport { PresignedPostPayloadData } from \"~/types\";\n\nconst S3_BUCKET = process.env.S3_BUCKET;\n\nexport default () => {\n /**\n * We need to extend the type for FilePhysicalStoragePlugin.\n * Otherwise, the `getPresignedPostPayload` doesn't know it has all required values in params.\n */\n return new ContextPlugin(context => {\n context.plugins.register(\n new FilePhysicalStoragePlugin({\n upload: async params => {\n const { settings, buffer, ...data } = params;\n\n const normalizer = createFileNormalizerFromContext(context);\n\n const { data: preSignedPostPayload, file } = await getPresignedPostPayload(\n await normalizer.normalizeFile(data as PresignedPostPayloadData),\n settings\n );\n\n const response = await uploadFileToS3(buffer, preSignedPostPayload);\n if (!response.ok) {\n throw Error(\"Unable to upload file.\");\n }\n\n return {\n data: preSignedPostPayload,\n file\n };\n },\n delete: async params => {\n const { key } = params;\n const s3 = new S3();\n\n if (!key || !S3_BUCKET) {\n return;\n }\n\n await s3.deleteObject({\n Bucket: S3_BUCKET,\n Key: key\n });\n }\n })\n );\n });\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAD,OAAA;AACA,IAAAE,wBAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAC,sBAAA,CAAAJ,OAAA;AACA,IAAAK,IAAA,GAAAL,OAAA;AACA,IAAAM,gCAAA,GAAAN,OAAA;AAGA,MAAMO,SAAS,GAAGC,OAAO,CAACC,GAAG,CAACF,SAAS;AAAC,IAAAG,QAAA,GAEzBA,CAAA,KAAM;EACjB;AACJ;AACA;AACA;EACI,OAAO,IAAIC,kBAAa,CAACC,OAAO,IAAI;IAChCA,OAAO,CAACC,OAAO,CAACC,QAAQ,CACpB,IAAIC,oDAAyB,CAAC;MAC1BC,MAAM,EAAE,MAAMC,MAAM,IAAI;QACpB,MAAM;UAAEC,QAAQ;UAAEC,MAAM;UAAE,GAAGC;QAAK,CAAC,GAAGH,MAAM;QAE5C,MAAMI,UAAU,GAAG,IAAAC,gEAA+B,EAACV,OAAO,CAAC;QAE3D,MAAM;UAAEQ,IAAI,EAAEG,oBAAoB;UAAEC;QAAK,CAAC,GAAG,MAAM,IAAAC,gDAAuB,EACtE,MAAMJ,UAAU,CAACK,aAAa,CAACN,IAAgC,CAAC,EAChEF,QACJ,CAAC;QAED,MAAMS,QAAQ,GAAG,MAAM,IAAAC,sBAAc,EAACT,MAAM,EAAEI,oBAAoB,CAAC;QACnE,IAAI,CAACI,QAAQ,CAACE,EAAE,EAAE;UACd,MAAMC,KAAK,CAAC,wBAAwB,CAAC;QACzC;QAEA,OAAO;UACHV,IAAI,EAAEG,oBAAoB;UAC1BC;QACJ,CAAC;MACL,CAAC;MACDO,MAAM,EAAE,MAAMd,MAAM,IAAI;QACpB,MAAM;UAAEe;QAAI,CAAC,GAAGf,MAAM;QACtB,MAAMgB,EAAE,GAAG,IAAIC,WAAE,CAAC,CAAC;QAEnB,IAAI,CAACF,GAAG,IAAI,CAACzB,SAAS,EAAE;UACpB;QACJ;QAEA,MAAM0B,EAAE,CAACE,YAAY,CAAC;UAClBC,MAAM,EAAE7B,SAAS;UACjB8B,GAAG,EAAEL;QACT,CAAC,CAAC;MACN;IACJ,CAAC,CACL,CAAC;EACL,CAAC,CAAC;AACN,CAAC;AAAAM,OAAA,CAAAC,OAAA,GAAA7B,QAAA","ignoreList":[]}
@@ -1,4 +0,0 @@
1
- import { GraphQLSchemaPlugin } from "@webiny/handler-graphql/types";
2
- import { FileManagerContext } from "@webiny/api-file-manager/types";
3
- declare const plugin: GraphQLSchemaPlugin<FileManagerContext>;
4
- export default plugin;
@@ -1 +0,0 @@
1
- {"version":3,"names":["_clientS","require","_pMap","_interopRequireDefault","_responses","_getPresignedPostPayload","_error","_checkPermissions","_CreateMultiPartUploadUseCase","_CompleteMultiPartUploadUseCase","_createFileNormalizerFromContext","plugin","type","name","schema","typeDefs","resolvers","FmQuery","getPreSignedPostPayload","_","args","context","checkPermissions","rwd","data","settings","fileManager","getSettings","WebinyError","file","normalizer","createFileNormalizerFromContext","presignedPayload","getPresignedPostPayload","normalizeFile","Response","e","ErrorResponse","message","code","getPreSignedPostPayloads","files","presignedPayloads","pMap","FmMutation","createMultiPartUpload","s3Client","S3","region","process","env","AWS_REGION","useCase","CreateMultiPartUploadUseCase","String","S3_BUCKET","multiPartUpload","execute","numberOfParts","completeMultiPartUpload","CompleteMultiPartUploadUseCase","fileKey","uploadId","_default","exports","default"],"sources":["graphqlFileStorageS3.ts"],"sourcesContent":["import { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport pMap from \"p-map\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/types\";\nimport { ErrorResponse, Response } from \"@webiny/handler-graphql/responses\";\nimport { FileManagerContext } from \"@webiny/api-file-manager/types\";\nimport { getPresignedPostPayload } from \"~/utils/getPresignedPostPayload\";\nimport WebinyError from \"@webiny/error\";\nimport { checkPermissions } from \"~/plugins/checkPermissions\";\nimport { PresignedPostPayloadData } from \"~/types\";\nimport { CreateMultiPartUploadUseCase } from \"~/multiPartUpload/CreateMultiPartUploadUseCase\";\nimport { CompleteMultiPartUploadUseCase } from \"~/multiPartUpload/CompleteMultiPartUploadUseCase\";\nimport { createFileNormalizerFromContext } from \"~/utils/createFileNormalizerFromContext\";\n\nconst plugin: GraphQLSchemaPlugin<FileManagerContext> = {\n type: \"graphql-schema\",\n name: \"graphql-schema-api-file-manager-s3\",\n schema: {\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 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 try {\n await checkPermissions(context, { rwd: \"w\" });\n\n const data = args.data as PresignedPostPayloadData;\n\n const settings = await context.fileManager.getSettings();\n if (!settings) {\n throw new WebinyError(\n \"Missing File Manager Settings.\",\n \"FILE_MANAGER_SETTINGS_ERROR\",\n { file: data }\n );\n }\n\n const normalizer = createFileNormalizerFromContext(context);\n const presignedPayload = await getPresignedPostPayload(\n await normalizer.normalizeFile(data),\n settings\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 await checkPermissions(context, { rwd: \"w\" });\n\n const files = args.data as PresignedPostPayloadData[];\n\n try {\n const settings = await context.fileManager.getSettings();\n if (!settings) {\n throw new WebinyError(\n \"Missing File Manager Settings.\",\n \"FILE_MANAGER_SETTINGS_ERROR\",\n { files }\n );\n }\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 );\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 await checkPermissions(context, { 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 await checkPermissions(context, { 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\nexport default plugin;\n"],"mappings":"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","ignoreList":[]}