@usarral/century-link-ts 0.1.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/LICENSE +21 -0
- package/README.md +171 -0
- package/dist/CenturyLink.d.ts +53 -0
- package/dist/CenturyLink.d.ts.map +1 -0
- package/dist/CenturyLink.js +103 -0
- package/dist/CenturyLink.js.map +1 -0
- package/dist/application/result/ElegooError.d.ts +7 -0
- package/dist/application/result/ElegooError.d.ts.map +1 -0
- package/dist/application/result/ElegooError.js +11 -0
- package/dist/application/result/ElegooError.js.map +1 -0
- package/dist/application/result/Result.d.ts +12 -0
- package/dist/application/result/Result.d.ts.map +1 -0
- package/dist/application/result/Result.js +12 -0
- package/dist/application/result/Result.js.map +1 -0
- package/dist/application/result/Result.test.d.ts +2 -0
- package/dist/application/result/Result.test.d.ts.map +1 -0
- package/dist/application/result/Result.test.js +46 -0
- package/dist/application/result/Result.test.js.map +1 -0
- package/dist/application/use-cases/ConnectPrinterUseCase.d.ts +9 -0
- package/dist/application/use-cases/ConnectPrinterUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/ConnectPrinterUseCase.js +10 -0
- package/dist/application/use-cases/ConnectPrinterUseCase.js.map +1 -0
- package/dist/application/use-cases/DiscoverPrintersUseCase.d.ts +8 -0
- package/dist/application/use-cases/DiscoverPrintersUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/DiscoverPrintersUseCase.js +36 -0
- package/dist/application/use-cases/DiscoverPrintersUseCase.js.map +1 -0
- package/dist/application/use-cases/GetFileListUseCase.d.ts +9 -0
- package/dist/application/use-cases/GetFileListUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/GetFileListUseCase.js +10 -0
- package/dist/application/use-cases/GetFileListUseCase.js.map +1 -0
- package/dist/application/use-cases/GetPrinterStatusUseCase.d.ts +9 -0
- package/dist/application/use-cases/GetPrinterStatusUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/GetPrinterStatusUseCase.js +10 -0
- package/dist/application/use-cases/GetPrinterStatusUseCase.js.map +1 -0
- package/dist/application/use-cases/PausePrintUseCase.d.ts +8 -0
- package/dist/application/use-cases/PausePrintUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/PausePrintUseCase.js +10 -0
- package/dist/application/use-cases/PausePrintUseCase.js.map +1 -0
- package/dist/application/use-cases/ResumePrintUseCase.d.ts +8 -0
- package/dist/application/use-cases/ResumePrintUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/ResumePrintUseCase.js +10 -0
- package/dist/application/use-cases/ResumePrintUseCase.js.map +1 -0
- package/dist/application/use-cases/StartPrintUseCase.d.ts +8 -0
- package/dist/application/use-cases/StartPrintUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/StartPrintUseCase.js +10 -0
- package/dist/application/use-cases/StartPrintUseCase.js.map +1 -0
- package/dist/application/use-cases/StopPrintUseCase.d.ts +8 -0
- package/dist/application/use-cases/StopPrintUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/StopPrintUseCase.js +10 -0
- package/dist/application/use-cases/StopPrintUseCase.js.map +1 -0
- package/dist/application/use-cases/UploadFileUseCase.d.ts +8 -0
- package/dist/application/use-cases/UploadFileUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/UploadFileUseCase.js +10 -0
- package/dist/application/use-cases/UploadFileUseCase.js.map +1 -0
- package/dist/domain/entities/DiscoveredPrinter.d.ts +14 -0
- package/dist/domain/entities/DiscoveredPrinter.d.ts.map +1 -0
- package/dist/domain/entities/DiscoveredPrinter.js +2 -0
- package/dist/domain/entities/DiscoveredPrinter.js.map +1 -0
- package/dist/domain/entities/FileInfo.d.ts +26 -0
- package/dist/domain/entities/FileInfo.d.ts.map +1 -0
- package/dist/domain/entities/FileInfo.js +2 -0
- package/dist/domain/entities/FileInfo.js.map +1 -0
- package/dist/domain/entities/PrintTask.d.ts +17 -0
- package/dist/domain/entities/PrintTask.d.ts.map +1 -0
- package/dist/domain/entities/PrintTask.js +2 -0
- package/dist/domain/entities/PrintTask.js.map +1 -0
- package/dist/domain/entities/PrinterAttributes.d.ts +44 -0
- package/dist/domain/entities/PrinterAttributes.d.ts.map +1 -0
- package/dist/domain/entities/PrinterAttributes.js +2 -0
- package/dist/domain/entities/PrinterAttributes.js.map +1 -0
- package/dist/domain/entities/PrinterInfo.d.ts +16 -0
- package/dist/domain/entities/PrinterInfo.d.ts.map +1 -0
- package/dist/domain/entities/PrinterInfo.js +2 -0
- package/dist/domain/entities/PrinterInfo.js.map +1 -0
- package/dist/domain/entities/PrinterStatus.d.ts +86 -0
- package/dist/domain/entities/PrinterStatus.d.ts.map +1 -0
- package/dist/domain/entities/PrinterStatus.js +2 -0
- package/dist/domain/entities/PrinterStatus.js.map +1 -0
- package/dist/domain/events/PrinterAttributesEvent.d.ts +7 -0
- package/dist/domain/events/PrinterAttributesEvent.d.ts.map +1 -0
- package/dist/domain/events/PrinterAttributesEvent.js +2 -0
- package/dist/domain/events/PrinterAttributesEvent.js.map +1 -0
- package/dist/domain/events/PrinterConnectionEvent.d.ts +6 -0
- package/dist/domain/events/PrinterConnectionEvent.d.ts.map +1 -0
- package/dist/domain/events/PrinterConnectionEvent.js +2 -0
- package/dist/domain/events/PrinterConnectionEvent.js.map +1 -0
- package/dist/domain/events/PrinterStatusEvent.d.ts +7 -0
- package/dist/domain/events/PrinterStatusEvent.d.ts.map +1 -0
- package/dist/domain/events/PrinterStatusEvent.js +2 -0
- package/dist/domain/events/PrinterStatusEvent.js.map +1 -0
- package/dist/domain/ports/DiscoveryAdapter.d.ts +10 -0
- package/dist/domain/ports/DiscoveryAdapter.d.ts.map +1 -0
- package/dist/domain/ports/DiscoveryAdapter.js +2 -0
- package/dist/domain/ports/DiscoveryAdapter.js.map +1 -0
- package/dist/domain/ports/EventBus.d.ts +8 -0
- package/dist/domain/ports/EventBus.d.ts.map +1 -0
- package/dist/domain/ports/EventBus.js +2 -0
- package/dist/domain/ports/EventBus.js.map +1 -0
- package/dist/domain/ports/FileAdapter.d.ts +26 -0
- package/dist/domain/ports/FileAdapter.d.ts.map +1 -0
- package/dist/domain/ports/FileAdapter.js +2 -0
- package/dist/domain/ports/FileAdapter.js.map +1 -0
- package/dist/domain/ports/PrinterAdapter.d.ts +74 -0
- package/dist/domain/ports/PrinterAdapter.d.ts.map +1 -0
- package/dist/domain/ports/PrinterAdapter.js +2 -0
- package/dist/domain/ports/PrinterAdapter.js.map +1 -0
- package/dist/domain/types/ErrorCode.d.ts +43 -0
- package/dist/domain/types/ErrorCode.d.ts.map +1 -0
- package/dist/domain/types/ErrorCode.js +49 -0
- package/dist/domain/types/ErrorCode.js.map +1 -0
- package/dist/domain/types/PrinterState.d.ts +24 -0
- package/dist/domain/types/PrinterState.d.ts.map +1 -0
- package/dist/domain/types/PrinterState.js +25 -0
- package/dist/domain/types/PrinterState.js.map +1 -0
- package/dist/domain/types/PrinterSubState.d.ts +59 -0
- package/dist/domain/types/PrinterSubState.d.ts.map +1 -0
- package/dist/domain/types/PrinterSubState.js +73 -0
- package/dist/domain/types/PrinterSubState.js.map +1 -0
- package/dist/domain/types/PrinterType.d.ts +8 -0
- package/dist/domain/types/PrinterType.d.ts.map +1 -0
- package/dist/domain/types/PrinterType.js +9 -0
- package/dist/domain/types/PrinterType.js.map +1 -0
- package/dist/domain/value-objects/PrinterId.d.ts +7 -0
- package/dist/domain/value-objects/PrinterId.d.ts.map +1 -0
- package/dist/domain/value-objects/PrinterId.js +6 -0
- package/dist/domain/value-objects/PrinterId.js.map +1 -0
- package/dist/domain/value-objects/Progress.d.ts +9 -0
- package/dist/domain/value-objects/Progress.d.ts.map +1 -0
- package/dist/domain/value-objects/Progress.js +4 -0
- package/dist/domain/value-objects/Progress.js.map +1 -0
- package/dist/domain/value-objects/Temperature.d.ts +8 -0
- package/dist/domain/value-objects/Temperature.d.ts.map +1 -0
- package/dist/domain/value-objects/Temperature.js +4 -0
- package/dist/domain/value-objects/Temperature.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1DiscoveryAdapter.d.ts +6 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1DiscoveryAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1DiscoveryAdapter.js +39 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1DiscoveryAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1FileAdapter.d.ts +16 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1FileAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1FileAdapter.js +87 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1FileAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1PrinterAdapter.d.ts +47 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1PrinterAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1PrinterAdapter.js +332 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1PrinterAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1StatusMapper.d.ts +36 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1StatusMapper.d.ts.map +1 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1StatusMapper.js +59 -0
- package/dist/infrastructure/adapters/cc-v1/CcV1StatusMapper.js.map +1 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2DiscoveryAdapter.d.ts +6 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2DiscoveryAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2DiscoveryAdapter.js +41 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2DiscoveryAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2FileAdapter.d.ts +16 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2FileAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2FileAdapter.js +117 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2FileAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2PrinterAdapter.d.ts +50 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2PrinterAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2PrinterAdapter.js +410 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2PrinterAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2StatusMapper.d.ts +81 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2StatusMapper.d.ts.map +1 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2StatusMapper.js +116 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2StatusMapper.js.map +1 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2StatusMapper.test.d.ts +2 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2StatusMapper.test.d.ts.map +1 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2StatusMapper.test.js +59 -0
- package/dist/infrastructure/adapters/cc-v2/CcV2StatusMapper.test.js.map +1 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerFileAdapter.d.ts +16 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerFileAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerFileAdapter.js +137 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerFileAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerPrinterAdapter.d.ts +52 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerPrinterAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerPrinterAdapter.js +303 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerPrinterAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerStatusMapper.d.ts +37 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerStatusMapper.d.ts.map +1 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerStatusMapper.js +84 -0
- package/dist/infrastructure/adapters/moonraker/MoonrakerStatusMapper.js.map +1 -0
- package/dist/infrastructure/factory/PrinterAdapterFactory.d.ts +12 -0
- package/dist/infrastructure/factory/PrinterAdapterFactory.d.ts.map +1 -0
- package/dist/infrastructure/factory/PrinterAdapterFactory.js +42 -0
- package/dist/infrastructure/factory/PrinterAdapterFactory.js.map +1 -0
- package/dist/infrastructure/transport/Transport.d.ts +19 -0
- package/dist/infrastructure/transport/Transport.d.ts.map +1 -0
- package/dist/infrastructure/transport/Transport.js +2 -0
- package/dist/infrastructure/transport/Transport.js.map +1 -0
- package/dist/infrastructure/transport/http/HttpClient.d.ts +23 -0
- package/dist/infrastructure/transport/http/HttpClient.d.ts.map +1 -0
- package/dist/infrastructure/transport/http/HttpClient.js +73 -0
- package/dist/infrastructure/transport/http/HttpClient.js.map +1 -0
- package/dist/infrastructure/transport/mqtt/CcV2Codec.d.ts +46 -0
- package/dist/infrastructure/transport/mqtt/CcV2Codec.d.ts.map +1 -0
- package/dist/infrastructure/transport/mqtt/CcV2Codec.js +41 -0
- package/dist/infrastructure/transport/mqtt/CcV2Codec.js.map +1 -0
- package/dist/infrastructure/transport/mqtt/CcV2Codec.test.d.ts +2 -0
- package/dist/infrastructure/transport/mqtt/CcV2Codec.test.d.ts.map +1 -0
- package/dist/infrastructure/transport/mqtt/CcV2Codec.test.js +48 -0
- package/dist/infrastructure/transport/mqtt/CcV2Codec.test.js.map +1 -0
- package/dist/infrastructure/transport/mqtt/MqttTransport.d.ts +26 -0
- package/dist/infrastructure/transport/mqtt/MqttTransport.d.ts.map +1 -0
- package/dist/infrastructure/transport/mqtt/MqttTransport.js +188 -0
- package/dist/infrastructure/transport/mqtt/MqttTransport.js.map +1 -0
- package/dist/infrastructure/transport/udp/UdpSocket.d.ts +13 -0
- package/dist/infrastructure/transport/udp/UdpSocket.d.ts.map +1 -0
- package/dist/infrastructure/transport/udp/UdpSocket.js +37 -0
- package/dist/infrastructure/transport/udp/UdpSocket.js.map +1 -0
- package/dist/infrastructure/transport/websocket/CcV1Codec.d.ts +33 -0
- package/dist/infrastructure/transport/websocket/CcV1Codec.d.ts.map +1 -0
- package/dist/infrastructure/transport/websocket/CcV1Codec.js +51 -0
- package/dist/infrastructure/transport/websocket/CcV1Codec.js.map +1 -0
- package/dist/infrastructure/transport/websocket/CcV1Codec.test.d.ts +2 -0
- package/dist/infrastructure/transport/websocket/CcV1Codec.test.d.ts.map +1 -0
- package/dist/infrastructure/transport/websocket/CcV1Codec.test.js +79 -0
- package/dist/infrastructure/transport/websocket/CcV1Codec.test.js.map +1 -0
- package/dist/infrastructure/transport/websocket/WebSocketTransport.d.ts +13 -0
- package/dist/infrastructure/transport/websocket/WebSocketTransport.d.ts.map +1 -0
- package/dist/infrastructure/transport/websocket/WebSocketTransport.js +71 -0
- package/dist/infrastructure/transport/websocket/WebSocketTransport.js.map +1 -0
- package/docs/cc2-protocol.md +244 -0
- package/package.json +59 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 usarral
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# century-link-ts
|
|
2
|
+
|
|
3
|
+
An **unofficial**, community-written TypeScript library for communicating with Elegoo 3D printers over a local area network (LAN).
|
|
4
|
+
|
|
5
|
+
> **This project is not affiliated with, endorsed by, or connected to Elegoo Inc. in any way.**
|
|
6
|
+
> See the [Disclaimer](#disclaimer) section for full details.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## What this is
|
|
11
|
+
|
|
12
|
+
`century-link-ts` is an independent, open-source implementation of the LAN communication protocol used by Elegoo FDM printers (CC and CC2 series). It was built by reverse-engineering the publicly available [elegoo-link](https://github.com/elegooofficial/ElegooLink) C++ SDK and translating the protocol into a clean TypeScript library.
|
|
13
|
+
|
|
14
|
+
It does **not** use, bundle, or redistribute any proprietary code, firmware, or assets from Elegoo.
|
|
15
|
+
|
|
16
|
+
### Supported printers
|
|
17
|
+
|
|
18
|
+
| Protocol | Transport | Printers | Tested |
|
|
19
|
+
|----------|-----------|----------|--------|
|
|
20
|
+
| Elegoo FDM CC (V1) | WebSocket · port 3030 | Neptune 4, Centauri Carbon | — |
|
|
21
|
+
| Elegoo FDM CC2 (V2) | MQTT · port 1883 | Centauri Carbon 2, OrangeStorm Giga | ✅ Centauri Carbon 2 |
|
|
22
|
+
| Moonraker / Klipper | HTTP + WebSocket | Any Klipper printer with Moonraker | — |
|
|
23
|
+
|
|
24
|
+
Cloud features (OAuth, Agora RTM) are out of scope — LAN only.
|
|
25
|
+
|
|
26
|
+
> **Tested hardware:** The CC2 protocol has been verified against a real **Elegoo Centauri Carbon 2** on a local network. CC (V1) and Klipper support are implemented based on the elegoo-link C++ SDK and Moonraker API respectively, but have not been tested against physical hardware.
|
|
27
|
+
>
|
|
28
|
+
> **Have a different printer?** If you try this library with another Elegoo model (or any Klipper printer) and it works — or doesn't — please [open an issue](../../issues) or leave a comment. Confirmed working machines will be added to the table above.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm install century-link-ts
|
|
36
|
+
# or
|
|
37
|
+
pnpm add century-link-ts
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Requires **Node.js ≥ 18**.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Quick start
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
import { CenturyLink, PrinterType } from "century-link-ts";
|
|
48
|
+
|
|
49
|
+
const link = new CenturyLink();
|
|
50
|
+
|
|
51
|
+
// Discover printers on the local network
|
|
52
|
+
for await (const printer of link.discover({ timeoutMs: 5000 })) {
|
|
53
|
+
console.log(printer.model, printer.host);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Connect
|
|
57
|
+
const result = await link.connect({
|
|
58
|
+
host: "192.168.1.100",
|
|
59
|
+
printerType: PrinterType.ELEGOO_FDM_CC2,
|
|
60
|
+
model: "Centauri Carbon 2",
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
if (!result.ok) {
|
|
64
|
+
console.error(result.error.message);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const printer = result.value;
|
|
69
|
+
|
|
70
|
+
// Subscribe to live status
|
|
71
|
+
printer.onStatus((status) => {
|
|
72
|
+
console.log(status.printer.state, `${status.printer.progress}%`);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// Upload and print
|
|
76
|
+
await printer.uploadFile({ localFilePath: "./model.gcode", fileName: "model.gcode", storageLocation: "local" });
|
|
77
|
+
await printer.startPrint({ fileName: "model.gcode", storageLocation: "local" });
|
|
78
|
+
|
|
79
|
+
// Later
|
|
80
|
+
await printer.disconnect();
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## API reference
|
|
86
|
+
|
|
87
|
+
### `CenturyLink`
|
|
88
|
+
|
|
89
|
+
| Method | Returns | Description |
|
|
90
|
+
|--------|---------|-------------|
|
|
91
|
+
| `discover(params?)` | `AsyncIterable<DiscoveredPrinter>` | UDP broadcast discovery on the LAN |
|
|
92
|
+
| `connect(params)` | `Promise<Result<ConnectedPrinter>>` | Connect to a printer by IP |
|
|
93
|
+
|
|
94
|
+
### `ConnectedPrinter`
|
|
95
|
+
|
|
96
|
+
| Method | Description |
|
|
97
|
+
|--------|-------------|
|
|
98
|
+
| `getStatus(timeoutMs?)` | Poll current printer status |
|
|
99
|
+
| `startPrint(params)` | Start a print job |
|
|
100
|
+
| `pausePrint()` | Pause the active print |
|
|
101
|
+
| `resumePrint()` | Resume a paused print |
|
|
102
|
+
| `stopPrint()` | Stop the active print |
|
|
103
|
+
| `uploadFile(params, onProgress?)` | Upload a file (CC2 only) |
|
|
104
|
+
| `getFiles(page?, pageSize?)` | List files on the printer |
|
|
105
|
+
| `onStatus(handler)` | Subscribe to live status push events |
|
|
106
|
+
| `onConnection(handler)` | Subscribe to connection state changes |
|
|
107
|
+
| `disconnect()` | Close the connection |
|
|
108
|
+
|
|
109
|
+
### `Result<T>`
|
|
110
|
+
|
|
111
|
+
All async operations return `Result<T>` — a discriminated union with no thrown exceptions:
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
const result = await printer.getStatus();
|
|
115
|
+
|
|
116
|
+
if (result.ok) {
|
|
117
|
+
console.log(result.value.printer.state);
|
|
118
|
+
} else {
|
|
119
|
+
console.error(result.error.code, result.error.message);
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Architecture
|
|
126
|
+
|
|
127
|
+
The library follows **Hexagonal Architecture** (ports & adapters):
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
src/
|
|
131
|
+
domain/ ← entities, value objects, port interfaces, events
|
|
132
|
+
application/ ← Result<T>, ElegooError, use cases
|
|
133
|
+
infrastructure/ ← WebSocket/MQTT/UDP/HTTP transports, printer adapters
|
|
134
|
+
CenturyLink.ts ← public facade
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
The domain layer has zero runtime dependencies and no knowledge of any transport protocol. Adapters implement the `PrinterAdapter` port and can be swapped or extended independently.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Development
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
pnpm install
|
|
145
|
+
pnpm typecheck # TypeScript type check
|
|
146
|
+
pnpm test # Run unit tests (vitest)
|
|
147
|
+
pnpm build # Compile to dist/
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Disclaimer
|
|
153
|
+
|
|
154
|
+
**century-link-ts is an independent, unofficial project.**
|
|
155
|
+
|
|
156
|
+
- This library is **not** produced by, affiliated with, endorsed by, or in any way connected to **Elegoo Inc.** or any of its subsidiaries.
|
|
157
|
+
- "Elegoo", "Neptune", "Centauri Carbon", "OrangeStorm", and related product names are **trademarks of Elegoo Inc.** Their use here is solely for descriptive purposes (nominative fair use) to identify the hardware this library is designed to communicate with.
|
|
158
|
+
- This project was built by analyzing the publicly available [elegoo-link](https://github.com/elegooofficial/ElegooLink) open-source C++ SDK. No proprietary code, firmware, binaries, or trade secrets were used.
|
|
159
|
+
- The communication protocol implemented here is derived from public documentation and open-source reference implementations.
|
|
160
|
+
- Use of this library is **entirely at your own risk**. The author(s) accept no responsibility for damage to hardware, failed prints, voided warranties, or any other consequences arising from its use. This includes, but is not limited to, unintended movements, temperature changes, or any other commands sent to the printer.
|
|
161
|
+
- This library does not circumvent any access control or security mechanism. It communicates over the same local network protocol the official applications use.
|
|
162
|
+
|
|
163
|
+
If you are a representative of Elegoo Inc. and have concerns about this project, please open an issue or contact the maintainer directly before taking any action — this project exists to benefit the maker community and is maintained in good faith.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## License
|
|
168
|
+
|
|
169
|
+
MIT © [usarral](https://github.com/usarral)
|
|
170
|
+
|
|
171
|
+
This project is independent and unaffiliated with Elegoo Inc.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { PrinterType } from "./domain/types/PrinterType.js";
|
|
2
|
+
import type { DiscoveredPrinter } from "./domain/entities/DiscoveredPrinter.js";
|
|
3
|
+
import type { PrinterInfo } from "./domain/entities/PrinterInfo.js";
|
|
4
|
+
import type { PrinterStatusData, CanvasStatus } from "./domain/entities/PrinterStatus.js";
|
|
5
|
+
import type { PrinterAttributes } from "./domain/entities/PrinterAttributes.js";
|
|
6
|
+
import type { FileListData, FileDetail } from "./domain/entities/FileInfo.js";
|
|
7
|
+
import type { PrintTaskListData } from "./domain/entities/PrintTask.js";
|
|
8
|
+
import type { ConnectParams, StartPrintParams, FileDownloadTriggerParams, Unsubscribe } from "./domain/ports/PrinterAdapter.js";
|
|
9
|
+
import type { DiscoveryParams } from "./domain/ports/DiscoveryAdapter.js";
|
|
10
|
+
import type { FileUploadParams, FileDetailParams, ProgressCallback } from "./domain/ports/FileAdapter.js";
|
|
11
|
+
import type { Result } from "./application/result/Result.js";
|
|
12
|
+
export interface ConnectedPrinter {
|
|
13
|
+
readonly info: PrinterInfo;
|
|
14
|
+
getStatus(timeoutMs?: number): Promise<Result<PrinterStatusData>>;
|
|
15
|
+
getStatusRaw(timeoutMs?: number): Promise<Result<string>>;
|
|
16
|
+
getAttributes(timeoutMs?: number): Promise<Result<PrinterAttributes>>;
|
|
17
|
+
refreshPrinterStatus(): Promise<Result<void>>;
|
|
18
|
+
refreshPrinterAttributes(): Promise<Result<void>>;
|
|
19
|
+
startPrint(params: StartPrintParams): Promise<Result<void>>;
|
|
20
|
+
pausePrint(): Promise<Result<void>>;
|
|
21
|
+
resumePrint(): Promise<Result<void>>;
|
|
22
|
+
stopPrint(): Promise<Result<void>>;
|
|
23
|
+
uploadFile(params: FileUploadParams, onProgress?: ProgressCallback): Promise<Result<void>>;
|
|
24
|
+
cancelUpload(): Promise<Result<void>>;
|
|
25
|
+
getFiles(page?: number, pageSize?: number): Promise<Result<FileListData>>;
|
|
26
|
+
getFileDetail(params: FileDetailParams): Promise<Result<FileDetail>>;
|
|
27
|
+
getCanvasStatus(timeoutMs?: number): Promise<Result<CanvasStatus>>;
|
|
28
|
+
setAutoRefill(enable: boolean): Promise<Result<void>>;
|
|
29
|
+
updatePrinterName(name: string): Promise<Result<void>>;
|
|
30
|
+
homeAxis(axes: string): Promise<Result<void>>;
|
|
31
|
+
moveAxis(axes: string, distanceMm: number): Promise<Result<void>>;
|
|
32
|
+
setTemperature(targets: Readonly<Record<string, number>>): Promise<Result<void>>;
|
|
33
|
+
setFanSpeed(speeds: Readonly<Record<string, number>>): Promise<Result<void>>;
|
|
34
|
+
setPrintSpeed(mode: 0 | 1 | 2 | 3): Promise<Result<void>>;
|
|
35
|
+
getPrintTaskList(page?: number, pageSize?: number): Promise<Result<PrintTaskListData>>;
|
|
36
|
+
deletePrintTasks(taskIds: readonly string[]): Promise<Result<void>>;
|
|
37
|
+
triggerFileDownload(params: FileDownloadTriggerParams): Promise<Result<void>>;
|
|
38
|
+
cancelFileDownload(taskId: string): Promise<Result<void>>;
|
|
39
|
+
onStatus(handler: (status: PrinterStatusData) => void): Unsubscribe;
|
|
40
|
+
onAttributes(handler: (attrs: PrinterAttributes) => void): Unsubscribe;
|
|
41
|
+
onConnection(handler: (connected: boolean) => void): Unsubscribe;
|
|
42
|
+
disconnect(): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
export declare class CenturyLink {
|
|
45
|
+
static readonly VERSION = "0.1.0";
|
|
46
|
+
discover(params?: DiscoveryParams): AsyncIterable<DiscoveredPrinter>;
|
|
47
|
+
getSupportedPrinterTypes(): PrinterType[];
|
|
48
|
+
getVersion(): string;
|
|
49
|
+
connect(params: ConnectParams & {
|
|
50
|
+
printerType: PrinterType;
|
|
51
|
+
}): Promise<Result<ConnectedPrinter>>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=CenturyLink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CenturyLink.d.ts","sourceRoot":"","sources":["../src/CenturyLink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { DiscoverPrintersUseCase } from "./application/use-cases/DiscoverPrintersUseCase.js";
|
|
2
|
+
import { ConnectPrinterUseCase } from "./application/use-cases/ConnectPrinterUseCase.js";
|
|
3
|
+
import { StartPrintUseCase } from "./application/use-cases/StartPrintUseCase.js";
|
|
4
|
+
import { PausePrintUseCase } from "./application/use-cases/PausePrintUseCase.js";
|
|
5
|
+
import { ResumePrintUseCase } from "./application/use-cases/ResumePrintUseCase.js";
|
|
6
|
+
import { StopPrintUseCase } from "./application/use-cases/StopPrintUseCase.js";
|
|
7
|
+
import { UploadFileUseCase } from "./application/use-cases/UploadFileUseCase.js";
|
|
8
|
+
import { GetFileListUseCase } from "./application/use-cases/GetFileListUseCase.js";
|
|
9
|
+
import { GetPrinterStatusUseCase } from "./application/use-cases/GetPrinterStatusUseCase.js";
|
|
10
|
+
import { createPrinterAdapter, createDiscoveryAdapters, createFileAdapter } from "./infrastructure/factory/PrinterAdapterFactory.js";
|
|
11
|
+
import { ElegooError } from "./application/result/ElegooError.js";
|
|
12
|
+
import { ErrorCode } from "./domain/types/ErrorCode.js";
|
|
13
|
+
import { PrinterType } from "./domain/types/PrinterType.js";
|
|
14
|
+
import { err } from "./application/result/Result.js";
|
|
15
|
+
export class CenturyLink {
|
|
16
|
+
static VERSION = "0.1.0";
|
|
17
|
+
discover(params) {
|
|
18
|
+
const adapters = createDiscoveryAdapters();
|
|
19
|
+
const useCase = new DiscoverPrintersUseCase(adapters);
|
|
20
|
+
return useCase.execute(params);
|
|
21
|
+
}
|
|
22
|
+
getSupportedPrinterTypes() {
|
|
23
|
+
return [
|
|
24
|
+
PrinterType.ELEGOO_FDM_CC,
|
|
25
|
+
PrinterType.ELEGOO_FDM_CC2,
|
|
26
|
+
PrinterType.ELEGOO_FDM_KLIPPER,
|
|
27
|
+
PrinterType.GENERIC_FDM_KLIPPER,
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
getVersion() {
|
|
31
|
+
return CenturyLink.VERSION;
|
|
32
|
+
}
|
|
33
|
+
async connect(params) {
|
|
34
|
+
const printerAdapter = createPrinterAdapter(params.printerType);
|
|
35
|
+
const connectUseCase = new ConnectPrinterUseCase(printerAdapter);
|
|
36
|
+
const result = await connectUseCase.execute(params);
|
|
37
|
+
if (!result.ok)
|
|
38
|
+
return result;
|
|
39
|
+
const info = result.value;
|
|
40
|
+
let fileAdapter;
|
|
41
|
+
try {
|
|
42
|
+
fileAdapter = createFileAdapter(params.printerType, params.host, params.accessCode ?? params.token, params.port);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Some printer types may not have a file adapter — that's fine
|
|
46
|
+
}
|
|
47
|
+
const noFileAdapter = () => Promise.resolve(err(new ElegooError(ErrorCode.OPERATION_NOT_IMPLEMENTED, "Not supported for this printer type")));
|
|
48
|
+
const connectedPrinter = {
|
|
49
|
+
info,
|
|
50
|
+
getStatus: (timeoutMs) => new GetPrinterStatusUseCase(printerAdapter).execute(timeoutMs),
|
|
51
|
+
getStatusRaw: (timeoutMs) => printerAdapter.getStatusRaw(timeoutMs),
|
|
52
|
+
getAttributes: (timeoutMs) => printerAdapter.getAttributes(timeoutMs),
|
|
53
|
+
refreshPrinterStatus: () => printerAdapter.refreshPrinterStatus(),
|
|
54
|
+
refreshPrinterAttributes: () => printerAdapter.refreshPrinterAttributes(),
|
|
55
|
+
startPrint: (p) => new StartPrintUseCase(printerAdapter).execute(p),
|
|
56
|
+
pausePrint: () => new PausePrintUseCase(printerAdapter).execute(),
|
|
57
|
+
resumePrint: () => new ResumePrintUseCase(printerAdapter).execute(),
|
|
58
|
+
stopPrint: () => new StopPrintUseCase(printerAdapter).execute(),
|
|
59
|
+
uploadFile: (p, onProgress) => {
|
|
60
|
+
if (!fileAdapter)
|
|
61
|
+
return noFileAdapter();
|
|
62
|
+
return new UploadFileUseCase(fileAdapter).execute(p, onProgress);
|
|
63
|
+
},
|
|
64
|
+
cancelUpload: () => {
|
|
65
|
+
if (!fileAdapter)
|
|
66
|
+
return noFileAdapter();
|
|
67
|
+
return fileAdapter.cancelUpload();
|
|
68
|
+
},
|
|
69
|
+
getFiles: (page, pageSize) => {
|
|
70
|
+
if (printerAdapter.getFileList)
|
|
71
|
+
return printerAdapter.getFileList(page, pageSize);
|
|
72
|
+
if (!fileAdapter)
|
|
73
|
+
return noFileAdapter();
|
|
74
|
+
return new GetFileListUseCase(fileAdapter).execute({ page, pageSize });
|
|
75
|
+
},
|
|
76
|
+
getFileDetail: (p) => {
|
|
77
|
+
if (printerAdapter.getFileDetail)
|
|
78
|
+
return printerAdapter.getFileDetail(p);
|
|
79
|
+
if (!fileAdapter)
|
|
80
|
+
return noFileAdapter();
|
|
81
|
+
return fileAdapter.getFileDetail(p);
|
|
82
|
+
},
|
|
83
|
+
getCanvasStatus: (timeoutMs) => printerAdapter.getCanvasStatus(timeoutMs),
|
|
84
|
+
setAutoRefill: (enable) => printerAdapter.setAutoRefill(enable),
|
|
85
|
+
updatePrinterName: (name) => printerAdapter.updatePrinterName(name),
|
|
86
|
+
homeAxis: (axes) => printerAdapter.homeAxis(axes),
|
|
87
|
+
moveAxis: (axes, distanceMm) => printerAdapter.moveAxis(axes, distanceMm),
|
|
88
|
+
setTemperature: (targets) => printerAdapter.setTemperature(targets),
|
|
89
|
+
setFanSpeed: (speeds) => printerAdapter.setFanSpeed(speeds),
|
|
90
|
+
setPrintSpeed: (mode) => printerAdapter.setPrintSpeed(mode),
|
|
91
|
+
getPrintTaskList: (page, pageSize) => printerAdapter.getPrintTaskList(page, pageSize),
|
|
92
|
+
deletePrintTasks: (taskIds) => printerAdapter.deletePrintTasks(taskIds),
|
|
93
|
+
triggerFileDownload: (p) => printerAdapter.triggerFileDownload(p),
|
|
94
|
+
cancelFileDownload: (taskId) => printerAdapter.cancelFileDownload(taskId),
|
|
95
|
+
onStatus: (handler) => printerAdapter.onStatus(handler),
|
|
96
|
+
onAttributes: (handler) => printerAdapter.onAttributes(handler),
|
|
97
|
+
onConnection: (handler) => printerAdapter.onConnection(handler),
|
|
98
|
+
disconnect: () => printerAdapter.disconnect(),
|
|
99
|
+
};
|
|
100
|
+
return { ok: true, value: connectedPrinter };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=CenturyLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CenturyLink.js","sourceRoot":"","sources":["../src/CenturyLink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ErrorCode } from "../../domain/types/ErrorCode.js";
|
|
2
|
+
export declare class ElegooError extends Error {
|
|
3
|
+
readonly code: ErrorCode;
|
|
4
|
+
readonly cause?: unknown | undefined;
|
|
5
|
+
constructor(code: ErrorCode, message: string, cause?: unknown | undefined);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=ElegooError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElegooError.d.ts","sourceRoot":"","sources":["../../../src/application/result/ElegooError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,qBAAa,WAAY,SAAQ,KAAK;aAElB,IAAI,EAAE,SAAS;aAEf,KAAK,CAAC,EAAE,OAAO;gBAFf,IAAI,EAAE,SAAS,EAC/B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,OAAO,YAAA;CAKlC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElegooError.js","sourceRoot":"","sources":["../../../src/application/result/ElegooError.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAElB;IAEA;IAHlB,YACkB,IAAe,EAC/B,OAAe,EACC,KAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAW;QAEf,UAAK,GAAL,KAAK,CAAU;QAG/B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ElegooError } from "./ElegooError.js";
|
|
2
|
+
export type Result<T> = {
|
|
3
|
+
readonly ok: true;
|
|
4
|
+
readonly value: T;
|
|
5
|
+
} | {
|
|
6
|
+
readonly ok: false;
|
|
7
|
+
readonly error: ElegooError;
|
|
8
|
+
};
|
|
9
|
+
export declare function ok<T>(value: T): Result<T>;
|
|
10
|
+
export declare function err(error: ElegooError): Result<never>;
|
|
11
|
+
export declare function mapResult<T, U>(result: Result<T>, fn: (value: T) => U): Result<U>;
|
|
12
|
+
//# sourceMappingURL=Result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Result.d.ts","sourceRoot":"","sources":["../../../src/application/result/Result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,MAAM,CAAC,CAAC,IAChB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACxC;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC;AAExD,wBAAgB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAEzC;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAErD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAC5B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAClB,MAAM,CAAC,CAAC,CAAC,CAGX"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function ok(value) {
|
|
2
|
+
return { ok: true, value };
|
|
3
|
+
}
|
|
4
|
+
export function err(error) {
|
|
5
|
+
return { ok: false, error };
|
|
6
|
+
}
|
|
7
|
+
export function mapResult(result, fn) {
|
|
8
|
+
if (result.ok)
|
|
9
|
+
return ok(fn(result.value));
|
|
10
|
+
return result;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=Result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Result.js","sourceRoot":"","sources":["../../../src/application/result/Result.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,EAAE,CAAI,KAAQ;IAC5B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,KAAkB;IACpC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAiB,EACjB,EAAmB;IAEnB,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Result.test.d.ts","sourceRoot":"","sources":["../../../src/application/result/Result.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { ok, err, mapResult } from "./Result.js";
|
|
3
|
+
import { ElegooError } from "./ElegooError.js";
|
|
4
|
+
import { ErrorCode } from "../../domain/types/ErrorCode.js";
|
|
5
|
+
describe("Result", () => {
|
|
6
|
+
it("ok wraps a value", () => {
|
|
7
|
+
const result = ok(42);
|
|
8
|
+
expect(result.ok).toBe(true);
|
|
9
|
+
if (result.ok)
|
|
10
|
+
expect(result.value).toBe(42);
|
|
11
|
+
});
|
|
12
|
+
it("err wraps an error", () => {
|
|
13
|
+
const error = new ElegooError(ErrorCode.NETWORK_ERROR, "connection failed");
|
|
14
|
+
const result = err(error);
|
|
15
|
+
expect(result.ok).toBe(false);
|
|
16
|
+
if (!result.ok)
|
|
17
|
+
expect(result.error).toBe(error);
|
|
18
|
+
});
|
|
19
|
+
it("mapResult transforms ok value", () => {
|
|
20
|
+
const result = mapResult(ok(5), (n) => n * 2);
|
|
21
|
+
expect(result.ok).toBe(true);
|
|
22
|
+
if (result.ok)
|
|
23
|
+
expect(result.value).toBe(10);
|
|
24
|
+
});
|
|
25
|
+
it("mapResult passes err through unchanged", () => {
|
|
26
|
+
const error = new ElegooError(ErrorCode.OPERATION_TIMEOUT, "timed out");
|
|
27
|
+
const result = mapResult(err(error), (n) => n * 2);
|
|
28
|
+
expect(result.ok).toBe(false);
|
|
29
|
+
if (!result.ok)
|
|
30
|
+
expect(result.error).toBe(error);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe("ElegooError", () => {
|
|
34
|
+
it("stores code and message", () => {
|
|
35
|
+
const e = new ElegooError(ErrorCode.PRINTER_NOT_FOUND, "not found");
|
|
36
|
+
expect(e.code).toBe(ErrorCode.PRINTER_NOT_FOUND);
|
|
37
|
+
expect(e.message).toBe("not found");
|
|
38
|
+
expect(e.name).toBe("ElegooError");
|
|
39
|
+
});
|
|
40
|
+
it("stores optional cause", () => {
|
|
41
|
+
const cause = new Error("root cause");
|
|
42
|
+
const e = new ElegooError(ErrorCode.NETWORK_ERROR, "failed", cause);
|
|
43
|
+
expect(e.cause).toBe(cause);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=Result.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Result.test.js","sourceRoot":"","sources":["../../../src/application/result/Result.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE5D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,EAAE;YAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,EAAE;YAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACpE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACjD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PrinterAdapter, ConnectParams } from "../../domain/ports/PrinterAdapter.js";
|
|
2
|
+
import type { PrinterInfo } from "../../domain/entities/PrinterInfo.js";
|
|
3
|
+
import type { Result } from "../result/Result.js";
|
|
4
|
+
export declare class ConnectPrinterUseCase {
|
|
5
|
+
private readonly adapter;
|
|
6
|
+
constructor(adapter: PrinterAdapter);
|
|
7
|
+
execute(params: ConnectParams): Promise<Result<PrinterInfo>>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=ConnectPrinterUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectPrinterUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/ConnectPrinterUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAEpD,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;CAG7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectPrinterUseCase.js","sourceRoot":"","sources":["../../../src/application/use-cases/ConnectPrinterUseCase.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD,OAAO,CAAC,MAAqB;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DiscoveryAdapter, DiscoveryParams } from "../../domain/ports/DiscoveryAdapter.js";
|
|
2
|
+
import type { DiscoveredPrinter } from "../../domain/entities/DiscoveredPrinter.js";
|
|
3
|
+
export declare class DiscoverPrintersUseCase {
|
|
4
|
+
private readonly adapters;
|
|
5
|
+
constructor(adapters: readonly DiscoveryAdapter[]);
|
|
6
|
+
execute(params?: DiscoveryParams): AsyncIterable<DiscoveredPrinter>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=DiscoverPrintersUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiscoverPrintersUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/DiscoverPrintersUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAChG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAEpF,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,SAAS,gBAAgB,EAAE;IAE3D,OAAO,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC,iBAAiB,CAAC;CAiC3E"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export class DiscoverPrintersUseCase {
|
|
2
|
+
adapters;
|
|
3
|
+
constructor(adapters) {
|
|
4
|
+
this.adapters = adapters;
|
|
5
|
+
}
|
|
6
|
+
async *execute(params) {
|
|
7
|
+
const streams = this.adapters.map((a) => a.discover(params));
|
|
8
|
+
const queue = [];
|
|
9
|
+
let done = 0;
|
|
10
|
+
let resolve = null;
|
|
11
|
+
const notify = (printer) => {
|
|
12
|
+
queue.push(printer);
|
|
13
|
+
resolve?.();
|
|
14
|
+
};
|
|
15
|
+
const promises = streams.map(async (stream) => {
|
|
16
|
+
for await (const printer of stream) {
|
|
17
|
+
notify(printer);
|
|
18
|
+
}
|
|
19
|
+
done++;
|
|
20
|
+
resolve?.();
|
|
21
|
+
});
|
|
22
|
+
while (done < streams.length || queue.length > 0) {
|
|
23
|
+
if (queue.length === 0) {
|
|
24
|
+
await new Promise((r) => {
|
|
25
|
+
resolve = r;
|
|
26
|
+
});
|
|
27
|
+
resolve = null;
|
|
28
|
+
}
|
|
29
|
+
while (queue.length > 0) {
|
|
30
|
+
yield queue.shift();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
await Promise.all(promises);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=DiscoverPrintersUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiscoverPrintersUseCase.js","sourceRoot":"","sources":["../../../src/application/use-cases/DiscoverPrintersUseCase.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,uBAAuB;IACL;IAA7B,YAA6B,QAAqC;QAArC,aAAQ,GAAR,QAAQ,CAA6B;IAAG,CAAC;IAEtE,KAAK,CAAC,CAAC,OAAO,CAAC,MAAwB;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAwB,EAAE,CAAC;QACtC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,OAAO,GAAwB,IAAI,CAAC;QAExC,MAAM,MAAM,GAAG,CAAC,OAA0B,EAAE,EAAE;YAC5C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,EAAE,EAAE,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC5C,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;gBACnC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE;oBAC5B,OAAO,GAAG,CAAC,CAAC;gBACd,CAAC,CAAC,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,CAAC,KAAK,EAAG,CAAC;YACvB,CAAC;QACH,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FileAdapter, FileListParams } from "../../domain/ports/FileAdapter.js";
|
|
2
|
+
import type { FileListData } from "../../domain/entities/FileInfo.js";
|
|
3
|
+
import type { Result } from "../result/Result.js";
|
|
4
|
+
export declare class GetFileListUseCase {
|
|
5
|
+
private readonly adapter;
|
|
6
|
+
constructor(adapter: FileAdapter);
|
|
7
|
+
execute(params?: FileListParams): Promise<Result<FileListData>>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=GetFileListUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetFileListUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/GetFileListUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAEjD,OAAO,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;CAGhE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetFileListUseCase.js","sourceRoot":"","sources":["../../../src/application/use-cases/GetFileListUseCase.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IAAG,CAAC;IAErD,OAAO,CAAC,MAAuB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PrinterAdapter } from "../../domain/ports/PrinterAdapter.js";
|
|
2
|
+
import type { PrinterStatusData } from "../../domain/entities/PrinterStatus.js";
|
|
3
|
+
import type { Result } from "../result/Result.js";
|
|
4
|
+
export declare class GetPrinterStatusUseCase {
|
|
5
|
+
private readonly adapter;
|
|
6
|
+
constructor(adapter: PrinterAdapter);
|
|
7
|
+
execute(timeoutMs?: number): Promise<Result<PrinterStatusData>>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=GetPrinterStatusUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetPrinterStatusUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/GetPrinterStatusUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAEpD,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;CAGhE"}
|