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.
- package/README.md +76 -0
- package/bin/r2-explorer.js +23 -3
- package/dist/cjs/api/core.js +23 -0
- package/dist/cjs/api/createFolder.js +60 -0
- package/dist/cjs/api/deleteObject.js +61 -0
- package/dist/cjs/api/downloadFile.js +68 -0
- package/dist/cjs/api/listContents.js +72 -0
- package/dist/cjs/api/listDisks.js +57 -0
- package/dist/cjs/api/renameObject.js +72 -0
- package/dist/cjs/api/uploadFiles.js +77 -0
- package/dist/cjs/index.js +65 -0
- package/dist/esm/api/core.js +19 -0
- package/dist/esm/api/createFolder.js +56 -0
- package/dist/esm/api/deleteObject.js +57 -0
- package/dist/esm/api/downloadFile.js +64 -0
- package/dist/esm/api/listContents.js +68 -0
- package/dist/esm/api/listDisks.js +53 -0
- package/dist/esm/api/renameObject.js +68 -0
- package/dist/esm/api/uploadFiles.js +73 -0
- package/dist/esm/index.js +58 -0
- package/dist/index.js +311 -195
- package/dist/types/api/core.d.ts +1 -0
- package/dist/types/api/createFolder.d.ts +1 -0
- package/dist/types/api/deleteObject.d.ts +1 -0
- package/dist/types/api/downloadFile.d.ts +1 -0
- package/dist/types/api/listContents.d.ts +1 -0
- package/dist/types/api/listDisks.d.ts +1 -0
- package/dist/types/api/renameObject.d.ts +1 -0
- package/dist/types/api/uploadFiles.d.ts +1 -0
- package/dist/types/index.d.ts +2 -0
- package/package.json +77 -17
- package/.eslintrc.yml +0 -31
- package/rollup.config.js +0 -40
- package/spa/favicon.png +0 -0
- package/spa/index.html +0 -1
- package/spa/js/app.js +0 -127
- package/spa/js/app.js.map +0 -1
- package/src/api/core.js +0 -12
- package/src/api/createFolder.js +0 -13
- package/src/api/deleteObject.js +0 -15
- package/src/api/downloadFile.js +0 -23
- package/src/api/listContents.js +0 -27
- package/src/api/listDisks.js +0 -15
- package/src/api/renameObject.js +0 -24
- package/src/api/uploadFiles.js +0 -23
- package/src/index.js +0 -60
- 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
|
+

|
|
49
|
+
|
|
50
|
+
Image Previewer
|
|
51
|
+

|
|
52
|
+
|
|
53
|
+
Pdf Previewer
|
|
54
|
+

|
|
55
|
+
|
|
56
|
+
New Folder
|
|
57
|
+

|
|
58
|
+
|
|
59
|
+
Uploading Files
|
|
60
|
+

|
|
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
|
+
```
|
package/bin/r2-explorer.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
2
|
var fs = require('fs');
|
|
3
3
|
|
|
4
|
-
const
|
|
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(
|
|
43
|
-
console.log(`Run 'cd ${projectName} &&
|
|
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;
|