@social-mail/social-mail-web-server 1.7.195 → 1.7.199

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.
@@ -0,0 +1,20 @@
1
+ import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
2
+ export default class BaseDiskCache {
3
+ protected readonly root: string;
4
+ protected readonly keepTTLSeconds: number;
5
+ protected readonly minSize: number;
6
+ protected readonly updateAccessTime: boolean;
7
+ constructor({ root, keepTTLSeconds, minSize, updateAccessTime }: {
8
+ root: string;
9
+ keepTTLSeconds?: number;
10
+ minSize?: number;
11
+ updateAccessTime?: boolean;
12
+ });
13
+ get(path: string): Promise<LocalFile>;
14
+ getOrCreateAsync(path: string, factory: (fx: LocalFile) => Promise<void>, ext?: string): Promise<LocalFile>;
15
+ createTempFileDeleteOnExit(pathFragments: string[], name: string, contentType: string): LocalFile;
16
+ protected deleteFile(path: string): Promise<void>;
17
+ protected clean(): Promise<void>;
18
+ private getFilesToDelete;
19
+ }
20
+ //# sourceMappingURL=BaseDiskCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseDiskCache.d.ts","sourceRoot":"","sources":["../../src/common/BaseDiskCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAa/E,MAAM,CAAC,OAAO,OAAO,aAAa;IAE9B,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;gBAEzC,EACI,IAAI,EACJ,cAAqB,EACrB,OAAiC,EACjC,gBAAuB,EAC1B,EAAE;QACC,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC9B;IAWC,GAAG,CAAC,IAAI,EAAE,MAAM;IAWhB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS;IAyC5F,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;cAUrE,UAAU,CAAC,IAAI,EAAE,MAAM;cAuBvB,KAAK;YAkCP,gBAAgB;CA8BjC"}
@@ -0,0 +1,222 @@
1
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
+ env.stack.push({ value: value, dispose: dispose, async: async });
17
+ }
18
+ else if (async) {
19
+ env.stack.push({ async: true });
20
+ }
21
+ return value;
22
+ };
23
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
+ return function (env) {
25
+ function fail(e) {
26
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
+ env.hasError = true;
28
+ }
29
+ function next() {
30
+ while (env.stack.length) {
31
+ var rec = env.stack.pop();
32
+ try {
33
+ var result = rec.dispose && rec.dispose.call(rec.value);
34
+ if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
35
+ }
36
+ catch (e) {
37
+ fail(e);
38
+ }
39
+ }
40
+ if (env.hasError) throw env.error;
41
+ }
42
+ return next();
43
+ };
44
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
45
+ var e = new Error(message);
46
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
47
+ });
48
+ /* eslint-disable no-console */
49
+ import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
50
+ import ensureDir from "./FileApi.js";
51
+ import LockFile from "../server/storage/LockFile.js";
52
+ import fsp, { rmdir, stat, unlink } from "node:fs/promises";
53
+ import sleep from "./sleep.js";
54
+ import { existsSync } from "node:fs";
55
+ import { join, parse } from "node:path";
56
+ import { randomUUID } from "node:crypto";
57
+ import EntityAccessError from "@entity-access/entity-access/dist/common/EntityAccessError.js";
58
+ import { toKMBString } from "./NumberFormats.js";
59
+ const doNothing = () => void 0;
60
+ export default class BaseDiskCache {
61
+ constructor({ root, keepTTLSeconds = 3600, minSize = Number.MAX_SAFE_INTEGER, updateAccessTime = true }) {
62
+ this.root = root;
63
+ this.keepTTLSeconds = keepTTLSeconds;
64
+ this.minSize = minSize;
65
+ this.updateAccessTime = updateAccessTime;
66
+ ensureDir(root);
67
+ // eslint-disable-next-line no-console
68
+ setTimeout(() => this.clean().catch(console.error), 1000);
69
+ }
70
+ async get(path) {
71
+ path = join(this.root, path);
72
+ if (existsSync(path)) {
73
+ if (this.updateAccessTime) {
74
+ const now = new Date();
75
+ await fsp.utimes(path, now, now);
76
+ }
77
+ return new LocalFile(path, void 0, void 0, doNothing);
78
+ }
79
+ }
80
+ async getOrCreateAsync(path, factory, ext = ".dat") {
81
+ path = join(this.root, path);
82
+ const parsedPath = parse(path);
83
+ ensureDir(parsedPath.dir);
84
+ let error;
85
+ for (let index = 0; index < 10; index++) {
86
+ const env_1 = { stack: [], error: void 0, hasError: false };
87
+ try {
88
+ const lock = __addDisposableResource(env_1, await LockFile.lock(path), false);
89
+ if (existsSync(path)) {
90
+ if (this.updateAccessTime) {
91
+ const now = new Date();
92
+ await fsp.utimes(path, now, now);
93
+ }
94
+ return new LocalFile(path, void 0, void 0, doNothing);
95
+ }
96
+ const tmpPath = join(this.root, randomUUID() + (parsedPath.ext || ext));
97
+ // console.log(`Downloading for ${path}`);
98
+ await factory(new LocalFile(tmpPath, void 0, void 0, doNothing));
99
+ try {
100
+ await fsp.rename(tmpPath, path);
101
+ }
102
+ catch (e) {
103
+ if (existsSync(tmpPath)) {
104
+ unlink(tmpPath).catch(doNothing);
105
+ }
106
+ error = e;
107
+ await sleep(3000);
108
+ continue;
109
+ }
110
+ return new LocalFile(path, void 0, void 0, doNothing);
111
+ }
112
+ catch (e_1) {
113
+ env_1.error = e_1;
114
+ env_1.hasError = true;
115
+ }
116
+ finally {
117
+ __disposeResources(env_1);
118
+ }
119
+ }
120
+ throw new EntityAccessError(`Failed to write file due to error ${error.stack ?? error}`);
121
+ }
122
+ createTempFileDeleteOnExit(pathFragments, name, contentType) {
123
+ const fileName = pathFragments.pop();
124
+ if (pathFragments.length) {
125
+ const folder = join(this.root, ...pathFragments);
126
+ ensureDir(folder);
127
+ }
128
+ const path = join(this.root, ...pathFragments, fileName);
129
+ return new LocalFile(path, name, contentType, () => this.deleteFile(path).catch(console.error));
130
+ }
131
+ async deleteFile(path) {
132
+ if (!path.startsWith(this.root)) {
133
+ return;
134
+ }
135
+ // console.log(`Deleting ${path}`);
136
+ await unlink(path);
137
+ for (;;) {
138
+ const parsed = parse(path);
139
+ if (parsed.dir === this.root) {
140
+ break;
141
+ }
142
+ path = parsed.dir;
143
+ try {
144
+ // console.log(`Deleting folder ${path}`);
145
+ await rmdir(path);
146
+ }
147
+ catch (error) {
148
+ // do nothing
149
+ console.error(error);
150
+ break;
151
+ }
152
+ }
153
+ }
154
+ async clean() {
155
+ const env_2 = { stack: [], error: void 0, hasError: false };
156
+ try {
157
+ const l = __addDisposableResource(env_2, await LockFile.lock("clean-" + this.root, void 0, 10000), false);
158
+ let total = 0;
159
+ for (let i = 7; i > 0; i--) {
160
+ const s = await fsp.statfs(this.root);
161
+ const freeSize = s.bavail * s.bsize;
162
+ if (freeSize < this.minSize) {
163
+ try {
164
+ const keep = Date.now() - this.keepTTLSeconds * i;
165
+ const files = await this.getFilesToDelete(keep);
166
+ for (const file of files) {
167
+ await this.deleteFile(file.path);
168
+ total += file.statInfo.size;
169
+ }
170
+ }
171
+ catch (error) {
172
+ console.error(error);
173
+ }
174
+ }
175
+ }
176
+ if (total) {
177
+ console.log(`${this.root} cleaned, ${toKMBString(total)} freed.`);
178
+ }
179
+ await sleep(30000);
180
+ setTimeout(() => this.clean().catch(console.error), 30000);
181
+ }
182
+ catch (e_2) {
183
+ env_2.error = e_2;
184
+ env_2.hasError = true;
185
+ }
186
+ finally {
187
+ __disposeResources(env_2);
188
+ }
189
+ }
190
+ async getFilesToDelete(oldest) {
191
+ const dir = await fsp.opendir(this.root, { recursive: true });
192
+ const filesToDelete = [];
193
+ try {
194
+ for await (const entry of dir) {
195
+ if (!entry.isFile()) {
196
+ continue;
197
+ }
198
+ const path = join(entry.parentPath, entry.name);
199
+ const statInfo = await stat(path);
200
+ if (statInfo.ctimeMs < oldest) {
201
+ filesToDelete.push({ path, statInfo });
202
+ if (filesToDelete.length === 1000) {
203
+ break;
204
+ }
205
+ }
206
+ }
207
+ }
208
+ catch (error) {
209
+ console.error(error);
210
+ }
211
+ finally {
212
+ try {
213
+ await dir.close();
214
+ }
215
+ catch {
216
+ // do nothing
217
+ }
218
+ }
219
+ return filesToDelete;
220
+ }
221
+ }
222
+ //# sourceMappingURL=BaseDiskCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseDiskCache.js","sourceRoot":"","sources":["../../src/common/BaseDiskCache.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { UIPackageConfig } from "../../services/DBConfig.js";
2
2
  import semver from "semver";
3
3
  export default async function seedUI(config) {
4
- const version = "1.4.140";
4
+ const version = "1.4.152";
5
5
  const existing = await config.getValue(UIPackageConfig, false);
6
6
  if (existing) {
7
7
  if (semver.gte(existing.version, version)) {
@@ -1,7 +1,8 @@
1
1
  import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
2
- export default class DiskCacheService {
2
+ import BaseDiskCache from "../../../common/BaseDiskCache.js";
3
+ export default class DiskCacheService extends BaseDiskCache {
4
+ private tmp;
3
5
  constructor();
4
- getOrCreate(path: string, factory: (filePath: any) => Promise<void>, ext?: string): Promise<LocalFile>;
5
- clear(): Promise<void>;
6
+ link(localFile: LocalFile, fileName: string, contentType: string): Promise<LocalFile>;
6
7
  }
7
8
  //# sourceMappingURL=DiskCacheService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DiskCacheService.d.ts","sourceRoot":"","sources":["../../../../src/server/services/cache/DiskCacheService.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAqB/E,MAAM,CAAC,OAAO,OAAO,gBAAgB;;IAQ3B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,QAAQ,KAAA,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS;IAyC5E,KAAK;CAiFd"}
1
+ {"version":3,"file":"DiskCacheService.d.ts","sourceRoot":"","sources":["../../../../src/server/services/cache/DiskCacheService.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAG/E,OAAO,aAAa,MAAM,kCAAkC,CAAC;AAc7D,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,aAAa;IAEvD,OAAO,CAAC,GAAG,CAAgB;;IAerB,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAQzE"}
@@ -7,197 +7,40 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
- var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
11
- if (value !== null && value !== void 0) {
12
- if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
13
- var dispose, inner;
14
- if (async) {
15
- if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
16
- dispose = value[Symbol.asyncDispose];
17
- }
18
- if (dispose === void 0) {
19
- if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
20
- dispose = value[Symbol.dispose];
21
- if (async) inner = dispose;
22
- }
23
- if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
24
- if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
25
- env.stack.push({ value: value, dispose: dispose, async: async });
26
- }
27
- else if (async) {
28
- env.stack.push({ async: true });
29
- }
30
- return value;
31
- };
32
- var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
33
- return function (env) {
34
- function fail(e) {
35
- env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
36
- env.hasError = true;
37
- }
38
- function next() {
39
- while (env.stack.length) {
40
- var rec = env.stack.pop();
41
- try {
42
- var result = rec.dispose && rec.dispose.call(rec.value);
43
- if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
44
- }
45
- catch (e) {
46
- fail(e);
47
- }
48
- }
49
- if (env.hasError) throw env.error;
50
- }
51
- return next();
52
- };
53
- })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
54
- var e = new Error(message);
55
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
56
- });
57
10
  /* eslint-disable no-console */
58
11
  import { RegisterSingleton } from "@entity-access/entity-access/dist/di/di.js";
59
- import { join, parse } from "path";
12
+ import { join } from "path";
60
13
  import { globalEnv } from "../../../common/globalEnv.js";
61
- import fsp from "node:fs/promises";
14
+ import { link } from "node:fs/promises";
62
15
  import FileSize from "../../../common/FileSize.js";
63
16
  import ensureDir from "../../../common/FileApi.js";
64
- import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
65
- import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
66
- import LockFile from "../../storage/LockFile.js";
67
- import { existsSync } from "fs";
68
17
  import { randomUUID } from "crypto";
69
- import sleep from "../../../common/sleep.js";
70
- import EntityAccessError from "@entity-access/entity-access/dist/common/EntityAccessError.js";
71
- import { unlink } from "fs/promises";
18
+ import BaseDiskCache from "../../../common/BaseDiskCache.js";
72
19
  const cacheRoot = globalEnv.cacheDir;
73
20
  const serverCache = globalEnv.cacheDir;
74
21
  ensureDir(serverCache);
75
22
  const tempSize = FileSize.parse(globalEnv.tmpSize);
76
23
  const minSize = tempSize / 2;
77
24
  const doNothing = () => void 0;
78
- let DiskCacheService = class DiskCacheService {
25
+ let DiskCacheService = class DiskCacheService extends BaseDiskCache {
79
26
  constructor() {
80
- // it is important to clean
81
- // in the beginning to avoid no file space errors.
82
- setTimeout(() => this.clear().catch(console.error), 1000);
83
- }
84
- async getOrCreate(path, factory, ext = ".dat") {
85
- path = join(serverCache, path);
86
- const parsedPath = parse(path);
87
- ensureDir(parsedPath.dir);
88
- let error;
89
- for (let index = 0; index < 10; index++) {
90
- const env_1 = { stack: [], error: void 0, hasError: false };
91
- try {
92
- const lock = __addDisposableResource(env_1, await LockFile.lock(path), false);
93
- if (existsSync(path)) {
94
- // change
95
- return new LocalFile(path, void 0, void 0, doNothing);
96
- }
97
- const tmpPath = join(serverCache, randomUUID() + (parsedPath.ext || ext));
98
- await factory(tmpPath);
99
- try {
100
- await fsp.rename(tmpPath, path);
101
- }
102
- catch (e) {
103
- if (existsSync(tmpPath)) {
104
- unlink(tmpPath).catch(doNothing);
105
- }
106
- error = e;
107
- await sleep(3000);
108
- continue;
109
- }
110
- return new LocalFile(path, void 0, void 0, doNothing);
111
- }
112
- catch (e_1) {
113
- env_1.error = e_1;
114
- env_1.hasError = true;
115
- }
116
- finally {
117
- __disposeResources(env_1);
118
- }
119
- }
120
- throw new EntityAccessError(`Failed to write file due to error ${error.stack ?? error}`);
27
+ super({
28
+ root: join(cacheRoot),
29
+ keepTTLSeconds: 86400,
30
+ minSize
31
+ });
32
+ this.tmp = new BaseDiskCache({
33
+ root: join(cacheRoot, "tmp"),
34
+ keepTTLSeconds: 60 * 60
35
+ });
121
36
  }
122
- async clear() {
123
- try {
124
- const env_2 = { stack: [], error: void 0, hasError: false };
125
- try {
126
- const l = __addDisposableResource(env_2, await LockFile.lock("clean-" + cacheRoot, void 0, 10000), false);
127
- const s = await fsp.statfs(cacheRoot);
128
- const freeSize = s.bavail * s.bsize;
129
- if (freeSize < minSize) {
130
- let target = minSize - freeSize;
131
- const finalTarget = target;
132
- console.log(`Clearing temp files to delete ${target} bytes.`);
133
- let old = DateTime.now.addDays(-8);
134
- while (target > 0) {
135
- old = old.addDays(1);
136
- const dir = await fsp.opendir(cacheRoot, { recursive: true });
137
- const filesToDelete = [];
138
- try {
139
- for await (const entry of dir) {
140
- if (!entry.isFile()) {
141
- continue;
142
- }
143
- try {
144
- const filePath = join(entry.path, entry.name);
145
- const st = await fsp.stat(filePath);
146
- if (st.mtimeMs < old.msSinceEpoch) {
147
- target -= st.size;
148
- if (filesToDelete.length < 100) {
149
- filesToDelete.push(filePath);
150
- }
151
- else {
152
- break;
153
- }
154
- // console.log(`${filePath} deleted.`);
155
- // await fsp.unlink(filePath);
156
- if (target < 0) {
157
- break;
158
- }
159
- }
160
- }
161
- catch {
162
- // we will ignore the error...
163
- }
164
- }
165
- }
166
- finally {
167
- try {
168
- await dir.close();
169
- }
170
- catch {
171
- // ignore error..
172
- }
173
- }
174
- for (const element of filesToDelete) {
175
- console.log(`${element} deleted.`);
176
- try {
177
- await fsp.unlink(element);
178
- }
179
- catch {
180
- // ignore this error as someone else might have deleted
181
- // it
182
- }
183
- }
184
- }
185
- console.log(`Temp folder cleared, ${finalTarget - target} bytes freed.`);
186
- }
187
- }
188
- catch (e_2) {
189
- env_2.error = e_2;
190
- env_2.hasError = true;
191
- }
192
- finally {
193
- __disposeResources(env_2);
194
- }
195
- }
196
- catch (error) {
197
- console.error(error);
198
- }
199
- await sleep(30000);
200
- setTimeout(() => this.clear().catch(console.error), 60000);
37
+ async link(localFile, fileName, contentType) {
38
+ const file = this.tmp.createTempFileDeleteOnExit([
39
+ randomUUID(),
40
+ fileName
41
+ ], fileName, contentType);
42
+ await link(localFile.path, file.path);
43
+ return file;
201
44
  }
202
45
  };
203
46
  DiskCacheService = __decorate([
@@ -205,4 +48,108 @@ DiskCacheService = __decorate([
205
48
  __metadata("design:paramtypes", [])
206
49
  ], DiskCacheService);
207
50
  export default DiskCacheService;
51
+ // constructor() {
52
+ // // it is important to clean
53
+ // // in the beginning to avoid no file space errors.
54
+ // setTimeout(() => this.clear().catch(console.error), 1000);
55
+ // }
56
+ // async getOrCreate(path: string, factory: (filePath) => Promise<void>, ext = ".dat" ) {
57
+ // path = join(serverCache, path);
58
+ // const parsedPath = parse(path);
59
+ // ensureDir(parsedPath.dir);
60
+ // let error: Error;
61
+ // for (let index = 0; index < 10; index++) {
62
+ // using lock = await LockFile.lock(path);
63
+ // if (existsSync(path)) {
64
+ // // change
65
+ // return new LocalFile(path, void 0, void 0, doNothing);
66
+ // }
67
+ // const tmpPath = join(serverCache, randomUUID() + (parsedPath.ext || ext));
68
+ // await factory(tmpPath);
69
+ // try {
70
+ // await fsp.rename(tmpPath, path);
71
+ // } catch (e) {
72
+ // if (existsSync(tmpPath)) {
73
+ // unlink(tmpPath).catch(doNothing);
74
+ // }
75
+ // error = e;
76
+ // await sleep(3000);
77
+ // continue;
78
+ // }
79
+ // return new LocalFile(path, void 0, void 0, doNothing);
80
+ // }
81
+ // throw new EntityAccessError(`Failed to write file due to error ${error.stack ?? error}`);
82
+ // }
83
+ // async clear() {
84
+ // try {
85
+ // using l = await LockFile.lock("clean-" + cacheRoot, void 0, 10000);
86
+ // const s = await fsp.statfs(cacheRoot);
87
+ // const freeSize = s.bavail * s.bsize;
88
+ // if (freeSize < minSize) {
89
+ // let target = minSize - freeSize;
90
+ // const finalTarget = target;
91
+ // console.log(`Clearing temp files to delete ${target} bytes.`);
92
+ // let old = DateTime.now.addDays(-8);
93
+ // while(target > 0) {
94
+ // old = old.addDays(1);
95
+ // const dir = await fsp.opendir(cacheRoot, { recursive: true });
96
+ // const filesToDelete = [];
97
+ // try {
98
+ // for await (const entry of dir) {
99
+ // if (!entry.isFile()) {
100
+ // continue;
101
+ // }
102
+ // try {
103
+ // const filePath = join(entry.parentPath, entry.name);
104
+ // const st = await fsp.stat(filePath);
105
+ // if (st.mtimeMs < old.msSinceEpoch) {
106
+ // target -= st.size;
107
+ // if (filesToDelete.length < 100) {
108
+ // filesToDelete.push(filePath);
109
+ // } else {
110
+ // break;
111
+ // }
112
+ // // console.log(`${filePath} deleted.`);
113
+ // // await fsp.unlink(filePath);
114
+ // if (target < 0) {
115
+ // break;
116
+ // }
117
+ // }
118
+ // } catch {
119
+ // // we will ignore the error...
120
+ // }
121
+ // }
122
+ // } finally {
123
+ // try {
124
+ // await dir.close();
125
+ // } catch {
126
+ // // ignore error..
127
+ // }
128
+ // }
129
+ // for (const element of filesToDelete) {
130
+ // console.log(`${element} deleted.`);
131
+ // try {
132
+ // await fsp.unlink(element);
133
+ // } catch {
134
+ // // ignore this error as someone else might have deleted
135
+ // // it
136
+ // }
137
+ // }
138
+ // }
139
+ // console.log(`Temp folder cleared, ${finalTarget-target} bytes freed.`);
140
+ // }
141
+ // } catch (error) {
142
+ // console.error(error);
143
+ // }
144
+ // await sleep(30000);
145
+ // setTimeout(() => this.clear().catch(console.error), 60000);
146
+ // }
147
+ // async link(localFile: LocalFile, fileName: string, contentType: string) {
148
+ // const dir = join(serverCache, "tmp", randomUUID());
149
+ // ensureDir(dir);
150
+ // const path = join(dir, fileName);
151
+ // await link(localFile.path, path);
152
+ // return new LocalFile(path, fileName, contentType, () => unlinkSync(path));
153
+ // }
154
+ // }
208
155
  //# sourceMappingURL=DiskCacheService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DiskCacheService.js","sourceRoot":"","sources":["../../../../src/server/services/cache/DiskCacheService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DiskCacheService.js","sourceRoot":"","sources":["../../../../src/server/services/cache/DiskCacheService.ts"],"names":[],"mappings":"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"}
@@ -59,7 +59,7 @@ let CaptchaService = class CaptchaService {
59
59
  return { id: v.verificationID, accessCode };
60
60
  }
61
61
  async getVideo(code) {
62
- return this.diskCache.getOrCreate("captcha/" + code + ".gif", (filePath) => this.prepareVideo(code, filePath));
62
+ return this.diskCache.getOrCreateAsync("captcha/" + code + ".gif", (cf) => this.prepareVideo(code, cf.path));
63
63
  }
64
64
  async prepareVideo(code, saveAs) {
65
65
  const tf = await this.tfs.createTempFile(".webm", "code", "video/webm");