import {z} from 'zod' export type SerialNumber = unknown; export type GetApiNetworkMonitoringV1ApsSerialNumberArgs = {'serial-number': SerialNumber}; export type GetApiNetworkMonitoringV1ApsSerialNumberOptions = {baseUrl?: string | undefined, OAuth2?: string | undefined, fetch?: typeof fetch | undefined}; export const serialNumberap = z.string().max(16); export const macAddressap = z.string().max(18); export const siteIDap = z.string().max(128); export const deviceNameap = z.string().max(256); export const iPv4Addressap = z.string().max(15); export const iPv6Addressap = z.string().max(39); export const modelap = z.string().max(32); export const firmwareVersionap = z.string().max(32); export const statusap = z.enum(["ONLINE", "OFFLINE"]); export const lastSeenAtap = z.string().max(128); export const uptimeInMillisap = z.number().gte(0).lte(9223372036854776000); export const roleap = z.string().max(16); export const deploymentap = z.string().max(16); export const subnetMask = z.string().max(15); export const meshRole = z.string().max(32); export const currentUplinkInUse = z.string().max(64); export const clientCount = z.number().int().gte(0); export const accessPointStats = z.object({cpuUtilization: z.number().gte(0).lte(100).optional(), memoryUtilization: z.number().gte(0).lte(100).optional(), clientCount: clientCount.optional()}); export const bandwidth = z.string().max(32); export const channel = z.number().int().gte(1).lte(500); export const power = z.string().max(16); export const radioType = z.string().max(16); export const accessPointRadio = z.object({macAddress: z.string().max(18), band: z.string().max(16), status: z.enum(["UP", "DOWN", "DISABLED"]).max(10).optional(), radioNumber: z.number().int().gte(0).lte(10), mode: z.string().max(32).optional(), antenna: z.enum(["Internal", "External"]).max(15).optional(), spatialStream: z.string().max(15).optional(), bandwidth: bandwidth.optional(), channel: channel.optional(), power: power.optional(), radioType: radioType.optional(), radioStats: z.object({channelUtilization: z.number().gte(0).lte(100).optional(), noiseFloor: z.number().int().optional()}).optional()}); export const portMacAddress = z.string().max(18); export const portName = z.string().max(16); export const portIndex = z.string().max(1); export const portStatus = z.enum(["UP", "DOWN", "DISABLED"]).max(16); export const vlanMode = z.string().max(16); export const allowedVlan = z.string().max(16); export const nativeVlan = z.string().max(16); export const accessVlan = z.string().max(16); export const speed = z.string().max(16); export const duplex = z.string().max(64); export const connector = z.enum(["USB", "RJ45"]).max(16); export const isUplink = z.boolean(); export const accessPointPort = z.object({macAddress: portMacAddress, name: portName, portIndex: portIndex.optional(), portStatus: portStatus.optional(), vlanMode: vlanMode.optional(), allowedVlan: allowedVlan.optional(), nativeVlan: nativeVlan.optional(), accessVlan: accessVlan.optional(), speed: speed.optional(), duplex: duplex.optional(), connector: connector.optional(), isUplink: isUplink.optional()}); export const wlanName = z.string().max(32); export const securityLevel = z.enum(["Enterprise", "Personal", "Open", "Captive Portal"]).max(32); export const security = z.string(); export const wlanBand = z.string(); export const wlanStatus = z.enum(["ENABLED", "DISABLED"]); export const wlanVlan = z.string(); export const wLANIdentifier = z.string().max(36); export const typeap = z.string().max(36); export const wlanInfo = z.object({wlanName: wlanName, securityLevel: securityLevel, security: security.optional(), band: wlanBand.optional(), status: wlanStatus.optional(), vlan: wlanVlan.optional(), id: wLANIdentifier, type: typeap}); export const iDap = z.string().max(36); export const accessPointResponse = z.object({serialNumber: serialNumberap, macAddress: macAddressap, siteId: siteIDap, deviceName: deviceNameap, ipv4: iPv4Addressap.optional(), ipv6: iPv6Addressap.optional(), model: modelap.optional(), firmwareVersion: firmwareVersionap.optional(), status: statusap.optional(), lastSeenAt: lastSeenAtap.optional(), uptimeInMillis: uptimeInMillisap.optional(), lastRebootReason: z.string().max(256).optional(), manufacturer: z.string().max(32).optional(), negotiatedPower: z.enum(["802.3bt", "802.3af", "802.3at", "DC power", "-"]).max(32).optional(), role: roleap.optional(), deployment: deploymentap.optional(), bandSelection: z.string().max(25).optional(), publicIpv4: z.string().max(15).optional(), countryCode: z.string().max(32).optional(), mode: z.string().max(18).optional(), defaultGateway: z.string().max(64).optional(), subnetMask: subnetMask.optional(), meshRole: meshRole.optional(), currentUplinkInUse: currentUplinkInUse.optional(), notes: z.string().max(512).optional(), apStats: accessPointStats.optional(), radios: z.array(accessPointRadio), ports: z.array(accessPointPort), modem: z.object({manufacturer: z.string().max(64).optional(), simState: z.enum(["SIM_READY", "SIM_NOT_READY", "DISABLE", "SIM_ABSENT", "OTHER_STATE"]).max(32).optional(), status: z.enum(["CONNECTED", "DISCONNECTED"]).max(16).optional(), state: z.enum(["CONNECTED", "DISCONNECTED", "IN_STANDBY", "SIM_NOT_READY", "OTHER_STATE"]).max(16).optional(), model: z.string().max(32).optional(), imei: z.string().max(32).optional(), imsi: z.string().max(32).optional(), iccid: z.string().max(32).optional(), firmwareVersion: z.string().max(32).optional(), accessTechnology: z.string().max(32).optional(), bandwidth: z.string().max(32).optional(), band: z.string().max(32).optional()}), wlans: z.array(wlanInfo).optional(), id: iDap, type: typeap}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get an Access Point details * * GET /network-monitoring/v1/aps/{serial-number} */ export const getApiNetworkMonitoringV1ApsSerialNumber = async (args: GetApiNetworkMonitoringV1ApsSerialNumberArgs, options?: GetApiNetworkMonitoringV1ApsSerialNumberOptions) => { const {baseUrl = "https://sso.common.cloud.hpe.com", fetch: fetchFn = fetch, OAuth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (OAuth2 !== undefined) headers.set('authorization', `Bearer ${OAuth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/network-monitoring/v1/aps/${encodeURIComponent(String(args['serial-number']))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(accessPointResponse, await res.json()) };