@webiny/api-file-manager 0.0.0-mt-1

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 (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/handlers/download/index.d.ts +3 -0
  4. package/handlers/download/index.js +125 -0
  5. package/handlers/manage/index.d.ts +3 -0
  6. package/handlers/manage/index.js +70 -0
  7. package/handlers/transform/index.d.ts +3 -0
  8. package/handlers/transform/index.js +96 -0
  9. package/handlers/transform/loaders/imageLoader.d.ts +13 -0
  10. package/handlers/transform/loaders/imageLoader.js +106 -0
  11. package/handlers/transform/loaders/index.d.ts +13 -0
  12. package/handlers/transform/loaders/index.js +13 -0
  13. package/handlers/transform/loaders/sanitizeImageTransformations.d.ts +7 -0
  14. package/handlers/transform/loaders/sanitizeImageTransformations.js +51 -0
  15. package/handlers/transform/managers/imageManager.d.ts +9 -0
  16. package/handlers/transform/managers/imageManager.js +55 -0
  17. package/handlers/transform/managers/index.d.ts +9 -0
  18. package/handlers/transform/managers/index.js +13 -0
  19. package/handlers/transform/optimizeImage.d.ts +2 -0
  20. package/handlers/transform/optimizeImage.js +45 -0
  21. package/handlers/transform/transformImage.d.ts +9 -0
  22. package/handlers/transform/transformImage.js +30 -0
  23. package/handlers/transform/utils.d.ts +12 -0
  24. package/handlers/transform/utils.js +46 -0
  25. package/handlers/utils/createHandler.d.ts +24 -0
  26. package/handlers/utils/createHandler.js +68 -0
  27. package/handlers/utils/getEnvironment.d.ts +5 -0
  28. package/handlers/utils/getEnvironment.js +13 -0
  29. package/handlers/utils/getObjectParams.d.ts +10 -0
  30. package/handlers/utils/getObjectParams.js +27 -0
  31. package/handlers/utils/index.d.ts +3 -0
  32. package/handlers/utils/index.js +31 -0
  33. package/package.json +75 -0
  34. package/plugins/crud/files/validation.d.ts +3 -0
  35. package/plugins/crud/files/validation.js +41 -0
  36. package/plugins/crud/files.crud.d.ts +4 -0
  37. package/plugins/crud/files.crud.js +427 -0
  38. package/plugins/crud/settings.crud.d.ts +5 -0
  39. package/plugins/crud/settings.crud.js +115 -0
  40. package/plugins/crud/system.crud.d.ts +4 -0
  41. package/plugins/crud/system.crud.js +145 -0
  42. package/plugins/crud/utils/checkBasePermissions.d.ts +5 -0
  43. package/plugins/crud/utils/checkBasePermissions.js +33 -0
  44. package/plugins/crud/utils/createFileModel.d.ts +2 -0
  45. package/plugins/crud/utils/createFileModel.js +64 -0
  46. package/plugins/crud/utils/lifecycleEvents.d.ts +6 -0
  47. package/plugins/crud/utils/lifecycleEvents.js +33 -0
  48. package/plugins/definitions/FilePhysicalStoragePlugin.d.ts +22 -0
  49. package/plugins/definitions/FilePhysicalStoragePlugin.js +42 -0
  50. package/plugins/definitions/FilePlugin.d.ts +133 -0
  51. package/plugins/definitions/FilePlugin.js +64 -0
  52. package/plugins/definitions/FileStorageTransformPlugin.d.ts +34 -0
  53. package/plugins/definitions/FileStorageTransformPlugin.js +51 -0
  54. package/plugins/definitions/FilesStorageOperationsProviderPlugin.d.ts +9 -0
  55. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js +17 -0
  56. package/plugins/definitions/InstallationPlugin.d.ts +19 -0
  57. package/plugins/definitions/InstallationPlugin.js +40 -0
  58. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.d.ts +9 -0
  59. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js +17 -0
  60. package/plugins/definitions/SystemStorageOperationsProviderPlugin.d.ts +9 -0
  61. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js +17 -0
  62. package/plugins/graphql.d.ts +4 -0
  63. package/plugins/graphql.js +274 -0
  64. package/plugins/index.d.ts +2 -0
  65. package/plugins/index.js +24 -0
  66. package/plugins/storage/FileStorage.d.ts +31 -0
  67. package/plugins/storage/FileStorage.js +95 -0
  68. package/plugins/storage/index.d.ts +4 -0
  69. package/plugins/storage/index.js +22 -0
  70. package/types.d.ts +357 -0
  71. package/types.js +5 -0
  72. package/utils.d.ts +4 -0
  73. package/utils.js +16 -0
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _sharp = _interopRequireDefault(require("sharp"));
11
+
12
+ // @ts-ignore
13
+ var _default = async (buffer, type) => {
14
+ switch (type) {
15
+ case "image/png":
16
+ {
17
+ return await (0, _sharp.default)(buffer).resize({
18
+ width: 2560,
19
+ withoutEnlargement: true,
20
+ fit: "inside"
21
+ }).png({
22
+ compressionLevel: 9,
23
+ adaptiveFiltering: true,
24
+ force: true
25
+ }).withMetadata().toBuffer();
26
+ }
27
+
28
+ case "image/jpeg":
29
+ case "image/jpg":
30
+ {
31
+ return await (0, _sharp.default)(buffer).resize({
32
+ width: 2560,
33
+ withoutEnlargement: true,
34
+ fit: "inside"
35
+ }).toFormat("jpeg", {
36
+ quality: 90
37
+ }).toBuffer();
38
+ }
39
+
40
+ default:
41
+ return buffer;
42
+ }
43
+ };
44
+
45
+ exports.default = _default;
@@ -0,0 +1,9 @@
1
+ declare const _default: (buffer: any, transformations: any) => Promise<any>;
2
+ /**
3
+ * Only processing "width" at the moment.
4
+ * Check "sanitizeImageTransformations.js" to allow additional image processing transformations.
5
+ * @param buffer
6
+ * @param transformations
7
+ * @returns {Promise<Buffer>}
8
+ */
9
+ export default _default;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _sharp = _interopRequireDefault(require("sharp"));
11
+
12
+ // @ts-ignore
13
+
14
+ /**
15
+ * Only processing "width" at the moment.
16
+ * Check "sanitizeImageTransformations.js" to allow additional image processing transformations.
17
+ * @param buffer
18
+ * @param transformations
19
+ * @returns {Promise<Buffer>}
20
+ */
21
+ var _default = async (buffer, transformations) => {
22
+ const {
23
+ width
24
+ } = transformations;
25
+ return await (0, _sharp.default)(buffer).resize({
26
+ width
27
+ }).toBuffer();
28
+ };
29
+
30
+ exports.default = _default;
@@ -0,0 +1,12 @@
1
+ declare const SUPPORTED_IMAGES: string[];
2
+ declare const SUPPORTED_TRANSFORMABLE_IMAGES: string[];
3
+ declare const OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = "img-o-t-";
4
+ declare const OPTIMIZED_IMAGE_PREFIX = "img-o-";
5
+ declare const getOptimizedImageKeyPrefix: (key: any) => string;
6
+ declare const getOptimizedTransformedImageKeyPrefix: (key: any) => string;
7
+ interface GetImageKeyParams {
8
+ key: string;
9
+ transformations?: any;
10
+ }
11
+ declare const getImageKey: ({ key, transformations }: GetImageKeyParams) => string;
12
+ export { SUPPORTED_IMAGES, SUPPORTED_TRANSFORMABLE_IMAGES, OPTIMIZED_TRANSFORMED_IMAGE_PREFIX, OPTIMIZED_IMAGE_PREFIX, getImageKey, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix };
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getOptimizedTransformedImageKeyPrefix = exports.getOptimizedImageKeyPrefix = exports.getImageKey = exports.SUPPORTED_TRANSFORMABLE_IMAGES = exports.SUPPORTED_IMAGES = exports.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = exports.OPTIMIZED_IMAGE_PREFIX = void 0;
9
+
10
+ var _objectHash = _interopRequireDefault(require("object-hash"));
11
+
12
+ const SUPPORTED_IMAGES = [".jpg", ".jpeg", ".png", ".svg", ".gif"];
13
+ exports.SUPPORTED_IMAGES = SUPPORTED_IMAGES;
14
+ const SUPPORTED_TRANSFORMABLE_IMAGES = [".jpg", ".jpeg", ".png"];
15
+ exports.SUPPORTED_TRANSFORMABLE_IMAGES = SUPPORTED_TRANSFORMABLE_IMAGES;
16
+ const OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = "img-o-t-";
17
+ exports.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = OPTIMIZED_TRANSFORMED_IMAGE_PREFIX;
18
+ const OPTIMIZED_IMAGE_PREFIX = "img-o-";
19
+ exports.OPTIMIZED_IMAGE_PREFIX = OPTIMIZED_IMAGE_PREFIX;
20
+
21
+ const getOptimizedImageKeyPrefix = key => {
22
+ return `${OPTIMIZED_IMAGE_PREFIX}${(0, _objectHash.default)(key)}-`;
23
+ };
24
+
25
+ exports.getOptimizedImageKeyPrefix = getOptimizedImageKeyPrefix;
26
+
27
+ const getOptimizedTransformedImageKeyPrefix = key => {
28
+ return `${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${(0, _objectHash.default)(key)}-`;
29
+ };
30
+
31
+ exports.getOptimizedTransformedImageKeyPrefix = getOptimizedTransformedImageKeyPrefix;
32
+
33
+ const getImageKey = ({
34
+ key,
35
+ transformations
36
+ }) => {
37
+ if (!transformations) {
38
+ const prefix = getOptimizedImageKeyPrefix(key);
39
+ return prefix + key;
40
+ }
41
+
42
+ const prefix = getOptimizedTransformedImageKeyPrefix(key);
43
+ return `${prefix}${(0, _objectHash.default)(transformations)}-${key}`;
44
+ };
45
+
46
+ exports.getImageKey = getImageKey;
@@ -0,0 +1,24 @@
1
+ declare const _default: (handler: any) => (event: any) => Promise<{
2
+ body: string;
3
+ statusCode: number;
4
+ headers: {
5
+ "Cache-Control": string;
6
+ "Access-Control-Allow-Origin": string;
7
+ "Access-Control-Allow-Credentials": boolean;
8
+ };
9
+ isBase64Encoded?: undefined;
10
+ } | {
11
+ isBase64Encoded: boolean;
12
+ statusCode: any;
13
+ headers: any;
14
+ body: any;
15
+ } | {
16
+ statusCode: number;
17
+ headers: {
18
+ "Access-Control-Allow-Origin": string;
19
+ "Access-Control-Allow-Credentials": boolean;
20
+ };
21
+ body: string;
22
+ isBase64Encoded?: undefined;
23
+ }>;
24
+ export default _default;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
13
+
14
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
15
+
16
+ /**
17
+ * We need to respond with adequate CORS headers.
18
+ * @type {{"Access-Control-Allow-Origin": string, "Access-Control-Allow-Credentials": boolean}}
19
+ */
20
+ const baseHeaders = {
21
+ "Access-Control-Allow-Origin": "*",
22
+ "Access-Control-Allow-Credentials": true
23
+ };
24
+ const DEFAULT_CACHE_MAX_AGE = 30758400; // 1 year
25
+
26
+ var _default = handler => async event => {
27
+ if (event.httpMethod === "OPTIONS") {
28
+ return {
29
+ body: "",
30
+ statusCode: 204,
31
+ headers: _objectSpread(_objectSpread({}, baseHeaders), {}, {
32
+ "Cache-Control": "public, max-age=" + DEFAULT_CACHE_MAX_AGE
33
+ })
34
+ };
35
+ }
36
+
37
+ try {
38
+ const {
39
+ data,
40
+ statusCode,
41
+ headers = {}
42
+ } = await handler(event);
43
+ const isBuffer = Buffer.isBuffer(data);
44
+ const body = isBuffer ? data.toString("base64") : JSON.stringify({
45
+ error: false,
46
+ data,
47
+ message: null
48
+ });
49
+ return {
50
+ isBase64Encoded: isBuffer,
51
+ statusCode: statusCode || 200,
52
+ headers: _objectSpread(_objectSpread({}, baseHeaders), headers),
53
+ body
54
+ };
55
+ } catch (e) {
56
+ return {
57
+ statusCode: 500,
58
+ headers: baseHeaders,
59
+ body: JSON.stringify({
60
+ error: true,
61
+ data: null,
62
+ message: e.message
63
+ })
64
+ };
65
+ }
66
+ };
67
+
68
+ exports.default = _default;
@@ -0,0 +1,5 @@
1
+ declare const _default: () => {
2
+ bucket: string;
3
+ region: string;
4
+ };
5
+ export default _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _default = () => ({
9
+ bucket: process.env.S3_BUCKET,
10
+ region: process.env.AWS_REGION
11
+ });
12
+
13
+ exports.default = _default;
@@ -0,0 +1,10 @@
1
+ declare const _default: (filename: any) => {
2
+ Bucket: string;
3
+ Key: string;
4
+ };
5
+ /**
6
+ * Returns website's Bucket and file's Key values.
7
+ * @param filename
8
+ * @returns {{Bucket: string, Key: string}}
9
+ */
10
+ export default _default;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _getEnvironment = _interopRequireDefault(require("./getEnvironment"));
11
+
12
+ /**
13
+ * Returns website's Bucket and file's Key values.
14
+ * @param filename
15
+ * @returns {{Bucket: string, Key: string}}
16
+ */
17
+ var _default = filename => {
18
+ const {
19
+ bucket: Bucket
20
+ } = (0, _getEnvironment.default)();
21
+ return {
22
+ Bucket,
23
+ Key: `${filename}`
24
+ };
25
+ };
26
+
27
+ exports.default = _default;
@@ -0,0 +1,3 @@
1
+ export { default as getEnvironment } from "./getEnvironment";
2
+ export { default as createHandler } from "./createHandler";
3
+ export { default as getObjectParams } from "./getObjectParams";
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ Object.defineProperty(exports, "createHandler", {
9
+ enumerable: true,
10
+ get: function () {
11
+ return _createHandler.default;
12
+ }
13
+ });
14
+ Object.defineProperty(exports, "getEnvironment", {
15
+ enumerable: true,
16
+ get: function () {
17
+ return _getEnvironment.default;
18
+ }
19
+ });
20
+ Object.defineProperty(exports, "getObjectParams", {
21
+ enumerable: true,
22
+ get: function () {
23
+ return _getObjectParams.default;
24
+ }
25
+ });
26
+
27
+ var _getEnvironment = _interopRequireDefault(require("./getEnvironment"));
28
+
29
+ var _createHandler = _interopRequireDefault(require("./createHandler"));
30
+
31
+ var _getObjectParams = _interopRequireDefault(require("./getObjectParams"));
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@webiny/api-file-manager",
3
+ "version": "0.0.0-mt-1",
4
+ "main": "index.js",
5
+ "keywords": [
6
+ "fm:base"
7
+ ],
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/webiny/webiny-js.git",
11
+ "directory": "packages/api-file-manager"
12
+ },
13
+ "description": "The API for Webiny Admin's File Manager module.",
14
+ "contributors": [
15
+ "Pavel Denisjuk <pavel@webiny.com>",
16
+ "Sven Al Hamad <sven@webiny.com>",
17
+ "Adrian Smijulj <adrian@webiny.com>"
18
+ ],
19
+ "license": "MIT",
20
+ "dependencies": {
21
+ "@babel/runtime": "7.15.4",
22
+ "@commodo/fields": "1.1.2-beta.20",
23
+ "@webiny/api-i18n-content": "0.0.0-mt-1",
24
+ "@webiny/api-security": "0.0.0-mt-1",
25
+ "@webiny/api-tenancy": "0.0.0-mt-1",
26
+ "@webiny/api-upgrade": "0.0.0-mt-1",
27
+ "@webiny/error": "0.0.0-mt-1",
28
+ "@webiny/handler": "0.0.0-mt-1",
29
+ "@webiny/handler-client": "0.0.0-mt-1",
30
+ "@webiny/handler-graphql": "0.0.0-mt-1",
31
+ "@webiny/plugins": "0.0.0-mt-1",
32
+ "@webiny/project-utils": "0.0.0-mt-1",
33
+ "@webiny/validation": "0.0.0-mt-1",
34
+ "aws-sdk": "2.1026.0",
35
+ "commodo-fields-object": "1.0.6",
36
+ "mdbid": "1.0.0",
37
+ "object-hash": "1.3.1",
38
+ "sanitize-filename": "1.6.3"
39
+ },
40
+ "devDependencies": {
41
+ "@babel/cli": "^7.5.5",
42
+ "@babel/core": "^7.5.5",
43
+ "@babel/plugin-proposal-object-rest-spread": "^7.5.5",
44
+ "@babel/plugin-transform-runtime": "^7.5.5",
45
+ "@babel/preset-env": "^7.5.5",
46
+ "@babel/preset-typescript": "^7.0.0",
47
+ "@webiny/api-i18n": "^0.0.0-mt-1",
48
+ "@webiny/api-i18n-ddb": "^0.0.0-mt-1",
49
+ "@webiny/cli": "^0.0.0-mt-1",
50
+ "jest": "^26.6.3",
51
+ "rimraf": "^3.0.2",
52
+ "ttypescript": "^1.5.12",
53
+ "typescript": "^4.1.3"
54
+ },
55
+ "publishConfig": {
56
+ "access": "public",
57
+ "directory": "dist"
58
+ },
59
+ "scripts": {
60
+ "watch": "yarn webiny run watch",
61
+ "build": "yarn webiny run build"
62
+ },
63
+ "adio": {
64
+ "ignoreDirs": [
65
+ "__tests__"
66
+ ],
67
+ "ignore": {
68
+ "src": [
69
+ "aws-sdk",
70
+ "sharp"
71
+ ]
72
+ }
73
+ },
74
+ "gitHead": "37736d8456a6ecb342a6c3645060bd9a3f2d4bb0"
75
+ }
@@ -0,0 +1,3 @@
1
+ import { FilePlugin } from "../../definitions/FilePlugin";
2
+ declare const _default: () => FilePlugin[];
3
+ export default _default;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _FilePlugin = require("../../definitions/FilePlugin");
11
+
12
+ var _createFileModel = _interopRequireDefault(require("../utils/createFileModel"));
13
+
14
+ var _default = () => [new _FilePlugin.FilePlugin({
15
+ beforeCreate: async ({
16
+ data
17
+ }) => {
18
+ const FileModel = (0, _createFileModel.default)();
19
+ const fileData = new FileModel().populate(data);
20
+ await fileData.validate();
21
+ },
22
+ beforeUpdate: async ({
23
+ data
24
+ }) => {
25
+ const FileModel = (0, _createFileModel.default)(false);
26
+ const updatedFileData = new FileModel().populate(data);
27
+ await updatedFileData.validate();
28
+ },
29
+ beforeBatchCreate: async ({
30
+ data
31
+ }) => {
32
+ const FileModel = (0, _createFileModel.default)();
33
+
34
+ for (const input of data) {
35
+ const fileInstance = new FileModel().populate(input);
36
+ await fileInstance.validate();
37
+ }
38
+ }
39
+ })];
40
+
41
+ exports.default = _default;
@@ -0,0 +1,4 @@
1
+ import { FileManagerContext } from "../../types";
2
+ import { ContextPlugin } from "@webiny/handler/plugins/ContextPlugin";
3
+ declare const filesContextCrudPlugin: ContextPlugin<FileManagerContext>;
4
+ export default filesContextCrudPlugin;