@webiny/api-file-manager 0.0.0-mt-3 → 0.0.0-unstable.13771d80a8

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 (156) hide show
  1. package/createFileManager/checkBasePermissions.d.ts +5 -0
  2. package/createFileManager/checkBasePermissions.js +24 -0
  3. package/createFileManager/checkBasePermissions.js.map +1 -0
  4. package/createFileManager/files.crud.d.ts +3 -0
  5. package/createFileManager/files.crud.js +336 -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/graphql/index.js +277 -0
  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 +20 -118
  36. package/handlers/download/index.js.map +1 -0
  37. package/handlers/manage/index.d.ts +5 -3
  38. package/handlers/manage/index.js +43 -58
  39. package/handlers/manage/index.js.map +1 -0
  40. package/handlers/transform/index.d.ts +2 -3
  41. package/handlers/transform/index.js +66 -78
  42. package/handlers/transform/index.js.map +1 -0
  43. package/handlers/transform/legacyUtils.d.ts +17 -0
  44. package/handlers/transform/legacyUtils.js +42 -0
  45. package/handlers/transform/legacyUtils.js.map +1 -0
  46. package/handlers/transform/loaders/imageLoader.d.ts +26 -9
  47. package/handlers/transform/loaders/imageLoader.js +13 -25
  48. package/handlers/transform/loaders/imageLoader.js.map +1 -0
  49. package/handlers/transform/loaders/index.d.ts +4 -9
  50. package/handlers/transform/loaders/index.js +1 -4
  51. package/handlers/transform/loaders/index.js.map +1 -0
  52. package/handlers/transform/loaders/sanitizeImageTransformations.d.ts +7 -3
  53. package/handlers/transform/loaders/sanitizeImageTransformations.js +24 -30
  54. package/handlers/transform/loaders/sanitizeImageTransformations.js.map +1 -0
  55. package/handlers/transform/managers/imageManager.d.ts +12 -6
  56. package/handlers/transform/managers/imageManager.js +37 -28
  57. package/handlers/transform/managers/imageManager.js.map +1 -0
  58. package/handlers/transform/managers/index.d.ts +2 -6
  59. package/handlers/transform/managers/index.js +1 -4
  60. package/handlers/transform/managers/index.js.map +1 -0
  61. package/handlers/transform/optimizeImage.d.ts +2 -1
  62. package/handlers/transform/optimizeImage.js +4 -7
  63. package/handlers/transform/optimizeImage.js.map +1 -0
  64. package/handlers/transform/transformImage.d.ts +5 -4
  65. package/handlers/transform/transformImage.js +4 -9
  66. package/handlers/transform/transformImage.js.map +1 -0
  67. package/handlers/transform/utils.d.ts +2 -2
  68. package/handlers/transform/utils.js +8 -18
  69. package/handlers/transform/utils.js.map +1 -0
  70. package/handlers/types.d.ts +8 -0
  71. package/handlers/types.js +5 -0
  72. package/handlers/types.js.map +1 -0
  73. package/handlers/utils/getEnvironment.js +0 -2
  74. package/handlers/utils/getEnvironment.js.map +1 -0
  75. package/handlers/utils/getObjectParams.d.ts +3 -4
  76. package/handlers/utils/getObjectParams.js +1 -7
  77. package/handlers/utils/getObjectParams.js.map +1 -0
  78. package/handlers/utils/index.d.ts +0 -1
  79. package/handlers/utils/index.js +1 -12
  80. package/handlers/utils/index.js.map +1 -0
  81. package/index.d.ts +6 -0
  82. package/index.js +68 -0
  83. package/index.js.map +1 -0
  84. package/package.json +29 -30
  85. package/plugins/FilePhysicalStoragePlugin.d.ts +21 -0
  86. package/plugins/FilePhysicalStoragePlugin.js +31 -0
  87. package/plugins/FilePhysicalStoragePlugin.js.map +1 -0
  88. package/plugins/FileStorageTransformPlugin.d.ts +34 -0
  89. package/plugins/FileStorageTransformPlugin.js +40 -0
  90. package/plugins/FileStorageTransformPlugin.js.map +1 -0
  91. package/plugins/crud/files/validation.js +1 -1
  92. package/plugins/crud/files/validation.js.map +1 -0
  93. package/plugins/crud/files.crud.d.ts +1 -1
  94. package/plugins/crud/files.crud.js +48 -44
  95. package/plugins/crud/files.crud.js.map +1 -0
  96. package/plugins/crud/settings.crud.d.ts +1 -1
  97. package/plugins/crud/settings.crud.js +10 -9
  98. package/plugins/crud/settings.crud.js.map +1 -0
  99. package/plugins/crud/system.crud.d.ts +1 -1
  100. package/plugins/crud/system.crud.js +18 -10
  101. package/plugins/crud/system.crud.js.map +1 -0
  102. package/plugins/crud/utils/checkBasePermissions.js +1 -1
  103. package/plugins/crud/utils/checkBasePermissions.js.map +1 -0
  104. package/plugins/crud/utils/createFileModel.d.ts +3 -0
  105. package/plugins/crud/utils/createFileModel.js +13 -0
  106. package/plugins/crud/utils/createFileModel.js.map +1 -0
  107. package/plugins/crud/utils/lifecycleEvents.d.ts +2 -2
  108. package/plugins/crud/utils/lifecycleEvents.js +6 -1
  109. package/plugins/crud/utils/lifecycleEvents.js.map +1 -0
  110. package/plugins/definitions/FilePhysicalStoragePlugin.d.ts +10 -11
  111. package/plugins/definitions/FilePhysicalStoragePlugin.js +1 -1
  112. package/plugins/definitions/FilePhysicalStoragePlugin.js.map +1 -0
  113. package/plugins/definitions/FilePlugin.d.ts +6 -3
  114. package/plugins/definitions/FilePlugin.js +9 -3
  115. package/plugins/definitions/FilePlugin.js.map +1 -0
  116. package/plugins/definitions/FileStorageTransformPlugin.d.ts +9 -9
  117. package/plugins/definitions/FileStorageTransformPlugin.js +1 -1
  118. package/plugins/definitions/FileStorageTransformPlugin.js.map +1 -0
  119. package/plugins/definitions/FilesStorageOperationsProviderPlugin.d.ts +4 -4
  120. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js +1 -1
  121. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js.map +1 -0
  122. package/plugins/definitions/InstallationPlugin.d.ts +9 -9
  123. package/plugins/definitions/InstallationPlugin.js +5 -3
  124. package/plugins/definitions/InstallationPlugin.js.map +1 -0
  125. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.d.ts +4 -4
  126. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js +1 -1
  127. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js.map +1 -0
  128. package/plugins/definitions/SystemStorageOperationsProviderPlugin.d.ts +4 -4
  129. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js +1 -1
  130. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js.map +1 -0
  131. package/plugins/graphql.js +20 -4
  132. package/plugins/graphql.js.map +1 -0
  133. package/plugins/index.d.ts +2 -2
  134. package/plugins/index.js +22 -19
  135. package/plugins/index.js.map +1 -0
  136. package/plugins/storage/FileStorage.d.ts +23 -24
  137. package/plugins/storage/FileStorage.js +28 -20
  138. package/plugins/storage/FileStorage.js.map +1 -0
  139. package/plugins/storage/index.d.ts +1 -1
  140. package/plugins/storage/index.js +6 -2
  141. package/plugins/storage/index.js.map +1 -0
  142. package/storage/FileStorage.d.ts +30 -0
  143. package/storage/FileStorage.js +86 -0
  144. package/storage/FileStorage.js.map +1 -0
  145. package/types/file.d.ts +33 -0
  146. package/types/file.js +5 -0
  147. package/types/file.js.map +1 -0
  148. package/types/file.lifecycle.d.ts +40 -0
  149. package/types/file.lifecycle.js +5 -0
  150. package/types/file.lifecycle.js.map +1 -0
  151. package/types.d.ts +49 -50
  152. package/types.js +22 -0
  153. package/types.js.map +1 -0
  154. package/utils.js.map +1 -0
  155. package/handlers/utils/createHandler.d.ts +0 -24
  156. package/handlers/utils/createHandler.js +0 -68
@@ -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>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.checkBasePermissions = void 0;
7
+ var _apiSecurity = require("@webiny/api-security");
8
+ const checkBasePermissions = async (getPermission, check = {}) => {
9
+ const filePermission = await getPermission("fm.file");
10
+ if (!filePermission) {
11
+ throw new _apiSecurity.NotAuthorizedError();
12
+ }
13
+ if (check.rwd && !hasRwd(filePermission, check.rwd)) {
14
+ throw new _apiSecurity.NotAuthorizedError();
15
+ }
16
+ return filePermission;
17
+ };
18
+ exports.checkBasePermissions = checkBasePermissions;
19
+ const hasRwd = (filesFilePermission, rwd) => {
20
+ if (typeof filesFilePermission.rwd !== "string") {
21
+ return true;
22
+ }
23
+ return filesFilePermission.rwd.includes(rwd);
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,336 @@
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
+ const BATCH_CREATE_MAX_FILES = 20;
15
+
16
+ /**
17
+ * If permission is limited to "own" files only, check that current identity owns the file.
18
+ */
19
+ const checkOwnership = (file, permission, identity) => {
20
+ if ((permission === null || permission === void 0 ? void 0 : permission.own) === true) {
21
+ if (file.createdBy.id !== identity.id) {
22
+ throw new _apiSecurity.NotAuthorizedError();
23
+ }
24
+ }
25
+ };
26
+ const createFilesCrud = config => {
27
+ const {
28
+ storageOperations,
29
+ getLocaleCode,
30
+ getTenantId,
31
+ getIdentity,
32
+ getPermission,
33
+ WEBINY_VERSION
34
+ } = config;
35
+ return {
36
+ onFileBeforeCreate: (0, _pubsub.createTopic)("fileManager.onFileBeforeCreate"),
37
+ onFileAfterCreate: (0, _pubsub.createTopic)("fileManager.onFileAfterCreate"),
38
+ onFileBeforeBatchCreate: (0, _pubsub.createTopic)("fileManager.onFileBeforeBatchCreate"),
39
+ onFileAfterBatchCreate: (0, _pubsub.createTopic)("fileManager.onFileAfterBatchCreate"),
40
+ onFileBeforeUpdate: (0, _pubsub.createTopic)("fileManager.onFileBeforeUpdate"),
41
+ onFileAfterUpdate: (0, _pubsub.createTopic)("fileManager.onFileAfterUpdate"),
42
+ onFileBeforeDelete: (0, _pubsub.createTopic)("fileManager.onFileBeforeDelete"),
43
+ onFileAfterDelete: (0, _pubsub.createTopic)("fileManager.onFileAfterDelete"),
44
+ async getFile(id) {
45
+ const permission = await (0, _checkBasePermissions.checkBasePermissions)(getPermission, {
46
+ rwd: "r"
47
+ });
48
+ const file = await storageOperations.files.get({
49
+ where: {
50
+ id,
51
+ tenant: getTenantId(),
52
+ locale: getLocaleCode()
53
+ }
54
+ });
55
+ if (!file) {
56
+ throw new _handlerGraphql.NotFoundError(`File with id "${id}" does not exists.`);
57
+ }
58
+ checkOwnership(file, permission, getIdentity());
59
+ return file;
60
+ },
61
+ async createFile(input) {
62
+ await (0, _checkBasePermissions.checkBasePermissions)(getPermission, {
63
+ rwd: "w"
64
+ });
65
+ const identity = getIdentity();
66
+
67
+ // Extract ID from file key
68
+ const [id] = input.key.split("/");
69
+ const file = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, input), {}, {
70
+ tags: Array.isArray(input.tags) ? input.tags : [],
71
+ aliases: Array.isArray(input.aliases) ? input.aliases : [],
72
+ id: input.id || id,
73
+ meta: (0, _objectSpread2.default)({
74
+ private: false
75
+ }, input.meta || {}),
76
+ tenant: getTenantId(),
77
+ createdOn: new Date().toISOString(),
78
+ createdBy: {
79
+ id: identity.id,
80
+ displayName: identity.displayName,
81
+ type: identity.type
82
+ },
83
+ locale: getLocaleCode(),
84
+ webinyVersion: WEBINY_VERSION
85
+ });
86
+ try {
87
+ await this.onFileBeforeCreate.publish({
88
+ file
89
+ });
90
+ const result = await storageOperations.files.create({
91
+ file
92
+ });
93
+ await this.onFileAfterCreate.publish({
94
+ file
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) {
181
+ if (!Array.isArray(inputs)) {
182
+ throw new _error.default(`"data" must be an array.`, "CREATE_FILES_NON_ARRAY");
183
+ }
184
+ if (inputs.length === 0) {
185
+ throw new _error.default(`"data" argument must contain at least one file.`, "CREATE_FILES_MIN_FILES");
186
+ }
187
+ if (inputs.length > BATCH_CREATE_MAX_FILES) {
188
+ throw new _error.default(`"data" argument must not contain more than ${BATCH_CREATE_MAX_FILES} files.`, "CREATE_FILES_MAX_FILES");
189
+ }
190
+ await (0, _checkBasePermissions.checkBasePermissions)(getPermission, {
191
+ rwd: "w"
192
+ });
193
+ const identity = getIdentity();
194
+ const tenant = getTenantId();
195
+ const locale = getLocaleCode();
196
+ const createdBy = {
197
+ id: identity.id,
198
+ displayName: identity.displayName,
199
+ type: identity.type
200
+ };
201
+ const files = inputs.map(input => {
202
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, input), {}, {
203
+ tags: Array.isArray(input.tags) ? input.tags : [],
204
+ aliases: Array.isArray(input.aliases) ? input.aliases : [],
205
+ meta: (0, _objectSpread2.default)({
206
+ private: false
207
+ }, input.meta || {}),
208
+ tenant,
209
+ createdOn: new Date().toISOString(),
210
+ createdBy,
211
+ locale,
212
+ webinyVersion: WEBINY_VERSION
213
+ });
214
+ });
215
+ try {
216
+ await this.onFileBeforeBatchCreate.publish({
217
+ files
218
+ });
219
+ const results = await storageOperations.files.createBatch({
220
+ files
221
+ });
222
+ await this.onFileAfterBatchCreate.publish({
223
+ files
224
+ });
225
+ return results;
226
+ } catch (ex) {
227
+ 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 || {}), {}, {
228
+ files
229
+ }));
230
+ }
231
+ },
232
+ async listFiles(params = {}) {
233
+ const permission = await (0, _checkBasePermissions.checkBasePermissions)(getPermission, {
234
+ rwd: "r"
235
+ });
236
+ const {
237
+ limit = 40,
238
+ search = "",
239
+ types = [],
240
+ tags = [],
241
+ ids = [],
242
+ after = null,
243
+ where: initialWhere,
244
+ sort: initialSort
245
+ } = params;
246
+ const where = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialWhere), {}, {
247
+ private: false,
248
+ locale: getLocaleCode(),
249
+ tenant: getTenantId()
250
+ });
251
+ /**
252
+ * Always override the createdBy received from the user, if any.
253
+ */
254
+ if (permission.own === true) {
255
+ const identity = getIdentity();
256
+ where.createdBy = identity.id;
257
+ }
258
+ /**
259
+ * We need to map the old GraphQL definition to the new one.
260
+ * That GQL definition is marked as deprecated.
261
+ */
262
+ /**
263
+ * To have standardized where objects across the applications, we transform the types into type_in.
264
+ */
265
+ if (Array.isArray(types) && types.length > 0 && !where.type_in) {
266
+ where.type_in = types;
267
+ }
268
+ /**
269
+ * We are assigning search to tag and name search.
270
+ * This should be treated as OR condition in the storage operations.
271
+ */
272
+ if (search && !where.search) {
273
+ where.search = search;
274
+ }
275
+ /**
276
+ * Same as on types/type_in.
277
+ */
278
+ if (Array.isArray(tags) && tags.length > 0 && !where.tag_in) {
279
+ where.tag_in = tags.map(tag => tag.toLowerCase());
280
+ }
281
+ /**
282
+ * Same as on types/type_in.
283
+ */
284
+ if (Array.isArray(ids) && ids.length > 0 && !where.id_in) {
285
+ where.id_in = ids;
286
+ }
287
+ const sort = Array.isArray(initialSort) && initialSort.length > 0 ? initialSort : ["id_DESC"];
288
+ try {
289
+ return await storageOperations.files.list({
290
+ where,
291
+ after,
292
+ limit,
293
+ sort
294
+ });
295
+ } catch (ex) {
296
+ 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 || {}), {}, {
297
+ where,
298
+ after,
299
+ limit,
300
+ sort
301
+ }));
302
+ }
303
+ },
304
+ async listTags({
305
+ where: initialWhere,
306
+ after,
307
+ limit
308
+ }) {
309
+ await (0, _checkBasePermissions.checkBasePermissions)(getPermission);
310
+ const where = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialWhere), {}, {
311
+ tenant: getTenantId(),
312
+ locale: getLocaleCode()
313
+ });
314
+ const params = {
315
+ where,
316
+ limit: limit || 100000,
317
+ after
318
+ };
319
+ try {
320
+ const [tags] = await storageOperations.files.tags(params);
321
+ if (Array.isArray(tags) === false) {
322
+ return [];
323
+ }
324
+ /**
325
+ * just to keep it standardized, sort by the tag ASC
326
+ */
327
+ return tags.sort();
328
+ } catch (ex) {
329
+ 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 || {}), {}, {
330
+ params
331
+ }));
332
+ }
333
+ }
334
+ };
335
+ };
336
+ exports.createFilesCrud = createFilesCrud;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["BATCH_CREATE_MAX_FILES","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","key","split","tags","Array","isArray","aliases","meta","private","createdOn","Date","toISOString","displayName","type","webinyVersion","publish","result","create","ex","WebinyError","message","code","data","updateFile","original","update","deleteFile","delete","createFilesInBatch","inputs","length","map","results","createBatch","listFiles","params","limit","search","types","ids","after","initialWhere","sort","initialSort","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\nconst BATCH_CREATE_MAX_FILES = 20;\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) {\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 });\n\n const result = await storageOperations.files.create({ file });\n\n await this.onFileAfterCreate.publish({ file });\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) {\n if (!Array.isArray(inputs)) {\n throw new WebinyError(`\"data\" must be an array.`, \"CREATE_FILES_NON_ARRAY\");\n }\n\n if (inputs.length === 0) {\n throw new WebinyError(\n `\"data\" argument must contain at least one file.`,\n \"CREATE_FILES_MIN_FILES\"\n );\n }\n\n if (inputs.length > BATCH_CREATE_MAX_FILES) {\n throw new WebinyError(\n `\"data\" argument must not contain more than ${BATCH_CREATE_MAX_FILES} files.`,\n \"CREATE_FILES_MAX_FILES\"\n );\n }\n\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 });\n const results = await storageOperations.files.createBatch({\n files\n });\n await this.onFileAfterBatchCreate.publish({ files });\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 || 100000,\n after\n };\n\n try {\n const [tags] = await storageOperations.files.tags(params);\n if (Array.isArray(tags) === false) {\n return [];\n }\n /**\n * just to keep it standardized, sort by the tag ASC\n */\n return tags.sort();\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":"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"}
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;