@webiny/api-file-manager 0.0.0-unstable.5e7233243f → 0.0.0-unstable.606fc9c866

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/createFileManager/checkBasePermissions.d.ts +5 -0
  2. package/{plugins/crud/utils → createFileManager}/checkBasePermissions.js +4 -13
  3. package/createFileManager/checkBasePermissions.js.map +1 -0
  4. package/createFileManager/files.crud.d.ts +3 -0
  5. package/createFileManager/files.crud.js +322 -0
  6. package/createFileManager/files.crud.js.map +1 -0
  7. package/createFileManager/filevalidation.disabled.d.ts +0 -0
  8. package/createFileManager/filevalidation.disabled.js +55 -0
  9. package/createFileManager/filevalidation.disabled.js.map +1 -0
  10. package/createFileManager/index.d.ts +13 -0
  11. package/createFileManager/index.js +20 -0
  12. package/createFileManager/index.js.map +1 -0
  13. package/createFileManager/settings.crud.d.ts +3 -0
  14. package/createFileManager/settings.crud.js +91 -0
  15. package/createFileManager/settings.crud.js.map +1 -0
  16. package/createFileManager/system.crud.d.ts +3 -0
  17. package/createFileManager/system.crud.js +86 -0
  18. package/createFileManager/system.crud.js.map +1 -0
  19. package/graphql/index.d.ts +3 -0
  20. package/{plugins/graphql.js → graphql/index.js} +66 -68
  21. package/graphql/index.js.map +1 -0
  22. package/handlers/download/byAlias.d.ts +6 -0
  23. package/handlers/download/byAlias.js +89 -0
  24. package/handlers/download/byAlias.js.map +1 -0
  25. package/handlers/download/byExactKey.d.ts +2 -0
  26. package/handlers/download/byExactKey.js +57 -0
  27. package/handlers/download/byExactKey.js.map +1 -0
  28. package/handlers/download/extractFileInformation.d.ts +9 -0
  29. package/handlers/download/extractFileInformation.js +20 -0
  30. package/handlers/download/extractFileInformation.js.map +1 -0
  31. package/handlers/download/getS3Object.d.ts +10 -0
  32. package/handlers/download/getS3Object.js +57 -0
  33. package/handlers/download/getS3Object.js.map +1 -0
  34. package/handlers/download/index.d.ts +2 -3
  35. package/handlers/download/index.js +21 -126
  36. package/handlers/download/index.js.map +1 -1
  37. package/handlers/manage/index.js +1 -17
  38. package/handlers/manage/index.js.map +1 -1
  39. package/handlers/transform/index.js +23 -29
  40. package/handlers/transform/index.js.map +1 -1
  41. package/handlers/transform/legacyUtils.d.ts +17 -0
  42. package/handlers/transform/legacyUtils.js +42 -0
  43. package/handlers/transform/legacyUtils.js.map +1 -0
  44. package/handlers/transform/loaders/imageLoader.d.ts +1 -1
  45. package/handlers/transform/loaders/imageLoader.js +13 -24
  46. package/handlers/transform/loaders/imageLoader.js.map +1 -1
  47. package/handlers/transform/loaders/index.d.ts +1 -1
  48. package/handlers/transform/loaders/index.js +1 -4
  49. package/handlers/transform/loaders/index.js.map +1 -1
  50. package/handlers/transform/loaders/sanitizeImageTransformations.js +0 -13
  51. package/handlers/transform/loaders/sanitizeImageTransformations.js.map +1 -1
  52. package/handlers/transform/managers/imageManager.js +32 -21
  53. package/handlers/transform/managers/imageManager.js.map +1 -1
  54. package/handlers/transform/managers/index.js +1 -4
  55. package/handlers/transform/managers/index.js.map +1 -1
  56. package/handlers/transform/optimizeImage.js +1 -7
  57. package/handlers/transform/optimizeImage.js.map +1 -1
  58. package/handlers/transform/transformImage.js +1 -6
  59. package/handlers/transform/transformImage.js.map +1 -1
  60. package/handlers/transform/utils.d.ts +1 -1
  61. package/handlers/transform/utils.js +8 -18
  62. package/handlers/transform/utils.js.map +1 -1
  63. package/handlers/utils/getEnvironment.js +0 -2
  64. package/handlers/utils/getEnvironment.js.map +1 -1
  65. package/handlers/utils/getObjectParams.js +1 -5
  66. package/handlers/utils/getObjectParams.js.map +1 -1
  67. package/handlers/utils/index.js +1 -4
  68. package/handlers/utils/index.js.map +1 -1
  69. package/index.d.ts +6 -0
  70. package/index.js +68 -0
  71. package/index.js.map +1 -0
  72. package/package.json +25 -27
  73. package/plugins/{definitions/FilePhysicalStoragePlugin.d.ts → FilePhysicalStoragePlugin.d.ts} +1 -1
  74. package/plugins/{definitions/FilePhysicalStoragePlugin.js → FilePhysicalStoragePlugin.js} +1 -12
  75. package/plugins/{definitions/FilePhysicalStoragePlugin.js.map → FilePhysicalStoragePlugin.js.map} +1 -1
  76. package/plugins/{definitions/FileStorageTransformPlugin.d.ts → FileStorageTransformPlugin.d.ts} +1 -1
  77. package/plugins/{definitions/FileStorageTransformPlugin.js → FileStorageTransformPlugin.js} +2 -13
  78. package/plugins/{definitions/FileStorageTransformPlugin.js.map → FileStorageTransformPlugin.js.map} +1 -1
  79. package/plugins/index.d.ts +2 -2
  80. package/plugins/index.js +22 -19
  81. package/plugins/index.js.map +1 -1
  82. package/{plugins/storage → storage}/FileStorage.d.ts +6 -4
  83. package/storage/FileStorage.js +86 -0
  84. package/storage/FileStorage.js.map +1 -0
  85. package/types/file.d.ts +33 -0
  86. package/types/file.js +5 -0
  87. package/types/file.js.map +1 -0
  88. package/types/file.lifecycle.d.ts +44 -0
  89. package/types/file.lifecycle.js +5 -0
  90. package/types/file.lifecycle.js.map +1 -0
  91. package/types.d.ts +46 -47
  92. package/types.js +22 -0
  93. package/types.js.map +1 -1
  94. package/plugins/crud/files/validation.d.ts +0 -3
  95. package/plugins/crud/files/validation.js +0 -41
  96. package/plugins/crud/files/validation.js.map +0 -1
  97. package/plugins/crud/files.crud.d.ts +0 -4
  98. package/plugins/crud/files.crud.js +0 -437
  99. package/plugins/crud/files.crud.js.map +0 -1
  100. package/plugins/crud/settings.crud.d.ts +0 -5
  101. package/plugins/crud/settings.crud.js +0 -116
  102. package/plugins/crud/settings.crud.js.map +0 -1
  103. package/plugins/crud/system.crud.d.ts +0 -4
  104. package/plugins/crud/system.crud.js +0 -157
  105. package/plugins/crud/system.crud.js.map +0 -1
  106. package/plugins/crud/utils/checkBasePermissions.d.ts +0 -5
  107. package/plugins/crud/utils/checkBasePermissions.js.map +0 -1
  108. package/plugins/crud/utils/createFileModel.d.ts +0 -5
  109. package/plugins/crud/utils/createFileModel.js +0 -77
  110. package/plugins/crud/utils/createFileModel.js.map +0 -1
  111. package/plugins/crud/utils/lifecycleEvents.d.ts +0 -6
  112. package/plugins/crud/utils/lifecycleEvents.js +0 -38
  113. package/plugins/crud/utils/lifecycleEvents.js.map +0 -1
  114. package/plugins/definitions/FilePlugin.d.ts +0 -136
  115. package/plugins/definitions/FilePlugin.js +0 -70
  116. package/plugins/definitions/FilePlugin.js.map +0 -1
  117. package/plugins/definitions/FilesStorageOperationsProviderPlugin.d.ts +0 -9
  118. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js +0 -17
  119. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js.map +0 -1
  120. package/plugins/definitions/InstallationPlugin.d.ts +0 -19
  121. package/plugins/definitions/InstallationPlugin.js +0 -42
  122. package/plugins/definitions/InstallationPlugin.js.map +0 -1
  123. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.d.ts +0 -9
  124. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js +0 -17
  125. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js.map +0 -1
  126. package/plugins/definitions/SystemStorageOperationsProviderPlugin.d.ts +0 -9
  127. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js +0 -17
  128. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js.map +0 -1
  129. package/plugins/graphql.d.ts +0 -4
  130. package/plugins/graphql.js.map +0 -1
  131. package/plugins/storage/FileStorage.js +0 -105
  132. package/plugins/storage/FileStorage.js.map +0 -1
  133. package/plugins/storage/index.d.ts +0 -4
  134. package/plugins/storage/index.js +0 -26
  135. package/plugins/storage/index.js.map +0 -1
  136. package/utils.d.ts +0 -4
  137. package/utils.js +0 -16
  138. package/utils.js.map +0 -1
@@ -0,0 +1,5 @@
1
+ import { GetPermission } from "@webiny/api-security/types";
2
+ import { FilePermission } from "../types";
3
+ export declare const checkBasePermissions: (getPermission: GetPermission, check?: {
4
+ rwd?: string;
5
+ }) => Promise<FilePermission>;
@@ -3,31 +3,22 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
7
-
6
+ exports.checkBasePermissions = void 0;
8
7
  var _apiSecurity = require("@webiny/api-security");
9
-
10
- var _default = async (context, check = {}) => {
11
- await context.i18n.checkI18NContentPermission();
12
- const filePermission = await context.security.getPermission("fm.file");
13
-
8
+ const checkBasePermissions = async (getPermission, check = {}) => {
9
+ const filePermission = await getPermission("fm.file");
14
10
  if (!filePermission) {
15
11
  throw new _apiSecurity.NotAuthorizedError();
16
12
  }
17
-
18
13
  if (check.rwd && !hasRwd(filePermission, check.rwd)) {
19
14
  throw new _apiSecurity.NotAuthorizedError();
20
15
  }
21
-
22
16
  return filePermission;
23
17
  };
24
-
25
- exports.default = _default;
26
-
18
+ exports.checkBasePermissions = checkBasePermissions;
27
19
  const hasRwd = (filesFilePermission, rwd) => {
28
20
  if (typeof filesFilePermission.rwd !== "string") {
29
21
  return true;
30
22
  }
31
-
32
23
  return filesFilePermission.rwd.includes(rwd);
33
24
  };
@@ -0,0 +1 @@
1
+ {"version":3,"names":["checkBasePermissions","getPermission","check","filePermission","NotAuthorizedError","rwd","hasRwd","filesFilePermission","includes"],"sources":["checkBasePermissions.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport { GetPermission } from \"@webiny/api-security/types\";\nimport { FilePermission } from \"~/types\";\n\nexport const checkBasePermissions = async (\n getPermission: GetPermission,\n check: { rwd?: string } = {}\n): Promise<FilePermission> => {\n const filePermission = await getPermission<FilePermission>(\"fm.file\");\n\n if (!filePermission) {\n throw new NotAuthorizedError();\n }\n if (check.rwd && !hasRwd(filePermission, check.rwd)) {\n throw new NotAuthorizedError();\n }\n\n return filePermission;\n};\n\nconst hasRwd = (filesFilePermission: FilePermission, rwd: string): boolean => {\n if (typeof filesFilePermission.rwd !== \"string\") {\n return true;\n }\n\n return filesFilePermission.rwd.includes(rwd);\n};\n"],"mappings":";;;;;;AAAA;AAIO,MAAMA,oBAAoB,GAAG,OAChCC,aAA4B,EAC5BC,KAAuB,GAAG,CAAC,CAAC,KACF;EAC1B,MAAMC,cAAc,GAAG,MAAMF,aAAa,CAAiB,SAAS,CAAC;EAErE,IAAI,CAACE,cAAc,EAAE;IACjB,MAAM,IAAIC,+BAAkB,EAAE;EAClC;EACA,IAAIF,KAAK,CAACG,GAAG,IAAI,CAACC,MAAM,CAACH,cAAc,EAAED,KAAK,CAACG,GAAG,CAAC,EAAE;IACjD,MAAM,IAAID,+BAAkB,EAAE;EAClC;EAEA,OAAOD,cAAc;AACzB,CAAC;AAAC;AAEF,MAAMG,MAAM,GAAG,CAACC,mBAAmC,EAAEF,GAAW,KAAc;EAC1E,IAAI,OAAOE,mBAAmB,CAACF,GAAG,KAAK,QAAQ,EAAE;IAC7C,OAAO,IAAI;EACf;EAEA,OAAOE,mBAAmB,CAACF,GAAG,CAACG,QAAQ,CAACH,GAAG,CAAC;AAChD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FilesCRUD } from "../types";
2
+ import { FileManagerConfig } from "./index";
3
+ export declare const createFilesCrud: (config: FileManagerConfig) => FilesCRUD;
@@ -0,0 +1,322 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createFilesCrud = void 0;
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
+ var _handlerGraphql = require("@webiny/handler-graphql");
10
+ var _apiSecurity = require("@webiny/api-security");
11
+ var _pubsub = require("@webiny/pubsub");
12
+ var _error = _interopRequireDefault(require("@webiny/error"));
13
+ var _checkBasePermissions = require("./checkBasePermissions");
14
+ /**
15
+ * If permission is limited to "own" files only, check that current identity owns the file.
16
+ */
17
+ const checkOwnership = (file, permission, identity) => {
18
+ if ((permission === null || permission === void 0 ? void 0 : permission.own) === true) {
19
+ if (file.createdBy.id !== identity.id) {
20
+ throw new _apiSecurity.NotAuthorizedError();
21
+ }
22
+ }
23
+ };
24
+ const createFilesCrud = config => {
25
+ const {
26
+ storageOperations,
27
+ getLocaleCode,
28
+ getTenantId,
29
+ getIdentity,
30
+ getPermission,
31
+ WEBINY_VERSION
32
+ } = config;
33
+ return {
34
+ onFileBeforeCreate: (0, _pubsub.createTopic)("fileManager.onFileBeforeCreate"),
35
+ onFileAfterCreate: (0, _pubsub.createTopic)("fileManager.onFileAfterCreate"),
36
+ onFileBeforeBatchCreate: (0, _pubsub.createTopic)("fileManager.onFileBeforeBatchCreate"),
37
+ onFileAfterBatchCreate: (0, _pubsub.createTopic)("fileManager.onFileAfterBatchCreate"),
38
+ onFileBeforeUpdate: (0, _pubsub.createTopic)("fileManager.onFileBeforeUpdate"),
39
+ onFileAfterUpdate: (0, _pubsub.createTopic)("fileManager.onFileAfterUpdate"),
40
+ onFileBeforeDelete: (0, _pubsub.createTopic)("fileManager.onFileBeforeDelete"),
41
+ onFileAfterDelete: (0, _pubsub.createTopic)("fileManager.onFileAfterDelete"),
42
+ async getFile(id) {
43
+ const permission = await (0, _checkBasePermissions.checkBasePermissions)(getPermission, {
44
+ rwd: "r"
45
+ });
46
+ const file = await storageOperations.files.get({
47
+ where: {
48
+ id,
49
+ tenant: getTenantId(),
50
+ locale: getLocaleCode()
51
+ }
52
+ });
53
+ if (!file) {
54
+ throw new _handlerGraphql.NotFoundError(`File with id "${id}" does not exists.`);
55
+ }
56
+ checkOwnership(file, permission, getIdentity());
57
+ return file;
58
+ },
59
+ async createFile(input, meta) {
60
+ await (0, _checkBasePermissions.checkBasePermissions)(getPermission, {
61
+ rwd: "w"
62
+ });
63
+ const identity = getIdentity();
64
+
65
+ // Extract ID from file key
66
+ const [id] = input.key.split("/");
67
+ const file = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, input), {}, {
68
+ tags: Array.isArray(input.tags) ? input.tags : [],
69
+ aliases: Array.isArray(input.aliases) ? input.aliases : [],
70
+ id: input.id || id,
71
+ meta: (0, _objectSpread2.default)({
72
+ private: false
73
+ }, input.meta || {}),
74
+ tenant: getTenantId(),
75
+ createdOn: new Date().toISOString(),
76
+ createdBy: {
77
+ id: identity.id,
78
+ displayName: identity.displayName,
79
+ type: identity.type
80
+ },
81
+ locale: getLocaleCode(),
82
+ webinyVersion: WEBINY_VERSION
83
+ });
84
+ try {
85
+ await this.onFileBeforeCreate.publish({
86
+ file,
87
+ meta
88
+ });
89
+ const result = await storageOperations.files.create({
90
+ file
91
+ });
92
+ await this.onFileAfterCreate.publish({
93
+ file,
94
+ meta
95
+ });
96
+ return result;
97
+ } catch (ex) {
98
+ throw new _error.default(ex.message || "Could not create a file.", ex.code || "CREATE_FILE_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
99
+ file
100
+ }));
101
+ }
102
+ },
103
+ async updateFile(id, input) {
104
+ const permission = await (0, _checkBasePermissions.checkBasePermissions)(getPermission, {
105
+ rwd: "w"
106
+ });
107
+ const original = await storageOperations.files.get({
108
+ where: {
109
+ id,
110
+ tenant: getTenantId(),
111
+ locale: getLocaleCode()
112
+ }
113
+ });
114
+ if (!original) {
115
+ throw new _handlerGraphql.NotFoundError(`File with id "${id}" does not exists.`);
116
+ }
117
+ checkOwnership(original, permission, getIdentity());
118
+ const file = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input), {}, {
119
+ tags: Array.isArray(input.tags) ? input.tags : Array.isArray(original.tags) ? original.tags : [],
120
+ aliases: Array.isArray(input.aliases) ? input.aliases : Array.isArray(original.aliases) ? original.aliases : [],
121
+ id: original.id,
122
+ webinyVersion: WEBINY_VERSION
123
+ });
124
+ try {
125
+ await this.onFileBeforeUpdate.publish({
126
+ original,
127
+ file,
128
+ input
129
+ });
130
+ const result = await storageOperations.files.update({
131
+ original,
132
+ file
133
+ });
134
+ await this.onFileAfterUpdate.publish({
135
+ original,
136
+ file,
137
+ input
138
+ });
139
+ return result;
140
+ } catch (ex) {
141
+ throw new _error.default(ex.message || "Could not update a file.", ex.code || "UPDATE_FILE_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
142
+ original,
143
+ file
144
+ }));
145
+ }
146
+ },
147
+ async deleteFile(id) {
148
+ const permission = await (0, _checkBasePermissions.checkBasePermissions)(getPermission, {
149
+ rwd: "d"
150
+ });
151
+ const file = await storageOperations.files.get({
152
+ where: {
153
+ id,
154
+ tenant: getTenantId(),
155
+ locale: getLocaleCode()
156
+ }
157
+ });
158
+ if (!file) {
159
+ throw new _handlerGraphql.NotFoundError(`File with id "${id}" does not exists.`);
160
+ }
161
+ checkOwnership(file, permission, getIdentity());
162
+ try {
163
+ await this.onFileBeforeDelete.publish({
164
+ file
165
+ });
166
+ await storageOperations.files.delete({
167
+ file
168
+ });
169
+ await this.onFileAfterDelete.publish({
170
+ file
171
+ });
172
+ } catch (ex) {
173
+ throw new _error.default(ex.message || "Could not delete a file.", ex.code || "DELETE_FILE_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
174
+ id,
175
+ file
176
+ }));
177
+ }
178
+ return true;
179
+ },
180
+ async createFilesInBatch(inputs, meta) {
181
+ await (0, _checkBasePermissions.checkBasePermissions)(getPermission, {
182
+ rwd: "w"
183
+ });
184
+ const identity = getIdentity();
185
+ const tenant = getTenantId();
186
+ const locale = getLocaleCode();
187
+ const createdBy = {
188
+ id: identity.id,
189
+ displayName: identity.displayName,
190
+ type: identity.type
191
+ };
192
+ const files = inputs.map(input => {
193
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, input), {}, {
194
+ tags: Array.isArray(input.tags) ? input.tags : [],
195
+ aliases: Array.isArray(input.aliases) ? input.aliases : [],
196
+ meta: (0, _objectSpread2.default)({
197
+ private: false
198
+ }, input.meta || {}),
199
+ tenant,
200
+ createdOn: new Date().toISOString(),
201
+ createdBy,
202
+ locale,
203
+ webinyVersion: WEBINY_VERSION
204
+ });
205
+ });
206
+ try {
207
+ await this.onFileBeforeBatchCreate.publish({
208
+ files,
209
+ meta
210
+ });
211
+ const results = await storageOperations.files.createBatch({
212
+ files
213
+ });
214
+ await this.onFileAfterBatchCreate.publish({
215
+ files,
216
+ meta
217
+ });
218
+ return results;
219
+ } catch (ex) {
220
+ throw new _error.default(ex.message || "Could not create a batch of files.", ex.code || "CREATE_FILES_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
221
+ files
222
+ }));
223
+ }
224
+ },
225
+ async listFiles(params = {}) {
226
+ const permission = await (0, _checkBasePermissions.checkBasePermissions)(getPermission, {
227
+ rwd: "r"
228
+ });
229
+ const {
230
+ limit = 40,
231
+ search = "",
232
+ types = [],
233
+ tags = [],
234
+ ids = [],
235
+ after = null,
236
+ where: initialWhere,
237
+ sort: initialSort
238
+ } = params;
239
+ const where = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialWhere), {}, {
240
+ private: false,
241
+ locale: getLocaleCode(),
242
+ tenant: getTenantId()
243
+ });
244
+ /**
245
+ * Always override the createdBy received from the user, if any.
246
+ */
247
+ if (permission.own === true) {
248
+ const identity = getIdentity();
249
+ where.createdBy = identity.id;
250
+ }
251
+ /**
252
+ * We need to map the old GraphQL definition to the new one.
253
+ * That GQL definition is marked as deprecated.
254
+ */
255
+ /**
256
+ * To have standardized where objects across the applications, we transform the types into type_in.
257
+ */
258
+ if (Array.isArray(types) && types.length > 0 && !where.type_in) {
259
+ where.type_in = types;
260
+ }
261
+ /**
262
+ * We are assigning search to tag and name search.
263
+ * This should be treated as OR condition in the storage operations.
264
+ */
265
+ if (search && !where.search) {
266
+ where.search = search;
267
+ }
268
+ /**
269
+ * Same as on types/type_in.
270
+ */
271
+ if (Array.isArray(tags) && tags.length > 0 && !where.tag_in) {
272
+ where.tag_in = tags.map(tag => tag.toLowerCase());
273
+ }
274
+ /**
275
+ * Same as on types/type_in.
276
+ */
277
+ if (Array.isArray(ids) && ids.length > 0 && !where.id_in) {
278
+ where.id_in = ids;
279
+ }
280
+ const sort = Array.isArray(initialSort) && initialSort.length > 0 ? initialSort : ["id_DESC"];
281
+ try {
282
+ return await storageOperations.files.list({
283
+ where,
284
+ after,
285
+ limit,
286
+ sort
287
+ });
288
+ } catch (ex) {
289
+ throw new _error.default(ex.message || "Could not list files by given parameters.", ex.code || "FILE_TAG_SEARCH_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
290
+ where,
291
+ after,
292
+ limit,
293
+ sort
294
+ }));
295
+ }
296
+ },
297
+ async listTags({
298
+ where: initialWhere,
299
+ after,
300
+ limit
301
+ }) {
302
+ await (0, _checkBasePermissions.checkBasePermissions)(getPermission);
303
+ const where = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialWhere), {}, {
304
+ tenant: getTenantId(),
305
+ locale: getLocaleCode()
306
+ });
307
+ const params = {
308
+ where,
309
+ limit: limit || 1000000,
310
+ after
311
+ };
312
+ try {
313
+ return await storageOperations.files.tags(params);
314
+ } catch (ex) {
315
+ throw new _error.default(ex.message || "Could not search for tags.", ex.code || "FILE_TAG_SEARCH_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
316
+ params
317
+ }));
318
+ }
319
+ }
320
+ };
321
+ };
322
+ exports.createFilesCrud = createFilesCrud;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["checkOwnership","file","permission","identity","own","createdBy","id","NotAuthorizedError","createFilesCrud","config","storageOperations","getLocaleCode","getTenantId","getIdentity","getPermission","WEBINY_VERSION","onFileBeforeCreate","createTopic","onFileAfterCreate","onFileBeforeBatchCreate","onFileAfterBatchCreate","onFileBeforeUpdate","onFileAfterUpdate","onFileBeforeDelete","onFileAfterDelete","getFile","checkBasePermissions","rwd","files","get","where","tenant","locale","NotFoundError","createFile","input","meta","key","split","tags","Array","isArray","aliases","private","createdOn","Date","toISOString","displayName","type","webinyVersion","publish","result","create","ex","WebinyError","message","code","data","updateFile","original","update","deleteFile","delete","createFilesInBatch","inputs","map","results","createBatch","listFiles","params","limit","search","types","ids","after","initialWhere","sort","initialSort","length","type_in","tag_in","tag","toLowerCase","id_in","list","listTags"],"sources":["files.crud.ts"],"sourcesContent":["import { NotFoundError } from \"@webiny/handler-graphql\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport WebinyError from \"@webiny/error\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport {\n CreatedBy,\n File,\n FileManagerFilesStorageOperationsListParamsWhere,\n FileManagerFilesStorageOperationsTagsParamsWhere,\n FilePermission,\n FilesCRUD,\n FilesListOpts\n} from \"~/types\";\nimport { checkBasePermissions } from \"./checkBasePermissions\";\nimport { FileManagerConfig } from \"~/createFileManager/index\";\n\n/**\n * If permission is limited to \"own\" files only, check that current identity owns the file.\n */\nconst checkOwnership = (file: File, permission: FilePermission, identity: SecurityIdentity) => {\n if (permission?.own === true) {\n if (file.createdBy.id !== identity.id) {\n throw new NotAuthorizedError();\n }\n }\n};\n\nexport const createFilesCrud = (config: FileManagerConfig): FilesCRUD => {\n const {\n storageOperations,\n getLocaleCode,\n getTenantId,\n getIdentity,\n getPermission,\n WEBINY_VERSION\n } = config;\n\n return {\n onFileBeforeCreate: createTopic(\"fileManager.onFileBeforeCreate\"),\n onFileAfterCreate: createTopic(\"fileManager.onFileAfterCreate\"),\n onFileBeforeBatchCreate: createTopic(\"fileManager.onFileBeforeBatchCreate\"),\n onFileAfterBatchCreate: createTopic(\"fileManager.onFileAfterBatchCreate\"),\n onFileBeforeUpdate: createTopic(\"fileManager.onFileBeforeUpdate\"),\n onFileAfterUpdate: createTopic(\"fileManager.onFileAfterUpdate\"),\n onFileBeforeDelete: createTopic(\"fileManager.onFileBeforeDelete\"),\n onFileAfterDelete: createTopic(\"fileManager.onFileAfterDelete\"),\n async getFile(id: string) {\n const permission = await checkBasePermissions(getPermission, { rwd: \"r\" });\n\n const file = await storageOperations.files.get({\n where: {\n id,\n tenant: getTenantId(),\n locale: getLocaleCode()\n }\n });\n\n if (!file) {\n throw new NotFoundError(`File with id \"${id}\" does not exists.`);\n }\n\n checkOwnership(file, permission, getIdentity());\n\n return file;\n },\n async createFile(input, meta) {\n await checkBasePermissions(getPermission, { rwd: \"w\" });\n const identity = getIdentity();\n\n // Extract ID from file key\n const [id] = input.key.split(\"/\");\n\n const file: File = {\n ...input,\n tags: Array.isArray(input.tags) ? input.tags : [],\n aliases: Array.isArray(input.aliases) ? input.aliases : [],\n id: input.id || id,\n meta: {\n private: false,\n ...(input.meta || {})\n },\n tenant: getTenantId(),\n createdOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n locale: getLocaleCode(),\n webinyVersion: WEBINY_VERSION\n };\n\n try {\n await this.onFileBeforeCreate.publish({ file, meta });\n\n const result = await storageOperations.files.create({ file });\n\n await this.onFileAfterCreate.publish({ file, meta });\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create a file.\",\n ex.code || \"CREATE_FILE_ERROR\",\n {\n ...(ex.data || {}),\n file\n }\n );\n }\n },\n async updateFile(id, input) {\n const permission = await checkBasePermissions(getPermission, { rwd: \"w\" });\n\n const original = await storageOperations.files.get({\n where: {\n id,\n tenant: getTenantId(),\n locale: getLocaleCode()\n }\n });\n\n if (!original) {\n throw new NotFoundError(`File with id \"${id}\" does not exists.`);\n }\n\n checkOwnership(original, permission, getIdentity());\n\n const file: File = {\n ...original,\n ...input,\n tags: Array.isArray(input.tags)\n ? input.tags\n : Array.isArray(original.tags)\n ? original.tags\n : [],\n aliases: Array.isArray(input.aliases)\n ? input.aliases\n : Array.isArray(original.aliases)\n ? original.aliases\n : [],\n id: original.id,\n webinyVersion: WEBINY_VERSION\n };\n\n try {\n await this.onFileBeforeUpdate.publish({\n original,\n file,\n input\n });\n\n const result = await storageOperations.files.update({\n original,\n file\n });\n\n await this.onFileAfterUpdate.publish({\n original,\n file,\n input\n });\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update a file.\",\n ex.code || \"UPDATE_FILE_ERROR\",\n {\n ...(ex.data || {}),\n original,\n file\n }\n );\n }\n },\n async deleteFile(id) {\n const permission = await checkBasePermissions(getPermission, { rwd: \"d\" });\n\n const file = await storageOperations.files.get({\n where: {\n id,\n tenant: getTenantId(),\n locale: getLocaleCode()\n }\n });\n\n if (!file) {\n throw new NotFoundError(`File with id \"${id}\" does not exists.`);\n }\n\n checkOwnership(file, permission, getIdentity());\n\n try {\n await this.onFileBeforeDelete.publish({ file });\n\n await storageOperations.files.delete({\n file\n });\n\n await this.onFileAfterDelete.publish({ file });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete a file.\",\n ex.code || \"DELETE_FILE_ERROR\",\n {\n ...(ex.data || {}),\n id,\n file\n }\n );\n }\n\n return true;\n },\n async createFilesInBatch(inputs, meta) {\n await checkBasePermissions(getPermission, { rwd: \"w\" });\n\n const identity = getIdentity();\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n const createdBy: CreatedBy = {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n };\n\n const files: File[] = inputs.map(input => {\n return {\n ...input,\n tags: Array.isArray(input.tags) ? input.tags : [],\n aliases: Array.isArray(input.aliases) ? input.aliases : [],\n meta: {\n private: false,\n ...(input.meta || {})\n },\n tenant,\n createdOn: new Date().toISOString(),\n createdBy,\n locale,\n webinyVersion: WEBINY_VERSION\n };\n });\n\n try {\n await this.onFileBeforeBatchCreate.publish({ files, meta });\n const results = await storageOperations.files.createBatch({\n files\n });\n await this.onFileAfterBatchCreate.publish({ files, meta });\n return results;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create a batch of files.\",\n ex.code || \"CREATE_FILES_ERROR\",\n {\n ...(ex.data || {}),\n files\n }\n );\n }\n },\n async listFiles(params: FilesListOpts = {}) {\n const permission = await checkBasePermissions(getPermission, { rwd: \"r\" });\n\n const {\n limit = 40,\n search = \"\",\n types = [],\n tags = [],\n ids = [],\n after = null,\n where: initialWhere,\n sort: initialSort\n } = params;\n\n const where: FileManagerFilesStorageOperationsListParamsWhere = {\n ...initialWhere,\n private: false,\n locale: getLocaleCode(),\n tenant: getTenantId()\n };\n /**\n * Always override the createdBy received from the user, if any.\n */\n if (permission.own === true) {\n const identity = getIdentity();\n where.createdBy = identity.id;\n }\n /**\n * We need to map the old GraphQL definition to the new one.\n * That GQL definition is marked as deprecated.\n */\n /**\n * To have standardized where objects across the applications, we transform the types into type_in.\n */\n if (Array.isArray(types) && types.length > 0 && !where.type_in) {\n where.type_in = types;\n }\n /**\n * We are assigning search to tag and name search.\n * This should be treated as OR condition in the storage operations.\n */\n if (search && !where.search) {\n where.search = search;\n }\n /**\n * Same as on types/type_in.\n */\n if (Array.isArray(tags) && tags.length > 0 && !where.tag_in) {\n where.tag_in = tags.map(tag => tag.toLowerCase());\n }\n /**\n * Same as on types/type_in.\n */\n if (Array.isArray(ids) && ids.length > 0 && !where.id_in) {\n where.id_in = ids;\n }\n\n const sort =\n Array.isArray(initialSort) && initialSort.length > 0 ? initialSort : [\"id_DESC\"];\n try {\n return await storageOperations.files.list({\n where,\n after,\n limit,\n sort\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list files by given parameters.\",\n ex.code || \"FILE_TAG_SEARCH_ERROR\",\n {\n ...(ex.data || {}),\n where,\n after,\n limit,\n sort\n }\n );\n }\n },\n async listTags({ where: initialWhere, after, limit }) {\n await checkBasePermissions(getPermission);\n\n const where: FileManagerFilesStorageOperationsTagsParamsWhere = {\n ...initialWhere,\n tenant: getTenantId(),\n locale: getLocaleCode()\n };\n\n const params = {\n where,\n limit: limit || 1000000,\n after\n };\n\n try {\n return await storageOperations.files.tags(params);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not search for tags.\",\n ex.code || \"FILE_TAG_SEARCH_ERROR\",\n {\n ...(ex.data || {}),\n params\n }\n );\n }\n }\n };\n};\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AAWA;AAGA;AACA;AACA;AACA,MAAMA,cAAc,GAAG,CAACC,IAAU,EAAEC,UAA0B,EAAEC,QAA0B,KAAK;EAC3F,IAAI,CAAAD,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEE,GAAG,MAAK,IAAI,EAAE;IAC1B,IAAIH,IAAI,CAACI,SAAS,CAACC,EAAE,KAAKH,QAAQ,CAACG,EAAE,EAAE;MACnC,MAAM,IAAIC,+BAAkB,EAAE;IAClC;EACJ;AACJ,CAAC;AAEM,MAAMC,eAAe,GAAIC,MAAyB,IAAgB;EACrE,MAAM;IACFC,iBAAiB;IACjBC,aAAa;IACbC,WAAW;IACXC,WAAW;IACXC,aAAa;IACbC;EACJ,CAAC,GAAGN,MAAM;EAEV,OAAO;IACHO,kBAAkB,EAAE,IAAAC,mBAAW,EAAC,gCAAgC,CAAC;IACjEC,iBAAiB,EAAE,IAAAD,mBAAW,EAAC,+BAA+B,CAAC;IAC/DE,uBAAuB,EAAE,IAAAF,mBAAW,EAAC,qCAAqC,CAAC;IAC3EG,sBAAsB,EAAE,IAAAH,mBAAW,EAAC,oCAAoC,CAAC;IACzEI,kBAAkB,EAAE,IAAAJ,mBAAW,EAAC,gCAAgC,CAAC;IACjEK,iBAAiB,EAAE,IAAAL,mBAAW,EAAC,+BAA+B,CAAC;IAC/DM,kBAAkB,EAAE,IAAAN,mBAAW,EAAC,gCAAgC,CAAC;IACjEO,iBAAiB,EAAE,IAAAP,mBAAW,EAAC,+BAA+B,CAAC;IAC/D,MAAMQ,OAAO,CAACnB,EAAU,EAAE;MACtB,MAAMJ,UAAU,GAAG,MAAM,IAAAwB,0CAAoB,EAACZ,aAAa,EAAE;QAAEa,GAAG,EAAE;MAAI,CAAC,CAAC;MAE1E,MAAM1B,IAAI,GAAG,MAAMS,iBAAiB,CAACkB,KAAK,CAACC,GAAG,CAAC;QAC3CC,KAAK,EAAE;UACHxB,EAAE;UACFyB,MAAM,EAAEnB,WAAW,EAAE;UACrBoB,MAAM,EAAErB,aAAa;QACzB;MACJ,CAAC,CAAC;MAEF,IAAI,CAACV,IAAI,EAAE;QACP,MAAM,IAAIgC,6BAAa,CAAE,iBAAgB3B,EAAG,oBAAmB,CAAC;MACpE;MAEAN,cAAc,CAACC,IAAI,EAAEC,UAAU,EAAEW,WAAW,EAAE,CAAC;MAE/C,OAAOZ,IAAI;IACf,CAAC;IACD,MAAMiC,UAAU,CAACC,KAAK,EAAEC,IAAI,EAAE;MAC1B,MAAM,IAAAV,0CAAoB,EAACZ,aAAa,EAAE;QAAEa,GAAG,EAAE;MAAI,CAAC,CAAC;MACvD,MAAMxB,QAAQ,GAAGU,WAAW,EAAE;;MAE9B;MACA,MAAM,CAACP,EAAE,CAAC,GAAG6B,KAAK,CAACE,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC;MAEjC,MAAMrC,IAAU,+DACTkC,KAAK;QACRI,IAAI,EAAEC,KAAK,CAACC,OAAO,CAACN,KAAK,CAACI,IAAI,CAAC,GAAGJ,KAAK,CAACI,IAAI,GAAG,EAAE;QACjDG,OAAO,EAAEF,KAAK,CAACC,OAAO,CAACN,KAAK,CAACO,OAAO,CAAC,GAAGP,KAAK,CAACO,OAAO,GAAG,EAAE;QAC1DpC,EAAE,EAAE6B,KAAK,CAAC7B,EAAE,IAAIA,EAAE;QAClB8B,IAAI;UACAO,OAAO,EAAE;QAAK,GACVR,KAAK,CAACC,IAAI,IAAI,CAAC,CAAC,CACvB;QACDL,MAAM,EAAEnB,WAAW,EAAE;QACrBgC,SAAS,EAAE,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE;QACnCzC,SAAS,EAAE;UACPC,EAAE,EAAEH,QAAQ,CAACG,EAAE;UACfyC,WAAW,EAAE5C,QAAQ,CAAC4C,WAAW;UACjCC,IAAI,EAAE7C,QAAQ,CAAC6C;QACnB,CAAC;QACDhB,MAAM,EAAErB,aAAa,EAAE;QACvBsC,aAAa,EAAElC;MAAc,EAChC;MAED,IAAI;QACA,MAAM,IAAI,CAACC,kBAAkB,CAACkC,OAAO,CAAC;UAAEjD,IAAI;UAAEmC;QAAK,CAAC,CAAC;QAErD,MAAMe,MAAM,GAAG,MAAMzC,iBAAiB,CAACkB,KAAK,CAACwB,MAAM,CAAC;UAAEnD;QAAK,CAAC,CAAC;QAE7D,MAAM,IAAI,CAACiB,iBAAiB,CAACgC,OAAO,CAAC;UAAEjD,IAAI;UAAEmC;QAAK,CAAC,CAAC;QACpD,OAAOe,MAAM;MACjB,CAAC,CAAC,OAAOE,EAAE,EAAE;QACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,0BAA0B,EACxCF,EAAE,CAACG,IAAI,IAAI,mBAAmB,8DAEtBH,EAAE,CAACI,IAAI,IAAI,CAAC,CAAC;UACjBxD;QAAI,GAEX;MACL;IACJ,CAAC;IACD,MAAMyD,UAAU,CAACpD,EAAE,EAAE6B,KAAK,EAAE;MACxB,MAAMjC,UAAU,GAAG,MAAM,IAAAwB,0CAAoB,EAACZ,aAAa,EAAE;QAAEa,GAAG,EAAE;MAAI,CAAC,CAAC;MAE1E,MAAMgC,QAAQ,GAAG,MAAMjD,iBAAiB,CAACkB,KAAK,CAACC,GAAG,CAAC;QAC/CC,KAAK,EAAE;UACHxB,EAAE;UACFyB,MAAM,EAAEnB,WAAW,EAAE;UACrBoB,MAAM,EAAErB,aAAa;QACzB;MACJ,CAAC,CAAC;MAEF,IAAI,CAACgD,QAAQ,EAAE;QACX,MAAM,IAAI1B,6BAAa,CAAE,iBAAgB3B,EAAG,oBAAmB,CAAC;MACpE;MAEAN,cAAc,CAAC2D,QAAQ,EAAEzD,UAAU,EAAEW,WAAW,EAAE,CAAC;MAEnD,MAAMZ,IAAU,2FACT0D,QAAQ,GACRxB,KAAK;QACRI,IAAI,EAAEC,KAAK,CAACC,OAAO,CAACN,KAAK,CAACI,IAAI,CAAC,GACzBJ,KAAK,CAACI,IAAI,GACVC,KAAK,CAACC,OAAO,CAACkB,QAAQ,CAACpB,IAAI,CAAC,GAC5BoB,QAAQ,CAACpB,IAAI,GACb,EAAE;QACRG,OAAO,EAAEF,KAAK,CAACC,OAAO,CAACN,KAAK,CAACO,OAAO,CAAC,GAC/BP,KAAK,CAACO,OAAO,GACbF,KAAK,CAACC,OAAO,CAACkB,QAAQ,CAACjB,OAAO,CAAC,GAC/BiB,QAAQ,CAACjB,OAAO,GAChB,EAAE;QACRpC,EAAE,EAAEqD,QAAQ,CAACrD,EAAE;QACf2C,aAAa,EAAElC;MAAc,EAChC;MAED,IAAI;QACA,MAAM,IAAI,CAACM,kBAAkB,CAAC6B,OAAO,CAAC;UAClCS,QAAQ;UACR1D,IAAI;UACJkC;QACJ,CAAC,CAAC;QAEF,MAAMgB,MAAM,GAAG,MAAMzC,iBAAiB,CAACkB,KAAK,CAACgC,MAAM,CAAC;UAChDD,QAAQ;UACR1D;QACJ,CAAC,CAAC;QAEF,MAAM,IAAI,CAACqB,iBAAiB,CAAC4B,OAAO,CAAC;UACjCS,QAAQ;UACR1D,IAAI;UACJkC;QACJ,CAAC,CAAC;QACF,OAAOgB,MAAM;MACjB,CAAC,CAAC,OAAOE,EAAE,EAAE;QACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,0BAA0B,EACxCF,EAAE,CAACG,IAAI,IAAI,mBAAmB,8DAEtBH,EAAE,CAACI,IAAI,IAAI,CAAC,CAAC;UACjBE,QAAQ;UACR1D;QAAI,GAEX;MACL;IACJ,CAAC;IACD,MAAM4D,UAAU,CAACvD,EAAE,EAAE;MACjB,MAAMJ,UAAU,GAAG,MAAM,IAAAwB,0CAAoB,EAACZ,aAAa,EAAE;QAAEa,GAAG,EAAE;MAAI,CAAC,CAAC;MAE1E,MAAM1B,IAAI,GAAG,MAAMS,iBAAiB,CAACkB,KAAK,CAACC,GAAG,CAAC;QAC3CC,KAAK,EAAE;UACHxB,EAAE;UACFyB,MAAM,EAAEnB,WAAW,EAAE;UACrBoB,MAAM,EAAErB,aAAa;QACzB;MACJ,CAAC,CAAC;MAEF,IAAI,CAACV,IAAI,EAAE;QACP,MAAM,IAAIgC,6BAAa,CAAE,iBAAgB3B,EAAG,oBAAmB,CAAC;MACpE;MAEAN,cAAc,CAACC,IAAI,EAAEC,UAAU,EAAEW,WAAW,EAAE,CAAC;MAE/C,IAAI;QACA,MAAM,IAAI,CAACU,kBAAkB,CAAC2B,OAAO,CAAC;UAAEjD;QAAK,CAAC,CAAC;QAE/C,MAAMS,iBAAiB,CAACkB,KAAK,CAACkC,MAAM,CAAC;UACjC7D;QACJ,CAAC,CAAC;QAEF,MAAM,IAAI,CAACuB,iBAAiB,CAAC0B,OAAO,CAAC;UAAEjD;QAAK,CAAC,CAAC;MAClD,CAAC,CAAC,OAAOoD,EAAE,EAAE;QACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,0BAA0B,EACxCF,EAAE,CAACG,IAAI,IAAI,mBAAmB,8DAEtBH,EAAE,CAACI,IAAI,IAAI,CAAC,CAAC;UACjBnD,EAAE;UACFL;QAAI,GAEX;MACL;MAEA,OAAO,IAAI;IACf,CAAC;IACD,MAAM8D,kBAAkB,CAACC,MAAM,EAAE5B,IAAI,EAAE;MACnC,MAAM,IAAAV,0CAAoB,EAACZ,aAAa,EAAE;QAAEa,GAAG,EAAE;MAAI,CAAC,CAAC;MAEvD,MAAMxB,QAAQ,GAAGU,WAAW,EAAE;MAC9B,MAAMkB,MAAM,GAAGnB,WAAW,EAAE;MAC5B,MAAMoB,MAAM,GAAGrB,aAAa,EAAE;MAE9B,MAAMN,SAAoB,GAAG;QACzBC,EAAE,EAAEH,QAAQ,CAACG,EAAE;QACfyC,WAAW,EAAE5C,QAAQ,CAAC4C,WAAW;QACjCC,IAAI,EAAE7C,QAAQ,CAAC6C;MACnB,CAAC;MAED,MAAMpB,KAAa,GAAGoC,MAAM,CAACC,GAAG,CAAC9B,KAAK,IAAI;QACtC,mEACOA,KAAK;UACRI,IAAI,EAAEC,KAAK,CAACC,OAAO,CAACN,KAAK,CAACI,IAAI,CAAC,GAAGJ,KAAK,CAACI,IAAI,GAAG,EAAE;UACjDG,OAAO,EAAEF,KAAK,CAACC,OAAO,CAACN,KAAK,CAACO,OAAO,CAAC,GAAGP,KAAK,CAACO,OAAO,GAAG,EAAE;UAC1DN,IAAI;YACAO,OAAO,EAAE;UAAK,GACVR,KAAK,CAACC,IAAI,IAAI,CAAC,CAAC,CACvB;UACDL,MAAM;UACNa,SAAS,EAAE,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE;UACnCzC,SAAS;UACT2B,MAAM;UACNiB,aAAa,EAAElC;QAAc;MAErC,CAAC,CAAC;MAEF,IAAI;QACA,MAAM,IAAI,CAACI,uBAAuB,CAAC+B,OAAO,CAAC;UAAEtB,KAAK;UAAEQ;QAAK,CAAC,CAAC;QAC3D,MAAM8B,OAAO,GAAG,MAAMxD,iBAAiB,CAACkB,KAAK,CAACuC,WAAW,CAAC;UACtDvC;QACJ,CAAC,CAAC;QACF,MAAM,IAAI,CAACR,sBAAsB,CAAC8B,OAAO,CAAC;UAAEtB,KAAK;UAAEQ;QAAK,CAAC,CAAC;QAC1D,OAAO8B,OAAO;MAClB,CAAC,CAAC,OAAOb,EAAE,EAAE;QACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,oCAAoC,EAClDF,EAAE,CAACG,IAAI,IAAI,oBAAoB,8DAEvBH,EAAE,CAACI,IAAI,IAAI,CAAC,CAAC;UACjB7B;QAAK,GAEZ;MACL;IACJ,CAAC;IACD,MAAMwC,SAAS,CAACC,MAAqB,GAAG,CAAC,CAAC,EAAE;MACxC,MAAMnE,UAAU,GAAG,MAAM,IAAAwB,0CAAoB,EAACZ,aAAa,EAAE;QAAEa,GAAG,EAAE;MAAI,CAAC,CAAC;MAE1E,MAAM;QACF2C,KAAK,GAAG,EAAE;QACVC,MAAM,GAAG,EAAE;QACXC,KAAK,GAAG,EAAE;QACVjC,IAAI,GAAG,EAAE;QACTkC,GAAG,GAAG,EAAE;QACRC,KAAK,GAAG,IAAI;QACZ5C,KAAK,EAAE6C,YAAY;QACnBC,IAAI,EAAEC;MACV,CAAC,GAAGR,MAAM;MAEV,MAAMvC,KAAuD,+DACtD6C,YAAY;QACfhC,OAAO,EAAE,KAAK;QACdX,MAAM,EAAErB,aAAa,EAAE;QACvBoB,MAAM,EAAEnB,WAAW;MAAE,EACxB;MACD;AACZ;AACA;MACY,IAAIV,UAAU,CAACE,GAAG,KAAK,IAAI,EAAE;QACzB,MAAMD,QAAQ,GAAGU,WAAW,EAAE;QAC9BiB,KAAK,CAACzB,SAAS,GAAGF,QAAQ,CAACG,EAAE;MACjC;MACA;AACZ;AACA;AACA;MACY;AACZ;AACA;MACY,IAAIkC,KAAK,CAACC,OAAO,CAAC+B,KAAK,CAAC,IAAIA,KAAK,CAACM,MAAM,GAAG,CAAC,IAAI,CAAChD,KAAK,CAACiD,OAAO,EAAE;QAC5DjD,KAAK,CAACiD,OAAO,GAAGP,KAAK;MACzB;MACA;AACZ;AACA;AACA;MACY,IAAID,MAAM,IAAI,CAACzC,KAAK,CAACyC,MAAM,EAAE;QACzBzC,KAAK,CAACyC,MAAM,GAAGA,MAAM;MACzB;MACA;AACZ;AACA;MACY,IAAI/B,KAAK,CAACC,OAAO,CAACF,IAAI,CAAC,IAAIA,IAAI,CAACuC,MAAM,GAAG,CAAC,IAAI,CAAChD,KAAK,CAACkD,MAAM,EAAE;QACzDlD,KAAK,CAACkD,MAAM,GAAGzC,IAAI,CAAC0B,GAAG,CAACgB,GAAG,IAAIA,GAAG,CAACC,WAAW,EAAE,CAAC;MACrD;MACA;AACZ;AACA;MACY,IAAI1C,KAAK,CAACC,OAAO,CAACgC,GAAG,CAAC,IAAIA,GAAG,CAACK,MAAM,GAAG,CAAC,IAAI,CAAChD,KAAK,CAACqD,KAAK,EAAE;QACtDrD,KAAK,CAACqD,KAAK,GAAGV,GAAG;MACrB;MAEA,MAAMG,IAAI,GACNpC,KAAK,CAACC,OAAO,CAACoC,WAAW,CAAC,IAAIA,WAAW,CAACC,MAAM,GAAG,CAAC,GAAGD,WAAW,GAAG,CAAC,SAAS,CAAC;MACpF,IAAI;QACA,OAAO,MAAMnE,iBAAiB,CAACkB,KAAK,CAACwD,IAAI,CAAC;UACtCtD,KAAK;UACL4C,KAAK;UACLJ,KAAK;UACLM;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,OAAOvB,EAAE,EAAE;QACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,2CAA2C,EACzDF,EAAE,CAACG,IAAI,IAAI,uBAAuB,8DAE1BH,EAAE,CAACI,IAAI,IAAI,CAAC,CAAC;UACjB3B,KAAK;UACL4C,KAAK;UACLJ,KAAK;UACLM;QAAI,GAEX;MACL;IACJ,CAAC;IACD,MAAMS,QAAQ,CAAC;MAAEvD,KAAK,EAAE6C,YAAY;MAAED,KAAK;MAAEJ;IAAM,CAAC,EAAE;MAClD,MAAM,IAAA5C,0CAAoB,EAACZ,aAAa,CAAC;MAEzC,MAAMgB,KAAuD,+DACtD6C,YAAY;QACf5C,MAAM,EAAEnB,WAAW,EAAE;QACrBoB,MAAM,EAAErB,aAAa;MAAE,EAC1B;MAED,MAAM0D,MAAM,GAAG;QACXvC,KAAK;QACLwC,KAAK,EAAEA,KAAK,IAAI,OAAO;QACvBI;MACJ,CAAC;MAED,IAAI;QACA,OAAO,MAAMhE,iBAAiB,CAACkB,KAAK,CAACW,IAAI,CAAC8B,MAAM,CAAC;MACrD,CAAC,CAAC,OAAOhB,EAAE,EAAE;QACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,4BAA4B,EAC1CF,EAAE,CAACG,IAAI,IAAI,uBAAuB,8DAE1BH,EAAE,CAACI,IAAI,IAAI,CAAC,CAAC;UACjBY;QAAM,GAEb;MACL;IACJ;EACJ,CAAC;AACL,CAAC;AAAC"}
File without changes
@@ -0,0 +1,55 @@
1
+ // /**
2
+ // * Package @commodo/fields does not have types
3
+ // */
4
+ // // @ts-ignore
5
+ // import { withFields, string, number, onSet } from "@commodo/fields";
6
+ // /**
7
+ // * Package commodo-fields-object does not have types
8
+ // */
9
+ // // @ts-ignore
10
+ // import { object } from "commodo-fields-object";
11
+ // import { validation } from "@webiny/validation";
12
+ //
13
+ // export default (create = true) => {
14
+ // return withFields({
15
+ // key: string({
16
+ // validation: validation.create(`${create ? "required," : ""}maxLength:1000`)
17
+ // }),
18
+ // name: string({ validation: validation.create("maxLength:1000") }),
19
+ // size: number(),
20
+ // type: string({ validation: validation.create("maxLength:255") }),
21
+ // meta: object({ value: { private: false } }),
22
+ // tags: onSet((value: string[]) => {
23
+ // if (!Array.isArray(value)) {
24
+ // return null;
25
+ // }
26
+ //
27
+ // return value.map(item => item.toLowerCase());
28
+ // })(
29
+ // string({
30
+ // list: true,
31
+ // validation: (tags: string[]) => {
32
+ // if (!Array.isArray(tags)) {
33
+ // return;
34
+ // }
35
+ //
36
+ // if (tags.length > 15) {
37
+ // throw Error("You cannot set more than 15 tags.");
38
+ // }
39
+ //
40
+ // for (let i = 0; i < tags.length; i++) {
41
+ // const tag = tags[i];
42
+ // if (typeof tag !== "string") {
43
+ // throw Error("Tag must be typeof string.");
44
+ // }
45
+ //
46
+ // if (tag.length > 50) {
47
+ // throw Error(`Tag ${tag} is more than 50 characters long.`);
48
+ // }
49
+ // }
50
+ // }
51
+ // })
52
+ // )
53
+ // })();
54
+ // };
55
+ "use strict";
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["filevalidation.disabled.ts"],"sourcesContent":["// /**\n// * Package @commodo/fields does not have types\n// */\n// // @ts-ignore\n// import { withFields, string, number, onSet } from \"@commodo/fields\";\n// /**\n// * Package commodo-fields-object does not have types\n// */\n// // @ts-ignore\n// import { object } from \"commodo-fields-object\";\n// import { validation } from \"@webiny/validation\";\n//\n// export default (create = true) => {\n// return withFields({\n// key: string({\n// validation: validation.create(`${create ? \"required,\" : \"\"}maxLength:1000`)\n// }),\n// name: string({ validation: validation.create(\"maxLength:1000\") }),\n// size: number(),\n// type: string({ validation: validation.create(\"maxLength:255\") }),\n// meta: object({ value: { private: false } }),\n// tags: onSet((value: string[]) => {\n// if (!Array.isArray(value)) {\n// return null;\n// }\n//\n// return value.map(item => item.toLowerCase());\n// })(\n// string({\n// list: true,\n// validation: (tags: string[]) => {\n// if (!Array.isArray(tags)) {\n// return;\n// }\n//\n// if (tags.length > 15) {\n// throw Error(\"You cannot set more than 15 tags.\");\n// }\n//\n// for (let i = 0; i < tags.length; i++) {\n// const tag = tags[i];\n// if (typeof tag !== \"string\") {\n// throw Error(\"Tag must be typeof string.\");\n// }\n//\n// if (tag.length > 50) {\n// throw Error(`Tag ${tag} is more than 50 characters long.`);\n// }\n// }\n// }\n// })\n// )\n// })();\n// };\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA"}
@@ -0,0 +1,13 @@
1
+ import { FileManagerContextObject, FileManagerStorageOperations } from "../types";
2
+ import { GetPermission, SecurityIdentity } from "@webiny/api-security/types";
3
+ import { FileStorage } from "../storage/FileStorage";
4
+ export interface FileManagerConfig {
5
+ storageOperations: FileManagerStorageOperations;
6
+ getTenantId: () => string;
7
+ getLocaleCode: () => string;
8
+ getIdentity: () => SecurityIdentity;
9
+ getPermission: GetPermission;
10
+ storage: FileStorage;
11
+ WEBINY_VERSION: string;
12
+ }
13
+ export declare const createFileManager: (config: FileManagerConfig) => FileManagerContextObject;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createFileManager = void 0;
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
+ var _files = require("./files.crud");
10
+ var _settings = require("./settings.crud");
11
+ var _system = require("./system.crud");
12
+ const createFileManager = config => {
13
+ const filesCrud = (0, _files.createFilesCrud)(config);
14
+ const settingsCrud = (0, _settings.createSettingsCrud)(config);
15
+ const systemCrud = (0, _system.createSystemCrud)(config);
16
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, filesCrud), settingsCrud), systemCrud), {}, {
17
+ storage: config.storage
18
+ });
19
+ };
20
+ exports.createFileManager = createFileManager;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createFileManager","config","filesCrud","createFilesCrud","settingsCrud","createSettingsCrud","systemCrud","createSystemCrud","storage"],"sources":["index.ts"],"sourcesContent":["import { FileManagerContextObject, FileManagerStorageOperations } from \"~/types\";\nimport { GetPermission, SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createFilesCrud } from \"~/createFileManager/files.crud\";\nimport { FileStorage } from \"~/storage/FileStorage\";\nimport { createSettingsCrud } from \"~/createFileManager/settings.crud\";\nimport { createSystemCrud } from \"~/createFileManager/system.crud\";\n\nexport interface FileManagerConfig {\n storageOperations: FileManagerStorageOperations;\n getTenantId: () => string;\n getLocaleCode: () => string;\n getIdentity: () => SecurityIdentity;\n getPermission: GetPermission;\n storage: FileStorage;\n WEBINY_VERSION: string;\n}\n\nexport const createFileManager = (config: FileManagerConfig): FileManagerContextObject => {\n const filesCrud = createFilesCrud(config);\n const settingsCrud = createSettingsCrud(config);\n const systemCrud = createSystemCrud(config);\n\n return {\n ...filesCrud,\n ...settingsCrud,\n ...systemCrud,\n storage: config.storage\n };\n};\n"],"mappings":";;;;;;;;AAEA;AAEA;AACA;AAYO,MAAMA,iBAAiB,GAAIC,MAAyB,IAA+B;EACtF,MAAMC,SAAS,GAAG,IAAAC,sBAAe,EAACF,MAAM,CAAC;EACzC,MAAMG,YAAY,GAAG,IAAAC,4BAAkB,EAACJ,MAAM,CAAC;EAC/C,MAAMK,UAAU,GAAG,IAAAC,wBAAgB,EAACN,MAAM,CAAC;EAE3C,2HACOC,SAAS,GACTE,YAAY,GACZE,UAAU;IACbE,OAAO,EAAEP,MAAM,CAACO;EAAO;AAE/B,CAAC;AAAC"}
@@ -0,0 +1,3 @@
1
+ import { SettingsCRUD } from "../types";
2
+ import { FileManagerConfig } from "./index";
3
+ export declare const createSettingsCrud: ({ storageOperations, getTenantId }: FileManagerConfig) => SettingsCRUD;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createSettingsCrud = void 0;
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
+ var _fields = require("@commodo/fields");
10
+ var _validation = require("@webiny/validation");
11
+ /**
12
+ * Package @commodo/fields does not have types.
13
+ */
14
+ // @ts-ignore
15
+
16
+ const CreateDataModel = (0, _fields.withFields)({
17
+ uploadMinFileSize: (0, _fields.number)({
18
+ value: 0,
19
+ validation: _validation.validation.create("gte:0")
20
+ }),
21
+ uploadMaxFileSize: (0, _fields.number)({
22
+ value: 26214401
23
+ }),
24
+ srcPrefix: (0, _fields.onSet)(value => {
25
+ // Make sure srcPrefix always ends with forward slash.
26
+ if (typeof value === "string") {
27
+ return value.endsWith("/") ? value : value + "/";
28
+ }
29
+ return value;
30
+ })((0, _fields.string)({
31
+ value: "/files/"
32
+ }))
33
+ })();
34
+ const UpdateDataModel = (0, _fields.withFields)({
35
+ uploadMinFileSize: (0, _fields.number)({
36
+ validation: _validation.validation.create("gte:0")
37
+ }),
38
+ uploadMaxFileSize: (0, _fields.number)(),
39
+ srcPrefix: (0, _fields.onSet)(value => {
40
+ // Make sure srcPrefix always ends with forward slash.
41
+ if (typeof value === "string") {
42
+ return value.endsWith("/") ? value : value + "/";
43
+ }
44
+ return value;
45
+ })((0, _fields.string)())
46
+ })();
47
+ const createSettingsCrud = ({
48
+ storageOperations,
49
+ getTenantId
50
+ }) => {
51
+ return {
52
+ async getSettings() {
53
+ return storageOperations.settings.get({
54
+ tenant: getTenantId()
55
+ });
56
+ },
57
+ async createSettings(data) {
58
+ const settings = new CreateDataModel().populate(data);
59
+ await settings.validate();
60
+ const settingsData = await settings.toJSON();
61
+ return storageOperations.settings.create({
62
+ data: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, settingsData), {}, {
63
+ tenant: getTenantId()
64
+ })
65
+ });
66
+ },
67
+ async updateSettings(data) {
68
+ const updatedValue = new UpdateDataModel().populate(data);
69
+ await updatedValue.validate();
70
+ const existingSettings = await storageOperations.settings.get({
71
+ tenant: getTenantId()
72
+ });
73
+ const updatedSettings = await updatedValue.toJSON({
74
+ onlyDirty: true
75
+ });
76
+ return storageOperations.settings.update({
77
+ original: existingSettings,
78
+ data: (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, existingSettings), updatedSettings), {}, {
79
+ tenant: getTenantId()
80
+ })
81
+ });
82
+ },
83
+ async deleteSettings() {
84
+ await storageOperations.settings.delete({
85
+ tenant: getTenantId()
86
+ });
87
+ return true;
88
+ }
89
+ };
90
+ };
91
+ exports.createSettingsCrud = createSettingsCrud;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CreateDataModel","withFields","uploadMinFileSize","number","value","validation","create","uploadMaxFileSize","srcPrefix","onSet","endsWith","string","UpdateDataModel","createSettingsCrud","storageOperations","getTenantId","getSettings","settings","get","tenant","createSettings","data","populate","validate","settingsData","toJSON","updateSettings","updatedValue","existingSettings","updatedSettings","onlyDirty","update","original","deleteSettings","delete"],"sources":["settings.crud.ts"],"sourcesContent":["/**\n * Package @commodo/fields does not have types.\n */\n// @ts-ignore\nimport { withFields, string, number, onSet } from \"@commodo/fields\";\nimport { validation } from \"@webiny/validation\";\nimport { FileManagerSettings, SettingsCRUD } from \"~/types\";\nimport { FileManagerConfig } from \"~/createFileManager/index\";\n\nconst CreateDataModel = withFields({\n uploadMinFileSize: number({ value: 0, validation: validation.create(\"gte:0\") }),\n uploadMaxFileSize: number({ value: 26214401 }),\n srcPrefix: onSet((value?: string) => {\n // Make sure srcPrefix always ends with forward slash.\n if (typeof value === \"string\") {\n return value.endsWith(\"/\") ? value : value + \"/\";\n }\n return value;\n })(string({ value: \"/files/\" }))\n})();\n\nconst UpdateDataModel = withFields({\n uploadMinFileSize: number({\n validation: validation.create(\"gte:0\")\n }),\n uploadMaxFileSize: number(),\n srcPrefix: onSet((value?: string) => {\n // Make sure srcPrefix always ends with forward slash.\n if (typeof value === \"string\") {\n return value.endsWith(\"/\") ? value : value + \"/\";\n }\n return value;\n })(string())\n})();\n\nexport const createSettingsCrud = ({\n storageOperations,\n getTenantId\n}: FileManagerConfig): SettingsCRUD => {\n return {\n async getSettings() {\n return storageOperations.settings.get({ tenant: getTenantId() });\n },\n async createSettings(data) {\n const settings = new CreateDataModel().populate(data);\n await settings.validate();\n\n const settingsData: FileManagerSettings = await settings.toJSON();\n\n return storageOperations.settings.create({\n data: { ...settingsData, tenant: getTenantId() }\n });\n },\n async updateSettings(data) {\n const updatedValue = new UpdateDataModel().populate(data);\n await updatedValue.validate();\n\n const existingSettings = (await storageOperations.settings.get({\n tenant: getTenantId()\n })) as FileManagerSettings;\n\n const updatedSettings: Partial<FileManagerSettings> = await updatedValue.toJSON({\n onlyDirty: true\n });\n\n return storageOperations.settings.update({\n original: existingSettings,\n data: {\n ...existingSettings,\n ...updatedSettings,\n tenant: getTenantId()\n }\n });\n },\n async deleteSettings() {\n await storageOperations.settings.delete({ tenant: getTenantId() });\n\n return true;\n }\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { SystemCRUD } from "../types";
2
+ import { FileManagerConfig } from "./index";
3
+ export declare const createSystemCrud: ({ storageOperations, getTenantId, getIdentity, WEBINY_VERSION }: FileManagerConfig) => SystemCRUD;