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.
Files changed (75) hide show
  1. package/README.md +50 -47
  2. package/dashboard/assets/AuthLayout.47bc4d6b.js +1 -0
  3. package/dashboard/assets/EmailFilePage.5146dfaa.js +2 -0
  4. package/dashboard/assets/{ErrorNotFound.a0d3ece6.js → ErrorNotFound.2be1d090.js} +1 -1
  5. package/dashboard/assets/LoginPage.e449cd8d.js +1 -0
  6. package/dashboard/assets/auth-store.1a4593f8.js +1 -0
  7. package/dashboard/assets/auth.a5ffeab6.js +1 -0
  8. package/dashboard/assets/{bus.def2db9e.js → bus.67913454.js} +1 -1
  9. package/dashboard/assets/{index.073c3cc5.css → index.7e109f1f.css} +2 -2
  10. package/dashboard/assets/index.ddf53a58.js +104 -0
  11. package/dashboard/index.html +46 -3
  12. package/dashboard/spa/assets/AuthLayout.47bc4d6b.js +1 -0
  13. package/dashboard/spa/assets/EmailFilePage.5146dfaa.js +2 -0
  14. package/dashboard/spa/assets/EmailFilePage.c4890c9c.css +1 -0
  15. package/dashboard/spa/assets/ErrorNotFound.2be1d090.js +1 -0
  16. package/dashboard/spa/assets/KFOkCnqEu92Fr1MmgVxIIzQ.d240a9ae.woff +0 -0
  17. package/dashboard/spa/assets/KFOlCnqEu92Fr1MmEU9fBBc-.6ba203eb.woff +0 -0
  18. package/dashboard/spa/assets/KFOlCnqEu92Fr1MmSU5fBBc-.80684728.woff +0 -0
  19. package/dashboard/spa/assets/KFOlCnqEu92Fr1MmWUlfBBc-.2df244f6.woff +0 -0
  20. package/dashboard/spa/assets/KFOlCnqEu92Fr1MmYUtfBBc-.742ce02b.woff +0 -0
  21. package/dashboard/spa/assets/KFOmCnqEu92Fr1Mu4mxM.f00fa16d.woff +0 -0
  22. package/dashboard/spa/assets/LoginPage.e449cd8d.js +1 -0
  23. package/dashboard/spa/assets/auth-store.1a4593f8.js +1 -0
  24. package/dashboard/spa/assets/auth.a5ffeab6.js +1 -0
  25. package/dashboard/spa/assets/bus.67913454.js +1 -0
  26. package/dashboard/spa/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.fd84f88b.woff +0 -0
  27. package/dashboard/spa/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.4a4dbc62.woff2 +0 -0
  28. package/dashboard/spa/assets/index.7e109f1f.css +5 -0
  29. package/dashboard/spa/assets/index.ddf53a58.js +104 -0
  30. package/dashboard/spa/favicon.ico +0 -0
  31. package/dashboard/spa/icons/favicon-128x128.png +0 -0
  32. package/dashboard/spa/icons/favicon-16x16.png +0 -0
  33. package/dashboard/spa/icons/favicon-32x32.png +0 -0
  34. package/dashboard/spa/icons/favicon-96x96.png +0 -0
  35. package/dashboard/spa/icons/logo.png +0 -0
  36. package/dashboard/spa/index.html +46 -0
  37. package/dashboard/spa/logo-white.svg +5 -0
  38. package/dashboard/spa/logo.png +0 -0
  39. package/dashboard/spa/robots.txt +2 -0
  40. package/dist/index.d.mts +0 -5
  41. package/dist/index.d.ts +0 -5
  42. package/dist/index.js +45 -64
  43. package/dist/index.mjs +37 -56
  44. package/package.json +67 -66
  45. package/dashboard/assets/AuthLayout.828e1213.js +0 -1
  46. package/dashboard/assets/EmailFilePage.148b4f84.js +0 -2
  47. package/dashboard/assets/EmailFolderPage.0c5be156.js +0 -1
  48. package/dashboard/assets/EmailFolderPage.25044e0a.css +0 -1
  49. package/dashboard/assets/FilesFolderPage.7cadc3fd.js +0 -72
  50. package/dashboard/assets/FilesFolderPage.ecacd99f.css +0 -1
  51. package/dashboard/assets/HomePage.fd1efdb0.js +0 -1
  52. package/dashboard/assets/LoginPage.5e2746c3.js +0 -1
  53. package/dashboard/assets/MainLayout.05d49d78.css +0 -1
  54. package/dashboard/assets/MainLayout.54c624c6.js +0 -1
  55. package/dashboard/assets/QCard.9ca85696.js +0 -1
  56. package/dashboard/assets/QCardActions.3d6ece78.js +0 -1
  57. package/dashboard/assets/QForm.1a0fa8bd.js +0 -1
  58. package/dashboard/assets/QInput.dbc14c53.js +0 -1
  59. package/dashboard/assets/QLayout.7c9341c3.js +0 -1
  60. package/dashboard/assets/QPage.1736cadc.js +0 -1
  61. package/dashboard/assets/QSeparator.d0c0fb0f.js +0 -1
  62. package/dashboard/assets/QSpace.3225ba0f.js +0 -1
  63. package/dashboard/assets/QTable.3fe6867d.js +0 -1
  64. package/dashboard/assets/QTd.32b217d9.js +0 -1
  65. package/dashboard/assets/auth-store.10a6215e.js +0 -1
  66. package/dashboard/assets/auth.3fb1cfd3.js +0 -1
  67. package/dashboard/assets/axios.d3fa833b.js +0 -6
  68. package/dashboard/assets/focus-manager.1ddae684.js +0 -1
  69. package/dashboard/assets/index.31a4681e.js +0 -25
  70. package/dashboard/assets/main-store.ee636e78.js +0 -1
  71. package/dashboard/assets/scroll.6727d3ea.js +0 -1
  72. package/dashboard/assets/use-checkbox.687a19bf.js +0 -1
  73. package/dashboard/assets/use-dark.6e19ce43.js +0 -1
  74. package/dashboard/assets/use-quasar.0c0b766f.js +0 -1
  75. package/dashboard/assets/use-transition.19980487.js +0 -1
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
@@ -0,0 +1,2 @@
1
+ User-agent: *
2
+ Disallow: /
package/dist/index.d.mts CHANGED
@@ -1,10 +1,5 @@
1
1
  import { ExecutionContext } from 'hono';
2
2
 
3
- type BasicAuth = {
4
- username: string;
5
- password: string;
6
- };
7
-
8
3
  type R2ExplorerConfig = {
9
4
  readonly?: boolean;
10
5
  cors?: boolean;
package/dist/index.d.ts CHANGED
@@ -1,10 +1,5 @@
1
1
  import { ExecutionContext } from 'hono';
2
2
 
3
- type BasicAuth = {
4
- username: string;
5
- password: string;
6
- };
7
-
8
3
  type R2ExplorerConfig = {
9
4
  readonly?: boolean;
10
5
  cors?: boolean;
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 import_chanfana15 = require("chanfana");
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.0";
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 import_chanfana6 = require("chanfana");
217
+ var import_chanfana5 = require("chanfana");
239
218
  var import_zod5 = require("zod");
240
- var ListObjects = class extends import_chanfana6.OpenAPIRoute {
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 import_chanfana7 = require("chanfana");
255
+ var import_chanfana6 = require("chanfana");
277
256
  var import_zod6 = require("zod");
278
- var MoveObject = class extends import_chanfana7.OpenAPIRoute {
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 import_chanfana8 = require("chanfana");
294
+ var import_chanfana7 = require("chanfana");
316
295
  var import_zod7 = require("zod");
317
- var CompleteUpload = class extends import_chanfana8.OpenAPIRoute {
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 import_chanfana9 = require("chanfana");
341
+ var import_chanfana8 = require("chanfana");
363
342
  var import_zod8 = require("zod");
364
- var CreateUpload = class extends import_chanfana9.OpenAPIRoute {
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 import_chanfana10 = require("chanfana");
383
+ var import_chanfana9 = require("chanfana");
405
384
  var import_zod9 = require("zod");
406
- var PartUpload = class extends import_chanfana10.OpenAPIRoute {
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 import_chanfana11 = require("chanfana");
431
+ var import_chanfana10 = require("chanfana");
453
432
  var import_zod10 = require("zod");
454
- var PutMetadata = class extends import_chanfana11.OpenAPIRoute {
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 import_chanfana12 = require("chanfana");
475
+ var import_chanfana11 = require("chanfana");
495
476
  var import_zod11 = require("zod");
496
- var PutObject = class extends import_chanfana12.OpenAPIRoute {
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 import_chanfana13 = require("chanfana");
618
+ var import_chanfana12 = require("chanfana");
638
619
  var import_zod12 = require("zod");
639
- var SendEmail = class extends import_chanfana13.OpenAPIRoute {
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, import_chanfana13.Str)({ example: "Look! No servers" }),
630
+ subject: (0, import_chanfana12.Str)({ example: "Look! No servers" }),
650
631
  from: import_zod12.z.object({
651
- email: (0, import_chanfana13.Str)({ example: "sender@example.com" }),
652
- name: (0, import_chanfana13.Str)({ example: "Workers - MailChannels integration" })
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, import_chanfana13.Str)({ example: "test@example.com" }),
656
- name: (0, import_chanfana13.Str)({ example: "Test Recipient" })
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 import_chanfana14 = require("chanfana");
677
- var GetInfo = class extends import_chanfana14.OpenAPIRoute {
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, import_chanfana15.extendZodWithOpenApi)(import_zod13.z);
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, import_chanfana15.fromHono)(app, {
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("*", readOnlyMiddleware);
717
+ app.use("/api/*", readOnlyMiddleware);
737
718
  }
738
719
  if (config.cfAccessTeamName) {
739
- app.use("*", (0, import_cloudflare_access.cloudflareAccess)(config.cfAccessTeamName));
740
- app.use("*", async (c, next) => {
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.0";
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 OpenAPIRoute6 } from "chanfana";
187
+ import { OpenAPIRoute as OpenAPIRoute5 } from "chanfana";
209
188
  import { z as z5 } from "zod";
210
- var ListObjects = class extends OpenAPIRoute6 {
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 OpenAPIRoute7 } from "chanfana";
225
+ import { OpenAPIRoute as OpenAPIRoute6 } from "chanfana";
247
226
  import { z as z6 } from "zod";
248
- var MoveObject = class extends OpenAPIRoute7 {
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 OpenAPIRoute8 } from "chanfana";
264
+ import { OpenAPIRoute as OpenAPIRoute7 } from "chanfana";
286
265
  import { z as z7 } from "zod";
287
- var CompleteUpload = class extends OpenAPIRoute8 {
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 OpenAPIRoute9 } from "chanfana";
311
+ import { OpenAPIRoute as OpenAPIRoute8 } from "chanfana";
333
312
  import { z as z8 } from "zod";
334
- var CreateUpload = class extends OpenAPIRoute9 {
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 OpenAPIRoute10 } from "chanfana";
353
+ import { OpenAPIRoute as OpenAPIRoute9 } from "chanfana";
375
354
  import { z as z9 } from "zod";
376
- var PartUpload = class extends OpenAPIRoute10 {
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 OpenAPIRoute11 } from "chanfana";
401
+ import { OpenAPIRoute as OpenAPIRoute10 } from "chanfana";
423
402
  import { z as z10 } from "zod";
424
- var PutMetadata = class extends OpenAPIRoute11 {
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 OpenAPIRoute12 } from "chanfana";
445
+ import { OpenAPIRoute as OpenAPIRoute11 } from "chanfana";
465
446
  import { z as z11 } from "zod";
466
- var PutObject = class extends OpenAPIRoute12 {
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 OpenAPIRoute13, Str } from "chanfana";
588
+ import { OpenAPIRoute as OpenAPIRoute12, Str } from "chanfana";
608
589
  import { z as z12 } from "zod";
609
- var SendEmail = class extends OpenAPIRoute13 {
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 OpenAPIRoute14 } from "chanfana";
647
- var GetInfo = class extends OpenAPIRoute14 {
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("*", readOnlyMiddleware);
687
+ app.use("/api/*", readOnlyMiddleware);
707
688
  }
708
689
  if (config.cfAccessTeamName) {
709
- app.use("*", cloudflareAccess(config.cfAccessTeamName));
710
- app.use("*", async (c, next) => {
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);