@dosgato/api 0.0.8 → 0.0.10
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/access/access.resolver.d.ts +1 -0
- package/dist/access/access.resolver.js +11 -1
- package/dist/access/access.resolver.js.map +1 -1
- package/dist/asset/asset.database.d.ts +5 -3
- package/dist/asset/asset.database.js +31 -9
- package/dist/asset/asset.database.js.map +1 -1
- package/dist/asset/asset.model.d.ts +4 -0
- package/dist/asset/asset.model.js +25 -7
- package/dist/asset/asset.model.js.map +1 -1
- package/dist/asset/asset.routes.d.ts +2 -0
- package/dist/asset/asset.routes.js +73 -0
- package/dist/asset/asset.routes.js.map +1 -0
- package/dist/asset/asset.service.d.ts +3 -0
- package/dist/asset/asset.service.js +79 -6
- package/dist/asset/asset.service.js.map +1 -1
- package/dist/assetrule/assetrule.resolver.d.ts +2 -2
- package/dist/assetrule/assetrule.resolver.js +4 -3
- package/dist/assetrule/assetrule.resolver.js.map +1 -1
- package/dist/assetrule/assetrule.service.d.ts +2 -2
- package/dist/assetrule/assetrule.service.js +23 -10
- package/dist/assetrule/assetrule.service.js.map +1 -1
- package/dist/datarule/datarule.database.js +2 -1
- package/dist/datarule/datarule.database.js.map +1 -1
- package/dist/datarule/datarule.resolver.d.ts +3 -3
- package/dist/datarule/datarule.resolver.js +4 -3
- package/dist/datarule/datarule.resolver.js.map +1 -1
- package/dist/datarule/datarule.service.d.ts +3 -3
- package/dist/datarule/datarule.service.js +36 -27
- package/dist/datarule/datarule.service.js.map +1 -1
- package/dist/globalrule/globalrule.resolver.d.ts +3 -3
- package/dist/globalrule/globalrule.resolver.js +8 -6
- package/dist/globalrule/globalrule.resolver.js.map +1 -1
- package/dist/globalrule/globalrule.service.d.ts +3 -3
- package/dist/globalrule/globalrule.service.js +20 -24
- package/dist/globalrule/globalrule.service.js.map +1 -1
- package/dist/index.js +3 -22
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +1 -0
- package/dist/internal.js +1 -0
- package/dist/internal.js.map +1 -1
- package/dist/page/page.service.js +1 -1
- package/dist/page/page.service.js.map +1 -1
- package/dist/pagerule/pagerule.database.js +1 -1
- package/dist/pagerule/pagerule.database.js.map +1 -1
- package/dist/pagerule/pagerule.resolver.d.ts +3 -3
- package/dist/pagerule/pagerule.resolver.js +8 -6
- package/dist/pagerule/pagerule.resolver.js.map +1 -1
- package/dist/pagerule/pagerule.service.d.ts +3 -3
- package/dist/pagerule/pagerule.service.js +50 -30
- package/dist/pagerule/pagerule.service.js.map +1 -1
- package/dist/pagetree/pagetree.service.js +14 -14
- package/dist/pagetree/pagetree.service.js.map +1 -1
- package/dist/role/role.database.d.ts +2 -1
- package/dist/role/role.database.js +7 -2
- package/dist/role/role.database.js.map +1 -1
- package/dist/role/role.resolver.d.ts +2 -2
- package/dist/role/role.resolver.js +14 -13
- package/dist/role/role.resolver.js.map +1 -1
- package/dist/role/role.service.d.ts +2 -2
- package/dist/role/role.service.js +38 -23
- package/dist/role/role.service.js.map +1 -1
- package/dist/scalars/urlsafestring.d.ts +1 -0
- package/dist/scalars/urlsafestring.js +2 -2
- package/dist/scalars/urlsafestring.js.map +1 -1
- package/dist/siterule/siterule.resolver.d.ts +3 -3
- package/dist/siterule/siterule.resolver.js +8 -6
- package/dist/siterule/siterule.resolver.js.map +1 -1
- package/dist/siterule/siterule.service.d.ts +3 -3
- package/dist/siterule/siterule.service.js +29 -29
- package/dist/siterule/siterule.service.js.map +1 -1
- package/dist/templaterule/templaterule.database.js +4 -2
- package/dist/templaterule/templaterule.database.js.map +1 -1
- package/dist/templaterule/templaterule.resolver.d.ts +3 -3
- package/dist/templaterule/templaterule.resolver.js +8 -6
- package/dist/templaterule/templaterule.resolver.js.map +1 -1
- package/dist/templaterule/templaterule.service.d.ts +3 -3
- package/dist/templaterule/templaterule.service.js +33 -30
- package/dist/templaterule/templaterule.service.js.map +1 -1
- package/dist/user/user.database.d.ts +1 -0
- package/dist/user/user.database.js +3 -0
- package/dist/user/user.database.js.map +1 -1
- package/dist/user/user.resolver.d.ts +1 -0
- package/dist/user/user.resolver.js +16 -0
- package/dist/user/user.resolver.js.map +1 -1
- package/dist/user/user.service.d.ts +1 -0
- package/dist/user/user.service.js +23 -2
- package/dist/user/user.service.js.map +1 -1
- package/dist/util/filehandler.d.ts +12 -7
- package/dist/util/filehandler.js +58 -14
- package/dist/util/filehandler.js.map +1 -1
- package/package.json +9 -6
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import { FastifyRequest
|
|
2
|
-
export declare function handleUpload(req: FastifyRequest
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { FastifyRequest } from 'fastify';
|
|
2
|
+
export declare function handleUpload(req: FastifyRequest): Promise<{
|
|
3
|
+
files: {
|
|
4
|
+
name: string;
|
|
5
|
+
shasum: string;
|
|
6
|
+
mime: string;
|
|
7
|
+
size: number;
|
|
8
|
+
width: number | undefined;
|
|
9
|
+
height: number | undefined;
|
|
10
|
+
}[];
|
|
11
|
+
data: any;
|
|
12
|
+
}>;
|
|
8
13
|
interface FileHandler {
|
|
9
14
|
moveToPermLocation: (checksum: string) => Promise<void>;
|
|
10
15
|
getFileLocation: (checksum: string) => string;
|
package/dist/util/filehandler.js
CHANGED
|
@@ -1,23 +1,67 @@
|
|
|
1
1
|
import crypto from 'crypto';
|
|
2
|
-
import
|
|
3
|
-
import stream from 'stream';
|
|
4
|
-
import { nanoid } from 'nanoid';
|
|
2
|
+
import { fileTypeStream } from 'file-type';
|
|
5
3
|
import fs, { promises as fsp } from 'fs';
|
|
4
|
+
import { lookup } from 'mime-types';
|
|
5
|
+
import { nanoid } from 'nanoid';
|
|
6
6
|
import { dirname } from 'path';
|
|
7
|
+
import sharp from 'sharp';
|
|
8
|
+
import stream from 'stream';
|
|
9
|
+
import * as util from 'util';
|
|
10
|
+
import { makeSafe } from '../internal.js';
|
|
7
11
|
const pipelinep = util.promisify(stream.pipeline);
|
|
8
|
-
export async function handleUpload(req
|
|
12
|
+
export async function handleUpload(req) {
|
|
13
|
+
const data = {};
|
|
9
14
|
const files = [];
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
for await (const part of req.parts()) {
|
|
16
|
+
if (part.file) {
|
|
17
|
+
const tempName = nanoid(10);
|
|
18
|
+
const fileTypePassthru = await fileTypeStream(part.file);
|
|
19
|
+
const hash = crypto.createHash('sha1');
|
|
20
|
+
const hashingPassthru = new stream.PassThrough();
|
|
21
|
+
const sharpBuffer = Buffer.alloc(1000000);
|
|
22
|
+
const sharpPassthru = new stream.PassThrough();
|
|
23
|
+
let offset = 0;
|
|
24
|
+
let len = 1000000;
|
|
25
|
+
sharpPassthru.on('data', (chunk) => {
|
|
26
|
+
if (offset < 1000000)
|
|
27
|
+
sharpBuffer.write(chunk.toString('binary'), offset, len, 'binary');
|
|
28
|
+
offset += chunk.length;
|
|
29
|
+
len -= chunk.length;
|
|
30
|
+
});
|
|
31
|
+
hashingPassthru.on('data', (chunk) => hash.update(chunk));
|
|
32
|
+
await pipelinep(fileTypePassthru.pipe(hashingPassthru).pipe(sharpPassthru), fs.createWriteStream(`/files/tmp/${tempName}`));
|
|
33
|
+
const checksum = hash.digest('hex');
|
|
34
|
+
const { mime } = fileTypePassthru.fileType ?? { ext: '', mime: part.mimetype };
|
|
35
|
+
let name = part.filename;
|
|
36
|
+
const extFromFileName = name.match(/\.(\w+)$/)?.[1];
|
|
37
|
+
if (extFromFileName && lookup(extFromFileName))
|
|
38
|
+
name = name.replace(new RegExp('\\.' + extFromFileName + '$'), '');
|
|
39
|
+
name = makeSafe(name);
|
|
40
|
+
let metadata;
|
|
41
|
+
let width;
|
|
42
|
+
let height;
|
|
43
|
+
if (mime.startsWith('image/')) {
|
|
44
|
+
try {
|
|
45
|
+
metadata = await sharp(sharpBuffer).metadata();
|
|
46
|
+
width = metadata.width;
|
|
47
|
+
height = metadata.height;
|
|
48
|
+
if ((metadata.orientation ?? 1) > 4) {
|
|
49
|
+
width = height;
|
|
50
|
+
height = metadata.width;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
console.warn('SharpJS was unable to read metadata for image', name, 'of type', mime);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
await fsp.rename(`/files/tmp/${tempName}`, `/files/tmp/${checksum}`);
|
|
58
|
+
files.push({ name, shasum: checksum, mime, size: part.file.bytesRead, width, height });
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
data[part.fieldname] = part.value;
|
|
62
|
+
}
|
|
19
63
|
}
|
|
20
|
-
return files;
|
|
64
|
+
return { files, data };
|
|
21
65
|
}
|
|
22
66
|
export const FileSystemHandler = {
|
|
23
67
|
async moveToPermLocation(checksum) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filehandler.js","sourceRoot":"","sources":["../../src/util/filehandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filehandler.js","sourceRoot":"","sources":["../../src/util/filehandler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dosgato/api",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"description": "A CMS designed for large institutions with thousands of editors and hundreds of subsites.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -9,14 +9,16 @@
|
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@dosgato/templating": ">=0.0.53",
|
|
12
|
-
"@fastify/multipart": "^
|
|
13
|
-
"@txstate-mws/graphql-server": "
|
|
14
|
-
"dataloader-factory": "^4.3
|
|
12
|
+
"@fastify/multipart": "^7.1.2",
|
|
13
|
+
"@txstate-mws/graphql-server": "2.0.0",
|
|
14
|
+
"dataloader-factory": "^4.4.3",
|
|
15
15
|
"fast-json-patch": "^3.1.0",
|
|
16
|
+
"file-type": "^18.0.0",
|
|
16
17
|
"luxon": "^3.0.3",
|
|
17
18
|
"mime-types": "^2.1.35",
|
|
18
|
-
"mysql2-async": "^1.
|
|
19
|
+
"mysql2-async": "^1.1.3",
|
|
19
20
|
"nanoid": "^4.0.0",
|
|
21
|
+
"sharp": ">=0.31.0",
|
|
20
22
|
"txstate-utils": "^1.7.0",
|
|
21
23
|
"type-graphql": "^1.1.1"
|
|
22
24
|
},
|
|
@@ -24,7 +26,8 @@
|
|
|
24
26
|
"@types/luxon": "^3.0.1",
|
|
25
27
|
"@types/mime-types": "^2.1.1",
|
|
26
28
|
"@types/node": "^18.7.14",
|
|
27
|
-
"
|
|
29
|
+
"@types/sharp": "^0.30.5",
|
|
30
|
+
"eslint-config-standard-with-typescript": "^22.0.0",
|
|
28
31
|
"nodemon": "^2.0.12",
|
|
29
32
|
"ts-node": "^10.1.0",
|
|
30
33
|
"typescript": "^4.7.3"
|