@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.
Files changed (82) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/README.md +1 -1
  3. package/RELEASE_NOTES.MD +35 -0
  4. package/dist/container.js +0 -6
  5. package/dist/container.js.map +1 -1
  6. package/dist/container.tokens.js +0 -2
  7. package/dist/container.tokens.js.map +1 -1
  8. package/dist/controllers/print-job.controller.js +12 -151
  9. package/dist/controllers/print-job.controller.js.map +1 -1
  10. package/dist/controllers/print-queue.controller.js +82 -17
  11. package/dist/controllers/print-queue.controller.js.map +1 -1
  12. package/dist/controllers/printer-files.controller.js +16 -77
  13. package/dist/controllers/printer-files.controller.js.map +1 -1
  14. package/dist/controllers/printer.controller.js +3 -3
  15. package/dist/controllers/printer.controller.js.map +1 -1
  16. package/dist/controllers/validation/printer-files-controller.validation.js +7 -0
  17. package/dist/controllers/validation/printer-files-controller.validation.js.map +1 -1
  18. package/dist/entities/print-job.entity.js.map +1 -1
  19. package/dist/server.constants.js +1 -2
  20. package/dist/server.constants.js.map +1 -1
  21. package/dist/services/bambu/bambu-ftp.adapter.js +3 -13
  22. package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
  23. package/dist/services/bambu.api.js +31 -30
  24. package/dist/services/bambu.api.js.map +1 -1
  25. package/dist/services/file-storage.service.js +11 -2
  26. package/dist/services/file-storage.service.js.map +1 -1
  27. package/dist/services/moonraker/moonraker.client.js +5 -17
  28. package/dist/services/moonraker/moonraker.client.js.map +1 -1
  29. package/dist/services/moonraker.api.js +45 -11
  30. package/dist/services/moonraker.api.js.map +1 -1
  31. package/dist/services/octoprint/octoprint-api.routes.js +1 -1
  32. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
  33. package/dist/services/octoprint/octoprint.client.js +35 -24
  34. package/dist/services/octoprint/octoprint.client.js.map +1 -1
  35. package/dist/services/octoprint/utils/file.utils.js +42 -5
  36. package/dist/services/octoprint/utils/file.utils.js.map +1 -1
  37. package/dist/services/octoprint.api.js +15 -10
  38. package/dist/services/octoprint.api.js.map +1 -1
  39. package/dist/services/orm/print-job.service.js +55 -47
  40. package/dist/services/orm/print-job.service.js.map +1 -1
  41. package/dist/services/print-queue.service.js +90 -30
  42. package/dist/services/print-queue.service.js.map +1 -1
  43. package/dist/services/printer-api.interface.js +13 -0
  44. package/dist/services/printer-api.interface.js.map +1 -1
  45. package/dist/services/prusa-link/prusa-link.api.js +33 -27
  46. package/dist/services/prusa-link/prusa-link.api.js.map +1 -1
  47. package/dist/tasks/print-job-analysis.task.js.map +1 -1
  48. package/dist/utils/bgcode/bgcode-thumbnail.parser.js +50 -0
  49. package/dist/utils/bgcode/bgcode-thumbnail.parser.js.map +1 -0
  50. package/dist/utils/bgcode/bgcode.constants.js +57 -0
  51. package/dist/utils/bgcode/bgcode.constants.js.map +1 -0
  52. package/dist/utils/bgcode/bgcode.types.js +132 -0
  53. package/dist/utils/bgcode/bgcode.types.js.map +1 -0
  54. package/dist/utils/bgcode/bgcode.utils.js +288 -0
  55. package/dist/utils/bgcode/bgcode.utils.js.map +1 -0
  56. package/dist/utils/bgcode/heatshrink-decoder.js +172 -0
  57. package/dist/utils/bgcode/heatshrink-decoder.js.map +1 -0
  58. package/dist/utils/bgcode/png-encoder.js +76 -0
  59. package/dist/utils/bgcode/png-encoder.js.map +1 -0
  60. package/dist/utils/bgcode/qoi-decoder.js +141 -0
  61. package/dist/utils/bgcode/qoi-decoder.js.map +1 -0
  62. package/dist/utils/image-dimensions.js +62 -0
  63. package/dist/utils/image-dimensions.js.map +1 -0
  64. package/dist/utils/job-stats.util.js +79 -0
  65. package/dist/utils/job-stats.util.js.map +1 -0
  66. package/dist/utils/parsers/3mf.parser.js +39 -9
  67. package/dist/utils/parsers/3mf.parser.js.map +1 -1
  68. package/dist/utils/parsers/bgcode.parser.js +125 -144
  69. package/dist/utils/parsers/bgcode.parser.js.map +1 -1
  70. package/dist/utils/parsers/gcode.parser.js +13 -2
  71. package/dist/utils/parsers/gcode.parser.js.map +1 -1
  72. package/dist/utils/parsers/parser.types.js +6 -0
  73. package/dist/utils/parsers/parser.types.js.map +1 -0
  74. package/dist/utils/thumbnail.util.js +24 -0
  75. package/dist/utils/thumbnail.util.js.map +1 -0
  76. package/package.json +5 -5
  77. package/dist/state/file.cache.js +0 -68
  78. package/dist/state/file.cache.js.map +0 -1
  79. package/dist/state/printer-files.store.js +0 -92
  80. package/dist/state/printer-files.store.js.map +0 -1
  81. package/dist/tasks/printer-files-load.task.js +0 -29
  82. package/dist/tasks/printer-files-load.task.js.map +0 -1
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "encodePNG", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return encodePNG;
9
+ }
10
+ });
11
+ const _nodezlib = require("node:zlib");
12
+ const PNG_SIGNATURE = Buffer.from([
13
+ 0x89,
14
+ 0x50,
15
+ 0x4E,
16
+ 0x47,
17
+ 0x0D,
18
+ 0x0A,
19
+ 0x1A,
20
+ 0x0A
21
+ ]);
22
+ function crc32(buffer) {
23
+ let crc = 0xffffffff;
24
+ for(let i = 0; i < buffer.length; i++){
25
+ crc ^= buffer[i];
26
+ for(let j = 0; j < 8; j++){
27
+ crc = crc >>> 1 ^ 0xedb88320 & -(crc & 1);
28
+ }
29
+ }
30
+ return (crc ^ 0xffffffff) >>> 0;
31
+ }
32
+ function writeChunk(type, data) {
33
+ const typeBuffer = Buffer.from(type, 'ascii');
34
+ const length = Buffer.alloc(4);
35
+ length.writeUInt32BE(data.length, 0);
36
+ const crcBuffer = Buffer.concat([
37
+ typeBuffer,
38
+ data
39
+ ]);
40
+ const crc = Buffer.alloc(4);
41
+ crc.writeUInt32BE(crc32(crcBuffer), 0);
42
+ return Buffer.concat([
43
+ length,
44
+ typeBuffer,
45
+ data,
46
+ crc
47
+ ]);
48
+ }
49
+ function encodePNG(width, height, rgba) {
50
+ const ihdr = Buffer.alloc(13);
51
+ ihdr.writeUInt32BE(width, 0);
52
+ ihdr.writeUInt32BE(height, 4);
53
+ ihdr.writeUInt8(8, 8);
54
+ ihdr.writeUInt8(6, 9);
55
+ ihdr.writeUInt8(0, 10);
56
+ ihdr.writeUInt8(0, 11);
57
+ ihdr.writeUInt8(0, 12);
58
+ const bytesPerPixel = 4;
59
+ const scanlineLength = width * bytesPerPixel;
60
+ const filteredData = Buffer.alloc(height * (scanlineLength + 1));
61
+ for(let y = 0; y < height; y++){
62
+ const scanlineOffset = y * (scanlineLength + 1);
63
+ filteredData[scanlineOffset] = 0;
64
+ rgba.copy(filteredData, scanlineOffset + 1, y * scanlineLength, (y + 1) * scanlineLength);
65
+ }
66
+ const compressed = (0, _nodezlib.deflateSync)(filteredData);
67
+ const chunks = [
68
+ PNG_SIGNATURE,
69
+ writeChunk('IHDR', ihdr),
70
+ writeChunk('IDAT', compressed),
71
+ writeChunk('IEND', Buffer.alloc(0))
72
+ ];
73
+ return Buffer.concat(chunks);
74
+ }
75
+
76
+ //# sourceMappingURL=png-encoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/bgcode/png-encoder.ts"],"names":["encodePNG","PNG_SIGNATURE","Buffer","from","crc32","buffer","crc","i","length","j","writeChunk","type","data","typeBuffer","alloc","writeUInt32BE","crcBuffer","concat","width","height","rgba","ihdr","writeUInt8","bytesPerPixel","scanlineLength","filteredData","y","scanlineOffset","copy","compressed","deflateSync","chunks"],"mappings":";;;;+BAiCgBA;;;eAAAA;;;0BA5BY;AAE5B,MAAMC,gBAAgBC,OAAOC,IAAI,CAAC;IAAC;IAAM;IAAM;IAAM;IAAM;IAAM;IAAM;IAAM;CAAK;AAElF,SAASC,MAAMC,MAAc;IAE3B,IAAIC,MAAM;IACV,IAAK,IAAIC,IAAI,GAAGA,IAAIF,OAAOG,MAAM,EAAED,IAAK;QACtCD,OAAOD,MAAM,CAACE,EAAE;QAChB,IAAK,IAAIE,IAAI,GAAGA,IAAI,GAAGA,IAAK;YAC1BH,MAAM,AAACA,QAAQ,IAAM,aAAa,CAAEA,CAAAA,MAAM,CAAA;QAC5C;IACF;IACA,OAAO,AAACA,CAAAA,MAAM,UAAS,MAAO;AAChC;AAEA,SAASI,WAAWC,IAAY,EAAEC,IAAY;IAC5C,MAAMC,aAAaX,OAAOC,IAAI,CAACQ,MAAM;IACrC,MAAMH,SAASN,OAAOY,KAAK,CAAC;IAC5BN,OAAOO,aAAa,CAACH,KAAKJ,MAAM,EAAE;IAElC,MAAMQ,YAAYd,OAAOe,MAAM,CAAC;QAACJ;QAAYD;KAAK;IAClD,MAAMN,MAAMJ,OAAOY,KAAK,CAAC;IACzBR,IAAIS,aAAa,CAACX,MAAMY,YAAY;IAEpC,OAAOd,OAAOe,MAAM,CAAC;QAACT;QAAQK;QAAYD;QAAMN;KAAI;AACtD;AAEO,SAASN,UAAUkB,KAAa,EAAEC,MAAc,EAAEC,IAAY;IACnE,MAAMC,OAAOnB,OAAOY,KAAK,CAAC;IAC1BO,KAAKN,aAAa,CAACG,OAAO;IAC1BG,KAAKN,aAAa,CAACI,QAAQ;IAC3BE,KAAKC,UAAU,CAAC,GAAG;IACnBD,KAAKC,UAAU,CAAC,GAAG;IACnBD,KAAKC,UAAU,CAAC,GAAG;IACnBD,KAAKC,UAAU,CAAC,GAAG;IACnBD,KAAKC,UAAU,CAAC,GAAG;IAGnB,MAAMC,gBAAgB;IACtB,MAAMC,iBAAiBN,QAAQK;IAC/B,MAAME,eAAevB,OAAOY,KAAK,CAACK,SAAUK,CAAAA,iBAAiB,CAAA;IAE7D,IAAK,IAAIE,IAAI,GAAGA,IAAIP,QAAQO,IAAK;QAC/B,MAAMC,iBAAiBD,IAAKF,CAAAA,iBAAiB,CAAA;QAC7CC,YAAY,CAACE,eAAe,GAAG;QAC/BP,KAAKQ,IAAI,CAACH,cAAcE,iBAAiB,GAAGD,IAAIF,gBAAgB,AAACE,CAAAA,IAAI,CAAA,IAAKF;IAC5E;IAGA,MAAMK,aAAaC,IAAAA,qBAAW,EAACL;IAG/B,MAAMM,SAAS;QACb9B;QACAS,WAAW,QAAQW;QACnBX,WAAW,QAAQmB;QACnBnB,WAAW,QAAQR,OAAOY,KAAK,CAAC;KACjC;IAED,OAAOZ,OAAOe,MAAM,CAACc;AACvB"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "decodeQOI", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return decodeQOI;
9
+ }
10
+ });
11
+ const QOI_OP_INDEX = 0x00;
12
+ const QOI_OP_DIFF = 0x40;
13
+ const QOI_OP_LUMA = 0x80;
14
+ const QOI_OP_RUN = 0xc0;
15
+ const QOI_OP_RGB = 0xfe;
16
+ const QOI_OP_RGBA = 0xff;
17
+ const QOI_MAGIC = 0x716f6966;
18
+ function hashColor(r, g, b, a) {
19
+ return (r * 3 + g * 5 + b * 7 + a * 11) % 64;
20
+ }
21
+ function decodeQOI(buffer) {
22
+ let pos = 0;
23
+ if (buffer.length < 14) {
24
+ throw new Error('Invalid QOI file: too short');
25
+ }
26
+ const magic = buffer.readUInt32BE(pos);
27
+ pos += 4;
28
+ if (magic !== QOI_MAGIC) {
29
+ throw new Error(`Invalid QOI magic: expected ${QOI_MAGIC.toString(16)}, got ${magic.toString(16)}`);
30
+ }
31
+ const width = buffer.readUInt32BE(pos);
32
+ pos += 4;
33
+ const height = buffer.readUInt32BE(pos);
34
+ pos += 4;
35
+ const channels = buffer.readUInt8(pos);
36
+ pos += 1;
37
+ const colorspace = buffer.readUInt8(pos);
38
+ pos += 1;
39
+ if (channels !== 3 && channels !== 4) {
40
+ throw new Error(`Invalid QOI channels: ${channels}`);
41
+ }
42
+ const pixelCount = width * height;
43
+ const outputSize = pixelCount * 4;
44
+ const output = Buffer.alloc(outputSize);
45
+ const colorArray = new Array(64);
46
+ for(let i = 0; i < 64; i++){
47
+ colorArray[i] = [
48
+ 0,
49
+ 0,
50
+ 0,
51
+ 0
52
+ ];
53
+ }
54
+ let r = 0, g = 0, b = 0, a = 255;
55
+ let outPos = 0;
56
+ while(outPos < outputSize){
57
+ if (pos + 8 <= buffer.length) {
58
+ let isEnd = true;
59
+ for(let i = 0; i < 7; i++){
60
+ if (buffer[pos + i] !== 0x00) {
61
+ isEnd = false;
62
+ break;
63
+ }
64
+ }
65
+ if (isEnd && buffer[pos + 7] === 0x01) {
66
+ break;
67
+ }
68
+ }
69
+ if (pos >= buffer.length) {
70
+ throw new Error('Unexpected end of QOI data');
71
+ }
72
+ const byte1 = buffer[pos++];
73
+ if (byte1 === QOI_OP_RGB) {
74
+ r = buffer[pos++];
75
+ g = buffer[pos++];
76
+ b = buffer[pos++];
77
+ } else if (byte1 === QOI_OP_RGBA) {
78
+ r = buffer[pos++];
79
+ g = buffer[pos++];
80
+ b = buffer[pos++];
81
+ a = buffer[pos++];
82
+ } else {
83
+ const tag = byte1 & 0xc0;
84
+ if (tag === QOI_OP_INDEX) {
85
+ const index = byte1 & 0x3f;
86
+ [r, g, b, a] = colorArray[index];
87
+ } else if (tag === QOI_OP_DIFF) {
88
+ const dr = (byte1 >> 4 & 0x03) - 2;
89
+ const dg = (byte1 >> 2 & 0x03) - 2;
90
+ const db = (byte1 & 0x03) - 2;
91
+ r = r + dr & 0xff;
92
+ g = g + dg & 0xff;
93
+ b = b + db & 0xff;
94
+ } else if (tag === QOI_OP_LUMA) {
95
+ const byte2 = buffer[pos++];
96
+ const dg = (byte1 & 0x3f) - 32;
97
+ const dr_dg = (byte2 >> 4 & 0x0f) - 8;
98
+ const db_dg = (byte2 & 0x0f) - 8;
99
+ g = g + dg & 0xff;
100
+ r = r + dg + dr_dg & 0xff;
101
+ b = b + dg + db_dg & 0xff;
102
+ } else if (tag === QOI_OP_RUN) {
103
+ const run = (byte1 & 0x3f) + 1;
104
+ for(let i = 0; i < run; i++){
105
+ output[outPos++] = r;
106
+ output[outPos++] = g;
107
+ output[outPos++] = b;
108
+ output[outPos++] = a;
109
+ }
110
+ const hash = hashColor(r, g, b, a);
111
+ colorArray[hash] = [
112
+ r,
113
+ g,
114
+ b,
115
+ a
116
+ ];
117
+ continue;
118
+ }
119
+ }
120
+ output[outPos++] = r;
121
+ output[outPos++] = g;
122
+ output[outPos++] = b;
123
+ output[outPos++] = a;
124
+ const hash = hashColor(r, g, b, a);
125
+ colorArray[hash] = [
126
+ r,
127
+ g,
128
+ b,
129
+ a
130
+ ];
131
+ }
132
+ return {
133
+ width,
134
+ height,
135
+ channels,
136
+ colorspace,
137
+ data: output
138
+ };
139
+ }
140
+
141
+ //# sourceMappingURL=qoi-decoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/bgcode/qoi-decoder.ts"],"names":["decodeQOI","QOI_OP_INDEX","QOI_OP_DIFF","QOI_OP_LUMA","QOI_OP_RUN","QOI_OP_RGB","QOI_OP_RGBA","QOI_MAGIC","hashColor","r","g","b","a","buffer","pos","length","Error","magic","readUInt32BE","toString","width","height","channels","readUInt8","colorspace","pixelCount","outputSize","output","Buffer","alloc","colorArray","Array","i","outPos","isEnd","byte1","tag","index","dr","dg","db","byte2","dr_dg","db_dg","run","hash","data"],"mappings":";;;;+BAqBgBA;;;eAAAA;;;AAbhB,MAAMC,eAAe;AACrB,MAAMC,cAAc;AACpB,MAAMC,cAAc;AACpB,MAAMC,aAAa;AACnB,MAAMC,aAAa;AACnB,MAAMC,cAAc;AAEpB,MAAMC,YAAY;AAElB,SAASC,UAAUC,CAAS,EAAEC,CAAS,EAAEC,CAAS,EAAEC,CAAS;IAC3D,OAAO,AAACH,CAAAA,IAAI,IAAIC,IAAI,IAAIC,IAAI,IAAIC,IAAI,EAAC,IAAK;AAC5C;AAEO,SAASZ,UAAUa,MAAc;IACtC,IAAIC,MAAM;IAGV,IAAID,OAAOE,MAAM,GAAG,IAAI;QACtB,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAMC,QAAQJ,OAAOK,YAAY,CAACJ;IAClCA,OAAO;IACP,IAAIG,UAAUV,WAAW;QACvB,MAAM,IAAIS,MAAM,CAAC,4BAA4B,EAAET,UAAUY,QAAQ,CAAC,IAAI,MAAM,EAAEF,MAAME,QAAQ,CAAC,KAAK;IACpG;IAEA,MAAMC,QAAQP,OAAOK,YAAY,CAACJ;IAClCA,OAAO;IACP,MAAMO,SAASR,OAAOK,YAAY,CAACJ;IACnCA,OAAO;IACP,MAAMQ,WAAWT,OAAOU,SAAS,CAACT;IAClCA,OAAO;IACP,MAAMU,aAAaX,OAAOU,SAAS,CAACT;IACpCA,OAAO;IAEP,IAAIQ,aAAa,KAAKA,aAAa,GAAG;QACpC,MAAM,IAAIN,MAAM,CAAC,sBAAsB,EAAEM,UAAU;IACrD;IAGA,MAAMG,aAAaL,QAAQC;IAC3B,MAAMK,aAAaD,aAAa;IAChC,MAAME,SAASC,OAAOC,KAAK,CAACH;IAG5B,MAAMI,aAAsD,IAAIC,MAAM;IACtE,IAAK,IAAIC,IAAI,GAAGA,IAAI,IAAIA,IAAK;QAC3BF,UAAU,CAACE,EAAE,GAAG;YAAC;YAAG;YAAG;YAAG;SAAE;IAC9B;IAEA,IAAIvB,IAAI,GAAGC,IAAI,GAAGC,IAAI,GAAGC,IAAI;IAC7B,IAAIqB,SAAS;IAGb,MAAOA,SAASP,WAAY;QAE1B,IAAIZ,MAAM,KAAKD,OAAOE,MAAM,EAAE;YAC5B,IAAImB,QAAQ;YACZ,IAAK,IAAIF,IAAI,GAAGA,IAAI,GAAGA,IAAK;gBAC1B,IAAInB,MAAM,CAACC,MAAMkB,EAAE,KAAK,MAAM;oBAC5BE,QAAQ;oBACR;gBACF;YACF;YACA,IAAIA,SAASrB,MAAM,CAACC,MAAM,EAAE,KAAK,MAAM;gBACrC;YACF;QACF;QAEA,IAAIA,OAAOD,OAAOE,MAAM,EAAE;YACxB,MAAM,IAAIC,MAAM;QAClB;QAEA,MAAMmB,QAAQtB,MAAM,CAACC,MAAM;QAE3B,IAAIqB,UAAU9B,YAAY;YAExBI,IAAII,MAAM,CAACC,MAAM;YACjBJ,IAAIG,MAAM,CAACC,MAAM;YACjBH,IAAIE,MAAM,CAACC,MAAM;QACnB,OAAO,IAAIqB,UAAU7B,aAAa;YAEhCG,IAAII,MAAM,CAACC,MAAM;YACjBJ,IAAIG,MAAM,CAACC,MAAM;YACjBH,IAAIE,MAAM,CAACC,MAAM;YACjBF,IAAIC,MAAM,CAACC,MAAM;QACnB,OAAO;YACL,MAAMsB,MAAMD,QAAQ;YAEpB,IAAIC,QAAQnC,cAAc;gBAExB,MAAMoC,QAAQF,QAAQ;gBACtB,CAAC1B,GAAGC,GAAGC,GAAGC,EAAE,GAAGkB,UAAU,CAACO,MAAM;YAClC,OAAO,IAAID,QAAQlC,aAAa;gBAE9B,MAAMoC,KAAK,AAAC,CAAA,AAACH,SAAS,IAAK,IAAG,IAAK;gBACnC,MAAMI,KAAK,AAAC,CAAA,AAACJ,SAAS,IAAK,IAAG,IAAK;gBACnC,MAAMK,KAAK,AAACL,CAAAA,QAAQ,IAAG,IAAK;gBAC5B1B,IAAI,AAACA,IAAI6B,KAAM;gBACf5B,IAAI,AAACA,IAAI6B,KAAM;gBACf5B,IAAI,AAACA,IAAI6B,KAAM;YACjB,OAAO,IAAIJ,QAAQjC,aAAa;gBAE9B,MAAMsC,QAAQ5B,MAAM,CAACC,MAAM;gBAC3B,MAAMyB,KAAK,AAACJ,CAAAA,QAAQ,IAAG,IAAK;gBAC5B,MAAMO,QAAQ,AAAC,CAAA,AAACD,SAAS,IAAK,IAAG,IAAK;gBACtC,MAAME,QAAQ,AAACF,CAAAA,QAAQ,IAAG,IAAK;gBAC/B/B,IAAI,AAACA,IAAI6B,KAAM;gBACf9B,IAAI,AAACA,IAAI8B,KAAKG,QAAS;gBACvB/B,IAAI,AAACA,IAAI4B,KAAKI,QAAS;YACzB,OAAO,IAAIP,QAAQhC,YAAY;gBAE7B,MAAMwC,MAAM,AAACT,CAAAA,QAAQ,IAAG,IAAK;gBAC7B,IAAK,IAAIH,IAAI,GAAGA,IAAIY,KAAKZ,IAAK;oBAC5BL,MAAM,CAACM,SAAS,GAAGxB;oBACnBkB,MAAM,CAACM,SAAS,GAAGvB;oBACnBiB,MAAM,CAACM,SAAS,GAAGtB;oBACnBgB,MAAM,CAACM,SAAS,GAAGrB;gBACrB;gBAEA,MAAMiC,OAAOrC,UAAUC,GAAGC,GAAGC,GAAGC;gBAChCkB,UAAU,CAACe,KAAK,GAAG;oBAACpC;oBAAGC;oBAAGC;oBAAGC;iBAAE;gBAC/B;YACF;QACF;QAGAe,MAAM,CAACM,SAAS,GAAGxB;QACnBkB,MAAM,CAACM,SAAS,GAAGvB;QACnBiB,MAAM,CAACM,SAAS,GAAGtB;QACnBgB,MAAM,CAACM,SAAS,GAAGrB;QAGnB,MAAMiC,OAAOrC,UAAUC,GAAGC,GAAGC,GAAGC;QAChCkB,UAAU,CAACe,KAAK,GAAG;YAACpC;YAAGC;YAAGC;YAAGC;SAAE;IACjC;IAEA,OAAO;QACLQ;QACAC;QACAC;QACAE;QACAsB,MAAMnB;IACR;AACF"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "getImageDimensions", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return getImageDimensions;
9
+ }
10
+ });
11
+ function getImageDimensions(imageData, format) {
12
+ if (format === "PNG") {
13
+ return getPngDimensions(imageData);
14
+ } else if (format === "JPG" || format === "JPEG") {
15
+ return getJpgDimensions(imageData);
16
+ }
17
+ return {
18
+ width: 0,
19
+ height: 0
20
+ };
21
+ }
22
+ function getPngDimensions(data) {
23
+ if (data.length < 24) {
24
+ return {
25
+ width: 0,
26
+ height: 0
27
+ };
28
+ }
29
+ const width = data.readUInt32BE(16);
30
+ const height = data.readUInt32BE(20);
31
+ return {
32
+ width,
33
+ height
34
+ };
35
+ }
36
+ function getJpgDimensions(data) {
37
+ let offset = 2;
38
+ while(offset < data.length){
39
+ if (data[offset] !== 0xFF) break;
40
+ const marker = data[offset + 1];
41
+ offset += 2;
42
+ if (marker === 0xC0 || marker === 0xC2) {
43
+ if (offset + 5 < data.length) {
44
+ const height = data.readUInt16BE(offset + 1);
45
+ const width = data.readUInt16BE(offset + 3);
46
+ return {
47
+ width,
48
+ height
49
+ };
50
+ }
51
+ break;
52
+ }
53
+ const segmentLength = data.readUInt16BE(offset);
54
+ offset += segmentLength;
55
+ }
56
+ return {
57
+ width: 0,
58
+ height: 0
59
+ };
60
+ }
61
+
62
+ //# sourceMappingURL=image-dimensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/image-dimensions.ts"],"names":["getImageDimensions","imageData","format","getPngDimensions","getJpgDimensions","width","height","data","length","readUInt32BE","offset","marker","readUInt16BE","segmentLength"],"mappings":";;;;+BAAgBA;;;eAAAA;;;AAAT,SAASA,mBAAmBC,SAAiB,EAAEC,MAAc;IAClE,IAAIA,WAAW,OAAO;QACpB,OAAOC,iBAAiBF;IAC1B,OAAO,IAAIC,WAAW,SAASA,WAAW,QAAQ;QAChD,OAAOE,iBAAiBH;IAC1B;IACA,OAAO;QAAEI,OAAO;QAAGC,QAAQ;IAAE;AAC/B;AAEA,SAASH,iBAAiBI,IAAY;IACpC,IAAIA,KAAKC,MAAM,GAAG,IAAI;QACpB,OAAO;YAAEH,OAAO;YAAGC,QAAQ;QAAE;IAC/B;IAEA,MAAMD,QAAQE,KAAKE,YAAY,CAAC;IAChC,MAAMH,SAASC,KAAKE,YAAY,CAAC;IAEjC,OAAO;QAAEJ;QAAOC;IAAO;AACzB;AAEA,SAASF,iBAAiBG,IAAY;IACpC,IAAIG,SAAS;IAEb,MAAOA,SAASH,KAAKC,MAAM,CAAE;QAC3B,IAAID,IAAI,CAACG,OAAO,KAAK,MAAM;QAE3B,MAAMC,SAASJ,IAAI,CAACG,SAAS,EAAE;QAC/BA,UAAU;QAEV,IAAIC,WAAW,QAAQA,WAAW,MAAM;YACtC,IAAID,SAAS,IAAIH,KAAKC,MAAM,EAAE;gBAC5B,MAAMF,SAASC,KAAKK,YAAY,CAACF,SAAS;gBAC1C,MAAML,QAAQE,KAAKK,YAAY,CAACF,SAAS;gBACzC,OAAO;oBAAEL;oBAAOC;gBAAO;YACzB;YACA;QACF;QAEA,MAAMO,gBAAgBN,KAAKK,YAAY,CAACF;QACxCA,UAAUG;IACZ;IAEA,OAAO;QAAER,OAAO;QAAGC,QAAQ;IAAE;AAC/B"}
@@ -0,0 +1,79 @@
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 calculateJobDuration () {
13
+ return calculateJobDuration;
14
+ },
15
+ get initializeOrUpdateStatistics () {
16
+ return initializeOrUpdateStatistics;
17
+ },
18
+ get updateStatisticsForCancellation () {
19
+ return updateStatisticsForCancellation;
20
+ },
21
+ get updateStatisticsForCompletion () {
22
+ return updateStatisticsForCompletion;
23
+ },
24
+ get updateStatisticsForFailure () {
25
+ return updateStatisticsForFailure;
26
+ }
27
+ });
28
+ function calculateJobDuration(startedAt, endedAt = new Date()) {
29
+ if (!startedAt) {
30
+ return null;
31
+ }
32
+ return (endedAt.getTime() - startedAt.getTime()) / 1000;
33
+ }
34
+ function initializeOrUpdateStatistics(job, endedAt = new Date(), options = {}) {
35
+ const actualPrintTimeSeconds = calculateJobDuration(job.startedAt, endedAt);
36
+ if (!job.statistics) {
37
+ return {
38
+ startedAt: job.startedAt,
39
+ endedAt,
40
+ actualPrintTimeSeconds,
41
+ progress: options.progress ?? job.progress ?? null,
42
+ failureReason: options.failureReason,
43
+ failureTime: options.failureTime
44
+ };
45
+ } else {
46
+ job.statistics.endedAt = endedAt;
47
+ job.statistics.actualPrintTimeSeconds = actualPrintTimeSeconds;
48
+ if (options.progress !== undefined) {
49
+ job.statistics.progress = options.progress;
50
+ }
51
+ if (options.failureReason !== undefined) {
52
+ job.statistics.failureReason = options.failureReason;
53
+ job.statistics.failureTime = options.failureTime ?? endedAt;
54
+ }
55
+ return job.statistics;
56
+ }
57
+ }
58
+ function updateStatisticsForCompletion(job, endedAt = new Date()) {
59
+ job.statistics = initializeOrUpdateStatistics(job, endedAt, {
60
+ progress: 100
61
+ });
62
+ job.endedAt = endedAt;
63
+ job.progress = 100;
64
+ }
65
+ function updateStatisticsForFailure(job, reason, endedAt = new Date()) {
66
+ job.statistics = initializeOrUpdateStatistics(job, endedAt, {
67
+ failureReason: reason,
68
+ failureTime: endedAt
69
+ });
70
+ job.endedAt = endedAt;
71
+ job.statusReason = reason;
72
+ }
73
+ function updateStatisticsForCancellation(job, reason = "Print cancelled by user", endedAt = new Date()) {
74
+ job.statistics = initializeOrUpdateStatistics(job, endedAt);
75
+ job.endedAt = endedAt;
76
+ job.statusReason = reason;
77
+ }
78
+
79
+ //# sourceMappingURL=job-stats.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/job-stats.util.ts"],"names":["calculateJobDuration","initializeOrUpdateStatistics","updateStatisticsForCancellation","updateStatisticsForCompletion","updateStatisticsForFailure","startedAt","endedAt","Date","getTime","job","options","actualPrintTimeSeconds","statistics","progress","failureReason","failureTime","undefined","reason","statusReason"],"mappings":";;;;;;;;;;;QAEgBA;eAAAA;;QAaAC;eAAAA;;QAoDAC;eAAAA;;QAnBAC;eAAAA;;QAMAC;eAAAA;;;AApDT,SAASJ,qBAAqBK,SAAsB,EAAEC,UAAgB,IAAIC,MAAM;IACrF,IAAI,CAACF,WAAW;QACd,OAAO;IACT;IACA,OAAO,AAACC,CAAAA,QAAQE,OAAO,KAAKH,UAAUG,OAAO,EAAC,IAAK;AACrD;AAQO,SAASP,6BACdQ,GAAa,EACbH,UAAgB,IAAIC,MAAM,EAC1BG,UAAmC,CAAC,CAAC;IAErC,MAAMC,yBAAyBX,qBAAqBS,IAAIJ,SAAS,EAAEC;IAEnE,IAAI,CAACG,IAAIG,UAAU,EAAE;QACnB,OAAO;YACLP,WAAWI,IAAIJ,SAAS;YACxBC;YACAK;YACAE,UAAUH,QAAQG,QAAQ,IAAIJ,IAAII,QAAQ,IAAI;YAC9CC,eAAeJ,QAAQI,aAAa;YACpCC,aAAaL,QAAQK,WAAW;QAClC;IACF,OAAO;QACLN,IAAIG,UAAU,CAACN,OAAO,GAAGA;QACzBG,IAAIG,UAAU,CAACD,sBAAsB,GAAGA;QAExC,IAAID,QAAQG,QAAQ,KAAKG,WAAW;YAClCP,IAAIG,UAAU,CAACC,QAAQ,GAAGH,QAAQG,QAAQ;QAC5C;QAEA,IAAIH,QAAQI,aAAa,KAAKE,WAAW;YACvCP,IAAIG,UAAU,CAACE,aAAa,GAAGJ,QAAQI,aAAa;YACpDL,IAAIG,UAAU,CAACG,WAAW,GAAGL,QAAQK,WAAW,IAAIT;QACtD;QAEA,OAAOG,IAAIG,UAAU;IACvB;AACF;AAEO,SAAST,8BAA8BM,GAAa,EAAEH,UAAgB,IAAIC,MAAM;IACrFE,IAAIG,UAAU,GAAGX,6BAA6BQ,KAAKH,SAAS;QAAEO,UAAU;IAAI;IAC5EJ,IAAIH,OAAO,GAAGA;IACdG,IAAII,QAAQ,GAAG;AACjB;AAEO,SAAST,2BACdK,GAAa,EACbQ,MAAc,EACdX,UAAgB,IAAIC,MAAM;IAE1BE,IAAIG,UAAU,GAAGX,6BAA6BQ,KAAKH,SAAS;QAC1DQ,eAAeG;QACfF,aAAaT;IACf;IACAG,IAAIH,OAAO,GAAGA;IACdG,IAAIS,YAAY,GAAGD;AACrB;AAEO,SAASf,gCACdO,GAAa,EACbQ,SAAiB,yBAAyB,EAC1CX,UAAgB,IAAIC,MAAM;IAE1BE,IAAIG,UAAU,GAAGX,6BAA6BQ,KAAKH;IACnDG,IAAIH,OAAO,GAAGA;IACdG,IAAIS,YAAY,GAAGD;AACrB"}
@@ -11,6 +11,7 @@ Object.defineProperty(exports, "ThreeMFParser", {
11
11
  const _promises = /*#__PURE__*/ _interop_require_wildcard(require("node:fs/promises"));
12
12
  const _nodepath = /*#__PURE__*/ _interop_require_wildcard(require("node:path"));
13
13
  const _admzip = /*#__PURE__*/ _interop_require_default(require("adm-zip"));
14
+ const _imagedimensions = require("../image-dimensions");
14
15
  function _interop_require_default(obj) {
15
16
  return obj && obj.__esModule ? obj : {
16
17
  default: obj
@@ -158,6 +159,12 @@ class ThreeMFParser {
158
159
  slicerVersion: topLevelSlicerVersion,
159
160
  maxLayerZ: topLevelMaxZ,
160
161
  totalLayers: topLevelLayers,
162
+ thumbnails: thumbnails.length > 0 ? thumbnails.map((t)=>({
163
+ width: t.width,
164
+ height: t.height,
165
+ format: t.format,
166
+ dataLength: t.data?.length || 0
167
+ })) : undefined,
161
168
  plates: plates.length > 0 ? plates : undefined
162
169
  };
163
170
  return {
@@ -223,6 +230,24 @@ class ThreeMFParser {
223
230
  const gcodeContent = entry.getData().toString("utf8", 0, Math.min(50000, entry.getData().length));
224
231
  const metadata = this.parseGCodeHeader(gcodeContent);
225
232
  const plateThumbs = zipEntries.filter((e)=>e.entryName.includes(`plate_${plateMatch[1]}`) && (e.entryName.endsWith(".png") || e.entryName.endsWith(".jpg")));
233
+ const plateThumbnails = plateThumbs.map((t)=>{
234
+ const format = t.entryName.endsWith(".png") ? "PNG" : "JPG";
235
+ const imageData = t.getData();
236
+ const sizeMatch = t.entryName.match(/(\d+)x(\d+)/);
237
+ let width = sizeMatch ? Number.parseInt(sizeMatch[1]) : 0;
238
+ let height = sizeMatch ? Number.parseInt(sizeMatch[2]) : 0;
239
+ if (width === 0 || height === 0) {
240
+ const dimensions = (0, _imagedimensions.getImageDimensions)(imageData, format);
241
+ width = dimensions.width;
242
+ height = dimensions.height;
243
+ }
244
+ return {
245
+ width,
246
+ height,
247
+ format,
248
+ data: imageData.toString("base64")
249
+ };
250
+ });
226
251
  const printTime = this.parseTime(metadata.model_printing_time || metadata.total_estimated_time || metadata.print_time);
227
252
  const filamentWeight = this.parseFloat(metadata.total_filament_weight_g || metadata.filament_weight || metadata.total_filament_weight);
228
253
  const layerCount = this.parseInt(metadata.total_layer_number || metadata.layer_count || metadata.total_layers);
@@ -246,11 +271,12 @@ class ThreeMFParser {
246
271
  filamentType: metadata.filament_type || null,
247
272
  printerModel: metadata.printer_model || null,
248
273
  objects: [],
249
- thumbnails: plateThumbs.map((t)=>({
250
- path: t.entryName,
251
- size: t.getData().length,
252
- type: t.entryName.endsWith(".png") ? "PNG" : "JPG"
253
- }))
274
+ thumbnails: plateThumbnails.length > 0 ? plateThumbnails.map((t)=>({
275
+ width: t.width,
276
+ height: t.height,
277
+ format: t.format,
278
+ dataLength: t.data?.length || 0
279
+ })) : undefined
254
280
  };
255
281
  plates.push(plateMetadata);
256
282
  }
@@ -293,17 +319,21 @@ class ThreeMFParser {
293
319
  const thumbnails = [];
294
320
  const thumbEntries = zipEntries.filter((e)=>e.entryName.match(/Metadata\/.*\.(png|jpg|jpeg)/i) || e.entryName.match(/Thumbnails\/.*/i));
295
321
  for (const entry of thumbEntries){
296
- const sizeMatch = entry.entryName.match(/(\d+)x(\d+)/);
297
- const width = sizeMatch ? Number.parseInt(sizeMatch[1]) : 0;
298
- const height = sizeMatch ? Number.parseInt(sizeMatch[2]) : 0;
299
322
  const format = entry.entryName.match(/\.(png|jpg|jpeg)$/i)?.[1].toUpperCase() || "PNG";
300
323
  const imageData = entry.getData();
324
+ const sizeMatch = entry.entryName.match(/(\d+)x(\d+)/);
325
+ let width = sizeMatch ? Number.parseInt(sizeMatch[1]) : 0;
326
+ let height = sizeMatch ? Number.parseInt(sizeMatch[2]) : 0;
327
+ if (width === 0 || height === 0) {
328
+ const dimensions = (0, _imagedimensions.getImageDimensions)(imageData, format);
329
+ width = dimensions.width;
330
+ height = dimensions.height;
331
+ }
301
332
  const base64Data = imageData.toString("base64");
302
333
  thumbnails.push({
303
334
  width,
304
335
  height,
305
336
  format,
306
- path: entry.entryName,
307
337
  data: base64Data
308
338
  });
309
339
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/parsers/3mf.parser.ts"],"names":["ThreeMFParser","parse","filePath","stats","fs","stat","fileName","path","basename","zip","AdmZip","zipEntries","getEntries","metadataJsonEntry","find","e","entryName","metadata","jsonContent","getData","toString","jsonData","JSON","normalizeJsonMetadata","modelEntry","extractMetadataFromXML","plates","extractPlates","isMultiPlate","length","thumbnails","extractThumbnails","topLevelPrintTime","parseTime","printTime","topLevelFilamentWeight","parseFloat","totalFilamentWeight","filamentWeight","topLevelLayers","parseInt","layerCount","topLevelFilamentUsedMm","filamentUsed","topLevelFilamentUsedCm3","filamentVolume","topLevelFilamentDensity","filamentDensity","topLevelMaxZ","maxZ","topLevelSlicerVersion","slicerVersion","generator","topLevelNozzleDiameter","nozzleDiameter","topLevelLayerHeight","layerHeight","layer_height","topLevelFirstLayerHeight","firstLayerHeight","first_layer_height","topLevelBedTemp","bedTemp","bed_temperature","topLevelNozzleTemp","nozzleTemp","nozzle_temperature","topLevelFillDensity","infillDensity","infill_density","fill_density","topLevelFilamentType","filamentType","filament_type","topLevelPrinterModel","printerModel","printer_model","topLevelFilamentDiameter","filamentDiameter","filament_diameter","plate","gcodePrintTimeSeconds","filamentUsedGrams","totalLayers","filamentUsedMm","filamentUsedCm3","filamentDensityGramsCm3","maxLayerZ","nozzleDiameterMm","bedTemperature","nozzleTemperature","fillDensity","filamentDiameterMm","reduce","sum","p","Math","max","map","firstPlate","normalized","fileFormat","fileSize","size","totalPlates","totalFilamentUsedGrams","undefined","raw","_thumbnails","String","estimatedPrintTimeSec","xml","patterns","pattern","match","key","source","generatorMatch","plateEntries","filter","endsWith","entry","plateMatch","plateNumber","Number","gcodeContent","min","parseGCodeHeader","plateThumbs","includes","model_printing_time","total_estimated_time","print_time","total_filament_weight_g","filament_weight","total_filament_weight","total_layer_number","layer_count","total_layers","plateMetadata","total_filament_length_mm","filament_length_mm","filament_used_mm","total_filament_volume_cm3","filament_volume_cm3","filament_density","max_z_height","max_layer_z","bambustudio","slicer_version","slicer","nozzle_diameter","initial_layer_height","initial_layer_print_height","bed_temperature_actual","bed_temp","bed_temperature_initial_layer","nozzle_temp","nozzle_temperature_initial_layer","sparse_infill_density","objects","t","type","push","sort","a","b","gcode","lines","split","slice","line","startsWith","bambuMatch","trim","toLowerCase","replace","value","_","unit","bedTempMatch","thumbEntries","sizeMatch","width","height","format","toUpperCase","imageData","base64Data","data","num","isNaN","hours","minutes","secs","seconds"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/parsers/3mf.parser.ts"],"names":["ThreeMFParser","parse","filePath","stats","fs","stat","fileName","path","basename","zip","AdmZip","zipEntries","getEntries","metadataJsonEntry","find","e","entryName","metadata","jsonContent","getData","toString","jsonData","JSON","normalizeJsonMetadata","modelEntry","extractMetadataFromXML","plates","extractPlates","isMultiPlate","length","thumbnails","extractThumbnails","topLevelPrintTime","parseTime","printTime","topLevelFilamentWeight","parseFloat","totalFilamentWeight","filamentWeight","topLevelLayers","parseInt","layerCount","topLevelFilamentUsedMm","filamentUsed","topLevelFilamentUsedCm3","filamentVolume","topLevelFilamentDensity","filamentDensity","topLevelMaxZ","maxZ","topLevelSlicerVersion","slicerVersion","generator","topLevelNozzleDiameter","nozzleDiameter","topLevelLayerHeight","layerHeight","layer_height","topLevelFirstLayerHeight","firstLayerHeight","first_layer_height","topLevelBedTemp","bedTemp","bed_temperature","topLevelNozzleTemp","nozzleTemp","nozzle_temperature","topLevelFillDensity","infillDensity","infill_density","fill_density","topLevelFilamentType","filamentType","filament_type","topLevelPrinterModel","printerModel","printer_model","topLevelFilamentDiameter","filamentDiameter","filament_diameter","plate","gcodePrintTimeSeconds","filamentUsedGrams","totalLayers","filamentUsedMm","filamentUsedCm3","filamentDensityGramsCm3","maxLayerZ","nozzleDiameterMm","bedTemperature","nozzleTemperature","fillDensity","filamentDiameterMm","reduce","sum","p","Math","max","map","firstPlate","normalized","fileFormat","fileSize","size","totalPlates","totalFilamentUsedGrams","t","width","height","format","dataLength","data","undefined","raw","_thumbnails","String","estimatedPrintTimeSec","xml","patterns","pattern","match","key","source","generatorMatch","plateEntries","filter","endsWith","entry","plateMatch","plateNumber","Number","gcodeContent","min","parseGCodeHeader","plateThumbs","includes","plateThumbnails","imageData","sizeMatch","dimensions","getImageDimensions","model_printing_time","total_estimated_time","print_time","total_filament_weight_g","filament_weight","total_filament_weight","total_layer_number","layer_count","total_layers","plateMetadata","total_filament_length_mm","filament_length_mm","filament_used_mm","total_filament_volume_cm3","filament_volume_cm3","filament_density","max_z_height","max_layer_z","bambustudio","slicer_version","slicer","nozzle_diameter","initial_layer_height","initial_layer_print_height","bed_temperature_actual","bed_temp","bed_temperature_initial_layer","nozzle_temp","nozzle_temperature_initial_layer","sparse_infill_density","objects","push","sort","a","b","gcode","lines","split","slice","line","startsWith","bambuMatch","trim","toLowerCase","replace","value","_","unit","bedTempMatch","thumbEntries","toUpperCase","base64Data","num","isNaN","hours","minutes","secs","seconds"],"mappings":"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"}