adminforth 1.1.73 → 1.1.75

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 (122) hide show
  1. package/auth.ts +14 -0
  2. package/dataConnectors/baseConnector.ts +107 -0
  3. package/dataConnectors/mongo.ts +6 -12
  4. package/dataConnectors/postgres.ts +17 -37
  5. package/dataConnectors/sqlite.ts +44 -55
  6. package/dist/auth.js +7 -0
  7. package/dist/dataConnectors/baseConnector.js +90 -0
  8. package/dist/dataConnectors/mongo.js +6 -12
  9. package/dist/dataConnectors/postgres.js +12 -33
  10. package/dist/dataConnectors/sqlite.js +67 -83
  11. package/dist/index.js +125 -66
  12. package/dist/modules/codeInjector.js +29 -15
  13. package/dist/plugins/AuditLogPlugin/index.js +2 -17
  14. package/dist/plugins/S3UploadPlugin/custom/s3uploader.vue +120 -0
  15. package/dist/plugins/S3UploadPlugin/index.js +103 -0
  16. package/dist/plugins/S3UploadPlugin/package-lock.json +431 -0
  17. package/dist/plugins/S3UploadPlugin/package.json +15 -0
  18. package/dist/plugins/TwoFactorsAuthPlugin/custom/TwoFactorsConfirmation.vue +152 -0
  19. package/dist/plugins/TwoFactorsAuthPlugin/custom/TwoFactorsSetup.vue +188 -0
  20. package/dist/plugins/TwoFactorsAuthPlugin/index.js +150 -0
  21. package/dist/plugins/TwoFactorsAuthPlugin/types.js +1 -0
  22. package/dist/spa/index.html +1 -1
  23. package/dist/spa/package-lock.json +111 -0
  24. package/dist/spa/package.json +1 -0
  25. package/dist/spa/src/App.vue +178 -133
  26. package/dist/spa/src/components/MenuLink.vue +3 -3
  27. package/dist/spa/src/components/ResourceForm.vue +96 -96
  28. package/dist/spa/src/components/ResourceListTable.vue +69 -84
  29. package/dist/spa/src/components/ValueRenderer.vue +2 -3
  30. package/dist/spa/src/composables/useStores.ts +24 -11
  31. package/dist/spa/src/main.ts +1 -1
  32. package/dist/spa/src/router/index.ts +0 -1
  33. package/dist/spa/src/utils.ts +1 -1
  34. package/dist/spa/src/views/CreateView.vue +1 -9
  35. package/dist/spa/src/views/EditView.vue +1 -9
  36. package/dist/spa/src/views/ListView.vue +12 -3
  37. package/dist/spa/src/views/LoginView.vue +6 -1
  38. package/dist/spa/src/views/ResourceParent.vue +1 -2
  39. package/dist/spa/src/views/ShowView.vue +6 -14
  40. package/dist/spa/tailwind.config.js +3 -1
  41. package/index.ts +103 -36
  42. package/modules/codeInjector.ts +38 -27
  43. package/package.json +2 -1
  44. package/plugins/AuditLogPlugin/index.ts +4 -20
  45. package/plugins/S3UploadPlugin/custom/s3uploader.vue +120 -0
  46. package/plugins/S3UploadPlugin/index.ts +112 -0
  47. package/plugins/S3UploadPlugin/package-lock.json +431 -0
  48. package/plugins/S3UploadPlugin/package.json +15 -0
  49. package/plugins/S3UploadPlugin/types.ts +76 -0
  50. package/plugins/TwoFactorsAuthPlugin/custom/TwoFactorsConfirmation.vue +152 -0
  51. package/plugins/TwoFactorsAuthPlugin/custom/TwoFactorsOtp.vue +0 -0
  52. package/plugins/TwoFactorsAuthPlugin/custom/TwoFactorsSetup.vue +188 -0
  53. package/plugins/TwoFactorsAuthPlugin/index.ts +150 -0
  54. package/plugins/TwoFactorsAuthPlugin/types.ts +10 -0
  55. package/servers/express.ts +1 -0
  56. package/spa/src/App.vue +154 -121
  57. package/spa/src/components/ResourceForm.vue +91 -91
  58. package/spa/src/router/index.ts +0 -1
  59. package/spa/src/utils.ts +1 -1
  60. package/spa/src/views/CreateView.vue +0 -1
  61. package/spa/src/views/LoginView.vue +4 -1
  62. package/types/AdminForthConfig.ts +166 -5
  63. package/dist/plugins/AuditLog/index.js +0 -13
  64. package/dist/spa/spa/.eslintrc.cjs +0 -14
  65. package/dist/spa/spa/.vscode/extensions.json +0 -6
  66. package/dist/spa/spa/README.md +0 -39
  67. package/dist/spa/spa/env.d.ts +0 -1
  68. package/dist/spa/spa/index.html +0 -23
  69. package/dist/spa/spa/package-lock.json +0 -4470
  70. package/dist/spa/spa/package.json +0 -48
  71. package/dist/spa/spa/postcss.config.js +0 -6
  72. package/dist/spa/spa/public/assets/favicon.png +0 -0
  73. package/dist/spa/spa/src/App.vue +0 -283
  74. package/dist/spa/spa/src/assets/logo.svg +0 -19
  75. package/dist/spa/spa/src/components/AcceptModal.vue +0 -45
  76. package/dist/spa/spa/src/components/Breadcrumbs.vue +0 -40
  77. package/dist/spa/spa/src/components/BreadcrumbsWithButtons.vue +0 -26
  78. package/dist/spa/spa/src/components/CustomDatePicker.vue +0 -174
  79. package/dist/spa/spa/src/components/CustomDateRangePicker.vue +0 -218
  80. package/dist/spa/spa/src/components/CustomRangePicker.vue +0 -148
  81. package/dist/spa/spa/src/components/Dropdown.vue +0 -168
  82. package/dist/spa/spa/src/components/Filters.vue +0 -211
  83. package/dist/spa/spa/src/components/HelloWorld.vue +0 -17
  84. package/dist/spa/spa/src/components/MenuLink.vue +0 -24
  85. package/dist/spa/spa/src/components/ResourceForm.vue +0 -265
  86. package/dist/spa/spa/src/components/ResourceListTable.vue +0 -404
  87. package/dist/spa/spa/src/components/SingleSkeletLoader.vue +0 -13
  88. package/dist/spa/spa/src/components/Toast.vue +0 -66
  89. package/dist/spa/spa/src/components/ValueRenderer.vue +0 -59
  90. package/dist/spa/spa/src/components/icons/IconCalendar.vue +0 -5
  91. package/dist/spa/spa/src/components/icons/IconCommunity.vue +0 -7
  92. package/dist/spa/spa/src/components/icons/IconDocumentation.vue +0 -7
  93. package/dist/spa/spa/src/components/icons/IconEcosystem.vue +0 -7
  94. package/dist/spa/spa/src/components/icons/IconSupport.vue +0 -7
  95. package/dist/spa/spa/src/components/icons/IconTime.vue +0 -5
  96. package/dist/spa/spa/src/components/icons/IconTooling.vue +0 -19
  97. package/dist/spa/spa/src/composables/useFrontendApi.ts +0 -26
  98. package/dist/spa/spa/src/composables/useStores.ts +0 -126
  99. package/dist/spa/spa/src/index.scss +0 -26
  100. package/dist/spa/spa/src/main.ts +0 -18
  101. package/dist/spa/spa/src/router/index.ts +0 -64
  102. package/dist/spa/spa/src/spa_types/core.ts +0 -51
  103. package/dist/spa/spa/src/stores/core.ts +0 -144
  104. package/dist/spa/spa/src/stores/filters.ts +0 -22
  105. package/dist/spa/spa/src/stores/modal.ts +0 -48
  106. package/dist/spa/spa/src/stores/toast.ts +0 -15
  107. package/dist/spa/spa/src/stores/user.ts +0 -54
  108. package/dist/spa/spa/src/utils.ts +0 -101
  109. package/dist/spa/spa/src/views/CreateView.vue +0 -156
  110. package/dist/spa/spa/src/views/EditView.vue +0 -157
  111. package/dist/spa/spa/src/views/ListView.vue +0 -266
  112. package/dist/spa/spa/src/views/LoginView.vue +0 -136
  113. package/dist/spa/spa/src/views/ResourceParent.vue +0 -17
  114. package/dist/spa/spa/src/views/ShowView.vue +0 -180
  115. package/dist/spa/spa/tailwind.config.js +0 -17
  116. package/dist/spa/spa/tsconfig.app.json +0 -14
  117. package/dist/spa/spa/tsconfig.json +0 -11
  118. package/dist/spa/spa/tsconfig.node.json +0 -19
  119. package/dist/spa/spa/vite.config.ts +0 -49
  120. /package/dist/plugins/{AuditLog → S3UploadPlugin}/types.js +0 -0
  121. /package/dist/{spa/spa/src/assets/base.css → plugins/TwoFactorsAuthPlugin/custom/TwoFactorsOtp.vue} +0 -0
  122. /package/dist/spa/{spa/src → src}/components/SkeleteLoader.vue +0 -0
@@ -0,0 +1,120 @@
1
+ <template>
2
+ <div class="flex items-center justify-center w-full">
3
+ <label for="dropzone-file" class="flex flex-col items-center justify-center w-full h-64 border-2 border-gray-300 border-dashed rounded-lg cursor-pointer bg-gray-50 dark:hover:bg-gray-800 dark:bg-gray-700 hover:bg-gray-100 dark:border-gray-600 dark:hover:border-gray-500 dark:hover:bg-gray-600">
4
+ <div class="flex flex-col items-center justify-center pt-5 pb-6">
5
+ <img v-if="imgPreview" :src="imgPreview" class="w-100 mt-4 rounded-lg h-40 object-contain" />
6
+
7
+ <svg v-else class="w-8 h-8 mb-4 text-gray-500 dark:text-gray-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 20 16">
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 13h3a3 3 0 0 0 0-6h-.025A5.56 5.56 0 0 0 16 6.5 5.5 5.5 0 0 0 5.207 5.021C5.137 5.017 5.071 5 5 5a4 4 0 0 0 0 8h2.167M10 15V6m0 0L8 8m2-2 2 2"/>
9
+ </svg>
10
+ <p class="mb-2 text-sm text-gray-500 dark:text-gray-400"><span class="font-semibold">Click to upload</span> or drag and drop</p>
11
+ <p class="text-xs text-gray-500 dark:text-gray-400">
12
+ {{ allowedExtensionsLabel }} {{ meta.maxFileSize ? `(up to ${maxFileSizeHumanized})` : '' }}
13
+ </p>
14
+
15
+ <div class="w-full bg-gray-200 rounded-full dark:bg-gray-700 mt-2 mb-2" v-if="progress > 0">
16
+ <div class="bg-blue-600 text-xs font-medium text-blue-100 text-center p-0.5 leading-none rounded-full"
17
+ :style="{width: `${progress}%`}">{{ progress }}%
18
+ </div>
19
+ </div>
20
+ </div>
21
+ <input id="dropzone-file" type="file" class="hidden" @change="onFileChange" />
22
+ </label>
23
+ </div>
24
+
25
+ </template>
26
+
27
+ <script setup>
28
+ import { computed, ref } from 'vue'
29
+
30
+ const props = defineProps({
31
+ meta: String
32
+ })
33
+
34
+ const imgPreview = ref(null);
35
+ const progress = ref(0);
36
+
37
+ const allowedExtensionsLabel = computed(() => {
38
+ const allowedExtensions = props.meta.allowedExtensions || []
39
+ if (allowedExtensions.length === 0) {
40
+ return 'Any file type'
41
+ }
42
+ // make upper case and write in format EXT1, EXT2 or EXT3
43
+ let label = allowedExtensions.map(ext => ext.toUpperCase()).join(', ');
44
+ // last comma to 'or'
45
+ label = label.replace(/,([^,]*)$/, ' or$1')
46
+ return label
47
+ });
48
+
49
+ const maxFileSizeHumanized = computed(() => {
50
+ let maxFileSize = props.meta.maxFileSize || 0
51
+ if (maxFileSize === 0) {
52
+ return ''
53
+ }
54
+ // if maxFileSize is in bytes, convert to KB, MB, GB, TB
55
+ const units = ['B', 'KB', 'MB', 'GB', 'TB']
56
+ let i = 0
57
+ while (maxFileSize >= 1024 && i < units.length - 1) {
58
+ maxFileSize /= 1024
59
+ i++
60
+ }
61
+ return `${maxFileSize.toFixed(2)} ${units[i]}`
62
+ })
63
+
64
+ const onFileChange = (e) => {
65
+ const file = e.target.files[0]
66
+ if (!file) {
67
+ imgPreview.value = null;
68
+ progress.value = 0;
69
+ return
70
+ }
71
+ console.log('File selected:', file);
72
+
73
+ // get filename, extension, size, mimeType
74
+ const { name, size, type } = file;
75
+
76
+
77
+ const extension = name.split('.').pop();
78
+ console.log('File details:', { name, extension, size, type });
79
+ // validate file extension
80
+ const allowedExtensions = props.meta.allowedExtensions || []
81
+ if (allowedExtensions.length > 0 && !allowedExtensions.includes(extension)) {
82
+ window.adminforth.alert({
83
+ message: `Sorry but the file type ${extension} is not allowed. Please upload a file with one of the following extensions: ${allowedExtensionsLabel.value}`,
84
+ variant: 'danger'
85
+ });
86
+ return;
87
+ }
88
+
89
+ // validate file size
90
+ if (props.meta.maxFileSize && size > props.meta.maxFileSize) {
91
+ window.adminforth.alert({
92
+ message: `Sorry but the file size is too large. Please upload a file with a maximum size of ${maxFileSizeHumanized.value}`,
93
+ variant: 'danger'
94
+ });
95
+ return;
96
+ }
97
+ // supports preview
98
+ if (type.startsWith('image/')) {
99
+ const reader = new FileReader();
100
+ reader.onload = (e) => {
101
+ imgPreview.value = e.target.result;
102
+ }
103
+ reader.readAsDataURL(file);
104
+ }
105
+ setInterval(() => {
106
+ progress.value += 1;
107
+ }, 20);
108
+
109
+ await callAdminForthApi({
110
+ path: `/plugin/${props.meta.pluginInstanceId}/get_s3_upload_url`,
111
+ method: 'POST',
112
+ body: {
113
+ originalFilename: name,
114
+ contentType, size, originalExtension
115
+ },
116
+ });
117
+ }
118
+
119
+
120
+ </script>
@@ -0,0 +1,112 @@
1
+
2
+ import { AdminForthClass, GenericHttpServer } from "../../types/AdminForthConfig.js";
3
+ import AdminForthPlugin from "../base.js";
4
+ import { PluginOptions } from './types.js';
5
+ import AWS from 'aws-sdk';
6
+
7
+ export default class S3UploadPlugin extends AdminForthPlugin {
8
+ options: PluginOptions;
9
+ adminforth: AdminForthClass;
10
+
11
+ constructor(options: PluginOptions) {
12
+ super(options, import.meta.url);
13
+ this.options = options;
14
+ }
15
+
16
+ modifyResourceConfig(adminforth: AdminForthClass, resourceConfig: any) {
17
+ super.modifyResourceConfig(adminforth, resourceConfig);
18
+ // after column to store the path of the uploaded file, add new VirtualColumn,
19
+ // show only in edit and create views
20
+ // use component s3uploader.vue
21
+ const { pathColumnName, uploadColumnLabel } = this.options;
22
+
23
+ const pluginFrontendOptions = {
24
+ allowedExtensions: this.options.allowedFileExtensions,
25
+ maxFileSize: this.options.maxFileSize,
26
+ pluginInstanceId: this.pluginInstanceId,
27
+ };
28
+ const virtualColumn = {
29
+ virtual: true,
30
+ name: `s3uploader_${this.pluginInstanceId}`,
31
+ label: uploadColumnLabel,
32
+ components: {
33
+ edit: {
34
+ file: this.componentPath('s3uploader.vue'),
35
+ meta: pluginFrontendOptions,
36
+ },
37
+ create: {
38
+ file: this.componentPath('s3uploader.vue'),
39
+ meta: pluginFrontendOptions,
40
+ }
41
+ },
42
+ onlyIn: ['edit', 'create'],
43
+ options: {
44
+ pathColumnName
45
+ }
46
+ };
47
+
48
+ const pathColumnIndex = resourceConfig.columns.findIndex((column: any) => column.name === pathColumnName);
49
+ if (pathColumnIndex === -1) {
50
+ throw new Error(`Column with name "${pathColumnName}" not found in resource "${resourceConfig.name}"`);
51
+ }
52
+
53
+ // insert virtual column after path column if it is not already there
54
+ const virtualColumnIndex = resourceConfig.columns.findIndex((column: any) => column.name === virtualColumn.name);
55
+ if (virtualColumnIndex === -1) {
56
+ resourceConfig.columns.splice(pathColumnIndex + 1, 0, virtualColumn);
57
+ }
58
+
59
+ // if showIn of path column has 'create' or 'edit' remove it
60
+ const pathColumn = resourceConfig.columns[pathColumnIndex];
61
+ if (pathColumn.showIn && (pathColumn.showIn.includes('create') || pathColumn.showIn.includes('edit'))) {
62
+ pathColumn.showIn = pathColumn.showIn.filter((view: string) => !['create', 'edit'].includes(view));
63
+ }
64
+ }
65
+
66
+ setupEndpoints(server: GenericHttpServer) {
67
+ server.endpoint({
68
+ method: 'POST',
69
+ path: `/plugin/${this.pluginInstanceId}/get_s3_upload_url`,
70
+ handler: async ({ body }) => {
71
+ const { originalFilename, contentType, size, originalExtension } = body;
72
+
73
+ if (this.options.allowedFileExtensions && !this.options.allowedFileExtensions.includes(originalExtension)) {
74
+ throw new Error(`File extension "${originalExtension}" is not allowed, allowed extensions are: ${this.options.allowedFileExtensions.join(', ')}`);
75
+ }
76
+
77
+ const s3Path: string = this.options.s3Path({ originalFilename, originalExtension, contentType });
78
+ const s3 = new AWS.S3({
79
+ accessKeyId: this.options.s3AccessKeyId,
80
+ secretAccessKey: this.options.s3SecretAccessKey,
81
+ region: this.options.s3Region
82
+ });
83
+
84
+ const params = {
85
+ Bucket: this.options.s3Bucket,
86
+ Key: s3Path,
87
+ ContentType: contentType,
88
+ ACL: this.options.s3ACL
89
+ };
90
+
91
+ const url = s3.getSignedUrl('putObject', params);
92
+
93
+ let previewUrl;
94
+ if (this.options.previewUrl) {
95
+ previewUrl = this.options.previewUrl({ s3Path });
96
+ } else {
97
+ // generate presigned url for reading the file
98
+ previewUrl = s3.getSignedUrl('getObject', {
99
+ Bucket: this.options.s3Bucket,
100
+ Key: s3Path
101
+ });
102
+ }
103
+ return {
104
+ url,
105
+ s3Path,
106
+ previewUrl
107
+ };
108
+ }
109
+ });
110
+ }
111
+
112
+ }
@@ -0,0 +1,431 @@
1
+ {
2
+ "name": "s3uploadplugin",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "s3uploadplugin",
9
+ "version": "1.0.0",
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "aws-sdk": "^2.1654.0"
13
+ }
14
+ },
15
+ "node_modules/available-typed-arrays": {
16
+ "version": "1.0.7",
17
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
18
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
19
+ "dependencies": {
20
+ "possible-typed-array-names": "^1.0.0"
21
+ },
22
+ "engines": {
23
+ "node": ">= 0.4"
24
+ },
25
+ "funding": {
26
+ "url": "https://github.com/sponsors/ljharb"
27
+ }
28
+ },
29
+ "node_modules/aws-sdk": {
30
+ "version": "2.1654.0",
31
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1654.0.tgz",
32
+ "integrity": "sha512-b5ryvXipBJod9Uh1GUfQNgi5tIIiluxJbyqr/hZ/mr5U8WxrrfjVq3nGnx5JjevFKYRqXIywhumsVyanfACzFA==",
33
+ "hasInstallScript": true,
34
+ "dependencies": {
35
+ "buffer": "4.9.2",
36
+ "events": "1.1.1",
37
+ "ieee754": "1.1.13",
38
+ "jmespath": "0.16.0",
39
+ "querystring": "0.2.0",
40
+ "sax": "1.2.1",
41
+ "url": "0.10.3",
42
+ "util": "^0.12.4",
43
+ "uuid": "8.0.0",
44
+ "xml2js": "0.6.2"
45
+ },
46
+ "engines": {
47
+ "node": ">= 10.0.0"
48
+ }
49
+ },
50
+ "node_modules/base64-js": {
51
+ "version": "1.5.1",
52
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
53
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
54
+ "funding": [
55
+ {
56
+ "type": "github",
57
+ "url": "https://github.com/sponsors/feross"
58
+ },
59
+ {
60
+ "type": "patreon",
61
+ "url": "https://www.patreon.com/feross"
62
+ },
63
+ {
64
+ "type": "consulting",
65
+ "url": "https://feross.org/support"
66
+ }
67
+ ]
68
+ },
69
+ "node_modules/buffer": {
70
+ "version": "4.9.2",
71
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
72
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
73
+ "dependencies": {
74
+ "base64-js": "^1.0.2",
75
+ "ieee754": "^1.1.4",
76
+ "isarray": "^1.0.0"
77
+ }
78
+ },
79
+ "node_modules/call-bind": {
80
+ "version": "1.0.7",
81
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
82
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
83
+ "dependencies": {
84
+ "es-define-property": "^1.0.0",
85
+ "es-errors": "^1.3.0",
86
+ "function-bind": "^1.1.2",
87
+ "get-intrinsic": "^1.2.4",
88
+ "set-function-length": "^1.2.1"
89
+ },
90
+ "engines": {
91
+ "node": ">= 0.4"
92
+ },
93
+ "funding": {
94
+ "url": "https://github.com/sponsors/ljharb"
95
+ }
96
+ },
97
+ "node_modules/define-data-property": {
98
+ "version": "1.1.4",
99
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
100
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
101
+ "dependencies": {
102
+ "es-define-property": "^1.0.0",
103
+ "es-errors": "^1.3.0",
104
+ "gopd": "^1.0.1"
105
+ },
106
+ "engines": {
107
+ "node": ">= 0.4"
108
+ },
109
+ "funding": {
110
+ "url": "https://github.com/sponsors/ljharb"
111
+ }
112
+ },
113
+ "node_modules/es-define-property": {
114
+ "version": "1.0.0",
115
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
116
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
117
+ "dependencies": {
118
+ "get-intrinsic": "^1.2.4"
119
+ },
120
+ "engines": {
121
+ "node": ">= 0.4"
122
+ }
123
+ },
124
+ "node_modules/es-errors": {
125
+ "version": "1.3.0",
126
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
127
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
128
+ "engines": {
129
+ "node": ">= 0.4"
130
+ }
131
+ },
132
+ "node_modules/events": {
133
+ "version": "1.1.1",
134
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
135
+ "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==",
136
+ "engines": {
137
+ "node": ">=0.4.x"
138
+ }
139
+ },
140
+ "node_modules/for-each": {
141
+ "version": "0.3.3",
142
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
143
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
144
+ "dependencies": {
145
+ "is-callable": "^1.1.3"
146
+ }
147
+ },
148
+ "node_modules/function-bind": {
149
+ "version": "1.1.2",
150
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
151
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
152
+ "funding": {
153
+ "url": "https://github.com/sponsors/ljharb"
154
+ }
155
+ },
156
+ "node_modules/get-intrinsic": {
157
+ "version": "1.2.4",
158
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
159
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
160
+ "dependencies": {
161
+ "es-errors": "^1.3.0",
162
+ "function-bind": "^1.1.2",
163
+ "has-proto": "^1.0.1",
164
+ "has-symbols": "^1.0.3",
165
+ "hasown": "^2.0.0"
166
+ },
167
+ "engines": {
168
+ "node": ">= 0.4"
169
+ },
170
+ "funding": {
171
+ "url": "https://github.com/sponsors/ljharb"
172
+ }
173
+ },
174
+ "node_modules/gopd": {
175
+ "version": "1.0.1",
176
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
177
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
178
+ "dependencies": {
179
+ "get-intrinsic": "^1.1.3"
180
+ },
181
+ "funding": {
182
+ "url": "https://github.com/sponsors/ljharb"
183
+ }
184
+ },
185
+ "node_modules/has-property-descriptors": {
186
+ "version": "1.0.2",
187
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
188
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
189
+ "dependencies": {
190
+ "es-define-property": "^1.0.0"
191
+ },
192
+ "funding": {
193
+ "url": "https://github.com/sponsors/ljharb"
194
+ }
195
+ },
196
+ "node_modules/has-proto": {
197
+ "version": "1.0.3",
198
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
199
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
200
+ "engines": {
201
+ "node": ">= 0.4"
202
+ },
203
+ "funding": {
204
+ "url": "https://github.com/sponsors/ljharb"
205
+ }
206
+ },
207
+ "node_modules/has-symbols": {
208
+ "version": "1.0.3",
209
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
210
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
211
+ "engines": {
212
+ "node": ">= 0.4"
213
+ },
214
+ "funding": {
215
+ "url": "https://github.com/sponsors/ljharb"
216
+ }
217
+ },
218
+ "node_modules/has-tostringtag": {
219
+ "version": "1.0.2",
220
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
221
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
222
+ "dependencies": {
223
+ "has-symbols": "^1.0.3"
224
+ },
225
+ "engines": {
226
+ "node": ">= 0.4"
227
+ },
228
+ "funding": {
229
+ "url": "https://github.com/sponsors/ljharb"
230
+ }
231
+ },
232
+ "node_modules/hasown": {
233
+ "version": "2.0.2",
234
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
235
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
236
+ "dependencies": {
237
+ "function-bind": "^1.1.2"
238
+ },
239
+ "engines": {
240
+ "node": ">= 0.4"
241
+ }
242
+ },
243
+ "node_modules/ieee754": {
244
+ "version": "1.1.13",
245
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
246
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
247
+ },
248
+ "node_modules/inherits": {
249
+ "version": "2.0.4",
250
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
251
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
252
+ },
253
+ "node_modules/is-arguments": {
254
+ "version": "1.1.1",
255
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
256
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
257
+ "dependencies": {
258
+ "call-bind": "^1.0.2",
259
+ "has-tostringtag": "^1.0.0"
260
+ },
261
+ "engines": {
262
+ "node": ">= 0.4"
263
+ },
264
+ "funding": {
265
+ "url": "https://github.com/sponsors/ljharb"
266
+ }
267
+ },
268
+ "node_modules/is-callable": {
269
+ "version": "1.2.7",
270
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
271
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
272
+ "engines": {
273
+ "node": ">= 0.4"
274
+ },
275
+ "funding": {
276
+ "url": "https://github.com/sponsors/ljharb"
277
+ }
278
+ },
279
+ "node_modules/is-generator-function": {
280
+ "version": "1.0.10",
281
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
282
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
283
+ "dependencies": {
284
+ "has-tostringtag": "^1.0.0"
285
+ },
286
+ "engines": {
287
+ "node": ">= 0.4"
288
+ },
289
+ "funding": {
290
+ "url": "https://github.com/sponsors/ljharb"
291
+ }
292
+ },
293
+ "node_modules/is-typed-array": {
294
+ "version": "1.1.13",
295
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
296
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
297
+ "dependencies": {
298
+ "which-typed-array": "^1.1.14"
299
+ },
300
+ "engines": {
301
+ "node": ">= 0.4"
302
+ },
303
+ "funding": {
304
+ "url": "https://github.com/sponsors/ljharb"
305
+ }
306
+ },
307
+ "node_modules/isarray": {
308
+ "version": "1.0.0",
309
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
310
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
311
+ },
312
+ "node_modules/jmespath": {
313
+ "version": "0.16.0",
314
+ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
315
+ "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==",
316
+ "engines": {
317
+ "node": ">= 0.6.0"
318
+ }
319
+ },
320
+ "node_modules/possible-typed-array-names": {
321
+ "version": "1.0.0",
322
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
323
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
324
+ "engines": {
325
+ "node": ">= 0.4"
326
+ }
327
+ },
328
+ "node_modules/punycode": {
329
+ "version": "1.3.2",
330
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
331
+ "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="
332
+ },
333
+ "node_modules/querystring": {
334
+ "version": "0.2.0",
335
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
336
+ "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
337
+ "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
338
+ "engines": {
339
+ "node": ">=0.4.x"
340
+ }
341
+ },
342
+ "node_modules/sax": {
343
+ "version": "1.2.1",
344
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
345
+ "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA=="
346
+ },
347
+ "node_modules/set-function-length": {
348
+ "version": "1.2.2",
349
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
350
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
351
+ "dependencies": {
352
+ "define-data-property": "^1.1.4",
353
+ "es-errors": "^1.3.0",
354
+ "function-bind": "^1.1.2",
355
+ "get-intrinsic": "^1.2.4",
356
+ "gopd": "^1.0.1",
357
+ "has-property-descriptors": "^1.0.2"
358
+ },
359
+ "engines": {
360
+ "node": ">= 0.4"
361
+ }
362
+ },
363
+ "node_modules/url": {
364
+ "version": "0.10.3",
365
+ "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
366
+ "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==",
367
+ "dependencies": {
368
+ "punycode": "1.3.2",
369
+ "querystring": "0.2.0"
370
+ }
371
+ },
372
+ "node_modules/util": {
373
+ "version": "0.12.5",
374
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
375
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
376
+ "dependencies": {
377
+ "inherits": "^2.0.3",
378
+ "is-arguments": "^1.0.4",
379
+ "is-generator-function": "^1.0.7",
380
+ "is-typed-array": "^1.1.3",
381
+ "which-typed-array": "^1.1.2"
382
+ }
383
+ },
384
+ "node_modules/uuid": {
385
+ "version": "8.0.0",
386
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz",
387
+ "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==",
388
+ "bin": {
389
+ "uuid": "dist/bin/uuid"
390
+ }
391
+ },
392
+ "node_modules/which-typed-array": {
393
+ "version": "1.1.15",
394
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
395
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
396
+ "dependencies": {
397
+ "available-typed-arrays": "^1.0.7",
398
+ "call-bind": "^1.0.7",
399
+ "for-each": "^0.3.3",
400
+ "gopd": "^1.0.1",
401
+ "has-tostringtag": "^1.0.2"
402
+ },
403
+ "engines": {
404
+ "node": ">= 0.4"
405
+ },
406
+ "funding": {
407
+ "url": "https://github.com/sponsors/ljharb"
408
+ }
409
+ },
410
+ "node_modules/xml2js": {
411
+ "version": "0.6.2",
412
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz",
413
+ "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==",
414
+ "dependencies": {
415
+ "sax": ">=0.6.0",
416
+ "xmlbuilder": "~11.0.0"
417
+ },
418
+ "engines": {
419
+ "node": ">=4.0.0"
420
+ }
421
+ },
422
+ "node_modules/xmlbuilder": {
423
+ "version": "11.0.1",
424
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
425
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
426
+ "engines": {
427
+ "node": ">=4.0"
428
+ }
429
+ }
430
+ }
431
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "s3uploadplugin",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "type": "module",
10
+ "author": "",
11
+ "license": "ISC",
12
+ "dependencies": {
13
+ "aws-sdk": "^2.1654.0"
14
+ }
15
+ }