@social-mail/social-mail-web-server 1.5.71 → 1.5.73
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/dist/common/ImagesFolder.d.ts +10 -8
- package/dist/common/ImagesFolder.d.ts.map +1 -1
- package/dist/common/ImagesFolder.js +16 -11
- package/dist/common/ImagesFolder.js.map +1 -1
- package/dist/server/services/image-converter/ImageConverterService.d.ts +1 -1
- package/dist/server/services/image-converter/ImageConverterService.d.ts.map +1 -1
- package/dist/server/services/image-converter/ImageConverterService.js +119 -55
- package/dist/server/services/image-converter/ImageConverterService.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/images/png/protected.png +0 -0
- package/images/png/unavailable.png +0 -0
- package/package.json +2 -2
- package/src/common/ImagesFolder.ts +18 -12
- package/src/server/services/image-converter/ImageConverterService.ts +13 -15
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@social-mail/social-mail-web-server",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.73",
|
|
4
4
|
"description": "## Phase 1",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@aws-sdk/client-s3": "^3.609.0",
|
|
23
23
|
"@azure/storage-blob": "^12.25.0",
|
|
24
24
|
"@entity-access/entity-access": "^1.0.360",
|
|
25
|
-
"@entity-access/server-pages": "^1.1.
|
|
25
|
+
"@entity-access/server-pages": "^1.1.289",
|
|
26
26
|
"@otplib/preset-v11": "^12.0.1",
|
|
27
27
|
"@social-mail/noto-emoji-svg": "^2.0.42",
|
|
28
28
|
"@social-mail/shared": "^1.0.11",
|
|
@@ -1,18 +1,24 @@
|
|
|
1
|
+
import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
|
|
1
2
|
import { dirname, join } from "path";
|
|
2
3
|
import { fileURLToPath } from "url";
|
|
3
4
|
|
|
4
|
-
const metaDir = dirname(import.meta.url);
|
|
5
|
-
const folder = join(fileURLToPath(metaDir), "..", "..", "images");
|
|
5
|
+
const metaDir = fileURLToPath(dirname(import.meta.url));
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
folder
|
|
9
|
-
file: (name) =>
|
|
10
|
-
join(folder, name)
|
|
11
|
-
};
|
|
7
|
+
class PackageFolder {
|
|
8
|
+
constructor(public readonly folder: string) {
|
|
12
9
|
|
|
10
|
+
}
|
|
13
11
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
file(... names) {
|
|
13
|
+
return join(this.folder, ... names);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
localFile(... names) {
|
|
17
|
+
const path= join(this.folder, ... names);
|
|
18
|
+
return new LocalFile(path, names.pop(), void 0, () => void 0);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const ImagesFolder = new PackageFolder(join(metaDir, "..", "..", "images"));
|
|
23
|
+
|
|
24
|
+
export const contentFolder = new PackageFolder(join(metaDir, "..", "..", "content"));
|
|
@@ -9,8 +9,7 @@ import { spawnPromise } from "../../../common/spawnPromise.js";
|
|
|
9
9
|
import { copyFile, readdir } from "fs/promises";
|
|
10
10
|
import FFCommand from "../convert/FFCommand.js";
|
|
11
11
|
import ensureDir from "../../../common/FileApi.js";
|
|
12
|
-
import {
|
|
13
|
-
import { ContentFolder } from "../../../common/ImagesFolder.js";
|
|
12
|
+
import { ImagesFolder } from "../../../common/ImagesFolder.js";
|
|
14
13
|
|
|
15
14
|
const cachePath = `./data/img-cache/`;
|
|
16
15
|
|
|
@@ -22,17 +21,16 @@ export default class ImageConverterService {
|
|
|
22
21
|
@Inject
|
|
23
22
|
tempFileService: TempFileService;
|
|
24
23
|
|
|
25
|
-
async getImage(file: LocalFile, pageNumber
|
|
24
|
+
async getImage(file: LocalFile, pageNumber?, retry = true) {
|
|
26
25
|
|
|
27
26
|
let outputFile: LocalFile;
|
|
28
|
-
let folder: TempFolder;
|
|
29
27
|
let copy: LocalFile;
|
|
30
28
|
|
|
31
29
|
if (/^image\//.test(file.contentType)) {
|
|
32
30
|
|
|
33
31
|
if (/\.bmp$/i.test(file.fileName)) {
|
|
34
|
-
|
|
35
|
-
copy =
|
|
32
|
+
using f1 = new TempFolder();
|
|
33
|
+
copy = await f1.copy(file.fileName, file, file.contentType);
|
|
36
34
|
outputFile = await this.tempFileService.createTempFile(".bmp", "bmp", "image/bmp");
|
|
37
35
|
await spawnPromise("convert", [
|
|
38
36
|
copy.path,
|
|
@@ -45,10 +43,9 @@ export default class ImageConverterService {
|
|
|
45
43
|
}
|
|
46
44
|
|
|
47
45
|
|
|
48
|
-
folder = new TempFolder();
|
|
49
|
-
copy = folder.
|
|
46
|
+
using folder = new TempFolder();
|
|
47
|
+
copy = await folder.copy(file.fileName, file, file.contentType);
|
|
50
48
|
outputFile = await this.tempFileService.createTempFile(".png", "png", "image/png");
|
|
51
|
-
await file.copyTo(copy);
|
|
52
49
|
|
|
53
50
|
if (/^video\//.test(file.contentType)) {
|
|
54
51
|
// this is a video..
|
|
@@ -68,6 +65,7 @@ export default class ImageConverterService {
|
|
|
68
65
|
args.push("-f");
|
|
69
66
|
args.push(Number(pageNumber).toString());
|
|
70
67
|
}
|
|
68
|
+
|
|
71
69
|
await spawnPromise("pdftoppm", args, {
|
|
72
70
|
cwd: folder.folder
|
|
73
71
|
});
|
|
@@ -75,18 +73,15 @@ export default class ImageConverterService {
|
|
|
75
73
|
const isPng = /\.png$/i;
|
|
76
74
|
|
|
77
75
|
for (const child of await readdir(folder.folder, { withFileTypes: true})) {
|
|
78
|
-
const output = join(child.
|
|
76
|
+
const output = join(child.parentPath, child.name);
|
|
79
77
|
if (isPng.test(child.name)) {
|
|
80
78
|
await copyFile(output, outputFile.path);
|
|
81
79
|
return outputFile;
|
|
82
80
|
}
|
|
83
81
|
}
|
|
84
82
|
|
|
85
|
-
if (!
|
|
86
|
-
|
|
87
|
-
const src = ContentFolder.file("pdf/protected.pdf");
|
|
88
|
-
await copyFile(src, outputFile.path);
|
|
89
|
-
return outputFile;
|
|
83
|
+
if (!outputFile.exists) {
|
|
84
|
+
return ImagesFolder.localFile("png", "protected.png");
|
|
90
85
|
}
|
|
91
86
|
}
|
|
92
87
|
|
|
@@ -129,6 +124,9 @@ export default class ImageConverterService {
|
|
|
129
124
|
}
|
|
130
125
|
|
|
131
126
|
file = await this.getImage(file, args?.[2] ?? void 0);
|
|
127
|
+
if (!file.exists) {
|
|
128
|
+
file = ImagesFolder.localFile("png", "unavailable.png");
|
|
129
|
+
}
|
|
132
130
|
|
|
133
131
|
const { default: fx } = await import("./formats/" + fileName + ".js");
|
|
134
132
|
let r: sharp.Sharp = await fx(file, ... args);
|