r2-explorer 1.1.0 → 1.1.2
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.
- package/README.md +50 -47
- package/dashboard/assets/AuthLayout.47bc4d6b.js +1 -0
- package/dashboard/assets/EmailFilePage.5146dfaa.js +2 -0
- package/dashboard/assets/{ErrorNotFound.a0d3ece6.js → ErrorNotFound.2be1d090.js} +1 -1
- package/dashboard/assets/LoginPage.e449cd8d.js +1 -0
- package/dashboard/assets/auth-store.1a4593f8.js +1 -0
- package/dashboard/assets/auth.a5ffeab6.js +1 -0
- package/dashboard/assets/{bus.def2db9e.js → bus.67913454.js} +1 -1
- package/dashboard/assets/{index.073c3cc5.css → index.7e109f1f.css} +2 -2
- package/dashboard/assets/index.ddf53a58.js +104 -0
- package/dashboard/index.html +46 -3
- package/dashboard/spa/assets/AuthLayout.47bc4d6b.js +1 -0
- package/dashboard/spa/assets/EmailFilePage.5146dfaa.js +2 -0
- package/dashboard/spa/assets/EmailFilePage.c4890c9c.css +1 -0
- package/dashboard/spa/assets/ErrorNotFound.2be1d090.js +1 -0
- package/dashboard/spa/assets/KFOkCnqEu92Fr1MmgVxIIzQ.d240a9ae.woff +0 -0
- package/dashboard/spa/assets/KFOlCnqEu92Fr1MmEU9fBBc-.6ba203eb.woff +0 -0
- package/dashboard/spa/assets/KFOlCnqEu92Fr1MmSU5fBBc-.80684728.woff +0 -0
- package/dashboard/spa/assets/KFOlCnqEu92Fr1MmWUlfBBc-.2df244f6.woff +0 -0
- package/dashboard/spa/assets/KFOlCnqEu92Fr1MmYUtfBBc-.742ce02b.woff +0 -0
- package/dashboard/spa/assets/KFOmCnqEu92Fr1Mu4mxM.f00fa16d.woff +0 -0
- package/dashboard/spa/assets/LoginPage.e449cd8d.js +1 -0
- package/dashboard/spa/assets/auth-store.1a4593f8.js +1 -0
- package/dashboard/spa/assets/auth.a5ffeab6.js +1 -0
- package/dashboard/spa/assets/bus.67913454.js +1 -0
- package/dashboard/spa/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.fd84f88b.woff +0 -0
- package/dashboard/spa/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.4a4dbc62.woff2 +0 -0
- package/dashboard/spa/assets/index.7e109f1f.css +5 -0
- package/dashboard/spa/assets/index.ddf53a58.js +104 -0
- package/dashboard/spa/favicon.ico +0 -0
- package/dashboard/spa/icons/favicon-128x128.png +0 -0
- package/dashboard/spa/icons/favicon-16x16.png +0 -0
- package/dashboard/spa/icons/favicon-32x32.png +0 -0
- package/dashboard/spa/icons/favicon-96x96.png +0 -0
- package/dashboard/spa/icons/logo.png +0 -0
- package/dashboard/spa/index.html +46 -0
- package/dashboard/spa/logo-white.svg +5 -0
- package/dashboard/spa/logo.png +0 -0
- package/dashboard/spa/robots.txt +2 -0
- package/dist/index.d.mts +0 -5
- package/dist/index.d.ts +0 -5
- package/dist/index.js +45 -64
- package/dist/index.mjs +37 -56
- package/package.json +67 -66
- package/dashboard/assets/AuthLayout.828e1213.js +0 -1
- package/dashboard/assets/EmailFilePage.148b4f84.js +0 -2
- package/dashboard/assets/EmailFolderPage.0c5be156.js +0 -1
- package/dashboard/assets/EmailFolderPage.25044e0a.css +0 -1
- package/dashboard/assets/FilesFolderPage.7cadc3fd.js +0 -72
- package/dashboard/assets/FilesFolderPage.ecacd99f.css +0 -1
- package/dashboard/assets/HomePage.fd1efdb0.js +0 -1
- package/dashboard/assets/LoginPage.5e2746c3.js +0 -1
- package/dashboard/assets/MainLayout.05d49d78.css +0 -1
- package/dashboard/assets/MainLayout.54c624c6.js +0 -1
- package/dashboard/assets/QCard.9ca85696.js +0 -1
- package/dashboard/assets/QCardActions.3d6ece78.js +0 -1
- package/dashboard/assets/QForm.1a0fa8bd.js +0 -1
- package/dashboard/assets/QInput.dbc14c53.js +0 -1
- package/dashboard/assets/QLayout.7c9341c3.js +0 -1
- package/dashboard/assets/QPage.1736cadc.js +0 -1
- package/dashboard/assets/QSeparator.d0c0fb0f.js +0 -1
- package/dashboard/assets/QSpace.3225ba0f.js +0 -1
- package/dashboard/assets/QTable.3fe6867d.js +0 -1
- package/dashboard/assets/QTd.32b217d9.js +0 -1
- package/dashboard/assets/auth-store.10a6215e.js +0 -1
- package/dashboard/assets/auth.3fb1cfd3.js +0 -1
- package/dashboard/assets/axios.d3fa833b.js +0 -6
- package/dashboard/assets/focus-manager.1ddae684.js +0 -1
- package/dashboard/assets/index.31a4681e.js +0 -25
- package/dashboard/assets/main-store.ee636e78.js +0 -1
- package/dashboard/assets/scroll.6727d3ea.js +0 -1
- package/dashboard/assets/use-checkbox.687a19bf.js +0 -1
- package/dashboard/assets/use-dark.6e19ce43.js +0 -1
- package/dashboard/assets/use-quasar.0c0b766f.js +0 -1
- package/dashboard/assets/use-transition.19980487.js +0 -1
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang=en><head><title>R2-Explorer</title><meta charset=utf-8><meta name=description content=R2-Explorer><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><meta name=robots content=noindex><meta name=googlebot content=noindex><link rel=icon type=image/png sizes=128x128 href="/icons/favicon-128x128.png"><link rel=icon type=image/png sizes=96x96 href="/icons/favicon-96x96.png"><link rel=icon type=image/png sizes=32x32 href="/icons/favicon-32x32.png"><link rel=icon type=image/png sizes=16x16 href="/icons/favicon-16x16.png"><link rel=icon type=image/ico href="/favicon.ico"><style>.initialLoading {
|
|
2
|
+
margin: 0;
|
|
3
|
+
padding: 0;
|
|
4
|
+
display: flex;
|
|
5
|
+
justify-content: center;
|
|
6
|
+
align-items: center;
|
|
7
|
+
min-height: 100vh;
|
|
8
|
+
background-color: #f5f5f5;
|
|
9
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.initialLoading .loading-container {
|
|
13
|
+
text-align: center;
|
|
14
|
+
padding: 2rem;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.initialLoading .spinner {
|
|
18
|
+
width: 50px;
|
|
19
|
+
height: 50px;
|
|
20
|
+
border: 5px solid #f3f3f3;
|
|
21
|
+
border-top: 5px solid #3498db;
|
|
22
|
+
border-radius: 50%;
|
|
23
|
+
animation: initialLoadingSpin 1s linear infinite;
|
|
24
|
+
margin: 0 auto 1rem;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@keyframes initialLoadingSpin {
|
|
28
|
+
0% { transform: rotate(0deg); }
|
|
29
|
+
100% { transform: rotate(360deg); }
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.initialLoading .loading-text {
|
|
33
|
+
color: #333;
|
|
34
|
+
font-size: 1.2rem;
|
|
35
|
+
margin-bottom: 0.5rem;
|
|
36
|
+
}</style> <script type="module" crossorigin src="/assets/index.ddf53a58.js"></script>
|
|
37
|
+
<link rel="stylesheet" href="/assets/index.7e109f1f.css">
|
|
38
|
+
</head><body><div id=q-app></div></body><script>var elem = document.getElementById('q-app')
|
|
39
|
+
elem.innerHTML = `
|
|
40
|
+
<div class="initialLoading">
|
|
41
|
+
<div class="loading-container" id="loadingContainer">
|
|
42
|
+
<div class="spinner"></div>
|
|
43
|
+
<p class="loading-text">Loading R2-Explorer</p>
|
|
44
|
+
<p style="color: #666; font-size: 0.9rem;">Please wait while the application initializes...</p>
|
|
45
|
+
</div>
|
|
46
|
+
</div>` + elem.innerHTML;</script></html>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
2
|
+
width="62.438px" height="53.605px" viewBox="0 0 62.438 53.605" enable-background="new 0 0 62.438 53.605" xml:space="preserve">
|
|
3
|
+
<path fill="#ffffff"
|
|
4
|
+
d="M 31.215 28.283 L 21.917 32.794 L 9.333 26.691 L 9.333 42.941 L 31.216 53.554 L 53.099 42.941 L 53.099 26.691 L 40.515 32.794 L 31.215 28.283 Z M 42.156 40.763 L 42.156 43.258 M 30.592 33.435 L 31.838 33.435 L 31.838 48.401 L 30.592 48.401 L 30.592 33.435 Z M 9.332 15.177 L 31.215 25.79 L 21.917 30.299 L 0.033 19.687 L 9.332 15.177 Z M 53.097 15.177 L 62.395 19.687 L 40.513 30.299 L 31.214 25.79 L 53.097 15.177 Z M 9.332 15.177 L 31.215 4.564 L 21.917 0.053 L 0.033 10.666 L 9.332 15.177 Z M 53.097 15.177 L 62.395 10.666 L 40.513 0.053 L 31.214 4.564 L 53.097 15.177 Z"/>
|
|
5
|
+
</svg>
|
|
Binary file
|
package/dist/index.d.mts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -33,7 +33,7 @@ __export(src_exports, {
|
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(src_exports);
|
|
35
35
|
var import_cloudflare_access = require("@hono/cloudflare-access");
|
|
36
|
-
var
|
|
36
|
+
var import_chanfana14 = require("chanfana");
|
|
37
37
|
var import_hono = require("hono");
|
|
38
38
|
var import_basic_auth = require("hono/basic-auth");
|
|
39
39
|
var import_cors = require("hono/cors");
|
|
@@ -60,7 +60,7 @@ async function readOnlyMiddleware(c, next) {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
// package.json
|
|
63
|
-
var version = "1.1.
|
|
63
|
+
var version = "1.1.2";
|
|
64
64
|
|
|
65
65
|
// src/foundation/settings.ts
|
|
66
66
|
var settings = {
|
|
@@ -213,31 +213,10 @@ var HeadObject = class extends import_chanfana4.OpenAPIRoute {
|
|
|
213
213
|
}
|
|
214
214
|
};
|
|
215
215
|
|
|
216
|
-
// src/modules/buckets/listBuckets.ts
|
|
217
|
-
var import_chanfana5 = require("chanfana");
|
|
218
|
-
var ListBuckets = class extends import_chanfana5.OpenAPIRoute {
|
|
219
|
-
schema = {
|
|
220
|
-
operationId: "get-bucket-list",
|
|
221
|
-
tags: ["Buckets"],
|
|
222
|
-
summary: "List buckets"
|
|
223
|
-
};
|
|
224
|
-
async handle(c) {
|
|
225
|
-
const buckets = [];
|
|
226
|
-
for (const [key, value] of Object.entries(c.env)) {
|
|
227
|
-
if (value.get && value.put && value.get.toString().includes("function") && value.put.toString().includes("function")) {
|
|
228
|
-
buckets.push({ name: key });
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
return {
|
|
232
|
-
buckets
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
|
-
|
|
237
216
|
// src/modules/buckets/listObjects.ts
|
|
238
|
-
var
|
|
217
|
+
var import_chanfana5 = require("chanfana");
|
|
239
218
|
var import_zod5 = require("zod");
|
|
240
|
-
var ListObjects = class extends
|
|
219
|
+
var ListObjects = class extends import_chanfana5.OpenAPIRoute {
|
|
241
220
|
schema = {
|
|
242
221
|
operationId: "get-bucket-list-objects",
|
|
243
222
|
tags: ["Buckets"],
|
|
@@ -273,9 +252,9 @@ var ListObjects = class extends import_chanfana6.OpenAPIRoute {
|
|
|
273
252
|
};
|
|
274
253
|
|
|
275
254
|
// src/modules/buckets/moveObject.ts
|
|
276
|
-
var
|
|
255
|
+
var import_chanfana6 = require("chanfana");
|
|
277
256
|
var import_zod6 = require("zod");
|
|
278
|
-
var MoveObject = class extends
|
|
257
|
+
var MoveObject = class extends import_chanfana6.OpenAPIRoute {
|
|
279
258
|
schema = {
|
|
280
259
|
operationId: "post-bucket-move-object",
|
|
281
260
|
tags: ["Buckets"],
|
|
@@ -312,9 +291,9 @@ var MoveObject = class extends import_chanfana7.OpenAPIRoute {
|
|
|
312
291
|
};
|
|
313
292
|
|
|
314
293
|
// src/modules/buckets/multipart/completeUpload.ts
|
|
315
|
-
var
|
|
294
|
+
var import_chanfana7 = require("chanfana");
|
|
316
295
|
var import_zod7 = require("zod");
|
|
317
|
-
var CompleteUpload = class extends
|
|
296
|
+
var CompleteUpload = class extends import_chanfana7.OpenAPIRoute {
|
|
318
297
|
schema = {
|
|
319
298
|
operationId: "post-multipart-complete-upload",
|
|
320
299
|
tags: ["Multipart"],
|
|
@@ -359,9 +338,9 @@ var CompleteUpload = class extends import_chanfana8.OpenAPIRoute {
|
|
|
359
338
|
};
|
|
360
339
|
|
|
361
340
|
// src/modules/buckets/multipart/createUpload.ts
|
|
362
|
-
var
|
|
341
|
+
var import_chanfana8 = require("chanfana");
|
|
363
342
|
var import_zod8 = require("zod");
|
|
364
|
-
var CreateUpload = class extends
|
|
343
|
+
var CreateUpload = class extends import_chanfana8.OpenAPIRoute {
|
|
365
344
|
schema = {
|
|
366
345
|
operationId: "post-multipart-create-upload",
|
|
367
346
|
tags: ["Multipart"],
|
|
@@ -401,9 +380,9 @@ var CreateUpload = class extends import_chanfana9.OpenAPIRoute {
|
|
|
401
380
|
};
|
|
402
381
|
|
|
403
382
|
// src/modules/buckets/multipart/partUpload.ts
|
|
404
|
-
var
|
|
383
|
+
var import_chanfana9 = require("chanfana");
|
|
405
384
|
var import_zod9 = require("zod");
|
|
406
|
-
var PartUpload = class extends
|
|
385
|
+
var PartUpload = class extends import_chanfana9.OpenAPIRoute {
|
|
407
386
|
schema = {
|
|
408
387
|
operationId: "post-multipart-part-upload",
|
|
409
388
|
tags: ["Multipart"],
|
|
@@ -449,9 +428,9 @@ var PartUpload = class extends import_chanfana10.OpenAPIRoute {
|
|
|
449
428
|
};
|
|
450
429
|
|
|
451
430
|
// src/modules/buckets/putMetadata.ts
|
|
452
|
-
var
|
|
431
|
+
var import_chanfana10 = require("chanfana");
|
|
453
432
|
var import_zod10 = require("zod");
|
|
454
|
-
var PutMetadata = class extends
|
|
433
|
+
var PutMetadata = class extends import_chanfana10.OpenAPIRoute {
|
|
455
434
|
schema = {
|
|
456
435
|
operationId: "post-bucket-put-object-metadata",
|
|
457
436
|
tags: ["Buckets"],
|
|
@@ -465,7 +444,8 @@ var PutMetadata = class extends import_chanfana11.OpenAPIRoute {
|
|
|
465
444
|
content: {
|
|
466
445
|
"application/json": {
|
|
467
446
|
schema: import_zod10.z.object({
|
|
468
|
-
customMetadata: import_zod10.z.record(import_zod10.z.string(), import_zod10.z.any())
|
|
447
|
+
customMetadata: import_zod10.z.record(import_zod10.z.string(), import_zod10.z.any()),
|
|
448
|
+
httpMetadata: import_zod10.z.record(import_zod10.z.string(), import_zod10.z.any())
|
|
469
449
|
}).openapi("Object metadata")
|
|
470
450
|
}
|
|
471
451
|
}
|
|
@@ -485,15 +465,16 @@ var PutMetadata = class extends import_chanfana11.OpenAPIRoute {
|
|
|
485
465
|
}
|
|
486
466
|
const object = await bucket.get(filePath);
|
|
487
467
|
return await bucket.put(filePath, object.body, {
|
|
488
|
-
customMetadata: data.body.customMetadata
|
|
468
|
+
customMetadata: data.body.customMetadata,
|
|
469
|
+
httpMetadata: data.body.httpMetadata
|
|
489
470
|
});
|
|
490
471
|
}
|
|
491
472
|
};
|
|
492
473
|
|
|
493
474
|
// src/modules/buckets/putObject.ts
|
|
494
|
-
var
|
|
475
|
+
var import_chanfana11 = require("chanfana");
|
|
495
476
|
var import_zod11 = require("zod");
|
|
496
|
-
var PutObject = class extends
|
|
477
|
+
var PutObject = class extends import_chanfana11.OpenAPIRoute {
|
|
497
478
|
schema = {
|
|
498
479
|
operationId: "post-bucket-upload-object",
|
|
499
480
|
tags: ["Buckets"],
|
|
@@ -634,9 +615,9 @@ async function receiveEmail(event, env, ctx, config) {
|
|
|
634
615
|
}
|
|
635
616
|
|
|
636
617
|
// src/modules/emails/sendEmail.ts
|
|
637
|
-
var
|
|
618
|
+
var import_chanfana12 = require("chanfana");
|
|
638
619
|
var import_zod12 = require("zod");
|
|
639
|
-
var SendEmail = class extends
|
|
620
|
+
var SendEmail = class extends import_chanfana12.OpenAPIRoute {
|
|
640
621
|
schema = {
|
|
641
622
|
operationId: "post-email-send",
|
|
642
623
|
tags: ["Emails"],
|
|
@@ -646,14 +627,14 @@ var SendEmail = class extends import_chanfana13.OpenAPIRoute {
|
|
|
646
627
|
content: {
|
|
647
628
|
"application/json": {
|
|
648
629
|
schema: import_zod12.z.object({
|
|
649
|
-
subject: (0,
|
|
630
|
+
subject: (0, import_chanfana12.Str)({ example: "Look! No servers" }),
|
|
650
631
|
from: import_zod12.z.object({
|
|
651
|
-
email: (0,
|
|
652
|
-
name: (0,
|
|
632
|
+
email: (0, import_chanfana12.Str)({ example: "sender@example.com" }),
|
|
633
|
+
name: (0, import_chanfana12.Str)({ example: "Workers - MailChannels integration" })
|
|
653
634
|
}),
|
|
654
635
|
to: import_zod12.z.object({
|
|
655
|
-
email: (0,
|
|
656
|
-
name: (0,
|
|
636
|
+
email: (0, import_chanfana12.Str)({ example: "test@example.com" }),
|
|
637
|
+
name: (0, import_chanfana12.Str)({ example: "Test Recipient" })
|
|
657
638
|
}).array(),
|
|
658
639
|
content: import_zod12.z.object({}).catchall(import_zod12.z.string())
|
|
659
640
|
})
|
|
@@ -673,8 +654,8 @@ var SendEmail = class extends import_chanfana13.OpenAPIRoute {
|
|
|
673
654
|
};
|
|
674
655
|
|
|
675
656
|
// src/modules/server/getInfo.ts
|
|
676
|
-
var
|
|
677
|
-
var GetInfo = class extends
|
|
657
|
+
var import_chanfana13 = require("chanfana");
|
|
658
|
+
var GetInfo = class extends import_chanfana13.OpenAPIRoute {
|
|
678
659
|
schema = {
|
|
679
660
|
operationId: "get-server-info",
|
|
680
661
|
tags: ["Server"],
|
|
@@ -682,20 +663,27 @@ var GetInfo = class extends import_chanfana14.OpenAPIRoute {
|
|
|
682
663
|
};
|
|
683
664
|
async handle(c) {
|
|
684
665
|
const { basicAuth: basicAuth2, ...config } = c.get("config");
|
|
666
|
+
const buckets = [];
|
|
667
|
+
for (const [key, value] of Object.entries(c.env)) {
|
|
668
|
+
if (value.get && value.put && value.get.toString().includes("function") && value.put.toString().includes("function")) {
|
|
669
|
+
buckets.push({ name: key });
|
|
670
|
+
}
|
|
671
|
+
}
|
|
685
672
|
return {
|
|
686
673
|
version: settings.version,
|
|
687
674
|
config,
|
|
688
675
|
auth: c.get("authentication_type") ? {
|
|
689
676
|
type: c.get("authentication_type"),
|
|
690
677
|
username: c.get("authentication_username")
|
|
691
|
-
} : void 0
|
|
678
|
+
} : void 0,
|
|
679
|
+
buckets
|
|
692
680
|
};
|
|
693
681
|
}
|
|
694
682
|
};
|
|
695
683
|
|
|
696
684
|
// src/index.ts
|
|
697
685
|
function R2Explorer(config) {
|
|
698
|
-
(0,
|
|
686
|
+
(0, import_chanfana14.extendZodWithOpenApi)(import_zod13.z);
|
|
699
687
|
config = config || {};
|
|
700
688
|
if (config.readonly !== false) config.readonly = true;
|
|
701
689
|
const openapiSchema = {
|
|
@@ -717,27 +705,20 @@ function R2Explorer(config) {
|
|
|
717
705
|
c.set("config", config);
|
|
718
706
|
await next();
|
|
719
707
|
});
|
|
720
|
-
const openapi = (0,
|
|
708
|
+
const openapi = (0, import_chanfana14.fromHono)(app, {
|
|
721
709
|
schema: openapiSchema,
|
|
722
710
|
raiseUnknownParameters: true,
|
|
723
711
|
generateOperationIds: false
|
|
724
712
|
});
|
|
725
713
|
if (config.cors === true) {
|
|
726
|
-
app.use(
|
|
727
|
-
"*",
|
|
728
|
-
(0, import_cors.cors)({
|
|
729
|
-
origin: "*",
|
|
730
|
-
allowMethods: ["*"],
|
|
731
|
-
credentials: true
|
|
732
|
-
})
|
|
733
|
-
);
|
|
714
|
+
app.use("/api/*", (0, import_cors.cors)());
|
|
734
715
|
}
|
|
735
716
|
if (config.readonly === true) {
|
|
736
|
-
app.use("
|
|
717
|
+
app.use("/api/*", readOnlyMiddleware);
|
|
737
718
|
}
|
|
738
719
|
if (config.cfAccessTeamName) {
|
|
739
|
-
app.use("
|
|
740
|
-
app.use("
|
|
720
|
+
app.use("/api/*", (0, import_cloudflare_access.cloudflareAccess)(config.cfAccessTeamName));
|
|
721
|
+
app.use("/api/*", async (c, next) => {
|
|
741
722
|
c.set("authentication_type", "cloudflare-access");
|
|
742
723
|
c.set("authentication_username", c.get("accessPayload").email);
|
|
743
724
|
await next();
|
|
@@ -749,8 +730,9 @@ function R2Explorer(config) {
|
|
|
749
730
|
scheme: "basic"
|
|
750
731
|
});
|
|
751
732
|
app.use(
|
|
752
|
-
"
|
|
733
|
+
"/api/*",
|
|
753
734
|
(0, import_basic_auth.basicAuth)({
|
|
735
|
+
invalidUserMessage: "Authentication error: Basic Auth required",
|
|
754
736
|
verifyUser: (username, password, c) => {
|
|
755
737
|
const users = Array.isArray(c.get("config").basicAuth) ? c.get("config").basicAuth : [c.get("config").basicAuth];
|
|
756
738
|
for (const user of users) {
|
|
@@ -766,7 +748,6 @@ function R2Explorer(config) {
|
|
|
766
748
|
);
|
|
767
749
|
}
|
|
768
750
|
openapi.get("/api/server/config", GetInfo);
|
|
769
|
-
openapi.get("/api/buckets", ListBuckets);
|
|
770
751
|
openapi.get("/api/buckets/:bucket", ListObjects);
|
|
771
752
|
openapi.post("/api/buckets/:bucket/move", MoveObject);
|
|
772
753
|
openapi.post("/api/buckets/:bucket/folder", CreateFolder);
|
package/dist/index.mjs
CHANGED
|
@@ -30,7 +30,7 @@ async function readOnlyMiddleware(c, next) {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
// package.json
|
|
33
|
-
var version = "1.1.
|
|
33
|
+
var version = "1.1.2";
|
|
34
34
|
|
|
35
35
|
// src/foundation/settings.ts
|
|
36
36
|
var settings = {
|
|
@@ -183,31 +183,10 @@ var HeadObject = class extends OpenAPIRoute4 {
|
|
|
183
183
|
}
|
|
184
184
|
};
|
|
185
185
|
|
|
186
|
-
// src/modules/buckets/listBuckets.ts
|
|
187
|
-
import { OpenAPIRoute as OpenAPIRoute5 } from "chanfana";
|
|
188
|
-
var ListBuckets = class extends OpenAPIRoute5 {
|
|
189
|
-
schema = {
|
|
190
|
-
operationId: "get-bucket-list",
|
|
191
|
-
tags: ["Buckets"],
|
|
192
|
-
summary: "List buckets"
|
|
193
|
-
};
|
|
194
|
-
async handle(c) {
|
|
195
|
-
const buckets = [];
|
|
196
|
-
for (const [key, value] of Object.entries(c.env)) {
|
|
197
|
-
if (value.get && value.put && value.get.toString().includes("function") && value.put.toString().includes("function")) {
|
|
198
|
-
buckets.push({ name: key });
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return {
|
|
202
|
-
buckets
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
};
|
|
206
|
-
|
|
207
186
|
// src/modules/buckets/listObjects.ts
|
|
208
|
-
import { OpenAPIRoute as
|
|
187
|
+
import { OpenAPIRoute as OpenAPIRoute5 } from "chanfana";
|
|
209
188
|
import { z as z5 } from "zod";
|
|
210
|
-
var ListObjects = class extends
|
|
189
|
+
var ListObjects = class extends OpenAPIRoute5 {
|
|
211
190
|
schema = {
|
|
212
191
|
operationId: "get-bucket-list-objects",
|
|
213
192
|
tags: ["Buckets"],
|
|
@@ -243,9 +222,9 @@ var ListObjects = class extends OpenAPIRoute6 {
|
|
|
243
222
|
};
|
|
244
223
|
|
|
245
224
|
// src/modules/buckets/moveObject.ts
|
|
246
|
-
import { OpenAPIRoute as
|
|
225
|
+
import { OpenAPIRoute as OpenAPIRoute6 } from "chanfana";
|
|
247
226
|
import { z as z6 } from "zod";
|
|
248
|
-
var MoveObject = class extends
|
|
227
|
+
var MoveObject = class extends OpenAPIRoute6 {
|
|
249
228
|
schema = {
|
|
250
229
|
operationId: "post-bucket-move-object",
|
|
251
230
|
tags: ["Buckets"],
|
|
@@ -282,9 +261,9 @@ var MoveObject = class extends OpenAPIRoute7 {
|
|
|
282
261
|
};
|
|
283
262
|
|
|
284
263
|
// src/modules/buckets/multipart/completeUpload.ts
|
|
285
|
-
import { OpenAPIRoute as
|
|
264
|
+
import { OpenAPIRoute as OpenAPIRoute7 } from "chanfana";
|
|
286
265
|
import { z as z7 } from "zod";
|
|
287
|
-
var CompleteUpload = class extends
|
|
266
|
+
var CompleteUpload = class extends OpenAPIRoute7 {
|
|
288
267
|
schema = {
|
|
289
268
|
operationId: "post-multipart-complete-upload",
|
|
290
269
|
tags: ["Multipart"],
|
|
@@ -329,9 +308,9 @@ var CompleteUpload = class extends OpenAPIRoute8 {
|
|
|
329
308
|
};
|
|
330
309
|
|
|
331
310
|
// src/modules/buckets/multipart/createUpload.ts
|
|
332
|
-
import { OpenAPIRoute as
|
|
311
|
+
import { OpenAPIRoute as OpenAPIRoute8 } from "chanfana";
|
|
333
312
|
import { z as z8 } from "zod";
|
|
334
|
-
var CreateUpload = class extends
|
|
313
|
+
var CreateUpload = class extends OpenAPIRoute8 {
|
|
335
314
|
schema = {
|
|
336
315
|
operationId: "post-multipart-create-upload",
|
|
337
316
|
tags: ["Multipart"],
|
|
@@ -371,9 +350,9 @@ var CreateUpload = class extends OpenAPIRoute9 {
|
|
|
371
350
|
};
|
|
372
351
|
|
|
373
352
|
// src/modules/buckets/multipart/partUpload.ts
|
|
374
|
-
import { OpenAPIRoute as
|
|
353
|
+
import { OpenAPIRoute as OpenAPIRoute9 } from "chanfana";
|
|
375
354
|
import { z as z9 } from "zod";
|
|
376
|
-
var PartUpload = class extends
|
|
355
|
+
var PartUpload = class extends OpenAPIRoute9 {
|
|
377
356
|
schema = {
|
|
378
357
|
operationId: "post-multipart-part-upload",
|
|
379
358
|
tags: ["Multipart"],
|
|
@@ -419,9 +398,9 @@ var PartUpload = class extends OpenAPIRoute10 {
|
|
|
419
398
|
};
|
|
420
399
|
|
|
421
400
|
// src/modules/buckets/putMetadata.ts
|
|
422
|
-
import { OpenAPIRoute as
|
|
401
|
+
import { OpenAPIRoute as OpenAPIRoute10 } from "chanfana";
|
|
423
402
|
import { z as z10 } from "zod";
|
|
424
|
-
var PutMetadata = class extends
|
|
403
|
+
var PutMetadata = class extends OpenAPIRoute10 {
|
|
425
404
|
schema = {
|
|
426
405
|
operationId: "post-bucket-put-object-metadata",
|
|
427
406
|
tags: ["Buckets"],
|
|
@@ -435,7 +414,8 @@ var PutMetadata = class extends OpenAPIRoute11 {
|
|
|
435
414
|
content: {
|
|
436
415
|
"application/json": {
|
|
437
416
|
schema: z10.object({
|
|
438
|
-
customMetadata: z10.record(z10.string(), z10.any())
|
|
417
|
+
customMetadata: z10.record(z10.string(), z10.any()),
|
|
418
|
+
httpMetadata: z10.record(z10.string(), z10.any())
|
|
439
419
|
}).openapi("Object metadata")
|
|
440
420
|
}
|
|
441
421
|
}
|
|
@@ -455,15 +435,16 @@ var PutMetadata = class extends OpenAPIRoute11 {
|
|
|
455
435
|
}
|
|
456
436
|
const object = await bucket.get(filePath);
|
|
457
437
|
return await bucket.put(filePath, object.body, {
|
|
458
|
-
customMetadata: data.body.customMetadata
|
|
438
|
+
customMetadata: data.body.customMetadata,
|
|
439
|
+
httpMetadata: data.body.httpMetadata
|
|
459
440
|
});
|
|
460
441
|
}
|
|
461
442
|
};
|
|
462
443
|
|
|
463
444
|
// src/modules/buckets/putObject.ts
|
|
464
|
-
import { OpenAPIRoute as
|
|
445
|
+
import { OpenAPIRoute as OpenAPIRoute11 } from "chanfana";
|
|
465
446
|
import { z as z11 } from "zod";
|
|
466
|
-
var PutObject = class extends
|
|
447
|
+
var PutObject = class extends OpenAPIRoute11 {
|
|
467
448
|
schema = {
|
|
468
449
|
operationId: "post-bucket-upload-object",
|
|
469
450
|
tags: ["Buckets"],
|
|
@@ -604,9 +585,9 @@ async function receiveEmail(event, env, ctx, config) {
|
|
|
604
585
|
}
|
|
605
586
|
|
|
606
587
|
// src/modules/emails/sendEmail.ts
|
|
607
|
-
import { OpenAPIRoute as
|
|
588
|
+
import { OpenAPIRoute as OpenAPIRoute12, Str } from "chanfana";
|
|
608
589
|
import { z as z12 } from "zod";
|
|
609
|
-
var SendEmail = class extends
|
|
590
|
+
var SendEmail = class extends OpenAPIRoute12 {
|
|
610
591
|
schema = {
|
|
611
592
|
operationId: "post-email-send",
|
|
612
593
|
tags: ["Emails"],
|
|
@@ -643,8 +624,8 @@ var SendEmail = class extends OpenAPIRoute13 {
|
|
|
643
624
|
};
|
|
644
625
|
|
|
645
626
|
// src/modules/server/getInfo.ts
|
|
646
|
-
import { OpenAPIRoute as
|
|
647
|
-
var GetInfo = class extends
|
|
627
|
+
import { OpenAPIRoute as OpenAPIRoute13 } from "chanfana";
|
|
628
|
+
var GetInfo = class extends OpenAPIRoute13 {
|
|
648
629
|
schema = {
|
|
649
630
|
operationId: "get-server-info",
|
|
650
631
|
tags: ["Server"],
|
|
@@ -652,13 +633,20 @@ var GetInfo = class extends OpenAPIRoute14 {
|
|
|
652
633
|
};
|
|
653
634
|
async handle(c) {
|
|
654
635
|
const { basicAuth: basicAuth2, ...config } = c.get("config");
|
|
636
|
+
const buckets = [];
|
|
637
|
+
for (const [key, value] of Object.entries(c.env)) {
|
|
638
|
+
if (value.get && value.put && value.get.toString().includes("function") && value.put.toString().includes("function")) {
|
|
639
|
+
buckets.push({ name: key });
|
|
640
|
+
}
|
|
641
|
+
}
|
|
655
642
|
return {
|
|
656
643
|
version: settings.version,
|
|
657
644
|
config,
|
|
658
645
|
auth: c.get("authentication_type") ? {
|
|
659
646
|
type: c.get("authentication_type"),
|
|
660
647
|
username: c.get("authentication_username")
|
|
661
|
-
} : void 0
|
|
648
|
+
} : void 0,
|
|
649
|
+
buckets
|
|
662
650
|
};
|
|
663
651
|
}
|
|
664
652
|
};
|
|
@@ -693,21 +681,14 @@ function R2Explorer(config) {
|
|
|
693
681
|
generateOperationIds: false
|
|
694
682
|
});
|
|
695
683
|
if (config.cors === true) {
|
|
696
|
-
app.use(
|
|
697
|
-
"*",
|
|
698
|
-
cors({
|
|
699
|
-
origin: "*",
|
|
700
|
-
allowMethods: ["*"],
|
|
701
|
-
credentials: true
|
|
702
|
-
})
|
|
703
|
-
);
|
|
684
|
+
app.use("/api/*", cors());
|
|
704
685
|
}
|
|
705
686
|
if (config.readonly === true) {
|
|
706
|
-
app.use("
|
|
687
|
+
app.use("/api/*", readOnlyMiddleware);
|
|
707
688
|
}
|
|
708
689
|
if (config.cfAccessTeamName) {
|
|
709
|
-
app.use("
|
|
710
|
-
app.use("
|
|
690
|
+
app.use("/api/*", cloudflareAccess(config.cfAccessTeamName));
|
|
691
|
+
app.use("/api/*", async (c, next) => {
|
|
711
692
|
c.set("authentication_type", "cloudflare-access");
|
|
712
693
|
c.set("authentication_username", c.get("accessPayload").email);
|
|
713
694
|
await next();
|
|
@@ -719,8 +700,9 @@ function R2Explorer(config) {
|
|
|
719
700
|
scheme: "basic"
|
|
720
701
|
});
|
|
721
702
|
app.use(
|
|
722
|
-
"
|
|
703
|
+
"/api/*",
|
|
723
704
|
basicAuth({
|
|
705
|
+
invalidUserMessage: "Authentication error: Basic Auth required",
|
|
724
706
|
verifyUser: (username, password, c) => {
|
|
725
707
|
const users = Array.isArray(c.get("config").basicAuth) ? c.get("config").basicAuth : [c.get("config").basicAuth];
|
|
726
708
|
for (const user of users) {
|
|
@@ -736,7 +718,6 @@ function R2Explorer(config) {
|
|
|
736
718
|
);
|
|
737
719
|
}
|
|
738
720
|
openapi.get("/api/server/config", GetInfo);
|
|
739
|
-
openapi.get("/api/buckets", ListBuckets);
|
|
740
721
|
openapi.get("/api/buckets/:bucket", ListObjects);
|
|
741
722
|
openapi.post("/api/buckets/:bucket/move", MoveObject);
|
|
742
723
|
openapi.post("/api/buckets/:bucket/folder", CreateFolder);
|