@iotopen/react-lynx 1.0.2-rc.0 → 1.0.2-rc.2
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 +11 -7
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/Contexts/LynxClientProvider.tsx","../../src/Contexts/UserProvider.tsx","../../src/Contexts/LynxProvider.tsx","../../src/Hooks/useCheckPermissions.ts","../../src/Hooks/useConfiguredEdgeApps.ts","../../src/Hooks/useDevice.ts","../../src/Hooks/useDevices.ts","../../src/Hooks/useEdgeApp.ts","../../src/Hooks/useEdgeApps.ts","../../src/Hooks/useEdgeAppVersions.ts","../../src/Hooks/useFunction.ts","../../src/Hooks/useFunctions.ts","../../src/Hooks/useIDTokenAlgorithms.ts","../../src/Hooks/useInstallation.ts","../../src/Hooks/useInstallationInfo.ts","../../src/Hooks/useInstallations.ts","../../src/Hooks/usePahoMQTTClient.ts","../../src/Hooks/useSimpleMQTT.ts","../../src/Hooks/useMQTT.ts","../../src/Hooks/useLiveInstallation.ts","../../src/Hooks/useMeta.ts","../../src/Hooks/useMultiLiveInstallation.ts","../../src/Hooks/useNewDevice.ts","../../src/Hooks/useNewFunction.ts","../../src/Hooks/useNewInstallation.ts","../../src/Hooks/useNewNotificationMessage.ts","../../src/Hooks/useNewNotificationOutput.ts","../../src/Hooks/useNewOAuth2Client.ts","../../src/Hooks/useNewOrganization.ts","../../src/Hooks/useNewUser.ts","../../src/Hooks/useNotificationMessage.ts","../../src/Hooks/useNotificationMessages.ts","../../src/Hooks/useNotificationOutput.ts","../../src/Hooks/useNotificationOutputExecutor.ts","../../src/Hooks/useNotificationOutputExecutors.ts","../../src/Hooks/useNotificationOutputs.ts","../../src/Hooks/useOAuth2Client.ts","../../src/Hooks/useOAuth2Clients.ts","../../src/Hooks/useOAuth2Consent.ts","../../src/Hooks/useOrganization.ts","../../src/Hooks/useOrganizations.ts","../../src/Hooks/useRoles.ts","../../src/Hooks/useTokens.ts","../../src/Hooks/useUser.ts","../../src/Hooks/useUsers.ts"],"sourcesContent":["import { createContext, useCallback, useContext, useMemo, useState } from 'react';\n\nimport { LynxClient } from '@iotopen/node-lynx';\nimport type { ReactNode } from 'react';\n\n\ninterface lynxClientContext {\n lynxClient: LynxClient;\n newLynxClient: (url: string, apiKey?: string, bearer?: boolean) => void;\n}\n\nconst defaultLynxClientContext = {\n lynxClient: new LynxClient(''),\n newLynxClient: (_url?: string, _apiKey?: string, _bearer?: boolean) => {\n // intentionally unused, see interface for signature\n }\n};\n\nconst LynxClientContext = createContext(defaultLynxClientContext as lynxClientContext);\n\ninterface LynxClientProviderProps {\n children?: ReactNode;\n url?: string | undefined;\n apiKey?: string | undefined;\n bearer?: boolean | undefined;\n}\n\nexport const LynxClientProvider = ({ children, url, apiKey, bearer }: LynxClientProviderProps) => {\n const [client, setClient] = useState(new LynxClient(url, apiKey, bearer));\n const newClient = useCallback((newUrl: string, newApiKey?: string, newBearer?: boolean) => {\n setClient(new LynxClient(newUrl, newApiKey, newBearer));\n }, [setClient]);\n const contextValue = useMemo(() => ({ lynxClient: client, newLynxClient: newClient }), [client, newClient]);\n return (\n <LynxClientContext.Provider value={contextValue}>\n {children}\n </LynxClientContext.Provider>\n );\n};\n\nexport const useGlobalLynxClient = () => {\n return useContext(LynxClientContext);\n};\n","import { createContext, useContext, useLayoutEffect, useMemo, useState } from 'react';\n\nimport type { ErrorResponse, User } from '@iotopen/node-lynx';\nimport type { ReactNode } from 'react';\n\nimport { useGlobalLynxClient } from './LynxClientProvider';\n\ninterface userContext {\n user: User | null;\n permissions: { [key: string]: boolean } | null;\n error: ErrorResponse | undefined;\n loading: boolean;\n}\n\nconst defaultUserContext = {\n user: null,\n permissions: null,\n};\nconst UserContext = createContext(defaultUserContext as userContext);\n\ninterface UserProviderProps {\n children: ReactNode;\n}\n\nexport const UserProvider = ({ children }: UserProviderProps) => {\n const [user, setUser] = useState<User | null>(null);\n const [permissions, setPermissions] = useState<{ [key: string]: boolean } | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const { lynxClient } = useGlobalLynxClient();\n useLayoutEffect(() => {\n const me = lynxClient.getMe();\n const perms = lynxClient.getPermissions();\n setLoading(true);\n Promise.all([me, perms]).then(([u, p]) => {\n setError((err) => err !== undefined ? undefined : err);\n setUser(u);\n setPermissions(p);\n }).catch(e => {\n setError(e);\n setUser(null);\n setPermissions(null);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient]);\n const contextValue = useMemo(() => ({ user, permissions, loading, error }), [user, permissions, loading, error]);\n return (\n <UserContext.Provider value={contextValue}>\n {children}\n </UserContext.Provider>\n );\n};\n\n\nexport const useGlobalUser = () => {\n return useContext(UserContext);\n};\n\nexport const useGlobalPermissions = () => {\n const { permissions } = useGlobalUser();\n return permissions;\n};\n","import type { ReactNode } from 'react';\n\nimport { LynxClientProvider } from './LynxClientProvider';\nimport { UserProvider } from './UserProvider';\n\ninterface LynxProviderProps {\n apiURL?: string;\n apiKey?: string;\n bearer?: boolean;\n children?: ReactNode;\n}\n\nexport const LynxProvider = ({ children, apiURL, apiKey, bearer }: LynxProviderProps) => {\n return (\n <LynxClientProvider url={apiURL} apiKey={apiKey} bearer={bearer}>\n <UserProvider>\n {children}\n </UserProvider>\n </LynxClientProvider>\n );\n};\n","import type { Permissions } from '@iotopen/node-lynx';\n\nimport { useGlobalPermissions } from '../Contexts';\n\n\nexport type Permission = Permissions | string\n\nexport const usePermissionsCheckAll = (...permissions: Permission[]): boolean => {\n const currentPermissions = useGlobalPermissions();\n if (currentPermissions === undefined || currentPermissions === null) {return false;}\n return permissions.every(permission => currentPermissions[permission] !== undefined && currentPermissions[permission]);\n};\n\n\nexport const usePermissionsCheckAny = (...permissions: Permission[]): boolean => {\n const currentPermissions = useGlobalPermissions();\n if (currentPermissions === undefined || currentPermissions === null) {return false;}\n return permissions.some(permission => currentPermissions[permission] !== undefined && currentPermissions[permission]);\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EdgeAppInstance, ErrorResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useConfiguredEdgeApps = (installationId: number | string) => {\n const id = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if(isNaN(id)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [apps, setApps] = useState<EdgeAppInstance[]>([]);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getConfiguredEdgeApps(id).then(fetchedApps => {\n setError((err) => err !== undefined ? undefined : err);\n setApps(fetchedApps);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [id, lynxClient]);\n\n useLayoutEffect(() => {\n refresh();\n }, [refresh]);\n\n return {\n refresh,\n loading,\n error,\n apps,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { Devicex, ErrorResponse, MetaObject, OKResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroDevice = {\n updated: 0,\n created: 0,\n id: 0,\n installation_id: 0,\n type: '',\n meta: {},\n protected_meta: {}\n};\n\nexport const useDevice = (installationId: number | string, deviceId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const id = typeof deviceId === 'string' ? Number.parseInt(deviceId) : deviceId;\n if(isNaN(iid) || isNaN(id)) {\n throw new Error('invalid installationId or deviceId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [dev, setDev] = useState<Devicex>({ ...zeroDevice });\n const [error, setError] = useState<ErrorResponse | undefined>();\n\n useLayoutEffect(() => {\n lynxClient.getDevice(iid, id).then(fn => {\n setError((err) => err !== undefined ? undefined : err);\n setDev(fn);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, iid, id]);\n\n const update = useCallback(() => {\n return new Promise<Devicex>(() => {\n if (!dev) {\n throw new Error('update on undefined function');\n }\n return lynxClient.updateDevice(dev);\n });\n }, [lynxClient, dev]);\n\n const setType = useCallback((t: string) => {\n if (dev) {setDev({ ...dev, type: t });}\n }, [dev, setDev]);\n\n const remove = useCallback(() => {\n return new Promise<OKResponse>(() => {\n if (!dev) {\n throw new Error('delete on undefined function');\n }\n return lynxClient.deleteDevice(dev);\n });\n }, [dev, lynxClient]);\n\n return {\n loading,\n error,\n Device: dev,\n setDevice: setDev,\n update,\n remove,\n setType,\n };\n};\n\nexport const useDeviceMeta = (installationId: number | string, deviceId?: number|string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const devId = typeof deviceId === 'string' ? Number.parseInt(deviceId) : deviceId;\n\n const { lynxClient } = useGlobalLynxClient();\n\n const create = useCallback((key: string, meta: MetaObject, overrideDevId?: number, silent?: boolean) => {\n const id = overrideDevId ?? devId ?? 0;\n return lynxClient.createDeviceMeta(iid, id, key, meta, silent);\n }, [lynxClient, iid, devId]);\n\n\n const update = useCallback((key: string, meta: MetaObject, createMissing?: boolean, overrideDevId?: number, silent?: boolean) => {\n const id = overrideDevId ?? devId ?? 0;\n return lynxClient.updateDeviceMeta(iid, id, key, meta, silent, createMissing);\n }, [lynxClient, iid, devId]);\n\n\n const remove = useCallback((key: string, overrideDevId?: number, silent?: boolean) => {\n const id = overrideDevId ?? devId ?? 0;\n return lynxClient.deleteDeviceMeta(iid, id, key, silent);\n }, [lynxClient, iid, devId]);\n\n return {\n createMeta: create,\n updateMeta: update,\n removeMeta: remove,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { Devicex, EmptyDevicex, ErrorResponse, Metadata, OKResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\nimport type { ObjectOrArray } from '../types';\n\nexport const useDevices = (installationId: number|string, filter?: Metadata) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if(isNaN(iid) && iid !== undefined) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [devices, setDevices] = useState<Devicex[]>([]);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refreshCall = useCallback(() => {\n if(iid === undefined) {\n setLoading(false);\n setDevices([]);\n return;\n }\n setLoading(true);\n lynxClient.getDevices(iid, filter).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setDevices(res);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, iid, filter]);\n\n function removeFn<T extends Devicex | Devicex[]>(devs: T): ObjectOrArray<OKResponse, Devicex, T>\n function removeFn(devs: Devicex | Devicex[]) {\n if (Array.isArray(devs)) {\n const last = devs.pop();\n if (!last) {return Promise.allSettled([]);}\n const rest = devs.map((dev => {\n return lynxClient.deleteDevice(dev, true);\n }));\n return Promise.allSettled(rest).then(async(settled) => {\n try {\n settled.push({ status: 'fulfilled', value: await lynxClient.deleteDevice(last) });\n } catch (e) {\n settled.push({ status: 'rejected', reason: e });\n }\n return settled;\n });\n }\n return lynxClient.deleteDevice(devs);\n }\n\n function createFn<T extends EmptyDevicex | EmptyDevicex[]>(devs: T): ObjectOrArray<Devicex, EmptyDevicex, T>\n function createFn(devs: EmptyDevicex | EmptyDevicex[]) {\n if (Array.isArray(devs)) {\n const last = devs.pop();\n if (!last) {return Promise.allSettled([]);}\n const rest = devs.map(dev => {\n return lynxClient.createDevice(dev, true);\n });\n return Promise.allSettled(rest).then(async(settled) => {\n try {\n settled.push({ status: 'fulfilled', value: await lynxClient.createDevice(last) });\n } catch (e) {\n settled.push({ status: 'rejected', reason: e });\n }\n return settled;\n });\n }\n return lynxClient.createDevice(devs);\n }\n\n const create = useCallback(createFn, [lynxClient, createFn]);\n const remove = useCallback(removeFn, [lynxClient, removeFn]);\n\n useLayoutEffect(() => {\n refreshCall();\n }, [refreshCall]);\n\n return {\n loading,\n error,\n create,\n remove,\n devices,\n refresh: refreshCall,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EdgeApp, ErrorResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroEdgeApp = {\n id: 0,\n created: 0,\n updated: 0,\n name: '',\n category: '',\n short_description: '',\n description: '',\n source_url: '',\n tags: [],\n publisher: { id: 0 },\n public: false,\n official: false\n};\n\nexport const useEdgeApp = (appId: number | string) => {\n const id = typeof appId === 'string' ? Number.parseInt(appId) : appId;\n if(isNaN(id)) {\n throw new Error('invalid appId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [app, setApp] = useState<EdgeApp>({ ...zeroEdgeApp });\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getEdgeApp(id).then(fetchedApp => {\n setError((err) => err !== undefined ? undefined : err);\n setApp(fetchedApp);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [id, lynxClient]);\n\n useLayoutEffect(() => {\n refresh();\n }, [refresh]);\n\n return {\n loading,\n error,\n app,\n setApp,\n refresh\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EdgeApp, ErrorResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useEdgeApps = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [apps, setApps] = useState<EdgeApp[]>([]);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getEdgeApps().then(fetchedApps => {\n setError((err) => err !== undefined ? undefined : err);\n setApps(fetchedApps);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient]);\n\n useLayoutEffect(() => {\n refresh();\n }, [refresh]);\n\n return {\n apps,\n error,\n loading,\n refresh,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EdgeAppVersion, ErrorResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useEdgeAppVersions = (appId: number | string, untagged?: boolean) => {\n const id = typeof appId === 'string' ? Number.parseInt(appId) : appId;\n if(isNaN(id)) {\n throw new Error('invalid appId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [versions, setVersions] = useState<EdgeAppVersion[]>([]);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getEdgeAppVersions(id, untagged).then((fetchedVersions) => {\n setError((err) => err !== undefined ? undefined : err);\n setVersions(fetchedVersions);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, id, untagged]);\n\n const nameVersion = useCallback((name: string, hash: string) => {\n return lynxClient.nameEdgeAppVersion(id, name, hash);\n }, [lynxClient, id]);\n\n useLayoutEffect(() => {\n refresh();\n }, [refresh]);\n\n return {\n loading,\n error,\n versions,\n nameVersion,\n refresh\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { ErrorResponse, Functionx, MetaObject, OKResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroFunction = {\n id: 0,\n installation_id: 0,\n type: '',\n updated: 0,\n created: 0,\n meta: {},\n protected_meta: {}\n};\n\nexport const useFunction = (installationId: number | string, functionId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const id = typeof functionId === 'string' ? Number.parseInt(functionId) : functionId;\n\n if (isNaN(iid) || isNaN(id)) {\n throw new Error('invalid installationId or functionId');\n }\n\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [func, setFunc] = useState<Functionx>({ ...zeroFunction });\n const [error, setError] = useState<ErrorResponse | undefined>();\n\n useLayoutEffect(() => {\n lynxClient.getFunction(iid, id).then(fn => {\n setError((err) => err !== undefined ? undefined : err);\n setFunc(fn);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, iid, id]);\n\n const update = useCallback(() => {\n return new Promise<Functionx>(() => {\n if (!func) {\n throw new Error('update on undefined function');\n }\n return lynxClient.updateFunction(func);\n });\n }, [lynxClient, func]);\n\n const setType = useCallback((t: string) => {\n if (func) {setFunc({ ...func, type: t });}\n }, [func, setFunc]);\n\n const remove = useCallback(() => {\n return new Promise<OKResponse>(() => {\n if (!func) {\n throw new Error('delete on undefined function');\n }\n return lynxClient.deleteFunction(func);\n });\n }, [func, lynxClient]);\n\n return {\n loading,\n error,\n Function: func,\n setFunction: setFunc,\n update,\n remove,\n setType,\n };\n};\n\nexport const useFunctionMeta = (installationId: number | string, functionId?: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const fnId = typeof functionId === 'string' ? Number.parseInt(functionId) : functionId;\n\n const { lynxClient } = useGlobalLynxClient();\n const create = useCallback((key: string, meta: MetaObject, funId?: number, silent?: boolean) => {\n const id = funId ?? fnId ?? 0;\n return lynxClient.createFunctionMeta(iid, id, key, meta, silent);\n }, [lynxClient, iid, fnId]);\n\n const update = useCallback((key: string, meta: MetaObject, createMissing?: boolean, funId?: number, silent?: boolean) => {\n const id = funId ?? fnId ?? 0;\n return lynxClient.updateFunctionMeta(iid, id, key, meta, silent, createMissing);\n }, [lynxClient, iid, fnId]);\n\n const remove = useCallback((key: string, funId?: number, silent?: boolean) => {\n const id = funId ?? fnId ?? 0;\n return lynxClient.deleteFunctionMeta(iid, id, key, silent);\n }, [lynxClient, iid, fnId]);\n\n return {\n createMeta: create,\n updateMeta: update,\n removeMeta: remove,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EmptyFunctionx, ErrorResponse, Functionx, Metadata, OKResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\nimport type { ObjectOrArray } from '../types';\n\nexport const useFunctions = (installationId: number | string, filter?: Metadata) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if(isNaN(iid) && iid !== undefined) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [functions, setFunctions] = useState<Functionx[]>([]);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refreshCall = useCallback(() => {\n if (iid === undefined) {\n setLoading(false);\n setFunctions([]);\n return;\n }\n setLoading(true);\n lynxClient.getFunctions(iid, filter).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setFunctions(res);\n return res;\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, iid, filter]);\n\n function removeFn<T extends Functionx | Functionx[]>(fns: T): ObjectOrArray<OKResponse, Functionx, T>\n function removeFn(fns: Functionx | Functionx[]) {\n if (Array.isArray(fns)) {\n const last = fns.pop();\n if (!last) {return Promise.allSettled([]);}\n const rest = fns.map((f => {\n return lynxClient.deleteFunction(f, true);\n }));\n return Promise.allSettled(rest).then(async(settled) => {\n try {\n settled.push({ status: 'fulfilled', value: await lynxClient.deleteFunction(last) });\n } catch (e) {\n settled.push({ status: 'rejected', reason: e });\n }\n return settled;\n });\n }\n return lynxClient.deleteFunction(fns);\n }\n\n function createFn<T extends EmptyFunctionx | EmptyFunctionx[]>(fns: T): ObjectOrArray<Functionx, EmptyFunctionx, T>\n function createFn(fns: EmptyFunctionx | EmptyFunctionx[]) {\n if (Array.isArray(fns)) {\n const last = fns.pop();\n if (!last) {return Promise.allSettled([]);}\n const rest = fns.map(f => {\n return lynxClient.createFunction(f, true);\n });\n return Promise.allSettled(rest).then(async(settled) => {\n try {\n settled.push({ status: 'fulfilled', value: await lynxClient.createFunction(last) });\n } catch (e) {\n settled.push({ status: 'rejected', reason: e });\n }\n return settled;\n });\n }\n return lynxClient.createFunction(fns);\n }\n\n const create = useCallback(createFn, [lynxClient, createFn]);\n const remove = useCallback(removeFn, [lynxClient, removeFn]);\n\n useLayoutEffect(() => {\n refreshCall();\n }, [refreshCall]);\n\n return {\n loading,\n error,\n create,\n remove,\n functions,\n refresh: refreshCall,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\n\nexport const useIDTokenAlgorithms = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [algs, setAlgs] = useState<string[]>([]);\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getIDTokenAlgorithms().then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setAlgs(res);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n loading,\n refresh,\n algs,\n error,\n };\n};","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { Installation } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroInstallation = {\n client_id: 0,\n notes: '',\n organization_id: 0,\n id: 0,\n name: '',\n created: 0,\n meta: {},\n users: [],\n protected_meta: {}\n};\n\nexport const useInstallation = (installationId: number | string) => {\n const id = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if(isNaN(id)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | undefined>(undefined);\n const [installation, setInstallation] = useState<Installation>({ ...zeroInstallation });\n\n useLayoutEffect(() => {\n lynxClient.getInstallationRow(id).then(inst => {\n setError((err) => err !== undefined ? undefined : err);\n setInstallation(inst);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, id]);\n\n const update = useCallback(() => {\n return new Promise<Installation>(() => {\n if (!installation) {\n throw new Error('update on undefined installation');\n }\n return lynxClient.updateInstallation(installation);\n });\n }, [lynxClient, installation]);\n\n const remove = useCallback(() => {\n return new Promise<Installation>(() => {\n if (!installation) {\n throw new Error('update on undefined installation');\n }\n return lynxClient.deleteInstallation(installation);\n });\n }, [lynxClient, installation]);\n return {\n installation,\n setInstallation,\n update,\n remove,\n error,\n loading,\n };\n};","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { ErrorResponse, InstallationInfo } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useInstallationInfo = (assignedOnly?: boolean) => {\n const { lynxClient } = useGlobalLynxClient();\n const [installations, setInstallations] = useState<InstallationInfo[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>(undefined);\n\n const refreshCall = useCallback(() => {\n setLoading(true);\n lynxClient.getInstallations(assignedOnly).then((res) => {\n setError((err) => err !== undefined ? undefined : err);\n setInstallations(res);\n }).catch((e: ErrorResponse) => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [lynxClient]);\n\n useLayoutEffect(() => {\n refreshCall();\n }, [refreshCall]);\n\n return {\n installations,\n refresh: refreshCall,\n loading,\n error,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { ErrorResponse, Installation, Metadata } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useInstallations = (filter?: Metadata) => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [installations, setInstallations] = useState<Installation[]>([]);\n const [error, setError] = useState<ErrorResponse | undefined>();\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.listInstallations(filter).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setInstallations(res);\n }).catch(e => {\n setError(() => e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, filter]);\n\n useLayoutEffect(() => {\n refresh();\n }, [refresh]);\n\n return {\n loading,\n error,\n installations,\n refresh,\n };\n};","import { useCallback, useLayoutEffect, useRef, useState } from 'react';\n\nimport type { MQTTError, Qos, TypedArray } from 'paho-mqtt';\nimport Paho from 'paho-mqtt';\n\ninterface MQTTHandlers {\n onMessage?: Paho.OnMessageHandler;\n onDelivery?: Paho.OnMessageHandler;\n onConnected?: Paho.OnConnectHandler;\n onDisconnect?: Paho.OnConnectionLostHandler;\n}\n\nexport const usePahoMQTTClient = (uri: string,\n handlers?: MQTTHandlers, connectionOptions?: Paho.ConnectionOptions, clientId?: string) => {\n if (clientId === undefined) {\n let uuid;\n if(window?.crypto?.randomUUID) {\n uuid = window.crypto.randomUUID();\n } else if(typeof crypto !== 'undefined' && crypto?.randomUUID) {\n uuid = crypto.randomUUID();\n } else {\n uuid = Math.random().toString(36).substring(2, 15);\n }\n clientId = `paho-ws-mqtt-${uuid}`;\n }\n const client = useRef<Paho.Client>(new Paho.Client(uri, clientId));\n const opts = useRef(connectionOptions);\n const callbacks = useRef(handlers);\n const reconnectTimer = useRef<number | undefined>(undefined);\n const [connected, setConnected] = useState(false);\n const [error, setError] = useState<Paho.MQTTError | undefined>(undefined);\n useLayoutEffect(() => {\n const c = client;\n const rct = reconnectTimer;\n const o = {\n timeout: 5,\n ...opts.current,\n onFailure: (e: MQTTError) => {\n setError(e);\n setConnected(client.current.isConnected());\n rct.current ??= window.setInterval(() => {\n if (c.current.isConnected()) {\n clearInterval(rct.current);\n } else {\n c.current.connect(o);\n }\n }, 5000);\n },\n onSuccess: () => {\n setError(undefined);\n setConnected(client.current.isConnected());\n if (rct.current !== undefined) {\n window.clearInterval(rct.current);\n rct.current = undefined;\n }\n },\n } as Paho.ConnectionOptions;\n const cbs = callbacks.current;\n c.current.onConnectionLost = (e: MQTTError) => {\n setError(e);\n setConnected(client.current.isConnected());\n cbs?.onDisconnect?.(e);\n };\n c.current.onConnected = (reconnect: boolean, host: string) => {\n setConnected(client.current.isConnected());\n setError(undefined);\n cbs?.onConnected?.(reconnect, host);\n };\n if (cbs) {\n if (cbs.onMessage) {\n c.current.onMessageArrived = cbs.onMessage;\n }\n if (cbs.onDelivery) {\n c.current.onMessageDelivered = cbs.onDelivery;\n }\n }\n try {\n c.current.connect(o);\n } catch (_e) {\n window.setTimeout(() => {\n c.current.connect(o);\n }, 5000);\n }\n return () => {\n try {\n c.current.disconnect();\n if (rct.current !== undefined) {\n window.clearInterval(rct.current);\n }\n } catch (e) {\n console.log(e);\n }\n };\n\n }, []);\n\n\n const sub = useCallback((topic: string, qos?: Qos) => {\n return new Promise<Qos>((resolve) => {\n client.current.subscribe(topic, {\n qos: qos ?? 0,\n timeout: 1,\n onFailure: (e: MQTTError) => {\n throw e;\n },\n onSuccess: (res) => {\n resolve(res.grantedQos);\n }\n });\n });\n }, [client]);\n\n const pub = useCallback((topic: string, payload: string | TypedArray, qos?: Qos, retained?: boolean) => {\n let sendPayload: string | ArrayBuffer;\n if (typeof payload === 'string') {\n sendPayload = payload;\n } else if (ArrayBuffer.isView(payload)) {\n // Always create a new ArrayBuffer to guarantee type\n sendPayload = new Uint8Array(payload.buffer, payload.byteOffset, payload.byteLength).slice().buffer;\n } else {\n throw new Error('Payload must be a string or TypedArray');\n }\n client.current.send(topic, sendPayload, qos, retained);\n }, [client]);\n\n const unsub = useCallback((topic: string) => {\n return new Promise<void>((resolve) => {\n client.current.unsubscribe(topic, {\n timeout: 1,\n onSuccess: () => {\n resolve();\n },\n onFailure: (e: MQTTError) => {\n throw e;\n }\n });\n });\n }, [client]);\n\n return {\n client,\n connected,\n error,\n sub,\n pub,\n unsub,\n };\n};\n","import { useCallback, useEffect, useRef } from 'react';\n\nimport type { Qos, TypedArray } from 'paho-mqtt';\nimport type Paho from 'paho-mqtt';\n\nimport { usePahoMQTTClient } from './usePahoMQTTClient';\n\nexport type Binding = (topic: string, payload: string, qos: Qos, retained: boolean) => void;\n\nexport type Binder = (topic: RegExp | string, binder: Binding) => void;\nexport type Unbinder = (binder: Binding) => void;\n\nexport type ExactBinder = (topic: string, binder: Binding) => void;\nexport type ExactUnbinder = (topic: string, binder: Binding) => void;\n\nexport type Publisher = (topic: string, payload: string | TypedArray, qos?: Qos, retained?: boolean) => void;\n\nfunction isEq<T>(a: T[], b: T[]): boolean {\n if (a.length === b.length) {\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n\ntype Unsub = (topic: string) => void | Promise<void>;\n\nfunction unsubscribe(unsub: Unsub, subs: string[]): Promise<void> {\n return new Promise<void>((resolve) => {\n subs.forEach(async(topic) => {\n try {\n await unsub(topic);\n } catch (e) {\n console.warn('failed to unsubscribe to', topic, e);\n }\n });\n resolve();\n });\n}\n\nfunction subscribe(sub: (topic: string, qos?: Qos) => void | Promise<Qos>, subs: string[]): Promise<void> {\n return new Promise<void>((resolve) => {\n subs.forEach(async(topic) => {\n try {\n await sub(topic);\n } catch (e) {\n console.warn('failed to subscribe to', topic, e);\n }\n });\n resolve();\n });\n}\n\nexport interface SimpleMQTT {\n setSubs: (subscriptions: string[]) => void;\n error?: Paho.MQTTError;\n connected: boolean;\n bind: Binder;\n unbind: Unbinder;\n bindExact: ExactBinder;\n unbindExact: ExactUnbinder;\n pub: Publisher;\n}\n\nexport const useSimpleMQTT = (uri?: string, username?: string, password?: string) => {\n if (uri === undefined) {\n if (window !== undefined) {\n uri = window.location.protocol === 'http:' ? `ws://${window.location.host}/mqtt` : `wss://${window.location.host}/mqtt`;\n } else {\n uri = location.protocol === 'http:' ? `ws://${location.host}/mqtt` : `wss://${location.host}/mqtt`;\n }\n }\n const subs = useRef<string[]>([]);\n const bindings = useRef(new Map<string, Binding[]>([]));\n const exactBindings = useRef(new Map<string, Binding[]>([]));\n const onMessage = useCallback((msg: Paho.Message) => {\n const tmp = exactBindings.current.get(msg.destinationName);\n if (tmp) {\n tmp.forEach((cb) => {\n cb(msg.destinationName, new TextDecoder().decode(msg.payloadBytes), msg.qos, msg.retained);\n });\n }\n bindings.current.forEach((binds, key) => {\n const re = new RegExp(key);\n if (re.test(msg.destinationName)) {\n binds.forEach(cb => {\n cb(msg.destinationName, new TextDecoder().decode(msg.payloadBytes), msg.qos, msg.retained);\n });\n }\n });\n }, []);\n const c = useRef<boolean>(false);\n\n const options = {\n cleanSession: true,\n reconnect: true,\n keepAliveInterval: 5,\n } as Paho.ConnectionOptions;\n if (username) {\n options.userName = username;\n }\n if (password) {\n options.password = password;\n }\n const {\n error,\n connected,\n sub,\n unsub,\n pub\n } = usePahoMQTTClient(uri, {\n onMessage, onConnected: () => {\n subs.current.forEach(s => {\n sub(s).catch((e) => {\n console.warn('Failed to subscribe to', s, e);\n });\n });\n },\n }, options);\n\n useEffect(() => {\n c.current = connected;\n }, [connected]);\n\n const bind = useCallback((topic: RegExp | string, binder: Binding) => {\n let re: RegExp;\n if (typeof topic === 'string') {\n re = new RegExp(`^${topic}$`);\n } else {\n re = topic;\n }\n const key = re.toString().slice(1, -1);\n let binds = bindings.current.get(key);\n if (binds === undefined) {\n binds = [binder];\n bindings.current.set(key, binds);\n return;\n }\n if (binds.includes(binder)) {\n return;\n }\n binds.push(binder);\n }, []);\n\n const unbind = useCallback((binder: Binding) => {\n bindings.current.forEach((binds, key) => {\n const newBinds = binds.filter((b) => b !== binder);\n bindings.current.set(key, newBinds);\n });\n }, []);\n\n\n const bindExact = useCallback((topic: string, binder: Binding) => {\n let binds = exactBindings.current.get(topic);\n if (binds === undefined) {\n binds = [binder];\n exactBindings.current.set(topic, binds);\n return;\n }\n if (binds.includes(binder)) {\n return;\n }\n binds.push(binder);\n }, []);\n\n const unbindExact = useCallback((topic: string, binder: Binding) => {\n const binds = exactBindings.current.get(topic);\n if (binds === undefined) {return;}\n exactBindings.current.set(topic, binds.filter((b) => b !== binder));\n }, []);\n\n const updateSubs = useCallback((s: string[]) => {\n if (isEq(subs.current, s)) {\n return;\n }\n if (c.current) {\n unsubscribe(unsub, subs.current)\n .then(() => subscribe(sub, s))\n .catch((e) => {\n console.warn('Failed to update subscriptions', e);\n });\n }\n subs.current = s;\n }, [sub, unsub]);\n\n return {\n setSubs: updateSubs,\n error,\n connected,\n bind,\n unbind,\n bindExact,\n unbindExact,\n pub,\n } as SimpleMQTT;\n};\n","import { useGlobalLynxClient, useGlobalUser } from '../Contexts';\n\nimport { useSimpleMQTT } from './useSimpleMQTT';\n\nexport const useMQTT = () => {\n const client = useGlobalLynxClient();\n const { user } = useGlobalUser();\n const baseURLObj = new URL(client.lynxClient.baseURL);\n const protocol = baseURLObj.protocol === 'http:' ? 'ws:' : 'wss:';\n const hostname = baseURLObj.hostname;\n const port = baseURLObj.port ? `:${baseURLObj.port}` : '';\n const wsURL = `${protocol}//${hostname}${port}/mqtt`;\n let username = user?.email ?? 'api-key';\n if (client.lynxClient.bearer) {\n username = 'bearer';\n }\n return useSimpleMQTT(wsURL, username, client.lynxClient.apiKey);\n};\n","import { useEffect } from 'react';\n\nimport type { Devicex, Functionx, Installation } from '@iotopen/node-lynx';\n\nimport { useDevices } from './useDevices';\nimport { useFunctions } from './useFunctions';\nimport { useInstallation } from './useInstallation';\nimport { useMQTT } from './useMQTT';\nimport type { SimpleMQTT } from './useSimpleMQTT';\n\nexport interface LiveInstallation {\n installation: Installation;\n functions: Functionx[];\n devices: Devicex[];\n mqtt: SimpleMQTT;\n}\n\nexport const useLiveInstallation = (installation: Installation) => {\n const mqtt = useMQTT();\n const { functions, refresh: fnRefresh } = useFunctions(installation.id);\n const { devices, refresh: devRefresh } = useDevices(installation.id);\n const { unbind, bind, setSubs } = mqtt;\n\n useEffect(() => {\n setSubs([`${installation.client_id}/#`]);\n bind(/[0-9]+\\/evt\\/functionx\\/updated/, fnRefresh);\n bind(/[0-9]+\\/evt\\/devicex\\/updated/, devRefresh);\n return () => {\n unbind(fnRefresh);\n unbind(devRefresh);\n };\n }, [bind, devRefresh, fnRefresh, installation, setSubs, unbind]);\n\n return {\n installation,\n functions,\n devices,\n mqtt,\n } as LiveInstallation;\n};\n\nexport const useLiveInstallationId = (installationId: number | string) => {\n const mqtt = useMQTT();\n const { installation } = useInstallation(installationId);\n const { functions, refresh: fnRefresh } = useFunctions(installationId);\n const { devices, refresh: devRefresh } = useDevices(installationId);\n const { unbind, bind, setSubs } = mqtt;\n useEffect(() => {\n setSubs([`${installation.client_id}/#`]);\n bind(/[0-9]+\\/evt\\/functionx\\/updated/, fnRefresh);\n bind(/[0-9]+\\/evt\\/devicex\\/updated/, devRefresh);\n return () => {\n unbind(fnRefresh);\n unbind(devRefresh);\n };\n }, [bind, devRefresh, fnRefresh, installation, setSubs, unbind]);\n\n return {\n installation,\n functions,\n devices,\n mqtt\n } as LiveInstallation;\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { MetaObject, WithMeta } from '@iotopen/node-lynx';\nimport type { DependencyList } from 'react';\n\nexport type MetaElement = MetaObject & {\n key: string\n}\n\nexport const useMeta = (obj?: WithMeta, deps: DependencyList = []) => {\n const [metaList, setMetaList] = useState<MetaElement[]>([]);\n\n useLayoutEffect(() => {\n if (obj) {\n const newList = [] as MetaElement[];\n for (const key in obj.meta) {\n const value = obj.meta[key];\n newList.push({ key, value: value ?? '', protected: false });\n }\n for (const key in obj.protected_meta) {\n const value = obj.protected_meta[key];\n newList.push({ key, value: value ?? '', protected: true });\n }\n newList.sort((a, b) => a.key.localeCompare(b.key));\n setMetaList(newList);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [obj, ...deps]);\n\n const compile = useCallback(() => {\n const res = { meta: {}, protected_meta: {} } as WithMeta;\n metaList.forEach((e) => {\n if (e.protected) {\n res.protected_meta[e.key] = e.value;\n } else {\n res.meta[e.key] = e.value;\n }\n });\n return res;\n }, [metaList]);\n\n const add = useCallback((e?: MetaElement) => {\n setMetaList([...metaList, e ?? { key: '', value: '', protected: false }]);\n }, [metaList, setMetaList]);\n\n const remove = useCallback((idx: number) => {\n setMetaList(metaList.filter((_, i) => i !== idx));\n }, [metaList, setMetaList]);\n\n const update = useCallback((idx: number, e: MetaElement) => {\n setMetaList(metaList.map((x, i) => i === idx ? e : x));\n }, [metaList, setMetaList]);\n\n const setKey = useCallback((idx: number, key: string) => {\n setMetaList(metaList.map((x, i) => i === idx ? { ...x, key } : x));\n }, [metaList, setMetaList]);\n\n const setValue = useCallback((idx: number, value: string) => {\n setMetaList(metaList.map((x, i) => i === idx ? { ...x, value } : x));\n }, [metaList, setMetaList]);\n\n const setProtected = useCallback((idx: number, value: boolean) => {\n setMetaList(metaList.map((x, i) => i === idx ? { ...x, protected: value } : x));\n }, [metaList, setMetaList]);\n\n return {\n metaList,\n compile,\n addMeta: add,\n removeMeta: remove,\n setMeta: update,\n setMetaKey: setKey,\n setMetaValue: setValue,\n setMetaProtected: setProtected,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { Devicex, Functionx, Installation } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nimport { useMQTT } from './useMQTT';\nimport type { SimpleMQTT } from './useSimpleMQTT';\n\nexport interface MultiLiveInstallation {\n installationMap: Map<number, Installation>;\n functionMap: Map<number, Functionx[]>;\n deviceMap: Map<number, Devicex[]>;\n mqtt: SimpleMQTT;\n toClientId: (iid: number) => number;\n toInstallationId: (cid: number) => number;\n}\n\nexport const useMultiLiveInstallation = (installations: Installation[]) => {\n const { lynxClient } = useGlobalLynxClient();\n const mqtt = useMQTT();\n const { bind, unbind, setSubs } = mqtt;\n\n\n // To keep track of client id => installation\n const [clientIdMap, setClientIdMap] = useState<Map<number, Installation>>(new Map());\n\n const [installationMap, setInstallationMap] = useState<Map<number, Installation>>(new Map());\n const [functionMap, setFunctionMap] = useState<Map<number, Functionx[]>>(new Map());\n const [deviceMap, setDeviceMap] = useState<Map<number, Devicex[]>>(new Map());\n\n const toClientId = useCallback((installationId: number) => {\n const i = installationMap.get(installationId);\n if (i !== undefined) {\n return i.client_id;\n }\n return 0;\n }, [installationMap]);\n\n const toInstallationId = useCallback((clientId: number) => {\n const i = clientIdMap.get(clientId);\n if (i !== undefined) {\n return i.id;\n }\n return 0;\n }, [clientIdMap]);\n\n useEffect(() => {\n if (installations.length === 0) {\n return;\n }\n const newInstallationMap = new Map<number, Installation>();\n const newClientIdMap = new Map<number, Installation>();\n const newTopics = new Array<string>();\n\n installations.forEach((inst) => {\n newInstallationMap.set(inst.id, inst);\n newClientIdMap.set(inst.client_id, inst);\n newTopics.push(`${inst.client_id}/#`);\n });\n\n // This is a flag to prevent new fetches during the initial fetch\n let done = false;\n const fnFetchers = installations.map(async(i) => {\n const fns = await lynxClient.getFunctions(i.id);\n return { functions: fns, installationId: i.id };\n });\n const devFetchers = installations.map(async(i) => {\n const devs = await lynxClient.getDevices(i.id);\n return { devices: devs, installationId: i.id };\n });\n\n const newDeviceMap = new Map<number, Devicex[]>();\n const newFunctionMap = new Map<number, Functionx[]>();\n const work = new Promise<void>((resolve, reject) => {\n let fnDone = false;\n let devDone = false;\n Promise.allSettled(fnFetchers).then((fnsResult) => {\n fnsResult.forEach((result) => {\n if (result.status === 'fulfilled') {\n newFunctionMap.set(result.value.installationId, result.value.functions);\n }\n });\n fnDone = true;\n if (fnDone && devDone) {resolve();}\n }).catch(reject);\n\n Promise.allSettled(devFetchers).then((devsResult) => {\n devsResult.forEach((result) => {\n if (result.status === 'fulfilled') {\n newDeviceMap.set(result.value.installationId, result.value.devices);\n }\n });\n devDone = true;\n if (fnDone && devDone) {resolve();}\n }).catch(reject);\n });\n work.finally(() => {\n setClientIdMap(() => newClientIdMap);\n setInstallationMap(() => newInstallationMap);\n setFunctionMap(() => newFunctionMap);\n setDeviceMap(() => newDeviceMap);\n // Now we can accept updates from mqtt\n done = true;\n }).catch((e) => {\n console.warn('Error in work.finally:', e);\n });\n\n const fnRefresh = (topic: string) => {\n if (!done) {return;}\n const cid = Number(topic.split('/')[0]);\n const inst = newClientIdMap.get(cid);\n if (inst === undefined) {return;}\n lynxClient.getFunctions(inst.id)\n .then((fns) => {\n setFunctionMap((p) => new Map([...p, [inst.id, fns]]));\n })\n .catch((e) => {\n console.warn('Failed to update function map for', inst.id, e);\n });\n };\n const devRefresh = (topic: string) => {\n if (!done) {return;}\n const cid = Number(topic.split('/')[0]);\n const inst = newClientIdMap.get(cid);\n if (inst === undefined) {return;}\n lynxClient.getDevices(inst.id)\n .then((devs) => {\n setDeviceMap((p) => new Map([...p, [inst.id, devs]]));\n })\n .catch((e) => {\n console.warn('Failed to update device map for', inst.id, e);\n });\n };\n setSubs(newTopics);\n\n bind(/[0-9]+\\/evt\\/functionx\\/updated/, fnRefresh);\n bind(/[0-9]+\\/evt\\/devicex\\/updated/, devRefresh);\n return () => {\n unbind(fnRefresh);\n unbind(devRefresh);\n };\n }, [installations, lynxClient, bind, unbind, setSubs]);\n\n return {\n installationMap,\n functionMap,\n deviceMap,\n mqtt,\n toClientId,\n toInstallationId\n } as MultiLiveInstallation;\n};\n","import { useCallback, useState } from 'react';\n\nimport type { EmptyDevicex, Metadata } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport interface DeviceTemplate {\n type?: string\n meta?: Metadata\n protected_meta?: Metadata\n}\n\nexport const useNewDevice = (installationId: number | string, template?: DeviceTemplate) => {\n const id = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(id)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [newDevice, setNewDevice] = useState<EmptyDevicex>({\n meta: {},\n protected_meta: {},\n type: '', ...template, installation_id: id\n });\n\n const setType = useCallback((t: string) => {\n setNewDevice({ ...newDevice, type: t });\n }, [newDevice, setNewDevice]);\n\n const create = useCallback(() => {\n return lynxClient.createDevice(newDevice);\n }, [lynxClient, newDevice]);\n\n return {\n newDevice,\n setNewDevice,\n create,\n setType,\n };\n};\n","import { useCallback, useState } from 'react';\n\nimport type { EmptyFunctionx, Metadata } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport interface FunctionTemplate {\n type?: string\n meta?: Metadata\n protected_meta?: Metadata\n}\n\nexport const useNewFunction = (installationId: number | string, template?: FunctionTemplate) => {\n const id = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(id)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [newFunction, setNewFunction] = useState<EmptyFunctionx>({\n meta: {},\n protected_meta: {},\n type: '', ...template, installation_id: id\n });\n\n const setType = useCallback((t: string) => {\n setNewFunction({ ...newFunction, type: t });\n }, [newFunction, setNewFunction]);\n\n const create = useCallback(() => {\n return lynxClient.createFunction(newFunction);\n }, [lynxClient, newFunction]);\n\n return {\n newFunction,\n setNewFunction,\n create,\n setType,\n };\n};\n","import { useCallback, useState } from 'react';\n\nimport type { EmptyInstallation, Metadata } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\n\nexport interface InstallationTemplate {\n name?: string\n notes?: string\n meta?: Metadata\n protected_meta?: Metadata\n}\n\nexport const useNewInstallation = (organizationId: number | string, template?: InstallationTemplate) => {\n const oid = typeof organizationId === 'string' ? Number.parseInt(organizationId) : organizationId;\n if (isNaN(oid)) {\n throw new Error('invalid organizationId');\n }\n const [newInstallation, setNewInstallation] = useState<EmptyInstallation>({\n name: '', notes: '', users: [],\n meta: {},\n protected_meta: {},\n ...template, organization_id: oid\n });\n const { lynxClient } = useGlobalLynxClient();\n\n const create = useCallback(() => {\n return lynxClient.createInstallation(newInstallation);\n }, [lynxClient, newInstallation]);\n\n return {\n newInstallation,\n setNewInstallation,\n create,\n };\n};","import { useCallback, useState } from 'react';\n\nimport type { EmptyNotificationMessage } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\n\nconst zeroEmptyNotificationMessage = {\n installation_id: 0,\n name: '',\n text: '',\n};\n\nexport interface NotificationMessageTemplate {\n installation_id?: number;\n name?: string;\n text?: string;\n}\n\nexport const useNewNotificationMessage = (installationId: number | string, template?: NotificationMessageTemplate) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const { lynxClient } = useGlobalLynxClient();\n const [newNotificationMessage, setNewNotificationMessage] = useState<EmptyNotificationMessage>({\n ...zeroEmptyNotificationMessage,\n ...template,\n installation_id: iid,\n });\n\n const create = useCallback(() => {\n return lynxClient.createNotificationMessage(newNotificationMessage);\n }, [lynxClient, newNotificationMessage]);\n\n return {\n newNotificationMessage,\n setNewNotificationMessage,\n create\n };\n};","import { useCallback, useState } from 'react';\n\nimport type { EmptyNotificationOutput } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroEmptyNotificationOutput = {\n installation_id: 0,\n name: '',\n notification_message_id: 0,\n notification_output_executor_id: 0,\n config: {},\n};\n\nexport interface NotificationOutputTemplate {\n installation_id?: number;\n name?: string;\n notification_message_id?: number;\n notification_output_executor_id?: number;\n config?: { [key: string]: string };\n}\n\nexport const useNewNotificationOutput = (installationId: number | string, template?: NotificationOutputTemplate) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const { lynxClient } = useGlobalLynxClient();\n const [newNotificationOutput, setNewNotificationOutput] = useState<EmptyNotificationOutput>({\n ...zeroEmptyNotificationOutput,\n ...template,\n installation_id: iid,\n });\n\n const create = useCallback(() => {\n return lynxClient.createNotificationOutput(newNotificationOutput);\n }, [lynxClient, newNotificationOutput]);\n\n\n return {\n newNotificationOutput,\n setNewNotificationOutput,\n create,\n };\n};","import { useCallback, useState } from 'react';\n\nimport type { EmptyOAuth2Client } from '@iotopen/node-lynx';\nimport { zero } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport interface OAuth2ClientTemplate {\n name?: string\n trusted?: boolean\n allowed_scopes?: string[]\n icon_uri?: string\n tos_uri?: string\n policy_uri?: string\n redirect_uris?: string[]\n id_token_alg?: string\n}\n\nexport const useNewOAuth2Client = (template?: OAuth2ClientTemplate) => {\n const { lynxClient } = useGlobalLynxClient();\n const [client, setClient] = useState<EmptyOAuth2Client>({\n ...zero.getEmptyOAuth2Client(),\n ...template,\n });\n\n const setName = useCallback((name: string) => {\n setClient({ ...client, name });\n }, [client]);\n\n const setScope = useCallback((scopes: string[]) => {\n setClient({ ...client, allowed_scopes: scopes });\n }, [client]);\n\n const setIconURI = useCallback((uri: string) => {\n setClient({ ...client, icon_uri: uri });\n }, [client]);\n\n const setTosURI = useCallback((uri: string) => {\n setClient({ ...client, tos_uri: uri });\n }, [client]);\n\n const setPolicyURI = useCallback((uri: string) => {\n setClient({ ...client, policy_uri: uri });\n }, [client]);\n\n const setRedirectURIs = useCallback((uris: string[]) => {\n setClient({ ...client, redirect_uris: uris });\n }, [client]);\n\n const create = useCallback(() => {\n return lynxClient.createOAuth2Client(client);\n }, [lynxClient, client]);\n\n return {\n newClient: client,\n create,\n setName,\n setScope,\n setIconURI,\n setTosURI,\n setPolicyURI,\n setRedirectURIs,\n setClient,\n };\n};\n","import { useCallback, useState } from 'react';\n\nimport type { Address, EmptyOrganization, Metadata, OrganizationChild } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport interface OrganizationTemplate {\n address?: Address\n children?: OrganizationChild[]\n email?: string\n force_sms_login?: boolean\n phone?: string\n name?: string\n notes?: string\n password_valid_days?: number\n meta?: Metadata\n protected_meta?: Metadata\n}\nconst zeroEmptyOrganization = {\n address: {\n address: '',\n city: '',\n country: '',\n zip: '',\n },\n children: [],\n email: '',\n force_sms_login: false,\n meta: {},\n name: '',\n notes: '',\n parent: 0,\n password_valid_days: 0,\n phone: '',\n protected_meta: {},\n};\nexport const useNewOrganization = (parentId: number | string, template?: OrganizationTemplate) => {\n const pid = typeof parentId === 'string' ? Number.parseInt(parentId) : parentId;\n if (isNaN(pid)) {\n throw new Error('invalid parentId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [newOrganization, setNewOrganization] = useState<EmptyOrganization>({\n ...zeroEmptyOrganization,\n ...template, parent: pid\n });\n\n const create = useCallback(() => {\n return lynxClient.createOrganization(newOrganization);\n }, [lynxClient, newOrganization]);\n\n return {\n newOrganization,\n setNewOrganization,\n create,\n };\n};","import { useCallback, useState } from 'react';\n\nimport type { Address, EmptyUser } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroEmptyUser = {\n address: {\n address: '',\n zip: '',\n city: '',\n country: ''\n },\n assigned_installations: [],\n email: '',\n expire_at: 0,\n first_name: '',\n last_name: '',\n mobile: '',\n note: '',\n organisations: [],\n password: '',\n role: 0,\n sms_login: false,\n protected_meta: {},\n meta: {},\n};\n\nexport interface UserTemplate {\n email?: string\n password?: string\n first_name?: string\n last_name?: string\n role?: number\n sms_login?: boolean\n mobile?: string\n note?: string\n organisations?: number[]\n assigned_installations?: number[]\n address?: Address\n expire_at?: number\n meta?: {[key: string]: unknown},\n protected_meta?: {[key: string]: unknown}\n}\n\nexport const useNewUser = (template?: UserTemplate) => {\n const [newUser, setNewUser] = useState<EmptyUser>({\n ...zeroEmptyUser,\n ...template\n });\n const { lynxClient } = useGlobalLynxClient();\n\n const create = useCallback(() => {\n return lynxClient.createUser(newUser);\n }, [lynxClient, newUser]);\n\n return {\n newUser, setNewUser,\n create,\n\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationMessage } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroNotificationMessage= {\n id: 0,\n installation_id: 0,\n name: '',\n text: ''\n};\n\nexport const useNotificationMessage = (installationId: number | string, notificationId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const id = typeof notificationId === 'string' ? Number.parseInt(notificationId) : notificationId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n if (isNaN(id)) {\n throw new Error('invalid messageId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [message, setMessage] = useState<NotificationMessage>({\n ...zeroNotificationMessage,\n });\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n if(iid === 0 || id === 0) {return;}\n setLoading(true);\n lynxClient.getNotificationMessage(iid, id).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setMessage(res);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [id, iid, lynxClient]);\n\n const update = useCallback(() => {\n if (error !== undefined) {setError(undefined);}\n lynxClient.updateNotificationMessage(message).then(res => {\n setMessage(res);\n }).catch(e => {\n setError(e);\n });\n }, [error, lynxClient, message]);\n\n const remove = useCallback(() => {\n lynxClient.deleteNotificationMessage(message).then(() => {\n setMessage({ ...zeroNotificationMessage });\n }).catch(e => {\n setError(e);\n });\n }, [lynxClient, message]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n message,\n setMessage,\n error,\n loading,\n remove,\n update\n };\n};","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationMessage } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useNotificationMessages = (installationId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [notificationMessages, setNotificationMessages] = useState<NotificationMessage[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n lynxClient.getNotificationMessages(iid).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setNotificationMessages(res);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [iid, lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n notificationMessages,\n error,\n loading,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationOutput } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroNotificationOutput = {\n id: 0,\n installation_id: 0,\n name: '',\n notification_message_id: 0,\n notification_output_executor_id: 0,\n config: {},\n};\n\nexport const useNotificationOutput = (installationId: number | string, notificationId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const id = typeof notificationId === 'string' ? Number.parseInt(notificationId) : notificationId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n if (isNaN(id)) {\n throw new Error('invalid notificationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [output, setOutput] = useState<NotificationOutput>({\n ...zeroNotificationOutput,\n config: { ...zeroNotificationOutput.config }\n });\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n if(iid === 0 || id === 0) {return;}\n setLoading(true);\n lynxClient.getNotificationOutput(iid, id).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setOutput(res);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [id, iid, lynxClient]);\n\n const update = useCallback(() => {\n if (error !== undefined) {setError(undefined);}\n lynxClient.updateNotificationOutput(output).then(res => {\n setOutput(res);\n }).catch(e => {\n setError(e);\n });\n }, [error, lynxClient, output]);\n\n const remove = useCallback(() => {\n lynxClient.deleteNotificationOutput(output).then(() => {\n setOutput({ ...zeroNotificationOutput });\n }).catch(e => {\n setError(e);\n });\n }, [lynxClient, output]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n output,\n setOutput,\n error,\n loading,\n remove,\n update\n };\n};","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationOutputExecutor } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\n\nconst zeroExecutor = {\n id: 0,\n type: '',\n name: '',\n organization_id: 0,\n config: {},\n secret: ''\n};\n\nexport const useNotificationOutputExecutor = (installationId: number | string, executorId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const id = typeof executorId === 'string' ? Number.parseInt(executorId) : executorId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n if (isNaN(id)) {\n throw new Error('invalid messageId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [outputExecutor, setOutputExecutor] = useState<NotificationOutputExecutor>({\n ...zeroExecutor,\n });\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n if(iid === 0 || id === 0) {return;}\n setLoading(true);\n lynxClient.getNotificationOutputExecutor(iid, id).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setOutputExecutor(res);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [id, iid, lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n outputExecutor,\n setOutputExecutor,\n error,\n loading,\n };\n};","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationOutputExecutor } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useNotificationOutputExecutors = (installationId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [notificationExecutors, setNotificationExecutors] = useState<NotificationOutputExecutor[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n lynxClient.getNotificationOutputExecutors(iid).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setNotificationExecutors(res);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [iid, lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n notificationExecutors,\n error,\n loading,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationOutput } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useNotificationOutputs = (installationId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [notificationOutputs, setNotificationOutputs] = useState<NotificationOutput[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n lynxClient.getNotificationOutputs(iid).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setNotificationOutputs(res);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [iid, lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n notificationOutputs,\n error,\n loading,\n };\n};","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, OAuth2Client } from '@iotopen/node-lynx';\nimport { zero } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useOAuth2Client = (id: string) => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [client, setClient] = useState<OAuth2Client>({ ...zero.getOAuth2Client() });\n const refresh = useCallback(() => {\n if (!loading) {setLoading(true);}\n lynxClient.getOAuth2Client(id).then(fetchedClient => {\n setError((err) => err !== undefined ? undefined : err);\n setClient(fetchedClient);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [loading, lynxClient, id]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n const remove = useCallback(() => {\n return lynxClient.deleteOAuth2Client(client);\n }, [client, lynxClient]);\n\n const update = useCallback(() => {\n return lynxClient.updateOAuth2Client(client);\n }, [client, lynxClient]);\n\n return {\n refresh,\n client,\n setClient,\n error,\n loading,\n remove,\n update,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, OAuth2Client } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useOAuth2Clients = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [clients, setClients] = useState<OAuth2Client[]>([]);\n const refresh = useCallback(() => {\n lynxClient.getOAuth2Clients().then(fetchedClients => {\n setError((err) => err !== undefined ? undefined : err);\n setClients(fetchedClients);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n clients,\n error,\n loading\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nimport { useOAuth2Client } from './useOAuth2Client';\n\nexport const useOAuth2Consent = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [requestedScopes, setRequestedScopes] = useState<string[]>([]);\n const [params] = useState(new URLSearchParams(window.location.search));\n const clientId = params.get('client_id') ?? '';\n const { client } = useOAuth2Client(clientId);\n\n const consent = useCallback((scope: string[]) => {\n const consentObject = Object.fromEntries(params);\n\n consentObject['scope'] = scope.join(' ');\n return lynxClient.consentOAuth2Authorization(consentObject);\n }, [lynxClient, params]);\n\n useEffect(() => {\n setRequestedScopes(params.get('scope')?.split(' ') ?? []);\n }, [params]);\n\n return {\n consent,\n client,\n requestedScopes\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { Organization } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroOrganization = {\n address: {\n address: '',\n city: '',\n country: '',\n zip: '',\n },\n children: [],\n email: '',\n force_sms_login: false,\n meta: {},\n name: '',\n notes: '',\n parent: 0,\n password_valid_days: 0,\n phone: '',\n protected_meta: {},\n id: 0\n};\nexport const useOrganization = (organizationId: number | string) => {\n const oid = typeof organizationId === 'string' ? Number.parseInt(organizationId) : organizationId;\n if (isNaN(oid)) {\n throw new Error('invalid organizationId');\n }\n const [organization, setOrganization] = useState<Organization>({ ...zeroOrganization });\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<Error | undefined>();\n const { lynxClient } = useGlobalLynxClient();\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getOrganization(oid).then(org => {\n setError((err) => err !== undefined ? undefined : err);\n setOrganization(org);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, oid]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const update = useCallback(() => {\n return lynxClient.updateOrganization(organization);\n }, [lynxClient, organization]);\n\n const remove = useCallback(() => {\n return lynxClient.deleteOrganization(organization);\n }, [lynxClient, organization]);\n\n return {\n loading,\n organization,\n setOrganization,\n error,\n update,\n remove,\n refresh\n };\n};","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, MinimalOrg, Organization } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useOrganizations = <T extends boolean = false>(minimal?: T) => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [organizations, setOrganizations] = useState<MinimalOrg<T>[]>([]);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getOrganizations(minimal === true).then(orgs => {\n setError((err) => err !== undefined ? undefined : err);\n setOrganizations(<MinimalOrg<T>[]>orgs);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, minimal]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const create = useCallback((org: Organization) => {\n return lynxClient.createOrganization(org);\n }, [lynxClient]);\n\n const remove = useCallback((org: Organization) => {\n return lynxClient.deleteOrganization(org);\n }, [lynxClient]);\n\n return {\n loading,\n organizations,\n setOrganizations,\n error,\n create,\n remove,\n };\n};","import { useCallback, useEffect, useState } from 'react';\n\nimport type { Role } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useRoles = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [roles, setRoles] = useState<Role[]>([]);\n const [error, setError] = useState<Error | undefined>();\n const [loading, setLoading] = useState(true);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getRoles().then((fetchedRoles) => {\n setError((err) => err !== undefined ? undefined : err);\n setRoles(fetchedRoles);\n }).catch((e) => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient]);\n\n useEffect(() => {\n refresh();\n /* eslint-disable react-hooks/exhaustive-deps */\n }, []);\n\n return {\n loading,\n error,\n roles,\n refresh\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EmptyToken, ErrorResponse, Token } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useTokens = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [tokens, setTokens] = useState<Token[]>([]);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getTokens().then((fetchedTokens) => {\n setError((err) => err !== undefined ? undefined : err);\n setTokens(fetchedTokens);\n }).catch((e) => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient]);\n\n const remove = useCallback((token: Token) => {\n return lynxClient.deleteToken(token);\n }, [lynxClient]);\n\n const create = useCallback((token: EmptyToken) => {\n return lynxClient.createToken(token);\n }, [lynxClient]);\n\n useLayoutEffect(() => {\n refresh();\n }, [refresh]);\n\n return {\n tokens,\n remove,\n create,\n refresh,\n loading,\n error\n };\n};\n","import { useCallback, useState } from 'react';\n\nimport type { User } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroUser = {\n id: 0,\n address: {\n address: '',\n zip: '',\n city: '',\n country: ''\n },\n assigned_installations: [],\n email: '',\n expire_at: 0,\n first_name: '',\n last_name: '',\n mobile: '',\n note: '',\n organisations: [],\n password: '',\n role: 0,\n sms_login: false,\n protected_meta: {},\n meta: {},\n};\n\nexport const useUser = (userId: number | string) => {\n const id = typeof userId === 'string' ? Number.parseInt(userId) : userId;\n if (isNaN(id)) {\n throw new Error('invalid userId');\n }\n const [user, setUser] = useState<User>({ ...zeroUser });\n const [loading, setLoading] = useState<boolean>(true);\n const { lynxClient } = useGlobalLynxClient();\n const [error, setError] = useState<Error | undefined>();\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getUser(id).then((fetchedUser) => {\n setError((err) => err !== undefined ? undefined : err);\n setUser(fetchedUser);\n }).catch(e => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, id]);\n\n const update = useCallback(() => {\n return lynxClient.updateUser(user);\n }, [lynxClient, user]);\n\n const remove = useCallback(() => {\n return lynxClient.deleteUser(user);\n }, [lynxClient, user]);\n\n return {\n loading,\n error,\n user,\n setUser,\n update,\n refresh,\n remove,\n };\n};\n","import { useCallback, useState } from 'react';\n\nimport type { Metadata, User } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\n\n// TODO: implement organization filter\nexport const useUsers = (filter?: Metadata) => {\n const [users, setUsers] = useState<User[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | undefined>();\n const { lynxClient } = useGlobalLynxClient();\n\n new URLSearchParams();\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getUsers(filter).then((fetchedUsers) => {\n setError((err) => err !== undefined ? undefined : err);\n setUsers(fetchedUsers);\n }).catch((e) => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, filter]);\n\n return {\n users,\n setUsers,\n refresh,\n loading,\n error\n };\n};\n"],"names":["defaultLynxClientContext","LynxClient","_url","_apiKey","_bearer","LynxClientContext","createContext","LynxClientProvider","children","url","apiKey","bearer","client","setClient","useState","newClient","useCallback","newUrl","newApiKey","newBearer","contextValue","useMemo","useGlobalLynxClient","useContext","defaultUserContext","UserContext","UserProvider","user","setUser","permissions","setPermissions","loading","setLoading","error","setError","lynxClient","useLayoutEffect","me","perms","u","p","err","e","useGlobalUser","useGlobalPermissions","LynxProvider","apiURL","jsx","usePermissionsCheckAll","currentPermissions","permission","usePermissionsCheckAny","useConfiguredEdgeApps","installationId","id","apps","setApps","refresh","fetchedApps","zeroDevice","useDevice","deviceId","iid","dev","setDev","fn","update","setType","t","remove","useDeviceMeta","devId","create","key","meta","overrideDevId","silent","createMissing","useDevices","filter","devices","setDevices","refreshCall","res","removeFn","devs","last","rest","settled","createFn","zeroEdgeApp","useEdgeApp","appId","app","setApp","fetchedApp","useEdgeApps","useEdgeAppVersions","untagged","versions","setVersions","fetchedVersions","nameVersion","name","hash","zeroFunction","useFunction","functionId","func","setFunc","useFunctionMeta","fnId","funId","useFunctions","functions","setFunctions","fns","f","useIDTokenAlgorithms","algs","setAlgs","useEffect","zeroInstallation","useInstallation","installation","setInstallation","inst","useInstallationInfo","assignedOnly","installations","setInstallations","useInstallations","usePahoMQTTClient","uri","handlers","connectionOptions","clientId","uuid","useRef","Paho","opts","callbacks","reconnectTimer","connected","setConnected","c","rct","o","cbs","reconnect","host","sub","topic","qos","resolve","pub","payload","retained","sendPayload","unsub","isEq","a","b","i","unsubscribe","subs","subscribe","useSimpleMQTT","username","password","bindings","exactBindings","onMessage","msg","tmp","cb","binds","options","s","bind","binder","re","unbind","newBinds","bindExact","unbindExact","useMQTT","baseURLObj","protocol","hostname","port","wsURL","useLiveInstallation","mqtt","fnRefresh","devRefresh","setSubs","useLiveInstallationId","useMeta","obj","deps","metaList","setMetaList","newList","value","compile","add","idx","_","x","setKey","setValue","setProtected","useMultiLiveInstallation","clientIdMap","setClientIdMap","installationMap","setInstallationMap","functionMap","setFunctionMap","deviceMap","setDeviceMap","toClientId","toInstallationId","newInstallationMap","newClientIdMap","newTopics","done","fnFetchers","devFetchers","newDeviceMap","newFunctionMap","reject","fnDone","devDone","fnsResult","result","devsResult","cid","useNewDevice","template","newDevice","setNewDevice","useNewFunction","newFunction","setNewFunction","useNewInstallation","organizationId","oid","newInstallation","setNewInstallation","zeroEmptyNotificationMessage","useNewNotificationMessage","newNotificationMessage","setNewNotificationMessage","zeroEmptyNotificationOutput","useNewNotificationOutput","newNotificationOutput","setNewNotificationOutput","useNewOAuth2Client","zero","setName","setScope","scopes","setIconURI","setTosURI","setPolicyURI","setRedirectURIs","uris","zeroEmptyOrganization","useNewOrganization","parentId","pid","newOrganization","setNewOrganization","zeroEmptyUser","useNewUser","newUser","setNewUser","zeroNotificationMessage","useNotificationMessage","notificationId","message","setMessage","useNotificationMessages","notificationMessages","setNotificationMessages","zeroNotificationOutput","useNotificationOutput","output","setOutput","zeroExecutor","useNotificationOutputExecutor","executorId","outputExecutor","setOutputExecutor","useNotificationOutputExecutors","notificationExecutors","setNotificationExecutors","useNotificationOutputs","notificationOutputs","setNotificationOutputs","useOAuth2Client","fetchedClient","useOAuth2Clients","clients","setClients","fetchedClients","useOAuth2Consent","requestedScopes","setRequestedScopes","params","consent","scope","consentObject","zeroOrganization","useOrganization","organization","setOrganization","org","useOrganizations","minimal","organizations","setOrganizations","orgs","useRoles","roles","setRoles","fetchedRoles","useTokens","tokens","setTokens","fetchedTokens","token","zeroUser","useUser","userId","fetchedUser","useUsers","users","setUsers","fetchedUsers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Contexts/LynxClientProvider.tsx","../../src/Contexts/UserProvider.tsx","../../src/Contexts/LynxProvider.tsx","../../src/Hooks/useCheckPermissions.ts","../../src/Hooks/useConfiguredEdgeApps.ts","../../src/Hooks/useDevice.ts","../../src/Hooks/useDevices.ts","../../src/Hooks/useEdgeApp.ts","../../src/Hooks/useEdgeApps.ts","../../src/Hooks/useEdgeAppVersions.ts","../../src/Hooks/useFunction.ts","../../src/Hooks/useFunctions.ts","../../src/Hooks/useIDTokenAlgorithms.ts","../../src/Hooks/useInstallation.ts","../../src/Hooks/useInstallationInfo.ts","../../src/Hooks/useInstallations.ts","../../src/Hooks/usePahoMQTTClient.ts","../../src/Hooks/useSimpleMQTT.ts","../../src/Hooks/useMQTT.ts","../../src/Hooks/useLiveInstallation.ts","../../src/Hooks/useMeta.ts","../../src/Hooks/useMultiLiveInstallation.ts","../../src/Hooks/useNewDevice.ts","../../src/Hooks/useNewFunction.ts","../../src/Hooks/useNewInstallation.ts","../../src/Hooks/useNewNotificationMessage.ts","../../src/Hooks/useNewNotificationOutput.ts","../../src/Hooks/useNewOAuth2Client.ts","../../src/Hooks/useNewOrganization.ts","../../src/Hooks/useNewUser.ts","../../src/Hooks/useNotificationMessage.ts","../../src/Hooks/useNotificationMessages.ts","../../src/Hooks/useNotificationOutput.ts","../../src/Hooks/useNotificationOutputExecutor.ts","../../src/Hooks/useNotificationOutputExecutors.ts","../../src/Hooks/useNotificationOutputs.ts","../../src/Hooks/useOAuth2Client.ts","../../src/Hooks/useOAuth2Clients.ts","../../src/Hooks/useOAuth2Consent.ts","../../src/Hooks/useOrganization.ts","../../src/Hooks/useOrganizations.ts","../../src/Hooks/useRoles.ts","../../src/Hooks/useTokens.ts","../../src/Hooks/useUser.ts","../../src/Hooks/useUsers.ts"],"sourcesContent":["import { createContext, type ReactNode, useCallback, useContext, useMemo, useState } from 'react';\n\nimport { LynxClient } from '@iotopen/node-lynx';\n\n\ninterface lynxClientContext {\n lynxClient: LynxClient;\n newLynxClient: (url: string, apiKey?: string, bearer?: boolean) => void;\n}\n\nconst defaultLynxClientContext = {\n lynxClient: new LynxClient(''),\n newLynxClient: (_url?: string, _apiKey?: string, _bearer?: boolean) => {\n // intentionally unused, see interface for signature\n }\n};\n\nconst LynxClientContext = createContext(defaultLynxClientContext as lynxClientContext);\n\ninterface LynxClientProviderProps {\n children?: ReactNode;\n url?: string | undefined;\n apiKey?: string | undefined;\n bearer?: boolean | undefined;\n}\n\nexport const LynxClientProvider = ({ children, url, apiKey, bearer }: LynxClientProviderProps) => {\n const [client, setClient] = useState(new LynxClient(url, apiKey, bearer));\n const newClient = useCallback((newUrl: string, newApiKey?: string, newBearer?: boolean) => {\n setClient(new LynxClient(newUrl, newApiKey, newBearer));\n }, [setClient]);\n const contextValue = useMemo(() => ({ lynxClient: client, newLynxClient: newClient }), [client, newClient]);\n return (\n <LynxClientContext.Provider value={contextValue}>\n {children}\n </LynxClientContext.Provider>\n );\n};\n\nexport const useGlobalLynxClient = () => {\n return useContext(LynxClientContext);\n};\n","import { createContext, type ReactNode, useContext, useLayoutEffect, useMemo, useState } from 'react';\n\nimport type { ErrorResponse, User } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from './LynxClientProvider';\n\ninterface userContext {\n user: User | null;\n permissions: { [key: string]: boolean } | null;\n error: ErrorResponse | undefined;\n loading: boolean;\n}\n\nconst defaultUserContext = {\n user: null,\n permissions: null,\n};\nconst UserContext = createContext(defaultUserContext as userContext);\n\ninterface UserProviderProps {\n children: ReactNode;\n}\n\nexport const UserProvider = ({ children }: UserProviderProps) => {\n const [user, setUser] = useState<User | null>(null);\n const [permissions, setPermissions] = useState<{ [key: string]: boolean } | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const { lynxClient } = useGlobalLynxClient();\n useLayoutEffect(() => {\n void Promise.resolve().then(() => {\n const me = lynxClient.getMe();\n const perms = lynxClient.getPermissions();\n setLoading(true);\n Promise.all([me, perms]).then(([u, p]) => {\n setError((err) => err !== undefined ? undefined : err);\n setUser(u);\n setPermissions(p);\n }).catch(e => {\n setError(e as ErrorResponse);\n setUser(null);\n setPermissions(null);\n }).finally(() => {\n setLoading(false);\n });\n });\n }, [lynxClient]);\n const contextValue = useMemo(() => ({ user, permissions, loading, error }), [user, permissions, loading, error]);\n return (\n <UserContext.Provider value={contextValue}>\n {children}\n </UserContext.Provider>\n );\n};\n\n\nexport const useGlobalUser = () => {\n return useContext(UserContext);\n};\n\nexport const useGlobalPermissions = () => {\n const { permissions } = useGlobalUser();\n return permissions;\n};\n","import type { ReactNode } from 'react';\n\nimport { LynxClientProvider } from './LynxClientProvider';\nimport { UserProvider } from './UserProvider';\n\ninterface LynxProviderProps {\n apiURL?: string;\n apiKey?: string;\n bearer?: boolean;\n children?: ReactNode;\n}\n\nexport const LynxProvider = ({ children, apiURL, apiKey, bearer }: LynxProviderProps) => {\n return (\n <LynxClientProvider url={apiURL} apiKey={apiKey} bearer={bearer}>\n <UserProvider>\n {children}\n </UserProvider>\n </LynxClientProvider>\n );\n};\n","import type { Permissions } from '@iotopen/node-lynx';\n\nimport { useGlobalPermissions } from '../Contexts';\n\n\nexport type Permission = Permissions | string\n\nexport const usePermissionsCheckAll = (...permissions: Permission[]): boolean => {\n const currentPermissions = useGlobalPermissions();\n if (currentPermissions === undefined || currentPermissions === null) {return false;}\n return permissions.every(permission => currentPermissions[permission] !== undefined && currentPermissions[permission]);\n};\n\n\nexport const usePermissionsCheckAny = (...permissions: Permission[]): boolean => {\n const currentPermissions = useGlobalPermissions();\n if (currentPermissions === undefined || currentPermissions === null) {return false;}\n return permissions.some(permission => currentPermissions[permission] !== undefined && currentPermissions[permission]);\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EdgeAppInstance, ErrorResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useConfiguredEdgeApps = (installationId: number | string) => {\n const id = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(id)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [apps, setApps] = useState<EdgeAppInstance[]>([]);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getConfiguredEdgeApps(id).then(fetchedApps => {\n setError((err) => err !== undefined ? undefined : err);\n setApps(fetchedApps);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [id, lynxClient]);\n\n useLayoutEffect(() => {\n void Promise.resolve().then(refresh);\n }, [refresh]);\n\n return {\n refresh,\n loading,\n error,\n apps,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { Devicex, ErrorResponse, MetaObject, OKResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroDevice = {\n updated: 0,\n created: 0,\n id: 0,\n installation_id: 0,\n type: '',\n meta: {},\n protected_meta: {}\n};\n\nexport const useDevice = (installationId: number | string, deviceId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const id = typeof deviceId === 'string' ? Number.parseInt(deviceId) : deviceId;\n if (isNaN(iid) || isNaN(id)) {\n throw new Error('invalid installationId or deviceId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [dev, setDev] = useState<Devicex>({ ...zeroDevice });\n const [error, setError] = useState<ErrorResponse | undefined>();\n\n useLayoutEffect(() => {\n lynxClient.getDevice(iid, id).then(fn => {\n setError((err) => err !== undefined ? undefined : err);\n setDev(fn);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, iid, id]);\n\n const update = useCallback(() => {\n return new Promise<Devicex>(() => {\n if (!dev) {\n throw new Error('update on undefined function');\n }\n return lynxClient.updateDevice(dev);\n });\n }, [lynxClient, dev]);\n\n const setType = useCallback((t: string) => {\n if (dev) {setDev({ ...dev, type: t });}\n }, [dev, setDev]);\n\n const remove = useCallback(() => {\n return new Promise<OKResponse>(() => {\n if (!dev) {\n throw new Error('delete on undefined function');\n }\n return lynxClient.deleteDevice(dev);\n });\n }, [dev, lynxClient]);\n\n return {\n loading,\n error,\n Device: dev,\n setDevice: setDev,\n update,\n remove,\n setType,\n };\n};\n\nexport const useDeviceMeta = (installationId: number | string, deviceId?: number|string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const devId = typeof deviceId === 'string' ? Number.parseInt(deviceId) : deviceId;\n\n const { lynxClient } = useGlobalLynxClient();\n\n const create = useCallback((key: string, meta: MetaObject, overrideDevId?: number, silent?: boolean) => {\n const id = overrideDevId ?? devId ?? 0;\n return lynxClient.createDeviceMeta(iid, id, key, meta, silent);\n }, [lynxClient, iid, devId]);\n\n\n const update = useCallback((key: string, meta: MetaObject, createMissing?: boolean, overrideDevId?: number, silent?: boolean) => {\n const id = overrideDevId ?? devId ?? 0;\n return lynxClient.updateDeviceMeta(iid, id, key, meta, silent, createMissing);\n }, [lynxClient, iid, devId]);\n\n\n const remove = useCallback((key: string, overrideDevId?: number, silent?: boolean) => {\n const id = overrideDevId ?? devId ?? 0;\n return lynxClient.deleteDeviceMeta(iid, id, key, silent);\n }, [lynxClient, iid, devId]);\n\n return {\n createMeta: create,\n updateMeta: update,\n removeMeta: remove,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { Devicex, EmptyDevicex, ErrorResponse, Metadata, OKResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\nimport type { ObjectOrArray } from '../types';\n\nexport const useDevices = (installationId: number|string, filter?: Metadata) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(iid) && iid !== undefined) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [devices, setDevices] = useState<Devicex[]>([]);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refreshCall = useCallback(() => {\n if (iid === undefined) {\n setLoading(false);\n setDevices([]);\n return;\n }\n setLoading(true);\n lynxClient.getDevices(iid, filter).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setDevices(res);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, iid, filter]);\n\n function removeFn<T extends Devicex | Devicex[]>(devs: T): ObjectOrArray<OKResponse, Devicex, T>\n function removeFn(devs: Devicex | Devicex[]) {\n if (Array.isArray(devs)) {\n const last = devs.pop();\n if (!last) {return Promise.allSettled([]);}\n const rest = devs.map((dev => {\n return lynxClient.deleteDevice(dev, true);\n }));\n return Promise.allSettled(rest).then(async(settled) => {\n try {\n settled.push({ status: 'fulfilled', value: await lynxClient.deleteDevice(last) });\n } catch (e) {\n settled.push({ status: 'rejected', reason: e });\n }\n return settled;\n });\n }\n return lynxClient.deleteDevice(devs);\n }\n\n function createFn<T extends EmptyDevicex | EmptyDevicex[]>(devs: T): ObjectOrArray<Devicex, EmptyDevicex, T>\n function createFn(devs: EmptyDevicex | EmptyDevicex[]) {\n if (Array.isArray(devs)) {\n const last = devs.pop();\n if (!last) {return Promise.allSettled([]);}\n const rest = devs.map(dev => {\n return lynxClient.createDevice(dev, true);\n });\n return Promise.allSettled(rest).then(async(settled) => {\n try {\n settled.push({ status: 'fulfilled', value: await lynxClient.createDevice(last) });\n } catch (e) {\n settled.push({ status: 'rejected', reason: e });\n }\n return settled;\n });\n }\n return lynxClient.createDevice(devs);\n }\n\n // createFn/removeFn are overloaded; allow any args and result here.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n const create = useCallback((...args: any[]) => (createFn as any)(...args), [createFn]);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n const remove = useCallback((...args: any[]) => (removeFn as any)(...args), [removeFn]);\n\n useLayoutEffect(() => {\n void Promise.resolve().then(refreshCall);\n }, [refreshCall]);\n\n return {\n loading,\n error,\n create,\n remove,\n devices,\n refresh: refreshCall,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EdgeApp, ErrorResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroEdgeApp = {\n id: 0,\n created: 0,\n updated: 0,\n name: '',\n category: '',\n short_description: '',\n description: '',\n source_url: '',\n tags: [],\n publisher: { id: 0 },\n public: false,\n official: false\n};\n\nexport const useEdgeApp = (appId: number | string) => {\n const id = typeof appId === 'string' ? Number.parseInt(appId) : appId;\n if (isNaN(id)) {\n throw new Error('invalid appId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [app, setApp] = useState<EdgeApp>({ ...zeroEdgeApp });\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getEdgeApp(id).then(fetchedApp => {\n setError((err) => err !== undefined ? undefined : err);\n setApp(fetchedApp);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [id, lynxClient]);\n\n useLayoutEffect(() => {\n void Promise.resolve().then(refresh);\n }, [refresh]);\n\n return {\n loading,\n error,\n app,\n setApp,\n refresh\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EdgeApp, ErrorResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useEdgeApps = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [apps, setApps] = useState<EdgeApp[]>([]);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getEdgeApps().then(fetchedApps => {\n setError((err) => err !== undefined ? undefined : err);\n setApps(fetchedApps);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient]);\n\n useLayoutEffect(() => {\n void Promise.resolve().then(refresh);\n }, [refresh]);\n\n return {\n apps,\n error,\n loading,\n refresh,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EdgeAppVersion, ErrorResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useEdgeAppVersions = (appId: number | string, untagged?: boolean) => {\n const id = typeof appId === 'string' ? Number.parseInt(appId) : appId;\n if (isNaN(id)) {\n throw new Error('invalid appId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [versions, setVersions] = useState<EdgeAppVersion[]>([]);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getEdgeAppVersions(id, untagged).then((fetchedVersions) => {\n setError((err) => err !== undefined ? undefined : err);\n setVersions(fetchedVersions);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, id, untagged]);\n\n const nameVersion = useCallback((name: string, hash: string) => {\n return lynxClient.nameEdgeAppVersion(id, name, hash);\n }, [lynxClient, id]);\n\n useLayoutEffect(() => {\n void Promise.resolve().then(refresh);\n }, [refresh]);\n\n return {\n loading,\n error,\n versions,\n nameVersion,\n refresh\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { ErrorResponse, Functionx, MetaObject, OKResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroFunction = {\n id: 0,\n installation_id: 0,\n type: '',\n updated: 0,\n created: 0,\n meta: {},\n protected_meta: {}\n};\n\nexport const useFunction = (installationId: number | string, functionId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const id = typeof functionId === 'string' ? Number.parseInt(functionId) : functionId;\n\n if (isNaN(iid) || isNaN(id)) {\n throw new Error('invalid installationId or functionId');\n }\n\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [func, setFunc] = useState<Functionx>({ ...zeroFunction });\n const [error, setError] = useState<ErrorResponse | undefined>();\n\n useLayoutEffect(() => {\n lynxClient.getFunction(iid, id).then(fn => {\n setError((err) => err !== undefined ? undefined : err);\n setFunc(fn);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, iid, id]);\n\n const update = useCallback(() => {\n return new Promise<Functionx>(() => {\n if (!func) {\n throw new Error('update on undefined function');\n }\n return lynxClient.updateFunction(func);\n });\n }, [lynxClient, func]);\n\n const setType = useCallback((t: string) => {\n if (func) {setFunc({ ...func, type: t });}\n }, [func, setFunc]);\n\n const remove = useCallback(() => {\n return new Promise<OKResponse>(() => {\n if (!func) {\n throw new Error('delete on undefined function');\n }\n return lynxClient.deleteFunction(func);\n });\n }, [func, lynxClient]);\n\n return {\n loading,\n error,\n Function: func,\n setFunction: setFunc,\n update,\n remove,\n setType,\n };\n};\n\nexport const useFunctionMeta = (installationId: number | string, functionId?: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const fnId = typeof functionId === 'string' ? Number.parseInt(functionId) : functionId;\n\n const { lynxClient } = useGlobalLynxClient();\n const create = useCallback((key: string, meta: MetaObject, funId?: number, silent?: boolean) => {\n const id = funId ?? fnId ?? 0;\n return lynxClient.createFunctionMeta(iid, id, key, meta, silent);\n }, [lynxClient, iid, fnId]);\n\n const update = useCallback((key: string, meta: MetaObject, createMissing?: boolean, funId?: number, silent?: boolean) => {\n const id = funId ?? fnId ?? 0;\n return lynxClient.updateFunctionMeta(iid, id, key, meta, silent, createMissing);\n }, [lynxClient, iid, fnId]);\n\n const remove = useCallback((key: string, funId?: number, silent?: boolean) => {\n const id = funId ?? fnId ?? 0;\n return lynxClient.deleteFunctionMeta(iid, id, key, silent);\n }, [lynxClient, iid, fnId]);\n\n return {\n createMeta: create,\n updateMeta: update,\n removeMeta: remove,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EmptyFunctionx, ErrorResponse, Functionx, Metadata, OKResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\nimport type { ObjectOrArray } from '../types';\n\nexport const useFunctions = (installationId: number | string, filter?: Metadata) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(iid) && iid !== undefined) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [functions, setFunctions] = useState<Functionx[]>([]);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refreshCall = useCallback(() => {\n if (iid === undefined) {\n setLoading(false);\n setFunctions([]);\n return;\n }\n setLoading(true);\n lynxClient.getFunctions(iid, filter).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setFunctions(res);\n return res;\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, iid, filter]);\n\n function removeFn<T extends Functionx | Functionx[]>(fns: T): ObjectOrArray<OKResponse, Functionx, T>\n function removeFn(fns: Functionx | Functionx[]) {\n if (Array.isArray(fns)) {\n const last = fns.pop();\n if (!last) {return Promise.allSettled([]);}\n const rest = fns.map((f => {\n return lynxClient.deleteFunction(f, true);\n }));\n return Promise.allSettled(rest).then(async(settled) => {\n try {\n settled.push({ status: 'fulfilled', value: await lynxClient.deleteFunction(last) });\n } catch (e) {\n settled.push({ status: 'rejected', reason: e });\n }\n return settled;\n });\n }\n return lynxClient.deleteFunction(fns);\n }\n\n function createFn<T extends EmptyFunctionx | EmptyFunctionx[]>(fns: T): ObjectOrArray<Functionx, EmptyFunctionx, T>\n function createFn(fns: EmptyFunctionx | EmptyFunctionx[]) {\n if (Array.isArray(fns)) {\n const last = fns.pop();\n if (!last) {return Promise.allSettled([]);}\n const rest = fns.map(f => {\n return lynxClient.createFunction(f, true);\n });\n return Promise.allSettled(rest).then(async(settled) => {\n try {\n settled.push({ status: 'fulfilled', value: await lynxClient.createFunction(last) });\n } catch (e) {\n settled.push({ status: 'rejected', reason: e });\n }\n return settled;\n });\n }\n return lynxClient.createFunction(fns);\n }\n\n // createFn/removeFn are overloaded; allow any args and result here.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n const create = useCallback((...args: any[]) => (createFn as any)(...args), [createFn]);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n const remove = useCallback((...args: any[]) => (removeFn as any)(...args), [removeFn]);\n\n useLayoutEffect(() => {\n void Promise.resolve().then(refreshCall);\n }, [refreshCall]);\n\n return {\n loading,\n error,\n create,\n remove,\n functions,\n refresh: refreshCall,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\n\nexport const useIDTokenAlgorithms = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [algs, setAlgs] = useState<string[]>([]);\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getIDTokenAlgorithms().then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setAlgs(res);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n loading,\n refresh,\n algs,\n error,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { Installation } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroInstallation = {\n client_id: 0,\n notes: '',\n organization_id: 0,\n id: 0,\n name: '',\n created: 0,\n meta: {},\n users: [],\n protected_meta: {}\n};\n\nexport const useInstallation = (installationId: number | string) => {\n const id = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(id)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | undefined>(undefined);\n const [installation, setInstallation] = useState<Installation>({ ...zeroInstallation });\n\n useLayoutEffect(() => {\n lynxClient.getInstallationRow(id).then(inst => {\n setError((err) => err !== undefined ? undefined : err);\n setInstallation(inst);\n }).catch(e => {\n setError(e as Error);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, id]);\n\n const update = useCallback(() => {\n return new Promise<Installation>(() => {\n if (!installation) {\n throw new Error('update on undefined installation');\n }\n return lynxClient.updateInstallation(installation);\n });\n }, [lynxClient, installation]);\n\n const remove = useCallback(() => {\n return new Promise<Installation>(() => {\n if (!installation) {\n throw new Error('update on undefined installation');\n }\n return lynxClient.deleteInstallation(installation);\n });\n }, [lynxClient, installation]);\n return {\n installation,\n setInstallation,\n update,\n remove,\n error,\n loading,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { ErrorResponse, InstallationInfo } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useInstallationInfo = (assignedOnly?: boolean) => {\n const { lynxClient } = useGlobalLynxClient();\n const [installations, setInstallations] = useState<InstallationInfo[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>(undefined);\n\n const refreshCall = useCallback(() => {\n setLoading(true);\n lynxClient.getInstallations(assignedOnly).then((res) => {\n setError((err) => err !== undefined ? undefined : err);\n setInstallations(res);\n }).catch((e: ErrorResponse) => {\n setError(e);\n }).finally(() => {\n setLoading(false);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [lynxClient]);\n\n useLayoutEffect(() => {\n refreshCall();\n }, [refreshCall]);\n\n return {\n installations,\n refresh: refreshCall,\n loading,\n error,\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { ErrorResponse, Installation, Metadata } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useInstallations = (filter?: Metadata) => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [installations, setInstallations] = useState<Installation[]>([]);\n const [error, setError] = useState<ErrorResponse | undefined>();\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.listInstallations(filter).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setInstallations(res);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, filter]);\n\n useLayoutEffect(() => {\n void Promise.resolve().then(refresh);\n }, [refresh]);\n\n return {\n loading,\n error,\n installations,\n refresh,\n };\n};\n","import { useCallback, useLayoutEffect, useRef, useState } from 'react';\n\nimport Paho, { type MQTTError, type Qos, type TypedArray } from 'paho-mqtt';\n\nfunction assertError(e: unknown): Error {\n return e instanceof Error ? e : new Error(String(e));\n}\n\ninterface MQTTHandlers {\n onMessage?: Paho.OnMessageHandler;\n onDelivery?: Paho.OnMessageHandler;\n onConnected?: Paho.OnConnectHandler;\n onDisconnect?: Paho.OnConnectionLostHandler;\n}\n\nexport const usePahoMQTTClient = (uri: string,\n handlers?: MQTTHandlers, connectionOptions?: Paho.ConnectionOptions, clientId?: string) => {\n if (clientId === undefined) {\n let uuid;\n if (window?.crypto?.randomUUID) {\n uuid = window.crypto.randomUUID();\n } else if (typeof crypto !== 'undefined' && crypto?.randomUUID) {\n uuid = crypto.randomUUID();\n } else {\n uuid = Math.random().toString(36).substring(2, 15);\n }\n clientId = `paho-ws-mqtt-${uuid}`;\n }\n const client = useRef<Paho.Client>(new Paho.Client(uri, clientId));\n const opts = useRef(connectionOptions);\n const callbacks = useRef(handlers);\n const reconnectTimer = useRef<number | undefined>(undefined);\n const [connected, setConnected] = useState(false);\n const [error, setError] = useState<Paho.MQTTError | undefined>(undefined);\n useLayoutEffect(() => {\n const c = client;\n const rct = reconnectTimer;\n const o = {\n timeout: 5,\n ...opts.current,\n onFailure: (e: MQTTError) => {\n setError(e);\n setConnected(client.current.isConnected());\n rct.current ??= window.setInterval(() => {\n if (c.current.isConnected()) {\n clearInterval(rct.current);\n } else {\n c.current.connect(o);\n }\n }, 5000);\n },\n onSuccess: () => {\n setError(undefined);\n setConnected(client.current.isConnected());\n if (rct.current !== undefined) {\n window.clearInterval(rct.current);\n rct.current = undefined;\n }\n },\n } as Paho.ConnectionOptions;\n const cbs = callbacks.current;\n c.current.onConnectionLost = (e: MQTTError) => {\n setError(e);\n setConnected(client.current.isConnected());\n cbs?.onDisconnect?.(e);\n };\n c.current.onConnected = (reconnect: boolean, host: string) => {\n setConnected(client.current.isConnected());\n setError(undefined);\n cbs?.onConnected?.(reconnect, host);\n };\n if (cbs) {\n if (cbs.onMessage) {\n c.current.onMessageArrived = cbs.onMessage;\n }\n if (cbs.onDelivery) {\n c.current.onMessageDelivered = cbs.onDelivery;\n }\n }\n try {\n c.current.connect(o);\n } catch (_e) {\n window.setTimeout(() => {\n c.current.connect(o);\n }, 5000);\n }\n return () => {\n try {\n c.current.disconnect();\n if (rct.current !== undefined) {\n window.clearInterval(rct.current);\n }\n } catch (e) {\n console.log(e);\n }\n };\n\n }, []);\n\n\n const sub = useCallback((topic: string, qos?: Qos) => {\n return new Promise<Qos>((resolve) => {\n client.current.subscribe(topic, {\n qos: qos ?? 0,\n timeout: 1,\n onFailure: (e: MQTTError) => {\n throw assertError(e);\n },\n onSuccess: (res) => {\n resolve(res.grantedQos);\n }\n });\n });\n }, [client]);\n\n const pub = useCallback((topic: string, payload: string | TypedArray, qos?: Qos, retained?: boolean) => {\n let sendPayload: string | ArrayBuffer;\n if (typeof payload === 'string') {\n sendPayload = payload;\n } else if (ArrayBuffer.isView(payload)) {\n // Always create a new ArrayBuffer to guarantee type\n sendPayload = new Uint8Array(payload.buffer, payload.byteOffset, payload.byteLength).slice().buffer;\n } else {\n throw new Error('Payload must be a string or TypedArray');\n }\n client.current.send(topic, sendPayload, qos, retained);\n }, [client]);\n\n const unsub = useCallback((topic: string) => {\n return new Promise<void>((resolve) => {\n client.current.unsubscribe(topic, {\n timeout: 1,\n onSuccess: () => {\n resolve();\n },\n onFailure: (e: MQTTError) => {\n throw assertError(e);\n }\n });\n });\n }, [client]);\n\n return {\n client,\n connected,\n error,\n sub,\n pub,\n unsub,\n };\n};\n","import { useCallback, useEffect, useRef } from 'react';\n\nimport type { Qos, TypedArray } from 'paho-mqtt';\nimport type Paho from 'paho-mqtt';\n\nimport { usePahoMQTTClient } from './usePahoMQTTClient';\n\nexport type Binding = (topic: string, payload: string, qos: Qos, retained: boolean) => void;\n\nexport type Binder = (topic: RegExp | string, binder: Binding) => void;\nexport type Unbinder = (binder: Binding) => void;\n\nexport type ExactBinder = (topic: string, binder: Binding) => void;\nexport type ExactUnbinder = (topic: string, binder: Binding) => void;\n\nexport type Publisher = (topic: string, payload: string | TypedArray, qos?: Qos, retained?: boolean) => void;\n\nfunction isEq<T>(a: T[], b: T[]): boolean {\n if (a.length === b.length) {\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n\ntype Unsub = (topic: string) => void | Promise<void>;\n\nfunction unsubscribe(unsub: Unsub, subs: string[]): Promise<void> {\n return new Promise<void>((resolve) => {\n subs.forEach(async(topic) => {\n try {\n await unsub(topic);\n } catch (e) {\n console.warn('failed to unsubscribe to', topic, e);\n }\n });\n resolve();\n });\n}\n\nfunction subscribe(sub: (topic: string, qos?: Qos) => void | Promise<Qos>, subs: string[]): Promise<void> {\n return new Promise<void>((resolve) => {\n subs.forEach(async(topic) => {\n try {\n await sub(topic);\n } catch (e) {\n console.warn('failed to subscribe to', topic, e);\n }\n });\n resolve();\n });\n}\n\nexport interface SimpleMQTT {\n setSubs: (subscriptions: string[]) => void;\n error?: Paho.MQTTError;\n connected: boolean;\n bind: Binder;\n unbind: Unbinder;\n bindExact: ExactBinder;\n unbindExact: ExactUnbinder;\n pub: Publisher;\n}\n\nexport const useSimpleMQTT = (uri?: string, username?: string, password?: string) => {\n if (uri === undefined) {\n if (window !== undefined) {\n uri = window.location.protocol === 'http:' ? `ws://${window.location.host}/mqtt` : `wss://${window.location.host}/mqtt`;\n } else {\n uri = location.protocol === 'http:' ? `ws://${location.host}/mqtt` : `wss://${location.host}/mqtt`;\n }\n }\n const subs = useRef<string[]>([]);\n const bindings = useRef(new Map<string, Binding[]>([]));\n const exactBindings = useRef(new Map<string, Binding[]>([]));\n const onMessage = useCallback((msg: Paho.Message) => {\n const tmp = exactBindings.current.get(msg.destinationName);\n if (tmp) {\n tmp.forEach((cb) => {\n cb(msg.destinationName, new TextDecoder().decode(msg.payloadBytes), msg.qos, msg.retained);\n });\n }\n bindings.current.forEach((binds, key) => {\n const re = new RegExp(key);\n if (re.test(msg.destinationName)) {\n binds.forEach(cb => {\n cb(msg.destinationName, new TextDecoder().decode(msg.payloadBytes), msg.qos, msg.retained);\n });\n }\n });\n }, []);\n const c = useRef<boolean>(false);\n\n const options = {\n cleanSession: true,\n reconnect: true,\n keepAliveInterval: 5,\n } as Paho.ConnectionOptions;\n if (username) {\n options.userName = username;\n }\n if (password) {\n options.password = password;\n }\n const {\n error,\n connected,\n sub,\n unsub,\n pub\n } = usePahoMQTTClient(uri, {\n onMessage, onConnected: () => {\n subs.current.forEach(s => {\n sub(s).catch((e) => {\n console.warn('Failed to subscribe to', s, e);\n });\n });\n },\n }, options);\n\n useEffect(() => {\n c.current = connected;\n }, [connected]);\n\n const bind = useCallback((topic: RegExp | string, binder: Binding) => {\n let re: RegExp;\n if (typeof topic === 'string') {\n re = new RegExp(`^${topic}$`);\n } else {\n re = topic;\n }\n const key = re.toString().slice(1, -1);\n let binds = bindings.current.get(key);\n if (binds === undefined) {\n binds = [binder];\n bindings.current.set(key, binds);\n return;\n }\n if (binds.includes(binder)) {\n return;\n }\n binds.push(binder);\n }, []);\n\n const unbind = useCallback((binder: Binding) => {\n bindings.current.forEach((binds, key) => {\n const newBinds = binds.filter((b) => b !== binder);\n bindings.current.set(key, newBinds);\n });\n }, []);\n\n\n const bindExact = useCallback((topic: string, binder: Binding) => {\n let binds = exactBindings.current.get(topic);\n if (binds === undefined) {\n binds = [binder];\n exactBindings.current.set(topic, binds);\n return;\n }\n if (binds.includes(binder)) {\n return;\n }\n binds.push(binder);\n }, []);\n\n const unbindExact = useCallback((topic: string, binder: Binding) => {\n const binds = exactBindings.current.get(topic);\n if (binds === undefined) {return;}\n exactBindings.current.set(topic, binds.filter((b) => b !== binder));\n }, []);\n\n const updateSubs = useCallback((s: string[]) => {\n if (isEq(subs.current, s)) {\n return;\n }\n if (c.current) {\n unsubscribe(unsub, subs.current)\n .then(() => subscribe(sub, s))\n .catch((e) => {\n console.warn('Failed to update subscriptions', e);\n });\n }\n subs.current = s;\n }, [sub, unsub]);\n\n return {\n setSubs: updateSubs,\n error,\n connected,\n bind,\n unbind,\n bindExact,\n unbindExact,\n pub,\n } as SimpleMQTT;\n};\n","import { useGlobalLynxClient, useGlobalUser } from '../Contexts';\n\nimport { useSimpleMQTT } from './useSimpleMQTT';\n\nexport const useMQTT = () => {\n const client = useGlobalLynxClient();\n const { user } = useGlobalUser();\n const baseURLObj = new URL(client.lynxClient.baseURL);\n const protocol = baseURLObj.protocol === 'http:' ? 'ws:' : 'wss:';\n const hostname = baseURLObj.hostname;\n const port = baseURLObj.port ? `:${baseURLObj.port}` : '';\n const wsURL = `${protocol}//${hostname}${port}/mqtt`;\n let username = user?.email ?? 'api-key';\n if (client.lynxClient.bearer) {\n username = 'bearer';\n }\n return useSimpleMQTT(wsURL, username, client.lynxClient.apiKey);\n};\n","import { useEffect } from 'react';\n\nimport type { Devicex, Functionx, Installation } from '@iotopen/node-lynx';\n\nimport { useDevices } from './useDevices';\nimport { useFunctions } from './useFunctions';\nimport { useInstallation } from './useInstallation';\nimport { useMQTT } from './useMQTT';\nimport type { SimpleMQTT } from './useSimpleMQTT';\n\nexport interface LiveInstallation {\n installation: Installation;\n functions: Functionx[];\n devices: Devicex[];\n mqtt: SimpleMQTT;\n}\n\nexport const useLiveInstallation = (installation: Installation) => {\n const mqtt = useMQTT();\n const { functions, refresh: fnRefresh } = useFunctions(installation.id);\n const { devices, refresh: devRefresh } = useDevices(installation.id);\n const { unbind, bind, setSubs } = mqtt;\n\n useEffect(() => {\n setSubs([`${installation.client_id}/#`]);\n bind(/[0-9]+\\/evt\\/functionx\\/updated/, fnRefresh);\n bind(/[0-9]+\\/evt\\/devicex\\/updated/, devRefresh);\n return () => {\n unbind(fnRefresh);\n unbind(devRefresh);\n };\n }, [bind, devRefresh, fnRefresh, installation, setSubs, unbind]);\n\n return {\n installation,\n functions,\n devices,\n mqtt,\n } as LiveInstallation;\n};\n\nexport const useLiveInstallationId = (installationId: number | string) => {\n const mqtt = useMQTT();\n const { installation } = useInstallation(installationId);\n const { functions, refresh: fnRefresh } = useFunctions(installationId);\n const { devices, refresh: devRefresh } = useDevices(installationId);\n const { unbind, bind, setSubs } = mqtt;\n useEffect(() => {\n setSubs([`${installation.client_id}/#`]);\n bind(/[0-9]+\\/evt\\/functionx\\/updated/, fnRefresh);\n bind(/[0-9]+\\/evt\\/devicex\\/updated/, devRefresh);\n return () => {\n unbind(fnRefresh);\n unbind(devRefresh);\n };\n }, [bind, devRefresh, fnRefresh, installation, setSubs, unbind]);\n\n return {\n installation,\n functions,\n devices,\n mqtt\n } as LiveInstallation;\n};\n","import { type DependencyList, useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { MetaObject, WithMeta } from '@iotopen/node-lynx';\n\nexport type MetaElement = MetaObject & {\n key: string\n}\n\nexport const useMeta = (obj?: WithMeta, deps: DependencyList = []) => {\n const [metaList, setMetaList] = useState<MetaElement[]>([]);\n\n useLayoutEffect(() => {\n if (obj) {\n const newList = [] as MetaElement[];\n for (const key in obj.meta) {\n const value = obj.meta[key];\n newList.push({ key, value: value ?? '', protected: false });\n }\n for (const key in obj.protected_meta) {\n const value = obj.protected_meta[key];\n newList.push({ key, value: value ?? '', protected: true });\n }\n newList.sort((a, b) => a.key.localeCompare(b.key));\n setMetaList(newList);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [obj, ...deps]);\n\n const compile = useCallback(() => {\n const res = { meta: {}, protected_meta: {} } as WithMeta;\n metaList.forEach((e) => {\n if (e.protected) {\n res.protected_meta[e.key] = e.value;\n } else {\n res.meta[e.key] = e.value;\n }\n });\n return res;\n }, [metaList]);\n\n const add = useCallback((e?: MetaElement) => {\n setMetaList([...metaList, e ?? { key: '', value: '', protected: false }]);\n }, [metaList, setMetaList]);\n\n const remove = useCallback((idx: number) => {\n setMetaList(metaList.filter((_, i) => i !== idx));\n }, [metaList, setMetaList]);\n\n const update = useCallback((idx: number, e: MetaElement) => {\n setMetaList(metaList.map((x, i) => i === idx ? e : x));\n }, [metaList, setMetaList]);\n\n const setKey = useCallback((idx: number, key: string) => {\n setMetaList(metaList.map((x, i) => i === idx ? { ...x, key } : x));\n }, [metaList, setMetaList]);\n\n const setValue = useCallback((idx: number, value: string) => {\n setMetaList(metaList.map((x, i) => i === idx ? { ...x, value } : x));\n }, [metaList, setMetaList]);\n\n const setProtected = useCallback((idx: number, value: boolean) => {\n setMetaList(metaList.map((x, i) => i === idx ? { ...x, protected: value } : x));\n }, [metaList, setMetaList]);\n\n return {\n metaList,\n compile,\n addMeta: add,\n removeMeta: remove,\n setMeta: update,\n setMetaKey: setKey,\n setMetaValue: setValue,\n setMetaProtected: setProtected,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { Devicex, Functionx, Installation } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nimport { useMQTT } from './useMQTT';\nimport type { SimpleMQTT } from './useSimpleMQTT';\n\nexport interface MultiLiveInstallation {\n installationMap: Map<number, Installation>;\n functionMap: Map<number, Functionx[]>;\n deviceMap: Map<number, Devicex[]>;\n mqtt: SimpleMQTT;\n toClientId: (iid: number) => number;\n toInstallationId: (cid: number) => number;\n}\n\nexport const useMultiLiveInstallation = (installations: Installation[]) => {\n const { lynxClient } = useGlobalLynxClient();\n const mqtt = useMQTT();\n const { bind, unbind, setSubs } = mqtt;\n\n\n // To keep track of client id => installation\n const [clientIdMap, setClientIdMap] = useState<Map<number, Installation>>(new Map());\n\n const [installationMap, setInstallationMap] = useState<Map<number, Installation>>(new Map());\n const [functionMap, setFunctionMap] = useState<Map<number, Functionx[]>>(new Map());\n const [deviceMap, setDeviceMap] = useState<Map<number, Devicex[]>>(new Map());\n\n const toClientId = useCallback((installationId: number) => {\n const i = installationMap.get(installationId);\n if (i !== undefined) {\n return i.client_id;\n }\n return 0;\n }, [installationMap]);\n\n const toInstallationId = useCallback((clientId: number) => {\n const i = clientIdMap.get(clientId);\n if (i !== undefined) {\n return i.id;\n }\n return 0;\n }, [clientIdMap]);\n\n useEffect(() => {\n if (installations.length === 0) {\n return;\n }\n const newInstallationMap = new Map<number, Installation>();\n const newClientIdMap = new Map<number, Installation>();\n const newTopics = new Array<string>();\n\n installations.forEach((inst) => {\n newInstallationMap.set(inst.id, inst);\n newClientIdMap.set(inst.client_id, inst);\n newTopics.push(`${inst.client_id}/#`);\n });\n\n // This is a flag to prevent new fetches during the initial fetch\n let done = false;\n const fnFetchers = installations.map(async(i) => {\n const fns = await lynxClient.getFunctions(i.id);\n return { functions: fns, installationId: i.id };\n });\n const devFetchers = installations.map(async(i) => {\n const devs = await lynxClient.getDevices(i.id);\n return { devices: devs, installationId: i.id };\n });\n\n const newDeviceMap = new Map<number, Devicex[]>();\n const newFunctionMap = new Map<number, Functionx[]>();\n const work = new Promise<void>((resolve, reject) => {\n let fnDone = false;\n let devDone = false;\n Promise.allSettled(fnFetchers).then((fnsResult) => {\n fnsResult.forEach((result) => {\n if (result.status === 'fulfilled') {\n newFunctionMap.set(result.value.installationId, result.value.functions);\n }\n });\n fnDone = true;\n if (fnDone && devDone) {resolve();}\n }).catch(reject);\n\n Promise.allSettled(devFetchers).then((devsResult) => {\n devsResult.forEach((result) => {\n if (result.status === 'fulfilled') {\n newDeviceMap.set(result.value.installationId, result.value.devices);\n }\n });\n devDone = true;\n if (fnDone && devDone) {resolve();}\n }).catch(reject);\n });\n work.finally(() => {\n setClientIdMap(() => newClientIdMap);\n setInstallationMap(() => newInstallationMap);\n setFunctionMap(() => newFunctionMap);\n setDeviceMap(() => newDeviceMap);\n // Now we can accept updates from mqtt\n done = true;\n }).catch((e) => {\n console.warn('Error in work.finally:', e);\n });\n\n const fnRefresh = (topic: string) => {\n if (!done) {return;}\n const cid = Number(topic.split('/')[0]);\n const inst = newClientIdMap.get(cid);\n if (inst === undefined) {return;}\n lynxClient.getFunctions(inst.id)\n .then((fns) => {\n setFunctionMap((p) => new Map([...p, [inst.id, fns]]));\n })\n .catch((e) => {\n console.warn('Failed to update function map for', inst.id, e);\n });\n };\n const devRefresh = (topic: string) => {\n if (!done) {return;}\n const cid = Number(topic.split('/')[0]);\n const inst = newClientIdMap.get(cid);\n if (inst === undefined) {return;}\n lynxClient.getDevices(inst.id)\n .then((devs) => {\n setDeviceMap((p) => new Map([...p, [inst.id, devs]]));\n })\n .catch((e) => {\n console.warn('Failed to update device map for', inst.id, e);\n });\n };\n setSubs(newTopics);\n\n bind(/[0-9]+\\/evt\\/functionx\\/updated/, fnRefresh);\n bind(/[0-9]+\\/evt\\/devicex\\/updated/, devRefresh);\n return () => {\n unbind(fnRefresh);\n unbind(devRefresh);\n };\n }, [installations, lynxClient, bind, unbind, setSubs]);\n\n return {\n installationMap,\n functionMap,\n deviceMap,\n mqtt,\n toClientId,\n toInstallationId\n } as MultiLiveInstallation;\n};\n","import { useCallback, useState } from 'react';\n\nimport type { EmptyDevicex, Metadata } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport interface DeviceTemplate {\n type?: string\n meta?: Metadata\n protected_meta?: Metadata\n}\n\nexport const useNewDevice = (installationId: number | string, template?: DeviceTemplate) => {\n const id = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(id)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [newDevice, setNewDevice] = useState<EmptyDevicex>({\n meta: {},\n protected_meta: {},\n type: '', ...template, installation_id: id\n });\n\n const setType = useCallback((t: string) => {\n setNewDevice({ ...newDevice, type: t });\n }, [newDevice, setNewDevice]);\n\n const create = useCallback(() => {\n return lynxClient.createDevice(newDevice);\n }, [lynxClient, newDevice]);\n\n return {\n newDevice,\n setNewDevice,\n create,\n setType,\n };\n};\n","import { useCallback, useState } from 'react';\n\nimport type { EmptyFunctionx, Metadata } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport interface FunctionTemplate {\n type?: string\n meta?: Metadata\n protected_meta?: Metadata\n}\n\nexport const useNewFunction = (installationId: number | string, template?: FunctionTemplate) => {\n const id = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(id)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [newFunction, setNewFunction] = useState<EmptyFunctionx>({\n meta: {},\n protected_meta: {},\n type: '', ...template, installation_id: id\n });\n\n const setType = useCallback((t: string) => {\n setNewFunction({ ...newFunction, type: t });\n }, [newFunction, setNewFunction]);\n\n const create = useCallback(() => {\n return lynxClient.createFunction(newFunction);\n }, [lynxClient, newFunction]);\n\n return {\n newFunction,\n setNewFunction,\n create,\n setType,\n };\n};\n","import { useCallback, useState } from 'react';\n\nimport type { EmptyInstallation, Metadata } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\n\nexport interface InstallationTemplate {\n name?: string\n notes?: string\n meta?: Metadata\n protected_meta?: Metadata\n}\n\nexport const useNewInstallation = (organizationId: number | string, template?: InstallationTemplate) => {\n const oid = typeof organizationId === 'string' ? Number.parseInt(organizationId) : organizationId;\n if (isNaN(oid)) {\n throw new Error('invalid organizationId');\n }\n const [newInstallation, setNewInstallation] = useState<EmptyInstallation>({\n name: '', notes: '', users: [],\n meta: {},\n protected_meta: {},\n ...template, organization_id: oid\n });\n const { lynxClient } = useGlobalLynxClient();\n\n const create = useCallback(() => {\n return lynxClient.createInstallation(newInstallation);\n }, [lynxClient, newInstallation]);\n\n return {\n newInstallation,\n setNewInstallation,\n create,\n };\n};","import { useCallback, useState } from 'react';\n\nimport type { EmptyNotificationMessage } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\n\nconst zeroEmptyNotificationMessage = {\n installation_id: 0,\n name: '',\n text: '',\n};\n\nexport interface NotificationMessageTemplate {\n installation_id?: number;\n name?: string;\n text?: string;\n}\n\nexport const useNewNotificationMessage = (installationId: number | string, template?: NotificationMessageTemplate) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const { lynxClient } = useGlobalLynxClient();\n const [newNotificationMessage, setNewNotificationMessage] = useState<EmptyNotificationMessage>({\n ...zeroEmptyNotificationMessage,\n ...template,\n installation_id: iid,\n });\n\n const create = useCallback(() => {\n return lynxClient.createNotificationMessage(newNotificationMessage);\n }, [lynxClient, newNotificationMessage]);\n\n return {\n newNotificationMessage,\n setNewNotificationMessage,\n create\n };\n};","import { useCallback, useState } from 'react';\n\nimport type { EmptyNotificationOutput } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroEmptyNotificationOutput = {\n installation_id: 0,\n name: '',\n notification_message_id: 0,\n notification_output_executor_id: 0,\n config: {},\n};\n\nexport interface NotificationOutputTemplate {\n installation_id?: number;\n name?: string;\n notification_message_id?: number;\n notification_output_executor_id?: number;\n config?: { [key: string]: string };\n}\n\nexport const useNewNotificationOutput = (installationId: number | string, template?: NotificationOutputTemplate) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const { lynxClient } = useGlobalLynxClient();\n const [newNotificationOutput, setNewNotificationOutput] = useState<EmptyNotificationOutput>({\n ...zeroEmptyNotificationOutput,\n ...template,\n installation_id: iid,\n });\n\n const create = useCallback(() => {\n return lynxClient.createNotificationOutput(newNotificationOutput);\n }, [lynxClient, newNotificationOutput]);\n\n\n return {\n newNotificationOutput,\n setNewNotificationOutput,\n create,\n };\n};","import { useCallback, useState } from 'react';\n\nimport { type EmptyOAuth2Client, zero } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport interface OAuth2ClientTemplate {\n name?: string\n trusted?: boolean\n allowed_scopes?: string[]\n icon_uri?: string\n tos_uri?: string\n policy_uri?: string\n redirect_uris?: string[]\n id_token_alg?: string\n}\n\nexport const useNewOAuth2Client = (template?: OAuth2ClientTemplate) => {\n const { lynxClient } = useGlobalLynxClient();\n const [client, setClient] = useState<EmptyOAuth2Client>({\n ...zero.getEmptyOAuth2Client(),\n ...template,\n });\n\n const setName = useCallback((name: string) => {\n setClient({ ...client, name });\n }, [client]);\n\n const setScope = useCallback((scopes: string[]) => {\n setClient({ ...client, allowed_scopes: scopes });\n }, [client]);\n\n const setIconURI = useCallback((uri: string) => {\n setClient({ ...client, icon_uri: uri });\n }, [client]);\n\n const setTosURI = useCallback((uri: string) => {\n setClient({ ...client, tos_uri: uri });\n }, [client]);\n\n const setPolicyURI = useCallback((uri: string) => {\n setClient({ ...client, policy_uri: uri });\n }, [client]);\n\n const setRedirectURIs = useCallback((uris: string[]) => {\n setClient({ ...client, redirect_uris: uris });\n }, [client]);\n\n const create = useCallback(() => {\n return lynxClient.createOAuth2Client(client);\n }, [lynxClient, client]);\n\n return {\n newClient: client,\n create,\n setName,\n setScope,\n setIconURI,\n setTosURI,\n setPolicyURI,\n setRedirectURIs,\n setClient,\n };\n};\n","import { useCallback, useState } from 'react';\n\nimport type { Address, EmptyOrganization, Metadata, OrganizationChild } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport interface OrganizationTemplate {\n address?: Address\n children?: OrganizationChild[]\n email?: string\n force_sms_login?: boolean\n phone?: string\n name?: string\n notes?: string\n password_valid_days?: number\n meta?: Metadata\n protected_meta?: Metadata\n}\nconst zeroEmptyOrganization = {\n address: {\n address: '',\n city: '',\n country: '',\n zip: '',\n },\n children: [],\n email: '',\n force_sms_login: false,\n meta: {},\n name: '',\n notes: '',\n parent: 0,\n password_valid_days: 0,\n phone: '',\n protected_meta: {},\n};\nexport const useNewOrganization = (parentId: number | string, template?: OrganizationTemplate) => {\n const pid = typeof parentId === 'string' ? Number.parseInt(parentId) : parentId;\n if (isNaN(pid)) {\n throw new Error('invalid parentId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [newOrganization, setNewOrganization] = useState<EmptyOrganization>({\n ...zeroEmptyOrganization,\n ...template, parent: pid\n });\n\n const create = useCallback(() => {\n return lynxClient.createOrganization(newOrganization);\n }, [lynxClient, newOrganization]);\n\n return {\n newOrganization,\n setNewOrganization,\n create,\n };\n};","import { useCallback, useState } from 'react';\n\nimport type { Address, EmptyUser } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroEmptyUser = {\n address: {\n address: '',\n zip: '',\n city: '',\n country: ''\n },\n assigned_installations: [],\n email: '',\n expire_at: 0,\n first_name: '',\n last_name: '',\n mobile: '',\n note: '',\n organisations: [],\n password: '',\n role: 0,\n sms_login: false,\n protected_meta: {},\n meta: {},\n};\n\nexport interface UserTemplate {\n email?: string\n password?: string\n first_name?: string\n last_name?: string\n role?: number\n sms_login?: boolean\n mobile?: string\n note?: string\n organisations?: number[]\n assigned_installations?: number[]\n address?: Address\n expire_at?: number\n meta?: {[key: string]: unknown},\n protected_meta?: {[key: string]: unknown}\n}\n\nexport const useNewUser = (template?: UserTemplate) => {\n const [newUser, setNewUser] = useState<EmptyUser>({\n ...zeroEmptyUser,\n ...template\n });\n const { lynxClient } = useGlobalLynxClient();\n\n const create = useCallback(() => {\n return lynxClient.createUser(newUser);\n }, [lynxClient, newUser]);\n\n return {\n newUser, setNewUser,\n create,\n\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationMessage } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroNotificationMessage= {\n id: 0,\n installation_id: 0,\n name: '',\n text: ''\n};\n\nexport const useNotificationMessage = (installationId: number | string, notificationId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const id = typeof notificationId === 'string' ? Number.parseInt(notificationId) : notificationId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n if (isNaN(id)) {\n throw new Error('invalid messageId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [message, setMessage] = useState<NotificationMessage>({\n ...zeroNotificationMessage,\n });\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n if (iid === 0 || id === 0) {return;}\n setLoading(true);\n lynxClient.getNotificationMessage(iid, id).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setMessage(res);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [id, iid, lynxClient]);\n\n const update = useCallback(() => {\n if (error !== undefined) {setError(undefined);}\n lynxClient.updateNotificationMessage(message).then(res => {\n setMessage(res);\n }).catch(e => {\n setError(e as ErrorResponse);\n });\n }, [error, lynxClient, message]);\n\n const remove = useCallback(() => {\n lynxClient.deleteNotificationMessage(message).then(() => {\n setMessage({ ...zeroNotificationMessage });\n }).catch(e => {\n setError(e as ErrorResponse);\n });\n }, [lynxClient, message]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n message,\n setMessage,\n error,\n loading,\n remove,\n update\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationMessage } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useNotificationMessages = (installationId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [notificationMessages, setNotificationMessages] = useState<NotificationMessage[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n lynxClient.getNotificationMessages(iid).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setNotificationMessages(res);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [iid, lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n notificationMessages,\n error,\n loading,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationOutput } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroNotificationOutput = {\n id: 0,\n installation_id: 0,\n name: '',\n notification_message_id: 0,\n notification_output_executor_id: 0,\n config: {},\n};\n\nexport const useNotificationOutput = (installationId: number | string, notificationId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const id = typeof notificationId === 'string' ? Number.parseInt(notificationId) : notificationId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n if (isNaN(id)) {\n throw new Error('invalid notificationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [output, setOutput] = useState<NotificationOutput>({\n ...zeroNotificationOutput,\n config: { ...zeroNotificationOutput.config }\n });\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n if (iid === 0 || id === 0) {return;}\n setLoading(true);\n lynxClient.getNotificationOutput(iid, id).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setOutput(res);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [id, iid, lynxClient]);\n\n const update = useCallback(() => {\n if (error !== undefined) {setError(undefined);}\n lynxClient.updateNotificationOutput(output).then(res => {\n setOutput(res);\n }).catch(e => {\n setError(e as ErrorResponse);\n });\n }, [error, lynxClient, output]);\n\n const remove = useCallback(() => {\n lynxClient.deleteNotificationOutput(output).then(() => {\n setOutput({ ...zeroNotificationOutput });\n }).catch(e => {\n setError(e as ErrorResponse);\n });\n }, [lynxClient, output]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n output,\n setOutput,\n error,\n loading,\n remove,\n update\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationOutputExecutor } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\n\nconst zeroExecutor = {\n id: 0,\n type: '',\n name: '',\n organization_id: 0,\n config: {},\n secret: ''\n};\n\nexport const useNotificationOutputExecutor = (installationId: number | string, executorId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n const id = typeof executorId === 'string' ? Number.parseInt(executorId) : executorId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n if (isNaN(id)) {\n throw new Error('invalid messageId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [outputExecutor, setOutputExecutor] = useState<NotificationOutputExecutor>({\n ...zeroExecutor,\n });\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n if (iid === 0 || id === 0) {return;}\n setLoading(true);\n lynxClient.getNotificationOutputExecutor(iid, id).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setOutputExecutor(res);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [id, iid, lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n outputExecutor,\n setOutputExecutor,\n error,\n loading,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationOutputExecutor } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useNotificationOutputExecutors = (installationId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [notificationExecutors, setNotificationExecutors] = useState<NotificationOutputExecutor[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n lynxClient.getNotificationOutputExecutors(iid).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setNotificationExecutors(res);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [iid, lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n notificationExecutors,\n error,\n loading,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, NotificationOutput } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useNotificationOutputs = (installationId: number | string) => {\n const iid = typeof installationId === 'string' ? Number.parseInt(installationId) : installationId;\n if (isNaN(iid)) {\n throw new Error('invalid installationId');\n }\n const { lynxClient } = useGlobalLynxClient();\n const [notificationOutputs, setNotificationOutputs] = useState<NotificationOutput[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const refresh = useCallback(() => {\n lynxClient.getNotificationOutputs(iid).then(res => {\n setError((err) => err !== undefined ? undefined : err);\n setNotificationOutputs(res);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [iid, lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n notificationOutputs,\n error,\n loading,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { type ErrorResponse, type OAuth2Client, zero } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useOAuth2Client = (id: string) => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [client, setClient] = useState<OAuth2Client>({ ...zero.getOAuth2Client() });\n const refresh = useCallback(() => {\n if (!loading) {setLoading(true);}\n lynxClient.getOAuth2Client(id).then(fetchedClient => {\n setError((err) => err !== undefined ? undefined : err);\n setClient(fetchedClient);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [loading, lynxClient, id]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n const remove = useCallback(() => {\n return lynxClient.deleteOAuth2Client(client);\n }, [client, lynxClient]);\n\n const update = useCallback(() => {\n return lynxClient.updateOAuth2Client(client);\n }, [client, lynxClient]);\n\n return {\n refresh,\n client,\n setClient,\n error,\n loading,\n remove,\n update,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, OAuth2Client } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useOAuth2Clients = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [clients, setClients] = useState<OAuth2Client[]>([]);\n const refresh = useCallback(() => {\n lynxClient.getOAuth2Clients().then(fetchedClients => {\n setError((err) => err !== undefined ? undefined : err);\n setClients(fetchedClients);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n refresh,\n clients,\n error,\n loading\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nimport { useOAuth2Client } from './useOAuth2Client';\n\nexport const useOAuth2Consent = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [requestedScopes, setRequestedScopes] = useState<string[]>([]);\n const [params] = useState(new URLSearchParams(window.location.search));\n const clientId = params.get('client_id') ?? '';\n const { client } = useOAuth2Client(clientId);\n\n const consent = useCallback((scope: string[]) => {\n const consentObject = Object.fromEntries(params);\n\n consentObject['scope'] = scope.join(' ');\n return lynxClient.consentOAuth2Authorization(consentObject);\n }, [lynxClient, params]);\n\n useEffect(() => {\n void Promise.resolve().then(() => setRequestedScopes(params.get('scope')?.split(' ') ?? []));\n }, [params]);\n\n return {\n consent,\n client,\n requestedScopes\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { Organization } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroOrganization = {\n address: {\n address: '',\n city: '',\n country: '',\n zip: '',\n },\n children: [],\n email: '',\n force_sms_login: false,\n meta: {},\n name: '',\n notes: '',\n parent: 0,\n password_valid_days: 0,\n phone: '',\n protected_meta: {},\n id: 0\n};\nexport const useOrganization = (organizationId: number | string) => {\n const oid = typeof organizationId === 'string' ? Number.parseInt(organizationId) : organizationId;\n if (isNaN(oid)) {\n throw new Error('invalid organizationId');\n }\n const [organization, setOrganization] = useState<Organization>({ ...zeroOrganization });\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<Error | undefined>();\n const { lynxClient } = useGlobalLynxClient();\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getOrganization(oid).then(org => {\n setError((err) => err !== undefined ? undefined : err);\n setOrganization(org);\n }).catch(e => {\n setError(e as Error);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, oid]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const update = useCallback(() => {\n return lynxClient.updateOrganization(organization);\n }, [lynxClient, organization]);\n\n const remove = useCallback(() => {\n return lynxClient.deleteOrganization(organization);\n }, [lynxClient, organization]);\n\n return {\n loading,\n organization,\n setOrganization,\n error,\n update,\n remove,\n refresh\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ErrorResponse, MinimalOrg, Organization } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useOrganizations = <T extends boolean = false>(minimal?: T) => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [organizations, setOrganizations] = useState<MinimalOrg<T>[]>([]);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getOrganizations(minimal === true).then(orgs => {\n setError((err) => err !== undefined ? undefined : err);\n setOrganizations(<MinimalOrg<T>[]>orgs);\n }).catch(e => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, minimal]);\n\n useEffect(() => {\n refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const create = useCallback((org: Organization) => {\n return lynxClient.createOrganization(org);\n }, [lynxClient]);\n\n const remove = useCallback((org: Organization) => {\n return lynxClient.deleteOrganization(org);\n }, [lynxClient]);\n\n return {\n loading,\n organizations,\n setOrganizations,\n error,\n create,\n remove,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { Role } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useRoles = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [roles, setRoles] = useState<Role[]>([]);\n const [error, setError] = useState<Error | undefined>();\n const [loading, setLoading] = useState(true);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getRoles().then((fetchedRoles) => {\n setError((err) => err !== undefined ? undefined : err);\n setRoles(fetchedRoles);\n }).catch((e) => {\n setError(e as Error);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient]);\n\n useEffect(() => {\n refresh();\n /* eslint-disable react-hooks/exhaustive-deps */\n }, []);\n\n return {\n loading,\n error,\n roles,\n refresh\n };\n};\n","import { useCallback, useLayoutEffect, useState } from 'react';\n\nimport type { EmptyToken, ErrorResponse, Token } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nexport const useTokens = () => {\n const { lynxClient } = useGlobalLynxClient();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorResponse | undefined>();\n const [tokens, setTokens] = useState<Token[]>([]);\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getTokens().then((fetchedTokens) => {\n setError((err) => err !== undefined ? undefined : err);\n setTokens(fetchedTokens);\n }).catch((e) => {\n setError(e as ErrorResponse);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient]);\n\n const remove = useCallback((token: Token) => {\n return lynxClient.deleteToken(token);\n }, [lynxClient]);\n\n const create = useCallback((token: EmptyToken) => {\n return lynxClient.createToken(token);\n }, [lynxClient]);\n\n useLayoutEffect(() => {\n void Promise.resolve().then(refresh);\n }, [refresh]);\n\n return {\n tokens,\n remove,\n create,\n refresh,\n loading,\n error\n };\n};\n","import { useCallback, useState } from 'react';\n\nimport type { User } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\nconst zeroUser = {\n id: 0,\n address: {\n address: '',\n zip: '',\n city: '',\n country: ''\n },\n assigned_installations: [],\n email: '',\n expire_at: 0,\n first_name: '',\n last_name: '',\n mobile: '',\n note: '',\n organisations: [],\n password: '',\n role: 0,\n sms_login: false,\n protected_meta: {},\n meta: {},\n};\n\nexport const useUser = (userId: number | string) => {\n const id = typeof userId === 'string' ? Number.parseInt(userId) : userId;\n if (isNaN(id)) {\n throw new Error('invalid userId');\n }\n const [user, setUser] = useState<User>({ ...zeroUser });\n const [loading, setLoading] = useState<boolean>(true);\n const { lynxClient } = useGlobalLynxClient();\n const [error, setError] = useState<Error | undefined>();\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getUser(id).then((fetchedUser) => {\n setError((err) => err !== undefined ? undefined : err);\n setUser(fetchedUser);\n }).catch(e => {\n setError(e as Error);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, id]);\n\n const update = useCallback(() => {\n return lynxClient.updateUser(user);\n }, [lynxClient, user]);\n\n const remove = useCallback(() => {\n return lynxClient.deleteUser(user);\n }, [lynxClient, user]);\n\n return {\n loading,\n error,\n user,\n setUser,\n update,\n refresh,\n remove,\n };\n};\n","import { useCallback, useState } from 'react';\n\nimport type { Metadata, User } from '@iotopen/node-lynx';\n\nimport { useGlobalLynxClient } from '../Contexts';\n\n\n// TODO: implement organization filter\nexport const useUsers = (filter?: Metadata) => {\n const [users, setUsers] = useState<User[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | undefined>();\n const { lynxClient } = useGlobalLynxClient();\n\n const refresh = useCallback(() => {\n setLoading(true);\n lynxClient.getUsers(filter).then((fetchedUsers) => {\n setError((err) => err !== undefined ? undefined : err);\n setUsers(fetchedUsers);\n }).catch((e) => {\n setError(e as Error);\n }).finally(() => {\n setLoading(false);\n });\n }, [lynxClient, filter]);\n\n return {\n users,\n setUsers,\n refresh,\n loading,\n error\n };\n};\n"],"names":["defaultLynxClientContext","LynxClient","_url","_apiKey","_bearer","LynxClientContext","createContext","LynxClientProvider","children","url","apiKey","bearer","client","setClient","useState","newClient","useCallback","newUrl","newApiKey","newBearer","contextValue","useMemo","useGlobalLynxClient","useContext","defaultUserContext","UserContext","UserProvider","user","setUser","permissions","setPermissions","loading","setLoading","error","setError","lynxClient","useLayoutEffect","me","perms","u","p","err","e","useGlobalUser","useGlobalPermissions","LynxProvider","apiURL","jsx","usePermissionsCheckAll","currentPermissions","permission","usePermissionsCheckAny","useConfiguredEdgeApps","installationId","id","apps","setApps","refresh","fetchedApps","zeroDevice","useDevice","deviceId","iid","dev","setDev","fn","update","setType","t","remove","useDeviceMeta","devId","create","key","meta","overrideDevId","silent","createMissing","useDevices","filter","devices","setDevices","refreshCall","res","removeFn","devs","last","rest","settled","createFn","args","zeroEdgeApp","useEdgeApp","appId","app","setApp","fetchedApp","useEdgeApps","useEdgeAppVersions","untagged","versions","setVersions","fetchedVersions","nameVersion","name","hash","zeroFunction","useFunction","functionId","func","setFunc","useFunctionMeta","fnId","funId","useFunctions","functions","setFunctions","fns","f","useIDTokenAlgorithms","algs","setAlgs","useEffect","zeroInstallation","useInstallation","installation","setInstallation","inst","useInstallationInfo","assignedOnly","installations","setInstallations","useInstallations","assertError","usePahoMQTTClient","uri","handlers","connectionOptions","clientId","uuid","useRef","Paho","opts","callbacks","reconnectTimer","connected","setConnected","c","rct","o","cbs","reconnect","host","sub","topic","qos","resolve","pub","payload","retained","sendPayload","unsub","isEq","a","b","i","unsubscribe","subs","subscribe","useSimpleMQTT","username","password","bindings","exactBindings","onMessage","msg","tmp","cb","binds","options","s","bind","binder","re","unbind","newBinds","bindExact","unbindExact","useMQTT","baseURLObj","protocol","hostname","port","wsURL","useLiveInstallation","mqtt","fnRefresh","devRefresh","setSubs","useLiveInstallationId","useMeta","obj","deps","metaList","setMetaList","newList","value","compile","add","idx","_","x","setKey","setValue","setProtected","useMultiLiveInstallation","clientIdMap","setClientIdMap","installationMap","setInstallationMap","functionMap","setFunctionMap","deviceMap","setDeviceMap","toClientId","toInstallationId","newInstallationMap","newClientIdMap","newTopics","done","fnFetchers","devFetchers","newDeviceMap","newFunctionMap","reject","fnDone","devDone","fnsResult","result","devsResult","cid","useNewDevice","template","newDevice","setNewDevice","useNewFunction","newFunction","setNewFunction","useNewInstallation","organizationId","oid","newInstallation","setNewInstallation","zeroEmptyNotificationMessage","useNewNotificationMessage","newNotificationMessage","setNewNotificationMessage","zeroEmptyNotificationOutput","useNewNotificationOutput","newNotificationOutput","setNewNotificationOutput","useNewOAuth2Client","zero","setName","setScope","scopes","setIconURI","setTosURI","setPolicyURI","setRedirectURIs","uris","zeroEmptyOrganization","useNewOrganization","parentId","pid","newOrganization","setNewOrganization","zeroEmptyUser","useNewUser","newUser","setNewUser","zeroNotificationMessage","useNotificationMessage","notificationId","message","setMessage","useNotificationMessages","notificationMessages","setNotificationMessages","zeroNotificationOutput","useNotificationOutput","output","setOutput","zeroExecutor","useNotificationOutputExecutor","executorId","outputExecutor","setOutputExecutor","useNotificationOutputExecutors","notificationExecutors","setNotificationExecutors","useNotificationOutputs","notificationOutputs","setNotificationOutputs","useOAuth2Client","fetchedClient","useOAuth2Clients","clients","setClients","fetchedClients","useOAuth2Consent","requestedScopes","setRequestedScopes","params","consent","scope","consentObject","zeroOrganization","useOrganization","organization","setOrganization","org","useOrganizations","minimal","organizations","setOrganizations","orgs","useRoles","roles","setRoles","fetchedRoles","useTokens","tokens","setTokens","fetchedTokens","token","zeroUser","useUser","userId","fetchedUser","useUsers","users","setUsers","fetchedUsers"],"mappings":"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"}
|