client-BdOyoZJz.js 86 KB

1
  1. import{i as e,t}from"./chunk-aKtaBQYM.js";var n=t((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u<e.length;u++)a=e[u],s=l+j(a,u),c+=N(a,r,i,s,o);else if(u=m(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+j(a,u++),c+=N(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return N(M(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function P(e,t,n){if(e==null)return e;var r=[],i=0;return N(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function F(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var I=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)},L={map:P,forEach:function(e,t,n){P(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return P(e,function(){t++}),t},toArray:function(e){return P(e,function(e){return e})||[]},only:function(e){if(!O(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=L,e.Component=v,e.Fragment=r,e.Profiler=a,e.PureComponent=b,e.StrictMode=i,e.Suspense=l,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return w.H.useMemoCache(e)}},e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=g({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!T.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return E(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)T.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return E(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=O,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:F}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=function(e){var t=w.T,n={};w.T=n;try{var r=e(),i=w.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(C,I)}catch(e){I(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),w.T=t}},e.unstable_useCacheRefresh=function(){return w.H.useCacheRefresh()},e.use=function(e){return w.H.use(e)},e.useActionState=function(e,t,n){return w.H.useActionState(e,t,n)},e.useCallback=function(e,t){return w.H.useCallback(e,t)},e.useContext=function(e){return w.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return w.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return w.H.useEffect(e,t)},e.useEffectEvent=function(e){return w.H.useEffectEvent(e)},e.useId=function(){return w.H.useId()},e.useImperativeHandle=function(e,t,n){return w.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return w.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return w.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return w.H.useMemo(e,t)},e.useOptimistic=function(e,t){return w.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return w.H.useReducer(e,t,n)},e.useRef=function(e){return w.H.useRef(e)},e.useState=function(e){return w.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return w.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return w.H.useTransition()},e.version=`19.2.4`})),r=t(((e,t)=>{t.exports=n()})),i=e(r()),a=(e,t,n,r)=>{let i=[n,{code:t,...r||{}}];if(e?.services?.logger?.forward)return e.services.logger.forward(i,`warn`,`react-i18next::`,!0);f(i[0])&&(i[0]=`react-i18next:: ${i[0]}`),e?.services?.logger?.warn?e.services.logger.warn(...i):console?.warn&&console.warn(...i)},o={},s=(e,t,n,r)=>{f(n)&&o[n]||(f(n)&&(o[n]=new Date),a(e,t,n,r))},c=(e,t)=>()=>{if(e.isInitialized)t();else{let n=()=>{setTimeout(()=>{e.off(`initialized`,n)},0),t()};e.on(`initialized`,n)}},l=(e,t,n)=>{e.loadNamespaces(t,c(e,n))},u=(e,t,n,r)=>{if(f(n)&&(n=[n]),e.options.preload&&e.options.preload.indexOf(t)>-1)return l(e,n,r);n.forEach(t=>{e.options.ns.indexOf(t)<0&&e.options.ns.push(t)}),e.loadLanguages(t,c(e,r))},d=(e,t,n={})=>!t.languages||!t.languages.length?(s(t,`NO_LANGUAGES`,`i18n.languages were undefined or empty`,{languages:t.languages}),!0):t.hasLoadedNamespace(e,{lng:n.lng,precheck:(t,r)=>{if(n.bindI18n&&n.bindI18n.indexOf(`languageChanging`)>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}),f=e=>typeof e==`string`,p=e=>typeof e==`object`&&!!e,m=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,h={"&amp;":`&`,"&#38;":`&`,"&lt;":`<`,"&#60;":`<`,"&gt;":`>`,"&#62;":`>`,"&apos;":`'`,"&#39;":`'`,"&quot;":`"`,"&#34;":`"`,"&nbsp;":` `,"&#160;":` `,"&copy;":`©`,"&#169;":`©`,"&reg;":`®`,"&#174;":`®`,"&hellip;":`…`,"&#8230;":`…`,"&#x2F;":`/`,"&#47;":`/`},g=e=>h[e],_={bindI18n:`languageChanged`,bindI18nStore:``,transEmptyNodeValue:``,transSupportBasicHtmlNodes:!0,transWrapTextNodes:``,transKeepBasicHtmlNodesFor:[`br`,`strong`,`i`,`p`],useSuspense:!0,unescape:e=>e.replace(m,g),transDefaultProps:void 0},v=(e={})=>{_={..._,...e}},y=()=>_,b,x=e=>{b=e},S=()=>b,C={type:`3rdParty`,init(e){v(e.options.react),x(e)}},w=(0,i.createContext)(),T=class{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach(e=>{this.usedNamespaces[e]||(this.usedNamespaces[e]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}},E=t((e=>{var t=r();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:n,a=t.useState,o=t.useEffect,s=t.useLayoutEffect,c=t.useDebugValue;function l(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),i=r[0].inst,l=r[1];return s(function(){i.value=n,i.getSnapshot=t,u(i)&&l({inst:i})},[e,n,t]),o(function(){return u(i)&&l({inst:i}),e(function(){u(i)&&l({inst:i})})},[e]),c(n),n}function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!i(e,n)}catch{return!0}}function d(e,t){return t()}var f=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?d:l;e.useSyncExternalStore=t.useSyncExternalStore===void 0?f:t.useSyncExternalStore})),D=t(((e,t)=>{t.exports=E()})),O=D(),k={t:(e,t)=>f(t)?t:p(t)&&f(t.defaultValue)?t.defaultValue:Array.isArray(e)?e[e.length-1]:e,ready:!1},A=()=>()=>{},j=(e,t={})=>{let{i18n:n}=t,{i18n:r,defaultNS:a}=(0,i.useContext)(w)||{},o=n||r||S();o&&!o.reportNamespaces&&(o.reportNamespaces=new T),o||s(o,`NO_I18NEXT_INSTANCE`,`useTranslation: You will need to pass in an i18next instance by using initReactI18next`);let c=(0,i.useMemo)(()=>({...y(),...o?.options?.react,...t}),[o,t]),{useSuspense:p,keyPrefix:m}=c,h=e||a||o?.options?.defaultNS,g=f(h)?[h]:h||[`translation`],_=(0,i.useMemo)(()=>g,g);o?.reportNamespaces?.addUsedNamespaces?.(_);let v=(0,i.useRef)(0),b=(0,i.useCallback)(e=>{if(!o)return A;let{bindI18n:t,bindI18nStore:n}=c,r=()=>{v.current+=1,e()};return t&&o.on(t,r),n&&o.store.on(n,r),()=>{t&&t.split(` `).forEach(e=>o.off(e,r)),n&&n.split(` `).forEach(e=>o.store.off(e,r))}},[o,c]),x=(0,i.useRef)(),C=(0,i.useCallback)(()=>{if(!o)return k;let e=!!(o.isInitialized||o.initializedStoreOnce)&&_.every(e=>d(e,o,c)),n=t.lng||o.language,r=v.current,i=x.current;if(i&&i.ready===e&&i.lng===n&&i.keyPrefix===m&&i.revision===r)return i;let a={t:o.getFixedT(n,c.nsMode===`fallback`?_:_[0],m),ready:e,lng:n,keyPrefix:m,revision:r};return x.current=a,a},[o,_,m,c,t.lng]),[E,D]=(0,i.useState)(0),{t:j,ready:M}=(0,O.useSyncExternalStore)(b,C,C);(0,i.useEffect)(()=>{if(o&&!M&&!p){let e=()=>D(e=>e+1);t.lng?u(o,t.lng,_,e):l(o,_,e)}},[o,t.lng,_,M,p,E]);let N=o||{},P=(0,i.useRef)(null),F=(0,i.useRef)(),I=e=>{let t=Object.getOwnPropertyDescriptors(e);t.__original&&delete t.__original;let n=Object.create(Object.getPrototypeOf(e),t);if(!Object.prototype.hasOwnProperty.call(n,`__original`))try{Object.defineProperty(n,"__original",{value:e,writable:!1,enumerable:!1,configurable:!1})}catch{}return n},L=(0,i.useMemo)(()=>{let e=N,t=e?.language,n=e;e&&(P.current&&P.current.__original===e&&F.current===t?n=P.current:(n=I(e),P.current=n,F.current=t));let r=[j,n,M];return r.t=j,r.i18n=n,r.ready=M,r},[j,N,M,N.resolvedLanguage,N.language,N.languages]);if(o&&p&&!M)throw new Promise(e=>{let n=()=>e();t.lng?u(o,t.lng,_,n):l(o,_,n)});return L},M=t((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),N=t(((e,t)=>{t.exports=M()})),P=`/api/v1`,F=class extends Error{status;code;detail;constructor(e,t,n=null,r=null){super(e),this.name=`ApiError`,this.status=t,this.code=n,this.detail=r}},I=sessionStorage.getItem(`auth_token`)??localStorage.getItem(`auth_token`);function L(e,t=`session`){I=e;try{e?sessionStorage.setItem(`auth_token`,e):sessionStorage.removeItem(`auth_token`)}catch(e){console.warn(`setAuthToken: sessionStorage unavailable, token kept in-memory only`,e)}try{e?t===`persistent`&&localStorage.setItem(`auth_token`,e):localStorage.removeItem(`auth_token`)}catch(e){console.warn(`setAuthToken: localStorage operation failed`,e)}}function R(){return I}var z=null,B=null;function ee(e){z=e}function V(){return z}function H(e){B=e}function U(){return B}function W(e){return z?`${e}${e.includes(`?`)?`&`:`?`}token=${encodeURIComponent(z)}`:e}function G(e){return B?`${e}${e.includes(`?`)?`&`:`?`}token=${encodeURIComponent(B)}`:e}function K(e){if(!e)return null;let t=e.match(/filename\*=(?:UTF-8|utf-8)''(.+?)(?:;|$)/);if(t)try{return decodeURIComponent(t[1])}catch{}return e.match(/filename="?([^";\n]+)"?/)?.[1]||null}function q(e){let t=e.replace(/[/\\?#]/g,`_`);return t.toLowerCase().endsWith(`.3mf`)?t:`${t}.3mf`}async function J(e,t,n){let r={"Content-Type":`application/json`};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(`${P}${e}`,{method:`POST`,headers:r,body:JSON.stringify(t),signal:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(typeof e.detail==`string`?e.detail:`HTTP ${i.status}`)}return i.blob()}async function Y(e,t={}){let n={"Content-Type":`application/json`,...t.headers};I&&(n.Authorization=`Bearer ${I}`);let r=await fetch(`${P}${e}`,{...t,cache:`no-store`,credentials:`include`,headers:n});if(!r.ok){let e=(await r.json().catch(()=>({}))).detail,t,n=null;typeof e==`string`?t=e:Array.isArray(e)?t=e.map(e=>(e.msg??``).replace(/^Value error,\s*/i,``)).filter(Boolean).join(`; `)||JSON.stringify(e)||`HTTP ${r.status}`:e&&typeof e==`object`?(n=typeof e.code==`string`?e.code:null,t=typeof e.message==`string`?e.message:`HTTP ${r.status}`):t=`HTTP ${r.status}`;let i=e&&typeof e==`object`&&!Array.isArray(e)?e:null;throw r.status===401&&[`Could not validate credentials`,`Token has expired`,`User not found or inactive`,`Invalid API key`,`API key has expired`].some(e=>t.includes(e))&&(L(null),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`auth:expired`))),new F(t,r.status,n,i)}let i=r.headers.get(`content-length`);if(!(r.status===204||i===`0`))return await r.json()}async function X(e,t){let n=new FormData;n.append(`file`,e);let r={};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(`${P}/inventory/spools/import${t?`?dry_run=true`:``}`,{method:`POST`,headers:r,body:n});if(!i.ok){let e=(await i.json().catch(()=>({})))?.detail,t=typeof e==`string`?e:e?.message;throw Error(t||`HTTP ${i.status}`)}return i.json()}var Z=[`brand`,`material`,`hex`,`name`,`location`,`material_number`,`temps`,`weight`,`note`,`added`,`qr`,`spool_id`],Q=[`brand`,`material`,`hex`,`name`,`location`,`qr`,`spool_id`],te={getOverlayLogo:async(e,t)=>{let n=e?`/overlay-branding/logo?token=${encodeURIComponent(e)}`:`/settings/overlay-logo`,r=await fetch(`${P}${n}`,{signal:t,cache:`no-store`,headers:!e&&I?{Authorization:`Bearer ${I}`}:{}});if(r.status===404)return null;if(!r.ok)throw Error(`HTTP ${r.status}`);return r.blob()},uploadOverlayLogo:async e=>{let t=new FormData;t.append(`file`,e);let n=await fetch(`${P}/settings/overlay-logo`,{method:`POST`,body:t,headers:I?{Authorization:`Bearer ${I}`}:{}});if(!n.ok){let e=(await n.json().catch(()=>({})))?.detail,t=typeof e==`string`?e:e?.message;throw Error(typeof t==`string`&&t?t:`HTTP ${n.status}`)}},deleteOverlayLogo:()=>Y(`/settings/overlay-logo`,{method:`DELETE`}),getAuthStatus:()=>Y(`/auth/status`),setupAuth:e=>Y(`/auth/setup`,{method:`POST`,body:JSON.stringify(e)}),login:e=>Y(`/auth/login`,{method:`POST`,body:JSON.stringify(e)}),logout:()=>Y(`/auth/logout`,{method:`POST`}),getCurrentUser:()=>Y(`/auth/me`),disableAuth:()=>Y(`/auth/disable`,{method:`POST`}),testSMTP:e=>Y(`/auth/smtp/test`,{method:`POST`,body:JSON.stringify(e)}),getSMTPSettings:()=>Y(`/auth/smtp`),saveSMTPSettings:e=>Y(`/auth/smtp`,{method:`POST`,body:JSON.stringify(e)}),enableAdvancedAuth:()=>Y(`/auth/advanced-auth/enable`,{method:`POST`}),disableAdvancedAuth:()=>Y(`/auth/advanced-auth/disable`,{method:`POST`}),getAdvancedAuthStatus:()=>Y(`/auth/advanced-auth/status`),getLDAPStatus:()=>Y(`/auth/ldap/status`),getEncryptionStatus:()=>Y(`/auth/encryption-status`),testLDAP:()=>Y(`/auth/ldap/test`,{method:`POST`}),searchLDAPDirectory:e=>Y(`/auth/ldap/search?q=${encodeURIComponent(e)}`),provisionLDAPUser:e=>Y(`/auth/ldap/provision`,{method:`POST`,body:JSON.stringify({username:e})}),forgotPassword:e=>Y(`/auth/forgot-password`,{method:`POST`,body:JSON.stringify(e)}),forgotPasswordConfirm:(e,t)=>Y(`/auth/forgot-password/confirm`,{method:`POST`,body:JSON.stringify({token:e,new_password:t})}),resetUserPassword:e=>Y(`/auth/reset-password`,{method:`POST`,body:JSON.stringify(e)}),get2FAStatus:()=>Y(`/auth/2fa/status`),setupTOTP:()=>Y(`/auth/2fa/totp/setup`,{method:`POST`}),enableTOTP:e=>Y(`/auth/2fa/totp/enable`,{method:`POST`,body:JSON.stringify({code:e})}),disableTOTP:e=>Y(`/auth/2fa/totp/disable`,{method:`POST`,body:JSON.stringify({code:e})}),regenerateBackupCodes:e=>Y(`/auth/2fa/totp/regenerate-backup-codes`,{method:`POST`,body:JSON.stringify({code:e})}),enableEmailOTP:()=>Y(`/auth/2fa/email/enable`,{method:`POST`}),confirmEnableEmailOTP:(e,t)=>Y(`/auth/2fa/email/enable/confirm`,{method:`POST`,body:JSON.stringify({setup_token:e,code:t})}),disableEmailOTP:e=>Y(`/auth/2fa/email/disable`,{method:`POST`,body:JSON.stringify({password:e})}),sendEmailOTP:e=>Y(`/auth/2fa/email/send`,{method:`POST`,body:JSON.stringify({pre_auth_token:e})}),verify2FA:e=>Y(`/auth/2fa/verify`,{method:`POST`,body:JSON.stringify(e)}),admin2FADisable:e=>Y(`/auth/2fa/admin/${e}`,{method:`DELETE`}),getOIDCProviders:()=>Y(`/auth/oidc/providers`),getOIDCProvidersAll:()=>Y(`/auth/oidc/providers/all`),createOIDCProvider:e=>Y(`/auth/oidc/providers`,{method:`POST`,body:JSON.stringify(e)}),updateOIDCProvider:(e,t)=>Y(`/auth/oidc/providers/${e}`,{method:`PUT`,body:JSON.stringify(t)}),deleteOIDCProvider:e=>Y(`/auth/oidc/providers/${e}`,{method:`DELETE`}),oidcProviderIconUrl:e=>`/api/v1/auth/oidc/providers/${e}/icon`,deleteOIDCProviderIcon:e=>Y(`/auth/oidc/providers/${e}/icon`,{method:`DELETE`}),refreshOIDCProviderIcon:e=>Y(`/auth/oidc/providers/${e}/icon/refresh`,{method:`POST`}),getOIDCAuthorizeUrl:e=>Y(`/auth/oidc/authorize/${e}`),exchangeOIDCToken:e=>Y(`/auth/oidc/exchange`,{method:`POST`,body:JSON.stringify({oidc_token:e})}),getOIDCLinks:()=>Y(`/auth/oidc/links`),deleteOIDCLink:e=>Y(`/auth/oidc/links/${e}`,{method:`DELETE`}),getUsers:()=>Y(`/users/`),getUsersSlim:()=>Y(`/users/slim`),getUser:e=>Y(`/users/${e}`),createUser:e=>Y(`/users/`,{method:`POST`,body:JSON.stringify(e)}),updateUser:(e,t)=>Y(`/users/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteUser:(e,t=!1)=>Y(`/users/${e}?delete_items=${t}`,{method:`DELETE`}),getUserItemsCount:e=>Y(`/users/${e}/items-count`),changePassword:(e,t)=>Y(`/users/me/change-password`,{method:`POST`,body:JSON.stringify({current_password:e,new_password:t})}),getUserEmailPreferences:()=>Y(`/user-notifications/preferences`),updateUserEmailPreferences:e=>Y(`/user-notifications/preferences`,{method:`PUT`,body:JSON.stringify(e)}),getPermissions:()=>Y(`/groups/permissions`),getGroups:()=>Y(`/groups/`),getGroup:e=>Y(`/groups/${e}`),createGroup:e=>Y(`/groups/`,{method:`POST`,body:JSON.stringify(e)}),updateGroup:(e,t)=>Y(`/groups/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteGroup:e=>Y(`/groups/${e}`,{method:`DELETE`}),addUserToGroup:(e,t)=>Y(`/groups/${e}/users/${t}`,{method:`POST`}),removeUserFromGroup:(e,t)=>Y(`/groups/${e}/users/${t}`,{method:`DELETE`}),getPrinters:()=>Y(`/printers/`),getPrinter:e=>Y(`/printers/${e}`),createPrinter:e=>Y(`/printers/`,{method:`POST`,body:JSON.stringify(e)}),updatePrinter:(e,t)=>Y(`/printers/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deletePrinter:(e,t=!0)=>Y(`/printers/${e}?delete_archives=${t}`,{method:`DELETE`}),getDeveloperModeWarnings:()=>Y(`/printers/developer-mode-warnings`),getAvailableFilaments:(e,t)=>{let n=new URLSearchParams({model:e});return t&&n.set(`location`,t),Y(`/printers/available-filaments?${n}`)},getPrinterLocations:()=>Y(`/printer-locations/`),createPrinterLocation:e=>Y(`/printer-locations/`,{method:`POST`,body:JSON.stringify(e)}),updatePrinterLocation:e=>Y(`/printer-locations/`,{method:`PATCH`,body:JSON.stringify(e)}),deletePrinterLocations:e=>Y(`/printer-locations/delete`,{method:`POST`,body:JSON.stringify({names:e})}),assignPrinterLocation:(e,t)=>Y(`/printer-locations/assign`,{method:`POST`,body:JSON.stringify({printer_ids:e,location:t})}),getPrinterStatus:e=>Y(`/printers/${e}/status`),refreshPrinterStatus:e=>Y(`/printers/${e}/refresh-status`,{method:`POST`}),connectPrinter:e=>Y(`/printers/${e}/connect`,{method:`POST`}),disconnectPrinter:e=>Y(`/printers/${e}/disconnect`,{method:`POST`}),testExternalCamera:(e,t,n)=>Y(`/printers/${e}/camera/external/test?url=${encodeURIComponent(t)}&camera_type=${encodeURIComponent(n)}`,{method:`POST`}),stopPrint:e=>Y(`/printers/${e}/print/stop`,{method:`POST`}),pausePrint:e=>Y(`/printers/${e}/print/pause`,{method:`POST`}),resumePrint:e=>Y(`/printers/${e}/print/resume`,{method:`POST`}),clearPlate:e=>Y(`/printers/${e}/clear-plate`,{method:`POST`}),getCurrentPrintUser:e=>Y(`/printers/${e}/current-print-user`),setPrintSpeed:(e,t)=>Y(`/printers/${e}/print-speed?mode=${t}`,{method:`POST`}),setNozzleTemperature:(e,t,n=0)=>Y(`/printers/${e}/temperature/nozzle?target=${t}&nozzle=${n}`,{method:`POST`}),setBedTemperature:(e,t)=>Y(`/printers/${e}/temperature/bed?target=${t}`,{method:`POST`}),setChamberTemperature:(e,t)=>Y(`/printers/${e}/temperature/chamber?target=${t}`,{method:`POST`}),setFanSpeed:(e,t,n)=>Y(`/printers/${e}/fan-speed?fan=${t}&speed=${n}`,{method:`POST`}),selectExtruder:(e,t)=>Y(`/printers/${e}/select-extruder?extruder=${t}`,{method:`POST`}),setAirductMode:(e,t)=>Y(`/printers/${e}/airduct-mode?mode=${t}`,{method:`POST`}),bedJog:(e,t)=>Y(`/printers/${e}/bed-jog?distance=${t}`,{method:`POST`}),xyJog:(e,t,n)=>Y(`/printers/${e}/xy-jog?x=${t}&y=${n}`,{method:`POST`}),extruderJog:(e,t)=>Y(`/printers/${e}/extruder-jog?distance=${t}`,{method:`POST`}),homeAxes:(e,t=`z`)=>Y(`/printers/${e}/home-axes?axes=${t}`,{method:`POST`}),setChamberLight:(e,t)=>Y(`/printers/${e}/chamber-light?on=${t}`,{method:`POST`}),startDrying:(e,t,n,r,i=``,a=!1)=>Y(`/printers/${e}/drying/start?ams_id=${t}&temp=${n}&duration=${r}&filament=${encodeURIComponent(i)}&rotate_tray=${a}`,{method:`POST`}),stopDrying:(e,t)=>Y(`/printers/${e}/drying/stop?ams_id=${t}`,{method:`POST`}),createScheduledDrying:e=>Y(`/scheduled-dryings`,{method:`POST`,body:JSON.stringify(e)}),listScheduledDryings:e=>Y(e===void 0?`/scheduled-dryings`:`/scheduled-dryings?printer_id=${e}`),cancelScheduledDrying:e=>Y(`/scheduled-dryings/${e}`,{method:`DELETE`}),setAmsFilamentBackup:(e,t)=>Y(`/printers/${e}/ams-backup?enabled=${t}`,{method:`POST`}),getInventoryRemain:e=>Y(`/printers/${e}/inventory-remain`),getPrintableObjects:e=>Y(`/printers/${e}/print/objects`),skipObjects:(e,t)=>Y(`/printers/${e}/print/skip-objects`,{method:`POST`,body:JSON.stringify(t)}),clearHMSErrors:e=>Y(`/printers/${e}/hms/clear`,{method:`POST`}),executeHMSAction:(e,t)=>Y(`/printers/${e}/hms/execute-action`,{method:`POST`,body:JSON.stringify(t)}),refreshAmsSlot:(e,t,n)=>Y(`/printers/${e}/ams/${t}/slot/${n}/refresh`,{method:`POST`}),loadAmsTray:(e,t,n)=>Y(`/printers/${e}/ams/load?tray_id=${t}`+(n===void 0?``:`&extruder_id=${n}`),{method:`POST`}),unloadAms:(e,t)=>Y(`/printers/${e}/ams/unload`+(t===void 0?``:`?tray_id=${t}`),{method:`POST`}),enableMQTTLogging:e=>Y(`/printers/${e}/logging/enable`,{method:`POST`}),disableMQTTLogging:e=>Y(`/printers/${e}/logging/disable`,{method:`POST`}),getMQTTLogs:e=>Y(`/printers/${e}/logging`),clearMQTTLogs:e=>Y(`/printers/${e}/logging`,{method:`DELETE`}),getPrinterFiles:(e,t=`/`)=>Y(`/printers/${e}/files?path=${encodeURIComponent(t)}`),getPrinterFileDownloadUrl:(e,t)=>`${P}/printers/${e}/files/download?path=${encodeURIComponent(t)}`,getPrinterFileGcodeUrl:(e,t)=>`${P}/printers/${e}/files/gcode?path=${encodeURIComponent(t)}`,getPrinterFilePlates:(e,t)=>Y(`/printers/${e}/files/plates?path=${encodeURIComponent(t)}`),getPrinterFilePlateThumbnail:(e,t,n)=>G(`${P}/printers/${e}/files/plate-thumbnail/${t}?path=${encodeURIComponent(n)}`),downloadPrinterFilesAsZip:async(e,t,n,r=`printer-files.zip`,i=!0,a,o)=>{let s=null;try{if(a?.aborted)throw new DOMException(`Download cancelled`,`AbortError`);let c=await Y(`/printers/${e}/files/download-job`,{method:`POST`,body:JSON.stringify({paths:t,sizes:n,filename:r,as_zip:i}),signal:a});s=c.job_id;let l=0;for(;c.state===`queued`||c.state===`preparing`;){o?.(c.successful+c.failed,c.requested);let t=l<10?500:2e3;l+=1,await new Promise((e,n)=>{if(a?.aborted){n(new DOMException(`Download cancelled`,`AbortError`));return}let r=()=>{window.clearTimeout(i),n(new DOMException(`Download cancelled`,`AbortError`))},i=window.setTimeout(()=>{a?.removeEventListener(`abort`,r),e()},t);a?.addEventListener(`abort`,r,{once:!0})}),c=await Y(`/printers/${e}/files/download-jobs/${s}`,{signal:a})}if(o?.(c.successful+c.failed,c.requested),c.state!==`ready`||!c.token)throw Error(c.message||(c.state===`cancelled`?`Download cancelled`:`Printer download preparation failed`));let u=document.createElement(`a`);return u.href=`${P}/printers/${e}/files/dl/${encodeURIComponent(c.token)}/${encodeURIComponent(r)}`,u.download=r,document.body.appendChild(u),u.click(),u.remove(),{requested:c.requested,successful:c.successful,failed:c.failed}}catch(t){throw s&&await Y(`/printers/${e}/files/download-jobs/${s}`,{method:`DELETE`}).catch(()=>void 0),t}},deletePrinterFile:(e,t)=>Y(`/printers/${e}/files?path=${encodeURIComponent(t)}`,{method:`DELETE`}),getPrinterStorage:e=>Y(`/printers/${e}/storage`),getArchives:(e,t,n=1e4,r=0,i,a)=>{let o=new URLSearchParams;return e&&o.set(`printer_id`,String(e)),t&&o.set(`project_id`,String(t)),o.set(`limit`,String(n)),o.set(`offset`,String(r)),i&&o.set(`date_from`,i),a&&o.set(`date_to`,a),Y(`/archives/?${o}`)},getArchivesSlim:(e,t,n)=>{let r=new URLSearchParams;e&&r.set(`date_from`,e),t&&r.set(`date_to`,t),n!==void 0&&r.set(`created_by_id`,String(n));let i=r.toString();return Y(`/archives/slim${i?`?${i}`:``}`)},getArchive:e=>Y(`/archives/${e}`),getArchiveRuns:e=>Y(`/archives/${e}/runs`),getArchiveDeleteImpact:e=>Y(`/archives/${e}/delete-impact`),searchArchives:(e,t)=>{let n=new URLSearchParams;return n.set(`q`,e),t?.printerId&&n.set(`printer_id`,String(t.printerId)),t?.projectId&&n.set(`project_id`,String(t.projectId)),t?.status&&n.set(`status`,t.status),t?.limit&&n.set(`limit`,String(t.limit)),t?.offset&&n.set(`offset`,String(t.offset)),Y(`/archives/search?${n}`)},rebuildSearchIndex:()=>Y(`/archives/search/rebuild-index`,{method:`POST`}),getNo3MFWarning:()=>Y(`/archives/no-3mf-warning`),updateArchive:(e,t)=>Y(`/archives/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),toggleFavorite:e=>Y(`/archives/${e}/favorite`,{method:`POST`}),deleteArchive:(e,t=!1)=>Y(`/archives/${e}${t?`?purge_stats=true`:``}`,{method:`DELETE`}),previewArchivePurge:(e,t=!1)=>Y(`/archives/purge/preview?older_than_days=${e}&purge_stats=${t}`),executeArchivePurge:(e,t=!1)=>Y(`/archives/purge`,{method:`POST`,body:JSON.stringify({older_than_days:e,purge_stats:t})}),getArchivePurgeSettings:()=>Y(`/archives/purge/settings`),updateArchivePurgeSettings:e=>Y(`/archives/purge/settings`,{method:`PUT`,body:JSON.stringify(e)}),getArchiveStats:e=>{let t=new URLSearchParams;e?.dateFrom&&t.set(`date_from`,e.dateFrom),e?.dateTo&&t.set(`date_to`,e.dateTo),e?.createdById!==void 0&&t.set(`created_by_id`,String(e.createdById));let n=t.toString();return Y(`/archives/stats${n?`?${n}`:``}`)},getTags:()=>Y(`/archives/tags`),renameTag:(e,t)=>Y(`/archives/tags/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify({new_name:t})}),deleteTag:e=>Y(`/archives/tags/${encodeURIComponent(e)}`,{method:`DELETE`}),recalculateCosts:()=>Y(`/archives/recalculate-costs`,{method:`POST`}),getFailureAnalysis:e=>{let t=new URLSearchParams;e?.days&&t.set(`days`,String(e.days)),e?.dateFrom&&t.set(`date_from`,e.dateFrom),e?.dateTo&&t.set(`date_to`,e.dateTo),e?.printerId&&t.set(`printer_id`,String(e.printerId)),e?.projectId&&t.set(`project_id`,String(e.projectId)),e?.createdById!==void 0&&t.set(`created_by_id`,String(e.createdById));let n=t.toString();return Y(`/archives/analysis/failures${n?`?${n}`:``}`)},compareArchives:e=>Y(`/archives/compare?archive_ids=${e.join(`,`)}`),findSimilarArchives:(e,t=10)=>Y(`/archives/${e}/similar?limit=${t}`),exportArchives:async e=>{let t=new URLSearchParams;e?.format&&t.set(`format`,e.format),e?.fields&&t.set(`fields`,e.fields.join(`,`)),e?.printerId&&t.set(`printer_id`,String(e.printerId)),e?.projectId&&t.set(`project_id`,String(e.projectId)),e?.status&&t.set(`status`,e.status),e?.dateFrom&&t.set(`date_from`,e.dateFrom),e?.dateTo&&t.set(`date_to`,e.dateTo),e?.search&&t.set(`search`,e.search);let n={};I&&(n.Authorization=`Bearer ${I}`);let r=await fetch(`${P}/archives/export?${t}`,{headers:n});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.detail||`HTTP ${r.status}`)}let i=r.headers.get(`Content-Disposition`),a=e?.format===`xlsx`?`archives_export.xlsx`:`archives_export.csv`;if(i){let e=i.match(/filename="?([^"]+)"?/);e&&(a=e[1])}return{blob:await r.blob(),filename:a}},exportStats:async e=>{let t=new URLSearchParams;e?.format&&t.set(`format`,e.format),e?.days&&t.set(`days`,String(e.days)),e?.printerId&&t.set(`printer_id`,String(e.printerId)),e?.projectId&&t.set(`project_id`,String(e.projectId)),e?.createdById!==void 0&&t.set(`created_by_id`,String(e.createdById));let n={};I&&(n.Authorization=`Bearer ${I}`);let r=await fetch(`${P}/archives/stats/export?${t}`,{headers:n});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.detail||`HTTP ${r.status}`)}let i=r.headers.get(`Content-Disposition`),a=e?.format===`xlsx`?`stats_export.xlsx`:`stats_export.csv`;if(i){let e=i.match(/filename="?([^"]+)"?/);e&&(a=e[1])}return{blob:await r.blob(),filename:a}},getArchiveDuplicates:e=>Y(`/archives/${e}/duplicates`),backfillContentHashes:()=>Y(`/archives/backfill-hashes`,{method:`POST`}),getArchiveThumbnail:e=>G(`${P}/archives/${e}/thumbnail?v=${Date.now()}`),getArchivePlateThumbnail:(e,t)=>G(`${P}/archives/${e}/plate-thumbnail/${t}`),getArchiveDownload:e=>`${P}/archives/${e}/download`,downloadArchive:async(e,t)=>{let n={};I&&(n.Authorization=`Bearer ${I}`);let r=await fetch(`${P}/archives/${e}/download`,{headers:n});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.detail||`HTTP ${r.status}`)}let i=K(r.headers.get(`Content-Disposition`))||t||`archive_${e}.3mf`,a=await r.blob(),o=window.URL.createObjectURL(a),s=document.createElement(`a`);s.href=o,s.download=i,document.body.appendChild(s),s.click(),document.body.removeChild(s),window.URL.revokeObjectURL(o)},getArchiveGcode:e=>`${P}/archives/${e}/gcode`,getArchivePlatePreview:e=>G(`${P}/archives/${e}/plate-preview`),getArchiveTimelapse:e=>G(`${P}/archives/${e}/timelapse?v=${Date.now()}`),downloadArchiveTimelapse:async(e,t)=>{let n=await Y(`/archives/${e}/media-download-token`,{method:`POST`}),r=document.createElement(`a`);r.href=`${P}/archives/${e}/media/dl/${encodeURIComponent(n.token)}/${encodeURIComponent(t)}`,r.download=t,document.body.appendChild(r),r.click(),r.remove()},getArchivePrinterMedia:e=>Y(`/archives/${e}/printer-media`),scanArchiveTimelapse:e=>Y(`/archives/${e}/timelapse/scan`,{method:`POST`}),selectArchiveTimelapse:(e,t)=>Y(`/archives/${e}/timelapse/select?filename=${encodeURIComponent(t)}`,{method:`POST`}),deleteArchiveTimelapse:e=>Y(`/archives/${e}/timelapse`,{method:`DELETE`}),uploadArchiveTimelapse:async(e,t)=>{let n=new FormData;n.append(`file`,t);let r={};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(`${P}/archives/${e}/timelapse/upload`,{method:`POST`,headers:r,body:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.detail||`HTTP ${i.status}`)}return i.json()},getTimelapseInfo:e=>Y(`/archives/${e}/timelapse/info`),getTimelapseThumbnails:(e,t=10)=>Y(`/archives/${e}/timelapse/thumbnails?count=${t}`),processTimelapse:async(e,t,n)=>{let r=new FormData;r.append(`trim_start`,String(t.trimStart??0)),t.trimEnd!==void 0&&r.append(`trim_end`,String(t.trimEnd)),r.append(`speed`,String(t.speed??1)),r.append(`save_mode`,t.saveMode),t.outputFilename&&r.append(`output_filename`,t.outputFilename),n&&r.append(`audio`,n);let i={};I&&(i.Authorization=`Bearer ${I}`);let a=await fetch(`${P}/archives/${e}/timelapse/process`,{method:`POST`,headers:i,body:r});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.detail||`HTTP ${a.status}`)}return a.json()},getArchivePhotoUrl:(e,t)=>G(`${P}/archives/${e}/photos/${encodeURIComponent(t)}`),uploadArchivePhoto:async(e,t)=>{let n=new FormData;n.append(`file`,t);let r={};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(`${P}/archives/${e}/photos`,{headers:r,method:`POST`,body:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.detail||`HTTP ${i.status}`)}return i.json()},deleteArchivePhoto:(e,t)=>Y(`/archives/${e}/photos/${encodeURIComponent(t)}`,{method:`DELETE`}),getSource3mfDownloadUrl:e=>`${P}/archives/${e}/source`,downloadSource3mf:async e=>{let t={};I&&(t.Authorization=`Bearer ${I}`);let n=await fetch(`${P}/archives/${e}/source`,{headers:t});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.detail||`HTTP ${n.status}`)}let r=K(n.headers.get(`Content-Disposition`))||`source_${e}.3mf`,i=await n.blob(),a=window.URL.createObjectURL(i),o=document.createElement(`a`);o.href=a,o.download=r,document.body.appendChild(o),o.click(),document.body.removeChild(o),window.URL.revokeObjectURL(a)},getSource3mfForSlicer:(e,t)=>{let n=t.replace(/[/\\?#]/g,`_`);return`${P}/archives/${e}/source/${encodeURIComponent(n.endsWith(`.3mf`)?n:n+`.3mf`)}`},createSourceSlicerToken:e=>Y(`/archives/${e}/source-slicer-token`,{method:`POST`}),getSourceSlicerDownloadUrl:(e,t,n)=>{let r=n.replace(/[/\\?#]/g,`_`);return`${P}/archives/${e}/source-dl/${t}/${encodeURIComponent(r.endsWith(`.3mf`)?r:r+`.3mf`)}`},uploadSource3mf:async(e,t)=>{let n=new FormData;n.append(`file`,t);let r={};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(`${P}/archives/${e}/source`,{method:`POST`,headers:r,body:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.detail||`HTTP ${i.status}`)}return i.json()},deleteSource3mf:e=>Y(`/archives/${e}/source`,{method:`DELETE`}),getF3dDownloadUrl:e=>`${P}/archives/${e}/f3d`,downloadF3d:async e=>{let t={};I&&(t.Authorization=`Bearer ${I}`);let n=await fetch(`${P}/archives/${e}/f3d`,{headers:t});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.detail||`HTTP ${n.status}`)}let r=K(n.headers.get(`Content-Disposition`))||`archive_${e}.f3d`,i=await n.blob(),a=window.URL.createObjectURL(i),o=document.createElement(`a`);o.href=a,o.download=r,document.body.appendChild(o),o.click(),document.body.removeChild(o),window.URL.revokeObjectURL(a)},uploadF3d:async(e,t)=>{let n=new FormData;n.append(`file`,t);let r={};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(`${P}/archives/${e}/f3d`,{method:`POST`,headers:r,body:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.detail||`HTTP ${i.status}`)}return i.json()},deleteF3d:e=>Y(`/archives/${e}/f3d`,{method:`DELETE`}),getArchiveQRCodeUrl:(e,t=200)=>G(`${P}/archives/${e}/qrcode?size=${t}`),getArchiveCapabilities:e=>Y(`/archives/${e}/capabilities`),getArchiveProjectPage:e=>Y(`/archives/${e}/project-page`),updateArchiveProjectPage:(e,t)=>Y(`/archives/${e}/project-page`,{method:`PATCH`,body:JSON.stringify(t)}),getArchiveProjectImageUrl:(e,t)=>G(`${P}/archives/${e}/project-image/${encodeURIComponent(t)}`),getArchiveForSlicer:(e,t)=>{let n=t.replace(/[/\\?#]/g,`_`);return`${P}/archives/${e}/file/${encodeURIComponent(n.endsWith(`.3mf`)?n:n+`.3mf`)}`},createArchiveSlicerToken:e=>Y(`/archives/${e}/slicer-token`,{method:`POST`}),getArchiveSlicerDownloadUrl:(e,t,n)=>{let r=n.replace(/[/\\?#]/g,`_`);return`${P}/archives/${e}/dl/${t}/${encodeURIComponent(r.endsWith(`.3mf`)?r:r+`.3mf`)}`},getArchivePlates:e=>Y(`/archives/${e}/plates`),getArchiveFilamentRequirements:(e,t,n,r)=>{let i=new URLSearchParams;return t!==void 0&&i.set(`plate_id`,String(t)),n&&i.set(`request_id`,n),r&&i.set(`full_slots`,`true`),Y(`/archives/${e}/filament-requirements${i.toString()?`?${i}`:``}`)},uploadArchive:async(e,t)=>{let n=new FormData;n.append(`file`,e);let r=t?`${P}/archives/upload?printer_id=${t}`:`${P}/archives/upload`,i={};I&&(i.Authorization=`Bearer ${I}`);let a=await fetch(r,{method:`POST`,headers:i,body:n});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.detail||`HTTP ${a.status}`)}return a.json()},uploadArchivesBulk:async(e,t)=>{let n=new FormData;e.forEach(e=>n.append(`files`,e));let r=t?`${P}/archives/upload-bulk?printer_id=${t}`:`${P}/archives/upload-bulk`,i={};I&&(i.Authorization=`Bearer ${I}`);let a=await fetch(r,{method:`POST`,headers:i,body:n});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.detail||`HTTP ${a.status}`)}return a.json()},getPrintLog:e=>{let t=new URLSearchParams;return e?.search&&t.set(`search`,e.search),e?.printerId&&t.set(`printer_id`,String(e.printerId)),e?.username&&t.set(`created_by_username`,e.username),e?.status&&t.set(`status`,e.status),e?.dateFrom&&t.set(`date_from`,e.dateFrom),e?.dateTo&&t.set(`date_to`,e.dateTo),e?.limit&&t.set(`limit`,String(e.limit)),e?.offset!==void 0&&t.set(`offset`,String(e.offset)),e?.sortBy&&t.set(`sort_by`,e.sortBy),e?.sortDir&&t.set(`sort_dir`,e.sortDir),Y(`/print-log/?${t}`)},getPrintLogThumbnail:e=>G(`${P}/print-log/${e}/thumbnail`),clearPrintLog:()=>Y(`/print-log/`,{method:`DELETE`}),deletePrintLogEntry:e=>Y(`/print-log/${e}`,{method:`DELETE`}),updatePrintLogEntry:(e,t)=>Y(`/print-log/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),getSettings:()=>Y(`/settings/`),getDefaultSidebarOrder:()=>Y(`/settings/default-sidebar-order`),getUiPreferences:()=>Y(`/settings/ui-preferences`),getUiFlags:()=>Y(`/settings/ui-flags`),updateSettings:e=>Y(`/settings/`,{method:`PUT`,body:JSON.stringify(e)}),getMQTTStatus:()=>Y(`/settings/mqtt/status`),resetSettings:()=>Y(`/settings/reset`,{method:`POST`}),exportBackup:async()=>{let e=`${P}/settings/backup`,t={};I&&(t.Authorization=`Bearer ${I}`);let n=await fetch(e,{headers:t});if(!n.ok){let e=await n.text();throw Error(e||`Backup failed with status ${n.status}`)}let r=n.headers.get(`Content-Disposition`),i=`bambuddy-backup.zip`;if(r){let e=r.match(/filename=([^;]+)/);e&&(i=e[1].trim().replace(/^"(.*)"$/,`$1`))}return{blob:await n.blob(),filename:i}},importBackup:async e=>{let t=new FormData;t.append(`file`,e);let n=`${P}/settings/restore`,r={};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(n,{method:`POST`,headers:r,body:t}),a=await i.json().catch(()=>null);return i.ok?a??{success:!1,message:``}:{success:!1,message:a?.detail??a?.message??``}},checkFfmpeg:()=>Y(`/settings/check-ffmpeg`),getNetworkInterfaces:()=>Y(`/settings/network-interfaces`),getCloudStatus:()=>Y(`/cloud/status`),cloudLogin:(e,t,n=`global`)=>Y(`/cloud/login`,{method:`POST`,body:JSON.stringify({email:e,password:t,region:n})}),cloudVerify:(e,t,n,r=`global`)=>Y(`/cloud/verify`,{method:`POST`,body:JSON.stringify({email:e,code:t,tfa_key:n,region:r})}),cloudSetToken:(e,t=`global`)=>Y(`/cloud/token`,{method:`POST`,body:JSON.stringify({access_token:e,region:t})}),cloudLogout:()=>Y(`/cloud/logout`,{method:`POST`}),orcaCloudDeviceStart:()=>Y(`/orca-cloud/device/start`,{method:`POST`}),orcaCloudDevicePoll:()=>Y(`/orca-cloud/device/poll`,{method:`POST`}),orcaCloudStatus:()=>Y(`/orca-cloud/status`),orcaCloudLogout:()=>Y(`/orca-cloud/logout`,{method:`POST`}),orcaCloudListProfiles:()=>Y(`/orca-cloud/profiles`),orcaCloudGetProfile:e=>Y(`/orca-cloud/profiles/${e}`),getCloudSettings:(e=`02.04.00.70`)=>Y(`/cloud/settings?version=${e}`),getBuiltinFilaments:()=>Y(`/cloud/builtin-filaments`),getFilamentIdMap:()=>Y(`/cloud/filament-id-map`),getColorByMaterial:(e,t)=>{let n=new URLSearchParams({hex:e});return t&&n.set(`material`,t),Y(`/inventory/colors/by-material?${n.toString()}`)},getMakerworldStatus:()=>Y(`/makerworld/status`),resolveMakerworldUrl:e=>Y(`/makerworld/resolve`,{method:`POST`,body:JSON.stringify({url:e})}),getMakerworldRecentImports:(e=10)=>Y(`/makerworld/recent-imports?limit=${e}`),importMakerworldInstance:(e,t,n,r)=>Y(`/makerworld/import`,{method:`POST`,body:JSON.stringify({model_id:e,instance_id:t??null,profile_id:n??null,folder_id:r??null})}),getManyfoldConfig:()=>Y(`/manyfold/config`),updateManyfoldConfig:e=>Y(`/manyfold/config`,{method:`PUT`,body:JSON.stringify(e)}),deleteManyfoldConfig:()=>Y(`/manyfold/config`,{method:`DELETE`}),testManyfoldConfig:e=>Y(`/manyfold/config/test`,{method:`POST`,body:JSON.stringify(e)}),getManyfoldStatus:()=>Y(`/manyfold/status`),listManyfoldModels:(e,t)=>{let n=new URLSearchParams({page:String(t)});return e&&n.set(`q`,e),Y(`/manyfold/models?${n.toString()}`)},getManyfoldModel:e=>Y(`/manyfold/models/${encodeURIComponent(e)}`),getManyfoldPreview:async e=>{let t={};I&&(t.Authorization=`Bearer ${I}`);let n=await fetch(`${P}/manyfold/models/${encodeURIComponent(e)}/preview`,{headers:t});return n.ok?n.blob():null},importManyfoldFile:(e,t,n)=>Y(`/manyfold/import`,{method:`POST`,body:JSON.stringify({model_id:e,file_id:t,folder_id:n})}),getCloudSettingDetail:e=>Y(`/cloud/settings/${e}`),createCloudSetting:e=>Y(`/cloud/settings`,{method:`POST`,body:JSON.stringify(e)}),updateCloudSetting:(e,t)=>Y(`/cloud/settings/${e}`,{method:`PUT`,body:JSON.stringify(t)}),deleteCloudSetting:e=>Y(`/cloud/settings/${e}`,{method:`DELETE`}),getCloudDevices:()=>Y(`/cloud/devices`),getCloudFields:e=>Y(`/cloud/fields/${e}`),getAllCloudFields:()=>Y(`/cloud/fields`),getFilamentInfo:e=>Y(`/cloud/filament-info`,{method:`POST`,body:JSON.stringify(e)}),getSmartPlugs:()=>Y(`/smart-plugs/`),getSmartPlug:e=>Y(`/smart-plugs/${e}`),getSmartPlugByPrinter:e=>Y(`/smart-plugs/by-printer/${e}`),getScriptPlugsByPrinter:e=>Y(`/smart-plugs/by-printer/${e}/scripts`),createSmartPlug:e=>Y(`/smart-plugs/`,{method:`POST`,body:JSON.stringify(e)}),updateSmartPlug:(e,t)=>Y(`/smart-plugs/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteSmartPlug:e=>Y(`/smart-plugs/${e}`,{method:`DELETE`}),controlSmartPlug:(e,t)=>Y(`/smart-plugs/${e}/control`,{method:`POST`,body:JSON.stringify({action:t})}),getSmartPlugStatus:e=>Y(`/smart-plugs/${e}/status`),testSmartPlugConnection:(e,t,n)=>Y(`/smart-plugs/test-connection`,{method:`POST`,body:JSON.stringify({ip_address:e,username:t,password:n})}),startTasmotaScan:()=>Y(`/smart-plugs/discover/scan`,{method:`POST`}),getTasmotaScanStatus:()=>Y(`/smart-plugs/discover/status`),stopTasmotaScan:()=>Y(`/smart-plugs/discover/stop`,{method:`POST`}),getDiscoveredTasmotaDevices:()=>Y(`/smart-plugs/discover/devices`),testHAConnection:(e,t)=>Y(`/smart-plugs/ha/test-connection`,{method:`POST`,body:JSON.stringify({url:e,token:t})}),getHAEntities:e=>Y(`/smart-plugs/ha/entities${e?`?search=${encodeURIComponent(e)}`:``}`),getHASensorEntities:()=>Y(`/smart-plugs/ha/sensors`),getHASensors:e=>Y(`/ha-sensors/${e?`?printer_id=${e}`:``}`),getHASensorReadings:e=>Y(`/ha-sensors/by-printer/${e}/readings`),getBindableHAEntities:e=>Y(`/ha-sensors/entities${e?`?search=${encodeURIComponent(e)}`:``}`),createHASensor:e=>Y(`/ha-sensors/`,{method:`POST`,body:JSON.stringify(e)}),updateHASensor:(e,t)=>Y(`/ha-sensors/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteHASensor:e=>Y(`/ha-sensors/${e}`,{method:`DELETE`}),getLocationHASensors:e=>Y(`/location-ha-sensors/${e?`?location_id=${e}`:``}`),getLocationHASensorReadings:(e,t=!0)=>Y(`/location-ha-sensors/by-location/${e}/readings?show_on_card=${t}`),getBindableLocationHAEntities:e=>Y(`/location-ha-sensors/entities${e?`?search=${encodeURIComponent(e)}`:``}`),createLocationHASensor:e=>Y(`/location-ha-sensors/`,{method:`POST`,body:JSON.stringify(e)}),updateLocationHASensor:(e,t)=>Y(`/location-ha-sensors/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteLocationHASensor:e=>Y(`/location-ha-sensors/${e}`,{method:`DELETE`}),testRESTConnection:(e,t=`GET`,n)=>Y(`/smart-plugs/rest/test-connection`,{method:`POST`,body:JSON.stringify({url:e,method:t,headers:n})}),getQueue:(e,t,n)=>{let r=new URLSearchParams;return e&&r.set(`printer_id`,String(e)),t&&r.set(`status`,t),n&&r.set(`target_model`,n),Y(`/queue/?${r}`)},getQueueItem:e=>Y(`/queue/${e}`),addToQueue:e=>Y(`/queue/`,{method:`POST`,body:JSON.stringify(e)}),updateQueueItem:(e,t)=>Y(`/queue/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),removeFromQueue:e=>Y(`/queue/${e}`,{method:`DELETE`}),reorderQueue:e=>Y(`/queue/reorder`,{method:`POST`,body:JSON.stringify({items:e})}),cancelQueueItem:e=>Y(`/queue/${e}/cancel`,{method:`POST`}),stopQueueItem:e=>Y(`/queue/${e}/stop`,{method:`POST`}),startQueueItem:(e,t)=>Y(`/queue/${e}/start${t?.skipFilamentCheck?`?skip_filament_check=true`:``}`,{method:`POST`}),resumeQueueAfterFailure:e=>Y(`/queue/printer/${e}/resume`,{method:`POST`}),bulkUpdateQueue:e=>Y(`/queue/bulk`,{method:`PATCH`,body:JSON.stringify(e)}),getBatches:e=>Y(`/queue/batches${e?`?status=${e}`:``}`),getBatch:e=>Y(`/queue/batches/${e}`),cancelBatch:e=>Y(`/queue/batches/${e}`,{method:`DELETE`}),createBatch:e=>Y(`/queue/batches`,{method:`POST`,body:JSON.stringify(e)}),updateBatch:(e,t)=>Y(`/queue/batches/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),dispatchBatch:(e,t={})=>Y(`/queue/batches/${e}/dispatch`,{method:`POST`,body:JSON.stringify(t)}),ungroupBatch:e=>Y(`/queue/batches/${e}/ungroup`,{method:`POST`}),getKProfiles:(e,t=`0.4`)=>Y(`/printers/${e}/kprofiles/?nozzle_diameter=${t}`),setKProfile:(e,t)=>Y(`/printers/${e}/kprofiles/`,{method:`POST`,body:JSON.stringify(t)}),deleteKProfile:(e,t)=>Y(`/printers/${e}/kprofiles/`,{method:`DELETE`,body:JSON.stringify(t)}),setKProfilesBatch:(e,t)=>Y(`/printers/${e}/kprofiles/batch`,{method:`POST`,body:JSON.stringify(t)}),getMyBalance:()=>Y(`/finance/me/balance`),getMyTransactions:(e=50,t=0)=>Y(`/finance/me/transactions?limit=${e}&offset=${t}`),getAllTransactions:(e=50,t=0,n)=>{let r=new URLSearchParams;return r.set(`limit`,String(e)),r.set(`offset`,String(t)),n!==void 0&&r.set(`user_id`,String(n)),Y(`/finance/transactions?${r.toString()}`)},deleteTransaction:e=>Y(`/finance/transactions/${e}`,{method:`DELETE`}),editTransaction:(e,t)=>Y(`/finance/transactions/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),createManualPrint:e=>Y(`/finance/transactions/manual`,{method:`POST`,body:JSON.stringify(e)}),getMyCostCenters:()=>Y(`/finance/cost-centers/mine`),listCostCenters:(e=!1)=>Y(`/finance/cost-centers?include_inactive=${e?`true`:`false`}`),createCostCenter:e=>Y(`/finance/cost-centers`,{method:`POST`,body:JSON.stringify(e)}),updateCostCenter:(e,t)=>Y(`/finance/cost-centers/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),updateCostCenterBudgets:(e,t)=>Y(`/finance/cost-centers/${e}/budgets`,{method:`PATCH`,body:JSON.stringify(t)}),deleteCostCenter:e=>Y(`/finance/cost-centers/${e}`,{method:`DELETE`}),getCostCenter:e=>Y(`/finance/cost-centers/${e}`),upsertCostCenterMember:(e,t)=>Y(`/finance/cost-centers/${e}/members`,{method:`POST`,body:JSON.stringify(t)}),removeCostCenterMember:(e,t)=>Y(`/finance/cost-centers/${e}/members/${t}`,{method:`DELETE`}),depositUserBalance:(e,t)=>Y(`/finance/users/${e}/deposit`,{method:`POST`,body:JSON.stringify(t)}),withdrawUserBalance:(e,t)=>Y(`/finance/users/${e}/withdraw`,{method:`POST`,body:JSON.stringify(t)}),rebuildBalanceLedger:()=>Y(`/finance/rebuild-balance-ledger`,{method:`POST`}),getKProfileNotes:e=>Y(`/printers/${e}/kprofiles/notes`),setKProfileNote:(e,t,n)=>Y(`/printers/${e}/kprofiles/notes`,{method:`PUT`,body:JSON.stringify({setting_id:t,note:n})}),deleteKProfileNote:(e,t)=>Y(`/printers/${e}/kprofiles/notes/${encodeURIComponent(t)}`,{method:`DELETE`}),getSlotPresets:e=>Y(`/printers/${e}/slot-presets`),getSlotPreset:(e,t,n)=>Y(`/printers/${e}/slot-presets/${t}/${n}`),saveSlotPreset:(e,t,n,r,i,a=`cloud`,o)=>Y(`/printers/${e}/slot-presets/${t}/${n}?preset_id=${encodeURIComponent(r)}&preset_name=${encodeURIComponent(i)}&preset_source=${encodeURIComponent(a)}${o?`&tray_info_idx=${encodeURIComponent(o)}`:``}`,{method:`PUT`}),deleteSlotPreset:(e,t,n)=>Y(`/printers/${e}/slot-presets/${t}/${n}`,{method:`DELETE`}),getAmsLabels:e=>Y(`/printers/${e}/ams-labels`),saveAmsLabel:(e,t,n,r=``)=>Y(`/printers/${e}/ams-labels/${t}`,{method:`PUT`,body:JSON.stringify({label:n,ams_serial:r})}),deleteAmsLabel:(e,t,n=``)=>Y(`/printers/${e}/ams-labels/${t}?ams_serial=${encodeURIComponent(n)}`,{method:`DELETE`}),configureAmsSlot:(e,t,n,r)=>{let i=new URLSearchParams({tray_info_idx:r.tray_info_idx,tray_type:r.tray_type,tray_sub_brands:r.tray_sub_brands,tray_color:r.tray_color,nozzle_temp_min:r.nozzle_temp_min.toString(),nozzle_temp_max:r.nozzle_temp_max.toString(),cali_idx:r.cali_idx.toString(),nozzle_diameter:r.nozzle_diameter});return r.setting_id&&i.set(`setting_id`,r.setting_id),r.kprofile_filament_id&&i.set(`kprofile_filament_id`,r.kprofile_filament_id),r.kprofile_setting_id&&i.set(`kprofile_setting_id`,r.kprofile_setting_id),r.k_value!==void 0&&r.k_value>0&&i.set(`k_value`,r.k_value.toString()),r.orca_profile_id&&i.set(`orca_profile_id`,r.orca_profile_id),Y(`/printers/${e}/slots/${t}/${n}/configure?${i}`,{method:`POST`})},resetAmsSlot:(e,t,n)=>Y(`/printers/${e}/ams/${t}/tray/${n}/reset`,{method:`POST`}),listFilaments:()=>Y(`/filament-catalog/`),getFilament:e=>Y(`/filament-catalog/${e}`),getFilamentsByType:e=>Y(`/filament-catalog/by-type/${e}`),getNotificationProviders:()=>Y(`/notifications/`),getNotificationProvider:e=>Y(`/notifications/${e}`),createNotificationProvider:e=>Y(`/notifications/`,{method:`POST`,body:JSON.stringify(e)}),updateNotificationProvider:(e,t)=>Y(`/notifications/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteNotificationProvider:e=>Y(`/notifications/${e}`,{method:`DELETE`}),testNotificationProvider:e=>Y(`/notifications/${e}/test`,{method:`POST`}),testNotificationConfig:e=>Y(`/notifications/test-config`,{method:`POST`,body:JSON.stringify(e)}),testAllNotificationProviders:()=>Y(`/notifications/test-all`,{method:`POST`}),getNotificationTemplates:()=>Y(`/notification-templates`),getNotificationTemplate:e=>Y(`/notification-templates/${e}`),updateNotificationTemplate:(e,t)=>Y(`/notification-templates/${e}`,{method:`PUT`,body:JSON.stringify(t)}),resetNotificationTemplate:e=>Y(`/notification-templates/${e}/reset`,{method:`POST`}),getTemplateVariables:()=>Y(`/notification-templates/variables`),previewTemplate:e=>Y(`/notification-templates/preview`,{method:`POST`,body:JSON.stringify(e)}),getNotificationLogs:e=>{let t=new URLSearchParams;return e?.limit&&t.set(`limit`,String(e.limit)),e?.offset&&t.set(`offset`,String(e.offset)),e?.provider_id&&t.set(`provider_id`,String(e.provider_id)),e?.event_type&&t.set(`event_type`,e.event_type),e?.success!==void 0&&t.set(`success`,String(e.success)),e?.days&&t.set(`days`,String(e.days)),Y(`/notifications/logs?${t}`)},getNotificationLogStats:(e=7)=>Y(`/notifications/logs/stats?days=${e}`),clearNotificationLogs:(e=30)=>Y(`/notifications/logs?older_than_days=${e}`,{method:`DELETE`}),getSpoolmanStatus:()=>Y(`/spoolman/status`),connectSpoolman:()=>Y(`/spoolman/connect`,{method:`POST`}),disconnectSpoolman:()=>Y(`/spoolman/disconnect`,{method:`POST`}),syncPrinterAms:e=>Y(`/spoolman/sync/${e}`,{method:`POST`}),syncAllPrintersAms:()=>Y(`/spoolman/sync-all`,{method:`POST`}),getSpoolmanSpools:()=>Y(`/spoolman/spools`),getSpoolmanFilaments:()=>Y(`/spoolman/filaments`),getSpoolmanInventoryFilaments:()=>Y(`/spoolman/inventory/filaments`),patchSpoolmanFilament:(e,t)=>Y(`/spoolman/inventory/filaments/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),getUnlinkedSpools:()=>Y(`/spoolman/spools/unlinked`),getLinkedSpools:()=>Y(`/spoolman/spools/linked`),linkSpool:(e,t)=>Y(`/spoolman/spools/${e}/link`,{method:`POST`,body:JSON.stringify({spool_tag:t.spoolTag,printer_id:t.printerId,ams_id:t.amsId,tray_id:t.trayId})}),unlinkSpool:e=>Y(`/spoolman/spools/${e}/unlink`,{method:`POST`}),createSpoolmanSpoolFromSlot:e=>Y(`/spoolman/spools/from-slot`,{method:`POST`,body:JSON.stringify(e)}),createSpoolFromSlot:e=>Y(`/inventory/spools/from-slot`,{method:`POST`,body:JSON.stringify(e)}),getSpoolmanSettings:()=>Y(`/settings/spoolman`),updateSpoolmanSettings:e=>Y(`/settings/spoolman`,{method:`PUT`,body:JSON.stringify(e)}),getSpools:(e=!1)=>Y(`/inventory/spools?include_archived=${e}`),getSpool:e=>Y(`/inventory/spools/${e}`),createSpool:e=>Y(`/inventory/spools`,{method:`POST`,body:JSON.stringify(e)}),bulkCreateSpools:(e,t)=>Y(`/inventory/spools/bulk`,{method:`POST`,body:JSON.stringify({spool:e,quantity:t})}),importSpoolsCsvPreview:e=>X(e,!0),importSpoolsCsv:e=>X(e,!1),exportSpoolsCsv:async()=>{let e={};I&&(e.Authorization=`Bearer ${I}`);let t=await fetch(`${P}/inventory/spools/export`,{headers:e});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.detail||`HTTP ${t.status}`)}let n=K(t.headers.get(`Content-Disposition`))||`bambuddy_inventory.csv`,r=await t.blob(),i=window.URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=n,document.body.appendChild(a),a.click(),document.body.removeChild(a),window.URL.revokeObjectURL(i)},updateSpool:(e,t)=>Y(`/inventory/spools/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteSpool:e=>Y(`/inventory/spools/${e}`,{method:`DELETE`}),archiveSpool:e=>Y(`/inventory/spools/${e}/archive`,{method:`POST`}),restoreSpool:e=>Y(`/inventory/spools/${e}/restore`,{method:`POST`}),resetSpoolConsumedCounter:e=>Y(`/inventory/spools/${e}/reset-consumed-counter`,{method:`POST`}),bulkResetSpoolConsumedCounter:e=>Y(`/inventory/spools/reset-consumed-counter-bulk`,{method:`POST`,body:JSON.stringify({spool_ids:e})}),bulkUpdateSpools:(e,t)=>Y(`/inventory/spools/bulk-update`,{method:`POST`,body:JSON.stringify({ids:e,update:t})}),bulkDeleteSpools:e=>Y(`/inventory/spools/bulk-delete`,{method:`POST`,body:JSON.stringify({ids:e})}),bulkArchiveSpools:e=>Y(`/inventory/spools/bulk-archive`,{method:`POST`,body:JSON.stringify({ids:e})}),bulkRestoreSpools:e=>Y(`/inventory/spools/bulk-restore`,{method:`POST`,body:JSON.stringify({ids:e})}),getSpoolKProfiles:e=>Y(`/inventory/spools/${e}/k-profiles`),saveSpoolKProfiles:(e,t)=>Y(`/inventory/spools/${e}/k-profiles`,{method:`PUT`,body:JSON.stringify(t)}),getSlotSpoolDefaults:(e,t,n)=>Y(`/printers/${e}/slots/${t}/${n}/spool-defaults`),getSpoolFilamentPresets:e=>Y(`/inventory/spools/${e}/filament-presets`),saveSpoolFilamentPresets:(e,t)=>Y(`/inventory/spools/${e}/filament-presets`,{method:`PUT`,body:JSON.stringify(t)}),getAssignments:e=>Y(`/inventory/assignments${e?`?printer_id=${e}`:``}`),assignSpool:e=>Y(`/inventory/assignments`,{method:`POST`,body:JSON.stringify(e)}),unassignSpool:(e,t,n)=>Y(`/inventory/assignments/${e}/${t}/${n}`,{method:`DELETE`}),printSpoolLabels:e=>J(`/inventory/labels`,e),printSpoolmanSpoolLabels:e=>J(`/spoolman/labels`,e),previewSpoolLabel:(e,t)=>J(`/inventory/labels/preview`,e,t),previewSpoolmanSpoolLabel:(e,t)=>J(`/spoolman/labels/preview`,e,t),getSpoolCatalog:()=>Y(`/inventory/catalog`),addCatalogEntry:e=>Y(`/inventory/catalog`,{method:`POST`,body:JSON.stringify(e)}),updateCatalogEntry:(e,t)=>Y(`/inventory/catalog/${e}`,{method:`PUT`,body:JSON.stringify(t)}),deleteCatalogEntry:e=>Y(`/inventory/catalog/${e}`,{method:`DELETE`}),bulkDeleteCatalogEntries:e=>Y(`/inventory/catalog/bulk-delete`,{method:`POST`,body:JSON.stringify({ids:e})}),resetSpoolCatalog:()=>Y(`/inventory/catalog/reset`,{method:`POST`}),getSuppliers:()=>Y(`/inventory/suppliers`),createSupplier:e=>Y(`/inventory/suppliers`,{method:`POST`,body:JSON.stringify(e)}),updateSupplier:(e,t)=>Y(`/inventory/suppliers/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteSupplier:e=>Y(`/inventory/suppliers/${e}`,{method:`DELETE`}),setSpoolSuppliers:(e,t)=>Y(`/inventory/spools/${e}/suppliers`,{method:`PUT`,body:JSON.stringify(t)}),setSpoolmanSpoolSuppliers:(e,t)=>Y(`/spoolman/inventory/spools/${e}/suppliers`,{method:`PUT`,body:JSON.stringify(t)}),getSupplierStats:(e,t)=>{let n=new URLSearchParams;e&&n.set(`date_from`,e),t&&n.set(`date_to`,t);let r=n.toString();return Y(`/inventory/stats/suppliers${r?`?${r}`:``}`)},getLocations:()=>Y(`/inventory/locations`),createLocation:e=>Y(`/inventory/locations`,{method:`POST`,body:JSON.stringify(e)}),updateLocation:(e,t)=>Y(`/inventory/locations/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteLocation:e=>Y(`/inventory/locations/${e}`,{method:`DELETE`}),getColorCatalog:()=>Y(`/inventory/colors`),getColorNameMap:()=>Y(`/inventory/colors/map`),addColorEntry:e=>Y(`/inventory/colors`,{method:`POST`,body:JSON.stringify(e)}),updateColorEntry:(e,t)=>Y(`/inventory/colors/${e}`,{method:`PUT`,body:JSON.stringify(t)}),deleteColorEntry:e=>Y(`/inventory/colors/${e}`,{method:`DELETE`}),bulkDeleteColorEntries:e=>Y(`/inventory/colors/bulk-delete`,{method:`POST`,body:JSON.stringify({ids:e})}),resetColorCatalog:()=>Y(`/inventory/colors/reset`,{method:`POST`}),lookupColor:(e,t,n)=>Y(`/inventory/colors/lookup?manufacturer=${encodeURIComponent(e)}&color_name=${encodeURIComponent(t)}${n?`&material=${encodeURIComponent(n)}`:``}`),searchColors:(e,t)=>Y(`/inventory/colors/search?${e?`manufacturer=${encodeURIComponent(e)}`:``}${e&&t?`&`:``}${t?`material=${encodeURIComponent(t)}`:``}`),linkTagToSpool:(e,t)=>Y(`/inventory/spools/${e}/link-tag`,{method:`PATCH`,body:JSON.stringify(t)}),getMaterialNumberStats:e=>{let t=new URLSearchParams;e?.dateFrom&&t.set(`date_from`,e.dateFrom),e?.dateTo&&t.set(`date_to`,e.dateTo);let n=t.toString();return Y(`/inventory/stats/material-numbers${n?`?${n}`:``}`)},getSpoolUsageHistory:(e,t=50)=>Y(`/inventory/spools/${e}/usage?limit=${t}`),getAllUsageHistory:(e=100,t)=>Y(`/inventory/usage?limit=${e}${t?`&printer_id=${t}`:``}`),clearSpoolUsageHistory:e=>Y(`/inventory/spools/${e}/usage`,{method:`DELETE`}),syncWeightsFromAms:()=>Y(`/inventory/sync-ams-weights`,{method:`POST`}),getSkuSettings:()=>Y(`/inventory/sku-settings`),upsertSkuSettings:e=>Y(`/inventory/sku-settings`,{method:`POST`,body:JSON.stringify(e)}),getShoppingList:()=>Y(`/inventory/shopping-list`),addToShoppingList:e=>Y(`/inventory/shopping-list`,{method:`POST`,body:JSON.stringify(e)}),removeFromShoppingList:e=>Y(`/inventory/shopping-list/${e}`,{method:`DELETE`}),clearShoppingList:()=>Y(`/inventory/shopping-list`,{method:`DELETE`}),updateShoppingListStatus:(e,t)=>Y(`/inventory/shopping-list/${e}/status`,{method:`PATCH`,body:JSON.stringify({status:t})}),getFilamentPresets:()=>Y(`/cloud/filaments`),getSpoolmanInventorySpools:(e=!1)=>Y(`/spoolman/inventory/spools?include_archived=${e}`),getSpoolmanInventorySpool:e=>Y(`/spoolman/inventory/spools/${e}`),createSpoolmanInventorySpool:e=>Y(`/spoolman/inventory/spools`,{method:`POST`,body:JSON.stringify(e)}),bulkCreateSpoolmanInventorySpools:(e,t)=>Y(`/spoolman/inventory/spools/bulk`,{method:`POST`,body:JSON.stringify({spool:e,quantity:t})}),updateSpoolmanInventorySpool:(e,t)=>Y(`/spoolman/inventory/spools/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteSpoolmanInventorySpool:e=>Y(`/spoolman/inventory/spools/${e}`,{method:`DELETE`}),archiveSpoolmanInventorySpool:e=>Y(`/spoolman/inventory/spools/${e}/archive`,{method:`POST`}),restoreSpoolmanInventorySpool:e=>Y(`/spoolman/inventory/spools/${e}/restore`,{method:`POST`}),resetSpoolmanInventorySpoolConsumedCounter:e=>Y(`/spoolman/inventory/spools/${e}/reset-consumed-counter`,{method:`POST`}),bulkResetSpoolmanInventorySpoolConsumedCounter:e=>Y(`/spoolman/inventory/spools/reset-consumed-counter-bulk`,{method:`POST`,body:JSON.stringify({spool_ids:e})}),bulkUpdateSpoolmanInventorySpools:(e,t)=>Y(`/spoolman/inventory/spools/bulk-update`,{method:`POST`,body:JSON.stringify({ids:e,update:t})}),bulkDeleteSpoolmanInventorySpools:e=>Y(`/spoolman/inventory/spools/bulk-delete`,{method:`POST`,body:JSON.stringify({ids:e})}),bulkArchiveSpoolmanInventorySpools:e=>Y(`/spoolman/inventory/spools/bulk-archive`,{method:`POST`,body:JSON.stringify({ids:e})}),bulkRestoreSpoolmanInventorySpools:e=>Y(`/spoolman/inventory/spools/bulk-restore`,{method:`POST`,body:JSON.stringify({ids:e})}),linkTagToSpoolmanSpool:(e,t)=>Y(`/spoolman/inventory/spools/${e}/tag`,{method:`PATCH`,body:JSON.stringify(t)}),syncSpoolmanSpoolWeight:(e,t)=>Y(`/spoolman/inventory/spools/${e}/weight`,{method:`PATCH`,body:JSON.stringify({weight_grams:t})}),assignSpoolmanSlot:e=>Y(`/spoolman/inventory/slot-assignments`,{method:`POST`,body:JSON.stringify(e)}),unassignSpoolmanSlot:e=>Y(`/spoolman/inventory/slot-assignments/${e}`,{method:`DELETE`}),getSpoolmanSlotAssignment:(e,t,n)=>Y(`/spoolman/inventory/slot-assignments?printer_id=${e}&ams_id=${t}&tray_id=${n}`),getSpoolmanSlotAssignments:e=>Y(e===void 0?`/spoolman/inventory/slot-assignments/all`:`/spoolman/inventory/slot-assignments/all?printer_id=${e}`),syncSpoolmanAmsWeights:()=>Y(`/spoolman/inventory/sync-ams-weights`,{method:`POST`}),getSpoolmanKProfiles:e=>Y(`/spoolman/inventory/spools/${e}/k-profiles`),saveSpoolmanKProfiles:(e,t)=>Y(`/spoolman/inventory/spools/${e}/k-profiles`,{method:`PUT`,body:JSON.stringify(t)}),getSpoolmanFilamentPresets:e=>Y(`/spoolman/inventory/spools/${e}/filament-presets`),saveSpoolmanFilamentPresets:(e,t)=>Y(`/spoolman/inventory/spools/${e}/filament-presets`,{method:`PUT`,body:JSON.stringify(t)}),getVersion:()=>Y(`/updates/version`),checkForUpdates:()=>Y(`/updates/check`),applyUpdate:()=>Y(`/updates/apply`,{method:`POST`}),getUpdateStatus:()=>Y(`/updates/status`),getMaintenanceTypes:()=>Y(`/maintenance/types`),createMaintenanceType:e=>Y(`/maintenance/types`,{method:`POST`,body:JSON.stringify(e)}),updateMaintenanceType:(e,t)=>Y(`/maintenance/types/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteMaintenanceType:e=>Y(`/maintenance/types/${e}`,{method:`DELETE`}),restoreDefaultMaintenanceTypes:()=>Y(`/maintenance/types/restore-defaults`,{method:`POST`}),getMaintenanceOverview:()=>Y(`/maintenance/overview`),getPrinterMaintenance:e=>Y(`/maintenance/printers/${e}`),updateMaintenanceItem:(e,t)=>Y(`/maintenance/items/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),performMaintenance:(e,t)=>Y(`/maintenance/items/${e}/perform`,{method:`POST`,body:JSON.stringify({notes:t})}),getMaintenanceHistory:e=>Y(`/maintenance/items/${e}/history`),getMaintenanceSummary:()=>Y(`/maintenance/summary`),setPrinterHours:(e,t)=>Y(`/maintenance/printers/${e}/hours?total_hours=${t}`,{method:`PATCH`}),assignMaintenanceType:(e,t)=>Y(`/maintenance/printers/${e}/assign/${t}`,{method:`POST`}),removeMaintenanceItem:e=>Y(`/maintenance/items/${e}`,{method:`DELETE`}),getCameraStreamToken:()=>Y(`/printers/camera/stream-token`,{method:`POST`}),getMediaToken:()=>Y(`/auth/media-token`,{method:`POST`}),getWebSocketToken:()=>Y(`/auth/ws-token`,{method:`POST`}),listConnectedApps:()=>Y(`/connect/apps`),createConnectedApp:e=>Y(`/connect/apps`,{method:`POST`,body:JSON.stringify(e)}),updateConnectedApp:(e,t)=>Y(`/connect/apps/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),rotateConnectedAppSecret:e=>Y(`/connect/apps/${e}/rotate-secret`,{method:`POST`}),deleteConnectedApp:e=>Y(`/connect/apps/${e}`,{method:`DELETE`}),getConnectAuthorizeInfo:(e,t)=>Y(`/connect/authorize/info?client_id=${encodeURIComponent(e)}&redirect_uri=${encodeURIComponent(t)}`),connectAuthorize:e=>Y(`/connect/authorize`,{method:`POST`,body:JSON.stringify(e)}),createLongLivedCameraToken:e=>Y(`/auth/tokens`,{method:`POST`,body:JSON.stringify({scope:`camera_stream`,...e})}),listMyLongLivedCameraTokens:()=>Y(`/auth/tokens`),listAllLongLivedCameraTokens:()=>Y(`/auth/tokens/all`),listLongLivedCameraTokensForUser:e=>Y(`/auth/tokens?user_id=${e}`),revokeLongLivedCameraToken:e=>Y(`/auth/tokens/${e}`,{method:`DELETE`}),getCamWallPrinters:e=>Y(e?`/camwall/printers?token=${encodeURIComponent(e)}`:`/camwall/printers`),getOverlayStatus:(e,t)=>Y(t?`/printers/${e}/overlay-status?token=${encodeURIComponent(t)}`:`/printers/${e}/overlay-status`),getCameraStreamUrl:(e,t=10)=>W(`${P}/printers/${e}/camera/stream?fps=${t}`),getCameraSnapshotUrl:e=>W(`${P}/printers/${e}/camera/snapshot`),testCameraConnection:e=>Y(`/printers/${e}/camera/test`),getCameraStatus:e=>Y(`/printers/${e}/camera/status`),diagnoseCamera:e=>Y(`/printers/${e}/camera/diagnose`,{method:`POST`}),diagnosePrinter:e=>Y(`/printers/${e}/diagnostic`),diagnoseConnection:e=>Y(`/printers/diagnostic`,{method:`POST`,body:JSON.stringify(e)}),checkPlateEmpty:(e,t)=>{let n=new URLSearchParams;return t?.useExternal!==void 0&&n.set(`use_external`,String(t.useExternal)),n.set(`include_debug_image`,String(t?.includeDebugImage??!1)),Y(`/printers/${e}/camera/check-plate?${n.toString()}`)},getPlateDetectionStatus:e=>Y(`/printers/${e}/camera/plate-detection/status`),calibratePlateDetection:(e,t)=>{let n=new URLSearchParams;return t?.label&&n.set(`label`,t.label),t?.useExternal!==void 0&&n.set(`use_external`,String(t.useExternal)),Y(`/printers/${e}/camera/plate-detection/calibrate?${n.toString()}`,{method:`POST`})},deletePlateCalibration:e=>Y(`/printers/${e}/camera/plate-detection/calibrate`,{method:`DELETE`}),getPlateReferences:e=>Y(`/printers/${e}/camera/plate-detection/references`),getPlateReferenceThumbnailUrl:(e,t)=>W(`${P}/printers/${e}/camera/plate-detection/references/${t}/thumbnail`),updatePlateReferenceLabel:(e,t,n)=>{let r=new URLSearchParams;return r.set(`label`,n),Y(`/printers/${e}/camera/plate-detection/references/${t}?${r.toString()}`,{method:`PUT`})},deletePlateReference:(e,t)=>Y(`/printers/${e}/camera/plate-detection/references/${t}`,{method:`DELETE`}),getExternalLinks:()=>Y(`/external-links/`),getExternalLink:e=>Y(`/external-links/${e}`),createExternalLink:e=>Y(`/external-links/`,{method:`POST`,body:JSON.stringify(e)}),updateExternalLink:(e,t)=>Y(`/external-links/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteExternalLink:e=>Y(`/external-links/${e}`,{method:`DELETE`}),reorderExternalLinks:e=>Y(`/external-links/reorder`,{method:`PUT`,body:JSON.stringify({ids:e})}),uploadExternalLinkIcon:async(e,t)=>{let n=new FormData;n.append(`file`,t);let r={};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(`${P}/external-links/${e}/icon`,{method:`POST`,headers:r,body:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.detail||`HTTP ${i.status}`)}return i.json()},deleteExternalLinkIcon:e=>Y(`/external-links/${e}/icon`,{method:`DELETE`}),getExternalLinkIconUrl:e=>G(`${P}/external-links/${e}/icon`),getProjects:e=>{let t=new URLSearchParams;return e&&t.set(`status`,e),Y(`/projects/?${t}`)},getProject:e=>Y(`/projects/${e}`),createProject:e=>Y(`/projects/`,{method:`POST`,body:JSON.stringify(e)}),updateProject:(e,t)=>Y(`/projects/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteProject:e=>Y(`/projects/${e}`,{method:`DELETE`}),getProjectArchives:(e,t=100,n=0)=>Y(`/projects/${e}/archives?limit=${t}&offset=${n}`),getProjectFileProgress:e=>Y(`/projects/${e}/file-progress`),addArchivesToProject:(e,t)=>Y(`/projects/${e}/add-archives`,{method:`POST`,body:JSON.stringify({archive_ids:t})}),removeArchivesFromProject:(e,t)=>Y(`/projects/${e}/remove-archives`,{method:`POST`,body:JSON.stringify({archive_ids:t})}),addQueueItemsToProject:(e,t)=>Y(`/projects/${e}/add-queue`,{method:`POST`,body:JSON.stringify({queue_item_ids:t})}),uploadProjectAttachment:async(e,t)=>{let n=new FormData;n.append(`file`,t);let r={};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(`${P}/projects/${e}/attachments`,{method:`POST`,headers:r,body:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.detail||`HTTP ${i.status}`)}return i.json()},getProjectAttachmentUrl:(e,t)=>`${P}/projects/${e}/attachments/${encodeURIComponent(t)}`,deleteProjectAttachment:(e,t)=>Y(`/projects/${e}/attachments/${encodeURIComponent(t)}`,{method:`DELETE`}),getProjectCoverImageUrl:(e,t)=>G(`${P}/projects/${e}/cover-image${t===void 0?``:`?v=${encodeURIComponent(String(t))}`}`),uploadProjectCoverImage:async(e,t)=>{let n=new FormData;n.append(`file`,t);let r={};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(`${P}/projects/${e}/cover-image`,{method:`POST`,headers:r,body:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.detail||`HTTP ${i.status}`)}return i.json()},deleteProjectCoverImage:e=>Y(`/projects/${e}/cover-image`,{method:`DELETE`}),getProjectBOM:e=>Y(`/projects/${e}/bom`),createBOMItem:(e,t)=>Y(`/projects/${e}/bom`,{method:`POST`,body:JSON.stringify(t)}),updateBOMItem:(e,t,n)=>Y(`/projects/${e}/bom/${t}`,{method:`PATCH`,body:JSON.stringify(n)}),deleteBOMItem:(e,t)=>Y(`/projects/${e}/bom/${t}`,{method:`DELETE`}),getTemplates:()=>Y(`/projects/templates/`),createTemplateFromProject:e=>Y(`/projects/${e}/create-template`,{method:`POST`}),createProjectFromTemplate:(e,t)=>Y(`/projects/from-template/${e}${t?`?name=${encodeURIComponent(t)}`:``}`,{method:`POST`}),getProjectTimeline:(e,t=50)=>Y(`/projects/${e}/timeline?limit=${t}`),exportProjectJson:e=>Y(`/projects/${e}/export?format=json`),importProject:e=>Y(`/projects/import`,{method:`POST`,body:JSON.stringify(e)}),importProjectFile:async e=>{let t=new FormData;t.append(`file`,e);let n={};I&&(n.Authorization=`Bearer ${I}`);let r=await fetch(`${P}/projects/import/file`,{method:`POST`,headers:n,body:t});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.detail||`HTTP ${r.status}`)}return r.json()},exportProjectZip:async e=>{let t={};I&&(t.Authorization=`Bearer ${I}`);let n=await fetch(`${P}/projects/${e}/export`,{headers:t});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.detail||`HTTP ${n.status}`)}let r=K(n.headers.get(`Content-Disposition`))||`project_${e}.zip`;return{blob:await n.blob(),filename:r}},getAPIKeys:()=>Y(`/api-keys/`),createAPIKey:e=>Y(`/api-keys/`,{method:`POST`,body:JSON.stringify(e)}),updateAPIKey:(e,t)=>Y(`/api-keys/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),deleteAPIKey:e=>Y(`/api-keys/${e}`,{method:`DELETE`}),getAMSHistory:(e,t,n=24)=>Y(`/ams-history/${e}/${t}?hours=${n}`),getPrinterSensorHistory:(e,t=24,n)=>{let r=new URLSearchParams({hours:String(t)});return n&&n.length>0&&r.set(`kinds`,n.join(`,`)),Y(`/printer-sensor-history/${e}?${r.toString()}`)},getSystemInfo:()=>Y(`/system/info`),getSystemHealth:()=>Y(`/system/health`),getStorageUsage:e=>{let t=new URLSearchParams;e?.refresh&&t.set(`refresh`,`true`);let n=t.toString();return Y(`/system/storage-usage${n?`?${n}`:``}`)},getLibraryFolders:()=>Y(`/library/folders`),createLibraryFolder:e=>Y(`/library/folders`,{method:`POST`,body:JSON.stringify(e)}),updateLibraryFolder:(e,t)=>Y(`/library/folders/${e}`,{method:`PUT`,body:JSON.stringify(t)}),deleteLibraryFolder:e=>Y(`/library/folders/${e}`,{method:`DELETE`}),createExternalFolder:e=>Y(`/library/folders/external`,{method:`POST`,body:JSON.stringify(e)}),scanExternalFolder:e=>Y(`/library/folders/${e}/scan`,{method:`POST`}),getLibraryFoldersByProject:e=>Y(`/library/folders/by-project/${e}`),getLibraryFoldersByArchive:e=>Y(`/library/folders/by-archive/${e}`),getLibraryFiles:(e,t=!0,n,r,i=!1,a=[])=>{let o=new URLSearchParams;e!=null&&o.set(`folder_id`,String(e)),n!==void 0&&o.set(`project_id`,String(n)),o.set(`include_root`,String(t)),r===`internal`?o.set(`internal_only`,`true`):r===`external`&&o.set(`external_only`,`true`),i&&o.set(`recursive`,`true`);for(let e of a)o.append(`tag_ids`,String(e));return Y(`/library/files?${o}`)},getLibraryFolderReadme:e=>Y(`/library/folders/${e}/readme`),getLibraryTags:()=>Y(`/library/tags`),createLibraryTag:e=>Y(`/library/tags`,{method:`POST`,body:JSON.stringify({name:e})}),updateLibraryTag:(e,t)=>Y(`/library/tags/${e}`,{method:`PATCH`,body:JSON.stringify({name:t})}),deleteLibraryTag:e=>Y(`/library/tags/${e}`,{method:`DELETE`}),bulkAssignLibraryTags:(e,t,n)=>Y(`/library/tags/bulk-assign`,{method:`POST`,body:JSON.stringify({file_ids:e,tag_ids:t,action:n})}),createVariantGroup:(e,t)=>Y(`/library/variant-groups`,{method:`POST`,body:JSON.stringify({members:e,...t?{name:t}:{}})}),getVariantGroup:e=>Y(`/library/variant-groups/${e}`),getVariantGroupForFile:async e=>{try{return await Y(`/library/variant-groups/by-file/${e}`)}catch{return null}},updateVariantGroup:(e,t)=>Y(`/library/variant-groups/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),addVariantGroupMember:(e,t,n)=>Y(`/library/variant-groups/${e}/members`,{method:`POST`,body:JSON.stringify({library_file_id:t,...n?{target_model:n}:{}})}),removeVariantGroupMember:(e,t)=>Y(`/library/variant-groups/${e}/members/${t}`,{method:`DELETE`}),deleteVariantGroup:e=>Y(`/library/variant-groups/${e}`,{method:`DELETE`}),getLibraryFile:e=>Y(`/library/files/${e}`),uploadLibraryFile:async(e,t,n=!0)=>{let r=new FormData;r.append(`file`,e);let i=new URLSearchParams;t&&i.set(`folder_id`,String(t)),i.set(`generate_stl_thumbnails`,String(n));let a={};I&&(a.Authorization=`Bearer ${I}`);let o=await fetch(`${P}/library/files?${i}`,{method:`POST`,headers:a,body:r});if(!o.ok){let e=await o.json().catch(()=>({}));throw Error(e.detail||`HTTP ${o.status}`)}return o.json()},extractZipFile:async(e,t,n=!0,r=!1,i=!0)=>{let a=new FormData;a.append(`file`,e);let o=new URLSearchParams;t&&o.set(`folder_id`,String(t)),o.set(`preserve_structure`,String(n)),o.set(`create_folder_from_zip`,String(r)),o.set(`generate_stl_thumbnails`,String(i));let s={};I&&(s.Authorization=`Bearer ${I}`);let c=await fetch(`${P}/library/files/extract-zip?${o}`,{method:`POST`,headers:s,body:a});if(!c.ok){let e=await c.json().catch(()=>({}));throw Error(e.detail||`HTTP ${c.status}`)}return c.json()},updateLibraryFile:(e,t)=>Y(`/library/files/${e}`,{method:`PUT`,body:JSON.stringify(t)}),deleteLibraryFile:e=>Y(`/library/files/${e}`,{method:`DELETE`}),previewLibraryPurge:(e,t=!0)=>Y(`/library/purge/preview?older_than_days=${e}&include_never_printed=${t}`),executeLibraryPurge:(e,t=!0)=>Y(`/library/purge`,{method:`POST`,body:JSON.stringify({older_than_days:e,include_never_printed:t})}),listLibraryTrash:(e=100,t=0)=>Y(`/library/trash?limit=${e}&offset=${t}`),restoreLibraryTrash:e=>Y(`/library/trash/${e}/restore`,{method:`POST`}),hardDeleteLibraryTrash:e=>Y(`/library/trash/${e}`,{method:`DELETE`}),emptyLibraryTrash:()=>Y(`/library/trash`,{method:`DELETE`}),getLibraryTrashSettings:()=>Y(`/library/trash/settings`),updateLibraryTrashSettings:e=>Y(`/library/trash/settings`,{method:`PUT`,body:JSON.stringify(e)}),getLibraryFileDownloadUrl:e=>`${P}/library/files/${e}/download`,createLibrarySlicerToken:e=>Y(`/library/files/${e}/slicer-token`,{method:`POST`}),getLibrarySlicerDownloadUrl:(e,t,n)=>`${P}/library/files/${e}/dl/${t}/${encodeURIComponent(q(n))}`,downloadLibraryFile:async(e,t)=>{let n={};I&&(n.Authorization=`Bearer ${I}`);let r=await fetch(`${P}/library/files/${e}/download`,{headers:n});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.detail||`HTTP ${r.status}`)}let i=K(r.headers.get(`Content-Disposition`))||t||`file_${e}`,a=await r.blob(),o=window.URL.createObjectURL(a),s=document.createElement(`a`);s.href=o,s.download=i,document.body.appendChild(s),s.click(),document.body.removeChild(s),window.URL.revokeObjectURL(o)},getLibraryFileThumbnailUrl:e=>G(`${P}/library/files/${e}/thumbnail`),uploadLibraryPreviewThumbnail:async(e,t)=>{let n=new FormData;n.append(`thumbnail`,t,`preview.png`);let r={};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(`${P}/library/files/${e}/preview-thumbnail`,{method:`POST`,headers:r,body:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.detail||`HTTP ${i.status}`)}return i.json()},getLibraryFilePlateThumbnail:(e,t)=>G(`${P}/library/files/${e}/plate-thumbnail/${t}`),getLibraryFilePhotoUrl:(e,t)=>G(`${P}/library/files/${e}/photos/${encodeURIComponent(t)}`),uploadLibraryFilePhoto:async(e,t)=>{let n=new FormData;n.append(`file`,t);let r={};I&&(r.Authorization=`Bearer ${I}`);let i=await fetch(`${P}/library/files/${e}/photos`,{method:`POST`,headers:r,body:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.detail||`HTTP ${i.status}`)}return i.json()},deleteLibraryFilePhoto:(e,t)=>Y(`/library/files/${e}/photos/${encodeURIComponent(t)}`,{method:`DELETE`}),getLibraryFileGcodeUrl:e=>`${P}/library/files/${e}/gcode`,moveLibraryFiles:(e,t)=>Y(`/library/files/move`,{method:`POST`,body:JSON.stringify({file_ids:e,folder_id:t})}),bulkDeleteLibrary:(e,t)=>Y(`/library/bulk-delete`,{method:`POST`,body:JSON.stringify({file_ids:e,folder_ids:t})}),getLibraryStats:()=>Y(`/library/stats`),batchGenerateStlThumbnails:e=>Y(`/library/generate-stl-thumbnails`,{method:`POST`,body:JSON.stringify(e)}),combineLibraryFiles:(e,t,n)=>Y(`/library/files/combine`,{method:`POST`,body:JSON.stringify({items:e,filename:t,folder_id:n})}),addLibraryFilesToQueue:e=>Y(`/library/files/add-to-queue`,{method:`POST`,body:JSON.stringify({file_ids:e})}),getLibraryFilePlates:e=>Y(`/library/files/${e}/plates`),getLibraryFileFilamentRequirements:(e,t,n,r)=>{let i=new URLSearchParams;return t!==void 0&&i.set(`plate_id`,String(t)),n&&i.set(`request_id`,n),r&&i.set(`full_slots`,`true`),Y(`/library/files/${e}/filament-requirements${i.toString()?`?${i}`:``}`)},getPreviewSliceProgress:async e=>{try{return await Y(`/slicer/preview-progress/${encodeURIComponent(e)}`)}catch{return null}},getGitHubBackupConfig:()=>Y(`/github-backup/config`),getGitHubBackupCloudAccounts:()=>Y(`/github-backup/cloud-accounts`),saveGitHubBackupConfig:e=>Y(`/github-backup/config`,{method:`POST`,body:JSON.stringify(e)}),updateGitHubBackupConfig:e=>Y(`/github-backup/config`,{method:`PATCH`,body:JSON.stringify(e)}),deleteGitHubBackupConfig:()=>Y(`/github-backup/config`,{method:`DELETE`}),testGitHubConnection:(e,t,n=`github`)=>Y(`/github-backup/test?repo_url=${encodeURIComponent(e)}&token=${encodeURIComponent(t)}&provider=${encodeURIComponent(n)}`,{method:`POST`}),testGitHubStoredConnection:()=>Y(`/github-backup/test-stored`,{method:`POST`}),triggerGitHubBackup:()=>Y(`/github-backup/run`,{method:`POST`}),getGitHubBackupStatus:()=>Y(`/github-backup/status`),getGitHubBackupLogs:(e=50)=>Y(`/github-backup/logs?limit=${e}`),clearGitHubBackupLogs:(e=10)=>Y(`/github-backup/logs?keep_last=${e}`,{method:`DELETE`}),getGitHubBackupCommits:(e=20)=>Y(`/github-backup/commits?limit=${e}`),getGitHubRestorePreview:(e=`HEAD`)=>Y(`/github-backup/restore/preview?ref=${encodeURIComponent(e)}`),restoreFromGitHub:e=>Y(`/github-backup/restore`,{method:`POST`,body:JSON.stringify(e)}),getLocalBackupStatus:()=>Y(`/local-backup/status`),triggerLocalBackup:()=>Y(`/local-backup/run`,{method:`POST`}),checkLocalBackupPath:()=>Y(`/local-backup/path-check`),getLocalBackups:()=>Y(`/local-backup/backups`),downloadLocalBackup:async e=>{let t=await fetch(`${P}/local-backup/backups/${encodeURIComponent(e)}/download`,{headers:I?{Authorization:`Bearer ${I}`}:{}});if(!t.ok)throw Error(`Download failed`);return{blob:await t.blob(),filename:e}},restoreLocalBackup:e=>Y(`/local-backup/backups/${encodeURIComponent(e)}/restore`,{method:`POST`}),deleteLocalBackup:e=>Y(`/local-backup/backups/${encodeURIComponent(e)}`,{method:`DELETE`}),getObicoStatus:()=>Y(`/obico/status`),getObicoPrinterStatus:()=>Y(`/obico/printer-status`),testObicoConnection:(e,t)=>Y(`/obico/test-connection`,{method:`POST`,body:JSON.stringify(t===void 0?{url:e}:{url:e,token:t})}),sliceLibraryFile:(e,t)=>Y(`/library/files/${e}/slice`,{method:`POST`,body:JSON.stringify(t)}),sliceArchive:(e,t)=>Y(`/archives/${e}/slice`,{method:`POST`,body:JSON.stringify(t)}),getSliceJob:e=>Y(`/slice-jobs/${e}`),getSlicerPresets:e=>Y(e?.refresh?`/slicer/presets?refresh=true`:`/slicer/presets`),listSlicerPipelines:()=>Y(`/slicer-pipelines/`),getSlicerPipeline:e=>Y(`/slicer-pipelines/${e}`),createSlicerPipeline:e=>Y(`/slicer-pipelines/`,{method:`POST`,body:JSON.stringify(e)}),updateSlicerPipeline:(e,t)=>Y(`/slicer-pipelines/${e}`,{method:`PUT`,body:JSON.stringify(t)}),deleteSlicerPipeline:e=>Y(`/slicer-pipelines/${e}`,{method:`DELETE`}),checkPipelineEligibility:(e,t)=>Y(`/slicer-pipelines/${e}/check-eligibility`,{method:`POST`,body:JSON.stringify(t.kind===`libraryFile`?{source_library_file_id:t.id}:{source_archive_id:t.id})}),runPipeline:(e,t,n=!1,r=1)=>Y(`/slicer-pipelines/${e}/run`,{method:`POST`,body:JSON.stringify({...t.kind===`libraryFile`?{source_library_file_id:t.id}:{source_archive_id:t.id},force:n,copies:r})}),listPipelineRuns:(e,t=5)=>Y(`/slicer-pipelines/${e}/runs?limit=${t}`),listAllPipelineRuns:(e={})=>{let t=new URLSearchParams;e.limit&&t.set(`limit`,String(e.limit)),e.offset&&t.set(`offset`,String(e.offset)),e.pipelineId&&t.set(`pipeline_id`,String(e.pipelineId)),e.status&&t.set(`status`,e.status),e.targetPrinterId&&t.set(`target_printer_id`,String(e.targetPrinterId)),e.targetModelClass&&t.set(`target_model_class`,e.targetModelClass);let n=t.toString();return Y(`/pipeline-runs${n?`?`+n:``}`)},clearTerminalPipelineRuns:()=>Y(`/pipeline-runs/clear`,{method:`POST`}),getPipelineRun:e=>Y(`/pipeline-runs/${e}`),cancelPipelineRun:e=>Y(`/pipeline-runs/${e}/cancel`,{method:`POST`}),retryFailedPipelineRun:e=>Y(`/pipeline-runs/${e}/retry-failed`,{method:`POST`}),getSlicerPrinterModels:()=>Y(`/slicer/printer-models`),getSlicerLoadedSpools:()=>Y(`/slicer/loaded-spools`),getSlicerPresetValues:e=>Y(`/slicer/preset-values?source=${encodeURIComponent(e.source)}&id=${encodeURIComponent(e.id)}`),getLocalPresets:()=>Y(`/local-presets/`),getLocalPresetDetail:e=>Y(`/local-presets/${e}`),importLocalPresets:e=>fetch(`${P}/local-presets/import`,{method:`POST`,headers:I?{Authorization:`Bearer ${I}`}:{},body:e}).then(async e=>{if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.detail||`HTTP ${e.status}`)}return e.json()}),createLocalPreset:e=>Y(`/local-presets/`,{method:`POST`,body:JSON.stringify(e)}),updateLocalPreset:(e,t)=>Y(`/local-presets/${e}`,{method:`PUT`,body:JSON.stringify(t)}),deleteLocalPreset:e=>Y(`/local-presets/${e}`,{method:`DELETE`}),refreshBaseProfileCache:()=>Y(`/local-presets/base-cache/refresh`,{method:`POST`})},ne={getInfo:()=>Y(`/discovery/info`),getStatus:()=>Y(`/discovery/status`),startDiscovery:(e=10)=>Y(`/discovery/start?duration=${e}`,{method:`POST`}),stopDiscovery:()=>Y(`/discovery/stop`,{method:`POST`}),getDiscoveredPrinters:()=>Y(`/discovery/printers`),startSubnetScan:(e,t=1)=>Y(`/discovery/scan`,{method:`POST`,body:JSON.stringify({subnet:e,timeout:t})}),getScanStatus:()=>Y(`/discovery/scan/status`),stopSubnetScan:()=>Y(`/discovery/scan/stop`,{method:`POST`})},$={getSettings:()=>Y(`/settings/virtual-printer`),getModels:()=>Y(`/settings/virtual-printer/models`),updateSettings:e=>{let t=new URLSearchParams;return e.enabled!==void 0&&t.set(`enabled`,String(e.enabled)),e.access_code!==void 0&&t.set(`access_code`,e.access_code),e.mode!==void 0&&t.set(`mode`,e.mode),e.model!==void 0&&t.set(`model`,e.model),e.target_printer_id!==void 0&&t.set(`target_printer_id`,String(e.target_printer_id)),e.remote_interface_ip!==void 0&&t.set(`remote_interface_ip`,e.remote_interface_ip),e.tailscale_disabled!==void 0&&t.set(`tailscale_disabled`,String(e.tailscale_disabled)),e.archive_name_source!==void 0&&t.set(`archive_name_source`,e.archive_name_source),Y(`/settings/virtual-printer?${t.toString()}`,{method:`PUT`})}},re={list:()=>Y(`/virtual-printers`),get:e=>Y(`/virtual-printers/${e}`),create:e=>Y(`/virtual-printers`,{method:`POST`,body:JSON.stringify(e)}),update:(e,t)=>Y(`/virtual-printers/${e}`,{method:`PUT`,body:JSON.stringify(t)}),remove:e=>Y(`/virtual-printers/${e}`,{method:`DELETE`}),getTailscaleStatus:()=>Y(`/virtual-printers/tailscale-status`),getCaCertificate:()=>Y(`/virtual-printers/ca-certificate`),diagnose:e=>Y(`/virtual-printers/${e}/diagnostic`)},ie={list:()=>Y(`/pending-uploads/`),getCount:()=>Y(`/pending-uploads/count`),get:e=>Y(`/pending-uploads/${e}`),archive:(e,t)=>Y(`/pending-uploads/${e}/archive`,{method:`POST`,body:JSON.stringify(t||{})}),discard:e=>Y(`/pending-uploads/${e}`,{method:`DELETE`}),archiveAll:()=>Y(`/pending-uploads/archive-all`,{method:`POST`}),discardAll:()=>Y(`/pending-uploads/discard-all`,{method:`DELETE`})},ae={checkUpdates:()=>Y(`/firmware/updates`),checkPrinterUpdate:e=>Y(`/firmware/updates/${e}`),prepareUpload:(e,t)=>Y(`/firmware/updates/${e}/prepare${t?`?version=${encodeURIComponent(t)}`:``}`),startUpload:(e,t)=>Y(`/firmware/updates/${e}/upload${t?`?version=${encodeURIComponent(t)}`:``}`,{method:`POST`}),getUploadStatus:e=>Y(`/firmware/updates/${e}/upload/status`)},oe={getDebugLoggingState:()=>Y(`/support/debug-logging`),setDebugLogging:e=>Y(`/support/debug-logging`,{method:`POST`,body:JSON.stringify({enabled:e})}),downloadSupportBundle:async()=>{let e={};I&&(e.Authorization=`Bearer ${I}`);let t=await fetch(`${P}/support/bundle`,{headers:e});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.detail||`HTTP ${t.status}`)}let n=K(t.headers.get(`Content-Disposition`))||`bambuddy-support.zip`,r=await t.blob(),i=window.URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=n,document.body.appendChild(a),a.click(),document.body.removeChild(a),window.URL.revokeObjectURL(i)},getLogs:e=>{let t=new URLSearchParams;e?.limit&&t.set(`limit`,e.limit.toString()),e?.level&&t.set(`level`,e.level),e?.search&&t.set(`search`,e.search);let n=t.toString();return Y(`/support/logs${n?`?${n}`:``}`)},clearLogs:()=>Y(`/support/logs`,{method:`DELETE`})},se={getDevices:()=>Y(`/spoolbuddy/devices`),deleteDevice:e=>Y(`/spoolbuddy/devices/${e}`,{method:`DELETE`}),tare:e=>Y(`/spoolbuddy/devices/${e}/calibration/tare`,{method:`POST`,body:`{}`}),getCalibration:e=>Y(`/spoolbuddy/devices/${e}/calibration`),setCalibrationFactor:(e,t,n,r)=>Y(`/spoolbuddy/devices/${e}/calibration/set-factor`,{method:`POST`,body:JSON.stringify({known_weight_grams:t,raw_adc:n,tare_raw_adc:r})}),updateSpoolWeight:(e,t)=>Y(`/spoolbuddy/scale/update-spool-weight`,{method:`POST`,body:JSON.stringify({spool_id:e,weight_grams:t})}),updateDisplay:(e,t,n)=>Y(`/spoolbuddy/devices/${e}/display`,{method:`PUT`,body:JSON.stringify({brightness:t,blank_timeout:n})}),updateSystemConfig:(e,t,n)=>Y(`/spoolbuddy/devices/${e}/system/config`,{method:`POST`,body:JSON.stringify({backend_url:t,...n?{api_key:n}:{}})}),checkDaemonUpdate:e=>Y(`/spoolbuddy/devices/${e}/update-check`),triggerUpdate:e=>Y(`/spoolbuddy/devices/${e}/update`,{method:`POST`,body:`{}`}),getSSHPublicKey:()=>Y(`/spoolbuddy/ssh/public-key`),writeTag:(e,t)=>Y(`/spoolbuddy/nfc/write-tag`,{method:`POST`,body:JSON.stringify({device_id:e,spool_id:t})}),cancelWrite:e=>Y(`/spoolbuddy/devices/${e}/cancel-write`,{method:`POST`,body:`{}`}),systemCommand:(e,t)=>Y(`/spoolbuddy/devices/${e}/system/command`,{method:`POST`,body:JSON.stringify({command:t})}),queueDiagnostics:(e,t)=>Y(`/spoolbuddy/diagnostics/${e}/run?diagnostic=${t}`,{method:`POST`,body:`{}`}),getDiagnosticResult:(e,t)=>Y(`/spoolbuddy/diagnostics/${e}/result?diagnostic=${t}`,{method:`GET`})},ce={submit:e=>Y(`/bug-report/submit`,{method:`POST`,body:JSON.stringify(e)}),startLogging:()=>Y(`/bug-report/start-logging`,{method:`POST`}),stopLogging:e=>Y(`/bug-report/stop-logging?was_debug=${e}`,{method:`POST`})},le={list:()=>Y(`/announcements`),markRead:e=>Y(`/announcements/${encodeURIComponent(e)}/read`,{method:`POST`})},ue={check:()=>Y(`/sponsor-prompt/check`),dismiss:e=>Y(`/sponsor-prompt/dismiss`,{method:`POST`,body:JSON.stringify({milestone:e})})};export{N as C,r as D,C as E,W as S,D as T,ue as _,te as a,$ as b,ae as c,V as d,re as f,ee as g,H as h,le as i,R as l,L as m,Q as n,ce as o,ie as p,Z as r,ne as s,F as t,U as u,se as v,j as w,G as x,oe as y};