r2-explorer 0.2.0 → 0.2.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 (47) hide show
  1. package/README.md +76 -0
  2. package/bin/r2-explorer.js +23 -3
  3. package/dist/cjs/api/core.js +23 -0
  4. package/dist/cjs/api/createFolder.js +60 -0
  5. package/dist/cjs/api/deleteObject.js +61 -0
  6. package/dist/cjs/api/downloadFile.js +68 -0
  7. package/dist/cjs/api/listContents.js +72 -0
  8. package/dist/cjs/api/listDisks.js +57 -0
  9. package/dist/cjs/api/renameObject.js +72 -0
  10. package/dist/cjs/api/uploadFiles.js +77 -0
  11. package/dist/cjs/index.js +65 -0
  12. package/dist/esm/api/core.js +19 -0
  13. package/dist/esm/api/createFolder.js +56 -0
  14. package/dist/esm/api/deleteObject.js +57 -0
  15. package/dist/esm/api/downloadFile.js +64 -0
  16. package/dist/esm/api/listContents.js +68 -0
  17. package/dist/esm/api/listDisks.js +53 -0
  18. package/dist/esm/api/renameObject.js +68 -0
  19. package/dist/esm/api/uploadFiles.js +73 -0
  20. package/dist/esm/index.js +58 -0
  21. package/dist/index.js +311 -195
  22. package/dist/types/api/core.d.ts +1 -0
  23. package/dist/types/api/createFolder.d.ts +1 -0
  24. package/dist/types/api/deleteObject.d.ts +1 -0
  25. package/dist/types/api/downloadFile.d.ts +1 -0
  26. package/dist/types/api/listContents.d.ts +1 -0
  27. package/dist/types/api/listDisks.d.ts +1 -0
  28. package/dist/types/api/renameObject.d.ts +1 -0
  29. package/dist/types/api/uploadFiles.d.ts +1 -0
  30. package/dist/types/index.d.ts +2 -0
  31. package/package.json +77 -17
  32. package/.eslintrc.yml +0 -31
  33. package/rollup.config.js +0 -40
  34. package/spa/favicon.png +0 -0
  35. package/spa/index.html +0 -1
  36. package/spa/js/app.js +0 -127
  37. package/spa/js/app.js.map +0 -1
  38. package/src/api/core.js +0 -12
  39. package/src/api/createFolder.js +0 -13
  40. package/src/api/deleteObject.js +0 -15
  41. package/src/api/downloadFile.js +0 -23
  42. package/src/api/listContents.js +0 -27
  43. package/src/api/listDisks.js +0 -15
  44. package/src/api/renameObject.js +0 -24
  45. package/src/api/uploadFiles.js +0 -23
  46. package/src/index.js +0 -60
  47. package/wrangler.toml +0 -15
package/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # R2-Explorer
2
+
3
+ A Google Drive Interface for your Cloudflare R2 Buckets!
4
+
5
+
6
+ This project is meant to be an easy interface to browser, upload and manage your Cloudflare R2 buckets.
7
+
8
+ Cloudflare Access is used as a very basic authentication mechanism, in order to save r2 credentials in the a KV.
9
+
10
+ You can test this right now in your browser in https://r2.massadas.com/
11
+
12
+
13
+ ## Features
14
+ - **Near instant** bucket/folder navigation
15
+ - PDF previewer
16
+ - Image previewer
17
+ - Upload one or multiple files
18
+ - Create folders
19
+ - Rename files
20
+ - Download files
21
+ - Delete files
22
+ - Right click dropdown menu with file options
23
+
24
+
25
+ ## TODO
26
+ - Search files
27
+ - CSV Previewer
28
+ - Upload folders
29
+ - Rename folders
30
+ - Delete folders
31
+ - Image thumbnail's using Cloudflare workers
32
+ - Tooltip when hovering a file with absolute time in "x days time ago" format
33
+ - Upload folders with files
34
+ - Automatically load more files, when the bottom is reached (current limit is 1000 files)
35
+ - Download files bigger than 2gb with presigned url's
36
+ - Allow user to pick to save credentials in cloud or in browser local storage
37
+
38
+
39
+ ## Known issues
40
+ - Because r2 don't have signed url's the file downloads is made to local storage then it is downloaded as an url.
41
+ This as a limitation of around 2gb of max file
42
+ - Rename files with special characters is not possible with current [sdk issue here](https://github.com/aws/aws-sdk-js/issues/1949)
43
+
44
+
45
+ ## Images
46
+
47
+ Home Page
48
+ ![Home](https://github.com/G4brym/R2-Explorer/raw/master/docs/images/home.png)
49
+
50
+ Image Previewer
51
+ ![Home](https://github.com/G4brym/R2-Explorer/raw/master/docs/images/image-preview.png)
52
+
53
+ Pdf Previewer
54
+ ![Home](https://github.com/G4brym/R2-Explorer/raw/master/docs/images/pdf-preview.png)
55
+
56
+ New Folder
57
+ ![Home](https://github.com/G4brym/R2-Explorer/raw/master/docs/images/new-folder.png)
58
+
59
+ Uploading Files
60
+ ![Home](https://github.com/G4brym/R2-Explorer/raw/master/docs/images/uploading-files.png)
61
+
62
+
63
+ ### Compiles and hot-reloads for development
64
+ ```
65
+ npm run serve
66
+ ```
67
+
68
+ ### Compiles and minifies for production
69
+ ```
70
+ npm run build
71
+ ```
72
+
73
+ ### Lints and fixes files
74
+ ```
75
+ npm run lint
76
+ ```
@@ -1,7 +1,8 @@
1
1
  #! /usr/bin/env node
2
2
  var fs = require('fs');
3
3
 
4
- const projectName = process.argv.slice(1) || 'r2-explorer';
4
+ const args = process.argv.slice(2);
5
+ const projectName = args[0] || 'r2-explorer';
5
6
 
6
7
  const dir = `./${projectName}`
7
8
  if (!fs.existsSync(dir)) {
@@ -17,6 +18,23 @@ main = "src/index.js"
17
18
  binding = 'my-bucket-name'
18
19
  bucket_name = 'my-bucket-name'
19
20
  preview_bucket_name = 'my-bucket-name'
21
+ `);
22
+ fs.writeFileSync(`${dir}/package.json`,
23
+ `{
24
+ "name": "${projectName}",
25
+ "version": "0.0.1",
26
+ "private": true,
27
+ "devDependencies": {
28
+ "wrangler": "^2.4.2"
29
+ },
30
+ "scripts": {
31
+ "publish": "wrangler publish"
32
+ },
33
+ "dependencies": {
34
+ "r2-explorer": "^0.2.2"
35
+ }
36
+ }
37
+
20
38
  `);
21
39
 
22
40
  const srcDir = `${dir}/src`
@@ -39,7 +57,9 @@ export default {
39
57
 
40
58
  console.log(`Project ${projectName} successfully created!`);
41
59
  console.log('----------------------------');
42
- console.log(`Update the ${projectName}/wrangler.toml file with your R2 Buckets`);
43
- console.log(`Run 'cd ${projectName} && wrangler publish' to deploy your R2-Explorer!`);
60
+ console.log('Next steps:');
61
+ console.log(` 1. Run 'cd ${projectName} && npm install'`);
62
+ console.log(' 2. Update the \'wrangler.toml\' file with your R2 Buckets');
63
+ console.log(' 3. Run \'wrangler publish\' to deploy your own R2-Explorer!');
44
64
 
45
65
  process.exit(0); //no errors occurred
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.JsonResponse = void 0;
15
+ function JsonResponse(json, status, headers) {
16
+ if (status === void 0) { status = 200; }
17
+ if (headers === void 0) { headers = {}; }
18
+ return new Response(JSON.stringify(json), {
19
+ headers: __assign({ 'content-type': 'application/json;charset=UTF-8', 'access-control-allow-origin': '*', 'access-control-allow-headers': '*', 'access-control-allow-methods': '*' }, headers),
20
+ status: status,
21
+ });
22
+ }
23
+ exports.JsonResponse = JsonResponse;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createFolder = void 0;
40
+ var core_1 = require("./core");
41
+ function createFolder(request, env, context) {
42
+ return __awaiter(this, void 0, void 0, function () {
43
+ var body, disk, bucket, path, data;
44
+ return __generator(this, function (_a) {
45
+ switch (_a.label) {
46
+ case 0: return [4 /*yield*/, request.json()];
47
+ case 1:
48
+ body = _a.sent();
49
+ disk = request.params.disk;
50
+ bucket = env[disk];
51
+ path = body.path;
52
+ return [4 /*yield*/, bucket.put(path, 'Folder placeholder')];
53
+ case 2:
54
+ data = _a.sent();
55
+ return [2 /*return*/, (0, core_1.JsonResponse)(data)];
56
+ }
57
+ });
58
+ });
59
+ }
60
+ exports.createFolder = createFolder;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.deleteObject = void 0;
40
+ var core_1 = require("./core");
41
+ function deleteObject(request, env, context) {
42
+ return __awaiter(this, void 0, void 0, function () {
43
+ var body, disk, bucket, name, path;
44
+ return __generator(this, function (_a) {
45
+ switch (_a.label) {
46
+ case 0: return [4 /*yield*/, request.json()];
47
+ case 1:
48
+ body = _a.sent();
49
+ disk = request.params.disk;
50
+ bucket = env[disk];
51
+ name = body.name;
52
+ path = body.path;
53
+ return [4 /*yield*/, bucket.delete("".concat(path).concat(name))];
54
+ case 2:
55
+ _a.sent();
56
+ return [2 /*return*/, (0, core_1.JsonResponse)({})];
57
+ }
58
+ });
59
+ });
60
+ }
61
+ exports.deleteObject = deleteObject;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.downloadFile = void 0;
40
+ function downloadFile(request, env, context) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ var body, disk, bucket, name, path, object, headers;
43
+ return __generator(this, function (_a) {
44
+ switch (_a.label) {
45
+ case 0: return [4 /*yield*/, request.json()];
46
+ case 1:
47
+ body = _a.sent();
48
+ disk = request.params.disk;
49
+ bucket = env[disk];
50
+ name = body.name;
51
+ path = body.path;
52
+ return [4 /*yield*/, bucket.get("".concat(path).concat(name))];
53
+ case 2:
54
+ object = _a.sent();
55
+ if (object === null) {
56
+ return [2 /*return*/, new Response('Object Not Found', { status: 404 })];
57
+ }
58
+ headers = new Headers();
59
+ object.writeHttpMetadata(headers);
60
+ headers.set('etag', object.httpEtag);
61
+ return [2 /*return*/, new Response(object.body, {
62
+ headers: headers,
63
+ })];
64
+ }
65
+ });
66
+ });
67
+ }
68
+ exports.downloadFile = downloadFile;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.listContents = void 0;
40
+ var core_1 = require("./core");
41
+ function listContents(request, env, context) {
42
+ return __awaiter(this, void 0, void 0, function () {
43
+ var disk, bucket, path, contents, prefixes, data, _i, _a, obj, _b, _c, prefix;
44
+ return __generator(this, function (_d) {
45
+ switch (_d.label) {
46
+ case 0:
47
+ disk = request.params.disk;
48
+ bucket = env[disk];
49
+ path = (request.query || '').path;
50
+ contents = [];
51
+ prefixes = [];
52
+ return [4 /*yield*/, bucket.list({ prefix: path, delimiter: '/' })];
53
+ case 1:
54
+ data = _d.sent();
55
+ if (data.objects) {
56
+ for (_i = 0, _a = data.objects; _i < _a.length; _i++) {
57
+ obj = _a[_i];
58
+ contents.push({ Key: obj.key, Size: obj.size, LastModified: obj.uploaded });
59
+ }
60
+ }
61
+ if (data.delimitedPrefixes) {
62
+ for (_b = 0, _c = data.delimitedPrefixes; _b < _c.length; _b++) {
63
+ prefix = _c[_b];
64
+ prefixes.push({ Prefix: prefix });
65
+ }
66
+ }
67
+ return [2 /*return*/, (0, core_1.JsonResponse)({ Contents: contents, CommonPrefixes: prefixes })];
68
+ }
69
+ });
70
+ });
71
+ }
72
+ exports.listContents = listContents;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.listDisks = void 0;
40
+ var core_1 = require("./core");
41
+ function listDisks(request, env, context) {
42
+ return __awaiter(this, void 0, void 0, function () {
43
+ var buckets, _i, _a, _b, key, value;
44
+ return __generator(this, function (_c) {
45
+ buckets = [];
46
+ for (_i = 0, _a = Object.entries(env); _i < _a.length; _i++) {
47
+ _b = _a[_i], key = _b[0], value = _b[1];
48
+ // @ts-ignore
49
+ if (value.get && value.put) {
50
+ buckets.push({ Name: key });
51
+ }
52
+ }
53
+ return [2 /*return*/, (0, core_1.JsonResponse)({ Buckets: buckets })];
54
+ });
55
+ });
56
+ }
57
+ exports.listDisks = listDisks;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.renameObject = void 0;
40
+ function renameObject(request, env, context) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ var body, disk, bucket, path, oldName, newName, object, headers;
43
+ return __generator(this, function (_a) {
44
+ switch (_a.label) {
45
+ case 0: return [4 /*yield*/, request.json()];
46
+ case 1:
47
+ body = _a.sent();
48
+ disk = request.params.disk;
49
+ bucket = env[disk];
50
+ path = body.path;
51
+ oldName = body.oldName;
52
+ newName = body.newName;
53
+ return [4 /*yield*/, bucket.get("".concat(path).concat(oldName))];
54
+ case 2:
55
+ object = _a.sent();
56
+ return [4 /*yield*/, bucket.put("".concat(path).concat(newName), object.body)];
57
+ case 3:
58
+ _a.sent();
59
+ return [4 /*yield*/, bucket.delete("".concat(path).concat(oldName))];
60
+ case 4:
61
+ _a.sent();
62
+ headers = new Headers();
63
+ object.writeHttpMetadata(headers);
64
+ headers.set('etag', object.httpEtag);
65
+ return [2 /*return*/, new Response(object.body, {
66
+ headers: headers,
67
+ })];
68
+ }
69
+ });
70
+ });
71
+ }
72
+ exports.renameObject = renameObject;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.uploadFiles = void 0;
40
+ var core_1 = require("./core");
41
+ function uploadFiles(request, env, context) {
42
+ return __awaiter(this, void 0, void 0, function () {
43
+ var form, disk, bucket, path, files;
44
+ var _this = this;
45
+ return __generator(this, function (_a) {
46
+ switch (_a.label) {
47
+ case 0: return [4 /*yield*/, request.formData()];
48
+ case 1:
49
+ form = _a.sent();
50
+ disk = request.params.disk;
51
+ bucket = env[disk];
52
+ path = request.query.path;
53
+ files = form.get('files');
54
+ if (!Array.isArray(files)) return [3 /*break*/, 2];
55
+ Array.from(files).forEach(function (file) { return __awaiter(_this, void 0, void 0, function () {
56
+ return __generator(this, function (_a) {
57
+ switch (_a.label) {
58
+ case 0: return [4 /*yield*/, bucket.put("".concat(path).concat(file.name), file)];
59
+ case 1:
60
+ _a.sent();
61
+ return [2 /*return*/];
62
+ }
63
+ });
64
+ }); });
65
+ return [3 /*break*/, 4];
66
+ case 2:
67
+ console.log(files);
68
+ return [4 /*yield*/, bucket.put("".concat(path).concat(files.name), files)];
69
+ case 3:
70
+ _a.sent();
71
+ _a.label = 4;
72
+ case 4: return [2 /*return*/, (0, core_1.JsonResponse)({ status: 'ok' })];
73
+ }
74
+ });
75
+ });
76
+ }
77
+ exports.uploadFiles = uploadFiles;