@things-factory/attachment-base 6.2.170 → 6.2.178
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-server/attachment-const.d.ts +3 -0
- package/dist-server/awb-storage-s3.d.ts +1 -0
- package/dist-server/awb-storage-s3.js.map +1 -1
- package/dist-server/index.d.ts +7 -0
- package/dist-server/migrations/index.d.ts +1 -0
- package/dist-server/routes.d.ts +4 -0
- package/dist-server/service/attachment/attachment-mutation.d.ts +46 -0
- package/dist-server/service/attachment/attachment-mutation.js +11 -11
- package/dist-server/service/attachment/attachment-mutation.js.map +1 -1
- package/dist-server/service/attachment/attachment-query.d.ts +11 -0
- package/dist-server/service/attachment/attachment-query.js +2 -2
- package/dist-server/service/attachment/attachment-query.js.map +1 -1
- package/dist-server/service/attachment/attachment-types.d.ts +27 -0
- package/dist-server/service/attachment/attachment-types.js +8 -8
- package/dist-server/service/attachment/attachment-types.js.map +1 -1
- package/dist-server/service/attachment/attachment.d.ts +24 -0
- package/dist-server/service/attachment/attachment.js +2 -2
- package/dist-server/service/attachment/attachment.js.map +1 -1
- package/dist-server/service/attachment/index.d.ts +5 -0
- package/dist-server/service/index.d.ts +6 -0
- package/dist-server/storage-azure-blob.d.ts +1 -0
- package/dist-server/storage-azure-blob.js.map +1 -1
- package/dist-server/storage-database.d.ts +1 -0
- package/dist-server/storage-database.js +4 -9
- package/dist-server/storage-database.js.map +1 -1
- package/dist-server/storage-file.d.ts +1 -0
- package/dist-server/storage-file.js.map +1 -1
- package/dist-server/storage-s3.d.ts +1 -0
- package/dist-server/storage-s3.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/util/index.d.ts +1 -0
- package/dist-server/util/upload-awb.d.ts +2 -0
- package/dist-server/util/upload-awb.js +1 -2
- package/dist-server/util/upload-awb.js.map +1 -1
- package/package.json +4 -4
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"awb-storage-s3.js","sourceRoot":"","sources":["../server/awb-storage-s3.ts"],"names":[],"mappings":";;AAAA,kDAA6C;AAC7C,sDAA6C;AAC7C,6CAA4C;AAE5C,yDAA+C;AAE/C,IAAI,6BAAU,IAAI,6BAAU,CAAC,IAAI,IAAI,IAAI,EAAE;
|
1
|
+
{"version":3,"file":"awb-storage-s3.js","sourceRoot":"","sources":["../server/awb-storage-s3.ts"],"names":[],"mappings":";;AAAA,kDAA6C;AAC7C,sDAA6C;AAC7C,6CAA4C;AAE5C,yDAA+C;AAE/C,IAAI,6BAAU,IAAI,6BAAU,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,oBAAQ,CAAC;QAC1B,WAAW,EAAE;YACX,WAAW,EAAE,6BAAU,CAAC,WAAW;YACnC,eAAe,EAAE,6BAAU,CAAC,eAAe;SAC5C;QACD,MAAM,EAAE,6BAAU,CAAC,MAAM;KAC1B,CAAC,CAAA;IAEF,iBAAiB;IACjB,6BAAU,CAAC,UAAU,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,IAAI,oBAAM,CAAC;YACxB,MAAM;YACN,MAAM,EAAE;gBACN,MAAM,EAAE,6BAAU,CAAC,UAAU;gBAC7B,GAAG,EAAE,GAAG,QAAQ,MAAM;gBACtB,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,iBAAiB;aAC/B;SACF,CAAC,CAAA;QAEF,IAAI,MAAM,CAAA;QACV,IAAI,GAAG,CAAA;QACP,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAQ,CAAA;YACrC,GAAG,GAAG,WAAW,6BAAU,CAAC,UAAU,OAAO,6BAAU,CAAC,MAAM,kBAAkB,QAAQ,MAAM,CAAA;QAChG,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAChB,CAAC;QAED,OAAO;YACL,MAAM;YACN,GAAG;SACJ,CAAA;IACH,CAAC,CAAA;IAED,YAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;AACzD,CAAC","sourcesContent":["import { S3Client } from '@aws-sdk/client-s3'\nimport { Upload } from '@aws-sdk/lib-storage'\nimport { logger } from '@things-factory/env'\n\nimport { AWBSTORAGE } from './attachment-const'\n\nif (AWBSTORAGE && AWBSTORAGE.type == 's3') {\n const client = new S3Client({\n credentials: {\n accessKeyId: AWBSTORAGE.accessKeyId,\n secretAccessKey: AWBSTORAGE.secretAccessKey\n },\n region: AWBSTORAGE.region\n })\n\n /* upload file */\n AWBSTORAGE.uploadFile = async ({ stream, filename }) => {\n const upload = new Upload({\n client,\n params: {\n Bucket: AWBSTORAGE.bucketName,\n Key: `${filename}.pdf`,\n Body: stream,\n ContentType: 'application/pdf'\n }\n })\n\n let result\n let url\n try {\n result = (await upload.done()) as any\n url = `https://${AWBSTORAGE.bucketName}.s3.${AWBSTORAGE.region}.amazonaws.com/${filename}.pdf`\n } catch (e) {\n console.log(e)\n }\n\n return {\n result,\n url\n }\n }\n\n logger.info('operato-awb: S3 Bucket Storage is Ready.')\n}\n"]}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
export * from './attachment-const';
|
2
|
+
export * from './migrations';
|
3
|
+
export * from './service';
|
4
|
+
export { createAttachment, createAttachments, deleteAttachment, deleteAttachmentsByRef, multipleUpload, singleUpload } from './service/attachment/attachment-mutation';
|
5
|
+
import './routes';
|
6
|
+
export * from './attachment-const';
|
7
|
+
export * from './util';
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare var migrations: any[];
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import { FileUpload } from 'graphql-upload/GraphQLUpload.js';
|
2
|
+
import { Attachment } from './attachment';
|
3
|
+
import { AttachmentPatch, NewAttachment } from './attachment-types';
|
4
|
+
export declare class AttachmentMutation {
|
5
|
+
createAttachment(attachment: NewAttachment, context: ResolverContext): Promise<Attachment>;
|
6
|
+
createAttachments(attachments: NewAttachment[], context: ResolverContext): Promise<Attachment[]>;
|
7
|
+
updateAttachment(id: string, patch: AttachmentPatch, context: ResolverContext): Promise<Attachment>;
|
8
|
+
deleteAttachment(id: string, context: ResolverContext): Promise<boolean>;
|
9
|
+
deleteAttachmentsByRef(refBys: string[], context: ResolverContext): Promise<boolean>;
|
10
|
+
singleUpload(file: FileUpload, context: ResolverContext): Promise<Attachment>;
|
11
|
+
multipleUpload(files: FileUpload[], context: ResolverContext): Promise<Attachment[]>;
|
12
|
+
generateUploadURL(type: string, context: ResolverContext): Promise<{
|
13
|
+
url: string;
|
14
|
+
fields: {
|
15
|
+
[key: string]: string;
|
16
|
+
};
|
17
|
+
}>;
|
18
|
+
importAttachments(file: FileUpload, context: ResolverContext): Promise<Attachment[]>;
|
19
|
+
}
|
20
|
+
export declare function createAttachment(_: any, { attachment }: {
|
21
|
+
attachment: any;
|
22
|
+
}, context: ResolverContext): Promise<Attachment>;
|
23
|
+
export declare function createAttachments(_: any, { attachments }: {
|
24
|
+
attachments: any;
|
25
|
+
}, context: ResolverContext): Promise<Attachment[]>;
|
26
|
+
export declare function deleteAttachment(_: any, { id }: {
|
27
|
+
id: any;
|
28
|
+
}, context: ResolverContext): Promise<boolean>;
|
29
|
+
export declare function deleteAttachmentsByRef(_: any, { refBys }: {
|
30
|
+
refBys: any;
|
31
|
+
}, context: ResolverContext): Promise<boolean>;
|
32
|
+
export declare function generateUploadURL(_: any, { type }: {
|
33
|
+
type: any;
|
34
|
+
}, context: ResolverContext): Promise<{
|
35
|
+
url: string;
|
36
|
+
fields: {
|
37
|
+
[key: string]: string;
|
38
|
+
};
|
39
|
+
}>;
|
40
|
+
export declare function singleUpload(_: any, { file }: {
|
41
|
+
file: any;
|
42
|
+
}, context: ResolverContext): Promise<Attachment>;
|
43
|
+
export declare function multipleUpload(_: any, { files }: {
|
44
|
+
files: any;
|
45
|
+
}, context: ResolverContext): Promise<Attachment[]>;
|
46
|
+
export declare function importAttachments(upload: FileUpload, context: ResolverContext): Promise<Attachment[]>;
|
@@ -1,7 +1,15 @@
|
|
1
1
|
"use strict";
|
2
2
|
var _a, _b;
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
4
|
-
exports.
|
4
|
+
exports.AttachmentMutation = void 0;
|
5
|
+
exports.createAttachment = createAttachment;
|
6
|
+
exports.createAttachments = createAttachments;
|
7
|
+
exports.deleteAttachment = deleteAttachment;
|
8
|
+
exports.deleteAttachmentsByRef = deleteAttachmentsByRef;
|
9
|
+
exports.generateUploadURL = generateUploadURL;
|
10
|
+
exports.singleUpload = singleUpload;
|
11
|
+
exports.multipleUpload = multipleUpload;
|
12
|
+
exports.importAttachments = importAttachments;
|
5
13
|
const tslib_1 = require("tslib");
|
6
14
|
const GraphQLUpload_js_1 = require("graphql-upload/GraphQLUpload.js");
|
7
15
|
const GraphQLUpload_js_2 = tslib_1.__importDefault(require("graphql-upload/GraphQLUpload.js"));
|
@@ -49,6 +57,7 @@ let AttachmentMutation = class AttachmentMutation {
|
|
49
57
|
return await importAttachments(file, context);
|
50
58
|
}
|
51
59
|
};
|
60
|
+
exports.AttachmentMutation = AttachmentMutation;
|
52
61
|
tslib_1.__decorate([
|
53
62
|
(0, type_graphql_1.Directive)('@transaction'),
|
54
63
|
(0, type_graphql_1.Mutation)(returns => attachment_1.Attachment),
|
@@ -130,10 +139,9 @@ tslib_1.__decorate([
|
|
130
139
|
tslib_1.__metadata("design:paramtypes", [typeof (_b = typeof GraphQLUpload_js_1.FileUpload !== "undefined" && GraphQLUpload_js_1.FileUpload) === "function" ? _b : Object, Object]),
|
131
140
|
tslib_1.__metadata("design:returntype", Promise)
|
132
141
|
], AttachmentMutation.prototype, "importAttachments", null);
|
133
|
-
AttachmentMutation = tslib_1.__decorate([
|
142
|
+
exports.AttachmentMutation = AttachmentMutation = tslib_1.__decorate([
|
134
143
|
(0, type_graphql_1.Resolver)(attachment_1.Attachment)
|
135
144
|
], AttachmentMutation);
|
136
|
-
exports.AttachmentMutation = AttachmentMutation;
|
137
145
|
async function createAttachment(_, { attachment }, context) {
|
138
146
|
const { file, category, refType = '', refBy, description } = attachment;
|
139
147
|
const { mimetype } = (await file);
|
@@ -167,7 +175,6 @@ async function createAttachment(_, { attachment }, context) {
|
|
167
175
|
contents
|
168
176
|
});
|
169
177
|
}
|
170
|
-
exports.createAttachment = createAttachment;
|
171
178
|
async function createAttachments(_, { attachments }, context) {
|
172
179
|
const { resolve, reject } = await promises_all_1.default.all(attachments.map(attachment => createAttachment(_, { attachment }, context)));
|
173
180
|
if (reject.length) {
|
@@ -176,7 +183,6 @@ async function createAttachments(_, { attachments }, context) {
|
|
176
183
|
}
|
177
184
|
return resolve;
|
178
185
|
}
|
179
|
-
exports.createAttachments = createAttachments;
|
180
186
|
async function deleteAttachment(_, { id }, context) {
|
181
187
|
const { domain, tx } = context.state;
|
182
188
|
const repository = tx ? tx.getRepository(attachment_1.Attachment) : (0, shell_1.getRepository)(attachment_1.Attachment);
|
@@ -192,7 +198,6 @@ async function deleteAttachment(_, { id }, context) {
|
|
192
198
|
return false;
|
193
199
|
}
|
194
200
|
}
|
195
|
-
exports.deleteAttachment = deleteAttachment;
|
196
201
|
async function deleteAttachmentsByRef(_, { refBys }, context) {
|
197
202
|
const { domain, tx } = context.state;
|
198
203
|
const repository = tx ? tx.getRepository(attachment_1.Attachment) : (0, shell_1.getRepository)(attachment_1.Attachment);
|
@@ -214,19 +219,15 @@ async function deleteAttachmentsByRef(_, { refBys }, context) {
|
|
214
219
|
return false;
|
215
220
|
}
|
216
221
|
}
|
217
|
-
exports.deleteAttachmentsByRef = deleteAttachmentsByRef;
|
218
222
|
async function generateUploadURL(_, { type }, context) {
|
219
223
|
return await attachment_const_1.STORAGE.generateUploadURL(type);
|
220
224
|
}
|
221
|
-
exports.generateUploadURL = generateUploadURL;
|
222
225
|
async function singleUpload(_, { file }, context) {
|
223
226
|
return await createAttachment(null, { attachment: { file } }, context);
|
224
227
|
}
|
225
|
-
exports.singleUpload = singleUpload;
|
226
228
|
async function multipleUpload(_, { files }, context) {
|
227
229
|
return await createAttachments(null, { attachments: { files } }, context);
|
228
230
|
}
|
229
|
-
exports.multipleUpload = multipleUpload;
|
230
231
|
async function parseJSONFile(uploadedFile) {
|
231
232
|
var { createReadStream } = await uploadedFile;
|
232
233
|
return new Promise((resolve, reject) => {
|
@@ -313,5 +314,4 @@ async function importAttachments(upload, context) {
|
|
313
314
|
});
|
314
315
|
return attachments;
|
315
316
|
}
|
316
|
-
exports.importAttachments = importAttachments;
|
317
317
|
//# sourceMappingURL=attachment-mutation.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"attachment-mutation.js","sourceRoot":"","sources":["../../../server/service/attachment/attachment-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport promisesAll from 'promises-all'\n\nimport { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { config, logger } from '@things-factory/env'\nimport { getRepository } from '@things-factory/shell'\n\nimport { STORAGE } from '../../attachment-const'\nimport { Attachment } from './attachment'\nimport { AttachmentPatch, NewAttachment, UploadURL } from './attachment-types'\n\nconst allowedMimeTypes = config.get('fileUpload/mimeTypes', [])\n\n@Resolver(Attachment)\nexport class AttachmentMutation {\n @Directive('@transaction')\n @Mutation(returns => Attachment)\n async createAttachment(\n @Arg('attachment', type => NewAttachment) attachment: NewAttachment,\n @Ctx() context: ResolverContext\n ): Promise<Attachment> {\n return await createAttachment(null, { attachment }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => [Attachment])\n async createAttachments(\n @Arg('attachments', type => [NewAttachment]) attachments: NewAttachment[],\n @Ctx() context: ResolverContext\n ): Promise<Attachment[]> {\n return await createAttachments(null, { attachments }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => Attachment)\n async updateAttachment(\n @Arg('id') id: string,\n @Arg('patch', type => AttachmentPatch) patch: AttachmentPatch,\n @Ctx() context: ResolverContext\n ): Promise<Attachment> {\n const attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: context.state.domain.id },\n id\n }\n })\n\n return await getRepository(Attachment).save({\n ...attachment,\n ...patch,\n updater: context.state.user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteAttachment(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n return await deleteAttachment(null, { id }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteAttachmentsByRef(\n @Arg('refBys', type => [String]) refBys: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n return await deleteAttachmentsByRef(null, { refBys }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => Attachment)\n async singleUpload(\n @Arg('file', type => GraphQLUpload) file: FileUpload,\n @Ctx() context: ResolverContext\n ): Promise<Attachment> {\n return await singleUpload(null, { file }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => [Attachment])\n async multipleUpload(\n @Arg('files', type => [GraphQLUpload]) files: FileUpload[],\n @Ctx() context: ResolverContext\n ): Promise<Attachment[]> {\n return await multipleUpload(null, { files }, context)\n }\n\n @Mutation(returns => UploadURL)\n async generateUploadURL(\n @Arg('type', type => String) type: string,\n @Ctx() context: ResolverContext\n ): Promise<{ url: string; fields: { [key: string]: string } }> {\n return await generateUploadURL(null, { type }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => [Attachment], { description: 'To import some Attachments' })\n async importAttachments(\n @Arg('file', () => GraphQLUpload) file: FileUpload,\n @Ctx() context: ResolverContext\n ): Promise<Attachment[]> {\n return await importAttachments(file, context)\n }\n}\n\nexport async function createAttachment(_: any, { attachment }, context: ResolverContext): Promise<Attachment> {\n const { file, category, refType = '', refBy, description } = attachment\n const { mimetype } = (await file) as FileUpload\n \n if(allowedMimeTypes instanceof Array && allowedMimeTypes.length > 0 && !allowedMimeTypes.includes('*/*')) {\n const isAllowed = allowedMimeTypes.some(type => {\n const [typeMain, typeSub] = type.split('/')\n const [mimeMain, mimeSub] = mimetype.split('/')\n return (typeMain === mimeMain && (typeSub === '*' || typeSub === mimeSub)) || (typeMain === '*' && typeSub === '*')\n })\n\n if(!isAllowed) {\n throw Error(context.t(`error.not allowed file type for upload`, { mimetype }))\n }\n }\n\n const { id, path, size, filename, encoding, contents } = await STORAGE.uploadFile({ file, context })\n const { domain, user, tx } = context.state\n\n const repository = tx ? tx.getRepository(Attachment) : getRepository(Attachment)\n\n return await repository.save({\n domain,\n creator: user,\n updater: user,\n id,\n description,\n name: filename,\n mimetype,\n encoding,\n refType,\n refBy,\n category: category || mimetype.split('/').shift(),\n size: size as any,\n path,\n contents\n })\n}\n\nexport async function createAttachments(_: any, { attachments }, context: ResolverContext): Promise<Attachment[]> {\n const { resolve, reject } = await promisesAll.all(\n attachments.map(attachment => createAttachment(_, { attachment }, context))\n )\n\n if (reject.length) {\n reject.forEach(({ name, message }) => logger.error(`${name}: ${message}`))\n\n return reject\n }\n\n return resolve\n}\n\nexport async function deleteAttachment(_: any, { id }, context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n const repository = tx ? tx.getRepository(Attachment) : getRepository(Attachment)\n const attachment = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (attachment) {\n await repository.delete({ id: attachment.id })\n await STORAGE.deleteFile(attachment.path)\n return true\n } else {\n return false\n }\n}\n\nexport async function deleteAttachmentsByRef(_: any, { refBys }, context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n const repository = tx ? tx.getRepository(Attachment) : getRepository(Attachment)\n const attachments = await repository.find({\n where: { domain: { id: domain.id }, refBy: In(refBys) }\n })\n\n //remove attachment from repo\n await repository.delete({\n refBy: In(refBys)\n })\n\n //remove files from attachments folder\n if (attachments.length) {\n await Promise.all(\n attachments.map(async attachment => {\n await STORAGE.deleteFile(attachment.path)\n })\n )\n\n return true\n } else {\n return false\n }\n}\n\nexport async function generateUploadURL(\n _: any,\n { type },\n context: ResolverContext\n): Promise<{ url: string; fields: { [key: string]: string } }> {\n return await STORAGE.generateUploadURL(type)\n}\n\nexport async function singleUpload(_: any, { file }, context: ResolverContext): Promise<Attachment> {\n return await createAttachment(null, { attachment: { file } }, context)\n}\n\nexport async function multipleUpload(_: any, { files }, context: ResolverContext): Promise<Attachment[]> {\n return await createAttachments(null, { attachments: { files } }, context)\n}\n\nasync function parseJSONFile(uploadedFile: FileUpload): Promise<any> {\n var { createReadStream } = await uploadedFile\n\n return new Promise((resolve, reject) => {\n const chunks: Uint8Array[] = []\n\n createReadStream()\n .on('data', (chunk: Uint8Array) => {\n chunks.push(chunk)\n })\n .on('end', () => {\n try {\n const fileContents = Buffer.concat(chunks).toString('utf-8')\n const jsonData = JSON.parse(fileContents)\n resolve(jsonData)\n } catch (error) {\n reject(error)\n }\n })\n .on('error', (error: Error) => {\n reject(error)\n })\n })\n}\n\nfunction dataURLToFileUpload(dataURL: string, filename: string, mimeType: string): FileUpload {\n const indexOfComma = dataURL.indexOf(',')\n if (indexOfComma === -1) {\n throw new Error('Invalid Data URL')\n }\n\n const base64Data = dataURL.slice(indexOfComma + 1)\n const buffer = Buffer.from(base64Data, 'base64')\n\n return {\n filename,\n mimetype: mimeType,\n encoding: 'base64',\n createReadStream: () => {\n const stream = require('stream')\n const readable = new stream.Readable()\n readable.push(buffer)\n readable.push(null)\n return readable\n }\n }\n}\n\nexport async function importAttachments(upload: FileUpload, context: ResolverContext): Promise<Attachment[]> {\n const { domain, user, notify, tx } = context.state\n\n const repository = tx.getRepository(Attachment)\n\n const attachments = []\n\n const parsed = await parseJSONFile(upload)\n\n for (const id in parsed) {\n var { name, description, category, mimetype, encoding, contents } = parsed[id]\n if (!name || !contents || !mimetype) {\n throw 'Malformed attachments import file'\n }\n\n var sameIdAttachment = await repository.findOneBy({ id })\n\n if (sameIdAttachment) {\n if (sameIdAttachment.domainId != domain.id) {\n throw `Attachment with id/name(${id}/${name}) is already taken in another domain`\n }\n\n // 동일 아이디 첨부파일이 있다면, 스킵한다.\n continue\n }\n\n const file = dataURLToFileUpload(contents, name, mimetype)\n\n var { path, size, contents } = await STORAGE.uploadFile({ id, file, context })\n\n attachments.push(\n await repository.save({\n domain,\n creator: user,\n updater: user,\n id,\n description,\n name,\n mimetype,\n encoding,\n category: category || mimetype.split('/').shift(),\n size: size as any,\n path,\n contents\n })\n )\n }\n\n notify &&\n notify({\n mode: 'in-app',\n title: `${attachments.length} Attachment(s) are imported`,\n body: `${attachments.length} Attachment(s) are imported by ${user.name}`\n })\n\n return attachments\n}\n"]}
|
1
|
+
{"version":3,"file":"attachment-mutation.js","sourceRoot":"","sources":["../../../server/service/attachment/attachment-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport promisesAll from 'promises-all'\n\nimport { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { config, logger } from '@things-factory/env'\nimport { getRepository } from '@things-factory/shell'\n\nimport { STORAGE } from '../../attachment-const'\nimport { Attachment } from './attachment'\nimport { AttachmentPatch, NewAttachment, UploadURL } from './attachment-types'\n\nconst allowedMimeTypes = config.get('fileUpload/mimeTypes', [])\n\n@Resolver(Attachment)\nexport class AttachmentMutation {\n @Directive('@transaction')\n @Mutation(returns => Attachment)\n async createAttachment(\n @Arg('attachment', type => NewAttachment) attachment: NewAttachment,\n @Ctx() context: ResolverContext\n ): Promise<Attachment> {\n return await createAttachment(null, { attachment }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => [Attachment])\n async createAttachments(\n @Arg('attachments', type => [NewAttachment]) attachments: NewAttachment[],\n @Ctx() context: ResolverContext\n ): Promise<Attachment[]> {\n return await createAttachments(null, { attachments }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => Attachment)\n async updateAttachment(\n @Arg('id') id: string,\n @Arg('patch', type => AttachmentPatch) patch: AttachmentPatch,\n @Ctx() context: ResolverContext\n ): Promise<Attachment> {\n const attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: context.state.domain.id },\n id\n }\n })\n\n return await getRepository(Attachment).save({\n ...attachment,\n ...patch,\n updater: context.state.user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteAttachment(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n return await deleteAttachment(null, { id }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteAttachmentsByRef(\n @Arg('refBys', type => [String]) refBys: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n return await deleteAttachmentsByRef(null, { refBys }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => Attachment)\n async singleUpload(\n @Arg('file', type => GraphQLUpload) file: FileUpload,\n @Ctx() context: ResolverContext\n ): Promise<Attachment> {\n return await singleUpload(null, { file }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => [Attachment])\n async multipleUpload(\n @Arg('files', type => [GraphQLUpload]) files: FileUpload[],\n @Ctx() context: ResolverContext\n ): Promise<Attachment[]> {\n return await multipleUpload(null, { files }, context)\n }\n\n @Mutation(returns => UploadURL)\n async generateUploadURL(\n @Arg('type', type => String) type: string,\n @Ctx() context: ResolverContext\n ): Promise<{ url: string; fields: { [key: string]: string } }> {\n return await generateUploadURL(null, { type }, context)\n }\n\n @Directive('@transaction')\n @Mutation(returns => [Attachment], { description: 'To import some Attachments' })\n async importAttachments(\n @Arg('file', () => GraphQLUpload) file: FileUpload,\n @Ctx() context: ResolverContext\n ): Promise<Attachment[]> {\n return await importAttachments(file, context)\n }\n}\n\nexport async function createAttachment(_: any, { attachment }, context: ResolverContext): Promise<Attachment> {\n const { file, category, refType = '', refBy, description } = attachment\n const { mimetype } = (await file) as FileUpload\n \n if(allowedMimeTypes instanceof Array && allowedMimeTypes.length > 0 && !allowedMimeTypes.includes('*/*')) {\n const isAllowed = allowedMimeTypes.some(type => {\n const [typeMain, typeSub] = type.split('/')\n const [mimeMain, mimeSub] = mimetype.split('/')\n return (typeMain === mimeMain && (typeSub === '*' || typeSub === mimeSub)) || (typeMain === '*' && typeSub === '*')\n })\n\n if(!isAllowed) {\n throw Error(context.t(`error.not allowed file type for upload`, { mimetype }))\n }\n }\n\n const { id, path, size, filename, encoding, contents } = await STORAGE.uploadFile({ file, context })\n const { domain, user, tx } = context.state\n\n const repository = tx ? tx.getRepository(Attachment) : getRepository(Attachment)\n\n return await repository.save({\n domain,\n creator: user,\n updater: user,\n id,\n description,\n name: filename,\n mimetype,\n encoding,\n refType,\n refBy,\n category: category || mimetype.split('/').shift(),\n size: size as any,\n path,\n contents\n })\n}\n\nexport async function createAttachments(_: any, { attachments }, context: ResolverContext): Promise<Attachment[]> {\n const { resolve, reject } = await promisesAll.all(\n attachments.map(attachment => createAttachment(_, { attachment }, context))\n )\n\n if (reject.length) {\n reject.forEach(({ name, message }) => logger.error(`${name}: ${message}`))\n\n return reject\n }\n\n return resolve\n}\n\nexport async function deleteAttachment(_: any, { id }, context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n const repository = tx ? tx.getRepository(Attachment) : getRepository(Attachment)\n const attachment = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (attachment) {\n await repository.delete({ id: attachment.id })\n await STORAGE.deleteFile(attachment.path)\n return true\n } else {\n return false\n }\n}\n\nexport async function deleteAttachmentsByRef(_: any, { refBys }, context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n const repository = tx ? tx.getRepository(Attachment) : getRepository(Attachment)\n const attachments = await repository.find({\n where: { domain: { id: domain.id }, refBy: In(refBys) }\n })\n\n //remove attachment from repo\n await repository.delete({\n refBy: In(refBys)\n })\n\n //remove files from attachments folder\n if (attachments.length) {\n await Promise.all(\n attachments.map(async attachment => {\n await STORAGE.deleteFile(attachment.path)\n })\n )\n\n return true\n } else {\n return false\n }\n}\n\nexport async function generateUploadURL(\n _: any,\n { type },\n context: ResolverContext\n): Promise<{ url: string; fields: { [key: string]: string } }> {\n return await STORAGE.generateUploadURL(type)\n}\n\nexport async function singleUpload(_: any, { file }, context: ResolverContext): Promise<Attachment> {\n return await createAttachment(null, { attachment: { file } }, context)\n}\n\nexport async function multipleUpload(_: any, { files }, context: ResolverContext): Promise<Attachment[]> {\n return await createAttachments(null, { attachments: { files } }, context)\n}\n\nasync function parseJSONFile(uploadedFile: FileUpload): Promise<any> {\n var { createReadStream } = await uploadedFile\n\n return new Promise((resolve, reject) => {\n const chunks: Uint8Array[] = []\n\n createReadStream()\n .on('data', (chunk: Uint8Array) => {\n chunks.push(chunk)\n })\n .on('end', () => {\n try {\n const fileContents = Buffer.concat(chunks).toString('utf-8')\n const jsonData = JSON.parse(fileContents)\n resolve(jsonData)\n } catch (error) {\n reject(error)\n }\n })\n .on('error', (error: Error) => {\n reject(error)\n })\n })\n}\n\nfunction dataURLToFileUpload(dataURL: string, filename: string, mimeType: string): FileUpload {\n const indexOfComma = dataURL.indexOf(',')\n if (indexOfComma === -1) {\n throw new Error('Invalid Data URL')\n }\n\n const base64Data = dataURL.slice(indexOfComma + 1)\n const buffer = Buffer.from(base64Data, 'base64')\n\n return {\n filename,\n mimetype: mimeType,\n encoding: 'base64',\n createReadStream: () => {\n const stream = require('stream')\n const readable = new stream.Readable()\n readable.push(buffer)\n readable.push(null)\n return readable\n }\n }\n}\n\nexport async function importAttachments(upload: FileUpload, context: ResolverContext): Promise<Attachment[]> {\n const { domain, user, notify, tx } = context.state\n\n const repository = tx.getRepository(Attachment)\n\n const attachments = []\n\n const parsed = await parseJSONFile(upload)\n\n for (const id in parsed) {\n var { name, description, category, mimetype, encoding, contents } = parsed[id]\n if (!name || !contents || !mimetype) {\n throw 'Malformed attachments import file'\n }\n\n var sameIdAttachment = await repository.findOneBy({ id })\n\n if (sameIdAttachment) {\n if (sameIdAttachment.domainId != domain.id) {\n throw `Attachment with id/name(${id}/${name}) is already taken in another domain`\n }\n\n // 동일 아이디 첨부파일이 있다면, 스킵한다.\n continue\n }\n\n const file = dataURLToFileUpload(contents, name, mimetype)\n\n var { path, size, contents } = await STORAGE.uploadFile({ id, file, context })\n\n attachments.push(\n await repository.save({\n domain,\n creator: user,\n updater: user,\n id,\n description,\n name,\n mimetype,\n encoding,\n category: category || mimetype.split('/').shift(),\n size: size as any,\n path,\n contents\n })\n )\n }\n\n notify &&\n notify({\n mode: 'in-app',\n title: `${attachments.length} Attachment(s) are imported`,\n body: `${attachments.length} Attachment(s) are imported by ${user.name}`\n })\n\n return attachments\n}\n"]}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { User } from '@things-factory/auth-base';
|
2
|
+
import { Domain, ListParam } from '@things-factory/shell';
|
3
|
+
import { AttachmentList } from '../';
|
4
|
+
import { Attachment } from './attachment';
|
5
|
+
export declare class AttachmentQuery {
|
6
|
+
attachments(context: ResolverContext, params: ListParam): Promise<AttachmentList>;
|
7
|
+
attachment(id: string, context: ResolverContext): Promise<Attachment>;
|
8
|
+
domain(attachment: Attachment): Promise<Domain>;
|
9
|
+
updater(attachment: Attachment): Promise<User>;
|
10
|
+
creator(attachment: Attachment): Promise<User>;
|
11
|
+
}
|
@@ -71,6 +71,7 @@ let AttachmentQuery = class AttachmentQuery {
|
|
71
71
|
});
|
72
72
|
}
|
73
73
|
};
|
74
|
+
exports.AttachmentQuery = AttachmentQuery;
|
74
75
|
tslib_1.__decorate([
|
75
76
|
(0, type_graphql_1.Directive)('@privilege(category: "attachment", privilege: "query", domainOwnerGranted: true)'),
|
76
77
|
(0, type_graphql_1.Query)(returns => __1.AttachmentList),
|
@@ -110,8 +111,7 @@ tslib_1.__decorate([
|
|
110
111
|
tslib_1.__metadata("design:paramtypes", [attachment_1.Attachment]),
|
111
112
|
tslib_1.__metadata("design:returntype", Promise)
|
112
113
|
], AttachmentQuery.prototype, "creator", null);
|
113
|
-
AttachmentQuery = tslib_1.__decorate([
|
114
|
+
exports.AttachmentQuery = AttachmentQuery = tslib_1.__decorate([
|
114
115
|
(0, type_graphql_1.Resolver)(attachment_1.Attachment)
|
115
116
|
], AttachmentQuery);
|
116
|
-
exports.AttachmentQuery = AttachmentQuery;
|
117
117
|
//# sourceMappingURL=attachment-query.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"attachment-query.js","sourceRoot":"","sources":["../../../server/service/attachment/attachment-query.ts"],"names":[],"mappings":";;;;AAAA,qCAA4B;AAC5B,+CAA8F;AAE9F,yDAAgD;AAChD,iDAAuG;AAEvG,2BAAoC;AACpC,6CAAyC;AAGlC,IAAM,eAAe,GAArB,MAAM,eAAe;IAGpB,AAAN,KAAK,CAAC,WAAW,CAAQ,OAAwB,EAAU,MAAiB;QAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC;YACjD,UAAU,EAAE,MAAM,IAAA,qBAAa,EAAC,uBAAU,CAAC;YAC3C,MAAM;YACN,MAAM;YACN,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;SACrC,CAAC,CAAC,SAAS,CAAC;YACX,mBAAmB;YACnB,eAAe;YACf,iBAAiB;YACjB,iBAAiB;YACjB,iBAAiB;YACjB,qBAAqB;YACrB,qBAAqB;YACrB,qBAAqB;YACrB,sBAAsB;YACtB,oBAAoB;YACpB,sBAAsB;YACtB,oBAAoB;SACrB,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAA;QAE3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACzB,CAAC;IAIK,AAAN,KAAK,CAAC,UAAU,CAAY,EAAU,EAAS,OAAwB;QACrE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,OAAO,MAAM,IAAA,qBAAa,EAAC,uBAAU,CAAC,CAAC,OAAO,CAAC;YAC7C,MAAM,EAAE;gBACN,QAAQ;gBACR,IAAI;gBACJ,MAAM;gBACN,MAAM;gBACN,MAAM;gBACN,UAAU;gBACV,UAAU;gBACV,UAAU;gBACV,WAAW;gBACX,SAAS;gBACT,WAAW;gBACX,SAAS;aACV;YACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;YAC/E,SAAS,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;SAC5C,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,MAAM,CAAS,UAAsB;QACzC,OAAO,MAAM,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAC,SAAS,CAAC;YAC3C,EAAE,EAAE,UAAU,CAAC,QAAQ;SACxB,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,UAAsB;QAC1C,OAAO,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC;YACzC,EAAE,EAAE,UAAU,CAAC,SAAS;SACzB,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,UAAsB;QAC1C,OAAO,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC;YACzC,EAAE,EAAE,UAAU,CAAC,SAAS;SACzB,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;
|
1
|
+
{"version":3,"file":"attachment-query.js","sourceRoot":"","sources":["../../../server/service/attachment/attachment-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { In } from 'typeorm'\nimport { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { User } from '@things-factory/auth-base'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\n\nimport { AttachmentList } from '../'\nimport { Attachment } from './attachment'\n\n@Resolver(Attachment)\nexport class AttachmentQuery {\n @Directive('@privilege(category: \"attachment\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => AttachmentList)\n async attachments(@Ctx() context: ResolverContext, @Args() params: ListParam): Promise<AttachmentList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: await getRepository(Attachment),\n params,\n domain,\n alias: 'attachment',\n searchables: ['name', 'description']\n }).addSelect([\n 'attachment.domain',\n 'attachment.id',\n 'attachment.name',\n 'attachment.path',\n 'attachment.size',\n 'attachment.mimetype',\n 'attachment.encoding',\n 'attachment.category',\n 'attachment.updatedAt',\n 'attachment.updater',\n 'attachment.createdAt',\n 'attachment.creator'\n ])\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Directive('@privilege(category: \"attachment\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => Attachment)\n async attachment(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Attachment> {\n const { domain } = context.state\n\n return await getRepository(Attachment).findOne({\n select: [\n 'domain',\n 'id',\n 'name',\n 'path',\n 'size',\n 'mimetype',\n 'encoding',\n 'category',\n 'updatedAt',\n 'updater',\n 'createdAt',\n 'creator'\n ],\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id },\n relations: ['domain', 'creator', 'updater']\n })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() attachment: Attachment) {\n return await getRepository(Domain).findOneBy({\n id: attachment.domainId\n })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() attachment: Attachment): Promise<User> {\n return await getRepository(User).findOneBy({\n id: attachment.updaterId\n })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() attachment: Attachment): Promise<User> {\n return await getRepository(User).findOneBy({\n id: attachment.creatorId\n })\n }\n}\n"]}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import type { FileUpload } from 'graphql-upload/GraphQLUpload.js';
|
2
|
+
import { Attachment } from './attachment';
|
3
|
+
export declare class AttachmentList {
|
4
|
+
items: Attachment[];
|
5
|
+
total: number;
|
6
|
+
}
|
7
|
+
export declare class UploadURL {
|
8
|
+
url: string;
|
9
|
+
fields: any;
|
10
|
+
}
|
11
|
+
export declare class NewAttachment {
|
12
|
+
category: string;
|
13
|
+
file: FileUpload;
|
14
|
+
description: string;
|
15
|
+
refType: string;
|
16
|
+
refBy: string;
|
17
|
+
}
|
18
|
+
export declare class AttachmentPatch {
|
19
|
+
name: string;
|
20
|
+
description: string;
|
21
|
+
mimetype: string;
|
22
|
+
encoding: string;
|
23
|
+
category: string;
|
24
|
+
file: FileUpload;
|
25
|
+
refType: string;
|
26
|
+
refBy: string;
|
27
|
+
}
|
@@ -8,6 +8,7 @@ const shell_1 = require("@things-factory/shell");
|
|
8
8
|
const attachment_1 = require("./attachment");
|
9
9
|
let AttachmentList = class AttachmentList {
|
10
10
|
};
|
11
|
+
exports.AttachmentList = AttachmentList;
|
11
12
|
tslib_1.__decorate([
|
12
13
|
(0, type_graphql_1.Field)(type => [attachment_1.Attachment]),
|
13
14
|
tslib_1.__metadata("design:type", Array)
|
@@ -16,12 +17,12 @@ tslib_1.__decorate([
|
|
16
17
|
(0, type_graphql_1.Field)(type => type_graphql_1.Int),
|
17
18
|
tslib_1.__metadata("design:type", Number)
|
18
19
|
], AttachmentList.prototype, "total", void 0);
|
19
|
-
AttachmentList = tslib_1.__decorate([
|
20
|
+
exports.AttachmentList = AttachmentList = tslib_1.__decorate([
|
20
21
|
(0, type_graphql_1.ObjectType)()
|
21
22
|
], AttachmentList);
|
22
|
-
exports.AttachmentList = AttachmentList;
|
23
23
|
let UploadURL = class UploadURL {
|
24
24
|
};
|
25
|
+
exports.UploadURL = UploadURL;
|
25
26
|
tslib_1.__decorate([
|
26
27
|
(0, type_graphql_1.Field)(type => String),
|
27
28
|
tslib_1.__metadata("design:type", String)
|
@@ -30,12 +31,12 @@ tslib_1.__decorate([
|
|
30
31
|
(0, type_graphql_1.Field)(type => shell_1.ScalarAny),
|
31
32
|
tslib_1.__metadata("design:type", Object)
|
32
33
|
], UploadURL.prototype, "fields", void 0);
|
33
|
-
UploadURL = tslib_1.__decorate([
|
34
|
+
exports.UploadURL = UploadURL = tslib_1.__decorate([
|
34
35
|
(0, type_graphql_1.ObjectType)()
|
35
36
|
], UploadURL);
|
36
|
-
exports.UploadURL = UploadURL;
|
37
37
|
let NewAttachment = class NewAttachment {
|
38
38
|
};
|
39
|
+
exports.NewAttachment = NewAttachment;
|
39
40
|
tslib_1.__decorate([
|
40
41
|
(0, type_graphql_1.Field)({ nullable: true }),
|
41
42
|
tslib_1.__metadata("design:type", String)
|
@@ -56,12 +57,12 @@ tslib_1.__decorate([
|
|
56
57
|
(0, type_graphql_1.Field)({ nullable: true }),
|
57
58
|
tslib_1.__metadata("design:type", String)
|
58
59
|
], NewAttachment.prototype, "refBy", void 0);
|
59
|
-
NewAttachment = tslib_1.__decorate([
|
60
|
+
exports.NewAttachment = NewAttachment = tslib_1.__decorate([
|
60
61
|
(0, type_graphql_1.InputType)()
|
61
62
|
], NewAttachment);
|
62
|
-
exports.NewAttachment = NewAttachment;
|
63
63
|
let AttachmentPatch = class AttachmentPatch {
|
64
64
|
};
|
65
|
+
exports.AttachmentPatch = AttachmentPatch;
|
65
66
|
tslib_1.__decorate([
|
66
67
|
(0, type_graphql_1.Field)({ nullable: true }),
|
67
68
|
tslib_1.__metadata("design:type", String)
|
@@ -94,8 +95,7 @@ tslib_1.__decorate([
|
|
94
95
|
(0, type_graphql_1.Field)({ nullable: true }),
|
95
96
|
tslib_1.__metadata("design:type", String)
|
96
97
|
], AttachmentPatch.prototype, "refBy", void 0);
|
97
|
-
AttachmentPatch = tslib_1.__decorate([
|
98
|
+
exports.AttachmentPatch = AttachmentPatch = tslib_1.__decorate([
|
98
99
|
(0, type_graphql_1.InputType)()
|
99
100
|
], AttachmentPatch);
|
100
|
-
exports.AttachmentPatch = AttachmentPatch;
|
101
101
|
//# sourceMappingURL=attachment-types.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"attachment-types.js","sourceRoot":"","sources":["../../../server/service/attachment/attachment-types.ts"],"names":[],"mappings":";;;;AACA,+FAA2D;AAC3D,+CAAgE;AAEhE,iDAAiD;AAEjD,6CAAyC;AAGlC,IAAM,cAAc,GAApB,MAAM,cAAc;CAM1B,CAAA;
|
1
|
+
{"version":3,"file":"attachment-types.js","sourceRoot":"","sources":["../../../server/service/attachment/attachment-types.ts"],"names":[],"mappings":";;;;AACA,+FAA2D;AAC3D,+CAAgE;AAEhE,iDAAiD;AAEjD,6CAAyC;AAGlC,IAAM,cAAc,GAApB,MAAM,cAAc;CAM1B,CAAA;AANY,wCAAc;AAEzB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,uBAAU,CAAC,CAAC;;6CACT;AAGnB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;6CACN;yBALF,cAAc;IAD1B,IAAA,yBAAU,GAAE;GACA,cAAc,CAM1B;AAGM,IAAM,SAAS,GAAf,MAAM,SAAS;CAMrB,CAAA;AANY,8BAAS;AAEpB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;;sCACX;AAGX;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,CAAC;;yCACd;oBALA,SAAS;IADrB,IAAA,yBAAU,GAAE;GACA,SAAS,CAMrB;AAGM,IAAM,aAAa,GAAnB,MAAM,aAAa;CAezB,CAAA;AAfY,sCAAa;AAExB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACV;AAGhB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,0BAAa,CAAC;;2CACb;AAGhB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACP;AAGnB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACX;AAGf;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACb;wBAdF,aAAa;IADzB,IAAA,wBAAS,GAAE;GACC,aAAa,CAezB;AAGM,IAAM,eAAe,GAArB,MAAM,eAAe;CAwB3B,CAAA;AAxBY,0CAAe;AAE1B;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACd;AAGZ;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;oDACP;AAGnB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACV;AAGhB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACV;AAGhB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACV;AAGhB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,0BAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACjC;AAGhB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDACX;AAGf;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACb;0BAvBF,eAAe;IAD3B,IAAA,wBAAS,GAAE;GACC,eAAe,CAwB3B","sourcesContent":["import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { Field, InputType, Int, ObjectType } from 'type-graphql'\n\nimport { ScalarAny } from '@things-factory/shell'\n\nimport { Attachment } from './attachment'\n\n@ObjectType()\nexport class AttachmentList {\n @Field(type => [Attachment])\n items: Attachment[]\n\n @Field(type => Int)\n total: number\n}\n\n@ObjectType()\nexport class UploadURL {\n @Field(type => String)\n url: string\n\n @Field(type => ScalarAny)\n fields: any\n}\n\n@InputType()\nexport class NewAttachment {\n @Field({ nullable: true })\n category: string\n\n @Field(type => GraphQLUpload)\n file: FileUpload\n\n @Field({ nullable: true })\n description: string\n\n @Field({ nullable: true })\n refType: string\n\n @Field({ nullable: true })\n refBy: string\n}\n\n@InputType()\nexport class AttachmentPatch {\n @Field({ nullable: true })\n name: string\n\n @Field({ nullable: true })\n description: string\n\n @Field({ nullable: true })\n mimetype: string\n\n @Field({ nullable: true })\n encoding: string\n\n @Field({ nullable: true })\n category: string\n\n @Field(type => GraphQLUpload, { nullable: true })\n file: FileUpload\n\n @Field({ nullable: true })\n refType: string\n\n @Field({ nullable: true })\n refBy: string\n}\n"]}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { User } from '@things-factory/auth-base';
|
2
|
+
import { Domain } from '@things-factory/shell';
|
3
|
+
export declare class Attachment {
|
4
|
+
readonly id: string;
|
5
|
+
domain: Domain;
|
6
|
+
domainId: string;
|
7
|
+
name: string;
|
8
|
+
description: string;
|
9
|
+
mimetype: string;
|
10
|
+
encoding: string;
|
11
|
+
category: string;
|
12
|
+
refType: string;
|
13
|
+
refBy: string;
|
14
|
+
path: string;
|
15
|
+
size: string;
|
16
|
+
contents: Buffer;
|
17
|
+
createdAt: Date;
|
18
|
+
updatedAt: Date;
|
19
|
+
creator: User;
|
20
|
+
creatorId: string;
|
21
|
+
updater: User;
|
22
|
+
updaterId: string;
|
23
|
+
get fullpath(): string;
|
24
|
+
}
|
@@ -18,6 +18,7 @@ let Attachment = class Attachment {
|
|
18
18
|
return `/${attachment_const_1.ATTACHMENT_PATH}/${this.path}`;
|
19
19
|
}
|
20
20
|
};
|
21
|
+
exports.Attachment = Attachment;
|
21
22
|
tslib_1.__decorate([
|
22
23
|
(0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
|
23
24
|
(0, type_graphql_1.Field)(type => type_graphql_1.ID),
|
@@ -121,7 +122,7 @@ tslib_1.__decorate([
|
|
121
122
|
tslib_1.__metadata("design:type", String),
|
122
123
|
tslib_1.__metadata("design:paramtypes", [])
|
123
124
|
], Attachment.prototype, "fullpath", null);
|
124
|
-
Attachment = tslib_1.__decorate([
|
125
|
+
exports.Attachment = Attachment = tslib_1.__decorate([
|
125
126
|
(0, typeorm_1.Entity)(),
|
126
127
|
(0, typeorm_1.Index)('ix_attachment_0', (attachment) => [attachment.domain, attachment.name], { unique: false }),
|
127
128
|
(0, typeorm_1.Index)('ix_attachment_1', (attachment) => [attachment.domain, attachment.category, attachment.name], {
|
@@ -135,5 +136,4 @@ Attachment = tslib_1.__decorate([
|
|
135
136
|
}),
|
136
137
|
(0, type_graphql_1.ObjectType)()
|
137
138
|
], Attachment);
|
138
|
-
exports.Attachment = Attachment;
|
139
139
|
//# sourceMappingURL=attachment.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../../server/service/attachment/attachment.ts"],"names":[],"mappings":";;;;AAAA,+CAAoD;AACpD,qCASgB;AAEhB,yDAAgD;AAChD,iDAA8C;AAE9C,6DAAwD;AACxD,6CAA4C;AAE5C,MAAM,SAAS,GAAG,YAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;AAC7C,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAA;AAc7B,IAAM,UAAU,GAAhB,MAAM,UAAU;IAAhB;QAkCL,YAAO,GAAW,EAAE,CAAA;IAmDtB,CAAC;IAJC,IACI,QAAQ;QACV,OAAO,IAAI,kCAAe,IAAI,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3C,CAAC;CACF,CAAA;
|
1
|
+
{"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../../server/service/attachment/attachment.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, ID, ObjectType } from 'type-graphql'\nimport {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn\n} from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Domain } from '@things-factory/shell'\n\nimport { ATTACHMENT_PATH } from '../../attachment-const'\nimport { config } from '@things-factory/env'\n\nconst ORMCONFIG = config.get('ormconfig', {})\nconst DATABASE_TYPE = ORMCONFIG.type\n\n@Entity()\n@Index('ix_attachment_0', (attachment: Attachment) => [attachment.domain, attachment.name], { unique: false })\n@Index('ix_attachment_1', (attachment: Attachment) => [attachment.domain, attachment.category, attachment.name], {\n unique: false\n})\n@Index('ix_attachment_2', (attachment: Attachment) => [attachment.domain, attachment.refBy], {\n unique: false\n})\n@Index('ix_attachment_3', (attachment: Attachment) => [attachment.domain, attachment.refType, attachment.refBy], {\n unique: false\n})\n@ObjectType()\nexport class Attachment {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain, { nullable: false })\n @Field(type => Domain)\n domain: Domain\n\n @RelationId((attachment: Attachment) => attachment.domain)\n domainId: string\n\n @Column()\n @Field()\n name: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n description: string\n\n @Column()\n @Field()\n mimetype: string\n\n @Column()\n @Field()\n encoding: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n category: string\n\n @Column({ nullable: true, default: '' })\n @Field({ nullable: true })\n refType: string = ''\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n refBy: string\n\n @Column()\n @Field()\n path: string\n\n @Column()\n @Field()\n size: string\n\n @Column({\n nullable: true,\n type:\n DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'\n ? 'longblob'\n : DATABASE_TYPE == 'postgres'\n ? 'bytea'\n : 'blob'\n })\n contents: Buffer\n\n @CreateDateColumn()\n @Field()\n createdAt: Date\n\n @UpdateDateColumn()\n @Field()\n updatedAt: Date\n\n @ManyToOne(type => User)\n @Field(type => User, { nullable: true })\n creator: User\n\n @RelationId((attachment: Attachment) => attachment.creator)\n creatorId: string\n\n @ManyToOne(type => User)\n @Field(type => User, { nullable: true })\n updater: User\n\n @RelationId((attachment: Attachment) => attachment.updater)\n updaterId: string\n\n @Field()\n get fullpath(): string {\n return `/${ATTACHMENT_PATH}/${this.path}`\n }\n}\n"]}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
import { Attachment } from './attachment';
|
2
|
+
import { AttachmentMutation } from './attachment-mutation';
|
3
|
+
import { AttachmentQuery } from './attachment-query';
|
4
|
+
export declare const entities: (typeof Attachment)[];
|
5
|
+
export declare const resolvers: (typeof AttachmentMutation | typeof AttachmentQuery)[];
|
@@ -0,0 +1,6 @@
|
|
1
|
+
export * from './attachment/attachment';
|
2
|
+
export * from './attachment/attachment-types';
|
3
|
+
export declare const entities: typeof import("./attachment/attachment").Attachment[];
|
4
|
+
export declare const schema: {
|
5
|
+
resolverClasses: (typeof import("./attachment/attachment-mutation").AttachmentMutation | typeof import("./attachment/attachment-query").AttachmentQuery)[];
|
6
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"storage-azure-blob.js","sourceRoot":"","sources":["../server/storage-azure-blob.ts"],"names":[],"mappings":";;AAAA,sDAAwE;AACxE,6CAA4C;AAE5C,yDAA4C;AAE5C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;AAChC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5B,IAAI,0BAAO,IAAI,0BAAO,CAAC,IAAI,IAAI,WAAW,EAAE;
|
1
|
+
{"version":3,"file":"storage-azure-blob.js","sourceRoot":"","sources":["../server/storage-azure-blob.ts"],"names":[],"mappings":"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","sourcesContent":["import { BlobServiceClient, ContainerClient } from '@azure/storage-blob'\nimport { logger } from '@things-factory/env'\n\nimport { STORAGE } from './attachment-const'\n\nconst crypto = require('crypto')\nconst mime = require('mime')\n\nif (STORAGE && STORAGE.type == 'azureblob') {\n const blobServiceClient = BlobServiceClient.fromConnectionString(STORAGE.connectionString)\n\n /* upload file */\n STORAGE.uploadFile = async ({ id, file }) => {\n const { createReadStream, filename, mimetype, encoding } = await file\n\n const containerClient = blobServiceClient.getContainerClient(STORAGE.containerName)\n id = id || crypto.randomUUID()\n const ext = filename.split('.').pop()\n const key = ext ? `${id}.${ext}` : id\n\n const blockBlobClient = containerClient.getBlockBlobClient(key)\n const stream = createReadStream()\n const buffer = await streamToBuffer(stream)\n\n await blockBlobClient.upload(buffer, buffer.length, {\n blobHTTPHeaders: {\n blobContentType: mimetype\n }\n })\n\n // await blockBlobClient.uploadStream(stream, undefined, undefined, {\n // blobHTTPHeaders: {\n // blobContentType: mimetype\n // }\n // })\n\n const url = `${STORAGE.url}/${STORAGE.containerName}/${key}`\n return {\n id,\n path: key,\n filename,\n size: buffer.length,\n mimetype,\n encoding\n }\n }\n\n STORAGE.deleteFile = async (path: string) => {\n const containerClient = blobServiceClient.getContainerClient(STORAGE.containerName)\n const blockBlobClient = containerClient.getBlockBlobClient(path)\n await blockBlobClient.deleteIfExists()\n }\n\n /* TODO Streaming to Streaming 으로 구현하라. */\n STORAGE.sendFile = async (context, attachment, next) => {\n const containerClient = blobServiceClient.getContainerClient(STORAGE.containerName)\n const blockBlobClient = containerClient.getBlockBlobClient(attachment)\n\n const result = await blockBlobClient.getProperties()\n const response = await blockBlobClient.download(0)\n const body = response.readableStreamBody\n\n context.set({\n 'Content-Length': result.contentLength,\n 'Content-Type': mime.getType(attachment),\n 'Last-Modified': result.lastModified.toUTCString(),\n ETag: result.etag,\n 'Cache-Control': 'public, max-age=31556926'\n })\n\n context.body = body\n }\n\n STORAGE.readFile = async (attachment: string, encoding: string) => {\n const containerClient = blobServiceClient.getContainerClient(STORAGE.containerName)\n const blockBlobClient = containerClient.getBlockBlobClient(attachment)\n\n const response = await blockBlobClient.download(0)\n const body = response.readableStreamBody\n\n const buffer = Buffer.from(await streamToBuffer(body))\n\n switch (encoding) {\n case 'base64':\n return buffer.toString('base64')\n default:\n return buffer\n }\n }\n\n STORAGE.generateUploadURL = async (type: string): Promise<{ url: string; fields: { [key: string]: string } }> => {\n const expiresInMinutes = 1\n const id = crypto.randomUUID()\n\n return {\n url: `${STORAGE.url}/${STORAGE.containerName}/${id}`,\n fields: {}\n }\n }\n\n logger.info('Azure Blob Storage is Ready.')\n}\n\nasync function streamToBuffer(stream): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n const chunks = []\n stream.on('data', chunk => chunks.push(chunk))\n stream.on('end', () => resolve(Buffer.concat(chunks)))\n stream.on('error', reject)\n })\n}\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -15,17 +15,12 @@ if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 'database')
|
|
15
15
|
const stream = createReadStream();
|
16
16
|
const chunks = [];
|
17
17
|
try {
|
18
|
-
for (var _d = true, stream_1 = tslib_1.__asyncValues(stream), stream_1_1; stream_1_1 = await stream_1.next(), _a = stream_1_1.done, !_a;) {
|
18
|
+
for (var _d = true, stream_1 = tslib_1.__asyncValues(stream), stream_1_1; stream_1_1 = await stream_1.next(), _a = stream_1_1.done, !_a; _d = true) {
|
19
19
|
_c = stream_1_1.value;
|
20
20
|
_d = false;
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
chunks.push(chunk);
|
25
|
-
}
|
26
|
-
}
|
27
|
-
finally {
|
28
|
-
_d = true;
|
21
|
+
const chunk = _c;
|
22
|
+
if (chunk instanceof Buffer) {
|
23
|
+
chunks.push(chunk);
|
29
24
|
}
|
30
25
|
}
|
31
26
|
}
|