import {z} from 'zod' export type CreateApiV1MacExtractArgs = {body: {text: string, api_key?: string | undefined}}; export type CreateApiV1MacExtractOptions = {baseUrl?: string | undefined, apiKeyHeader?: string | undefined, fetch?: typeof fetch | undefined}; export const deviceCategory = z.enum(["computer", "smartphone", "tablet", "router", "switch", "wireless_access_point", "firewall", "server", "storage", "printer", "camera", "smart_tv", "media_device", "gaming_console", "iot", "embedded_device", "industrial", "medical", "automotive", "virtual_machine", "container", "network_interface", "consumer_electronics", "unknown"]); export const confidenceNoneLowMediumHigh = z.enum(["none", "low", "medium", "high"]); export const batchItem = z.object({mac: z.string(), valid: z.boolean(), oui: z.string(), organization: z.string().nullable().optional(), vendor_address: z.string().nullable().optional(), country: z.string().nullable().optional(), block_type: z.enum(["MA-L", "MA-M", "MA-S", "IAB", "CID", "null"]).nullable().optional(), address_capacity: z.number().int().nullable().optional(), range_start: z.string().nullable().optional(), range_end: z.string().nullable().optional(), registered: z.boolean(), transmission_type: z.enum(["unicast", "multicast", "broadcast"]), administration_type: z.enum(["universally_administered", "locally_administered"]), locally_administered: z.boolean(), slap_quadrant: z.enum(["AAI", "ELI", "reserved", "SAI", "null"]).nullable().optional(), eui64: z.string().nullable().optional(), ipv6_link_local: z.string().nullable().optional(), potentially_randomized: z.boolean(), randomization_confidence: z.enum(["none", "possible", "likely", "unlikely"]), vendor_lookup_reliable: z.boolean(), is_zero: z.boolean(), is_broadcast: z.boolean(), explanation: z.string(), is_private: z.boolean(), matched_prefix: z.string().nullable().optional(), prefix_length: z.number().int().nullable().optional(), registry: z.object({source: z.literal("IEEE").optional(), record_type: z.enum(["MA-L", "MA-M", "MA-S", "IAB", "CID"]).optional(), record_updated_at: z.string().nullable().optional(), database_synced_at: z.string().nullable().optional()}).nullable().optional(), device: z.object({category: deviceCategory.optional(), possible_categories: z.array(deviceCategory).optional(), confidence: confidenceNoneLowMediumHigh.optional(), inference_source: z.enum(["vendor_profile", "null"]).nullable().optional(), exact_model_known: z.literal(false).optional()}), virtualization: z.object({detected: z.boolean().optional(), platform: z.string().nullable().optional(), confidence: z.enum(["none", "low", "high", "exact"]).optional(), signals: z.array(z.string()).optional()}), special_use: z.object({detected: z.boolean().optional(), type: z.string().nullable().optional(), protocol: z.string().nullable().optional(), name: z.string().nullable().optional(), source: z.string().nullable().optional(), confidence: z.enum(["none", "high", "exact"]).optional()}), vendor_location: z.object({raw: z.string().nullable().optional(), address_line: z.string().nullable().optional(), city: z.string().nullable().optional(), region: z.string().nullable().optional(), postal_code: z.string().nullable().optional(), country_code: z.string().nullable().optional(), country_name: z.string().nullable().optional(), parse_confidence: z.enum(["none", "low", "medium"]).optional()}), randomization: z.object({potentially_randomized: z.boolean().optional(), confidence: z.enum(["none", "possible", "likely", "unlikely"]).optional(), signals: z.array(z.string()).optional(), alternative_explanations: z.array(z.string()).optional()}), local_vendor_derivation: z.object({detected: z.boolean().optional(), method: z.enum(["", "virtualization_prefix", "ul_bit_clear"]).optional(), methods_tried: z.array(z.enum(["virtualization_prefix", "ul_bit_clear"])).optional(), universal_mac: z.string().nullable().optional(), confidence: z.enum(["none", "low", "medium", "high"]).optional(), likelihood_ratio: z.number().nullable().optional(), organization: z.string().nullable().optional(), country: z.string().nullable().optional(), matched_prefix: z.string().nullable().optional(), block_type: z.enum(["MA-L", "MA-M", "MA-S", "IAB", "CID", "null"]).nullable().optional(), registry: z.enum(["oui", "convention", "null"]).nullable().optional(), vendor_class: z.string().nullable().optional(), lookup_url: z.string().nullable().optional(), device: z.object({category: deviceCategory.optional(), possible_categories: z.array(deviceCategory).optional(), confidence: confidenceNoneLowMediumHigh.optional(), inference_source: z.enum(["vendor_profile", "null"]).nullable().optional(), exact_model_known: z.literal(false).optional()}).nullable().optional(), signals: z.array(z.string()).optional(), signal_details: z.array(z.object({code: z.string().optional(), detail: z.string().optional()})).optional()}), assignment: z.object({registered_at: z.string().nullable().optional(), first_seen_at: z.string().nullable().optional(), last_changed_at: z.string().nullable().optional(), withdrawn_at: z.string().nullable().optional(), withdrawn_date_unknown: z.boolean().optional()}).nullable().optional(), vendor: z.object({id: z.string().optional(), registered_name: z.string().optional(), canonical_name: z.string().optional(), slug: z.string().optional(), block_count: z.number().int().optional(), lookup_url: z.string().optional()}).nullable().optional(), meta: z.object({request_id: z.string().optional(), api_version: z.literal("v1").optional(), database_version: z.string().nullable().optional(), processed_at: z.string().optional(), cached: z.boolean().optional()}), input: z.string().optional(), error: z.string().optional()}); export const createApiV1MacExtractResponse = z.object({count: z.number().int().optional(), truncated: z.boolean().optional(), results: z.array(batchItem).optional()}); 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 }; /** * Find and look up every MAC address in a block of free-form text * * POST /v1/mac/extract * * Also accepts auth: apiKeyQuery */ export const createApiV1MacExtract = async (args: CreateApiV1MacExtractArgs, options?: CreateApiV1MacExtractOptions) => { const {baseUrl = "https://api.macadress.com", fetch: fetchFn = fetch, apiKeyHeader} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (apiKeyHeader !== undefined) headers.set('authorization', `Bearer ${apiKeyHeader}`) const url = `${baseUrl.replace(/\/+$/, '')}/v1/mac/extract${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(createApiV1MacExtractResponse, await res.json()) };