UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint manager to set up, configure and monitor 3D printers. Our aim is to provide extremely optimized websocket performance and reliability.

573 lines (572 loc) 23.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "MoonrakerClient", { enumerable: true, get: function() { return MoonrakerClient; } }); const _formdata = /*#__PURE__*/ _interop_require_default(require("form-data")); const _fs = require("fs"); const _eventconstants = require("../../constants/event.constants"); const _defaulthttpclientbuilder = require("../../shared/default-http-client.builder"); const _runtimeexceptions = require("../../exceptions/runtime.exceptions"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class MoonrakerClient { httpClientFactory; eventEmitter2; settingsStore; logger; constructor(loggerFactory, httpClientFactory, eventEmitter2, settingsStore){ this.httpClientFactory = httpClientFactory; this.eventEmitter2 = eventEmitter2; this.settingsStore = settingsStore; this.logger = loggerFactory(MoonrakerClient.name); } async getServerInfo(login) { return this.createClient(login).get("/server/info"); } async getServerConfig(login) { return this.createClient(login).get("/server/config"); } async getTemperatureStore(login, includeMonitors = false) { return this.createClient(login).get(`/server/temperature_store?include_monitors=${!!includeMonitors}`); } async getGcodeStore(login, count = 100) { return this.createClient(login).get(`/server/gcode_store?count=${count}`); } async postRolloverLogs(login, application = "") { return this.createClient(login).post(`server/logs/rollover`, { application }); } async postRestartServer(login) { return this.createClient(login).post(`server/restart`); } async postJsonRpc(login, method, params, id) { return this.createClient(login).post(`server/jsonrpc`, { jsonrpc: "2.0", id: id ? id : 0, method, params }); } async getPrinterInfo(login) { return this.createClient(login).post(`printer/info`); } async postQuickStop(login) { return this.createClient(login).post(`printer/emergency_stop`); } async postHostRestart(login) { return this.createClient(login).post(`printer/restart`); } async postFirmwareRestart(login) { return this.createClient(login).post(`printer/firmware_restart`); } async getPrinterObjectsList(login) { return this.createClient(login).get(`printer/objects/list`); } async getPrinterObjectsQuery(login, query) { const queryString = this.convertToQueryString(query); return this.createClient(login).get(`printer/objects/query?${queryString}`); } postSubscribePrinterObjects(login, connectionId, query) { const queryString = this.convertToQueryString(query); return this.createClient(login).post(`printer/objects/subscribe?connection_id=${connectionId}&${queryString}`); } async getPrinterQueryEndstops(login) { return this.createClient(login).get(`printer/query-endstops`); } async postGcodeScript(login, script = "G28") { return this.createClient(login).get(`printer/gcode/script?script=${script}`); } async getGcodeHelp(login) { return this.createClient(login).get(`printer/gcode/help`); } async postPrintStart(login, filename) { return this.createClient(login).post(`printer/print/start?filename=${filename}`); } async postPrintPause(login) { return this.createClient(login).post(`printer/print/pause`); } async postPrintResume(login) { return this.createClient(login).post(`printer/print/resume`); } async postPrintCancel(login) { return this.createClient(login).post(`printer/print/cancel`); } async getMachineSystemInfo(login) { return this.createClient(login).get(`machine/system_info`); } async postMachineShutdown(login) { return this.createClient(login).post(`machine/shutdown`); } async postMachineReboot(login) { return this.createClient(login).post(`machine/reboot`); } async postMachineRestartService(login, service) { return this.createClient(login).post(`machine/services/restart?service=${service}`); } async postMachineStartService(login, service) { return this.createClient(login).post(`machine/services/restart?service=${service}`); } async postMachineProcessStats(login) { return this.createClient(login).post(`machine/proc_stats`); } async getMachineSudoInfo(login, checkAccess = false) { return this.createClient(login).get(`machine/sudo/info?check_access=${checkAccess}`); } async postMachineSetSudoPassword(login, password) { return this.createClient(login).post(`machine/sudo/password`, { password }); } async getMachineListPeripheralsUsb(login) { return this.createClient(login).get(`machine/peripherals/usb`); } async getMachineListPeripheralsSerial(login) { return this.createClient(login).get(`machine/peripherals/serial`); } async getMachineListPeripheralsVideo(login) { return this.createClient(login).get(`machine/peripherals/video`); } async getMachineListPeripheralsCanbus(login, canInterface = "can0") { return this.createClient(login).get(`machine/peripherals/canbus?interface=${canInterface}`); } async getServerFilesList(login, rootFolder = "") { const paramString = rootFolder?.length ? `?root=${rootFolder}` : ""; return this.createClient(login).get(`server/files/list${paramString}`); } async getServerFilesRoots(login) { return this.createClient(login).get(`server/files/roots`); } async getServerFileMetadata(login, filename) { return this.createClient(login).get(`server/files/metadata?filename=${filename}`); } async getServerFileMetadataScan(login, filename) { return this.createClient(login).get(`server/files/metascan?filename=${filename}`); } async getServerFilesThumbnails(login, filename) { return this.createClient(login).get(`server/files/thumbnails?filename=${filename}`); } async getServerFilesDirectoryInfo(login, path, extended) { return this.createClient(login).get(`server/files/directory?path=${path}&extended=${extended}`); } async postServerFilesDirectory(login, path) { return this.createClient(login).post(`server/files/directory`, { path }); } async deleteServerFilesDirectory(login, path, force) { return this.createClient(login).delete(`server/files/directory?path=${path}&force=${!!force}`); } async postServerFilesMove(login, source, dest) { return this.createClient(login).post(`server/files/directory`, { source, dest }); } async postServerFilesCopy(login, source, dest) { return this.createClient(login).post(`server/files/copy`, { source, dest }); } async postServerFilesZip(login, items, dest, store_only) { return this.createClient(login).post(`server/files/zip`, { items, store_only, dest }); } async getServerFilesDownload(login, root, filename) { return await this.createClient(login).get(`server/files/${root}/${filename}`, { responseType: "stream" }); } async getServerFilesDownloadChunk(login, root, filename, startBytes, endBytes) { return await this.createClient(login).get(`server/files/${root}/${filename}`, { headers: { Range: `bytes=${startBytes}-${endBytes}` } }); } async postServerFileUpload(login, multerFileOrBuffer, startPrint, progressToken, root, path, checksum) { const formData = new _formdata.default(); if (root?.length) { formData.append("root", root); } if (path?.length) { formData.append("path", path); } if (checksum?.length) { formData.append("checksum", checksum); } if (startPrint) { formData.append("print", "true"); } let fileBuffer = multerFileOrBuffer.buffer; const filename = multerFileOrBuffer.originalname; if (fileBuffer) { this.logger.log("Attaching file from memory buffer to formdata for upload"); formData.append("file", fileBuffer, { filename }); } else { const filePath = multerFileOrBuffer.path; const fileStream = (0, _fs.createReadStream)(filePath); this.logger.log(`Attaching file from disk to formdata for upload`); formData.append("file", fileStream, { filename }); } const result = await new Promise((resolve, reject)=>{ return formData.getLength((err, length)=>{ if (err) reject(new Error("Could not retrieve formData length")); resolve(length); }); }); try { const response = await this.createClient(login, (b)=>{ b.withMultiPartFormData().withTimeout(this.settingsStore.getTimeoutSettings().apiUploadTimeout).withHeaders({ ...formData.getHeaders(), "Content-Length": result.toString() }).withOnUploadProgress((p)=>{ if (progressToken) { this.eventEmitter2.emit(`${(0, _eventconstants.uploadProgressEvent)(progressToken)}`, progressToken, p); } }); }).post(`server/files/upload`, formData); if (progressToken) { this.eventEmitter2.emit(`${(0, _eventconstants.uploadDoneEvent)(progressToken)}`, progressToken); } return response.data; } catch (e) { if (progressToken) { this.eventEmitter2.emit(`${(0, _eventconstants.uploadFailedEvent)(progressToken)}`, progressToken, e?.message); } let data; try { data = JSON.parse(e.response?.body); } catch { data = e.response?.body; } throw new _runtimeexceptions.ExternalServiceError({ error: e.message, statusCode: e.response?.statusCode, data, success: false, stack: e.stack }, "Moonraker"); } } async deleteServerFile(login, root, path) { const url = `server/files/${root}/${path}`; return this.createClient(login).delete(url); } async getServerFileKlippyLogDownload(login) { return this.createClient(login).get(`server/files/klippy.log`); } async getServerFileMoonrakerLogDownload(login) { return this.createClient(login).get(`server/files/moonraker.log`); } async postAccessLoginUser(login, username, password, source = "moonraker") { return this.createClient(login).post("/access/login", { username, password, source }); } async postAccessLogoutUser(login) { return this.createClient(login).post(`access/logout`); } async getAccessUser(login) { return this.createClient(login).get(`access/user`); } async postAccessCreateUser(login, username, password) { return this.createClient(login).post(`access/login`, { username, password }); } async deleteAccessUser(login, username) { return this.createClient(login).delete(`access/user`, { data: { username } }); } async listAccessUsers(login) { return this.createClient(login).get(`access/user/list`); } async postAccessResetPassword(login, refresh_token) { return this.createClient(login).post(`access/refresh_jwt`, { refresh_token }); } async getAccessOneshotToken(login) { return this.createClient(login).get(`access/oneshot_token`); } async getAccessInfo(login) { return this.createClient(login).get(`access/info`); } async getAccessApiKey(login) { return this.createClient(login).get(`access/api_key`); } async postAccessApiKeyCreate(login) { return this.createClient(login).post(`access/api_key`); } async getDatabaseNamespaceList(login) { return this.createClient(login).get(`database/list`); } async getDatabaseNamespaceItem(login, namespace, key) { return this.createClient(login).get(`database/item?namespace=${namespace}&key=${key}`); } async postDatabaseNamespaceItem(login, namespace, key, value, typeHint) { const typeHintParam = typeHint?.length ? `:${typeHint}` : ""; return this.createClient(login).post(`database/item?namespace=${namespace}&key=${key}&value${typeHintParam}=${value}`); } async deleteDatabaseNamespaceItem(login, namespace, key) { return this.createClient(login).delete(`database/item?namespace=${namespace}&key=${key}`); } async getJobQueueStatus(login) { return this.createClient(login).get(`job_queue/status`); } async postJobQueueJob(login, filenames, reset) { return this.createClient(login).post(`job_queue/job`, { filenames, reset }); } async deleteJobQueueJob(login, jobIds, all) { const base = `job_queue/job`; const url = !!all ? `${base}?all=true` : `${base}?job_ids=${jobIds.join(",")}`; return this.createClient(login).delete(url); } async postJobQueuePause(login) { return this.createClient(login).post(`job_queue/pause`); } async postJobQueueStart(login) { return this.createClient(login).post(`job_queue/start`); } async postJobQueueJump(login, jobId) { return this.createClient(login).post(`job_queue/jump?job_id=${jobId}`); } async getAnnouncementsList(login, includeDismissed) { return this.createClient(login).get(`server/announcements/list?include_dismissed=${includeDismissed}`); } async postAnnouncementsUpdate(login) { return this.createClient(login).post(`server/announcements/update`); } async postAnnouncementsDismiss(login, entryId, wakeTime) { return this.createClient(login).post(`server/announcements/dismiss?entry_id=${encodeURIComponent(entryId)}&wake_time=${wakeTime}`); } async getAnnouncementsFeeds(login) { return this.createClient(login).get(`server/announcements/feeds`); } async postAnnouncementsFeedAdd(login, name) { return this.createClient(login).get(`server/announcements/feeds?name=${name}`); } async deleteAnnouncementsFeedRemove(login, name) { return this.createClient(login).delete(`server/announcements/feeds?name=${name}`); } async getWebcamList(login) { return this.createClient(login).get(`server/webcams/list`); } async getWebcamItem(login, uid, name) { const base = `server/webcams/get_item`; const url = !!uid?.length ? `${base}?uid=${uid}` : `${base}?name=${name}`; return this.createClient(login).get(url); } async postWebcamItemUpdate(login, webcam) { return this.createClient(login).post(`server/webcams/post_item`, webcam); } async deleteWebcamItem(login, uid, name) { const base = `server/webcams/delete_item`; const url = !!uid?.length ? `${base}?uid=${uid}` : `${base}?name=${name}`; return this.createClient(login).get(url); } async postWebcamTest(login, uid, name) { const base = `server/webcams/test`; const url = !!uid?.length ? `${base}?uid=${uid}` : `${base}?name=${name}`; return this.createClient(login).get(url); } async getNotifierList(login) { return this.createClient(login).get(`server/notifiers/list`); } async postMachineUpdateStatus(login) { return this.createClient(login).post(`machine/update/status`); } async postMachineUpdateRefresh(login, name) { const base = `machine/update/refresh`; const url = !!name ? `${base}` : `${base}?name=${name}`; return this.createClient(login).post(url); } async postMachineUpdateFull(login) { return this.createClient(login).post(`machine/update/full`); } async postMachineUpdateMoonraker(login) { return this.createClient(login).post(`machine/update/moonraker`); } async postMachineUpdateKlipper(login) { return this.createClient(login).post(`machine/update/klipper`); } async postMachineUpdateClient(login, name) { return this.createClient(login).post(`machine/update/client?name=${name}`); } async postMachineUpdateSystem(login) { return this.createClient(login).post(`machine/update/system`); } async postMachineUpdateRecover(login, name, hard = false) { return this.createClient(login).post(`machine/update/recover?name=${name}&hard=${hard}`); } async postMachineUpdateRollback(login, name) { return this.createClient(login).post(`machine/update/rollback?name=${name}`); } async getMachineDevicePowerDevices(login) { return this.createClient(login).get(`machine/device_power/devices`); } async getMachineDevicePowerDeviceState(login, device) { return this.createClient(login).get(`machine/device_power/device?device=${device}`); } async postMachineDevicePowerDeviceState(login, device, action) { return this.createClient(login).post(`machine/device_power/device?device=${device}&action=${action}`); } async getMachineDevicePowerBatchDeviceState(login, devices) { return this.createClient(login).get(`machine/device_power/status?${devices.join("&")}`); } async postMachineDevicePowerBatchPowerOn(login, device) { return this.createClient(login).post(`machine/device_power/on?device=${device}`); } async postMachineDevicePowerBatchPowerOff(login, device) { return this.createClient(login).post(`machine/device_power/off?device=${device}`); } async getMachineWledStrips(login) { return this.createClient(login).get(`machine/wled/strips`); } async getMachineWledStatuses(login, strips) { return this.createClient(login).get(`machine/wled/status?${strips.join("&")}`); } async postMachineWledPowerOn(login, strips) { return this.createClient(login).post(`machine/wled/on?${strips.join("&")}`); } async postMachineWledPowerOff(login, strips) { return this.createClient(login).post(`machine/wled/off?${strips.join("&")}`); } async postMachineWledPowerStripAction(login, strips) { return this.createClient(login).post(`machine/wled/toggle?${strips.join("&")}`); } async getMachineWledStripAction(login, strip, action, controlParams) { const queryParams = Object.entries(controlParams).map(([k, v])=>`${k}=${v}`).join("&"); return this.createClient(login).get(`machine/wled/strip?strip=${strip}&action=${action}&${queryParams}`); } async getServerSensorsList(login) { return this.createClient(login).get(`server/sensors/list`); } async getServerSensorItem(login, sensor) { return this.createClient(login).get(`server/sensors/info?sensor=${sensor}`); } async getServerSensorMeasurements(login, sensor) { return this.createClient(login).get(`server/sensors/measurements?sensor=${sensor}`); } async getServerSensorMeasurementsBatch(login) { return this.createClient(login).get(`server/sensors/measurements`); } async getServerSpoolmanStatus(login) { return this.createClient(login).get(`server/spoolman/status`); } async postServerSpoolmanActiveSpool(login, spoolId) { return this.createClient(login).post(`server/spoolman/spool_id`, { spool_id: spoolId }); } async getServerSpoolmanActiveSpool(login) { return this.createClient(login).get(`server/spoolman/spool_id`); } async postServerSpoolmanProxyRequest(login, body) { return this.createClient(login).post(`server/spoolman/proxy`, body); } async getApiVersion(login) { return this.createClient(login).get(`api/version`); } async getServerVersion(login) { return this.createClient(login).get(`api/server`); } async getApiLogin(login) { return this.createClient(login).get(`api/login`); } async getApiSettings(login) { return this.createClient(login).get(`api/settings`); } async getApiJob(login) { return this.createClient(login).get(`api/job`); } async getApiPrinter(login) { return this.createClient(login).get(`api/printer`); } async postApiPrinterCommand(login, commands) { return this.createClient(login).post(`api/command`, { commands }); } async getApiProfiles(login) { return this.createClient(login).get(`api/printerprofiles`); } async getServerHistoryList(login, limit, start, since, before, order = "desc") { let params = `limit=${limit}&start=${start}&order=${order}`; if (!!before || before === 0) { params += "&before=" + before; } if (!!since || since === 0) { params += "&since=" + since; } return this.createClient(login).get(`server/history/list?${params}`); } async getServerHistoryTotals(login) { return this.createClient(login).get(`server/history/totals`); } async postServerHistoryResetTotals(login) { return this.createClient(login).post(`server/history/reset_totals`); } async getServerHistoryJob(login, uid) { return this.createClient(login).get(`server/history/job?uid=${uid}`); } async deleteServerHistoryJob(login, uid) { const base = `server/history/job`; const url = !!uid?.length ? `${base}?uid=${uid}` : `${base}?all=true`; return this.createClient(login).get(url); } convertToQueryString(query) { return Object.entries(query).reduce((acc, [key, value])=>{ if (value.length > 0) { acc.push(`${key}=${value.join(",")}`); } else { acc.push(key); } return acc; }, []).join("&"); } createClient(login, buildFluentOptions) { const baseAddress = login.printerURL; return this.createAnonymousClient(baseAddress, (o)=>{ if (buildFluentOptions) { buildFluentOptions(o); } }); } createAnonymousClient(baseAddress, buildFluentOptions) { const builder = new _defaulthttpclientbuilder.DefaultHttpClientBuilder(); return this.httpClientFactory.createClientWithBaseUrl(builder, baseAddress, (b)=>{ if (buildFluentOptions) { buildFluentOptions(b); } }); } } //# sourceMappingURL=moonraker.client.js.map