hfs 0.48.0-alpha1 → 0.48.0-alpha2

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.
@@ -1,4 +1,4 @@
1
- import{g as OF,c as UF}from"./index-12bfad23.js";function gF(sF,hF){for(var eF=0;eF<hF.length;eF++){const tF=hF[eF];if(typeof tF!="string"&&!Array.isArray(tF)){for(const w in tF)if(w!=="default"&&!(w in sF)){const lF=Object.getOwnPropertyDescriptor(tF,w);lF&&Object.defineProperty(sF,w,lF.get?lF:{enumerable:!0,get:()=>tF[w]})}}}return Object.freeze(Object.defineProperty(sF,Symbol.toStringTag,{value:"Module"}))}var dF={exports:{}};/*
1
+ import{g as OF,c as UF}from"./index-344723f8.js";function gF(sF,hF){for(var eF=0;eF<hF.length;eF++){const tF=hF[eF];if(typeof tF!="string"&&!Array.isArray(tF)){for(const w in tF)if(w!=="default"&&!(w in sF)){const lF=Object.getOwnPropertyDescriptor(tF,w);lF&&Object.defineProperty(sF,w,lF.get?lF:{enumerable:!0,get:()=>tF[w]})}}}return Object.freeze(Object.defineProperty(sF,Symbol.toStringTag,{value:"Module"}))}var dF={exports:{}};/*
2
2
  * [js-sha512]{@link https://github.com/emn178/js-sha512}
3
3
  *
4
4
  * @version 0.8.0
package/admin/index.html CHANGED
@@ -7,8 +7,8 @@
7
7
  <title>HFS Admin</title>
8
8
 
9
9
  <link rel="icon" type="image/svg+xml" href="/hfs-logo-icon.svg" />
10
- <script type="module" crossorigin src="/assets/index-12bfad23.js"></script>
11
- <link rel="stylesheet" href="/assets/index-5f04953d.css">
10
+ <script type="module" crossorigin src="/assets/index-344723f8.js"></script>
11
+ <link rel="stylesheet" href="/assets/index-1c2b890b.css">
12
12
  </head>
13
13
  <body>
14
14
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hfs",
3
- "version": "0.48.0-alpha1",
3
+ "version": "0.48.0-alpha2",
4
4
  "description": "HTTP File Server",
5
5
  "keywords": [
6
6
  "file server",
package/src/adminApis.js CHANGED
@@ -165,10 +165,10 @@ exports.adminApis = {
165
165
  }
166
166
  });
167
167
  function parse(line) {
168
- const m = /^(.+?) (.+?) (.+?) \[(.{11}):(.{14})] "(\w+) ([^"]+) HTTP\/\d.\d" (\d+) (-|\d+)/.exec(line);
168
+ const m = /^(.+?) (.+?) (.+?) \[(.{11}):(.{14})] "(\w+) ([^"]+) HTTP\/\d.\d" (\d+) (-|\d+) ?(.*)/.exec(line);
169
169
  if (!m)
170
170
  return;
171
- const [, ip, , user, date, time, method, uri, status, length] = m;
171
+ const [, ip, , user, date, time, method, uri, status, length, extra] = m;
172
172
  return {
173
173
  ip,
174
174
  user: user === '-' ? undefined : user,
@@ -177,6 +177,7 @@ exports.adminApis = {
177
177
  uri,
178
178
  status: Number(status),
179
179
  length: length === '-' ? undefined : Number(length),
180
+ extra: (0, misc_1.tryJson)((0, misc_1.tryJson)(extra)) || undefined,
180
181
  };
181
182
  }
182
183
  },
package/src/api.net.js CHANGED
@@ -28,7 +28,10 @@ client.getGateway = function getGatewayCaching() {
28
28
  };
29
29
  client.getGateway();
30
30
  exports.externalIp = Promise.resolve(''); // poll external ip
31
- (0, misc_1.repeat)(10 * misc_1.MINUTE, () => exports.externalIp = client.getPublicIp().catch(() => exports.externalIp));
31
+ (0, misc_1.repeat)(10 * misc_1.MINUTE, () => {
32
+ const was = exports.externalIp;
33
+ exports.externalIp = client.getPublicIp().catch(() => was); //fallback to previous value
34
+ });
32
35
  const getNatInfo = (0, misc_1.debounceAsync)(async () => {
33
36
  var _a, _b;
34
37
  const gettingIp = getPublicIp(); // don't wait, do it in parallel
package/src/const.js CHANGED
@@ -38,7 +38,7 @@ exports.DEV = process.env.DEV || exports.argv.dev ? 'DEV' : '';
38
38
  exports.ORIGINAL_CWD = process.cwd();
39
39
  exports.HFS_STARTED = new Date();
40
40
  const PKG_PATH = (0, path_1.join)(__dirname, '..', 'package.json');
41
- exports.BUILD_TIMESTAMP = "2023-09-07T07:48:20.807Z";
41
+ exports.BUILD_TIMESTAMP = "2023-09-07T17:51:10.938Z";
42
42
  const pkg = JSON.parse(fs.readFileSync(PKG_PATH, 'utf8'));
43
43
  exports.VERSION = pkg.version;
44
44
  exports.RUNNING_BETA = exports.VERSION.includes('-');
package/src/log.js CHANGED
@@ -120,16 +120,19 @@ const logMw = async (ctx, next) => {
120
120
  return;
121
121
  }
122
122
  }
123
- const format = '%s - %s [%s] "%s %s HTTP/%s" %d %s\n'; // Apache's Common Log Format
123
+ const format = '%s - %s [%s] "%s %s HTTP/%s" %d %s %s\n'; // Apache's Common Log Format
124
124
  const a = now.toString().split(' ');
125
125
  const date = a[2] + '/' + a[1] + '/' + a[3] + ':' + a[4] + ' ' + ((_b = a[5]) === null || _b === void 0 ? void 0 : _b.slice(3));
126
126
  const user = (0, perm_1.getCurrentUsername)(ctx);
127
127
  const length = (_c = ctx.state.length) !== null && _c !== void 0 ? _c : ctx.length;
128
128
  const uri = ctx.originalUrl;
129
- events_1.default.emit(logger.name, Object.assign(lodash_1.default.pick(ctx, ['ip', 'method', 'status']), { length, user, ts: now, uri }));
129
+ const extra = ctx.state.includesLastByte && ctx.vfsNode && { dl: 1 }
130
+ || ctx.state.uploadPath && { ul: ctx.state.uploadPath, size: ctx.state.uploadSize }
131
+ || undefined;
132
+ events_1.default.emit(logger.name, Object.assign(lodash_1.default.pick(ctx, ['ip', 'method', 'status']), { length, user, ts: now, uri, extra }));
130
133
  debounce(() => // once in a while we check if the file is still good (not deleted, etc), or we'll reopen it
131
134
  (0, promises_1.stat)(logger.path).catch(() => logger.reopen())); // async = smoother but we may lose some entries
132
- stream.write(util.format(format, ctx.ip, user || '-', date, ctx.method, uri, ctx.req.httpVersion, ctx.status, (_d = length === null || length === void 0 ? void 0 : length.toString()) !== null && _d !== void 0 ? _d : '-'));
135
+ stream.write(util.format(format, ctx.ip, user || '-', date, ctx.method, uri, ctx.req.httpVersion, ctx.status, (_d = length === null || length === void 0 ? void 0 : length.toString()) !== null && _d !== void 0 ? _d : '-', extra ? JSON.stringify(JSON.stringify(extra)) : ''));
133
136
  });
134
137
  };
135
138
  exports.logMw = logMw;
package/src/serveFile.js CHANGED
@@ -86,6 +86,7 @@ function getRange(ctx, totalSize) {
86
86
  ctx.set('Accept-Ranges', 'bytes');
87
87
  const { range } = ctx.request.header;
88
88
  if (!range) {
89
+ ctx.state.includesLastByte = true;
89
90
  ctx.response.length = totalSize;
90
91
  return;
91
92
  }
package/src/upload.js CHANGED
@@ -117,8 +117,9 @@ function uploadWriter(base, path, ctx) {
117
117
  const conn = (0, connections_1.socket2connection)(ctx.socket);
118
118
  if (!conn)
119
119
  return () => { };
120
- ctx.state.uploadPath = ctx.path + path;
121
120
  const opTotal = reqSize + resume;
121
+ ctx.state.uploadPath = ctx.path + path;
122
+ ctx.state.uploadSize = opTotal;
122
123
  (0, connections_1.updateConnection)(conn, { ctx, op: 'upload', opTotal, opOffset: resume / opTotal });
123
124
  const h = setInterval(() => {
124
125
  const now = Date.now();
@@ -1 +0,0 @@
1
- :root{height:100dvh}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:100vh;background:#000}#root{min-height:100%;display:flex}main{word-break:break-word}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.MuiTreeItem-content{box-sizing:border-box}.MuiDataGrid-columnHeaders{background-color:#8882}ol,ul{margin-top:.2em;padding-left:1.5em}.dialog-alert .MuiDialogContent-root{max-width:45em;padding:.5em 1em}.animated-dashed-line{width:100%;height:2px;background-image:linear-gradient(to right,currentColor 50%,transparent 50%);background-size:10px 100%;animation:animate-dash 1s alternate linear infinite}@keyframes animate-dash{to{background-position:20px 0}}