@fdm-monster/server 2.0.7 → 2.0.9
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/.yarn/install-state.gz +0 -0
- package/README.md +1 -1
- package/RELEASE_NOTES.MD +35 -0
- package/dist/container.js +0 -6
- package/dist/container.js.map +1 -1
- package/dist/container.tokens.js +0 -2
- package/dist/container.tokens.js.map +1 -1
- package/dist/controllers/print-job.controller.js +12 -151
- package/dist/controllers/print-job.controller.js.map +1 -1
- package/dist/controllers/print-queue.controller.js +82 -17
- package/dist/controllers/print-queue.controller.js.map +1 -1
- package/dist/controllers/printer-files.controller.js +16 -77
- package/dist/controllers/printer-files.controller.js.map +1 -1
- package/dist/controllers/printer.controller.js +3 -3
- package/dist/controllers/printer.controller.js.map +1 -1
- package/dist/controllers/validation/printer-files-controller.validation.js +7 -0
- package/dist/controllers/validation/printer-files-controller.validation.js.map +1 -1
- package/dist/entities/print-job.entity.js.map +1 -1
- package/dist/server.constants.js +1 -2
- package/dist/server.constants.js.map +1 -1
- package/dist/services/bambu/bambu-ftp.adapter.js +3 -13
- package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
- package/dist/services/bambu.api.js +31 -30
- package/dist/services/bambu.api.js.map +1 -1
- package/dist/services/file-storage.service.js +11 -2
- package/dist/services/file-storage.service.js.map +1 -1
- package/dist/services/moonraker/moonraker.client.js +5 -17
- package/dist/services/moonraker/moonraker.client.js.map +1 -1
- package/dist/services/moonraker.api.js +45 -11
- package/dist/services/moonraker.api.js.map +1 -1
- package/dist/services/octoprint/octoprint-api.routes.js +1 -1
- package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
- package/dist/services/octoprint/octoprint.client.js +35 -24
- package/dist/services/octoprint/octoprint.client.js.map +1 -1
- package/dist/services/octoprint/utils/file.utils.js +42 -5
- package/dist/services/octoprint/utils/file.utils.js.map +1 -1
- package/dist/services/octoprint.api.js +15 -10
- package/dist/services/octoprint.api.js.map +1 -1
- package/dist/services/orm/print-job.service.js +55 -47
- package/dist/services/orm/print-job.service.js.map +1 -1
- package/dist/services/print-queue.service.js +90 -30
- package/dist/services/print-queue.service.js.map +1 -1
- package/dist/services/printer-api.interface.js +13 -0
- package/dist/services/printer-api.interface.js.map +1 -1
- package/dist/services/prusa-link/prusa-link.api.js +33 -27
- package/dist/services/prusa-link/prusa-link.api.js.map +1 -1
- package/dist/tasks/print-job-analysis.task.js.map +1 -1
- package/dist/utils/bgcode/bgcode-thumbnail.parser.js +50 -0
- package/dist/utils/bgcode/bgcode-thumbnail.parser.js.map +1 -0
- package/dist/utils/bgcode/bgcode.constants.js +57 -0
- package/dist/utils/bgcode/bgcode.constants.js.map +1 -0
- package/dist/utils/bgcode/bgcode.types.js +132 -0
- package/dist/utils/bgcode/bgcode.types.js.map +1 -0
- package/dist/utils/bgcode/bgcode.utils.js +288 -0
- package/dist/utils/bgcode/bgcode.utils.js.map +1 -0
- package/dist/utils/bgcode/heatshrink-decoder.js +172 -0
- package/dist/utils/bgcode/heatshrink-decoder.js.map +1 -0
- package/dist/utils/bgcode/png-encoder.js +76 -0
- package/dist/utils/bgcode/png-encoder.js.map +1 -0
- package/dist/utils/bgcode/qoi-decoder.js +141 -0
- package/dist/utils/bgcode/qoi-decoder.js.map +1 -0
- package/dist/utils/image-dimensions.js +62 -0
- package/dist/utils/image-dimensions.js.map +1 -0
- package/dist/utils/job-stats.util.js +79 -0
- package/dist/utils/job-stats.util.js.map +1 -0
- package/dist/utils/parsers/3mf.parser.js +39 -9
- package/dist/utils/parsers/3mf.parser.js.map +1 -1
- package/dist/utils/parsers/bgcode.parser.js +125 -144
- package/dist/utils/parsers/bgcode.parser.js.map +1 -1
- package/dist/utils/parsers/gcode.parser.js +13 -2
- package/dist/utils/parsers/gcode.parser.js.map +1 -1
- package/dist/utils/parsers/parser.types.js +6 -0
- package/dist/utils/parsers/parser.types.js.map +1 -0
- package/dist/utils/thumbnail.util.js +24 -0
- package/dist/utils/thumbnail.util.js.map +1 -0
- package/package.json +5 -5
- package/dist/state/file.cache.js +0 -68
- package/dist/state/file.cache.js.map +0 -1
- package/dist/state/printer-files.store.js +0 -92
- package/dist/state/printer-files.store.js.map +0 -1
- package/dist/tasks/printer-files-load.task.js +0 -29
- package/dist/tasks/printer-files-load.task.js.map +0 -1
|
@@ -10,26 +10,58 @@ Object.defineProperty(exports, "PrintQueueService", {
|
|
|
10
10
|
});
|
|
11
11
|
const _typeorm = require("typeorm");
|
|
12
12
|
const _printjobentity = require("../entities/print-job.entity");
|
|
13
|
+
const _printerentity = require("../entities/printer.entity");
|
|
14
|
+
const _socketstatetype = require("../shared/dtos/socket-state.type");
|
|
15
|
+
const _apistatetype = require("../shared/dtos/api-state.type");
|
|
13
16
|
const _node = require("@sentry/node");
|
|
14
17
|
class PrintQueueService {
|
|
15
18
|
printerApiFactory;
|
|
16
19
|
fileStorageService;
|
|
20
|
+
printerSocketStore;
|
|
17
21
|
printJobRepository;
|
|
22
|
+
printerRepository;
|
|
18
23
|
eventEmitter2;
|
|
19
24
|
logger;
|
|
20
|
-
constructor(loggerFactory, typeormService, eventEmitter2, printerApiFactory, fileStorageService){
|
|
25
|
+
constructor(loggerFactory, typeormService, eventEmitter2, printerApiFactory, fileStorageService, printerSocketStore){
|
|
21
26
|
this.printerApiFactory = printerApiFactory;
|
|
22
27
|
this.fileStorageService = fileStorageService;
|
|
28
|
+
this.printerSocketStore = printerSocketStore;
|
|
23
29
|
this.printJobRepository = typeormService.getDataSource().getRepository(_printjobentity.PrintJob);
|
|
30
|
+
this.printerRepository = typeormService.getDataSource().getRepository(_printerentity.Printer);
|
|
24
31
|
this.eventEmitter2 = eventEmitter2;
|
|
25
32
|
this.logger = loggerFactory(PrintQueueService.name);
|
|
26
33
|
this.eventEmitter2.on("printQueue.jobSubmitted", (event)=>{
|
|
27
|
-
this.handleJobSubmission(event.printerId, event.jobId, event.fileName, event.fileStorageId).catch((error)=>{
|
|
34
|
+
this.handleJobSubmission(event.printerId, event.jobId, event.fileName, event.fileStorageId, event.queuePosition).catch((error)=>{
|
|
28
35
|
this.logger.error(`Failed to handle job submission for job ${event.jobId}`, error);
|
|
29
36
|
(0, _node.captureException)(error);
|
|
30
37
|
});
|
|
31
38
|
});
|
|
32
|
-
|
|
39
|
+
}
|
|
40
|
+
isPrinterConnected(printerId) {
|
|
41
|
+
const socket = this.printerSocketStore.getPrinterSocket(printerId);
|
|
42
|
+
if (!socket) {
|
|
43
|
+
return {
|
|
44
|
+
connected: false,
|
|
45
|
+
reason: "No socket connection found"
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const socketState = socket.socketState;
|
|
49
|
+
const apiState = socket.apiState;
|
|
50
|
+
if (socketState !== _socketstatetype.SOCKET_STATE.opened && socketState !== _socketstatetype.SOCKET_STATE.authenticated) {
|
|
51
|
+
return {
|
|
52
|
+
connected: false,
|
|
53
|
+
reason: `Socket not connected (state: ${socketState})`
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (apiState !== _apistatetype.API_STATE.responding) {
|
|
57
|
+
return {
|
|
58
|
+
connected: false,
|
|
59
|
+
reason: `Printer not responding (API state: ${apiState})`
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
connected: true
|
|
64
|
+
};
|
|
33
65
|
}
|
|
34
66
|
async addToQueue(printerId, jobId, position) {
|
|
35
67
|
const job = await this.printJobRepository.findOne({
|
|
@@ -40,11 +72,7 @@ class PrintQueueService {
|
|
|
40
72
|
if (!job) {
|
|
41
73
|
throw new Error(`Print job ${jobId} not found`);
|
|
42
74
|
}
|
|
43
|
-
|
|
44
|
-
job.printerId = printerId;
|
|
45
|
-
} else if (job.printerId !== printerId) {
|
|
46
|
-
throw new Error(`Job ${jobId} belongs to printer ${job.printerId}, cannot add to printer ${printerId}`);
|
|
47
|
-
}
|
|
75
|
+
this.ensurePrinterAssignment(job, printerId);
|
|
48
76
|
if (position === undefined || position === null) {
|
|
49
77
|
const maxPosition = await this.getMaxQueuePosition(printerId);
|
|
50
78
|
job.queuePosition = (maxPosition ?? -1) + 1;
|
|
@@ -107,6 +135,23 @@ class PrintQueueService {
|
|
|
107
135
|
createdAt: j.createdAt
|
|
108
136
|
}));
|
|
109
137
|
}
|
|
138
|
+
async getGlobalQueuePaged(page, pageSize) {
|
|
139
|
+
const skip = (page - 1) * pageSize;
|
|
140
|
+
return await this.printJobRepository.findAndCount({
|
|
141
|
+
where: {
|
|
142
|
+
status: "QUEUED"
|
|
143
|
+
},
|
|
144
|
+
order: {
|
|
145
|
+
printerId: "ASC",
|
|
146
|
+
queuePosition: "ASC"
|
|
147
|
+
},
|
|
148
|
+
relations: [
|
|
149
|
+
'printer'
|
|
150
|
+
],
|
|
151
|
+
take: pageSize,
|
|
152
|
+
skip: skip
|
|
153
|
+
});
|
|
154
|
+
}
|
|
110
155
|
async getNextInQueue(printerId) {
|
|
111
156
|
return this.printJobRepository.findOne({
|
|
112
157
|
where: {
|
|
@@ -126,7 +171,7 @@ class PrintQueueService {
|
|
|
126
171
|
id: jobIds[i]
|
|
127
172
|
}
|
|
128
173
|
});
|
|
129
|
-
if (job
|
|
174
|
+
if (job?.printerId === printerId) {
|
|
130
175
|
job.queuePosition = i;
|
|
131
176
|
await this.printJobRepository.save(job);
|
|
132
177
|
}
|
|
@@ -168,6 +213,13 @@ class PrintQueueService {
|
|
|
168
213
|
});
|
|
169
214
|
return nextJob;
|
|
170
215
|
}
|
|
216
|
+
ensurePrinterAssignment(job, printerId) {
|
|
217
|
+
if (!job.printerId) {
|
|
218
|
+
job.printerId = printerId;
|
|
219
|
+
} else if (job.printerId !== printerId) {
|
|
220
|
+
throw new Error(`Job ${job.id} belongs to printer ${job.printerId}, cannot submit to printer ${printerId}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
171
223
|
async getMaxQueuePosition(printerId) {
|
|
172
224
|
const result = await this.printJobRepository.createQueryBuilder("job").select("MAX(job.queuePosition)", "max").where("job.printerId = :printerId", {
|
|
173
225
|
printerId
|
|
@@ -192,15 +244,6 @@ class PrintQueueService {
|
|
|
192
244
|
removedPosition
|
|
193
245
|
}).execute();
|
|
194
246
|
}
|
|
195
|
-
async handleJobCompleted(printerId) {
|
|
196
|
-
const nextJob = await this.getNextInQueue(printerId);
|
|
197
|
-
if (nextJob) {
|
|
198
|
-
this.logger.log(`Auto-processing queue after completion: starting job ${nextJob.id}`);
|
|
199
|
-
await this.processQueue(printerId);
|
|
200
|
-
} else {
|
|
201
|
-
this.logger.log(`Queue empty for printer ${printerId} after job completion`);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
247
|
async submitToPrinter(printerId, jobId) {
|
|
205
248
|
const job = await this.printJobRepository.findOne({
|
|
206
249
|
where: {
|
|
@@ -210,39 +253,55 @@ class PrintQueueService {
|
|
|
210
253
|
if (!job) {
|
|
211
254
|
throw new Error(`Print job ${jobId} not found`);
|
|
212
255
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
if (!job.printerId) {
|
|
217
|
-
job.printerId = printerId;
|
|
218
|
-
}
|
|
256
|
+
this.ensurePrinterAssignment(job, printerId);
|
|
257
|
+
const queuePosition = job.queuePosition;
|
|
219
258
|
if (job.queuePosition !== null) {
|
|
220
259
|
const oldPosition = job.queuePosition;
|
|
221
260
|
job.queuePosition = null;
|
|
222
261
|
await this.compactQueuePositions(printerId, oldPosition);
|
|
223
262
|
}
|
|
224
263
|
job.status = "PRINTING";
|
|
264
|
+
job.startedAt = new Date();
|
|
225
265
|
await this.printJobRepository.save(job);
|
|
226
266
|
this.logger.log(`Submitting job ${jobId} (${job.fileName}) to printer ${printerId}`);
|
|
227
267
|
this.eventEmitter2.emit("printQueue.jobSubmitted", {
|
|
228
268
|
printerId,
|
|
229
269
|
jobId: job.id,
|
|
230
270
|
fileName: job.fileName,
|
|
231
|
-
fileStorageId: job.fileStorageId
|
|
271
|
+
fileStorageId: job.fileStorageId,
|
|
272
|
+
queuePosition
|
|
232
273
|
});
|
|
233
274
|
}
|
|
234
|
-
async handleJobSubmission(printerId, jobId, fileName, fileStorageId) {
|
|
275
|
+
async handleJobSubmission(printerId, jobId, fileName, fileStorageId, queuePosition) {
|
|
235
276
|
this.logger.log(`Handling job submission for job ${jobId} on printer ${printerId}`);
|
|
236
277
|
try {
|
|
237
278
|
if (!fileStorageId) {
|
|
238
279
|
throw new Error(`Job ${jobId} has no fileStorageId - cannot submit to printer`);
|
|
239
280
|
}
|
|
240
|
-
const fileBuffer = this.fileStorageService.readFile(fileStorageId);
|
|
241
|
-
this.logger.log(`Read ${fileBuffer.length} bytes for job ${jobId}`);
|
|
242
281
|
const printerApi = this.printerApiFactory.getById(printerId);
|
|
282
|
+
const fileSize = this.fileStorageService.getFileSize(fileStorageId);
|
|
283
|
+
const fileStream = this.fileStorageService.readFileStream(fileStorageId);
|
|
243
284
|
this.logger.log(`Uploading file ${fileName} to printer ${printerId} and starting print`);
|
|
244
|
-
await printerApi.uploadFile(
|
|
285
|
+
await printerApi.uploadFile({
|
|
286
|
+
stream: fileStream,
|
|
287
|
+
fileName,
|
|
288
|
+
contentLength: fileSize,
|
|
289
|
+
startPrint: true
|
|
290
|
+
});
|
|
245
291
|
this.logger.log(`Successfully submitted job ${jobId} to printer ${printerId}`);
|
|
292
|
+
if (queuePosition !== null && queuePosition !== undefined) {
|
|
293
|
+
const job = await this.printJobRepository.findOne({
|
|
294
|
+
where: {
|
|
295
|
+
id: jobId
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
if (job?.queuePosition === queuePosition) {
|
|
299
|
+
job.queuePosition = null;
|
|
300
|
+
await this.printJobRepository.save(job);
|
|
301
|
+
await this.compactQueuePositions(printerId, queuePosition);
|
|
302
|
+
this.logger.log(`Removed job ${jobId} from queue after successful submission`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
246
305
|
} catch (error) {
|
|
247
306
|
this.logger.error(`Failed to submit job ${jobId} to printer ${printerId}`, error);
|
|
248
307
|
try {
|
|
@@ -254,8 +313,9 @@ class PrintQueueService {
|
|
|
254
313
|
if (job) {
|
|
255
314
|
job.status = "FAILED";
|
|
256
315
|
job.statusReason = `Print submission failed: ${error instanceof Error ? error.message : "Unknown error"}`;
|
|
316
|
+
job.endedAt = new Date();
|
|
257
317
|
await this.printJobRepository.save(job);
|
|
258
|
-
this.logger.log(`Updated job ${jobId} status to FAILED`);
|
|
318
|
+
this.logger.log(`Updated job ${jobId} status to FAILED (still in queue for retry)`);
|
|
259
319
|
}
|
|
260
320
|
} catch (updateError) {
|
|
261
321
|
this.logger.error(`Failed to update job ${jobId} status after submission error`, updateError);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/print-queue.service.ts"],"names":["PrintQueueService","printJobRepository","eventEmitter2","logger","loggerFactory","typeormService","printerApiFactory","fileStorageService","getDataSource","getRepository","PrintJob","name","on","event","handleJobSubmission","printerId","jobId","fileName","fileStorageId","catch","error","captureException","
|
|
1
|
+
{"version":3,"sources":["../../src/services/print-queue.service.ts"],"names":["PrintQueueService","printJobRepository","printerRepository","eventEmitter2","logger","loggerFactory","typeormService","printerApiFactory","fileStorageService","printerSocketStore","getDataSource","getRepository","PrintJob","Printer","name","on","event","handleJobSubmission","printerId","jobId","fileName","fileStorageId","queuePosition","catch","error","captureException","isPrinterConnected","socket","getPrinterSocket","connected","reason","socketState","apiState","SOCKET_STATE","opened","authenticated","API_STATE","responding","addToQueue","position","job","findOne","where","id","Error","ensurePrinterAssignment","undefined","maxPosition","getMaxQueuePosition","shiftQueuePositions","status","save","log","emit","removeFromQueue","oldPosition","compactQueuePositions","getQueue","jobs","find","Not","IsNull","order","map","j","estimatedTimeSeconds","metadata","gcodePrintTimeSeconds","filamentGrams","filamentUsedGrams","createdAt","getGlobalQueuePaged","page","pageSize","skip","findAndCount","relations","take","getNextInQueue","reorderQueue","jobIds","i","length","clearQueue","processQueue","nextJob","result","createQueryBuilder","select","getRawOne","max","fromPosition","update","set","andWhere","execute","removedPosition","submitToPrinter","startedAt","Date","printerApi","getById","fileSize","getFileSize","fileStream","readFileStream","uploadFile","stream","contentLength","startPrint","statusReason","message","endedAt","updateError"],"mappings":"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"}
|
|
@@ -26,8 +26,21 @@ _export(exports, {
|
|
|
26
26
|
},
|
|
27
27
|
get ReprintState () {
|
|
28
28
|
return ReprintState;
|
|
29
|
+
},
|
|
30
|
+
get uploadFileInputSchema () {
|
|
31
|
+
return uploadFileInputSchema;
|
|
29
32
|
}
|
|
30
33
|
});
|
|
34
|
+
const _zod = require("zod");
|
|
35
|
+
const uploadFileInputSchema = _zod.z.object({
|
|
36
|
+
stream: _zod.z.custom((val)=>{
|
|
37
|
+
return val && typeof val === "object" && "pipe" in val && typeof val.pipe === "function";
|
|
38
|
+
}, "Must be a readable stream"),
|
|
39
|
+
fileName: _zod.z.string().min(1),
|
|
40
|
+
contentLength: _zod.z.number().int().positive(),
|
|
41
|
+
startPrint: _zod.z.boolean(),
|
|
42
|
+
uploadToken: _zod.z.string().optional()
|
|
43
|
+
});
|
|
31
44
|
const OctoprintType = 0;
|
|
32
45
|
const MoonrakerType = 1;
|
|
33
46
|
const PrusaLinkType = 2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/printer-api.interface.ts"],"names":["BambuType","MoonrakerType","OctoprintType","PrinterTypesEnum","PrusaLinkType","ReprintState"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../src/services/printer-api.interface.ts"],"names":["BambuType","MoonrakerType","OctoprintType","PrinterTypesEnum","PrusaLinkType","ReprintState","uploadFileInputSchema","z","object","stream","custom","val","pipe","fileName","string","min","contentLength","number","int","positive","startPrint","boolean","uploadToken","optional"],"mappings":";;;;;;;;;;;QAwBaA;eAAAA;;QAFAC;eAAAA;;QADAC;eAAAA;;QAKDC;eAAAA;;QAHCC;eAAAA;;QAmDDC;eAAAA;;QAjECC;eAAAA;;;qBAHK;AAGX,MAAMA,wBAAwBC,MAAC,CAACC,MAAM,CAAC;IAC5CC,QAAQF,MAAC,CAACG,MAAM,CAAW,CAACC;QAC1B,OAAOA,OAAO,OAAOA,QAAQ,YAAY,UAAUA,OAAO,OAAOA,IAAIC,IAAI,KAAK;IAChF,GAAG;IACHC,UAAUN,MAAC,CAACO,MAAM,GAAGC,GAAG,CAAC;IACzBC,eAAeT,MAAC,CAACU,MAAM,GAAGC,GAAG,GAAGC,QAAQ;IACxCC,YAAYb,MAAC,CAACc,OAAO;IACrBC,aAAaf,MAAC,CAACO,MAAM,GAAGS,QAAQ;AAClC;AAIO,MAAMrB,gBAAgB;AACtB,MAAMD,gBAAgB;AACtB,MAAMG,gBAAgB;AACtB,MAAMJ,YAAY;AAElB,IAAA,AAAKG,0CAAAA;;;;;WAAAA;;AAgDL,IAAA,AAAKE,sCAAAA;;;;WAAAA"}
|
|
@@ -10,7 +10,6 @@ Object.defineProperty(exports, "PrusaLinkApi", {
|
|
|
10
10
|
});
|
|
11
11
|
const _printerapiinterface = require("../printer-api.interface");
|
|
12
12
|
const _prusalinkhttpclientbuilder = require("./utils/prusa-link-http-client.builder");
|
|
13
|
-
const _fs = require("fs");
|
|
14
13
|
const _eventconstants = require("../../constants/event.constants");
|
|
15
14
|
const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
|
|
16
15
|
const defaultLog = {
|
|
@@ -47,20 +46,36 @@ class PrusaLinkApi {
|
|
|
47
46
|
async validateConnection() {
|
|
48
47
|
await this.getVersion();
|
|
49
48
|
}
|
|
50
|
-
async getFiles() {
|
|
49
|
+
async getFiles(recursive = false, startDir = "/usb") {
|
|
50
|
+
if (recursive) {
|
|
51
|
+
throw new Error("Recursive listing not supported for PrusaLink printers");
|
|
52
|
+
}
|
|
51
53
|
const response = await this.client.get("/api/files");
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
const root = response.data.files.find((dir)=>dir.path === startDir);
|
|
55
|
+
if (!root || !root.children) {
|
|
56
|
+
return {
|
|
57
|
+
dirs: [],
|
|
58
|
+
files: []
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const items = root.children.map((child)=>({
|
|
62
|
+
path: child.path,
|
|
63
|
+
size: null,
|
|
54
64
|
date: null,
|
|
55
|
-
|
|
65
|
+
dir: !child.refs?.download
|
|
56
66
|
}));
|
|
67
|
+
return {
|
|
68
|
+
dirs: items.filter((i)=>i.dir),
|
|
69
|
+
files: items.filter((i)=>!i.dir)
|
|
70
|
+
};
|
|
57
71
|
}
|
|
58
72
|
async getFile(path) {
|
|
59
73
|
const response = await this.getFileRaw(path);
|
|
60
74
|
return {
|
|
61
75
|
path: response.data.name,
|
|
62
76
|
size: response.data.size,
|
|
63
|
-
date: null
|
|
77
|
+
date: null,
|
|
78
|
+
dir: false
|
|
64
79
|
};
|
|
65
80
|
}
|
|
66
81
|
async getStatus() {
|
|
@@ -143,37 +158,28 @@ class PrusaLinkApi {
|
|
|
143
158
|
Range: `bytes=${startBytes}-${endBytes}`
|
|
144
159
|
})).get(pathUrl);
|
|
145
160
|
}
|
|
146
|
-
async uploadFile(
|
|
161
|
+
async uploadFile(input) {
|
|
162
|
+
const validated = _printerapiinterface.uploadFileInputSchema.parse(input);
|
|
147
163
|
try {
|
|
148
|
-
let fileBuffer;
|
|
149
|
-
const filename = multerFileOrBuffer.originalname;
|
|
150
|
-
if (Buffer.isBuffer(multerFileOrBuffer)) {
|
|
151
|
-
this.logger.log("Using file directly from memory buffer for upload");
|
|
152
|
-
fileBuffer = multerFileOrBuffer;
|
|
153
|
-
} else {
|
|
154
|
-
const filePath = multerFileOrBuffer.path;
|
|
155
|
-
this.logger.log(`Reading file from disk for upload: ${filePath}`);
|
|
156
|
-
fileBuffer = (0, _fs.readFileSync)(filePath);
|
|
157
|
-
}
|
|
158
|
-
const contentLength = fileBuffer.length;
|
|
159
164
|
const response = await this.createClient((b)=>{
|
|
160
165
|
b.withHeaders({
|
|
161
|
-
"Content-
|
|
166
|
+
"Content-Type": "application/octet-stream",
|
|
167
|
+
"Content-Length": validated.contentLength.toString(),
|
|
162
168
|
Overwrite: "?1",
|
|
163
|
-
"Print-After-Upload": startPrint ? "?1" : "?0"
|
|
169
|
+
"Print-After-Upload": validated.startPrint ? "?1" : "?0"
|
|
164
170
|
}).withTimeout(this.settingsStore.getTimeoutSettings().apiUploadTimeout).withOnUploadProgress((p)=>{
|
|
165
|
-
if (
|
|
166
|
-
this.eventEmitter2.emit(`${(0, _eventconstants.uploadProgressEvent)(
|
|
171
|
+
if (validated.uploadToken) {
|
|
172
|
+
this.eventEmitter2.emit(`${(0, _eventconstants.uploadProgressEvent)(validated.uploadToken)}`, validated.uploadToken, p);
|
|
167
173
|
}
|
|
168
174
|
});
|
|
169
|
-
}).put(`/api/v1/files/usb/${encodeURIComponent(
|
|
170
|
-
if (
|
|
171
|
-
this.eventEmitter2.emit(`${(0, _eventconstants.uploadDoneEvent)(
|
|
175
|
+
}).put(`/api/v1/files/usb/${encodeURIComponent(validated.fileName)}`, validated.stream);
|
|
176
|
+
if (validated.uploadToken) {
|
|
177
|
+
this.eventEmitter2.emit(`${(0, _eventconstants.uploadDoneEvent)(validated.uploadToken)}`, validated.uploadToken);
|
|
172
178
|
}
|
|
173
179
|
return response.data;
|
|
174
180
|
} catch (e) {
|
|
175
|
-
if (
|
|
176
|
-
this.eventEmitter2.emit(`${(0, _eventconstants.uploadFailedEvent)(
|
|
181
|
+
if (validated.uploadToken) {
|
|
182
|
+
this.eventEmitter2.emit(`${(0, _eventconstants.uploadFailedEvent)(validated.uploadToken)}`, validated.uploadToken, e?.message);
|
|
177
183
|
}
|
|
178
184
|
let data;
|
|
179
185
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/prusa-link/prusa-link.api.ts"],"names":["PrusaLinkApi","defaultLog","adapter","logger","authHeader","loggerFactory","eventEmitter2","httpClientFactory","settingsStore","printerLogin","name","debug","logMeta","type","PrusaLinkType","login","client","createClient","getVersion","response","get","data","server","validateConnection","getFiles","files","
|
|
1
|
+
{"version":3,"sources":["../../../src/services/prusa-link/prusa-link.api.ts"],"names":["PrusaLinkApi","defaultLog","adapter","logger","authHeader","loggerFactory","eventEmitter2","httpClientFactory","settingsStore","printerLogin","name","debug","logMeta","type","PrusaLinkType","login","client","createClient","getVersion","response","get","data","server","validateConnection","getFiles","recursive","startDir","Error","root","files","find","dir","path","children","dirs","items","map","child","size","date","refs","download","filter","i","getFile","getFileRaw","getStatus","getPrinterState","getJobState","connect","disconnect","restartServer","restartHost","restartPrinterFirmware","startPrint","post","pausePrint","jobId","getCurrentJobId","warn","put","resumePrint","cancelPrint","delete","quickStop","sendGcode","script","movePrintHead","amounts","homeAxes","axes","downloadFile","fileReference","pathUrl","responseType","getFileChunk","startBytes","endBytes","o","withHeaders","Range","uploadFile","input","validated","uploadFileInputSchema","parse","b","contentLength","toString","Overwrite","withTimeout","getTimeoutSettings","apiUploadTimeout","withOnUploadProgress","p","uploadToken","emit","uploadProgressEvent","encodeURIComponent","fileName","stream","uploadDoneEvent","e","uploadFailedEvent","message","JSON","body","ExternalServiceError","error","statusCode","success","stack","deleteFile","deleteFolder","getSettings","getReprintState","status","job","id","buildFluentOptions","builder","PrusaLinkHttpClientBuilder","createClientWithBaseUrl","printerURL","withDigestAuth","username","password","attemptCount","log","config","method","toUpperCase","url","withAuthHeader"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tasks/print-job-analysis.task.ts"],"names":["PrintJobAnalysisTask","logger","printJobRepository","loggerFactory","printJobService","fileAnalysisService","fileStorageService","typeormService","name","getDataSource","getRepository","PrintJob","run","pendingJobs","find","where","analysisState","status","take","length","log","job","analyzeJob","error","id","fileName","statusReason","Error","message","save","fileStorageId","cachedMetadata","loadMetadata","metadata","thumbnails","filePath","resolveFilePath","exists","needsAnalysis","analysisResult","analyzeFile","thumbnailMetadata","saveThumbnails","fileHash","undefined","saveMetadata","handleFileAnalyzed","fileExists","warn","getFilePath","debug"],"mappings":";;;;+BAcaA;;;eAAAA;;;gCAPY;AAOlB,MAAMA;;;;IACXC,OAAsB;
|
|
1
|
+
{"version":3,"sources":["../../src/tasks/print-job-analysis.task.ts"],"names":["PrintJobAnalysisTask","logger","printJobRepository","loggerFactory","printJobService","fileAnalysisService","fileStorageService","typeormService","name","getDataSource","getRepository","PrintJob","run","pendingJobs","find","where","analysisState","status","take","length","log","job","analyzeJob","error","id","fileName","statusReason","Error","message","save","fileStorageId","cachedMetadata","loadMetadata","metadata","thumbnails","filePath","resolveFilePath","exists","needsAnalysis","analysisResult","analyzeFile","thumbnailMetadata","saveThumbnails","fileHash","undefined","saveMetadata","handleFileAnalyzed","fileExists","warn","getFilePath","debug"],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get convertQoiToPng () {
|
|
13
|
+
return convertQoiToPng;
|
|
14
|
+
},
|
|
15
|
+
get processThumbnail () {
|
|
16
|
+
return processThumbnail;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _bgcodetypes = require("./bgcode.types");
|
|
20
|
+
const _qoidecoder = require("./qoi-decoder");
|
|
21
|
+
const _pngencoder = require("./png-encoder");
|
|
22
|
+
function convertQoiToPng(qoiBuffer) {
|
|
23
|
+
const decoded = (0, _qoidecoder.decodeQOI)(qoiBuffer);
|
|
24
|
+
return (0, _pngencoder.encodePNG)(decoded.width, decoded.height, decoded.data);
|
|
25
|
+
}
|
|
26
|
+
function processThumbnail(data, parameters) {
|
|
27
|
+
switch(parameters.format){
|
|
28
|
+
case _bgcodetypes.BgCodeThumbnailFormats.PNG:
|
|
29
|
+
return {
|
|
30
|
+
extension: _bgcodetypes.BgCodeThumbnailFormatExtension[_bgcodetypes.BgCodeThumbnailFormats.PNG],
|
|
31
|
+
data: data
|
|
32
|
+
};
|
|
33
|
+
case _bgcodetypes.BgCodeThumbnailFormats.JPG:
|
|
34
|
+
return {
|
|
35
|
+
extension: _bgcodetypes.BgCodeThumbnailFormatExtension[_bgcodetypes.BgCodeThumbnailFormats.JPG],
|
|
36
|
+
data: data
|
|
37
|
+
};
|
|
38
|
+
case _bgcodetypes.BgCodeThumbnailFormats.QOI:
|
|
39
|
+
const pngData = convertQoiToPng(data);
|
|
40
|
+
return {
|
|
41
|
+
extension: _bgcodetypes.BgCodeThumbnailFormatExtension[_bgcodetypes.BgCodeThumbnailFormats.PNG],
|
|
42
|
+
data: pngData,
|
|
43
|
+
converted: true
|
|
44
|
+
};
|
|
45
|
+
default:
|
|
46
|
+
throw new Error(`Unsupported thumbnail format: ${parameters.format}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=bgcode-thumbnail.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/bgcode/bgcode-thumbnail.parser.ts"],"names":["convertQoiToPng","processThumbnail","qoiBuffer","decoded","decodeQOI","encodePNG","width","height","data","parameters","format","BgCodeThumbnailFormats","PNG","extension","BgCodeThumbnailFormatExtension","JPG","QOI","pngData","converted","Error"],"mappings":";;;;;;;;;;;QAcgBA;eAAAA;;QAKAC;eAAAA;;;6BAfT;4BACmB;4BACA;AAQnB,SAASD,gBAAgBE,SAAiB;IAC/C,MAAMC,UAAUC,IAAAA,qBAAS,EAACF;IAC1B,OAAOG,IAAAA,qBAAS,EAACF,QAAQG,KAAK,EAAEH,QAAQI,MAAM,EAAEJ,QAAQK,IAAI;AAC9D;AAEO,SAASP,iBAAiBO,IAAY,EAAEC,UAAqC;IAClF,OAAQA,WAAWC,MAAM;QACvB,KAAKC,mCAAsB,CAACC,GAAG;YAC7B,OAAO;gBACLC,WAAWC,2CAA8B,CAACH,mCAAsB,CAACC,GAAG,CAAC;gBACrEJ,MAAMA;YACR;QAEF,KAAKG,mCAAsB,CAACI,GAAG;YAC7B,OAAO;gBACLF,WAAWC,2CAA8B,CAACH,mCAAsB,CAACI,GAAG,CAAC;gBACrEP,MAAMA;YACR;QAEF,KAAKG,mCAAsB,CAACK,GAAG;YAC7B,MAAMC,UAAUjB,gBAAgBQ;YAChC,OAAO;gBACLK,WAAWC,2CAA8B,CAACH,mCAAsB,CAACC,GAAG,CAAC;gBACrEJ,MAAMS;gBACNC,WAAW;YACb;QAEF;YACE,MAAM,IAAIC,MAAM,CAAC,8BAA8B,EAAEV,WAAWC,MAAM,EAAE;IACxE;AACF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get BGCODE_EXPECTED_HEADERS () {
|
|
13
|
+
return BGCODE_EXPECTED_HEADERS;
|
|
14
|
+
},
|
|
15
|
+
get BGCODE_HEADER_MARKER () {
|
|
16
|
+
return BGCODE_HEADER_MARKER;
|
|
17
|
+
},
|
|
18
|
+
get BGCODE_HEADER_SIZE () {
|
|
19
|
+
return BGCODE_HEADER_SIZE;
|
|
20
|
+
},
|
|
21
|
+
get BGCODE_MAX_BLOCK_HEADER_SIZE () {
|
|
22
|
+
return BGCODE_MAX_BLOCK_HEADER_SIZE;
|
|
23
|
+
},
|
|
24
|
+
get BGCODE_MAX_BLOCK_TYPE () {
|
|
25
|
+
return BGCODE_MAX_BLOCK_TYPE;
|
|
26
|
+
},
|
|
27
|
+
get BGCODE_MAX_CHECKSUM_TYPE () {
|
|
28
|
+
return BGCODE_MAX_CHECKSUM_TYPE;
|
|
29
|
+
},
|
|
30
|
+
get BGCODE_MAX_COMPRESSION () {
|
|
31
|
+
return BGCODE_MAX_COMPRESSION;
|
|
32
|
+
},
|
|
33
|
+
get BGCODE_MIN_BLOCK_HEADER_SIZE () {
|
|
34
|
+
return BGCODE_MIN_BLOCK_HEADER_SIZE;
|
|
35
|
+
},
|
|
36
|
+
get BGCODE_PARAMETER_THUMBNAIL_MAX_FORMAT () {
|
|
37
|
+
return BGCODE_PARAMETER_THUMBNAIL_MAX_FORMAT;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
const BGCODE_HEADER_SIZE = 10;
|
|
41
|
+
const BGCODE_MIN_BLOCK_HEADER_SIZE = 8;
|
|
42
|
+
const BGCODE_MAX_BLOCK_HEADER_SIZE = 12;
|
|
43
|
+
const BGCODE_HEADER_MARKER = "GCDE";
|
|
44
|
+
const BGCODE_MAX_BLOCK_TYPE = 5;
|
|
45
|
+
const BGCODE_MAX_COMPRESSION = 3;
|
|
46
|
+
const BGCODE_EXPECTED_HEADERS = [
|
|
47
|
+
0,
|
|
48
|
+
3,
|
|
49
|
+
5,
|
|
50
|
+
4,
|
|
51
|
+
2,
|
|
52
|
+
1
|
|
53
|
+
];
|
|
54
|
+
const BGCODE_MAX_CHECKSUM_TYPE = 1;
|
|
55
|
+
const BGCODE_PARAMETER_THUMBNAIL_MAX_FORMAT = 2;
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=bgcode.constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/bgcode/bgcode.constants.ts"],"names":["BGCODE_EXPECTED_HEADERS","BGCODE_HEADER_MARKER","BGCODE_HEADER_SIZE","BGCODE_MAX_BLOCK_HEADER_SIZE","BGCODE_MAX_BLOCK_TYPE","BGCODE_MAX_CHECKSUM_TYPE","BGCODE_MAX_COMPRESSION","BGCODE_MIN_BLOCK_HEADER_SIZE","BGCODE_PARAMETER_THUMBNAIL_MAX_FORMAT"],"mappings":";;;;;;;;;;;QA4BaA;eAAAA;;QAvBAC;eAAAA;;QALAC;eAAAA;;QAIAC;eAAAA;;QASAC;eAAAA;;QAiBAC;eAAAA;;QAXAC;eAAAA;;QAhBAC;eAAAA;;QA6BAC;eAAAA;;;AAhCN,MAAMN,qBAAqB;AAG3B,MAAMK,+BAA+B;AACrC,MAAMJ,+BAA+B;AACrC,MAAMF,uBAAuB;AAQ7B,MAAMG,wBAAwB;AAM9B,MAAME,yBAAyB;AAS/B,MAAMN,0BAA0B;IAAC;IAAG;IAAG;IAAG;IAAG;IAAG;CAAE;AAElD,MAAMK,2BAA2B;AAEjC,MAAMG,wCAAwC"}
|