@fdm-monster/server 2.0.0-rc1 → 2.0.0
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/.env.template +8 -3
- package/.yarn/install-state.gz +0 -0
- package/CONTRIBUTING.md +1 -1
- package/README.md +5 -4
- package/RELEASE_NOTES.MD +39 -0
- package/SECURITY.md +1 -1
- package/dist/consoles/download-github-releases.js +3 -3
- package/dist/consoles/launch-http-servers.js +4 -4
- package/dist/consoles/launch-http-servers.js.map +1 -1
- package/dist/consoles/mock-bambu.server.js +35 -16
- package/dist/consoles/mock-bambu.server.js.map +1 -1
- package/dist/consoles/mock-camera/default-image.js +13 -0
- package/dist/consoles/mock-camera/default-image.js.map +1 -0
- package/dist/consoles/mock-camera/mock-camera.server.js +160 -0
- package/dist/consoles/mock-camera/mock-camera.server.js.map +1 -0
- package/dist/consoles/mock-octoprint.server.js +281 -73
- package/dist/consoles/mock-octoprint.server.js.map +1 -1
- package/dist/consoles/mock-prusalink.server.js +11 -11
- package/dist/consoles/mock-prusalink.server.js.map +1 -1
- package/dist/consoles/typeorm-create.js +135 -0
- package/dist/consoles/typeorm-create.js.map +1 -0
- package/dist/consoles/typeorm-generate.js +8 -8
- package/dist/consoles/typeorm-generate.js.map +1 -1
- package/dist/constants/authorization.constants.js +13 -26
- package/dist/constants/authorization.constants.js.map +1 -1
- package/dist/constants/server-settings.constants.js +3 -18
- package/dist/constants/server-settings.constants.js.map +1 -1
- package/dist/container.js +18 -10
- package/dist/container.js.map +1 -1
- package/dist/container.tokens.js +9 -5
- package/dist/container.tokens.js.map +1 -1
- package/dist/controllers/batch-call.controller.js +0 -15
- package/dist/controllers/batch-call.controller.js.map +1 -1
- package/dist/controllers/file-storage.controller.js +248 -0
- package/dist/controllers/file-storage.controller.js.map +1 -0
- package/dist/controllers/first-time-setup.controller.js +2 -1
- package/dist/controllers/first-time-setup.controller.js.map +1 -1
- package/dist/controllers/floor.controller.js +12 -12
- package/dist/controllers/floor.controller.js.map +1 -1
- package/dist/controllers/print-job.controller.js +666 -0
- package/dist/controllers/print-job.controller.js.map +1 -0
- package/dist/controllers/print-queue.controller.js +375 -0
- package/dist/controllers/print-queue.controller.js.map +1 -0
- package/dist/controllers/printer-files.controller.js +86 -59
- package/dist/controllers/printer-files.controller.js.map +1 -1
- package/dist/controllers/printer-settings.controller.js +0 -21
- package/dist/controllers/printer-settings.controller.js.map +1 -1
- package/dist/controllers/{printer-group.controller.js → printer-tag.controller.js} +51 -34
- package/dist/controllers/printer-tag.controller.js.map +1 -0
- package/dist/controllers/printer.controller.js +15 -0
- package/dist/controllers/printer.controller.js.map +1 -1
- package/dist/controllers/server-private.controller.js +2 -1
- package/dist/controllers/server-private.controller.js.map +1 -1
- package/dist/controllers/server-public.controller.js +6 -2
- package/dist/controllers/server-public.controller.js.map +1 -1
- package/dist/controllers/settings.controller.js +0 -68
- package/dist/controllers/settings.controller.js.map +1 -1
- package/dist/controllers/slicer-compat.controller.js +216 -0
- package/dist/controllers/slicer-compat.controller.js.map +1 -0
- package/dist/data-source.js +20 -8
- package/dist/data-source.js.map +1 -1
- package/dist/entities/camera-stream.entity.js +2 -1
- package/dist/entities/camera-stream.entity.js.map +1 -1
- package/dist/entities/floor.entity.js +3 -5
- package/dist/entities/floor.entity.js.map +1 -1
- package/dist/entities/index.js +15 -7
- package/dist/entities/index.js.map +1 -1
- package/dist/entities/print-job.entity.js +195 -0
- package/dist/entities/print-job.entity.js.map +1 -0
- package/dist/entities/{printer-group.entity.js → printer-tag.entity.js} +17 -17
- package/dist/entities/printer-tag.entity.js.map +1 -0
- package/dist/entities/printer.entity.js +4 -10
- package/dist/entities/printer.entity.js.map +1 -1
- package/dist/entities/settings.entity.js +3 -12
- package/dist/entities/settings.entity.js.map +1 -1
- package/dist/entities/{group.entity.js → tag.entity.js} +15 -8
- package/dist/entities/tag.entity.js.map +1 -0
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/middleware/exception.filter.js +114 -90
- package/dist/middleware/exception.filter.js.map +1 -1
- package/dist/middleware/global.middleware.js +6 -6
- package/dist/middleware/global.middleware.js.map +1 -1
- package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js +186 -0
- package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js.map +1 -0
- package/dist/migrations/1767279607392-DropCustomGcode.js +31 -0
- package/dist/migrations/1767279607392-DropCustomGcode.js.map +1 -0
- package/dist/migrations/1767291804417-DropPrintCompletions.js +37 -0
- package/dist/migrations/1767291804417-DropPrintCompletions.js.map +1 -0
- package/dist/migrations/1767352862576-DropSettingsFileClean.js +88 -0
- package/dist/migrations/1767352862576-DropSettingsFileClean.js.map +1 -0
- package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js +107 -0
- package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js.map +1 -0
- package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js +62 -0
- package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js.map +1 -0
- package/dist/migrations/1767432108916-RenameGroupToTag.js +86 -0
- package/dist/migrations/1767432108916-RenameGroupToTag.js.map +1 -0
- package/dist/migrations/1767451444137-AddPrintJob.js +207 -0
- package/dist/migrations/1767451444137-AddPrintJob.js.map +1 -0
- package/dist/server.constants.js +9 -9
- package/dist/server.constants.js.map +1 -1
- package/dist/server.host.js +24 -32
- package/dist/server.host.js.map +1 -1
- package/dist/services/bambu/bambu-ftp.adapter.js +1 -1
- package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
- package/dist/services/bambu/bambu-mqtt.adapter.js +73 -76
- package/dist/services/bambu/bambu-mqtt.adapter.js.map +1 -1
- package/dist/services/core/batch-call.service.js +0 -25
- package/dist/services/core/batch-call.service.js.map +1 -1
- package/dist/services/core/multer.service.js +5 -9
- package/dist/services/core/multer.service.js.map +1 -1
- package/dist/services/core/yaml.service.js +208 -153
- package/dist/services/core/yaml.service.js.map +1 -1
- package/dist/services/file-analysis.service.js +146 -0
- package/dist/services/file-analysis.service.js.map +1 -0
- package/dist/services/file-storage.service.js +386 -0
- package/dist/services/file-storage.service.js.map +1 -0
- package/dist/services/interfaces/floor.dto.js +3 -3
- package/dist/services/interfaces/floor.dto.js.map +1 -1
- package/dist/services/interfaces/{printer-group.dto.js → printer-tag.dto.js} +9 -8
- package/dist/services/interfaces/printer-tag.dto.js.map +1 -0
- package/dist/services/interfaces/{print-completion.interface.js → printer-tag.service.interface.js} +1 -1
- package/dist/services/interfaces/{printer-group.service.interface.js.map → printer-tag.service.interface.js.map} +1 -1
- package/dist/services/interfaces/settings.dto.js +0 -1
- package/dist/services/interfaces/settings.dto.js.map +1 -1
- package/dist/services/interfaces/{group.dto.js → tag.dto.js} +1 -1
- package/dist/services/interfaces/tag.dto.js.map +1 -0
- package/dist/services/octoprint/dto/files/gcode-analysis.dto.js.map +1 -0
- package/dist/services/octoprint/octoprint-api.routes.js +0 -7
- package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
- package/dist/services/octoprint/octoprint.client.js +0 -4
- package/dist/services/octoprint/octoprint.client.js.map +1 -1
- package/dist/services/orm/floor.service.js +9 -16
- package/dist/services/orm/floor.service.js.map +1 -1
- package/dist/services/orm/print-job.service.js +539 -0
- package/dist/services/orm/print-job.service.js.map +1 -0
- package/dist/services/orm/printer-tag.service.js +120 -0
- package/dist/services/orm/printer-tag.service.js.map +1 -0
- package/dist/services/orm/settings.service.js +0 -8
- package/dist/services/orm/settings.service.js.map +1 -1
- package/dist/services/print-file-downloader.service.js +169 -0
- package/dist/services/print-file-downloader.service.js.map +1 -0
- package/dist/services/print-queue.service.js +268 -0
- package/dist/services/print-queue.service.js.map +1 -0
- package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +1 -3
- package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -1
- package/dist/services/validators/floor-service.validation.js +10 -10
- package/dist/services/validators/floor-service.validation.js.map +1 -1
- package/dist/services/validators/print-job.validation.js +31 -0
- package/dist/services/validators/print-job.validation.js.map +1 -0
- package/dist/services/validators/settings-service.validation.js +0 -22
- package/dist/services/validators/settings-service.validation.js.map +1 -1
- package/dist/services/validators/yaml-service.validation.js +7 -13
- package/dist/services/validators/yaml-service.validation.js.map +1 -1
- package/dist/shared/load-controllers.js +2 -1
- package/dist/shared/load-controllers.js.map +1 -1
- package/dist/shared/runtime-settings.migration.js +1 -11
- package/dist/shared/runtime-settings.migration.js.map +1 -1
- package/dist/state/floor.store.js +2 -9
- package/dist/state/floor.store.js.map +1 -1
- package/dist/state/printer-events.cache.js +179 -19
- package/dist/state/printer-events.cache.js.map +1 -1
- package/dist/state/printer-thumbnail.cache.js +98 -183
- package/dist/state/printer-thumbnail.cache.js.map +1 -1
- package/dist/state/settings.store.js +2 -33
- package/dist/state/settings.store.js.map +1 -1
- package/dist/state/socket-io.gateway.js +1 -1
- package/dist/state/socket-io.gateway.js.map +1 -1
- package/dist/tasks/boot.task.js +7 -5
- package/dist/tasks/boot.task.js.map +1 -1
- package/dist/tasks/print-job-analysis.task.js +116 -0
- package/dist/tasks/print-job-analysis.task.js.map +1 -0
- package/dist/tasks/printer-files-load.task.js +29 -0
- package/dist/tasks/printer-files-load.task.js.map +1 -0
- package/dist/tasks/socketio.task.js +1 -1
- package/dist/tasks/socketio.task.js.map +1 -1
- package/dist/tasks.js +3 -2
- package/dist/tasks.js.map +1 -1
- package/dist/utils/parsers/3mf.parser.js +337 -0
- package/dist/utils/parsers/3mf.parser.js.map +1 -0
- package/dist/utils/parsers/bgcode.parser.js +223 -0
- package/dist/utils/parsers/bgcode.parser.js.map +1 -0
- package/dist/utils/parsers/gcode.parser.js +254 -0
- package/dist/utils/parsers/gcode.parser.js.map +1 -0
- package/dist/utils/swagger/decorators.js +39 -0
- package/dist/utils/swagger/decorators.js.map +1 -0
- package/dist/utils/swagger/generator.js +196 -0
- package/dist/utils/swagger/generator.js.map +1 -0
- package/dist/utils/swagger/swagger.js +93 -0
- package/dist/utils/swagger/swagger.js.map +1 -0
- package/package.json +19 -15
- package/dist/controllers/custom-gcode.controller.js +0 -147
- package/dist/controllers/custom-gcode.controller.js.map +0 -1
- package/dist/controllers/print-completion.controller.js +0 -118
- package/dist/controllers/print-completion.controller.js.map +0 -1
- package/dist/controllers/printer-group.controller.js.map +0 -1
- package/dist/entities/custom-gcode.entity.js +0 -49
- package/dist/entities/custom-gcode.entity.js.map +0 -1
- package/dist/entities/group.entity.js.map +0 -1
- package/dist/entities/print-completion.entity.js +0 -90
- package/dist/entities/print-completion.entity.js.map +0 -1
- package/dist/entities/printer-group.entity.js.map +0 -1
- package/dist/services/interfaces/custom-gcode.dto.js +0 -18
- package/dist/services/interfaces/custom-gcode.dto.js.map +0 -1
- package/dist/services/interfaces/custom-gcode.service.interface.js +0 -6
- package/dist/services/interfaces/custom-gcode.service.interface.js.map +0 -1
- package/dist/services/interfaces/gcode-analysis.dto.js.map +0 -1
- package/dist/services/interfaces/group.dto.js.map +0 -1
- package/dist/services/interfaces/print-completion-context.dto.js +0 -6
- package/dist/services/interfaces/print-completion-context.dto.js.map +0 -1
- package/dist/services/interfaces/print-completion.dto.js +0 -38
- package/dist/services/interfaces/print-completion.dto.js.map +0 -1
- package/dist/services/interfaces/print-completion.interface.js.map +0 -1
- package/dist/services/interfaces/printer-group.dto.js.map +0 -1
- package/dist/services/interfaces/printer-group.service.interface.js +0 -6
- package/dist/services/orm/custom-gcode.service.js +0 -42
- package/dist/services/orm/custom-gcode.service.js.map +0 -1
- package/dist/services/orm/print-completion.service.js +0 -87
- package/dist/services/orm/print-completion.service.js.map +0 -1
- package/dist/services/orm/print-completion.shared.js +0 -59
- package/dist/services/orm/print-completion.shared.js.map +0 -1
- package/dist/services/orm/printer-group.service.js +0 -109
- package/dist/services/orm/printer-group.service.js.map +0 -1
- package/dist/tasks/print-completion.socketio.task.js +0 -91
- package/dist/tasks/print-completion.socketio.task.js.map +0 -1
- package/dist/tasks/printer-file-clean.task.js +0 -74
- package/dist/tasks/printer-file-clean.task.js.map +0 -1
- /package/dist/services/{interfaces → octoprint/dto/files}/gcode-analysis.dto.js +0 -0
package/.env.template
CHANGED
|
@@ -24,7 +24,7 @@ OVERRIDE_JWT_EXPIRES_IN=3600
|
|
|
24
24
|
# Optional, changing this will invalidate all existing logins
|
|
25
25
|
OVERRIDE_JWT_ISSUER=fdm-monster-server-2023
|
|
26
26
|
# Optional, changing this will invalidate all existing logins
|
|
27
|
-
OVERRIDE_JWT_AUDIENCE=fdm-monster-client-
|
|
27
|
+
OVERRIDE_JWT_AUDIENCE=fdm-monster-client-next-2026
|
|
28
28
|
|
|
29
29
|
# Demo mode, will set wizard to completed
|
|
30
30
|
OVERRIDE_IS_DEMO_MODE=true
|
|
@@ -35,8 +35,7 @@ OVERRIDE_DEMO_PASSWORD=demo2023
|
|
|
35
35
|
# Optional, default: ADMIN, logical values: "ADMIN", "OPERATOR"
|
|
36
36
|
OVERRIDE_DEMO_ROLE=ADMIN
|
|
37
37
|
|
|
38
|
-
# Debug
|
|
39
|
-
DEBUG_ROUTES=false
|
|
38
|
+
# Debug socket states
|
|
40
39
|
DEBUG_SOCKET_STATES=false
|
|
41
40
|
|
|
42
41
|
# Saves SQLite database to ./database/fdm-monster.sqlite
|
|
@@ -48,3 +47,9 @@ ENABLE_PROMETHEUS=false
|
|
|
48
47
|
ENABLE_LOKI=false
|
|
49
48
|
LOKI_ADDRESS=
|
|
50
49
|
ENABLE_PROMETHEUS_METRICS=false
|
|
50
|
+
|
|
51
|
+
# Swagger/OpenAPI Documentation
|
|
52
|
+
# Optional, default: false. Set to true to disable Swagger UI and OpenAPI documentation endpoints
|
|
53
|
+
DISABLE_SWAGGER_OPENAPI=false
|
|
54
|
+
# Optional, default: false. Set to true to generate swagger.json file in media folder
|
|
55
|
+
GENERATE_SWAGGER_JSON=false
|
package/.yarn/install-state.gz
CHANGED
|
Binary file
|
package/CONTRIBUTING.md
CHANGED
|
@@ -35,7 +35,7 @@ Sorry we do not have a documentation with F.A.Q. yet. Please visit us on discord
|
|
|
35
35
|
FDM Monster currently consists of two active repositories:
|
|
36
36
|
|
|
37
37
|
- [FDM Monster](https://github.com/fdm-monster/fdm-monster) - the server
|
|
38
|
-
- [FDM Monster Client](https://github.com/fdm-monster/fdm-monster-client) - the client UI
|
|
38
|
+
- [FDM Monster Client](https://github.com/fdm-monster/fdm-monster-client-next) - the client UI
|
|
39
39
|
- [FDM Connector](https://github.com/fdm-monster/fdm-connector) - the OctoPrint plugin (not in use yet)
|
|
40
40
|
|
|
41
41
|
### Design decisions
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<p align="center" style="margin-bottom: 0">
|
|
2
2
|
<a href="https://docs.fdm-monster.net/" target="_blank" rel="noopener noreferrer">
|
|
3
|
-
<img width="150" src="https://github.com/fdm-monster/fdm-monster-client/blob/main/public/img/logo.png?raw=true" alt="FDM Monster">
|
|
3
|
+
<img width="150" src="https://github.com/fdm-monster/fdm-monster-client-next/blob/main/public/img/logo.png?raw=true" alt="FDM Monster">
|
|
4
4
|
</a>
|
|
5
5
|
</p>
|
|
6
6
|
<h1 align="center" style="padding-top: 0; margin-top: 10px">FDM Monster</h1>
|
|
@@ -158,13 +158,14 @@ the [CONTRIBUTING](CONTRIBUTING.md) file.
|
|
|
158
158
|
- [x] 🔌 Raspberry Pi image (https://github.com/fdm-monster/MonsterPi)
|
|
159
159
|
- [x] :rocket: Documentation (https://docs.fdm-monster.net)
|
|
160
160
|
- [x] 🛡️ Login and user management
|
|
161
|
-
- [x] OctoFarm
|
|
161
|
+
- [x] OctoFarm printer import
|
|
162
162
|
- [x] Klipper and Moonraker API integration
|
|
163
163
|
- [x] GCode Thumbnail support
|
|
164
164
|
- [x] `.bgcode` support
|
|
165
165
|
- [x] Modernized UI layout and tile design
|
|
166
|
-
- [
|
|
167
|
-
- [
|
|
166
|
+
- [x] History and statistics
|
|
167
|
+
- [x] Print Queue
|
|
168
|
+
- [x] Extended webcam integration
|
|
168
169
|
- [ ] Spoolman integration
|
|
169
170
|
|
|
170
171
|
## License
|
package/RELEASE_NOTES.MD
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# Develop
|
|
2
2
|
|
|
3
|
+
# FDM Monster 2.0.0
|
|
4
|
+
|
|
5
|
+
## Feat
|
|
6
|
+
|
|
7
|
+
- All UI features in https://github.com/fdm-monster/fdm-monster-client-next/blob/main/RELEASE_NOTES.MD
|
|
8
|
+
- Add mock camera console to project (for development)
|
|
9
|
+
- Add swagger and OpenAPI integration
|
|
10
|
+
- UI Client is now fdm-monster-client-next at v2.0.0
|
|
11
|
+
- Add color option to tag
|
|
12
|
+
- Add API to upload from slicer
|
|
13
|
+
- Change API to /api/v2
|
|
14
|
+
- Queue
|
|
15
|
+
- PrintJob
|
|
16
|
+
- File Analysis
|
|
17
|
+
|
|
18
|
+
## Fixes
|
|
19
|
+
|
|
20
|
+
- Renames PrinterFloors permission group to Floors
|
|
21
|
+
- Load printer files in background instead of synchronously
|
|
22
|
+
- BambuLab connection rejections cannot cause server crashes anymore
|
|
23
|
+
- Default grid size is now 4 by 2 (which is less overwhelming)
|
|
24
|
+
- Floor service wouldn't update printer position, comparison was x==x, y==x
|
|
25
|
+
- ExceptionFilter now logs using loggerFactory
|
|
26
|
+
- YAML import service was brittle against printer type failures, added robustness
|
|
27
|
+
- Camera should tolerate printer deletion: SET NULL applied to Foreign Key
|
|
28
|
+
- Quick stop API endpoint moved to printer controller, removing the need for custom gcode api controller.
|
|
29
|
+
- Drop printer file clean task, outdated concept
|
|
30
|
+
- File uploads now go to media/file-uploads instead of media
|
|
31
|
+
- First-time-setup api filter now allows swagger endpoints
|
|
32
|
+
- Floor order change not properly implemented in API service
|
|
33
|
+
- Remove experimental thumbnail support
|
|
34
|
+
|
|
35
|
+
## Chore
|
|
36
|
+
- Remove batch/single set gcode analysis to false
|
|
37
|
+
- Removed client next experimental setting
|
|
38
|
+
- Drop unused Custom Gcode table
|
|
39
|
+
- Drop broken PrintCompletion table
|
|
40
|
+
- Rename PrinterGroup to PrinterTag, and Group to Tag
|
|
41
|
+
|
|
3
42
|
# FDM Monster 2.0.0-rc1
|
|
4
43
|
|
|
5
44
|
## Features
|
package/SECURITY.md
CHANGED
|
@@ -12,7 +12,7 @@ function _interop_require_default(obj) {
|
|
|
12
12
|
}
|
|
13
13
|
const fetchReleases = async ()=>{
|
|
14
14
|
try {
|
|
15
|
-
const response = await _axios.default.get("https://api.github.com/repos/fdm-monster/fdm-monster-client/releases");
|
|
15
|
+
const response = await _axios.default.get("https://api.github.com/repos/fdm-monster/fdm-monster-client-next/releases");
|
|
16
16
|
const releases = response.data;
|
|
17
17
|
const releaseData = releases.map((release)=>({
|
|
18
18
|
tag_name: release.tag_name,
|
|
@@ -29,7 +29,7 @@ const fetchReleases = async ()=>{
|
|
|
29
29
|
};
|
|
30
30
|
const fetchLatest = async ()=>{
|
|
31
31
|
try {
|
|
32
|
-
const response = await _axios.default.get("https://api.github.com/repos/fdm-monster/fdm-monster-client/releases/latest");
|
|
32
|
+
const response = await _axios.default.get("https://api.github.com/repos/fdm-monster/fdm-monster-client-next/releases/latest");
|
|
33
33
|
const release = response.data;
|
|
34
34
|
const releaseData = {
|
|
35
35
|
tag_name: release.tag_name,
|
|
@@ -37,7 +37,7 @@ const fetchLatest = async ()=>{
|
|
|
37
37
|
published_at: release.published_at,
|
|
38
38
|
body: release.body
|
|
39
39
|
};
|
|
40
|
-
const outputPath = _path.default.join(__dirname, "github-releases-latest-client-slim
|
|
40
|
+
const outputPath = _path.default.join(__dirname, "github-releases-latest-client-slim.data.json");
|
|
41
41
|
_fs.default.writeFileSync(outputPath, JSON.stringify(releaseData, null, 2));
|
|
42
42
|
console.log(`Releases data written to ${outputPath}`);
|
|
43
43
|
} catch (error) {
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
const
|
|
6
|
-
const
|
|
5
|
+
const _nodechild_process = require("node:child_process");
|
|
6
|
+
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
7
7
|
function _interop_require_default(obj) {
|
|
8
8
|
return obj && obj.__esModule ? obj : {
|
|
9
9
|
default: obj
|
|
@@ -14,8 +14,8 @@ const instanceCount = 10;
|
|
|
14
14
|
console.log(`Starting ${instanceCount} fake OctoPrint servers...`);
|
|
15
15
|
for(let i = 0; i < instanceCount; i++){
|
|
16
16
|
const port = startPort + i;
|
|
17
|
-
const process = (0,
|
|
18
|
-
|
|
17
|
+
const process = (0, _nodechild_process.spawn)("node", [
|
|
18
|
+
_nodepath.default.join(__dirname, "./mock-octoprint.server.js"),
|
|
19
19
|
port.toString()
|
|
20
20
|
]);
|
|
21
21
|
process.stdout.on("data", (data)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/consoles/launch-http-servers.ts"],"names":["startPort","instanceCount","console","log","i","port","process","spawn","path","join","__dirname","toString","stdout","on","data","trim","stderr","error"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/consoles/launch-http-servers.ts"],"names":["startPort","instanceCount","console","log","i","port","process","spawn","path","join","__dirname","toString","stdout","on","data","trim","stderr","error"],"mappings":";;;;mCAAsB;iEACL;;;;;;AAEjB,MAAMA,YAAY;AAClB,MAAMC,gBAAgB;AAEtBC,QAAQC,GAAG,CAAC,CAAC,SAAS,EAAEF,cAAc,0BAA0B,CAAC;AAEjE,IAAK,IAAIG,IAAI,GAAGA,IAAIH,eAAeG,IAAK;IACtC,MAAMC,OAAOL,YAAYI;IACzB,MAAME,UAAUC,IAAAA,wBAAK,EAAC,QAAQ;QAACC,iBAAI,CAACC,IAAI,CAACC,WAAW;QAA+BL,KAAKM,QAAQ;KAAG;IAEnGL,QAAQM,MAAM,CAACC,EAAE,CAAC,QAAQ,CAACC;QACzBZ,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEC,IAAI,EAAE,QAAQ,EAAEC,KAAK,GAAG,EAAES,KAAKH,QAAQ,GAAGI,IAAI,IAAI;IAC3E;IAEAT,QAAQU,MAAM,CAACH,EAAE,CAAC,QAAQ,CAACC;QACzBZ,QAAQe,KAAK,CAAC,CAAC,QAAQ,EAAEb,IAAI,EAAE,QAAQ,EAAEC,KAAK,SAAS,EAAES,KAAKH,QAAQ,GAAGI,IAAI,IAAI;IACnF;IAEAb,QAAQC,GAAG,CAAC,CAAC,eAAe,EAAEC,IAAI,EAAE,SAAS,EAAEC,MAAM;AACvD;AAEAH,QAAQC,GAAG,CAAC"}
|
|
@@ -75,7 +75,9 @@ async function generateSelfSignedCert() {
|
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
let isPrinting = false;
|
|
78
|
+
let isFinished = false;
|
|
78
79
|
let currentPrintFile = "";
|
|
80
|
+
let finishedFileName = "";
|
|
79
81
|
let printProgress = 0;
|
|
80
82
|
let isPaused = false;
|
|
81
83
|
let nozzleTemp = 25;
|
|
@@ -133,7 +135,12 @@ const PRINT_DURATION = 20;
|
|
|
133
135
|
}
|
|
134
136
|
});
|
|
135
137
|
const publishState = ()=>{
|
|
136
|
-
if (
|
|
138
|
+
if (isFinished) {
|
|
139
|
+
isFinished = false;
|
|
140
|
+
finishedFileName = "";
|
|
141
|
+
currentPrintFile = "";
|
|
142
|
+
printProgress = 0;
|
|
143
|
+
} else if (isPrinting && !isPaused) {
|
|
137
144
|
const elapsedSeconds = (Date.now() - printStartTime) / 1000;
|
|
138
145
|
printProgress = Math.min(elapsedSeconds / PRINT_DURATION * 100, 100);
|
|
139
146
|
if (printProgress < 10) {
|
|
@@ -144,17 +151,24 @@ const PRINT_DURATION = 20;
|
|
|
144
151
|
bedTemp = 60;
|
|
145
152
|
}
|
|
146
153
|
if (printProgress >= 100) {
|
|
154
|
+
isFinished = true;
|
|
155
|
+
finishedFileName = currentPrintFile;
|
|
147
156
|
isPrinting = false;
|
|
148
|
-
printProgress =
|
|
149
|
-
|
|
150
|
-
console.log(`[BAMBU MOCK MQTT] Print completed`);
|
|
157
|
+
printProgress = 100;
|
|
158
|
+
console.log(`[BAMBU MOCK MQTT] Print completed: ${currentPrintFile}`);
|
|
151
159
|
}
|
|
152
160
|
}
|
|
153
|
-
if (!isPrinting && nozzleTemp > 25) {
|
|
161
|
+
if (!isPrinting && !isFinished && nozzleTemp > 25) {
|
|
154
162
|
nozzleTemp = Math.max(nozzleTemp - 2, 25);
|
|
155
163
|
bedTemp = Math.max(bedTemp - 1, 25);
|
|
156
164
|
}
|
|
157
|
-
|
|
165
|
+
let gcodeState = "IDLE";
|
|
166
|
+
if (isFinished) gcodeState = "FINISHED";
|
|
167
|
+
else if (isPrinting && isPaused) gcodeState = "PAUSE";
|
|
168
|
+
else if (isPrinting) gcodeState = "PRINTING";
|
|
169
|
+
const fileName = isFinished ? finishedFileName : currentPrintFile;
|
|
170
|
+
const hasJob = isPrinting || isFinished;
|
|
171
|
+
const printingLabel = isPaused ? "paused" : isFinished ? "finished" : "printing";
|
|
158
172
|
const state = {
|
|
159
173
|
print: {
|
|
160
174
|
nozzle_temper: Math.round(nozzleTemp),
|
|
@@ -162,15 +176,15 @@ const PRINT_DURATION = 20;
|
|
|
162
176
|
bed_temper: Math.round(bedTemp),
|
|
163
177
|
bed_target_temper: isPrinting ? 60 : 0,
|
|
164
178
|
chamber_temper: 30,
|
|
165
|
-
mc_percent: Math.round(printProgress),
|
|
166
|
-
mc_remaining_time:
|
|
167
|
-
mc_print_stage:
|
|
168
|
-
gcode_state:
|
|
169
|
-
gcode_file:
|
|
179
|
+
mc_percent: isFinished ? 100 : Math.round(printProgress),
|
|
180
|
+
mc_remaining_time: hasJob ? Math.round(Math.max(0, (PRINT_DURATION - (Date.now() - printStartTime) / 1000) / 60)) : 0,
|
|
181
|
+
mc_print_stage: hasJob ? printingLabel : "idle",
|
|
182
|
+
gcode_state: gcodeState,
|
|
183
|
+
gcode_file: fileName || "",
|
|
170
184
|
wifi_signal: "-45dBm",
|
|
171
|
-
layer_num:
|
|
172
|
-
total_layer_num:
|
|
173
|
-
subtask_name:
|
|
185
|
+
layer_num: hasJob ? Math.floor((isFinished ? 100 : printProgress) / 2) : 0,
|
|
186
|
+
total_layer_num: hasJob ? 50 : 0,
|
|
187
|
+
subtask_name: fileName || "",
|
|
174
188
|
heatbreak_fan_speed: isPrinting ? "5000" : "0",
|
|
175
189
|
cooling_fan_speed: isPrinting ? "8000" : "0",
|
|
176
190
|
big_fan1_speed: isPrinting ? "3000" : "0",
|
|
@@ -228,11 +242,16 @@ const PRINT_DURATION = 20;
|
|
|
228
242
|
}
|
|
229
243
|
} else if (command === "stop") {
|
|
230
244
|
if (isPrinting) {
|
|
245
|
+
const stoppedFile = currentPrintFile;
|
|
231
246
|
isPrinting = false;
|
|
232
247
|
isPaused = false;
|
|
233
248
|
printProgress = 0;
|
|
234
|
-
|
|
235
|
-
|
|
249
|
+
console.log(`[BAMBU MOCK MQTT] Stopping print: ${stoppedFile}`);
|
|
250
|
+
setTimeout(()=>{
|
|
251
|
+
if (!isPrinting) {
|
|
252
|
+
currentPrintFile = "";
|
|
253
|
+
}
|
|
254
|
+
}, MESSAGE_INTERVAL * 2);
|
|
236
255
|
}
|
|
237
256
|
}
|
|
238
257
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/consoles/mock-bambu.server.ts"],"names":["DEFAULT_PORT","DEFAULT_MQTT_PORT","DEFAULT_SERIAL","DEFAULT_ACCESS_CODE","MESSAGE_INTERVAL","DEFAULT_USERNAME","port","process","argv","Number","parseInt","mqttPort","serial","accessCode","console","log","ftpDir","path","join","os","tmpdir","sdcardDir","fs","existsSync","mkdirSync","recursive","generateSelfSignedCert","attrs","name","value","options","days","algorithm","keySize","pems","selfsigned","generate","key","private","cert","minVersion","ciphers","isPrinting","currentPrintFile","printProgress","isPaused","nozzleTemp","bedTemp","printStartTime","PRINT_DURATION","tlsCerts","ftpServer","FtpSrv","url","pasv_url","pasv_min","pasv_max","tls","anonymous","greeting","on","username","password","resolve","reject","root","Error","error","listen","then","mqttClient","mqtt","connect","clientId","Date","now","rejectUnauthorized","reportTopic","requestTopic","subscribe","err","publishState","elapsedSeconds","Math","min","max","printingLabel","state","print","nozzle_temper","round","nozzle_target_temper","bed_temper","bed_target_temper","chamber_temper","mc_percent","mc_remaining_time","mc_print_stage","gcode_state","gcode_file","wifi_signal","layer_num","floor","total_layer_num","subtask_name","heatbreak_fan_speed","cooling_fan_speed","big_fan1_speed","big_fan2_speed","spd_lvl","spd_mag","print_error","lifecycle","command","msg","sequence_id","String","publish","JSON","stringify","qos","setInterval","topic","message","payload","parse","toString","filename","param","endsWith","pausedProgress","connected","endAsync","close","exit","catch"],"mappings":";;;;+DA+BmB;6DACF;iEACA;+DACF;+DACA;mEACQ;;;;;;AAGvB,MAAMA,eAAe;AACrB,MAAMC,oBAAoB;AAC1B,MAAMC,iBAAiB;AACvB,MAAMC,sBAAsB;AAC5B,MAAMC,mBAAmB;AACzB,MAAMC,mBAAmB;AAEzB,MAAMC,OAAOC,QAAQC,IAAI,CAAC,EAAE,GAAGC,OAAOC,QAAQ,CAACH,QAAQC,IAAI,CAAC,EAAE,IAAIR;AAClE,MAAMW,WAAWJ,QAAQC,IAAI,CAAC,EAAE,GAAGC,OAAOC,QAAQ,CAACH,QAAQC,IAAI,CAAC,EAAE,IAAIP;AACtE,MAAMW,SAASL,QAAQC,IAAI,CAAC,EAAE,IAAIN;AAClC,MAAMW,aAAaN,QAAQC,IAAI,CAAC,EAAE,IAAIL;AAEtCW,QAAQC,GAAG,CAAC,CAAC,2CAA2C,CAAC;AACzDD,QAAQC,GAAG,CAAC,CAAC,2BAA2B,CAAC;AACzCD,QAAQC,GAAG,CAAC,CAAC,yBAAyB,EAAET,MAAM;AAC9CQ,QAAQC,GAAG,CAAC,CAAC,0DAA0D,EAAEJ,UAAU;AACnFG,QAAQC,GAAG,CAAC,CAAC,uBAAuB,EAAEH,QAAQ;AAC9CE,QAAQC,GAAG,CAAC,CAAC,4BAA4B,EAAEF,YAAY;AACvDC,QAAQC,GAAG,CAAC,CAAC,6BAA6B,CAAC;AAE3C,MAAMC,SAASC,iBAAI,CAACC,IAAI,CAACC,eAAE,CAACC,MAAM,IAAI,kBAAkBR;AACxD,MAAMS,YAAYJ,iBAAI,CAACC,IAAI,CAACF,QAAQ;AAEpC,IAAI,CAACM,eAAE,CAACC,UAAU,CAACP,SAAS;IAC1BF,QAAQC,GAAG,CAAC,CAAC,qCAAqC,EAAEC,QAAQ;IAC5DM,eAAE,CAACE,SAAS,CAACR,QAAQ;QAAES,WAAW;IAAK;AACzC;AAEA,IAAI,CAACH,eAAE,CAACC,UAAU,CAACF,YAAY;IAC7BP,QAAQC,GAAG,CAAC,CAAC,wCAAwC,EAAEM,WAAW;IAClEC,eAAE,CAACE,SAAS,CAACH,WAAW;QAAEI,WAAW;IAAK;AAC5C;AAMA,eAAeC;IACbZ,QAAQC,GAAG,CAAC,CAAC,0DAA0D,CAAC;IAExE,MAAMY,QAAQ;QACZ;YAAEC,MAAM;YAAcC,OAAO;QAAwB;QACrD;YAAED,MAAM;YAAeC,OAAO;QAAK;QACnC;YAAED,MAAM;YAAoBC,OAAO;QAAiB;KACrD;IAED,MAAMC,UAAU;QACdC,MAAM;QACNC,WAAW;QACXC,SAAS;IACX;IAEA,MAAMC,OAAO,MAAMC,mBAAU,CAACC,QAAQ,CAACT,OAAOG;IAE9ChB,QAAQC,GAAG,CAAC,CAAC,2DAA2D,CAAC;IAEzE,OAAO;QACLsB,KAAKH,KAAKI,OAAO;QACjBC,MAAML,KAAKK,IAAI;QAEfC,YAAY;QACZC,SAAS;IACX;AACF;AAGA,IAAIC,aAAa;AACjB,IAAIC,mBAAmB;AACvB,IAAIC,gBAAgB;AACpB,IAAIC,WAAW;AACf,IAAIC,aAAa;AACjB,IAAIC,UAAU;AACd,IAAIC,iBAAiB;AACrB,MAAMC,iBAAiB;AAGtB,CAAA;IACC,MAAMC,WAAW,
|
|
1
|
+
{"version":3,"sources":["../../src/consoles/mock-bambu.server.ts"],"names":["DEFAULT_PORT","DEFAULT_MQTT_PORT","DEFAULT_SERIAL","DEFAULT_ACCESS_CODE","MESSAGE_INTERVAL","DEFAULT_USERNAME","port","process","argv","Number","parseInt","mqttPort","serial","accessCode","console","log","ftpDir","path","join","os","tmpdir","sdcardDir","fs","existsSync","mkdirSync","recursive","generateSelfSignedCert","attrs","name","value","options","days","algorithm","keySize","pems","selfsigned","generate","key","private","cert","minVersion","ciphers","isPrinting","isFinished","currentPrintFile","finishedFileName","printProgress","isPaused","nozzleTemp","bedTemp","printStartTime","PRINT_DURATION","tlsCerts","ftpServer","FtpSrv","url","pasv_url","pasv_min","pasv_max","tls","anonymous","greeting","on","username","password","resolve","reject","root","Error","error","listen","then","mqttClient","mqtt","connect","clientId","Date","now","rejectUnauthorized","reportTopic","requestTopic","subscribe","err","publishState","elapsedSeconds","Math","min","max","gcodeState","fileName","hasJob","printingLabel","state","print","nozzle_temper","round","nozzle_target_temper","bed_temper","bed_target_temper","chamber_temper","mc_percent","mc_remaining_time","mc_print_stage","gcode_state","gcode_file","wifi_signal","layer_num","floor","total_layer_num","subtask_name","heatbreak_fan_speed","cooling_fan_speed","big_fan1_speed","big_fan2_speed","spd_lvl","spd_mag","print_error","lifecycle","command","msg","sequence_id","String","publish","JSON","stringify","qos","setInterval","topic","message","payload","parse","toString","filename","param","endsWith","pausedProgress","stoppedFile","setTimeout","connected","endAsync","close","exit","catch"],"mappings":"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"}
|