adminforth 1.4.3-next.20 → 1.4.3-next.21

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 (146) hide show
  1. package/dist/adminforth/auth.d.ts +31 -0
  2. package/dist/adminforth/auth.d.ts.map +1 -0
  3. package/dist/adminforth/auth.js +119 -0
  4. package/dist/adminforth/auth.js.map +1 -0
  5. package/dist/adminforth/basePlugin.d.ts +23 -0
  6. package/dist/adminforth/basePlugin.d.ts.map +1 -0
  7. package/dist/adminforth/basePlugin.js +51 -0
  8. package/dist/adminforth/basePlugin.js.map +1 -0
  9. package/dist/adminforth/dataConnectors/baseConnector.d.ts +95 -0
  10. package/dist/adminforth/dataConnectors/baseConnector.d.ts.map +1 -0
  11. package/dist/adminforth/dataConnectors/baseConnector.js +178 -0
  12. package/dist/adminforth/dataConnectors/baseConnector.js.map +1 -0
  13. package/dist/adminforth/dataConnectors/clickhouse.d.ts +93 -0
  14. package/dist/adminforth/dataConnectors/clickhouse.d.ts.map +1 -0
  15. package/dist/adminforth/dataConnectors/clickhouse.js +297 -0
  16. package/dist/adminforth/dataConnectors/clickhouse.js.map +1 -0
  17. package/dist/adminforth/dataConnectors/mongo.d.ts +94 -0
  18. package/dist/adminforth/dataConnectors/mongo.d.ts.map +1 -0
  19. package/dist/adminforth/dataConnectors/mongo.js +168 -0
  20. package/dist/adminforth/dataConnectors/mongo.js.map +1 -0
  21. package/dist/adminforth/dataConnectors/postgres.d.ts +72 -0
  22. package/dist/adminforth/dataConnectors/postgres.d.ts.map +1 -0
  23. package/dist/adminforth/dataConnectors/postgres.js +298 -0
  24. package/dist/adminforth/dataConnectors/postgres.js.map +1 -0
  25. package/dist/adminforth/dataConnectors/sqlite.d.ts +67 -0
  26. package/dist/adminforth/dataConnectors/sqlite.d.ts.map +1 -0
  27. package/dist/adminforth/dataConnectors/sqlite.js +251 -0
  28. package/dist/adminforth/dataConnectors/sqlite.js.map +1 -0
  29. package/dist/adminforth/index.d.ts +94 -0
  30. package/dist/adminforth/index.d.ts.map +1 -0
  31. package/dist/adminforth/index.js +357 -0
  32. package/dist/adminforth/index.js.map +1 -0
  33. package/dist/adminforth/modules/codeInjector.d.ts +38 -0
  34. package/dist/adminforth/modules/codeInjector.d.ts.map +1 -0
  35. package/dist/adminforth/modules/codeInjector.js +673 -0
  36. package/dist/adminforth/modules/codeInjector.js.map +1 -0
  37. package/dist/adminforth/modules/configValidator.d.ts +13 -0
  38. package/dist/adminforth/modules/configValidator.d.ts.map +1 -0
  39. package/dist/adminforth/modules/configValidator.js +511 -0
  40. package/dist/adminforth/modules/configValidator.js.map +1 -0
  41. package/dist/adminforth/modules/operationalResource.d.ts +17 -0
  42. package/dist/adminforth/modules/operationalResource.d.ts.map +1 -0
  43. package/dist/adminforth/modules/operationalResource.js +75 -0
  44. package/dist/adminforth/modules/operationalResource.js.map +1 -0
  45. package/dist/adminforth/modules/restApi.d.ts +11 -0
  46. package/dist/adminforth/modules/restApi.d.ts.map +1 -0
  47. package/dist/adminforth/modules/restApi.js +657 -0
  48. package/dist/adminforth/modules/restApi.js.map +1 -0
  49. package/dist/adminforth/modules/styleGenerator.d.ts +9 -0
  50. package/dist/adminforth/modules/styleGenerator.d.ts.map +1 -0
  51. package/dist/adminforth/modules/styleGenerator.js +47 -0
  52. package/dist/adminforth/modules/styleGenerator.js.map +1 -0
  53. package/dist/adminforth/modules/styles.d.ts +96 -0
  54. package/dist/adminforth/modules/styles.d.ts.map +1 -0
  55. package/dist/adminforth/modules/styles.js +105 -0
  56. package/dist/adminforth/modules/styles.js.map +1 -0
  57. package/dist/adminforth/modules/utils.d.ts +39 -0
  58. package/dist/adminforth/modules/utils.d.ts.map +1 -0
  59. package/dist/adminforth/modules/utils.js +421 -0
  60. package/dist/adminforth/modules/utils.js.map +1 -0
  61. package/dist/adminforth/plugins/audit-log/index.d.ts +25 -0
  62. package/dist/adminforth/plugins/audit-log/index.d.ts.map +1 -0
  63. package/dist/adminforth/plugins/audit-log/index.js +129 -0
  64. package/dist/adminforth/plugins/audit-log/index.js.map +1 -0
  65. package/dist/adminforth/plugins/audit-log/types.d.ts +35 -0
  66. package/dist/adminforth/plugins/audit-log/types.d.ts.map +1 -0
  67. package/dist/adminforth/plugins/audit-log/types.js +2 -0
  68. package/dist/adminforth/plugins/audit-log/types.js.map +1 -0
  69. package/dist/adminforth/plugins/chat-gpt/index.d.ts +14 -0
  70. package/dist/adminforth/plugins/chat-gpt/index.d.ts.map +1 -0
  71. package/dist/adminforth/plugins/chat-gpt/index.js +147 -0
  72. package/dist/adminforth/plugins/chat-gpt/index.js.map +1 -0
  73. package/dist/adminforth/plugins/chat-gpt/types.d.ts +82 -0
  74. package/dist/adminforth/plugins/chat-gpt/types.d.ts.map +1 -0
  75. package/dist/adminforth/plugins/chat-gpt/types.js +2 -0
  76. package/dist/adminforth/plugins/chat-gpt/types.js.map +1 -0
  77. package/dist/adminforth/plugins/email-password-reset/index.d.ts +15 -0
  78. package/dist/adminforth/plugins/email-password-reset/index.d.ts.map +1 -0
  79. package/dist/adminforth/plugins/email-password-reset/index.js +176 -0
  80. package/dist/adminforth/plugins/email-password-reset/index.js.map +1 -0
  81. package/dist/adminforth/plugins/email-password-reset/types.d.ts +28 -0
  82. package/dist/adminforth/plugins/email-password-reset/types.d.ts.map +1 -0
  83. package/dist/adminforth/plugins/email-password-reset/types.js +2 -0
  84. package/dist/adminforth/plugins/email-password-reset/types.js.map +1 -0
  85. package/dist/adminforth/plugins/foreign-inline-list/index.d.ts +13 -0
  86. package/dist/adminforth/plugins/foreign-inline-list/index.d.ts.map +1 -0
  87. package/dist/adminforth/plugins/foreign-inline-list/index.js +56 -0
  88. package/dist/adminforth/plugins/foreign-inline-list/index.js.map +1 -0
  89. package/dist/adminforth/plugins/foreign-inline-list/types.d.ts +19 -0
  90. package/dist/adminforth/plugins/foreign-inline-list/types.d.ts.map +1 -0
  91. package/dist/adminforth/plugins/foreign-inline-list/types.js +2 -0
  92. package/dist/adminforth/plugins/foreign-inline-list/types.js.map +1 -0
  93. package/dist/adminforth/plugins/import-export/index.d.ts +15 -0
  94. package/dist/adminforth/plugins/import-export/index.d.ts.map +1 -0
  95. package/dist/adminforth/plugins/import-export/index.js +127 -0
  96. package/dist/adminforth/plugins/import-export/index.js.map +1 -0
  97. package/dist/adminforth/plugins/import-export/types.d.ts +3 -0
  98. package/dist/adminforth/plugins/import-export/types.d.ts.map +1 -0
  99. package/dist/adminforth/plugins/import-export/types.js +2 -0
  100. package/dist/adminforth/plugins/import-export/types.js.map +1 -0
  101. package/dist/adminforth/plugins/rich-editor/index.d.ts +17 -0
  102. package/dist/adminforth/plugins/rich-editor/index.d.ts.map +1 -0
  103. package/dist/adminforth/plugins/rich-editor/index.js +262 -0
  104. package/dist/adminforth/plugins/rich-editor/index.js.map +1 -0
  105. package/dist/adminforth/plugins/rich-editor/types.d.ts +153 -0
  106. package/dist/adminforth/plugins/rich-editor/types.d.ts.map +1 -0
  107. package/dist/adminforth/plugins/rich-editor/types.js +16 -0
  108. package/dist/adminforth/plugins/rich-editor/types.js.map +1 -0
  109. package/dist/adminforth/plugins/two-factors-auth/index.d.ts +16 -0
  110. package/dist/adminforth/plugins/two-factors-auth/index.d.ts.map +1 -0
  111. package/dist/adminforth/plugins/two-factors-auth/index.js +134 -0
  112. package/dist/adminforth/plugins/two-factors-auth/index.js.map +1 -0
  113. package/dist/adminforth/plugins/two-factors-auth/types.d.ts +18 -0
  114. package/dist/adminforth/plugins/two-factors-auth/types.d.ts.map +1 -0
  115. package/dist/adminforth/plugins/two-factors-auth/types.js +2 -0
  116. package/dist/adminforth/plugins/two-factors-auth/types.js.map +1 -0
  117. package/dist/adminforth/plugins/upload/index.d.ts +14 -0
  118. package/dist/adminforth/plugins/upload/index.d.ts.map +1 -0
  119. package/dist/adminforth/plugins/upload/index.js +450 -0
  120. package/dist/adminforth/plugins/upload/index.js.map +1 -0
  121. package/dist/adminforth/plugins/upload/types.d.ts +132 -0
  122. package/dist/adminforth/plugins/upload/types.d.ts.map +1 -0
  123. package/dist/adminforth/plugins/upload/types.js +2 -0
  124. package/dist/adminforth/plugins/upload/types.js.map +1 -0
  125. package/dist/adminforth/servers/express.d.ts +18 -0
  126. package/dist/adminforth/servers/express.d.ts.map +1 -0
  127. package/dist/adminforth/servers/express.js +238 -0
  128. package/dist/adminforth/servers/express.js.map +1 -0
  129. package/dist/adminforth/types/Back.d.ts +1103 -0
  130. package/dist/adminforth/types/Back.d.ts.map +1 -0
  131. package/dist/adminforth/types/Back.js +86 -0
  132. package/dist/adminforth/types/Back.js.map +1 -0
  133. package/dist/adminforth/types/Common.d.ts +616 -0
  134. package/dist/adminforth/types/Common.d.ts.map +1 -0
  135. package/dist/adminforth/types/Common.js +65 -0
  136. package/dist/adminforth/types/Common.js.map +1 -0
  137. package/dist/adminforth/types/FrontendAPI.d.ts +134 -0
  138. package/dist/adminforth/types/FrontendAPI.d.ts.map +1 -0
  139. package/dist/adminforth/types/FrontendAPI.js +8 -0
  140. package/dist/adminforth/types/FrontendAPI.js.map +1 -0
  141. package/dist/dev-demo/index.d.ts +3 -0
  142. package/dist/dev-demo/index.d.ts.map +1 -0
  143. package/dist/dev-demo/index.js +1052 -0
  144. package/dist/dev-demo/index.js.map +1 -0
  145. package/dist/spa/src/types/Back.ts +25 -5
  146. package/package.json +1 -1
@@ -0,0 +1,450 @@
1
+ import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
2
+ import { ExpirationStatus, GetObjectCommand, PutObjectCommand, S3 } from '@aws-sdk/client-s3';
3
+ import { AdminForthPlugin, suggestIfTypo } from "adminforth";
4
+ import { Readable } from "stream";
5
+ import { RateLimiter, getClinetIp } from "adminforth";
6
+ const ADMINFORTH_NOT_YET_USED_TAG = 'adminforth-candidate-for-cleanup';
7
+ export default class UploadPlugin extends AdminForthPlugin {
8
+ constructor(options) {
9
+ super(options, import.meta.url);
10
+ this.options = options;
11
+ }
12
+ instanceUniqueRepresentation(pluginOptions) {
13
+ return `${pluginOptions.pathColumnName}`;
14
+ }
15
+ async setupLifecycleRule() {
16
+ // check that lifecyle rule "adminforth-unused-cleaner" exists
17
+ const CLEANUP_RULE_ID = 'adminforth-unused-cleaner';
18
+ const s3 = new S3({
19
+ credentials: {
20
+ accessKeyId: this.options.s3AccessKeyId,
21
+ secretAccessKey: this.options.s3SecretAccessKey,
22
+ },
23
+ region: this.options.s3Region,
24
+ });
25
+ // check bucket exists
26
+ const bucketExists = s3.headBucket({ Bucket: this.options.s3Bucket });
27
+ if (!bucketExists) {
28
+ throw new Error(`Bucket ${this.options.s3Bucket} does not exist`);
29
+ }
30
+ // check that lifecycle rule exists
31
+ let ruleExists = false;
32
+ try {
33
+ const lifecycleConfig = await s3.getBucketLifecycleConfiguration({ Bucket: this.options.s3Bucket });
34
+ ruleExists = lifecycleConfig.Rules.some((rule) => rule.ID === CLEANUP_RULE_ID);
35
+ }
36
+ catch (e) {
37
+ if (e.name !== 'NoSuchLifecycleConfiguration') {
38
+ throw e;
39
+ }
40
+ else {
41
+ ruleExists = false;
42
+ }
43
+ }
44
+ if (!ruleExists) {
45
+ // create
46
+ // rule deletes object has tag adminforth-candidate-for-cleanup = true after 2 days
47
+ const params = {
48
+ Bucket: this.options.s3Bucket,
49
+ LifecycleConfiguration: {
50
+ Rules: [
51
+ {
52
+ ID: CLEANUP_RULE_ID,
53
+ Status: ExpirationStatus.Enabled,
54
+ Filter: {
55
+ Tag: {
56
+ Key: ADMINFORTH_NOT_YET_USED_TAG,
57
+ Value: 'true'
58
+ }
59
+ },
60
+ Expiration: {
61
+ Days: 2
62
+ }
63
+ }
64
+ ]
65
+ }
66
+ };
67
+ await s3.putBucketLifecycleConfiguration(params);
68
+ }
69
+ }
70
+ async genPreviewUrl(record, s3) {
71
+ var _a;
72
+ if ((_a = this.options.preview) === null || _a === void 0 ? void 0 : _a.previewUrl) {
73
+ record[`previewUrl_${this.pluginInstanceId}`] = this.options.preview.previewUrl({ s3Path: record[this.options.pathColumnName] });
74
+ return;
75
+ }
76
+ const previewUrl = await await getSignedUrl(s3, new GetObjectCommand({
77
+ Bucket: this.options.s3Bucket,
78
+ Key: record[this.options.pathColumnName],
79
+ }));
80
+ record[`previewUrl_${this.pluginInstanceId}`] = previewUrl;
81
+ }
82
+ async modifyResourceConfig(adminforth, resourceConfig) {
83
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
84
+ super.modifyResourceConfig(adminforth, resourceConfig);
85
+ // after column to store the path of the uploaded file, add new VirtualColumn,
86
+ // show only in edit and create views
87
+ // use component uploader.vue
88
+ const { pathColumnName } = this.options;
89
+ const pathColumnIndex = resourceConfig.columns.findIndex((column) => column.name === pathColumnName);
90
+ if (pathColumnIndex === -1) {
91
+ throw new Error(`Column with name "${pathColumnName}" not found in resource "${resourceConfig.name}"`);
92
+ }
93
+ if ((_a = this.options.generation) === null || _a === void 0 ? void 0 : _a.fieldsForContext) {
94
+ (_b = this.options.generation) === null || _b === void 0 ? void 0 : _b.fieldsForContext.forEach((field) => {
95
+ if (!resourceConfig.columns.find((column) => column.name === field)) {
96
+ const similar = suggestIfTypo(resourceConfig.columns.map((column) => column.name), field);
97
+ throw new Error(`Field "${field}" specified in fieldsForContext not found in
98
+ resource "${resourceConfig.label}". ${similar ? `Did you mean "${similar}"?` : ''}`);
99
+ }
100
+ });
101
+ }
102
+ const pluginFrontendOptions = {
103
+ allowedExtensions: this.options.allowedFileExtensions,
104
+ maxFileSize: this.options.maxFileSize,
105
+ pluginInstanceId: this.pluginInstanceId,
106
+ resourceLabel: resourceConfig.label,
107
+ generateImages: this.options.generation ? true : false,
108
+ pathColumnLabel: resourceConfig.columns[pathColumnIndex].label,
109
+ fieldsForContext: (_c = this.options.generation) === null || _c === void 0 ? void 0 : _c.fieldsForContext,
110
+ };
111
+ // define components which will be imported from other components
112
+ this.componentPath('imageGenerator.vue');
113
+ const virtualColumn = {
114
+ virtual: true,
115
+ name: `uploader_${this.pluginInstanceId}`,
116
+ components: {
117
+ edit: {
118
+ file: this.componentPath('uploader.vue'),
119
+ meta: pluginFrontendOptions,
120
+ },
121
+ create: {
122
+ file: this.componentPath('uploader.vue'),
123
+ meta: pluginFrontendOptions,
124
+ },
125
+ },
126
+ showIn: ['edit', 'create'],
127
+ };
128
+ if (!resourceConfig.columns[pathColumnIndex].components) {
129
+ resourceConfig.columns[pathColumnIndex].components = {};
130
+ }
131
+ if (((_d = this.options.preview) === null || _d === void 0 ? void 0 : _d.showInList) || ((_e = this.options.preview) === null || _e === void 0 ? void 0 : _e.showInList) === undefined) {
132
+ // add preview column to list
133
+ resourceConfig.columns[pathColumnIndex].components.list = {
134
+ file: this.componentPath('preview.vue'),
135
+ meta: pluginFrontendOptions,
136
+ };
137
+ }
138
+ if (((_f = this.options.preview) === null || _f === void 0 ? void 0 : _f.showInShow) || ((_g = this.options.preview) === null || _g === void 0 ? void 0 : _g.showInShow) === undefined) {
139
+ resourceConfig.columns[pathColumnIndex].components.show = {
140
+ file: this.componentPath('preview.vue'),
141
+ meta: pluginFrontendOptions,
142
+ };
143
+ }
144
+ // insert virtual column after path column if it is not already there
145
+ const virtualColumnIndex = resourceConfig.columns.findIndex((column) => column.name === virtualColumn.name);
146
+ if (virtualColumnIndex === -1) {
147
+ resourceConfig.columns.splice(pathColumnIndex + 1, 0, virtualColumn);
148
+ }
149
+ // if showIn of path column has 'create' or 'edit' remove it
150
+ const pathColumn = resourceConfig.columns[pathColumnIndex];
151
+ if (pathColumn.showIn && (pathColumn.showIn.includes('create') || pathColumn.showIn.includes('edit'))) {
152
+ pathColumn.showIn = pathColumn.showIn.filter((view) => !['create', 'edit'].includes(view));
153
+ }
154
+ virtualColumn.required = pathColumn.required;
155
+ virtualColumn.label = pathColumn.label;
156
+ virtualColumn.editingNote = pathColumn.editingNote;
157
+ // ** HOOKS FOR CREATE **//
158
+ // add beforeSave hook to save virtual column to path column
159
+ resourceConfig.hooks.create.beforeSave.push(async ({ record }) => {
160
+ if (record[virtualColumn.name]) {
161
+ record[pathColumnName] = record[virtualColumn.name];
162
+ delete record[virtualColumn.name];
163
+ }
164
+ return { ok: true };
165
+ });
166
+ // in afterSave hook, aremove tag adminforth-not-yet-used from the file
167
+ resourceConfig.hooks.create.afterSave.push(async ({ record }) => {
168
+ process.env.HEAVY_DEBUG && console.log('💾💾 after save ', record === null || record === void 0 ? void 0 : record.id);
169
+ if (record[pathColumnName]) {
170
+ const s3 = new S3({
171
+ credentials: {
172
+ accessKeyId: this.options.s3AccessKeyId,
173
+ secretAccessKey: this.options.s3SecretAccessKey,
174
+ },
175
+ region: this.options.s3Region,
176
+ });
177
+ process.env.HEAVY_DEBUG && console.log('🪥🪥 remove ObjectTagging', record[pathColumnName]);
178
+ // let it crash if it fails: this is a new file which just was uploaded.
179
+ await s3.putObjectTagging({
180
+ Bucket: this.options.s3Bucket,
181
+ Key: record[pathColumnName],
182
+ Tagging: {
183
+ TagSet: []
184
+ }
185
+ });
186
+ }
187
+ return { ok: true };
188
+ });
189
+ // ** HOOKS FOR SHOW **//
190
+ // add show hook to get presigned URL
191
+ resourceConfig.hooks.show.afterDatasourceResponse.push(async ({ response }) => {
192
+ const record = response[0];
193
+ if (!record) {
194
+ return { ok: true };
195
+ }
196
+ if (record[pathColumnName]) {
197
+ const s3 = new S3({
198
+ credentials: {
199
+ accessKeyId: this.options.s3AccessKeyId,
200
+ secretAccessKey: this.options.s3SecretAccessKey,
201
+ },
202
+ region: this.options.s3Region,
203
+ });
204
+ await this.genPreviewUrl(record, s3);
205
+ }
206
+ return { ok: true };
207
+ });
208
+ // ** HOOKS FOR LIST **//
209
+ if (((_h = this.options.preview) === null || _h === void 0 ? void 0 : _h.showInList) || ((_j = this.options.preview) === null || _j === void 0 ? void 0 : _j.showInList) === undefined) {
210
+ resourceConfig.hooks.list.afterDatasourceResponse.push(async ({ response }) => {
211
+ const s3 = new S3({
212
+ credentials: {
213
+ accessKeyId: this.options.s3AccessKeyId,
214
+ secretAccessKey: this.options.s3SecretAccessKey,
215
+ },
216
+ region: this.options.s3Region,
217
+ });
218
+ await Promise.all(response.map(async (record) => {
219
+ if (record[this.options.pathColumnName]) {
220
+ await this.genPreviewUrl(record, s3);
221
+ }
222
+ }));
223
+ return { ok: true };
224
+ });
225
+ }
226
+ // ** HOOKS FOR DELETE **//
227
+ // add delete hook which sets tag adminforth-candidate-for-cleanup to true
228
+ resourceConfig.hooks.delete.afterSave.push(async ({ record }) => {
229
+ if (record[pathColumnName]) {
230
+ const s3 = new S3({
231
+ credentials: {
232
+ accessKeyId: this.options.s3AccessKeyId,
233
+ secretAccessKey: this.options.s3SecretAccessKey,
234
+ },
235
+ region: this.options.s3Region,
236
+ });
237
+ try {
238
+ await s3.putObjectTagging({
239
+ Bucket: this.options.s3Bucket,
240
+ Key: record[pathColumnName],
241
+ Tagging: {
242
+ TagSet: [
243
+ {
244
+ Key: ADMINFORTH_NOT_YET_USED_TAG,
245
+ Value: 'true'
246
+ }
247
+ ]
248
+ }
249
+ });
250
+ }
251
+ catch (e) {
252
+ // file might be e.g. already deleted, so we catch error
253
+ console.error(`Error setting tag ${ADMINFORTH_NOT_YET_USED_TAG} to true for object ${record[pathColumnName]}. File will not be auto-cleaned up`, e);
254
+ }
255
+ }
256
+ return { ok: true };
257
+ });
258
+ // ** HOOKS FOR EDIT **//
259
+ // beforeSave
260
+ resourceConfig.hooks.edit.beforeSave.push(async ({ record }) => {
261
+ // null is when value is removed
262
+ if (record[virtualColumn.name] || record[virtualColumn.name] === null) {
263
+ record[pathColumnName] = record[virtualColumn.name];
264
+ }
265
+ return { ok: true };
266
+ });
267
+ // add edit postSave hook to delete old file and remove tag from new file
268
+ resourceConfig.hooks.edit.afterSave.push(async ({ record, oldRecord }) => {
269
+ if (record[virtualColumn.name] || record[virtualColumn.name] === null) {
270
+ const s3 = new S3({
271
+ credentials: {
272
+ accessKeyId: this.options.s3AccessKeyId,
273
+ secretAccessKey: this.options.s3SecretAccessKey,
274
+ },
275
+ region: this.options.s3Region,
276
+ });
277
+ if (oldRecord[pathColumnName]) {
278
+ // put tag to delete old file
279
+ try {
280
+ await s3.putObjectTagging({
281
+ Bucket: this.options.s3Bucket,
282
+ Key: oldRecord[pathColumnName],
283
+ Tagging: {
284
+ TagSet: [
285
+ {
286
+ Key: ADMINFORTH_NOT_YET_USED_TAG,
287
+ Value: 'true'
288
+ }
289
+ ]
290
+ }
291
+ });
292
+ }
293
+ catch (e) {
294
+ // file might be e.g. already deleted, so we catch error
295
+ console.error(`Error setting tag ${ADMINFORTH_NOT_YET_USED_TAG} to true for object ${oldRecord[pathColumnName]}. File will not be auto-cleaned up`, e);
296
+ }
297
+ }
298
+ if (record[virtualColumn.name] !== null) {
299
+ // remove tag from new file
300
+ // in this case we let it crash if it fails: this is a new file which just was uploaded.
301
+ await s3.putObjectTagging({
302
+ Bucket: this.options.s3Bucket,
303
+ Key: record[pathColumnName],
304
+ Tagging: {
305
+ TagSet: []
306
+ }
307
+ });
308
+ }
309
+ }
310
+ return { ok: true };
311
+ });
312
+ }
313
+ validateConfigAfterDiscover(adminforth, resourceConfig) {
314
+ // called here because modifyResourceConfig can be called in build time where there is no environment and AWS secrets
315
+ this.setupLifecycleRule();
316
+ }
317
+ setupEndpoints(server) {
318
+ server.endpoint({
319
+ method: 'POST',
320
+ path: `/plugin/${this.pluginInstanceId}/get_s3_upload_url`,
321
+ handler: async ({ body }) => {
322
+ var _a;
323
+ const { originalFilename, contentType, size, originalExtension } = body;
324
+ if (this.options.allowedFileExtensions && !this.options.allowedFileExtensions.includes(originalExtension)) {
325
+ return {
326
+ error: `File extension "${originalExtension}" is not allowed, allowed extensions are: ${this.options.allowedFileExtensions.join(', ')}`
327
+ };
328
+ }
329
+ const s3Path = this.options.s3Path({ originalFilename, originalExtension, contentType });
330
+ if (s3Path.startsWith('/')) {
331
+ throw new Error('s3Path should not start with /, please adjust s3path function to not return / at the start of the path');
332
+ }
333
+ const s3 = new S3({
334
+ credentials: {
335
+ accessKeyId: this.options.s3AccessKeyId,
336
+ secretAccessKey: this.options.s3SecretAccessKey,
337
+ },
338
+ region: this.options.s3Region,
339
+ });
340
+ const tagline = `${ADMINFORTH_NOT_YET_USED_TAG}=true`;
341
+ const params = {
342
+ Bucket: this.options.s3Bucket,
343
+ Key: s3Path,
344
+ ContentType: contentType,
345
+ ACL: (this.options.s3ACL || 'private'),
346
+ Tagging: tagline,
347
+ };
348
+ const uploadUrl = await await getSignedUrl(s3, new PutObjectCommand(params), {
349
+ expiresIn: 1800,
350
+ unhoistableHeaders: new Set(['x-amz-tagging']),
351
+ });
352
+ let previewUrl;
353
+ if ((_a = this.options.preview) === null || _a === void 0 ? void 0 : _a.previewUrl) {
354
+ previewUrl = this.options.preview.previewUrl({ s3Path });
355
+ return;
356
+ }
357
+ else if (this.options.s3ACL === 'public-read') {
358
+ previewUrl = `https://${this.options.s3Bucket}.s3.${this.options.s3Region}.amazonaws.com/${s3Path}`;
359
+ }
360
+ else {
361
+ previewUrl = await getSignedUrl(s3, new GetObjectCommand({
362
+ Bucket: this.options.s3Bucket,
363
+ Key: s3Path,
364
+ }));
365
+ }
366
+ return {
367
+ uploadUrl,
368
+ s3Path,
369
+ tagline,
370
+ previewUrl,
371
+ };
372
+ }
373
+ });
374
+ // generation: {
375
+ // provider: 'openai-dall-e',
376
+ // countToGenerate: 3,
377
+ // openAiOptions: {
378
+ // model: 'dall-e-3',
379
+ // size: '1792x1024',
380
+ // apiKey: process.env.OPENAI_API_KEY as string,
381
+ // },
382
+ // },
383
+ // curl https://api.openai.com/v1/images/generations \
384
+ // -H "Content-Type: application/json" \
385
+ // -H "Authorization: Bearer $OPENAI_API_KEY" \
386
+ // -d '{
387
+ // "model": "dall-e-3",
388
+ // "prompt": "A cute baby sea otter",
389
+ // "n": 1,
390
+ // "size": "1024x1024"
391
+ // }'
392
+ server.endpoint({
393
+ method: 'POST',
394
+ path: `/plugin/${this.pluginInstanceId}/generate_images`,
395
+ handler: async ({ body, headers }) => {
396
+ var _a, _b;
397
+ const { prompt } = body;
398
+ if (this.options.generation.provider !== 'openai-dall-e') {
399
+ throw new Error(`Provider ${this.options.generation.provider} is not supported`);
400
+ }
401
+ if ((_a = this.options.generation.rateLimit) === null || _a === void 0 ? void 0 : _a.limit) {
402
+ // rate limit
403
+ const { error } = RateLimiter.checkRateLimit(this.pluginInstanceId, (_b = this.options.generation.rateLimit) === null || _b === void 0 ? void 0 : _b.limit, getClinetIp(headers));
404
+ if (error) {
405
+ return { error: this.options.generation.rateLimit.errorMessage };
406
+ }
407
+ }
408
+ const { model, size, apiKey } = this.options.generation.openAiOptions;
409
+ const url = 'https://api.openai.com/v1/images/generations';
410
+ let error = null;
411
+ const images = await Promise.all((new Array(this.options.generation.countToGenerate)).fill(0).map(async () => {
412
+ const response = await fetch(url, {
413
+ method: 'POST',
414
+ headers: {
415
+ 'Content-Type': 'application/json',
416
+ 'Authorization': `Bearer ${apiKey}`,
417
+ },
418
+ body: JSON.stringify({
419
+ model,
420
+ prompt,
421
+ n: 1,
422
+ size,
423
+ })
424
+ });
425
+ const json = await response.json();
426
+ if (json.error) {
427
+ console.error('Error generating image', json.error);
428
+ error = json.error;
429
+ return;
430
+ }
431
+ return json;
432
+ }));
433
+ return { error, images };
434
+ }
435
+ });
436
+ server.endpoint({
437
+ method: 'GET',
438
+ path: `/plugin/${this.pluginInstanceId}/cors-proxy`,
439
+ handler: async ({ query, response }) => {
440
+ const { url } = query;
441
+ const resp = await fetch(url);
442
+ response.setHeader('Content-Type', resp.headers.get('Content-Type'));
443
+ //@ts-ignore
444
+ Readable.fromWeb(resp.body).pipe(response.blobStream());
445
+ return null;
446
+ }
447
+ });
448
+ }
449
+ }
450
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../plugins/upload/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ export type PluginOptions = {
2
+ /**
3
+ * The name of the column where the path to the uploaded file is stored.
4
+ * On place of this column, a file upload field will be shown.
5
+ */
6
+ pathColumnName: string;
7
+ /**
8
+ * the list of allowed file extensions
9
+ */
10
+ allowedFileExtensions?: string[];
11
+ /**
12
+ * the maximum file size in bytes
13
+ */
14
+ maxFileSize?: number;
15
+ /**
16
+ * S3 bucket name where we will upload the files, e.g. 'my-bucket'
17
+ */
18
+ s3Bucket: string;
19
+ /**
20
+ * S3 region, e.g. 'us-east-1'
21
+ */
22
+ s3Region: string;
23
+ /**
24
+ * S3 access key id
25
+ */
26
+ s3AccessKeyId: string;
27
+ /**
28
+ * S3 secret access key
29
+ */
30
+ s3SecretAccessKey: string;
31
+ /**
32
+ * ACL which will be set to uploaded file, e.g. 'public-read'.
33
+ * If you want to use 'public-read', it is your responsibility to set the "ACL Enabled" to true in the S3 bucket policy and Uncheck "Block all public access" in the bucket settings.
34
+ */
35
+ s3ACL?: string;
36
+ /**
37
+ * The path where the file will be uploaded to the S3 bucket, same path will be stored in the database
38
+ * in the column specified in {@link pathColumnName}
39
+ *
40
+ * example:
41
+ *
42
+ * ```typescript
43
+ * s3Path: ({record, originalFilename}) => `/aparts/${record.id}/${originalFilename}`
44
+ * ```
45
+ *
46
+ */
47
+ s3Path: ({ originalFilename, originalExtension, contentType }: {
48
+ originalFilename: any;
49
+ originalExtension: any;
50
+ contentType: any;
51
+ }) => string;
52
+ preview: {
53
+ /**
54
+ * Whether to show preview of image instead of path in list field
55
+ * By default true
56
+ */
57
+ showInList?: boolean;
58
+ /**
59
+ * Whether to show preview of image instead of path in list field
60
+ * By default true
61
+ */
62
+ showInShow?: boolean;
63
+ /**
64
+ * Used to display preview (if it is image) in list and show views.
65
+ * Defaulted to the AWS S3 presigned URL if resource is private or public URL if resource is public.
66
+ * Can be used to generate custom e.g. CDN(e.g. Cloudflare) URL to worm up cache and deliver preview faster.
67
+ *
68
+ * Example:
69
+ *
70
+ * ```typescript
71
+ * previewUrl: ({record, path}) => `https://my-bucket.s3.amazonaws.com/${path}`,
72
+ * ```
73
+ *
74
+ */
75
+ previewUrl?: ({ s3Path }: {
76
+ s3Path: any;
77
+ }) => string;
78
+ };
79
+ /**
80
+ * AI image generation options
81
+ */
82
+ generation?: {
83
+ /**
84
+ * The provider to use for image generation
85
+ * for now only 'openai-dall-e' is supported
86
+ */
87
+ provider: string;
88
+ /**
89
+ * The number of images to generate
90
+ * in one request
91
+ */
92
+ countToGenerate: number;
93
+ /**
94
+ * Options for OpenAI
95
+ */
96
+ openAiOptions: {
97
+ /**
98
+ * The model to use, e.g. 'dall-e-3'
99
+ */
100
+ model: string;
101
+ /**
102
+ * The size of the image to generate, e.g. '1792x1024'
103
+ */
104
+ size: string;
105
+ /**
106
+ * The OpenAI API key
107
+ */
108
+ apiKey: string;
109
+ };
110
+ /**
111
+ * Fields of record to use for context. if supplied must be array of valid column names for resource
112
+ * where plugin is used.
113
+ */
114
+ fieldsForContext?: string[];
115
+ /**
116
+ * Since AI generation can be expensive, we can limit the number of requests per IP.
117
+ */
118
+ rateLimit?: {
119
+ /**
120
+ * E.g. 5/1d - 5 requests per day
121
+ * 3/1h - 3 requests per hour
122
+ */
123
+ limit: string;
124
+ /**
125
+ * !Not used now
126
+ * Message shown to user when rate limit is reached
127
+ */
128
+ errorMessage: string;
129
+ };
130
+ };
131
+ };
132
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../plugins/upload/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,aAAa,GAAG;IAE1B;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;OAUG;IACH,MAAM,EAAE,CAAC,EAAC,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAC;;;;KAAA,KAAK,MAAM,CAAC;IAGvE,OAAO,EAAE;QAEP;;;WAGG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC;QAErB;;;WAGG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC;QAErB;;;;;;;;;;;WAWG;QACH,UAAU,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC;;SAAA,KAAK,MAAM,CAAC;KACnC,CAAA;IAGD;;OAEG;IACH,UAAU,CAAC,EAAE;QACX;;;WAGG;QACH,QAAQ,EAAE,MAAM,CAAC;QAEjB;;;WAGG;QACH,eAAe,EAAE,MAAM,CAAC;QAExB;;WAEG;QACH,aAAa,EAAE;YACb;;eAEG;YACH,KAAK,EAAE,MAAM,CAAC;YAEd;;eAEG;YACH,IAAI,EAAE,MAAM,CAAC;YAEb;;eAEG;YACH,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;QAEF;;;WAGG;QACH,gBAAgB,CAAC,EAAG,MAAM,EAAE,CAAC;QAG7B;;WAEG;QACH,SAAS,CAAC,EAAE;YAEV;;;eAGG;YACH,KAAK,EAAE,MAAM,CAAC;YAEd;;;eAGG;YACH,YAAY,EAAE,MAAM,CAAC;SACtB,CAAC;KACH,CAAA;CAEF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../plugins/upload/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { Express } from 'express';
2
+ import { IAdminForth, IExpressHttpServer } from '../types/Back.js';
3
+ declare class ExpressServer implements IExpressHttpServer {
4
+ expressApp: Express;
5
+ adminforth: IAdminForth;
6
+ constructor(adminforth: IAdminForth);
7
+ setupSpaServer(): void;
8
+ serve(app: any): void;
9
+ authorize(handler: any): (req: any, res: any, next: any) => Promise<void>;
10
+ endpoint({ method, path, handler, noAuth }: {
11
+ method?: string;
12
+ path: any;
13
+ handler: any;
14
+ noAuth?: boolean;
15
+ }): void;
16
+ }
17
+ export default ExpressServer;
18
+ //# sourceMappingURL=express.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../../servers/express.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AA4EnE,cAAM,aAAc,YAAW,kBAAkB;IAE/C,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,WAAW,CAAC;gBAEZ,UAAU,EAAE,WAAW;IAInC,cAAc;IAgEd,KAAK,CAAC,GAAG,KAAA;IAMT,SAAS,CAAC,OAAO,KAAA;IAoCjB,QAAQ,CAAC,EAAE,MAAY,EAAE,IAAI,EAAE,OAAO,EAAE,MAAY,EAAE;;;;;KAAA;CA0EvD;AAED,eAAe,aAAa,CAAC"}