mbkbucket 4.0.0 → 4.1.0

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 (40) hide show
  1. package/.env.example +16 -15
  2. package/README.md +613 -561
  3. package/index.js +36 -33
  4. package/lib/cli.js +239 -239
  5. package/lib/public/bucketadmin.css +2042 -2042
  6. package/lib/public/bucketadmin.js +1844 -1622
  7. package/lib/public/mbkbucket-helper-demo.html +0 -58
  8. package/lib/public/mbkbucket-helper.js +1 -9
  9. package/lib/src/config/validation.js +91 -86
  10. package/lib/src/controllers/api.controller.js +486 -459
  11. package/lib/src/controllers/dashboard.controller.js +69 -69
  12. package/lib/src/controllers/info.controller.js +13 -13
  13. package/lib/src/controllers/view.controller.js +234 -233
  14. package/lib/src/core/metrics.js +134 -0
  15. package/lib/src/core/storage/capabilities.js +58 -0
  16. package/lib/src/core/storage/errors.js +0 -5
  17. package/lib/src/core/storage/gdrive-auth.js +0 -36
  18. package/lib/src/core/storage/gdrive-provider.js +101 -43
  19. package/lib/src/core/storage/index.js +4 -1
  20. package/lib/src/core/storage/local-provider.js +507 -0
  21. package/lib/src/core/storage/models.js +90 -50
  22. package/lib/src/core/storage/path-strategy.js +14 -1
  23. package/lib/src/core/storage/s3-provider.js +17 -37
  24. package/lib/src/core/storage/storage-manager.js +70 -50
  25. package/lib/src/core/storage/storage-provider.js +49 -120
  26. package/lib/src/middleware/bucket-resolver.js +37 -37
  27. package/lib/src/routes/api.routes.js +4 -1
  28. package/lib/src/routes/index.js +60 -60
  29. package/lib/src/routes/view.routes.js +28 -28
  30. package/lib/src/services/s3.service.js +42 -42
  31. package/lib/src/services/storage.service.js +311 -213
  32. package/lib/src/utils/cleanup-scheduler.js +91 -0
  33. package/lib/src/utils/errors.js +56 -56
  34. package/lib/src/utils/helpers.js +6 -6
  35. package/package.json +3 -5
  36. package/views/bucket.hbs +0 -5
  37. package/views/bucketadmin_move_modal.hbs +35 -35
  38. package/views/bucketadmin_preview_modal.hbs +108 -108
  39. package/views/bucketadmincontent.hbs +193 -193
  40. package/views/mbkbucket_info.hbs +134 -134
@@ -1,135 +1,135 @@
1
- <!--
2
- * MBKBucket
3
- * Copyright (c) 2026 Muhammad Bin Khalid, MBKTech.org and contributors
4
- * Licensed under the MIT License.
5
- * Source: https://github.com/MIbnEKhalid/mbkbucket
6
- -->
7
-
8
- <!DOCTYPE html>
9
- <html lang="en">
10
-
11
- {{> head pageTitle="System Information" ogUrl="/mbkbucket/info"}}
12
-
13
- <body>
14
- {{> header appName=APP_NAME customURL="/mbkbucket"}}
15
-
16
- <section class="login-container">
17
- {{> backgroundElements}}
18
-
19
- <div class="auth-card info-box">
20
- <div class="info-header">
21
- <div class="auth-icon-badge" aria-hidden="true">
22
- <i class="fas fa-database"></i>
23
- </div>
24
- <div>
25
- <h1 class="login-title">Storage Diagnostic</h1>
26
- <p class="login-subtitle">Runtime storage parameters, active bucket configurations, and version status.</p>
27
- </div>
28
- </div>
29
-
30
- <!-- Quick Metrics Grid -->
31
- <div class="info-stats-grid">
32
- <div class="stat-card">
33
- <div class="stat-card-header">
34
- <span class="stat-label">MBKBucket Core</span>
35
- <div class="stat-icon-wrap"><i class="fas fa-code-branch"></i></div>
36
- </div>
37
- <div class="stat-value">v<span id="CurrentVersion">{{CurrentVersion}}</span></div>
38
- <div class="stat-badge-row">
39
- {{#if latestVersion}}
40
- {{#if (eq latestVersion CurrentVersion)}}
41
- <span class="badge badge-success"><i class="fas fa-check-circle"></i> Up to date</span>
42
- {{else}}
43
- <span class="badge badge-warning"><i class="fas fa-arrow-up"></i> Update: v{{latestVersion}}</span>
44
- {{/if}}
45
- {{else}}
46
- <span class="badge badge-neutral">v{{CurrentVersion}}</span>
47
- {{/if}}
48
- </div>
49
- </div>
50
-
51
- <div class="stat-card">
52
- <div class="stat-card-header">
53
- <span class="stat-label">Host Application</span>
54
- <div class="stat-icon-wrap"><i class="fas fa-cubes"></i></div>
55
- </div>
56
- <div class="stat-value">{{#if APP_NAME}}{{APP_NAME}}{{else}}mbkbucket{{/if}}</div>
57
- <div class="stat-sub-text">Release <code>v{{#if APP_VERSION}}{{APP_VERSION}}{{else}}{{CurrentVersion}}{{/if}}</code></div>
58
- </div>
59
-
60
- <div class="stat-card">
61
- <div class="stat-card-header">
62
- <span class="stat-label">Storage Engine</span>
63
- <div class="stat-icon-wrap"><i class="fas fa-server"></i></div>
64
- </div>
65
- <div class="stat-value">
66
- <span class="badge badge-success"><i class="fas fa-circle-dot"></i> {{#if providerType}}{{providerType}}{{else}}S3/R2{{/if}}</span>
67
- </div>
68
- <div class="stat-sub-text">{{#if defaultBucket}}Bucket: <code>{{defaultBucket}}</code>{{else}}Active Storage Engine{{/if}}</div>
69
- </div>
70
- </div>
71
-
72
- <!-- Configuration Parameters -->
73
- <div class="info-section">
74
- <div class="info-section-header">
75
- <h2><i class="fas fa-sliders"></i> Configuration Manifest</h2>
76
- <span class="badge badge-neutral">Read-only</span>
77
- </div>
78
-
79
- <div class="info-table-wrap">
80
- <table class="info-table">
81
- <tbody>
82
- <tr>
83
- <td class="prop-label"><i class="fas fa-tag"></i> APP_NAME</td>
84
- <td class="prop-val"><code>{{#if APP_NAME}}{{APP_NAME}}{{else}}mbkbucket{{/if}}</code></td>
85
- </tr>
86
- <tr>
87
- <td class="prop-label"><i class="fas fa-code-commit"></i> Current Version</td>
88
- <td class="prop-val"><code>{{CurrentVersion}}</code></td>
89
- </tr>
90
- <tr>
91
- <td class="prop-label"><i class="fas fa-database"></i> Default Bucket</td>
92
- <td class="prop-val"><code>{{#if defaultBucket}}{{defaultBucket}}{{else}}default{{/if}}</code></td>
93
- </tr>
94
- <tr>
95
- <td class="prop-label"><i class="fas fa-layer-group"></i> Configured Buckets</td>
96
- <td class="prop-val"><span class="badge badge-neutral">{{#if configuredBucketsCount}}{{configuredBucketsCount}}{{else}}1{{/if}} bucket(s)</span></td>
97
- </tr>
98
- <tr>
99
- <td class="prop-label"><i class="fas fa-eye"></i> Public View Enabled</td>
100
- <td class="prop-val">
101
- {{#if (eq mbkbucketVar.publiView_enabled "true")}}
102
- <span class="badge badge-success">true</span>
103
- {{else}}
104
- <span class="badge badge-neutral">{{#if mbkbucketVar.publiView_enabled}}{{mbkbucketVar.publiView_enabled}}{{else}}false{{/if}}</span>
105
- {{/if}}
106
- </td>
107
- </tr>
108
- <tr>
109
- <td class="prop-label"><i class="fas fa-file-invoice"></i> Inline View</td>
110
- <td class="prop-val">
111
- {{#if (eq mbkbucketVar.p_view_inline "true")}}
112
- <span class="badge badge-success">true</span>
113
- {{else}}
114
- <span class="badge badge-neutral">{{#if mbkbucketVar.p_view_inline}}{{mbkbucketVar.p_view_inline}}{{else}}false{{/if}}</span>
115
- {{/if}}
116
- </td>
117
- </tr>
118
- </tbody>
119
- </table>
120
- </div>
121
- </div>
122
-
123
- <!-- Navigation Links -->
124
- <div class="info-action-grid">
125
- <a class="btn-outline" href="/mbkbucket"><i class="fas fa-folder-open"></i> File Dashboard</a>
126
- <a class="btn-outline" href="/mbkbucket/helper-demo"><i class="fas fa-vial"></i> Helper Demo</a>
127
- <a class="btn-outline" href="/mbkbucket/i.json"><i class="fas fa-code"></i> JSON Diagnostics</a>
128
- <a class="btn-outline" href="https://github.com/MIbnEKhalid/mbkbucket" target="_blank" rel="noopener noreferrer"><i class="fab fa-github"></i> Repository</a>
129
- </div>
130
- </div>
131
- </section>
132
-
133
- {{> versionInfo}}
134
- </body>
1
+ <!--
2
+ * MBKBucket
3
+ * Copyright (c) 2026 Muhammad Bin Khalid, MBKTech.org and contributors
4
+ * Licensed under the MIT License.
5
+ * Source: https://github.com/MIbnEKhalid/mbkbucket
6
+ -->
7
+
8
+ <!DOCTYPE html>
9
+ <html lang="en">
10
+
11
+ {{> head pageTitle="System Information" ogUrl="/mbkbucket/info"}}
12
+
13
+ <body>
14
+ {{> header appName=APP_NAME customURL="/mbkbucket"}}
15
+
16
+ <section class="login-container">
17
+ {{> backgroundElements}}
18
+
19
+ <div class="auth-card info-box">
20
+ <div class="info-header">
21
+ <div class="auth-icon-badge" aria-hidden="true">
22
+ <i class="fas fa-database"></i>
23
+ </div>
24
+ <div>
25
+ <h1 class="login-title">Storage Diagnostic</h1>
26
+ <p class="login-subtitle">Runtime storage parameters, active bucket configurations, and version status.</p>
27
+ </div>
28
+ </div>
29
+
30
+ <!-- Quick Metrics Grid -->
31
+ <div class="info-stats-grid">
32
+ <div class="stat-card">
33
+ <div class="stat-card-header">
34
+ <span class="stat-label">MBKBucket Core</span>
35
+ <div class="stat-icon-wrap"><i class="fas fa-code-branch"></i></div>
36
+ </div>
37
+ <div class="stat-value">v<span id="CurrentVersion">{{CurrentVersion}}</span></div>
38
+ <div class="stat-badge-row">
39
+ {{#if latestVersion}}
40
+ {{#if (eq latestVersion CurrentVersion)}}
41
+ <span class="badge badge-success"><i class="fas fa-check-circle"></i> Up to date</span>
42
+ {{else}}
43
+ <span class="badge badge-warning"><i class="fas fa-arrow-up"></i> Update: v{{latestVersion}}</span>
44
+ {{/if}}
45
+ {{else}}
46
+ <span class="badge badge-neutral">v{{CurrentVersion}}</span>
47
+ {{/if}}
48
+ </div>
49
+ </div>
50
+
51
+ <div class="stat-card">
52
+ <div class="stat-card-header">
53
+ <span class="stat-label">Host Application</span>
54
+ <div class="stat-icon-wrap"><i class="fas fa-cubes"></i></div>
55
+ </div>
56
+ <div class="stat-value">{{#if APP_NAME}}{{APP_NAME}}{{else}}mbkbucket{{/if}}</div>
57
+ <div class="stat-sub-text">Release <code>v{{#if APP_VERSION}}{{APP_VERSION}}{{else}}{{CurrentVersion}}{{/if}}</code></div>
58
+ </div>
59
+
60
+ <div class="stat-card">
61
+ <div class="stat-card-header">
62
+ <span class="stat-label">Storage Engine</span>
63
+ <div class="stat-icon-wrap"><i class="fas fa-server"></i></div>
64
+ </div>
65
+ <div class="stat-value">
66
+ <span class="badge badge-success"><i class="fas fa-circle-dot"></i> {{#if providerType}}{{providerType}}{{else}}S3/R2{{/if}}</span>
67
+ </div>
68
+ <div class="stat-sub-text">{{#if defaultBucket}}Bucket: <code>{{defaultBucket}}</code>{{else}}Active Storage Engine{{/if}}</div>
69
+ </div>
70
+ </div>
71
+
72
+ <!-- Configuration Parameters -->
73
+ <div class="info-section">
74
+ <div class="info-section-header">
75
+ <h2><i class="fas fa-sliders"></i> Configuration Manifest</h2>
76
+ <span class="badge badge-neutral">Read-only</span>
77
+ </div>
78
+
79
+ <div class="info-table-wrap">
80
+ <table class="info-table">
81
+ <tbody>
82
+ <tr>
83
+ <td class="prop-label"><i class="fas fa-tag"></i> APP_NAME</td>
84
+ <td class="prop-val"><code>{{#if APP_NAME}}{{APP_NAME}}{{else}}mbkbucket{{/if}}</code></td>
85
+ </tr>
86
+ <tr>
87
+ <td class="prop-label"><i class="fas fa-code-commit"></i> Current Version</td>
88
+ <td class="prop-val"><code>{{CurrentVersion}}</code></td>
89
+ </tr>
90
+ <tr>
91
+ <td class="prop-label"><i class="fas fa-database"></i> Default Bucket</td>
92
+ <td class="prop-val"><code>{{#if defaultBucket}}{{defaultBucket}}{{else}}default{{/if}}</code></td>
93
+ </tr>
94
+ <tr>
95
+ <td class="prop-label"><i class="fas fa-layer-group"></i> Configured Buckets</td>
96
+ <td class="prop-val"><span class="badge badge-neutral">{{#if configuredBucketsCount}}{{configuredBucketsCount}}{{else}}1{{/if}} bucket(s)</span></td>
97
+ </tr>
98
+ <tr>
99
+ <td class="prop-label"><i class="fas fa-eye"></i> Public View Enabled</td>
100
+ <td class="prop-val">
101
+ {{#if (eq mbkbucketVar.publiView_enabled "true")}}
102
+ <span class="badge badge-success">true</span>
103
+ {{else}}
104
+ <span class="badge badge-neutral">{{#if mbkbucketVar.publiView_enabled}}{{mbkbucketVar.publiView_enabled}}{{else}}false{{/if}}</span>
105
+ {{/if}}
106
+ </td>
107
+ </tr>
108
+ <tr>
109
+ <td class="prop-label"><i class="fas fa-file-invoice"></i> Inline View</td>
110
+ <td class="prop-val">
111
+ {{#if (eq mbkbucketVar.p_view_inline "true")}}
112
+ <span class="badge badge-success">true</span>
113
+ {{else}}
114
+ <span class="badge badge-neutral">{{#if mbkbucketVar.p_view_inline}}{{mbkbucketVar.p_view_inline}}{{else}}false{{/if}}</span>
115
+ {{/if}}
116
+ </td>
117
+ </tr>
118
+ </tbody>
119
+ </table>
120
+ </div>
121
+ </div>
122
+
123
+ <!-- Navigation Links -->
124
+ <div class="info-action-grid">
125
+ <a class="btn-outline" href="/mbkbucket"><i class="fas fa-folder-open"></i> File Dashboard</a>
126
+ <a class="btn-outline" href="/mbkbucket/helper-demo"><i class="fas fa-vial"></i> Helper Demo</a>
127
+ <a class="btn-outline" href="/mbkbucket/i.json"><i class="fas fa-code"></i> JSON Diagnostics</a>
128
+ <a class="btn-outline" href="https://github.com/MIbnEKhalid/mbkbucket" target="_blank" rel="noopener noreferrer"><i class="fab fa-github"></i> Repository</a>
129
+ </div>
130
+ </div>
131
+ </section>
132
+
133
+ {{> versionInfo}}
134
+ </body>
135
135
  </html>