@iotopen/react-lynx 1.0.2-rc.0 → 1.0.2-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Contexts/LynxClientProvider.d.ts +1 -1
- package/dist/Contexts/UserProvider.d.ts +1 -1
- package/dist/Hooks/useDevices.d.ts +3 -4
- package/dist/Hooks/useFunctions.d.ts +3 -4
- package/dist/Hooks/useMeta.d.ts +1 -1
- package/dist/Hooks/usePahoMQTTClient.d.ts +3 -3
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +277 -273
- package/dist/esm/index.js.map +1 -1
- package/package.json +7 -2
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { Devicex,
|
|
2
|
-
import { ObjectOrArray } from '../types';
|
|
1
|
+
import { Devicex, ErrorResponse, Metadata } from '@iotopen/node-lynx';
|
|
3
2
|
export declare const useDevices: (installationId: number | string, filter?: Metadata) => {
|
|
4
3
|
loading: boolean;
|
|
5
4
|
error: ErrorResponse | undefined;
|
|
6
|
-
create:
|
|
7
|
-
remove:
|
|
5
|
+
create: (...args: any[]) => any;
|
|
6
|
+
remove: (...args: any[]) => any;
|
|
8
7
|
devices: Devicex[];
|
|
9
8
|
refresh: () => void;
|
|
10
9
|
};
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ObjectOrArray } from '../types';
|
|
1
|
+
import { ErrorResponse, Functionx, Metadata } from '@iotopen/node-lynx';
|
|
3
2
|
export declare const useFunctions: (installationId: number | string, filter?: Metadata) => {
|
|
4
3
|
loading: boolean;
|
|
5
4
|
error: ErrorResponse | undefined;
|
|
6
|
-
create:
|
|
7
|
-
remove:
|
|
5
|
+
create: (...args: any[]) => any;
|
|
6
|
+
remove: (...args: any[]) => any;
|
|
8
7
|
functions: Functionx[];
|
|
9
8
|
refresh: () => void;
|
|
10
9
|
};
|
package/dist/Hooks/useMeta.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { default as Paho, Qos, TypedArray } from 'paho-mqtt';
|
|
2
2
|
interface MQTTHandlers {
|
|
3
3
|
onMessage?: Paho.OnMessageHandler;
|
|
4
4
|
onDelivery?: Paho.OnMessageHandler;
|
|
@@ -8,8 +8,8 @@ interface MQTTHandlers {
|
|
|
8
8
|
export declare const usePahoMQTTClient: (uri: string, handlers?: MQTTHandlers, connectionOptions?: Paho.ConnectionOptions, clientId?: string) => {
|
|
9
9
|
client: import('react').RefObject<Paho.Client>;
|
|
10
10
|
connected: boolean;
|
|
11
|
-
error: MQTTError | undefined;
|
|
12
|
-
sub: (topic: string, qos?: Qos) => Promise<Qos>;
|
|
11
|
+
error: Paho.MQTTError | undefined;
|
|
12
|
+
sub: (topic: string, qos?: Qos) => Promise<Paho.Qos>;
|
|
13
13
|
pub: (topic: string, payload: string | TypedArray, qos?: Qos, retained?: boolean) => void;
|
|
14
14
|
unsub: (topic: string) => Promise<void>;
|
|
15
15
|
};
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("react/jsx-runtime"),e=require("react"),I=require("@iotopen/node-lynx"),W=require("paho-mqtt"),X={lynxClient:new I.LynxClient(""),newLynxClient:(n,r,t)=>{}},Q=e.createContext(X),Y=({children:n,url:r,apiKey:t,bearer:s})=>{const[o,u]=e.useState(new I.LynxClient(r,t,s)),l=e.useCallback((i,d,f)=>{u(new I.LynxClient(i,d,f))},[u]),a=e.useMemo(()=>({lynxClient:o,newLynxClient:l}),[o,l]);return P.jsx(Q.Provider,{value:a,children:n})},w=()=>e.useContext(Q),Z={user:null,permissions:null},G=e.createContext(Z),ee=({children:n})=>{const[r,t]=e.useState(null),[s,o]=e.useState(null),[u,l]=e.useState(!0),[a,i]=e.useState(),{lynxClient:d}=w();e.useLayoutEffect(()=>{const c=d.getMe(),p=d.getPermissions();l(!0),Promise.all([c,p]).then(([g,v])=>{i(h=>h!==void 0?void 0:h),t(g),o(v)}).catch(g=>{i(g),t(null),o(null)}).finally(()=>{l(!1)})},[d]);const f=e.useMemo(()=>({user:r,permissions:s,loading:u,error:a}),[r,s,u,a]);return P.jsx(G.Provider,{value:f,children:n})},z=()=>e.useContext(G),U=()=>{const{permissions:n}=z();return n},te=({children:n,apiURL:r,apiKey:t,bearer:s})=>P.jsx(Y,{url:r,apiKey:t,bearer:s,children:P.jsx(ee,{children:n})}),ne=(...n)=>{const r=U();return r==null?!1:n.every(t=>r[t]!==void 0&&r[t])},se=(...n)=>{const r=U();return r==null?!1:n.some(t=>r[t]!==void 0&&r[t])},oe=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid installationId");const{lynxClient:t}=w(),[s,o]=e.useState(!0),[u,l]=e.useState(),[a,i]=e.useState([]),d=e.useCallback(()=>{o(!0),t.getConfiguredEdgeApps(r).then(f=>{l(c=>c!==void 0?void 0:c),i(f)}).catch(f=>{l(f)}).finally(()=>{o(!1)})},[r,t]);return e.useLayoutEffect(()=>{d()},[d]),{refresh:d,loading:s,error:u,apps:a}},re={updated:0,created:0,id:0,installation_id:0,type:"",meta:{},protected_meta:{}},ae=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r;if(isNaN(t)||isNaN(s))throw new Error("invalid installationId or deviceId");const{lynxClient:o}=w(),[u,l]=e.useState(!0),[a,i]=e.useState({...re}),[d,f]=e.useState();e.useLayoutEffect(()=>{o.getDevice(t,s).then(v=>{f(h=>h!==void 0?void 0:h),i(v)}).catch(v=>{f(v)}).finally(()=>{l(!1)})},[o,t,s]);const c=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("update on undefined function");return o.updateDevice(a)}),[o,a]),p=e.useCallback(v=>{a&&i({...a,type:v})},[a,i]),g=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("delete on undefined function");return o.deleteDevice(a)}),[a,o]);return{loading:u,error:d,Device:a,setDevice:i,update:c,remove:g,setType:p}},ie=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r,{lynxClient:o}=w(),u=e.useCallback((i,d,f,c)=>{const p=f??s??0;return o.createDeviceMeta(t,p,i,d,c)},[o,t,s]),l=e.useCallback((i,d,f,c,p)=>{const g=c??s??0;return o.updateDeviceMeta(t,g,i,d,p,f)},[o,t,s]),a=e.useCallback((i,d,f)=>{const c=d??s??0;return o.deleteDeviceMeta(t,c,i,f)},[o,t,s]);return{createMeta:u,updateMeta:l,removeMeta:a}},R=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t)&&t!==void 0)throw new Error("invalid installationId");const{lynxClient:s}=w(),[o,u]=e.useState(!0),[l,a]=e.useState([]),[i,d]=e.useState(),f=e.useCallback(()=>{if(t===void 0){u(!1),a([]);return}u(!0),s.getDevices(t,r).then(h=>{d(C=>C!==void 0?void 0:C),a(h)}).catch(h=>{d(h)}).finally(()=>{u(!1)})},[s,t,r]);function c(h){if(Array.isArray(h)){const C=h.pop();if(!C)return Promise.allSettled([]);const b=h.map((m=>s.deleteDevice(m,!0)));return Promise.allSettled(b).then(async m=>{try{m.push({status:"fulfilled",value:await s.deleteDevice(C)})}catch(y){m.push({status:"rejected",reason:y})}return m})}return s.deleteDevice(h)}function p(h){if(Array.isArray(h)){const C=h.pop();if(!C)return Promise.allSettled([]);const b=h.map(m=>s.createDevice(m,!0));return Promise.allSettled(b).then(async m=>{try{m.push({status:"fulfilled",value:await s.createDevice(C)})}catch(y){m.push({status:"rejected",reason:y})}return m})}return s.createDevice(h)}const g=e.useCallback(p,[s,p]),v=e.useCallback(c,[s,c]);return e.useLayoutEffect(()=>{f()},[f]),{loading:o,error:i,create:g,remove:v,devices:l,refresh:f}},ce={id:0,created:0,updated:0,name:"",category:"",short_description:"",description:"",source_url:"",tags:[],publisher:{id:0},public:!1,official:!1},ue=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid appId");const{lynxClient:t}=w(),[s,o]=e.useState(!1),[u,l]=e.useState(),[a,i]=e.useState({...ce}),d=e.useCallback(()=>{o(!0),t.getEdgeApp(r).then(f=>{l(c=>c!==void 0?void 0:c),i(f)}).catch(f=>{l(f)}).finally(()=>{o(!1)})},[r,t]);return e.useLayoutEffect(()=>{d()},[d]),{loading:s,error:u,app:a,setApp:i,refresh:d}},le=()=>{const{lynxClient:n}=w(),[r,t]=e.useState(!0),[s,o]=e.useState(),[u,l]=e.useState([]),a=e.useCallback(()=>{t(!0),n.getEdgeApps().then(i=>{o(d=>d!==void 0?void 0:d),l(i)}).catch(i=>{o(i)}).finally(()=>{t(!1)})},[n]);return e.useLayoutEffect(()=>{a()},[a]),{apps:u,error:s,loading:r,refresh:a}},de=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t))throw new Error("invalid appId");const{lynxClient:s}=w(),[o,u]=e.useState(!1),[l,a]=e.useState(),[i,d]=e.useState([]),f=e.useCallback(()=>{u(!0),s.getEdgeAppVersions(t,r).then(p=>{a(g=>g!==void 0?void 0:g),d(p)}).catch(p=>{a(p)}).finally(()=>{u(!1)})},[s,t,r]),c=e.useCallback((p,g)=>s.nameEdgeAppVersion(t,p,g),[s,t]);return e.useLayoutEffect(()=>{f()},[f]),{loading:o,error:l,versions:i,nameVersion:c,refresh:f}},fe={id:0,installation_id:0,type:"",updated:0,created:0,meta:{},protected_meta:{}},pe=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r;if(isNaN(t)||isNaN(s))throw new Error("invalid installationId or functionId");const{lynxClient:o}=w(),[u,l]=e.useState(!0),[a,i]=e.useState({...fe}),[d,f]=e.useState();e.useLayoutEffect(()=>{o.getFunction(t,s).then(v=>{f(h=>h!==void 0?void 0:h),i(v)}).catch(v=>{f(v)}).finally(()=>{l(!1)})},[o,t,s]);const c=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("update on undefined function");return o.updateFunction(a)}),[o,a]),p=e.useCallback(v=>{a&&i({...a,type:v})},[a,i]),g=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("delete on undefined function");return o.deleteFunction(a)}),[a,o]);return{loading:u,error:d,Function:a,setFunction:i,update:c,remove:g,setType:p}},he=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r,{lynxClient:o}=w(),u=e.useCallback((i,d,f,c)=>{const p=f??s??0;return o.createFunctionMeta(t,p,i,d,c)},[o,t,s]),l=e.useCallback((i,d,f,c,p)=>{const g=c??s??0;return o.updateFunctionMeta(t,g,i,d,p,f)},[o,t,s]),a=e.useCallback((i,d,f)=>{const c=d??s??0;return o.deleteFunctionMeta(t,c,i,f)},[o,t,s]);return{createMeta:u,updateMeta:l,removeMeta:a}},T=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t)&&t!==void 0)throw new Error("invalid installationId");const{lynxClient:s}=w(),[o,u]=e.useState(!0),[l,a]=e.useState([]),[i,d]=e.useState(),f=e.useCallback(()=>{if(t===void 0){u(!1),a([]);return}u(!0),s.getFunctions(t,r).then(h=>(d(C=>C!==void 0?void 0:C),a(h),h)).catch(h=>{d(h)}).finally(()=>{u(!1)})},[s,t,r]);function c(h){if(Array.isArray(h)){const C=h.pop();if(!C)return Promise.allSettled([]);const b=h.map((m=>s.deleteFunction(m,!0)));return Promise.allSettled(b).then(async m=>{try{m.push({status:"fulfilled",value:await s.deleteFunction(C)})}catch(y){m.push({status:"rejected",reason:y})}return m})}return s.deleteFunction(h)}function p(h){if(Array.isArray(h)){const C=h.pop();if(!C)return Promise.allSettled([]);const b=h.map(m=>s.createFunction(m,!0));return Promise.allSettled(b).then(async m=>{try{m.push({status:"fulfilled",value:await s.createFunction(C)})}catch(y){m.push({status:"rejected",reason:y})}return m})}return s.createFunction(h)}const g=e.useCallback(p,[s,p]),v=e.useCallback(c,[s,c]);return e.useLayoutEffect(()=>{f()},[f]),{loading:o,error:i,create:g,remove:v,functions:l,refresh:f}},ge=()=>{const{lynxClient:n}=w(),[r,t]=e.useState(!0),[s,o]=e.useState(),[u,l]=e.useState([]),a=e.useCallback(()=>{t(!0),n.getIDTokenAlgorithms().then(i=>{o(d=>d!==void 0?void 0:d),l(i)}).catch(i=>{o(i)}).finally(()=>{t(!1)})},[n]);return e.useEffect(()=>{a()},[]),{loading:r,refresh:a,algs:u,error:s}},ye={client_id:0,notes:"",organization_id:0,id:0,name:"",created:0,meta:{},users:[],protected_meta:{}},B=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid installationId");const{lynxClient:t}=w(),[s,o]=e.useState(!0),[u,l]=e.useState(void 0),[a,i]=e.useState({...ye});e.useLayoutEffect(()=>{t.getInstallationRow(r).then(c=>{l(p=>p!==void 0?void 0:p),i(c)}).catch(c=>{l(c)}).finally(()=>{o(!1)})},[t,r]);const d=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("update on undefined installation");return t.updateInstallation(a)}),[t,a]),f=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("update on undefined installation");return t.deleteInstallation(a)}),[t,a]);return{installation:a,setInstallation:i,update:d,remove:f,error:u,loading:s}},ve=n=>{const{lynxClient:r}=w(),[t,s]=e.useState([]),[o,u]=e.useState(!0),[l,a]=e.useState(void 0),i=e.useCallback(()=>{u(!0),r.getInstallations(n).then(d=>{a(f=>f!==void 0?void 0:f),s(d)}).catch(d=>{a(d)}).finally(()=>{u(!1)})},[r]);return e.useLayoutEffect(()=>{i()},[i]),{installations:t,refresh:i,loading:o,error:l}},Ce=n=>{const{lynxClient:r}=w(),[t,s]=e.useState(!0),[o,u]=e.useState([]),[l,a]=e.useState(),i=e.useCallback(()=>{s(!0),r.listInstallations(n).then(d=>{a(f=>f!==void 0?void 0:f),u(d)}).catch(d=>{a(()=>d)}).finally(()=>{s(!1)})},[r,n]);return e.useLayoutEffect(()=>{i()},[i]),{loading:t,error:l,installations:o,refresh:i}},K=(n,r,t,s)=>{if(s===void 0){let h;window?.crypto?.randomUUID?h=window.crypto.randomUUID():typeof crypto<"u"&&crypto?.randomUUID?h=crypto.randomUUID():h=Math.random().toString(36).substring(2,15),s=`paho-ws-mqtt-${h}`}const o=e.useRef(new W.Client(n,s)),u=e.useRef(t),l=e.useRef(r),a=e.useRef(void 0),[i,d]=e.useState(!1),[f,c]=e.useState(void 0);e.useLayoutEffect(()=>{const h=o,C=a,b={timeout:5,...u.current,onFailure:y=>{c(y),d(o.current.isConnected()),C.current??=window.setInterval(()=>{h.current.isConnected()?clearInterval(C.current):h.current.connect(b)},5e3)},onSuccess:()=>{c(void 0),d(o.current.isConnected()),C.current!==void 0&&(window.clearInterval(C.current),C.current=void 0)}},m=l.current;h.current.onConnectionLost=y=>{c(y),d(o.current.isConnected()),m?.onDisconnect?.(y)},h.current.onConnected=(y,N)=>{d(o.current.isConnected()),c(void 0),m?.onConnected?.(y,N)},m&&(m.onMessage&&(h.current.onMessageArrived=m.onMessage),m.onDelivery&&(h.current.onMessageDelivered=m.onDelivery));try{h.current.connect(b)}catch{window.setTimeout(()=>{h.current.connect(b)},5e3)}return()=>{try{h.current.disconnect(),C.current!==void 0&&window.clearInterval(C.current)}catch(y){console.log(y)}}},[]);const p=e.useCallback((h,C)=>new Promise(b=>{o.current.subscribe(h,{qos:C??0,timeout:1,onFailure:m=>{throw m},onSuccess:m=>{b(m.grantedQos)}})}),[o]),g=e.useCallback((h,C,b,m)=>{let y;if(typeof C=="string")y=C;else if(ArrayBuffer.isView(C))y=new Uint8Array(C.buffer,C.byteOffset,C.byteLength).slice().buffer;else throw new Error("Payload must be a string or TypedArray");o.current.send(h,y,b,m)},[o]),v=e.useCallback(h=>new Promise(C=>{o.current.unsubscribe(h,{timeout:1,onSuccess:()=>{C()},onFailure:b=>{throw b}})}),[o]);return{client:o,connected:i,error:f,sub:p,pub:g,unsub:v}};function me(n,r){if(n.length===r.length){for(let t=0;t<n.length;t++)if(n[t]!==r[t])return!1;return!0}return!1}function we(n,r){return new Promise(t=>{r.forEach(async s=>{try{await n(s)}catch(o){console.warn("failed to unsubscribe to",s,o)}}),t()})}function be(n,r){return new Promise(t=>{r.forEach(async s=>{try{await n(s)}catch(o){console.warn("failed to subscribe to",s,o)}}),t()})}const H=(n,r,t)=>{n===void 0&&(window!==void 0?n=window.location.protocol==="http:"?`ws://${window.location.host}/mqtt`:`wss://${window.location.host}/mqtt`:n=location.protocol==="http:"?`ws://${location.host}/mqtt`:`wss://${location.host}/mqtt`);const s=e.useRef([]),o=e.useRef(new Map([])),u=e.useRef(new Map([])),l=e.useCallback(y=>{const N=u.current.get(y.destinationName);N&&N.forEach(E=>{E(y.destinationName,new TextDecoder().decode(y.payloadBytes),y.qos,y.retained)}),o.current.forEach((E,x)=>{new RegExp(x).test(y.destinationName)&&E.forEach(q=>{q(y.destinationName,new TextDecoder().decode(y.payloadBytes),y.qos,y.retained)})})},[]),a=e.useRef(!1),i={cleanSession:!0,reconnect:!0,keepAliveInterval:5};r&&(i.userName=r),t&&(i.password=t);const{error:d,connected:f,sub:c,unsub:p,pub:g}=K(n,{onMessage:l,onConnected:()=>{s.current.forEach(y=>{c(y).catch(N=>{console.warn("Failed to subscribe to",y,N)})})}},i);e.useEffect(()=>{a.current=f},[f]);const v=e.useCallback((y,N)=>{let E;typeof y=="string"?E=new RegExp(`^${y}$`):E=y;const x=E.toString().slice(1,-1);let M=o.current.get(x);if(M===void 0){M=[N],o.current.set(x,M);return}M.includes(N)||M.push(N)},[]),h=e.useCallback(y=>{o.current.forEach((N,E)=>{const x=N.filter(M=>M!==y);o.current.set(E,x)})},[]),C=e.useCallback((y,N)=>{let E=u.current.get(y);if(E===void 0){E=[N],u.current.set(y,E);return}E.includes(N)||E.push(N)},[]),b=e.useCallback((y,N)=>{const E=u.current.get(y);E!==void 0&&u.current.set(y,E.filter(x=>x!==N))},[]);return{setSubs:e.useCallback(y=>{me(s.current,y)||(a.current&&we(p,s.current).then(()=>be(c,y)).catch(N=>{console.warn("Failed to update subscriptions",N)}),s.current=y)},[c,p]),error:d,connected:f,bind:v,unbind:h,bindExact:C,unbindExact:b,pub:g}},D=()=>{const n=w(),{user:r}=z(),t=new URL(n.lynxClient.baseURL),s=t.protocol==="http:"?"ws:":"wss:",o=t.hostname,u=t.port?`:${t.port}`:"",l=`${s}//${o}${u}/mqtt`;let a=r?.email??"api-key";return n.lynxClient.bearer&&(a="bearer"),H(l,a,n.lynxClient.apiKey)},Ne=n=>{const r=D(),{functions:t,refresh:s}=T(n.id),{devices:o,refresh:u}=R(n.id),{unbind:l,bind:a,setSubs:i}=r;return e.useEffect(()=>(i([`${n.client_id}/#`]),a(/[0-9]+\/evt\/functionx\/updated/,s),a(/[0-9]+\/evt\/devicex\/updated/,u),()=>{l(s),l(u)}),[a,u,s,n,i,l]),{installation:n,functions:t,devices:o,mqtt:r}},Ee=n=>{const r=D(),{installation:t}=B(n),{functions:s,refresh:o}=T(n),{devices:u,refresh:l}=R(n),{unbind:a,bind:i,setSubs:d}=r;return e.useEffect(()=>(d([`${t.client_id}/#`]),i(/[0-9]+\/evt\/functionx\/updated/,o),i(/[0-9]+\/evt\/devicex\/updated/,l),()=>{a(o),a(l)}),[i,l,o,t,d,a]),{installation:t,functions:s,devices:u,mqtt:r}},Se=(n,r=[])=>{const[t,s]=e.useState([]);e.useLayoutEffect(()=>{if(n){const c=[];for(const p in n.meta){const g=n.meta[p];c.push({key:p,value:g??"",protected:!1})}for(const p in n.protected_meta){const g=n.protected_meta[p];c.push({key:p,value:g??"",protected:!0})}c.sort((p,g)=>p.key.localeCompare(g.key)),s(c)}},[n,...r]);const o=e.useCallback(()=>{const c={meta:{},protected_meta:{}};return t.forEach(p=>{p.protected?c.protected_meta[p.key]=p.value:c.meta[p.key]=p.value}),c},[t]),u=e.useCallback(c=>{s([...t,c??{key:"",value:"",protected:!1}])},[t,s]),l=e.useCallback(c=>{s(t.filter((p,g)=>g!==c))},[t,s]),a=e.useCallback((c,p)=>{s(t.map((g,v)=>v===c?p:g))},[t,s]),i=e.useCallback((c,p)=>{s(t.map((g,v)=>v===c?{...g,key:p}:g))},[t,s]),d=e.useCallback((c,p)=>{s(t.map((g,v)=>v===c?{...g,value:p}:g))},[t,s]),f=e.useCallback((c,p)=>{s(t.map((g,v)=>v===c?{...g,protected:p}:g))},[t,s]);return{metaList:t,compile:o,addMeta:u,removeMeta:l,setMeta:a,setMetaKey:i,setMetaValue:d,setMetaProtected:f}},ke=n=>{const{lynxClient:r}=w(),t=D(),{bind:s,unbind:o,setSubs:u}=t,[l,a]=e.useState(new Map),[i,d]=e.useState(new Map),[f,c]=e.useState(new Map),[p,g]=e.useState(new Map),v=e.useCallback(C=>{const b=i.get(C);return b!==void 0?b.client_id:0},[i]),h=e.useCallback(C=>{const b=l.get(C);return b!==void 0?b.id:0},[l]);return e.useEffect(()=>{if(n.length===0)return;const C=new Map,b=new Map,m=new Array;n.forEach(S=>{C.set(S.id,S),b.set(S.client_id,S),m.push(`${S.client_id}/#`)});let y=!1;const N=n.map(async S=>({functions:await r.getFunctions(S.id),installationId:S.id})),E=n.map(async S=>({devices:await r.getDevices(S.id),installationId:S.id})),x=new Map,M=new Map;new Promise((S,L)=>{let k=!1,_=!1;Promise.allSettled(N).then(O=>{O.forEach(A=>{A.status==="fulfilled"&&M.set(A.value.installationId,A.value.functions)}),k=!0,k&&_&&S()}).catch(L),Promise.allSettled(E).then(O=>{O.forEach(A=>{A.status==="fulfilled"&&x.set(A.value.installationId,A.value.devices)}),_=!0,k&&_&&S()}).catch(L)}).finally(()=>{a(()=>b),d(()=>C),c(()=>M),g(()=>x),y=!0}).catch(S=>{console.warn("Error in work.finally:",S)});const $=S=>{if(!y)return;const L=Number(S.split("/")[0]),k=b.get(L);k!==void 0&&r.getFunctions(k.id).then(_=>{c(O=>new Map([...O,[k.id,_]]))}).catch(_=>{console.warn("Failed to update function map for",k.id,_)})},V=S=>{if(!y)return;const L=Number(S.split("/")[0]),k=b.get(L);k!==void 0&&r.getDevices(k.id).then(_=>{g(O=>new Map([...O,[k.id,_]]))}).catch(_=>{console.warn("Failed to update device map for",k.id,_)})};return u(m),s(/[0-9]+\/evt\/functionx\/updated/,$),s(/[0-9]+\/evt\/devicex\/updated/,V),()=>{o($),o(V)}},[n,r,s,o,u]),{installationMap:i,functionMap:f,deviceMap:p,mqtt:t,toClientId:v,toInstallationId:h}},xe=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t))throw new Error("invalid installationId");const{lynxClient:s}=w(),[o,u]=e.useState({meta:{},protected_meta:{},type:"",...r,installation_id:t}),l=e.useCallback(i=>{u({...o,type:i})},[o,u]),a=e.useCallback(()=>s.createDevice(o),[s,o]);return{newDevice:o,setNewDevice:u,create:a,setType:l}},Me=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t))throw new Error("invalid installationId");const{lynxClient:s}=w(),[o,u]=e.useState({meta:{},protected_meta:{},type:"",...r,installation_id:t}),l=e.useCallback(i=>{u({...o,type:i})},[o,u]),a=e.useCallback(()=>s.createFunction(o),[s,o]);return{newFunction:o,setNewFunction:u,create:a,setType:l}},_e=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t))throw new Error("invalid organizationId");const[s,o]=e.useState({name:"",notes:"",users:[],meta:{},protected_meta:{},...r,organization_id:t}),{lynxClient:u}=w(),l=e.useCallback(()=>u.createInstallation(s),[u,s]);return{newInstallation:s,setNewInstallation:o,create:l}},Le={installation_id:0,name:"",text:""},Oe=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,{lynxClient:s}=w(),[o,u]=e.useState({...Le,...r,installation_id:t}),l=e.useCallback(()=>s.createNotificationMessage(o),[s,o]);return{newNotificationMessage:o,setNewNotificationMessage:u,create:l}},Ae={installation_id:0,name:"",notification_message_id:0,notification_output_executor_id:0,config:{}},Ie=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,{lynxClient:s}=w(),[o,u]=e.useState({...Ae,...r,installation_id:t}),l=e.useCallback(()=>s.createNotificationOutput(o),[s,o]);return{newNotificationOutput:o,setNewNotificationOutput:u,create:l}},Pe=n=>{const{lynxClient:r}=w(),[t,s]=e.useState({...I.zero.getEmptyOAuth2Client(),...n}),o=e.useCallback(c=>{s({...t,name:c})},[t]),u=e.useCallback(c=>{s({...t,allowed_scopes:c})},[t]),l=e.useCallback(c=>{s({...t,icon_uri:c})},[t]),a=e.useCallback(c=>{s({...t,tos_uri:c})},[t]),i=e.useCallback(c=>{s({...t,policy_uri:c})},[t]),d=e.useCallback(c=>{s({...t,redirect_uris:c})},[t]),f=e.useCallback(()=>r.createOAuth2Client(t),[r,t]);return{newClient:t,create:f,setName:o,setScope:u,setIconURI:l,setTosURI:a,setPolicyURI:i,setRedirectURIs:d,setClient:s}},De={address:{address:"",city:"",country:"",zip:""},children:[],email:"",force_sms_login:!1,meta:{},name:"",notes:"",parent:0,password_valid_days:0,phone:"",protected_meta:{}},Fe=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t))throw new Error("invalid parentId");const{lynxClient:s}=w(),[o,u]=e.useState({...De,...r,parent:t}),l=e.useCallback(()=>s.createOrganization(o),[s,o]);return{newOrganization:o,setNewOrganization:u,create:l}},ze={address:{address:"",zip:"",city:"",country:""},assigned_installations:[],email:"",expire_at:0,first_name:"",last_name:"",mobile:"",note:"",organisations:[],password:"",role:0,sms_login:!1,protected_meta:{},meta:{}},Ue=n=>{const[r,t]=e.useState({...ze,...n}),{lynxClient:s}=w(),o=e.useCallback(()=>s.createUser(r),[s,r]);return{newUser:r,setNewUser:t,create:o}},j={id:0,installation_id:0,name:"",text:""},Re=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r;if(isNaN(t))throw new Error("invalid installationId");if(isNaN(s))throw new Error("invalid messageId");const{lynxClient:o}=w(),[u,l]=e.useState(!0),[a,i]=e.useState({...j}),[d,f]=e.useState(),c=e.useCallback(()=>{t===0||s===0||(l(!0),o.getNotificationMessage(t,s).then(v=>{f(h=>h!==void 0?void 0:h),i(v)}).catch(v=>{f(v)}).finally(()=>{l(!1)}))},[s,t,o]),p=e.useCallback(()=>{d!==void 0&&f(void 0),o.updateNotificationMessage(a).then(v=>{i(v)}).catch(v=>{f(v)})},[d,o,a]),g=e.useCallback(()=>{o.deleteNotificationMessage(a).then(()=>{i({...j})}).catch(v=>{f(v)})},[o,a]);return e.useEffect(()=>{c()},[]),{refresh:c,message:a,setMessage:i,error:d,loading:u,remove:g,update:p}},Te=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid installationId");const{lynxClient:t}=w(),[s,o]=e.useState([]),[u,l]=e.useState(!0),[a,i]=e.useState(),d=e.useCallback(()=>{t.getNotificationMessages(r).then(f=>{i(c=>c!==void 0?void 0:c),o(f)}).catch(f=>{i(f)}).finally(()=>{l(!1)})},[r,t]);return e.useEffect(()=>{d()},[]),{refresh:d,notificationMessages:s,error:a,loading:u}},F={id:0,installation_id:0,name:"",notification_message_id:0,notification_output_executor_id:0,config:{}},qe=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r;if(isNaN(t))throw new Error("invalid installationId");if(isNaN(s))throw new Error("invalid notificationId");const{lynxClient:o}=w(),[u,l]=e.useState(!0),[a,i]=e.useState({...F,config:{...F.config}}),[d,f]=e.useState(),c=e.useCallback(()=>{t===0||s===0||(l(!0),o.getNotificationOutput(t,s).then(v=>{f(h=>h!==void 0?void 0:h),i(v)}).catch(v=>{f(v)}).finally(()=>{l(!1)}))},[s,t,o]),p=e.useCallback(()=>{d!==void 0&&f(void 0),o.updateNotificationOutput(a).then(v=>{i(v)}).catch(v=>{f(v)})},[d,o,a]),g=e.useCallback(()=>{o.deleteNotificationOutput(a).then(()=>{i({...F})}).catch(v=>{f(v)})},[o,a]);return e.useEffect(()=>{c()},[]),{refresh:c,output:a,setOutput:i,error:d,loading:u,remove:g,update:p}},$e={id:0,type:"",name:"",organization_id:0,config:{},secret:""},Ve=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r;if(isNaN(t))throw new Error("invalid installationId");if(isNaN(s))throw new Error("invalid messageId");const{lynxClient:o}=w(),[u,l]=e.useState(!0),[a,i]=e.useState({...$e}),[d,f]=e.useState(),c=e.useCallback(()=>{t===0||s===0||(l(!0),o.getNotificationOutputExecutor(t,s).then(p=>{f(g=>g!==void 0?void 0:g),i(p)}).catch(p=>{f(p)}).finally(()=>{l(!1)}))},[s,t,o]);return e.useEffect(()=>{c()},[]),{refresh:c,outputExecutor:a,setOutputExecutor:i,error:d,loading:u}},je=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid installationId");const{lynxClient:t}=w(),[s,o]=e.useState([]),[u,l]=e.useState(!0),[a,i]=e.useState(),d=e.useCallback(()=>{t.getNotificationOutputExecutors(r).then(f=>{i(c=>c!==void 0?void 0:c),o(f)}).catch(f=>{i(f)}).finally(()=>{l(!1)})},[r,t]);return e.useEffect(()=>{d()},[]),{refresh:d,notificationExecutors:s,error:a,loading:u}},Qe=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid installationId");const{lynxClient:t}=w(),[s,o]=e.useState([]),[u,l]=e.useState(!0),[a,i]=e.useState(),d=e.useCallback(()=>{t.getNotificationOutputs(r).then(f=>{i(c=>c!==void 0?void 0:c),o(f)}).catch(f=>{i(f)}).finally(()=>{l(!1)})},[r,t]);return e.useEffect(()=>{d()},[]),{refresh:d,notificationOutputs:s,error:a,loading:u}},J=n=>{const{lynxClient:r}=w(),[t,s]=e.useState(!0),[o,u]=e.useState(),[l,a]=e.useState({...I.zero.getOAuth2Client()}),i=e.useCallback(()=>{t||s(!0),r.getOAuth2Client(n).then(c=>{u(p=>p!==void 0?void 0:p),a(c)}).catch(c=>{u(c)}).finally(()=>{s(!1)})},[t,r,n]);e.useEffect(()=>{i()},[n]);const d=e.useCallback(()=>r.deleteOAuth2Client(l),[l,r]),f=e.useCallback(()=>r.updateOAuth2Client(l),[l,r]);return{refresh:i,client:l,setClient:a,error:o,loading:t,remove:d,update:f}},Ge=()=>{const{lynxClient:n}=w(),[r,t]=e.useState(!0),[s,o]=e.useState(),[u,l]=e.useState([]),a=e.useCallback(()=>{n.getOAuth2Clients().then(i=>{o(d=>d!==void 0?void 0:d),l(i)}).catch(i=>{o(i)}).finally(()=>{t(!1)})},[n]);return e.useEffect(()=>{a()},[]),{refresh:a,clients:u,error:s,loading:r}},Be=()=>{const{lynxClient:n}=w(),[r,t]=e.useState([]),[s]=e.useState(new URLSearchParams(window.location.search)),o=s.get("client_id")??"",{client:u}=J(o),l=e.useCallback(a=>{const i=Object.fromEntries(s);return i.scope=a.join(" "),n.consentOAuth2Authorization(i)},[n,s]);return e.useEffect(()=>{t(s.get("scope")?.split(" ")??[])},[s]),{consent:l,client:u,requestedScopes:r}},Ke={address:{address:"",city:"",country:"",zip:""},children:[],email:"",force_sms_login:!1,meta:{},name:"",notes:"",parent:0,password_valid_days:0,phone:"",protected_meta:{},id:0},He=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid organizationId");const[t,s]=e.useState({...Ke}),[o,u]=e.useState(!0),[l,a]=e.useState(),{lynxClient:i}=w(),d=e.useCallback(()=>{u(!0),i.getOrganization(r).then(p=>{a(g=>g!==void 0?void 0:g),s(p)}).catch(p=>{a(p)}).finally(()=>{u(!1)})},[i,r]);e.useEffect(()=>{d()},[]);const f=e.useCallback(()=>i.updateOrganization(t),[i,t]),c=e.useCallback(()=>i.deleteOrganization(t),[i,t]);return{loading:o,organization:t,setOrganization:s,error:l,update:f,remove:c,refresh:d}},Je=n=>{const{lynxClient:r}=w(),[t,s]=e.useState(!0),[o,u]=e.useState(),[l,a]=e.useState([]),i=e.useCallback(()=>{s(!0),r.getOrganizations(n===!0).then(c=>{u(p=>p!==void 0?void 0:p),a(c)}).catch(c=>{u(c)}).finally(()=>{s(!1)})},[r,n]);e.useEffect(()=>{i()},[]);const d=e.useCallback(c=>r.createOrganization(c),[r]),f=e.useCallback(c=>r.deleteOrganization(c),[r]);return{loading:t,organizations:l,setOrganizations:a,error:o,create:d,remove:f}},We=()=>{const{lynxClient:n}=w(),[r,t]=e.useState([]),[s,o]=e.useState(),[u,l]=e.useState(!0),a=e.useCallback(()=>{l(!0),n.getRoles().then(i=>{o(d=>d!==void 0?void 0:d),t(i)}).catch(i=>{o(i)}).finally(()=>{l(!1)})},[n]);return e.useEffect(()=>{a()},[]),{loading:u,error:s,roles:r,refresh:a}},Xe=()=>{const{lynxClient:n}=w(),[r,t]=e.useState(!0),[s,o]=e.useState(),[u,l]=e.useState([]),a=e.useCallback(()=>{t(!0),n.getTokens().then(f=>{o(c=>c!==void 0?void 0:c),l(f)}).catch(f=>{o(f)}).finally(()=>{t(!1)})},[n]),i=e.useCallback(f=>n.deleteToken(f),[n]),d=e.useCallback(f=>n.createToken(f),[n]);return e.useLayoutEffect(()=>{a()},[a]),{tokens:u,remove:i,create:d,refresh:a,loading:r,error:s}},Ye={id:0,address:{address:"",zip:"",city:"",country:""},assigned_installations:[],email:"",expire_at:0,first_name:"",last_name:"",mobile:"",note:"",organisations:[],password:"",role:0,sms_login:!1,protected_meta:{},meta:{}},Ze=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid userId");const[t,s]=e.useState({...Ye}),[o,u]=e.useState(!0),{lynxClient:l}=w(),[a,i]=e.useState(),d=e.useCallback(()=>{u(!0),l.getUser(r).then(p=>{i(g=>g!==void 0?void 0:g),s(p)}).catch(p=>{i(p)}).finally(()=>{u(!1)})},[l,r]),f=e.useCallback(()=>l.updateUser(t),[l,t]),c=e.useCallback(()=>l.deleteUser(t),[l,t]);return{loading:o,error:a,user:t,setUser:s,update:f,refresh:d,remove:c}},et=n=>{const[r,t]=e.useState([]),[s,o]=e.useState(!0),[u,l]=e.useState(),{lynxClient:a}=w();new URLSearchParams;const i=e.useCallback(()=>{o(!0),a.getUsers(n).then(d=>{l(f=>f!==void 0?void 0:f),t(d)}).catch(d=>{l(d)}).finally(()=>{o(!1)})},[a,n]);return{users:r,setUsers:t,refresh:i,loading:s,error:u}};exports.LynxProvider=te;exports.useConfiguredEdgeApps=oe;exports.useDevice=ae;exports.useDeviceMeta=ie;exports.useDevices=R;exports.useEdgeApp=ue;exports.useEdgeAppVersions=de;exports.useEdgeApps=le;exports.useFunction=pe;exports.useFunctionMeta=he;exports.useFunctions=T;exports.useGlobalLynxClient=w;exports.useGlobalPermissions=U;exports.useGlobalUser=z;exports.useIDTokenAlgorithms=ge;exports.useInstallation=B;exports.useInstallationInfo=ve;exports.useInstallations=Ce;exports.useLiveInstallation=Ne;exports.useLiveInstallationId=Ee;exports.useMQTT=D;exports.useMeta=Se;exports.useMultiLiveInstallation=ke;exports.useNewDevice=xe;exports.useNewFunction=Me;exports.useNewInstallation=_e;exports.useNewNotificationMessage=Oe;exports.useNewNotificationOutput=Ie;exports.useNewOAuth2Client=Pe;exports.useNewOrganization=Fe;exports.useNewUser=Ue;exports.useNotificationMessage=Re;exports.useNotificationMessages=Te;exports.useNotificationOutput=qe;exports.useNotificationOutputExecutor=Ve;exports.useNotificationOutputExecutors=je;exports.useNotificationOutputs=Qe;exports.useOAuth2Client=J;exports.useOAuth2Clients=Ge;exports.useOAuth2Consent=Be;exports.useOrganization=He;exports.useOrganizations=Je;exports.usePahoMQTTClient=K;exports.usePermissionsCheckAll=ne;exports.usePermissionsCheckAny=se;exports.useRoles=We;exports.useSimpleMQTT=H;exports.useTokens=Xe;exports.useUser=Ze;exports.useUsers=et;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("react/jsx-runtime"),e=require("react"),A=require("@iotopen/node-lynx"),X=require("paho-mqtt"),Y={lynxClient:new A.LynxClient(""),newLynxClient:(n,r,t)=>{}},G=e.createContext(Y),Z=({children:n,url:r,apiKey:t,bearer:s})=>{const[o,u]=e.useState(new A.LynxClient(r,t,s)),l=e.useCallback((i,d,f)=>{u(new A.LynxClient(i,d,f))},[u]),a=e.useMemo(()=>({lynxClient:o,newLynxClient:l}),[o,l]);return I.jsx(G.Provider,{value:a,children:n})},w=()=>e.useContext(G),ee={user:null,permissions:null},B=e.createContext(ee),te=({children:n})=>{const[r,t]=e.useState(null),[s,o]=e.useState(null),[u,l]=e.useState(!0),[a,i]=e.useState(),{lynxClient:d}=w();e.useLayoutEffect(()=>{Promise.resolve().then(()=>{const c=d.getMe(),p=d.getPermissions();l(!0),Promise.all([c,p]).then(([v,y])=>{i(h=>h!==void 0?void 0:h),t(v),o(y)}).catch(v=>{i(v),t(null),o(null)}).finally(()=>{l(!1)})})},[d]);const f=e.useMemo(()=>({user:r,permissions:s,loading:u,error:a}),[r,s,u,a]);return I.jsx(B.Provider,{value:f,children:n})},z=()=>e.useContext(B),U=()=>{const{permissions:n}=z();return n},ne=({children:n,apiURL:r,apiKey:t,bearer:s})=>I.jsx(Z,{url:r,apiKey:t,bearer:s,children:I.jsx(te,{children:n})}),se=(...n)=>{const r=U();return r==null?!1:n.every(t=>r[t]!==void 0&&r[t])},oe=(...n)=>{const r=U();return r==null?!1:n.some(t=>r[t]!==void 0&&r[t])},re=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid installationId");const{lynxClient:t}=w(),[s,o]=e.useState(!0),[u,l]=e.useState(),[a,i]=e.useState([]),d=e.useCallback(()=>{o(!0),t.getConfiguredEdgeApps(r).then(f=>{l(c=>c!==void 0?void 0:c),i(f)}).catch(f=>{l(f)}).finally(()=>{o(!1)})},[r,t]);return e.useLayoutEffect(()=>{Promise.resolve().then(d)},[d]),{refresh:d,loading:s,error:u,apps:a}},ae={updated:0,created:0,id:0,installation_id:0,type:"",meta:{},protected_meta:{}},ie=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r;if(isNaN(t)||isNaN(s))throw new Error("invalid installationId or deviceId");const{lynxClient:o}=w(),[u,l]=e.useState(!0),[a,i]=e.useState({...ae}),[d,f]=e.useState();e.useLayoutEffect(()=>{o.getDevice(t,s).then(y=>{f(h=>h!==void 0?void 0:h),i(y)}).catch(y=>{f(y)}).finally(()=>{l(!1)})},[o,t,s]);const c=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("update on undefined function");return o.updateDevice(a)}),[o,a]),p=e.useCallback(y=>{a&&i({...a,type:y})},[a,i]),v=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("delete on undefined function");return o.deleteDevice(a)}),[a,o]);return{loading:u,error:d,Device:a,setDevice:i,update:c,remove:v,setType:p}},ce=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r,{lynxClient:o}=w(),u=e.useCallback((i,d,f,c)=>{const p=f??s??0;return o.createDeviceMeta(t,p,i,d,c)},[o,t,s]),l=e.useCallback((i,d,f,c,p)=>{const v=c??s??0;return o.updateDeviceMeta(t,v,i,d,p,f)},[o,t,s]),a=e.useCallback((i,d,f)=>{const c=d??s??0;return o.deleteDeviceMeta(t,c,i,f)},[o,t,s]);return{createMeta:u,updateMeta:l,removeMeta:a}},R=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t)&&t!==void 0)throw new Error("invalid installationId");const{lynxClient:s}=w(),[o,u]=e.useState(!0),[l,a]=e.useState([]),[i,d]=e.useState(),f=e.useCallback(()=>{if(t===void 0){u(!1),a([]);return}u(!0),s.getDevices(t,r).then(h=>{d(m=>m!==void 0?void 0:m),a(h)}).catch(h=>{d(h)}).finally(()=>{u(!1)})},[s,t,r]);function c(h){if(Array.isArray(h)){const m=h.pop();if(!m)return Promise.allSettled([]);const b=h.map((C=>s.deleteDevice(C,!0)));return Promise.allSettled(b).then(async C=>{try{C.push({status:"fulfilled",value:await s.deleteDevice(m)})}catch(g){C.push({status:"rejected",reason:g})}return C})}return s.deleteDevice(h)}function p(h){if(Array.isArray(h)){const m=h.pop();if(!m)return Promise.allSettled([]);const b=h.map(C=>s.createDevice(C,!0));return Promise.allSettled(b).then(async C=>{try{C.push({status:"fulfilled",value:await s.createDevice(m)})}catch(g){C.push({status:"rejected",reason:g})}return C})}return s.createDevice(h)}const v=e.useCallback((...h)=>p(...h),[p]),y=e.useCallback((...h)=>c(...h),[c]);return e.useLayoutEffect(()=>{Promise.resolve().then(f)},[f]),{loading:o,error:i,create:v,remove:y,devices:l,refresh:f}},ue={id:0,created:0,updated:0,name:"",category:"",short_description:"",description:"",source_url:"",tags:[],publisher:{id:0},public:!1,official:!1},le=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid appId");const{lynxClient:t}=w(),[s,o]=e.useState(!1),[u,l]=e.useState(),[a,i]=e.useState({...ue}),d=e.useCallback(()=>{o(!0),t.getEdgeApp(r).then(f=>{l(c=>c!==void 0?void 0:c),i(f)}).catch(f=>{l(f)}).finally(()=>{o(!1)})},[r,t]);return e.useLayoutEffect(()=>{Promise.resolve().then(d)},[d]),{loading:s,error:u,app:a,setApp:i,refresh:d}},de=()=>{const{lynxClient:n}=w(),[r,t]=e.useState(!0),[s,o]=e.useState(),[u,l]=e.useState([]),a=e.useCallback(()=>{t(!0),n.getEdgeApps().then(i=>{o(d=>d!==void 0?void 0:d),l(i)}).catch(i=>{o(i)}).finally(()=>{t(!1)})},[n]);return e.useLayoutEffect(()=>{Promise.resolve().then(a)},[a]),{apps:u,error:s,loading:r,refresh:a}},fe=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t))throw new Error("invalid appId");const{lynxClient:s}=w(),[o,u]=e.useState(!1),[l,a]=e.useState(),[i,d]=e.useState([]),f=e.useCallback(()=>{u(!0),s.getEdgeAppVersions(t,r).then(p=>{a(v=>v!==void 0?void 0:v),d(p)}).catch(p=>{a(p)}).finally(()=>{u(!1)})},[s,t,r]),c=e.useCallback((p,v)=>s.nameEdgeAppVersion(t,p,v),[s,t]);return e.useLayoutEffect(()=>{Promise.resolve().then(f)},[f]),{loading:o,error:l,versions:i,nameVersion:c,refresh:f}},pe={id:0,installation_id:0,type:"",updated:0,created:0,meta:{},protected_meta:{}},he=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r;if(isNaN(t)||isNaN(s))throw new Error("invalid installationId or functionId");const{lynxClient:o}=w(),[u,l]=e.useState(!0),[a,i]=e.useState({...pe}),[d,f]=e.useState();e.useLayoutEffect(()=>{o.getFunction(t,s).then(y=>{f(h=>h!==void 0?void 0:h),i(y)}).catch(y=>{f(y)}).finally(()=>{l(!1)})},[o,t,s]);const c=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("update on undefined function");return o.updateFunction(a)}),[o,a]),p=e.useCallback(y=>{a&&i({...a,type:y})},[a,i]),v=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("delete on undefined function");return o.deleteFunction(a)}),[a,o]);return{loading:u,error:d,Function:a,setFunction:i,update:c,remove:v,setType:p}},ve=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r,{lynxClient:o}=w(),u=e.useCallback((i,d,f,c)=>{const p=f??s??0;return o.createFunctionMeta(t,p,i,d,c)},[o,t,s]),l=e.useCallback((i,d,f,c,p)=>{const v=c??s??0;return o.updateFunctionMeta(t,v,i,d,p,f)},[o,t,s]),a=e.useCallback((i,d,f)=>{const c=d??s??0;return o.deleteFunctionMeta(t,c,i,f)},[o,t,s]);return{createMeta:u,updateMeta:l,removeMeta:a}},T=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t)&&t!==void 0)throw new Error("invalid installationId");const{lynxClient:s}=w(),[o,u]=e.useState(!0),[l,a]=e.useState([]),[i,d]=e.useState(),f=e.useCallback(()=>{if(t===void 0){u(!1),a([]);return}u(!0),s.getFunctions(t,r).then(h=>(d(m=>m!==void 0?void 0:m),a(h),h)).catch(h=>{d(h)}).finally(()=>{u(!1)})},[s,t,r]);function c(h){if(Array.isArray(h)){const m=h.pop();if(!m)return Promise.allSettled([]);const b=h.map((C=>s.deleteFunction(C,!0)));return Promise.allSettled(b).then(async C=>{try{C.push({status:"fulfilled",value:await s.deleteFunction(m)})}catch(g){C.push({status:"rejected",reason:g})}return C})}return s.deleteFunction(h)}function p(h){if(Array.isArray(h)){const m=h.pop();if(!m)return Promise.allSettled([]);const b=h.map(C=>s.createFunction(C,!0));return Promise.allSettled(b).then(async C=>{try{C.push({status:"fulfilled",value:await s.createFunction(m)})}catch(g){C.push({status:"rejected",reason:g})}return C})}return s.createFunction(h)}const v=e.useCallback((...h)=>p(...h),[p]),y=e.useCallback((...h)=>c(...h),[c]);return e.useLayoutEffect(()=>{Promise.resolve().then(f)},[f]),{loading:o,error:i,create:v,remove:y,functions:l,refresh:f}},ge=()=>{const{lynxClient:n}=w(),[r,t]=e.useState(!0),[s,o]=e.useState(),[u,l]=e.useState([]),a=e.useCallback(()=>{t(!0),n.getIDTokenAlgorithms().then(i=>{o(d=>d!==void 0?void 0:d),l(i)}).catch(i=>{o(i)}).finally(()=>{t(!1)})},[n]);return e.useEffect(()=>{a()},[]),{loading:r,refresh:a,algs:u,error:s}},ye={client_id:0,notes:"",organization_id:0,id:0,name:"",created:0,meta:{},users:[],protected_meta:{}},K=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid installationId");const{lynxClient:t}=w(),[s,o]=e.useState(!0),[u,l]=e.useState(void 0),[a,i]=e.useState({...ye});e.useLayoutEffect(()=>{t.getInstallationRow(r).then(c=>{l(p=>p!==void 0?void 0:p),i(c)}).catch(c=>{l(c)}).finally(()=>{o(!1)})},[t,r]);const d=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("update on undefined installation");return t.updateInstallation(a)}),[t,a]),f=e.useCallback(()=>new Promise(()=>{if(!a)throw new Error("update on undefined installation");return t.deleteInstallation(a)}),[t,a]);return{installation:a,setInstallation:i,update:d,remove:f,error:u,loading:s}},me=n=>{const{lynxClient:r}=w(),[t,s]=e.useState([]),[o,u]=e.useState(!0),[l,a]=e.useState(void 0),i=e.useCallback(()=>{u(!0),r.getInstallations(n).then(d=>{a(f=>f!==void 0?void 0:f),s(d)}).catch(d=>{a(d)}).finally(()=>{u(!1)})},[r]);return e.useLayoutEffect(()=>{i()},[i]),{installations:t,refresh:i,loading:o,error:l}},Ce=n=>{const{lynxClient:r}=w(),[t,s]=e.useState(!0),[o,u]=e.useState([]),[l,a]=e.useState(),i=e.useCallback(()=>{s(!0),r.listInstallations(n).then(d=>{a(f=>f!==void 0?void 0:f),u(d)}).catch(d=>{a(d)}).finally(()=>{s(!1)})},[r,n]);return e.useLayoutEffect(()=>{Promise.resolve().then(i)},[i]),{loading:t,error:l,installations:o,refresh:i}};function j(n){return n instanceof Error?n:new Error(String(n))}const H=(n,r,t,s)=>{if(s===void 0){let h;window?.crypto?.randomUUID?h=window.crypto.randomUUID():typeof crypto<"u"&&crypto?.randomUUID?h=crypto.randomUUID():h=Math.random().toString(36).substring(2,15),s=`paho-ws-mqtt-${h}`}const o=e.useRef(new X.Client(n,s)),u=e.useRef(t),l=e.useRef(r),a=e.useRef(void 0),[i,d]=e.useState(!1),[f,c]=e.useState(void 0);e.useLayoutEffect(()=>{const h=o,m=a,b={timeout:5,...u.current,onFailure:g=>{c(g),d(o.current.isConnected()),m.current??=window.setInterval(()=>{h.current.isConnected()?clearInterval(m.current):h.current.connect(b)},5e3)},onSuccess:()=>{c(void 0),d(o.current.isConnected()),m.current!==void 0&&(window.clearInterval(m.current),m.current=void 0)}},C=l.current;h.current.onConnectionLost=g=>{c(g),d(o.current.isConnected()),C?.onDisconnect?.(g)},h.current.onConnected=(g,N)=>{d(o.current.isConnected()),c(void 0),C?.onConnected?.(g,N)},C&&(C.onMessage&&(h.current.onMessageArrived=C.onMessage),C.onDelivery&&(h.current.onMessageDelivered=C.onDelivery));try{h.current.connect(b)}catch{window.setTimeout(()=>{h.current.connect(b)},5e3)}return()=>{try{h.current.disconnect(),m.current!==void 0&&window.clearInterval(m.current)}catch(g){console.log(g)}}},[]);const p=e.useCallback((h,m)=>new Promise(b=>{o.current.subscribe(h,{qos:m??0,timeout:1,onFailure:C=>{throw j(C)},onSuccess:C=>{b(C.grantedQos)}})}),[o]),v=e.useCallback((h,m,b,C)=>{let g;if(typeof m=="string")g=m;else if(ArrayBuffer.isView(m))g=new Uint8Array(m.buffer,m.byteOffset,m.byteLength).slice().buffer;else throw new Error("Payload must be a string or TypedArray");o.current.send(h,g,b,C)},[o]),y=e.useCallback(h=>new Promise(m=>{o.current.unsubscribe(h,{timeout:1,onSuccess:()=>{m()},onFailure:b=>{throw j(b)}})}),[o]);return{client:o,connected:i,error:f,sub:p,pub:v,unsub:y}};function we(n,r){if(n.length===r.length){for(let t=0;t<n.length;t++)if(n[t]!==r[t])return!1;return!0}return!1}function be(n,r){return new Promise(t=>{r.forEach(async s=>{try{await n(s)}catch(o){console.warn("failed to unsubscribe to",s,o)}}),t()})}function Ne(n,r){return new Promise(t=>{r.forEach(async s=>{try{await n(s)}catch(o){console.warn("failed to subscribe to",s,o)}}),t()})}const J=(n,r,t)=>{n===void 0&&(window!==void 0?n=window.location.protocol==="http:"?`ws://${window.location.host}/mqtt`:`wss://${window.location.host}/mqtt`:n=location.protocol==="http:"?`ws://${location.host}/mqtt`:`wss://${location.host}/mqtt`);const s=e.useRef([]),o=e.useRef(new Map([])),u=e.useRef(new Map([])),l=e.useCallback(g=>{const N=u.current.get(g.destinationName);N&&N.forEach(E=>{E(g.destinationName,new TextDecoder().decode(g.payloadBytes),g.qos,g.retained)}),o.current.forEach((E,x)=>{new RegExp(x).test(g.destinationName)&&E.forEach(q=>{q(g.destinationName,new TextDecoder().decode(g.payloadBytes),g.qos,g.retained)})})},[]),a=e.useRef(!1),i={cleanSession:!0,reconnect:!0,keepAliveInterval:5};r&&(i.userName=r),t&&(i.password=t);const{error:d,connected:f,sub:c,unsub:p,pub:v}=H(n,{onMessage:l,onConnected:()=>{s.current.forEach(g=>{c(g).catch(N=>{console.warn("Failed to subscribe to",g,N)})})}},i);e.useEffect(()=>{a.current=f},[f]);const y=e.useCallback((g,N)=>{let E;typeof g=="string"?E=new RegExp(`^${g}$`):E=g;const x=E.toString().slice(1,-1);let M=o.current.get(x);if(M===void 0){M=[N],o.current.set(x,M);return}M.includes(N)||M.push(N)},[]),h=e.useCallback(g=>{o.current.forEach((N,E)=>{const x=N.filter(M=>M!==g);o.current.set(E,x)})},[]),m=e.useCallback((g,N)=>{let E=u.current.get(g);if(E===void 0){E=[N],u.current.set(g,E);return}E.includes(N)||E.push(N)},[]),b=e.useCallback((g,N)=>{const E=u.current.get(g);E!==void 0&&u.current.set(g,E.filter(x=>x!==N))},[]);return{setSubs:e.useCallback(g=>{we(s.current,g)||(a.current&&be(p,s.current).then(()=>Ne(c,g)).catch(N=>{console.warn("Failed to update subscriptions",N)}),s.current=g)},[c,p]),error:d,connected:f,bind:y,unbind:h,bindExact:m,unbindExact:b,pub:v}},D=()=>{const n=w(),{user:r}=z(),t=new URL(n.lynxClient.baseURL),s=t.protocol==="http:"?"ws:":"wss:",o=t.hostname,u=t.port?`:${t.port}`:"",l=`${s}//${o}${u}/mqtt`;let a=r?.email??"api-key";return n.lynxClient.bearer&&(a="bearer"),J(l,a,n.lynxClient.apiKey)},Ee=n=>{const r=D(),{functions:t,refresh:s}=T(n.id),{devices:o,refresh:u}=R(n.id),{unbind:l,bind:a,setSubs:i}=r;return e.useEffect(()=>(i([`${n.client_id}/#`]),a(/[0-9]+\/evt\/functionx\/updated/,s),a(/[0-9]+\/evt\/devicex\/updated/,u),()=>{l(s),l(u)}),[a,u,s,n,i,l]),{installation:n,functions:t,devices:o,mqtt:r}},Se=n=>{const r=D(),{installation:t}=K(n),{functions:s,refresh:o}=T(n),{devices:u,refresh:l}=R(n),{unbind:a,bind:i,setSubs:d}=r;return e.useEffect(()=>(d([`${t.client_id}/#`]),i(/[0-9]+\/evt\/functionx\/updated/,o),i(/[0-9]+\/evt\/devicex\/updated/,l),()=>{a(o),a(l)}),[i,l,o,t,d,a]),{installation:t,functions:s,devices:u,mqtt:r}},ke=(n,r=[])=>{const[t,s]=e.useState([]);e.useLayoutEffect(()=>{if(n){const c=[];for(const p in n.meta){const v=n.meta[p];c.push({key:p,value:v??"",protected:!1})}for(const p in n.protected_meta){const v=n.protected_meta[p];c.push({key:p,value:v??"",protected:!0})}c.sort((p,v)=>p.key.localeCompare(v.key)),s(c)}},[n,...r]);const o=e.useCallback(()=>{const c={meta:{},protected_meta:{}};return t.forEach(p=>{p.protected?c.protected_meta[p.key]=p.value:c.meta[p.key]=p.value}),c},[t]),u=e.useCallback(c=>{s([...t,c??{key:"",value:"",protected:!1}])},[t,s]),l=e.useCallback(c=>{s(t.filter((p,v)=>v!==c))},[t,s]),a=e.useCallback((c,p)=>{s(t.map((v,y)=>y===c?p:v))},[t,s]),i=e.useCallback((c,p)=>{s(t.map((v,y)=>y===c?{...v,key:p}:v))},[t,s]),d=e.useCallback((c,p)=>{s(t.map((v,y)=>y===c?{...v,value:p}:v))},[t,s]),f=e.useCallback((c,p)=>{s(t.map((v,y)=>y===c?{...v,protected:p}:v))},[t,s]);return{metaList:t,compile:o,addMeta:u,removeMeta:l,setMeta:a,setMetaKey:i,setMetaValue:d,setMetaProtected:f}},xe=n=>{const{lynxClient:r}=w(),t=D(),{bind:s,unbind:o,setSubs:u}=t,[l,a]=e.useState(new Map),[i,d]=e.useState(new Map),[f,c]=e.useState(new Map),[p,v]=e.useState(new Map),y=e.useCallback(m=>{const b=i.get(m);return b!==void 0?b.client_id:0},[i]),h=e.useCallback(m=>{const b=l.get(m);return b!==void 0?b.id:0},[l]);return e.useEffect(()=>{if(n.length===0)return;const m=new Map,b=new Map,C=new Array;n.forEach(S=>{m.set(S.id,S),b.set(S.client_id,S),C.push(`${S.client_id}/#`)});let g=!1;const N=n.map(async S=>({functions:await r.getFunctions(S.id),installationId:S.id})),E=n.map(async S=>({devices:await r.getDevices(S.id),installationId:S.id})),x=new Map,M=new Map;new Promise((S,L)=>{let k=!1,_=!1;Promise.allSettled(N).then(O=>{O.forEach(P=>{P.status==="fulfilled"&&M.set(P.value.installationId,P.value.functions)}),k=!0,k&&_&&S()}).catch(L),Promise.allSettled(E).then(O=>{O.forEach(P=>{P.status==="fulfilled"&&x.set(P.value.installationId,P.value.devices)}),_=!0,k&&_&&S()}).catch(L)}).finally(()=>{a(()=>b),d(()=>m),c(()=>M),v(()=>x),g=!0}).catch(S=>{console.warn("Error in work.finally:",S)});const $=S=>{if(!g)return;const L=Number(S.split("/")[0]),k=b.get(L);k!==void 0&&r.getFunctions(k.id).then(_=>{c(O=>new Map([...O,[k.id,_]]))}).catch(_=>{console.warn("Failed to update function map for",k.id,_)})},V=S=>{if(!g)return;const L=Number(S.split("/")[0]),k=b.get(L);k!==void 0&&r.getDevices(k.id).then(_=>{v(O=>new Map([...O,[k.id,_]]))}).catch(_=>{console.warn("Failed to update device map for",k.id,_)})};return u(C),s(/[0-9]+\/evt\/functionx\/updated/,$),s(/[0-9]+\/evt\/devicex\/updated/,V),()=>{o($),o(V)}},[n,r,s,o,u]),{installationMap:i,functionMap:f,deviceMap:p,mqtt:t,toClientId:y,toInstallationId:h}},Me=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t))throw new Error("invalid installationId");const{lynxClient:s}=w(),[o,u]=e.useState({meta:{},protected_meta:{},type:"",...r,installation_id:t}),l=e.useCallback(i=>{u({...o,type:i})},[o,u]),a=e.useCallback(()=>s.createDevice(o),[s,o]);return{newDevice:o,setNewDevice:u,create:a,setType:l}},_e=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t))throw new Error("invalid installationId");const{lynxClient:s}=w(),[o,u]=e.useState({meta:{},protected_meta:{},type:"",...r,installation_id:t}),l=e.useCallback(i=>{u({...o,type:i})},[o,u]),a=e.useCallback(()=>s.createFunction(o),[s,o]);return{newFunction:o,setNewFunction:u,create:a,setType:l}},Le=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t))throw new Error("invalid organizationId");const[s,o]=e.useState({name:"",notes:"",users:[],meta:{},protected_meta:{},...r,organization_id:t}),{lynxClient:u}=w(),l=e.useCallback(()=>u.createInstallation(s),[u,s]);return{newInstallation:s,setNewInstallation:o,create:l}},Oe={installation_id:0,name:"",text:""},Pe=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,{lynxClient:s}=w(),[o,u]=e.useState({...Oe,...r,installation_id:t}),l=e.useCallback(()=>s.createNotificationMessage(o),[s,o]);return{newNotificationMessage:o,setNewNotificationMessage:u,create:l}},Ae={installation_id:0,name:"",notification_message_id:0,notification_output_executor_id:0,config:{}},Ie=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,{lynxClient:s}=w(),[o,u]=e.useState({...Ae,...r,installation_id:t}),l=e.useCallback(()=>s.createNotificationOutput(o),[s,o]);return{newNotificationOutput:o,setNewNotificationOutput:u,create:l}},De=n=>{const{lynxClient:r}=w(),[t,s]=e.useState({...A.zero.getEmptyOAuth2Client(),...n}),o=e.useCallback(c=>{s({...t,name:c})},[t]),u=e.useCallback(c=>{s({...t,allowed_scopes:c})},[t]),l=e.useCallback(c=>{s({...t,icon_uri:c})},[t]),a=e.useCallback(c=>{s({...t,tos_uri:c})},[t]),i=e.useCallback(c=>{s({...t,policy_uri:c})},[t]),d=e.useCallback(c=>{s({...t,redirect_uris:c})},[t]),f=e.useCallback(()=>r.createOAuth2Client(t),[r,t]);return{newClient:t,create:f,setName:o,setScope:u,setIconURI:l,setTosURI:a,setPolicyURI:i,setRedirectURIs:d,setClient:s}},Fe={address:{address:"",city:"",country:"",zip:""},children:[],email:"",force_sms_login:!1,meta:{},name:"",notes:"",parent:0,password_valid_days:0,phone:"",protected_meta:{}},ze=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n;if(isNaN(t))throw new Error("invalid parentId");const{lynxClient:s}=w(),[o,u]=e.useState({...Fe,...r,parent:t}),l=e.useCallback(()=>s.createOrganization(o),[s,o]);return{newOrganization:o,setNewOrganization:u,create:l}},Ue={address:{address:"",zip:"",city:"",country:""},assigned_installations:[],email:"",expire_at:0,first_name:"",last_name:"",mobile:"",note:"",organisations:[],password:"",role:0,sms_login:!1,protected_meta:{},meta:{}},Re=n=>{const[r,t]=e.useState({...Ue,...n}),{lynxClient:s}=w(),o=e.useCallback(()=>s.createUser(r),[s,r]);return{newUser:r,setNewUser:t,create:o}},Q={id:0,installation_id:0,name:"",text:""},Te=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r;if(isNaN(t))throw new Error("invalid installationId");if(isNaN(s))throw new Error("invalid messageId");const{lynxClient:o}=w(),[u,l]=e.useState(!0),[a,i]=e.useState({...Q}),[d,f]=e.useState(),c=e.useCallback(()=>{t===0||s===0||(l(!0),o.getNotificationMessage(t,s).then(y=>{f(h=>h!==void 0?void 0:h),i(y)}).catch(y=>{f(y)}).finally(()=>{l(!1)}))},[s,t,o]),p=e.useCallback(()=>{d!==void 0&&f(void 0),o.updateNotificationMessage(a).then(y=>{i(y)}).catch(y=>{f(y)})},[d,o,a]),v=e.useCallback(()=>{o.deleteNotificationMessage(a).then(()=>{i({...Q})}).catch(y=>{f(y)})},[o,a]);return e.useEffect(()=>{c()},[]),{refresh:c,message:a,setMessage:i,error:d,loading:u,remove:v,update:p}},qe=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid installationId");const{lynxClient:t}=w(),[s,o]=e.useState([]),[u,l]=e.useState(!0),[a,i]=e.useState(),d=e.useCallback(()=>{t.getNotificationMessages(r).then(f=>{i(c=>c!==void 0?void 0:c),o(f)}).catch(f=>{i(f)}).finally(()=>{l(!1)})},[r,t]);return e.useEffect(()=>{d()},[]),{refresh:d,notificationMessages:s,error:a,loading:u}},F={id:0,installation_id:0,name:"",notification_message_id:0,notification_output_executor_id:0,config:{}},$e=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r;if(isNaN(t))throw new Error("invalid installationId");if(isNaN(s))throw new Error("invalid notificationId");const{lynxClient:o}=w(),[u,l]=e.useState(!0),[a,i]=e.useState({...F,config:{...F.config}}),[d,f]=e.useState(),c=e.useCallback(()=>{t===0||s===0||(l(!0),o.getNotificationOutput(t,s).then(y=>{f(h=>h!==void 0?void 0:h),i(y)}).catch(y=>{f(y)}).finally(()=>{l(!1)}))},[s,t,o]),p=e.useCallback(()=>{d!==void 0&&f(void 0),o.updateNotificationOutput(a).then(y=>{i(y)}).catch(y=>{f(y)})},[d,o,a]),v=e.useCallback(()=>{o.deleteNotificationOutput(a).then(()=>{i({...F})}).catch(y=>{f(y)})},[o,a]);return e.useEffect(()=>{c()},[]),{refresh:c,output:a,setOutput:i,error:d,loading:u,remove:v,update:p}},Ve={id:0,type:"",name:"",organization_id:0,config:{},secret:""},je=(n,r)=>{const t=typeof n=="string"?Number.parseInt(n):n,s=typeof r=="string"?Number.parseInt(r):r;if(isNaN(t))throw new Error("invalid installationId");if(isNaN(s))throw new Error("invalid messageId");const{lynxClient:o}=w(),[u,l]=e.useState(!0),[a,i]=e.useState({...Ve}),[d,f]=e.useState(),c=e.useCallback(()=>{t===0||s===0||(l(!0),o.getNotificationOutputExecutor(t,s).then(p=>{f(v=>v!==void 0?void 0:v),i(p)}).catch(p=>{f(p)}).finally(()=>{l(!1)}))},[s,t,o]);return e.useEffect(()=>{c()},[]),{refresh:c,outputExecutor:a,setOutputExecutor:i,error:d,loading:u}},Qe=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid installationId");const{lynxClient:t}=w(),[s,o]=e.useState([]),[u,l]=e.useState(!0),[a,i]=e.useState(),d=e.useCallback(()=>{t.getNotificationOutputExecutors(r).then(f=>{i(c=>c!==void 0?void 0:c),o(f)}).catch(f=>{i(f)}).finally(()=>{l(!1)})},[r,t]);return e.useEffect(()=>{d()},[]),{refresh:d,notificationExecutors:s,error:a,loading:u}},Ge=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid installationId");const{lynxClient:t}=w(),[s,o]=e.useState([]),[u,l]=e.useState(!0),[a,i]=e.useState(),d=e.useCallback(()=>{t.getNotificationOutputs(r).then(f=>{i(c=>c!==void 0?void 0:c),o(f)}).catch(f=>{i(f)}).finally(()=>{l(!1)})},[r,t]);return e.useEffect(()=>{d()},[]),{refresh:d,notificationOutputs:s,error:a,loading:u}},W=n=>{const{lynxClient:r}=w(),[t,s]=e.useState(!0),[o,u]=e.useState(),[l,a]=e.useState({...A.zero.getOAuth2Client()}),i=e.useCallback(()=>{t||s(!0),r.getOAuth2Client(n).then(c=>{u(p=>p!==void 0?void 0:p),a(c)}).catch(c=>{u(c)}).finally(()=>{s(!1)})},[t,r,n]);e.useEffect(()=>{i()},[n]);const d=e.useCallback(()=>r.deleteOAuth2Client(l),[l,r]),f=e.useCallback(()=>r.updateOAuth2Client(l),[l,r]);return{refresh:i,client:l,setClient:a,error:o,loading:t,remove:d,update:f}},Be=()=>{const{lynxClient:n}=w(),[r,t]=e.useState(!0),[s,o]=e.useState(),[u,l]=e.useState([]),a=e.useCallback(()=>{n.getOAuth2Clients().then(i=>{o(d=>d!==void 0?void 0:d),l(i)}).catch(i=>{o(i)}).finally(()=>{t(!1)})},[n]);return e.useEffect(()=>{a()},[]),{refresh:a,clients:u,error:s,loading:r}},Ke=()=>{const{lynxClient:n}=w(),[r,t]=e.useState([]),[s]=e.useState(new URLSearchParams(window.location.search)),o=s.get("client_id")??"",{client:u}=W(o),l=e.useCallback(a=>{const i=Object.fromEntries(s);return i.scope=a.join(" "),n.consentOAuth2Authorization(i)},[n,s]);return e.useEffect(()=>{Promise.resolve().then(()=>t(s.get("scope")?.split(" ")??[]))},[s]),{consent:l,client:u,requestedScopes:r}},He={address:{address:"",city:"",country:"",zip:""},children:[],email:"",force_sms_login:!1,meta:{},name:"",notes:"",parent:0,password_valid_days:0,phone:"",protected_meta:{},id:0},Je=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid organizationId");const[t,s]=e.useState({...He}),[o,u]=e.useState(!0),[l,a]=e.useState(),{lynxClient:i}=w(),d=e.useCallback(()=>{u(!0),i.getOrganization(r).then(p=>{a(v=>v!==void 0?void 0:v),s(p)}).catch(p=>{a(p)}).finally(()=>{u(!1)})},[i,r]);e.useEffect(()=>{d()},[]);const f=e.useCallback(()=>i.updateOrganization(t),[i,t]),c=e.useCallback(()=>i.deleteOrganization(t),[i,t]);return{loading:o,organization:t,setOrganization:s,error:l,update:f,remove:c,refresh:d}},We=n=>{const{lynxClient:r}=w(),[t,s]=e.useState(!0),[o,u]=e.useState(),[l,a]=e.useState([]),i=e.useCallback(()=>{s(!0),r.getOrganizations(n===!0).then(c=>{u(p=>p!==void 0?void 0:p),a(c)}).catch(c=>{u(c)}).finally(()=>{s(!1)})},[r,n]);e.useEffect(()=>{i()},[]);const d=e.useCallback(c=>r.createOrganization(c),[r]),f=e.useCallback(c=>r.deleteOrganization(c),[r]);return{loading:t,organizations:l,setOrganizations:a,error:o,create:d,remove:f}},Xe=()=>{const{lynxClient:n}=w(),[r,t]=e.useState([]),[s,o]=e.useState(),[u,l]=e.useState(!0),a=e.useCallback(()=>{l(!0),n.getRoles().then(i=>{o(d=>d!==void 0?void 0:d),t(i)}).catch(i=>{o(i)}).finally(()=>{l(!1)})},[n]);return e.useEffect(()=>{a()},[]),{loading:u,error:s,roles:r,refresh:a}},Ye=()=>{const{lynxClient:n}=w(),[r,t]=e.useState(!0),[s,o]=e.useState(),[u,l]=e.useState([]),a=e.useCallback(()=>{t(!0),n.getTokens().then(f=>{o(c=>c!==void 0?void 0:c),l(f)}).catch(f=>{o(f)}).finally(()=>{t(!1)})},[n]),i=e.useCallback(f=>n.deleteToken(f),[n]),d=e.useCallback(f=>n.createToken(f),[n]);return e.useLayoutEffect(()=>{Promise.resolve().then(a)},[a]),{tokens:u,remove:i,create:d,refresh:a,loading:r,error:s}},Ze={id:0,address:{address:"",zip:"",city:"",country:""},assigned_installations:[],email:"",expire_at:0,first_name:"",last_name:"",mobile:"",note:"",organisations:[],password:"",role:0,sms_login:!1,protected_meta:{},meta:{}},et=n=>{const r=typeof n=="string"?Number.parseInt(n):n;if(isNaN(r))throw new Error("invalid userId");const[t,s]=e.useState({...Ze}),[o,u]=e.useState(!0),{lynxClient:l}=w(),[a,i]=e.useState(),d=e.useCallback(()=>{u(!0),l.getUser(r).then(p=>{i(v=>v!==void 0?void 0:v),s(p)}).catch(p=>{i(p)}).finally(()=>{u(!1)})},[l,r]),f=e.useCallback(()=>l.updateUser(t),[l,t]),c=e.useCallback(()=>l.deleteUser(t),[l,t]);return{loading:o,error:a,user:t,setUser:s,update:f,refresh:d,remove:c}},tt=n=>{const[r,t]=e.useState([]),[s,o]=e.useState(!0),[u,l]=e.useState(),{lynxClient:a}=w(),i=e.useCallback(()=>{o(!0),a.getUsers(n).then(d=>{l(f=>f!==void 0?void 0:f),t(d)}).catch(d=>{l(d)}).finally(()=>{o(!1)})},[a,n]);return{users:r,setUsers:t,refresh:i,loading:s,error:u}};exports.LynxProvider=ne;exports.useConfiguredEdgeApps=re;exports.useDevice=ie;exports.useDeviceMeta=ce;exports.useDevices=R;exports.useEdgeApp=le;exports.useEdgeAppVersions=fe;exports.useEdgeApps=de;exports.useFunction=he;exports.useFunctionMeta=ve;exports.useFunctions=T;exports.useGlobalLynxClient=w;exports.useGlobalPermissions=U;exports.useGlobalUser=z;exports.useIDTokenAlgorithms=ge;exports.useInstallation=K;exports.useInstallationInfo=me;exports.useInstallations=Ce;exports.useLiveInstallation=Ee;exports.useLiveInstallationId=Se;exports.useMQTT=D;exports.useMeta=ke;exports.useMultiLiveInstallation=xe;exports.useNewDevice=Me;exports.useNewFunction=_e;exports.useNewInstallation=Le;exports.useNewNotificationMessage=Pe;exports.useNewNotificationOutput=Ie;exports.useNewOAuth2Client=De;exports.useNewOrganization=ze;exports.useNewUser=Re;exports.useNotificationMessage=Te;exports.useNotificationMessages=qe;exports.useNotificationOutput=$e;exports.useNotificationOutputExecutor=je;exports.useNotificationOutputExecutors=Qe;exports.useNotificationOutputs=Ge;exports.useOAuth2Client=W;exports.useOAuth2Clients=Be;exports.useOAuth2Consent=Ke;exports.useOrganization=Je;exports.useOrganizations=We;exports.usePahoMQTTClient=H;exports.usePermissionsCheckAll=se;exports.usePermissionsCheckAny=oe;exports.useRoles=Xe;exports.useSimpleMQTT=J;exports.useTokens=Ye;exports.useUser=et;exports.useUsers=tt;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|