finished BambuMQTT schemas

This commit is contained in:
2026-09-05 14:34:23 +00:00
parent 0c7f6510ce
commit 8bdade66c2
24 changed files with 516 additions and 5 deletions
+2
View File
@@ -0,0 +1,2 @@
export * from "./schemas";
export * as proto from "./generated";
+6
View File
@@ -0,0 +1,6 @@
export * from "./schemas";
// `src/generated/**` is produced by `npm run build:ts` (protoc + ts-proto)
// from the .proto sources in /proto and is not committed. Re-export it
// here once generated so consumers get both the TypeBox runtime schemas
// and the proto-derived TS types from a single package entry point.
export * as proto from "./generated";
+4
View File
@@ -0,0 +1,4 @@
export * from "./material";
export * from "./print-params";
export * from "./template";
export * from "./print-job";
+4
View File
@@ -0,0 +1,4 @@
export * from "./material";
export * from "./print-params";
export * from "./template";
export * from "./print-job";
+11
View File
@@ -0,0 +1,11 @@
import { type Static } from "@sinclair/typebox";
export declare const MaterialProfileSchema: import("@sinclair/typebox").TObject<{
id: import("@sinclair/typebox").TString;
name: import("@sinclair/typebox").TString;
filamentType: import("@sinclair/typebox").TString;
nozzleTempC: import("@sinclair/typebox").TNumber;
bedTempC: import("@sinclair/typebox").TNumber;
densityGCm3: import("@sinclair/typebox").TNumber;
colorHex: import("@sinclair/typebox").TString;
}>;
export type MaterialProfile = Static<typeof MaterialProfileSchema>;
+10
View File
@@ -0,0 +1,10 @@
import { Type } from "@sinclair/typebox";
export const MaterialProfileSchema = Type.Object({
id: Type.String({ format: "uuid" }),
name: Type.String({ minLength: 1 }),
filamentType: Type.String({ minLength: 1 }),
nozzleTempC: Type.Number(),
bedTempC: Type.Number(),
densityGCm3: Type.Number(),
colorHex: Type.String({ pattern: "^#[0-9a-fA-F]{6}$" }),
});
+15
View File
@@ -0,0 +1,15 @@
import { type Static } from "@sinclair/typebox";
export declare const PrintJobStatusSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_UNSPECIFIED">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_QUEUED">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_PRINTING">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_PAUSED">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_COMPLETED">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_FAILED">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_CANCELLED">]>;
export type PrintJobStatus = Static<typeof PrintJobStatusSchema>;
export declare const PrintJobSchema: import("@sinclair/typebox").TObject<{
id: import("@sinclair/typebox").TString;
farmId: import("@sinclair/typebox").TString;
printerId: import("@sinclair/typebox").TString;
templateId: import("@sinclair/typebox").TString;
status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_UNSPECIFIED">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_QUEUED">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_PRINTING">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_PAUSED">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_COMPLETED">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_FAILED">, import("@sinclair/typebox").TLiteral<"PRINT_JOB_STATUS_CANCELLED">]>;
progressPercent: import("@sinclair/typebox").TNumber;
startedAtUnix: import("@sinclair/typebox").TInteger;
completedAtUnix: import("@sinclair/typebox").TInteger;
gcodeFileKey: import("@sinclair/typebox").TString;
}>;
export type PrintJob = Static<typeof PrintJobSchema>;
@@ -0,0 +1,21 @@
import { Type } from "@sinclair/typebox";
export const PrintJobStatusSchema = Type.Union([
Type.Literal("PRINT_JOB_STATUS_UNSPECIFIED"),
Type.Literal("PRINT_JOB_STATUS_QUEUED"),
Type.Literal("PRINT_JOB_STATUS_PRINTING"),
Type.Literal("PRINT_JOB_STATUS_PAUSED"),
Type.Literal("PRINT_JOB_STATUS_COMPLETED"),
Type.Literal("PRINT_JOB_STATUS_FAILED"),
Type.Literal("PRINT_JOB_STATUS_CANCELLED"),
]);
export const PrintJobSchema = Type.Object({
id: Type.String({ format: "uuid" }),
farmId: Type.String({ format: "uuid" }),
printerId: Type.String({ format: "uuid" }),
templateId: Type.String({ format: "uuid" }),
status: PrintJobStatusSchema,
progressPercent: Type.Number({ minimum: 0, maximum: 100 }),
startedAtUnix: Type.Integer(),
completedAtUnix: Type.Integer(),
gcodeFileKey: Type.String({ minLength: 1 }),
});
+10
View File
@@ -0,0 +1,10 @@
import { type Static } from "@sinclair/typebox";
export declare const PrintParametersSchema: import("@sinclair/typebox").TObject<{
layerHeightMm: import("@sinclair/typebox").TNumber;
infillPercent: import("@sinclair/typebox").TInteger;
infillPattern: import("@sinclair/typebox").TString;
printSpeedMmS: import("@sinclair/typebox").TNumber;
supportsEnabled: import("@sinclair/typebox").TBoolean;
wallCount: import("@sinclair/typebox").TInteger;
}>;
export type PrintParameters = Static<typeof PrintParametersSchema>;
@@ -0,0 +1,9 @@
import { Type } from "@sinclair/typebox";
export const PrintParametersSchema = Type.Object({
layerHeightMm: Type.Number({ minimum: 0.04, maximum: 1.0 }),
infillPercent: Type.Integer({ minimum: 0, maximum: 100 }),
infillPattern: Type.String({ minLength: 1 }),
printSpeedMmS: Type.Number({ minimum: 0 }),
supportsEnabled: Type.Boolean(),
wallCount: Type.Integer({ minimum: 0 }),
});
+29
View File
@@ -0,0 +1,29 @@
import { type Static } from "@sinclair/typebox";
export declare const TemplateSchema: import("@sinclair/typebox").TObject<{
id: import("@sinclair/typebox").TString;
name: import("@sinclair/typebox").TString;
description: import("@sinclair/typebox").TString;
ownerId: import("@sinclair/typebox").TString;
modelFileKey: import("@sinclair/typebox").TString;
material: import("@sinclair/typebox").TObject<{
id: import("@sinclair/typebox").TString;
name: import("@sinclair/typebox").TString;
filamentType: import("@sinclair/typebox").TString;
nozzleTempC: import("@sinclair/typebox").TNumber;
bedTempC: import("@sinclair/typebox").TNumber;
densityGCm3: import("@sinclair/typebox").TNumber;
colorHex: import("@sinclair/typebox").TString;
}>;
printParameters: import("@sinclair/typebox").TObject<{
layerHeightMm: import("@sinclair/typebox").TNumber;
infillPercent: import("@sinclair/typebox").TInteger;
infillPattern: import("@sinclair/typebox").TString;
printSpeedMmS: import("@sinclair/typebox").TNumber;
supportsEnabled: import("@sinclair/typebox").TBoolean;
wallCount: import("@sinclair/typebox").TInteger;
}>;
createdAtUnix: import("@sinclair/typebox").TInteger;
updatedAtUnix: import("@sinclair/typebox").TInteger;
tags: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
}>;
export type Template = Static<typeof TemplateSchema>;
+15
View File
@@ -0,0 +1,15 @@
import { Type } from "@sinclair/typebox";
import { MaterialProfileSchema } from "./material";
import { PrintParametersSchema } from "./print-params";
export const TemplateSchema = Type.Object({
id: Type.String({ format: "uuid" }),
name: Type.String({ minLength: 1 }),
description: Type.String(),
ownerId: Type.String({ format: "uuid" }),
modelFileKey: Type.String({ minLength: 1 }),
material: MaterialProfileSchema,
printParameters: PrintParametersSchema,
createdAtUnix: Type.Integer(),
updatedAtUnix: Type.Integer(),
tags: Type.Array(Type.String()),
});