@ambulancewa/linxio-js 2.23.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/response.ts","../src/params.ts","../src/http.ts","../src/realtime.ts","../src/result.ts","../src/services/base.service.ts","../src/services/auth.service.ts","../src/services/cameras.service.ts","../src/pagination.ts","../src/services/clients.service.ts","../src/services/devices.service.ts","../src/services/drivers.service.ts","../src/services/fuel.service.ts","../src/services/geofences.service.ts","../src/services/metadata.service.ts","../src/services/reports.service.ts","../src/services/routes.service.ts","../src/services/sensors.service.ts","../src/services/users.service.ts","../src/services/vehicles.service.ts","../src/client.ts","../src/endpoint-discovery.ts","../src/endpoints.ts"],"sourcesContent":["export type { LinxioClientOptions } from \"./client\";\nexport { createClient, LinxioClient } from \"./client\";\nexport * from \"./endpoint-discovery\";\nexport * from \"./endpoints\";\nexport * from \"./errors\";\nexport * from \"./http\";\nexport * from \"./pagination\";\nexport * from \"./realtime\";\nexport * from \"./result\";\nexport * from \"./services\";\nexport * from \"./types\";\n","/** Context attached to SDK errors. */\nexport type LinxioErrorContext = {\n cause?: unknown;\n method?: string;\n path?: string;\n requestId?: string;\n};\n\n/** Base class for all SDK-defined errors. */\nexport class LinxioError extends Error {\n readonly cause?: unknown;\n readonly method?: string;\n readonly path?: string;\n readonly requestId?: string;\n\n constructor(message: string, context: LinxioErrorContext = {}) {\n super(message);\n this.name = \"LinxioError\";\n this.cause = context.cause;\n this.method = context.method;\n this.path = context.path;\n this.requestId = context.requestId;\n }\n}\n\n/** Thrown when the SDK is missing required runtime configuration. */\nexport class LinxioConfigurationError extends LinxioError {\n constructor(message: string, context: LinxioErrorContext = {}) {\n super(message, context);\n this.name = \"LinxioConfigurationError\";\n }\n}\n\n/** Thrown when a request fails before Linxio returns an HTTP response. */\nexport class LinxioNetworkError extends LinxioError {\n constructor(message: string, context: LinxioErrorContext = {}) {\n super(message, context);\n this.name = \"LinxioNetworkError\";\n }\n}\n\n/** Thrown when a request exceeds its configured timeout. */\nexport class LinxioTimeoutError extends LinxioNetworkError {\n constructor(message: string, context: LinxioErrorContext = {}) {\n super(message, context);\n this.name = \"LinxioTimeoutError\";\n }\n}\n\n/** Context attached to {@link LinxioApiError}. */\nexport type LinxioApiErrorContext = LinxioErrorContext & {\n body?: unknown;\n headers?: Headers;\n status: number;\n statusText?: string;\n};\n\n/**\n * Thrown when Linxio returns a non-2xx HTTP response.\n *\n * Inspect `status`, `body`, `requestId`, `method`, and `path` for diagnostics.\n */\nexport class LinxioApiError extends LinxioError {\n readonly body?: unknown;\n readonly headers?: Headers;\n readonly status: number;\n readonly statusText?: string;\n\n constructor(message: string, context: LinxioApiErrorContext) {\n super(message, context);\n this.name = \"LinxioApiError\";\n this.body = context.body;\n this.headers = context.headers;\n this.status = context.status;\n this.statusText = context.statusText;\n }\n\n get isAuthenticationError() {\n return this.status === 401 || this.status === 403;\n }\n\n get isRateLimitError() {\n return this.status === 429;\n }\n\n get isValidationError() {\n return this.status === 422 || this.status === 400;\n }\n}\n\n/** Thrown for SDK-side authentication failures before an API response exists. */\nexport class LinxioAuthenticationError extends LinxioError {\n constructor(message: string, context: LinxioErrorContext = {}) {\n super(message, context);\n this.name = \"LinxioAuthenticationError\";\n }\n}\n\n/** Thrown when client-side validation fails. */\nexport class LinxioValidationError extends LinxioError {\n readonly issues?: unknown;\n\n constructor(\n message: string,\n context: LinxioErrorContext & { issues?: unknown } = {},\n ) {\n super(message, context);\n this.name = \"LinxioValidationError\";\n this.issues = context.issues;\n }\n}\n\n/** Thrown by the realtime Socket.IO client. */\nexport class LinxioRealtimeError extends LinxioError {\n constructor(message: string, context: LinxioErrorContext = {}) {\n super(message, context);\n this.name = \"LinxioRealtimeError\";\n }\n}\n","const envelopeKeys = new Set([\n \"additionalFields\",\n \"aggregations\",\n \"data\",\n \"limit\",\n \"links\",\n \"meta\",\n \"page\",\n \"result\",\n \"total\",\n]);\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport function unwrapLinxioServiceData<TData>(value: unknown): TData {\n const payload = unwrapResultEnvelope(value);\n\n if (!isRecord(payload)) {\n return payload as TData;\n }\n\n if (isDataEnvelope(payload)) {\n return payload.data as TData;\n }\n\n const singletonArray = getSingletonArrayPayload(payload);\n if (singletonArray) {\n return singletonArray as TData;\n }\n\n return payload as TData;\n}\n\nexport function extractPageEnvelopeSource(value: unknown): UnknownRecord {\n const root = isRecord(value) ? value : {};\n const result = isRecord(root.result) ? root.result : undefined;\n\n return result ?? root;\n}\n\nexport function extractPageData<TData>(source: UnknownRecord): TData[] {\n if (Array.isArray(source.data)) {\n return source.data as TData[];\n }\n\n return (getSingletonArrayPayload(source) as TData[] | undefined) ?? [];\n}\n\nfunction unwrapResultEnvelope(value: unknown): unknown {\n if (!isRecord(value) || !Object.hasOwn(value, \"result\")) {\n return value;\n }\n\n return value.result;\n}\n\nfunction isDataEnvelope(value: UnknownRecord): value is UnknownRecord & {\n data: unknown;\n} {\n return (\n Object.hasOwn(value, \"data\") &&\n Object.keys(value).every((key) => envelopeKeys.has(key))\n );\n}\n\nfunction getSingletonArrayPayload(value: UnknownRecord): unknown[] | undefined {\n const arrayEntries = Object.entries(value).filter(\n ([key, entry]) => !envelopeKeys.has(key) && Array.isArray(entry),\n );\n\n return arrayEntries.length === 1\n ? (arrayEntries[0]?.[1] as unknown[])\n : undefined;\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { extractPageData, extractPageEnvelopeSource } from \"./response\";\nimport type {\n FieldSelector,\n LinxioPage,\n LinxioPageEnvelope,\n LinxioPaginationMeta,\n QueryParams,\n QueryValue,\n} from \"./types/common\";\n\nexport function normalisePath(path: string): string {\n if (/^https?:\\/\\//i.test(path)) {\n return path;\n }\n\n return path.startsWith(\"/\") ? path : `/${path}`;\n}\n\nexport function mergeParams(\n params?: QueryParams,\n fields?: FieldSelector<string>,\n): QueryParams {\n const merged: QueryParams = { ...(params ?? {}) };\n delete merged.fields;\n\n if (fields?.length) {\n merged[\"fields[]\"] = [...fields];\n }\n\n return merged;\n}\n\nexport function appendQueryParams(url: URL, params?: QueryParams): URL {\n if (!params) {\n return url;\n }\n\n for (const [key, value] of Object.entries(params)) {\n appendQueryParam(url, key, value);\n }\n\n return url;\n}\n\nfunction appendQueryParam(url: URL, key: string, value: QueryValue): void {\n if (value === null || value === undefined) {\n return;\n }\n\n if (Array.isArray(value)) {\n const arrayKey = key.endsWith(\"[]\") ? key : `${key}[]`;\n for (const item of value) {\n url.searchParams.append(arrayKey, String(item));\n }\n return;\n }\n\n url.searchParams.append(\n key,\n value instanceof Date ? value.toISOString() : String(value),\n );\n}\n\nexport function toPage<TData>(\n envelope: LinxioPageEnvelope<TData>,\n): LinxioPage<TData> {\n const source = extractPageEnvelopeSource(envelope);\n const sourceMeta = toPaginationMeta(source.meta);\n const rootMeta = toPaginationMeta(envelope.meta);\n const meta = {\n limit: Number(\n source.limit ??\n sourceMeta.limit ??\n envelope.limit ??\n rootMeta.limit ??\n 0,\n ),\n page: Number(\n source.page ??\n sourceMeta.page ??\n envelope.page ??\n rootMeta.page ??\n 1,\n ),\n total: Number(\n source.total ??\n sourceMeta.total ??\n envelope.total ??\n rootMeta.total ??\n 0,\n ),\n };\n\n return {\n additionalFields:\n (source.additionalFields as Record<string, unknown> | undefined) ??\n envelope.additionalFields,\n aggregations: source.aggregations ?? envelope.aggregations,\n data: extractPageData<TData>(source),\n ...meta,\n meta,\n };\n}\n\nfunction toPaginationMeta(value: unknown): Partial<LinxioPaginationMeta> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Partial<LinxioPaginationMeta>)\n : {};\n}\n\nexport function stripUndefined<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as T;\n}\n","import {\n LinxioApiError,\n LinxioConfigurationError,\n LinxioNetworkError,\n LinxioTimeoutError,\n} from \"./errors\";\nimport { appendQueryParams, normalisePath } from \"./params\";\nimport type { JsonValue, QueryParams } from \"./types/common\";\n\n/** Fetch-compatible function used by the SDK HTTP layer. */\nexport type FetchLike = (\n input: RequestInfo | URL,\n init?: RequestInit,\n) => Promise<Response>;\n\n/** HTTP methods accepted by {@link HttpClient.request}. */\nexport type HttpMethod =\n | \"DELETE\"\n | \"GET\"\n | \"HEAD\"\n | \"OPTIONS\"\n | \"PATCH\"\n | \"POST\"\n | \"PUT\";\n\n/** Response parser to use for a request. Defaults to JSON. */\nexport type ResponseType = \"arrayBuffer\" | \"blob\" | \"json\" | \"raw\" | \"text\";\n\n/** Retry policy for Linxio requests. */\nexport type RetryOptions = {\n /** Initial backoff delay in milliseconds. Set to `0` in tests. */\n delayMs?: number;\n /** Maximum exponential backoff delay. */\n maxDelayMs?: number;\n /** Retry POST/PATCH/PUT/DELETE requests. Defaults to false. */\n retryUnsafeMethods?: boolean;\n /** Number of retries after the first attempt. Defaults to 3. */\n retries?: number;\n};\n\n/** Per-request options accepted by the low-level HTTP client. */\nexport type LinxioHttpRequestOptions = {\n /** Request body for mutation methods. Objects are JSON encoded. */\n body?: unknown;\n /** Additional request headers. */\n headers?: HeadersInit;\n /** Optional idempotency key for caller-managed retry safety. */\n idempotencyKey?: string;\n /** Query parameters to append to the request URL. */\n params?: QueryParams;\n /** Response parser override. */\n responseType?: ResponseType;\n /** Abort signal for caller-managed cancellation. */\n signal?: AbortSignal;\n /** Skip the bearer token for this request. */\n skipAuth?: boolean;\n /** Skip automatic refresh handling for this request. */\n skipAuthRefresh?: boolean;\n /** Override the client timeout for this request. */\n timeoutMs?: number;\n};\n\n/** Constructor configuration for {@link HttpClient}. */\nexport type LinxioHttpConfig = {\n /** REST API base URL. */\n baseUrl?: string;\n /** Fetch implementation. Defaults to `globalThis.fetch`. */\n fetch?: FetchLike;\n /** Refresh-token provider used for automatic 401 recovery. */\n getRefreshToken?: () => string | undefined;\n /** JWT provider used to set the Authorization header. */\n getToken?: () => string | undefined;\n /** Called when the SDK receives a fresh token from `/token/refresh`. */\n onSession?: (session: {\n expireAt?: string;\n refreshToken?: string;\n token?: string;\n }) => void;\n /** Retry policy for idempotent requests. */\n retry?: RetryOptions;\n /** Default timeout in milliseconds. */\n timeoutMs?: number;\n};\n\ntype RefreshResponse = {\n expireAt?: string;\n refreshToken?: string;\n token?: string;\n};\n\nconst DEFAULT_BASE_URL = \"https://api.linxio.com/api\";\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst IDEMPOTENT_METHODS = new Set<HttpMethod>([\"GET\", \"HEAD\", \"OPTIONS\"]);\n\n/**\n * Low-level fetch-based Linxio HTTP client.\n *\n * Domain services use this class internally. It is exported for advanced\n * scripts that need custom endpoints while retaining auth headers, timeouts,\n * idempotent retries, parsed API errors, and automatic token refresh.\n */\nexport class HttpClient {\n /** Normalized REST API base URL without a trailing slash. */\n readonly baseUrl: string;\n\n private readonly fetcher: FetchLike;\n private readonly getRefreshToken: () => string | undefined;\n private readonly getToken: () => string | undefined;\n private readonly onSession?: LinxioHttpConfig[\"onSession\"];\n private readonly retry: Required<RetryOptions>;\n private readonly timeoutMs: number;\n private refreshInFlight?: Promise<void>;\n\n constructor(config: LinxioHttpConfig = {}) {\n this.baseUrl = trimTrailingSlash(config.baseUrl ?? DEFAULT_BASE_URL);\n this.fetcher = config.fetch ?? getGlobalFetch();\n this.getToken = config.getToken ?? (() => undefined);\n this.getRefreshToken = config.getRefreshToken ?? (() => undefined);\n this.onSession = config.onSession;\n this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.retry = {\n delayMs: config.retry?.delayMs ?? 1_000,\n maxDelayMs: config.retry?.maxDelayMs ?? 8_000,\n retries: config.retry?.retries ?? 3,\n retryUnsafeMethods: config.retry?.retryUnsafeMethods ?? false,\n };\n }\n\n /** Send a GET request. */\n get<TResponse = unknown>(\n path: string,\n options: LinxioHttpRequestOptions = {},\n ): Promise<TResponse> {\n return this.request<TResponse>(\"GET\", path, options);\n }\n\n /** Send a POST request. */\n post<TResponse = unknown>(\n path: string,\n body?: unknown,\n options: LinxioHttpRequestOptions = {},\n ): Promise<TResponse> {\n return this.request<TResponse>(\"POST\", path, { ...options, body });\n }\n\n /** Send a PATCH request. */\n patch<TResponse = unknown>(\n path: string,\n body?: unknown,\n options: LinxioHttpRequestOptions = {},\n ): Promise<TResponse> {\n return this.request<TResponse>(\"PATCH\", path, { ...options, body });\n }\n\n /** Send a PUT request. */\n put<TResponse = unknown>(\n path: string,\n body?: unknown,\n options: LinxioHttpRequestOptions = {},\n ): Promise<TResponse> {\n return this.request<TResponse>(\"PUT\", path, { ...options, body });\n }\n\n /** Send a DELETE request. */\n delete<TResponse = unknown>(\n path: string,\n options: LinxioHttpRequestOptions = {},\n ): Promise<TResponse> {\n return this.request<TResponse>(\"DELETE\", path, options);\n }\n\n /** Send a request with an arbitrary HTTP method. */\n async request<TResponse = unknown>(\n method: HttpMethod,\n path: string,\n options: LinxioHttpRequestOptions = {},\n ): Promise<TResponse> {\n return this.requestWithRefresh<TResponse>(method, path, options, false);\n }\n\n /** Build the final request URL, including query parameters. */\n buildUrl(path: string, params?: QueryParams): URL {\n const normalisedPath = normalisePath(path);\n const url = /^https?:\\/\\//i.test(normalisedPath)\n ? new URL(normalisedPath)\n : new URL(`${this.baseUrl}${normalisedPath}`);\n\n return appendQueryParams(url, params);\n }\n\n private async requestWithRefresh<TResponse>(\n method: HttpMethod,\n path: string,\n options: LinxioHttpRequestOptions,\n hasRefreshed: boolean,\n ): Promise<TResponse> {\n const response = await this.sendWithRetries(method, path, options);\n\n if (\n response.status === 401 &&\n !hasRefreshed &&\n !options.skipAuth &&\n !options.skipAuthRefresh &&\n this.getRefreshToken() &&\n !isRefreshOrLoginPath(path)\n ) {\n await this.refreshSession();\n return this.requestWithRefresh<TResponse>(\n method,\n path,\n options,\n true,\n );\n }\n\n return this.parseResponse<TResponse>(\n response,\n method,\n path,\n options.responseType,\n );\n }\n\n private async refreshSession(): Promise<void> {\n if (this.refreshInFlight) {\n return this.refreshInFlight;\n }\n\n const refreshToken = this.getRefreshToken();\n if (!refreshToken) {\n return;\n }\n\n this.refreshInFlight = (async () => {\n const response = await this.sendOnce(\"POST\", \"/token/refresh\", {\n body: { refreshToken },\n skipAuthRefresh: true,\n });\n const parsed = await this.parseResponse<RefreshResponse>(\n response,\n \"POST\",\n \"/token/refresh\",\n \"json\",\n );\n\n if (!parsed.token) {\n throw new LinxioApiError(\n \"Linxio token refresh did not return a token.\",\n {\n body: parsed,\n method: \"POST\",\n path: \"/api/token/refresh\",\n status: response.status,\n statusText: response.statusText,\n },\n );\n }\n\n this.onSession?.({\n expireAt: parsed.expireAt,\n refreshToken: parsed.refreshToken ?? refreshToken,\n token: parsed.token,\n });\n })();\n\n try {\n await this.refreshInFlight;\n } finally {\n this.refreshInFlight = undefined;\n }\n }\n\n private async sendWithRetries(\n method: HttpMethod,\n path: string,\n options: LinxioHttpRequestOptions,\n ): Promise<Response> {\n const shouldRetry = this.shouldRetryMethod(method);\n const maxAttempts = shouldRetry ? this.retry.retries + 1 : 1;\n let lastNetworkError: unknown;\n\n for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n try {\n const response = await this.sendOnce(method, path, options);\n if (\n attempt < maxAttempts - 1 &&\n shouldRetry &&\n isRetriableStatus(response.status)\n ) {\n await sleep(this.delayForAttempt(attempt), options.signal);\n continue;\n }\n\n return response;\n } catch (error) {\n lastNetworkError = error;\n if (error instanceof LinxioTimeoutError) {\n throw error;\n }\n\n if (attempt >= maxAttempts - 1 || !shouldRetry) {\n break;\n }\n\n await sleep(this.delayForAttempt(attempt), options.signal);\n }\n }\n\n throw new LinxioNetworkError(\n \"Linxio request failed before a response was received.\",\n {\n cause: lastNetworkError,\n method,\n path: this.pathForError(path),\n },\n );\n }\n\n private async sendOnce(\n method: HttpMethod,\n path: string,\n options: LinxioHttpRequestOptions,\n ): Promise<Response> {\n const timeoutMs = options.timeoutMs ?? this.timeoutMs;\n const timeoutController = new AbortController();\n const timeout = setTimeout(() => timeoutController.abort(), timeoutMs);\n const signal = combineSignals(options.signal, timeoutController.signal);\n\n try {\n return await this.fetcher(this.buildUrl(path, options.params), {\n body: prepareBody(method, options.body),\n headers: this.prepareHeaders(options),\n method,\n signal,\n });\n } catch (error) {\n if (timeoutController.signal.aborted) {\n throw new LinxioTimeoutError(\n `Linxio request timed out after ${timeoutMs}ms.`,\n {\n cause: error,\n method,\n path: this.pathForError(path),\n },\n );\n }\n\n throw error;\n } finally {\n clearTimeout(timeout);\n }\n }\n\n private prepareHeaders(options: LinxioHttpRequestOptions): Headers {\n const headers = new Headers(options.headers);\n\n if (!options.skipAuth) {\n const token = this.getToken();\n if (token) {\n headers.set(\"Authorization\", `Bearer ${token}`);\n }\n }\n\n if (options.idempotencyKey) {\n headers.set(\"Idempotency-Key\", options.idempotencyKey);\n }\n\n if (options.body !== undefined && shouldUseJsonBody(options.body)) {\n headers.set(\"Content-Type\", \"application/json\");\n }\n\n if (!headers.has(\"Accept\")) {\n headers.set(\"Accept\", \"application/json\");\n }\n\n return headers;\n }\n\n private async parseResponse<TResponse>(\n response: Response,\n method: HttpMethod,\n path: string,\n responseType: ResponseType = \"json\",\n ): Promise<TResponse> {\n if (response.status === 204) {\n return undefined as TResponse;\n }\n\n if (!response.ok) {\n const body = await parseErrorBody(response);\n throw new LinxioApiError(errorMessage(response, body), {\n body,\n headers: response.headers,\n method,\n path: this.pathForError(path),\n requestId: response.headers.get(\"X-Request-Id\") ?? undefined,\n status: response.status,\n statusText: response.statusText,\n });\n }\n\n if (responseType === \"raw\") {\n return response as TResponse;\n }\n\n if (responseType === \"text\") {\n return (await response.text()) as TResponse;\n }\n\n if (responseType === \"blob\") {\n return (await response.blob()) as TResponse;\n }\n\n if (responseType === \"arrayBuffer\") {\n return (await response.arrayBuffer()) as TResponse;\n }\n\n const text = await response.text();\n if (!text) {\n return undefined as TResponse;\n }\n\n return JSON.parse(text) as TResponse;\n }\n\n private shouldRetryMethod(method: HttpMethod): boolean {\n return this.retry.retryUnsafeMethods || IDEMPOTENT_METHODS.has(method);\n }\n\n private delayForAttempt(attempt: number): number {\n if (this.retry.delayMs === 0) {\n return 0;\n }\n\n return Math.min(\n this.retry.delayMs * 2 ** attempt,\n this.retry.maxDelayMs,\n );\n }\n\n private pathForError(path: string): string {\n const url = this.buildUrl(path);\n return `${url.pathname}${url.search}`;\n }\n}\n\nfunction trimTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction getGlobalFetch(): FetchLike {\n if (typeof globalThis.fetch !== \"function\") {\n throw new LinxioConfigurationError(\n \"No fetch implementation is available. Pass `fetch` to createClient() or run on Node.js 20+.\",\n );\n }\n\n return globalThis.fetch.bind(globalThis);\n}\n\nfunction isRefreshOrLoginPath(path: string): boolean {\n return path === \"/login\" || path === \"/token/refresh\";\n}\n\nfunction isRetriableStatus(status: number): boolean {\n return status === 408 || status === 425 || status === 429 || status >= 500;\n}\n\nfunction prepareBody(method: HttpMethod, body: unknown): BodyInit | undefined {\n if (method === \"GET\" || method === \"HEAD\" || body === undefined) {\n return undefined;\n }\n\n if (!shouldUseJsonBody(body)) {\n return body as BodyInit;\n }\n\n return JSON.stringify(body satisfies JsonValue | unknown);\n}\n\nfunction shouldUseJsonBody(body: unknown): boolean {\n return !(\n typeof body === \"string\" ||\n body instanceof ArrayBuffer ||\n body instanceof Blob ||\n body instanceof FormData ||\n body instanceof URLSearchParams\n );\n}\n\nasync function parseErrorBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) {\n return undefined;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction errorMessage(response: Response, body: unknown): string {\n if (typeof body === \"object\" && body !== null) {\n const record = body as Record<string, unknown>;\n const message = record.message ?? record.error;\n if (typeof message === \"string\" && message.trim()) {\n return message;\n }\n }\n\n return `Linxio API request failed with ${response.status} ${response.statusText}`.trim();\n}\n\nfunction combineSignals(\n originalSignal: AbortSignal | undefined,\n timeoutSignal: AbortSignal,\n): AbortSignal {\n if (!originalSignal) {\n return timeoutSignal;\n }\n\n if (originalSignal.aborted) {\n return originalSignal;\n }\n\n const controller = new AbortController();\n const abort = () => controller.abort();\n\n originalSignal.addEventListener(\"abort\", abort, { once: true });\n timeoutSignal.addEventListener(\"abort\", abort, { once: true });\n\n return controller.signal;\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n if (ms === 0) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timeout);\n reject(new LinxioNetworkError(\"Linxio request was aborted.\"));\n },\n { once: true },\n );\n });\n}\n","import { io, type Socket } from \"socket.io-client\";\nimport { LinxioRealtimeError } from \"./errors\";\nimport type { LinxioId } from \"./types/common\";\nimport type {\n LinxioNotification,\n LinxioRealtimeNamespace,\n LinxioRealtimeSubscribeAck,\n LinxioTrackingPosition,\n} from \"./types/tracking\";\n\n/** Configuration for Linxio Socket.IO connections. */\nexport type RealtimeClientOptions = {\n /** Realtime host. Defaults to `https://track.linxio.com`. */\n baseUrl?: string;\n /** Token provider used when `connect()` is called without an explicit token. */\n getToken?: () => string | undefined;\n /** Socket.IO path. Linxio uses `/socket.io`. */\n path?: string;\n /** Maximum reconnection attempts before Socket.IO gives up. */\n reconnectionAttempts?: number;\n};\n\n/** Handler called when a realtime payload is received. */\nexport type RealtimeEventHandler<TPayload> = (payload: TPayload) => void;\n\n/** Function returned by realtime listeners to detach the handler. */\nexport type RealtimeUnsubscribe = () => void;\n\nconst DEFAULT_REALTIME_BASE_URL = \"https://track.linxio.com\";\n\n/**\n * Socket.IO client for Linxio live tracking and notifications.\n *\n * Linxio documents two namespaces: `coordinates` for live vehicle positions and\n * `notifications` for configured notification messages.\n */\nexport class RealtimeClient {\n private readonly baseUrl: string;\n private readonly getToken: () => string | undefined;\n private readonly path: string;\n private readonly reconnectionAttempts: number;\n private readonly sockets = new Map<LinxioRealtimeNamespace, Socket>();\n\n constructor(options: RealtimeClientOptions = {}) {\n this.baseUrl = (options.baseUrl ?? DEFAULT_REALTIME_BASE_URL).replace(\n /\\/+$/,\n \"\",\n );\n this.getToken = options.getToken ?? (() => undefined);\n this.path = options.path ?? \"/socket.io\";\n this.reconnectionAttempts = options.reconnectionAttempts ?? 10;\n }\n\n /** Connect to a Linxio realtime namespace and reuse existing sockets. */\n connect(\n namespace: LinxioRealtimeNamespace,\n token = this.getToken(),\n ): Socket {\n const existing = this.sockets.get(namespace);\n if (existing) {\n return existing;\n }\n\n if (!token) {\n throw new LinxioRealtimeError(\n \"A Linxio token is required before connecting to realtime sockets.\",\n );\n }\n\n const socket = io(`${this.baseUrl}/${namespace}`, {\n path: this.path,\n query: { token },\n reconnection: true,\n reconnectionAttempts: this.reconnectionAttempts,\n reconnectionDelay: 5_000,\n reconnectionDelayMax: 10_000,\n timeout: 20_000,\n transports: [\"websocket\"],\n });\n\n socket.on(\"error\", (error) => {\n if (error === \"AUTH_FAILED\") {\n socket.disconnect();\n }\n });\n\n this.sockets.set(namespace, socket);\n return socket;\n }\n\n /** Subscribe the current realtime socket to a set of vehicle IDs. */\n subscribe(\n vehicleIds: readonly LinxioId[],\n namespace: LinxioRealtimeNamespace = \"coordinates\",\n ): Promise<LinxioRealtimeSubscribeAck> {\n const socket = this.connect(namespace);\n return new Promise((resolve) => {\n socket.emit(\n \"subscribe\",\n { vehicleIds: vehicleIds.map(Number) },\n (ack: LinxioRealtimeSubscribeAck) => resolve(ack),\n );\n });\n }\n\n /**\n * Subscribe to live vehicle coordinates.\n *\n * The returned function removes event handlers. It does not disconnect the\n * socket, allowing other subscriptions to keep running.\n */\n onPosition(\n vehicleIds: readonly LinxioId[],\n handler: RealtimeEventHandler<LinxioTrackingPosition>,\n ): RealtimeUnsubscribe {\n const socket = this.connect(\"coordinates\");\n const subscribe = () => {\n socket.emit(\"subscribe\", { vehicleIds: vehicleIds.map(Number) });\n };\n\n socket.on(\"connect\", subscribe);\n socket.on(\"reconnect\", subscribe);\n socket.on(\"coordinates\", handler);\n\n if (socket.connected) {\n subscribe();\n }\n\n return () => {\n socket.off(\"connect\", subscribe);\n socket.off(\"reconnect\", subscribe);\n socket.off(\"coordinates\", handler);\n };\n }\n\n /** Listen for Linxio notification messages. */\n onNotification(\n handler: RealtimeEventHandler<LinxioNotification>,\n ): RealtimeUnsubscribe {\n const socket = this.connect(\"notifications\");\n socket.on(\"notification\", handler);\n socket.on(\"notifications\", handler);\n\n return () => {\n socket.off(\"notification\", handler);\n socket.off(\"notifications\", handler);\n };\n }\n\n /** Listen for a custom notification event type emitted by Linxio. */\n onNotificationType<TPayload = LinxioNotification>(\n type: string,\n handler: RealtimeEventHandler<TPayload>,\n ): RealtimeUnsubscribe {\n const socket = this.connect(\"notifications\");\n socket.on(type, handler);\n return () => socket.off(type, handler);\n }\n\n /** Disconnect one namespace or every active realtime socket. */\n disconnect(namespace?: LinxioRealtimeNamespace): void {\n if (namespace) {\n this.sockets.get(namespace)?.disconnect();\n this.sockets.delete(namespace);\n return;\n }\n\n for (const socket of this.sockets.values()) {\n socket.disconnect();\n }\n this.sockets.clear();\n }\n}\n","import { LinxioError } from \"./errors\";\nimport { unwrapLinxioServiceData } from \"./response\";\nimport type { LinxioPage, LinxioPaginationMeta } from \"./types/common\";\n\n/** Successful SDK operation result. */\nexport type LinxioSuccess<TData> = {\n /** Data returned by Linxio. */\n data: TData;\n /** Always `null` when the operation succeeds. */\n error: null;\n};\n\n/** Failed SDK operation result. */\nexport type LinxioFailure<TError extends LinxioError = LinxioError> = {\n /** Always `null` when the operation fails. */\n data: null;\n /** Typed SDK error with request context where available. */\n error: TError;\n};\n\n/** Standard result returned by SDK service methods. */\nexport type LinxioResult<TData, TError extends LinxioError = LinxioError> =\n | LinxioFailure<TError>\n | LinxioSuccess<TData>;\n\n/** Successful paginated SDK result. */\nexport type LinxioPageSuccess<TData> = LinxioPaginationMeta & {\n /** Additional fields returned by selected Linxio endpoints. */\n additionalFields?: Record<string, unknown>;\n /** Aggregation data returned by selected Linxio endpoints. */\n aggregations?: unknown;\n /** Records returned for the current page. */\n data: TData[];\n /** Always `null` when the operation succeeds. */\n error: null;\n /** Normalized pagination metadata. */\n meta: LinxioPaginationMeta;\n};\n\n/** Failed paginated SDK result. */\nexport type LinxioPageFailure<TError extends LinxioError = LinxioError> = {\n /** Always `null` when the operation fails. */\n data: null;\n /** Typed SDK error with request context where available. */\n error: TError;\n /** Page limit is unavailable when the request fails. */\n limit: null;\n /** Pagination metadata is unavailable when the request fails. */\n meta: null;\n /** Page number is unavailable when the request fails. */\n page: null;\n /** Total count is unavailable when the request fails. */\n total: null;\n};\n\n/** Paginated result returned by SDK list/report methods. */\nexport type LinxioPageResult<TData, TError extends LinxioError = LinxioError> =\n | LinxioPageFailure<TError>\n | LinxioPageSuccess<TData>;\n\n/** Create a successful result object. */\nexport function ok<TData>(data: TData): LinxioSuccess<TData> {\n return { data, error: null };\n}\n\n/** Create a failed result object from an unknown thrown value. */\nexport function fail(error: unknown): LinxioFailure<LinxioError> {\n return { data: null, error: toLinxioError(error) };\n}\n\n/** Convert a throwing promise factory into a standard SDK result. */\nexport async function toResult<TData>(\n operation: () => Promise<TData>,\n): Promise<LinxioResult<TData>> {\n try {\n return ok(unwrapLinxioServiceData<TData>(await operation()));\n } catch (error) {\n return fail(error);\n }\n}\n\n/** Create a successful paginated result object. */\nexport function pageOk<TData>(\n page: LinxioPage<TData>,\n): LinxioPageSuccess<TData> {\n return { ...page, error: null };\n}\n\n/** Create a failed paginated result object from an unknown thrown value. */\nexport function pageFail(error: unknown): LinxioPageFailure<LinxioError> {\n return {\n data: null,\n error: toLinxioError(error),\n limit: null,\n meta: null,\n page: null,\n total: null,\n };\n}\n\n/** Return `true` when a result contains a typed SDK error. */\nexport function isLinxioFailure(\n result: LinxioPageResult<unknown> | LinxioResult<unknown>,\n): result is LinxioFailure | LinxioPageFailure {\n return result.error !== null;\n}\n\n/** Return the data from a result or throw the contained SDK error. */\nexport function unwrapLinxioResult<TData>(result: LinxioResult<TData>): TData {\n if (result.error) {\n throw result.error;\n }\n\n return result.data;\n}\n\n/** Return the page result or throw the contained SDK error. */\nexport function unwrapLinxioPageResult<TData>(\n result: LinxioPageResult<TData>,\n): LinxioPageSuccess<TData> {\n if (result.error) {\n throw result.error;\n }\n\n return result;\n}\n\n/** Convert arbitrary thrown values into the SDK base error type. */\nexport function toLinxioError(error: unknown): LinxioError {\n if (error instanceof LinxioError) {\n return error;\n }\n\n if (error instanceof Error) {\n return new LinxioError(error.message, { cause: error });\n }\n\n return new LinxioError(\"Linxio SDK operation failed.\", { cause: error });\n}\n","import type { HttpClient, LinxioHttpRequestOptions } from \"../http\";\nimport { mergeParams, toPage } from \"../params\";\nimport type { LinxioPageResult, LinxioResult } from \"../result\";\nimport { pageFail, pageOk, toResult } from \"../result\";\nimport type {\n FieldSelector,\n LinxioPageEnvelope,\n ListParams,\n QueryParams,\n} from \"../types/common\";\n\nexport abstract class BaseService {\n constructor(protected readonly http: HttpClient) {}\n\n protected async getPage<TData, TField extends string = string>(\n path: string,\n params: ListParams<TField> = {},\n options: LinxioHttpRequestOptions = {},\n ): Promise<LinxioPageResult<TData>> {\n try {\n const response = await this.http.get<LinxioPageEnvelope<TData>>(\n path,\n {\n ...options,\n params: this.listParams(params),\n },\n );\n\n return pageOk(toPage(response));\n } catch (error) {\n return pageFail(error);\n }\n }\n\n protected result<TData>(\n operation: () => Promise<TData>,\n ): Promise<LinxioResult<TData>> {\n return toResult(operation);\n }\n\n protected listParams<TField extends string>(\n params: ListParams<TField> = {},\n ): QueryParams {\n const { fields, ...rest } = params;\n return mergeParams(rest, fields as FieldSelector<string> | undefined);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { LinxioResult } from \"../result\";\nimport type {\n LinxioCurrentUser,\n LinxioLoginRequest,\n LinxioLoginResponse,\n LinxioOtpVerificationRequest,\n LinxioSession,\n} from \"../types/auth\";\nimport type { FieldSelector } from \"../types/common\";\nimport { BaseService } from \"./base.service\";\n\n/** Authentication and session-related Linxio endpoints. */\nexport class AuthService extends BaseService {\n constructor(\n http: HttpClient,\n private readonly setSession: (session: LinxioSession) => void,\n ) {\n super(http);\n }\n\n /**\n * Log in with Linxio credentials.\n *\n * The returned JWT and refresh token are stored in the parent client so\n * subsequent requests are authenticated automatically.\n */\n async login(\n request: LinxioLoginRequest,\n ): Promise<LinxioResult<LinxioLoginResponse>> {\n const result = await this.result(() =>\n this.http.post<LinxioLoginResponse>(\"/login\", request, {\n skipAuth: true,\n skipAuthRefresh: true,\n }),\n );\n\n if (!result.error) {\n this.applySession(result.data);\n }\n\n return result;\n }\n\n /** Verify a one-time password when Linxio requires OTP for the account. */\n async verifyOtp(\n request: LinxioOtpVerificationRequest,\n ): Promise<LinxioResult<LinxioLoginResponse>> {\n const result = await this.result(() =>\n this.http.post<LinxioLoginResponse>(\"/login/otp\", request, {\n skipAuth: true,\n skipAuthRefresh: true,\n }),\n );\n\n if (!result.error) {\n this.applySession(result.data);\n }\n\n return result;\n }\n\n /** Refresh a JWT manually and update the client session. */\n async refresh(refreshToken: string): Promise<LinxioResult<LinxioSession>> {\n const result = await this.result(() =>\n this.http.post<LinxioLoginResponse>(\n \"/token/refresh\",\n { refreshToken },\n { skipAuthRefresh: true },\n ),\n );\n\n if (result.error) {\n return result;\n }\n\n const session = {\n expireAt: result.data.expireAt,\n refreshToken: result.data.refreshToken ?? refreshToken,\n token: result.data.token,\n };\n this.setSession(session);\n return { data: session, error: null };\n }\n\n /** Fetch the current authenticated Linxio user. */\n me(\n fields?: FieldSelector<string>,\n ): Promise<LinxioResult<LinxioCurrentUser>> {\n return this.result(() =>\n this.http.get(\"/me\", {\n params: fields?.length\n ? { \"fields[]\": [...fields] }\n : undefined,\n }),\n );\n }\n\n /** Log out the current Linxio session server-side. */\n logout(): Promise<LinxioResult<void>> {\n return this.result(() => this.http.post(\"/logout\", {}));\n }\n\n private applySession(response: LinxioLoginResponse): void {\n this.setSession({\n expireAt: response.expireAt,\n refreshToken: response.refreshToken,\n token: response.token,\n });\n }\n}\n","import type { LinxioPageResult, LinxioResult } from \"../result\";\nimport type { LinxioRecord, ListParams } from \"../types/common\";\nimport { BaseService } from \"./base.service\";\n\n/** Dash cam event endpoints discovered from the dashboard bundle. */\nexport class CamerasService extends BaseService {\n /** List camera events. */\n events(params: ListParams = {}): Promise<LinxioPageResult<LinxioRecord>> {\n return this.getPage(\"/devices/cameras/events\", params);\n }\n\n /** List camera event types. */\n eventTypes(): Promise<LinxioResult<LinxioRecord[]>> {\n return this.result(() =>\n this.http.get(\"/devices/cameras/events/types\"),\n );\n }\n}\n","import type { LinxioPageResult, LinxioResult } from \"./result\";\nimport { fail, ok, unwrapLinxioPageResult } from \"./result\";\nimport type { ListParams } from \"./types/common\";\n\n/**\n * Load every page from a Linxio paginated endpoint into a single result.\n *\n * Services expose domain-specific wrappers around this helper, but it is\n * exported for advanced users building custom endpoint integrations.\n */\nexport async function collectPages<TData, TParams extends ListParams>(\n loadPage: (params: TParams) => Promise<LinxioPageResult<TData>>,\n params: TParams = {} as TParams,\n): Promise<LinxioResult<TData[]>> {\n try {\n const data: TData[] = [];\n\n for await (const item of streamPages(loadPage, params)) {\n data.push(item);\n }\n\n return ok(data);\n } catch (error) {\n return fail(error);\n }\n}\n\n/**\n * Stream a Linxio paginated endpoint one item at a time.\n *\n * This helper throws the typed SDK error if any page fails. Use\n * {@link collectPages} when you prefer a `{ data, error }` result.\n */\nexport async function* streamPages<TData, TParams extends ListParams>(\n loadPage: (params: TParams) => Promise<LinxioPageResult<TData>>,\n params: TParams = {} as TParams,\n): AsyncGenerator<TData, void, undefined> {\n let page = Number(params.page ?? 1);\n const limit = Number(params.limit ?? 100);\n\n while (true) {\n const result = unwrapLinxioPageResult(\n await loadPage({ ...params, limit, page } as TParams),\n );\n\n for (const item of result.data) {\n yield item;\n }\n\n const seen = result.meta.page * result.meta.limit;\n if (result.data.length === 0 || seen >= result.meta.total) {\n return;\n }\n\n page += 1;\n }\n}\n","import { collectPages, streamPages } from \"../pagination\";\nimport type { LinxioPageResult, LinxioResult } from \"../result\";\nimport type {\n LinxioClientAccount,\n LinxioClientUserListParams,\n LinxioReseller,\n} from \"../types/clients\";\nimport type { LinxioId } from \"../types/common\";\nimport type { LinxioUser, LinxioUserPayload } from \"../types/users\";\nimport { BaseService } from \"./base.service\";\n\n/** Client account and client-user endpoints. */\nexport class ClientsService extends BaseService {\n /** List client accounts from the dashboard-derived endpoint. */\n list(\n params: LinxioClientUserListParams = {},\n ): Promise<LinxioPageResult<LinxioClientAccount>> {\n return this.getPage(\"/clients/json\", params);\n }\n\n /** Fetch one client account by ID. */\n get(clientId: LinxioId): Promise<LinxioResult<LinxioClientAccount>> {\n return this.result(() => this.http.get(`/clients/${clientId}`));\n }\n\n /** List users for a client account. */\n listUsers(\n clientId: LinxioId,\n params: LinxioClientUserListParams = {},\n ): Promise<LinxioPageResult<LinxioUser>> {\n return this.getPage(`/clients/${clientId}/users`, params);\n }\n\n /** Load every user page for a client account into a single result. */\n iterateUsers(\n clientId: LinxioId,\n params: LinxioClientUserListParams = {},\n ): Promise<LinxioResult<LinxioUser[]>> {\n return collectPages(\n (pageParams) => this.listUsers(clientId, pageParams),\n params,\n );\n }\n\n /** Stream users for a client account without loading every user at once. */\n streamUsers(\n clientId: LinxioId,\n params: LinxioClientUserListParams = {},\n ): AsyncGenerator<LinxioUser, void, undefined> {\n return streamPages(\n (pageParams) => this.listUsers(clientId, pageParams),\n params,\n );\n }\n\n /** Create a user within a client account. */\n createUser(\n clientId: LinxioId,\n payload: LinxioUserPayload,\n ): Promise<LinxioResult<LinxioUser>> {\n return this.result(() =>\n this.http.post(`/clients/${clientId}/users`, payload),\n );\n }\n\n /** Update a user within a client account. */\n updateUser(\n clientId: LinxioId,\n userId: LinxioId,\n payload: LinxioUserPayload,\n ): Promise<LinxioResult<LinxioUser>> {\n return this.result(() =>\n this.http.post(`/clients/${clientId}/users/${userId}`, payload),\n );\n }\n\n /** Fetch one user within a client account. */\n getUser(\n clientId: LinxioId,\n userId: LinxioId,\n ): Promise<LinxioResult<LinxioUser>> {\n return this.result(() =>\n this.http.get(`/clients/${clientId}/users/${userId}`),\n );\n }\n}\n\n/** Reseller endpoints discovered from the dashboard bundle. */\nexport class ResellersService extends BaseService {\n /** List reseller accounts. */\n list(): Promise<LinxioResult<LinxioReseller[]>> {\n return this.result(() => this.http.get(\"/reseller\"));\n }\n\n /** Fetch one reseller account by ID. */\n get(resellerId: LinxioId): Promise<LinxioResult<LinxioReseller>> {\n return this.result(() => this.http.get(`/reseller/${resellerId}`));\n }\n}\n","import { collectPages, streamPages } from \"../pagination\";\nimport type { LinxioPageResult, LinxioResult } from \"../result\";\nimport type { LinxioId, LinxioRecord } from \"../types/common\";\nimport type {\n LinxioDevice,\n LinxioDeviceCamera,\n LinxioDeviceCoordinate,\n LinxioDeviceCoordinateParams,\n LinxioDeviceInstallation,\n LinxioDeviceInstallationLookupParams,\n LinxioDeviceInstallationPayload,\n LinxioDeviceListParams,\n LinxioDevicePayload,\n LinxioDeviceUninstallPayload,\n LinxioDeviceVendor,\n} from \"../types/devices\";\nimport type { LinxioSensor, LinxioSensorListParams } from \"../types/sensors\";\nimport { BaseService } from \"./base.service\";\n\n/** Device inventory, install, uninstall, coordinate, and sensor endpoints. */\nexport class DevicesService extends BaseService {\n /** List devices using Linxio's documented `/devices/json` endpoint. */\n list(\n params: LinxioDeviceListParams = {},\n ): Promise<LinxioPageResult<LinxioDevice>> {\n return this.getPage(\"/devices/json\", params);\n }\n\n /** Load every device page into a single result. */\n iterate(\n params: LinxioDeviceListParams = {},\n ): Promise<LinxioResult<LinxioDevice[]>> {\n return collectPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Stream every device page without loading the whole inventory at once. */\n stream(\n params: LinxioDeviceListParams = {},\n ): AsyncGenerator<LinxioDevice, void, undefined> {\n return streamPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Fetch one device by internal Linxio device ID. */\n get(deviceId: LinxioId): Promise<LinxioResult<LinxioDevice>> {\n return this.result(() => this.http.get(`/devices/${deviceId}`));\n }\n\n /** Create a device. */\n create(payload: LinxioDevicePayload): Promise<LinxioResult<LinxioDevice>> {\n return this.result(() => this.http.post(\"/devices\", payload));\n }\n\n /** Update a device using Linxio's documented PATCH endpoint. */\n update(\n deviceId: LinxioId,\n payload: LinxioDevicePayload,\n ): Promise<LinxioResult<LinxioDevice>> {\n return this.result(() =>\n this.http.patch(`/devices/${deviceId}`, payload),\n );\n }\n\n /** Install a device into a vehicle. */\n install(\n deviceId: LinxioId,\n payload: LinxioDeviceInstallationPayload,\n ): Promise<LinxioResult<LinxioDevice>> {\n return this.result(() =>\n this.http.post(`/devices/${deviceId}/install`, payload),\n );\n }\n\n /** Uninstall a device from its current vehicle. */\n uninstall(\n deviceId: LinxioId,\n payload: LinxioDeviceUninstallPayload = {},\n ): Promise<LinxioResult<LinxioDevice>> {\n return this.result(() =>\n this.http.post(`/devices/${deviceId}/uninstall`, payload),\n );\n }\n\n /** Soft-archive a device when the dashboard endpoint is available. */\n archive(deviceId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.patch(`/devices/${deviceId}/archive`, {}),\n );\n }\n\n /** Restore a previously archived device. */\n restore(deviceId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.patch(`/devices/${deviceId}/restore`, {}),\n );\n }\n\n /** Fetch recent coordinates for a device from the dashboard-derived endpoint. */\n coordinates(\n deviceId: LinxioId,\n params: LinxioDeviceCoordinateParams = {},\n ): Promise<LinxioResult<LinxioDeviceCoordinate[]>> {\n return this.result(() =>\n this.http.get(`/devices/${deviceId}/coordinates`, { params }),\n );\n }\n\n /** List sensor history rows for a device. */\n sensors(\n deviceId: LinxioId,\n params: LinxioSensorListParams = {},\n ): Promise<LinxioPageResult<LinxioSensor>> {\n return this.getPage(`/devices/${deviceId}/sensors/history`, params);\n }\n\n /** Fetch device history entries from the dashboard-derived endpoint. */\n history(deviceId: LinxioId): Promise<LinxioResult<LinxioRecord[]>> {\n return this.result(() => this.http.get(`/devices/${deviceId}/history`));\n }\n\n /** List device vendors from the dashboard-derived endpoint. */\n vendors(): Promise<LinxioResult<LinxioDeviceVendor[]>> {\n return this.result(() => this.http.get(\"/devices/vendors/\"));\n }\n\n /** Look up a device installation by device IMEI or vehicle registration. */\n installation(\n params: LinxioDeviceInstallationLookupParams = {},\n ): Promise<LinxioResult<LinxioDeviceInstallation | null>> {\n return this.result(async () => {\n const installation = await this.http.get<LinxioDeviceInstallation>(\n \"/devices/installation/\",\n { params },\n );\n\n return isEmptyRecord(installation) ? null : installation;\n });\n }\n\n /** Backwards-compatible alias for `installation()`. */\n installations(\n params: LinxioDeviceInstallationLookupParams = {},\n ): Promise<LinxioResult<LinxioDeviceInstallation | null>> {\n return this.installation(params);\n }\n\n /** List cameras attached to a device from the dashboard-derived endpoint. */\n cameras(deviceId: LinxioId): Promise<LinxioResult<LinxioDeviceCamera[]>> {\n return this.result(() => this.http.get(`/devices/${deviceId}/cameras`));\n }\n}\n\nfunction isEmptyRecord(value: unknown): boolean {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.keys(value).length === 0\n );\n}\n","import { collectPages, streamPages } from \"../pagination\";\nimport type { LinxioPageResult, LinxioResult } from \"../result\";\nimport type { LinxioId } from \"../types/common\";\nimport type { LinxioDriver, LinxioDriverListParams } from \"../types/drivers\";\nimport { BaseService } from \"./base.service\";\n\n/** Driver listing and vehicle assignment endpoints. */\nexport class DriversService extends BaseService {\n /** List drivers, optionally via the documented client-users driver endpoint. */\n list(\n params: LinxioDriverListParams = {},\n ): Promise<LinxioPageResult<LinxioDriver>> {\n const { clientId, ...rest } = params;\n if (clientId) {\n return this.getPage(`/clients/${clientId}/users`, {\n ...rest,\n role: \"driver\",\n });\n }\n\n return this.getPage(\"/drivers\", rest);\n }\n\n /** Load every driver page into a single result. */\n iterate(\n params: LinxioDriverListParams = {},\n ): Promise<LinxioResult<LinxioDriver[]>> {\n return collectPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Stream every driver page without loading every driver at once. */\n stream(\n params: LinxioDriverListParams = {},\n ): AsyncGenerator<LinxioDriver, void, undefined> {\n return streamPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Assign a driver to a vehicle. */\n assignToVehicle(\n vehicleId: LinxioId,\n driverId: LinxioId,\n ): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.post(`/vehicle/${vehicleId}/set-driver/${driverId}`, {}),\n );\n }\n\n /** Unassign a driver from a vehicle. */\n unassignFromVehicle(\n vehicleId: LinxioId,\n driverId: LinxioId,\n ): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.post(\n `/vehicle/${vehicleId}/unset-driver/${driverId}`,\n {},\n ),\n );\n }\n}\n","import { collectPages, streamPages } from \"../pagination\";\nimport type { LinxioPageResult, LinxioResult } from \"../result\";\nimport type { LinxioId, LinxioRecord } from \"../types/common\";\nimport type {\n LinxioFuelCard,\n LinxioFuelListParams,\n LinxioFuelRecord,\n LinxioFuelSummaryRecord,\n} from \"../types/fuel\";\nimport { BaseService } from \"./base.service\";\n\n/** Fuel card, fuel transaction, and fuel summary endpoints. */\nexport class FuelService extends BaseService {\n /** List fuel transaction records from the dashboard-derived endpoint. */\n records(\n params: LinxioFuelListParams = {},\n ): Promise<LinxioPageResult<LinxioFuelRecord>> {\n return this.getPage(\"/fuel-cards/json\", params);\n }\n\n /** Load every fuel transaction page into a single result. */\n iterateRecords(\n params: LinxioFuelListParams = {},\n ): Promise<LinxioResult<LinxioFuelRecord[]>> {\n return collectPages((pageParams) => this.records(pageParams), params);\n }\n\n /** Stream fuel transaction records without loading every record at once. */\n streamRecords(\n params: LinxioFuelListParams = {},\n ): AsyncGenerator<LinxioFuelRecord, void, undefined> {\n return streamPages((pageParams) => this.records(pageParams), params);\n }\n\n /** Fetch fuel summary rows. */\n summary(\n params: LinxioFuelListParams = {},\n ): Promise<LinxioPageResult<LinxioFuelSummaryRecord>> {\n return this.getPage(\"/fuel-summary-report\", params);\n }\n\n /** Fetch fuel transaction records grouped or filtered by vehicle. */\n recordsByVehicle(\n params: LinxioFuelListParams = {},\n ): Promise<LinxioPageResult<LinxioFuelRecord>> {\n return this.getPage(\"/fuel-cards-by-vehicle/json\", params);\n }\n\n /** List fuel cards. */\n cards(\n params: LinxioFuelListParams = {},\n ): Promise<LinxioPageResult<LinxioFuelCard>> {\n return this.getPage(\"/fuel-cards/json\", params);\n }\n\n /** List fuel types configured by Linxio. */\n fuelTypes(): Promise<LinxioResult<LinxioRecord[]>> {\n return this.result(() => this.http.get(\"/fuel-types\"));\n }\n\n /** Assign a fuel transaction to a vehicle. */\n assignTransaction(\n recordId: LinxioId,\n vehicleId: LinxioId,\n ): Promise<LinxioResult<LinxioFuelRecord>> {\n return this.result(() =>\n this.http.patch(`/fuel-cards/record/${recordId}`, { vehicleId }),\n );\n }\n}\n","import { collectPages, streamPages } from \"../pagination\";\nimport type { LinxioPageResult, LinxioResult } from \"../result\";\nimport type { LinxioId } from \"../types/common\";\nimport type {\n LinxioAreaGroup,\n LinxioAreaGroupPayload,\n LinxioGeofence,\n LinxioGeofenceListParams,\n LinxioGeofencePayload,\n} from \"../types/geofences\";\nimport { BaseService } from \"./base.service\";\n\n/** Geofence/area endpoints. Linxio calls geofences `areas` in the API. */\nexport class GeofencesService extends BaseService {\n /** List geofence objects. */\n list(\n params: LinxioGeofenceListParams = {},\n ): Promise<LinxioPageResult<LinxioGeofence>> {\n return this.getPage(\"/areas\", params);\n }\n\n /** Load every geofence page into a single result. */\n iterate(\n params: LinxioGeofenceListParams = {},\n ): Promise<LinxioResult<LinxioGeofence[]>> {\n return collectPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Stream every geofence page without loading every geofence at once. */\n stream(\n params: LinxioGeofenceListParams = {},\n ): AsyncGenerator<LinxioGeofence, void, undefined> {\n return streamPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Fetch one geofence by Linxio area ID. */\n get(areaId: LinxioId): Promise<LinxioResult<LinxioGeofence>> {\n return this.result(() => this.http.get(`/areas/${areaId}`));\n }\n\n /** Create a geofence object. */\n create(\n payload: LinxioGeofencePayload,\n ): Promise<LinxioResult<LinxioGeofence>> {\n return this.result(() => this.http.post(\"/areas\", payload));\n }\n\n /** Update a geofence object using the dashboard-derived endpoint. */\n update(\n areaId: LinxioId,\n payload: Partial<LinxioGeofencePayload>,\n ): Promise<LinxioResult<LinxioGeofence>> {\n return this.result(() => this.http.patch(`/areas/${areaId}`, payload));\n }\n\n /** Permanently delete a geofence object. Prefer `archive()` if you need reversibility. */\n delete(areaId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() => this.http.delete(`/areas/${areaId}`));\n }\n\n /** Soft-archive a geofence object when the dashboard endpoint is available. */\n archive(areaId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.patch(`/areas/${areaId}/archive`, {}),\n );\n }\n\n /** Restore a previously archived geofence object. */\n restore(areaId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.patch(`/areas/${areaId}/restore`, {}),\n );\n }\n\n /** List area groups from the dashboard-derived endpoint. */\n listGroups(): Promise<LinxioResult<LinxioAreaGroup[]>> {\n return this.result(() => this.http.get(\"/area-groups\"));\n }\n\n /** Fetch one area group from the dashboard-derived endpoint. */\n getGroup(groupId: LinxioId): Promise<LinxioResult<LinxioAreaGroup>> {\n return this.result(() => this.http.get(`/area-groups/${groupId}`));\n }\n\n /** Create an area group from the dashboard-derived endpoint. */\n createGroup(\n payload: LinxioAreaGroupPayload,\n ): Promise<LinxioResult<LinxioAreaGroup>> {\n return this.result(() => this.http.post(\"/area-groups\", payload));\n }\n\n /** Update an area group from the dashboard-derived endpoint. */\n updateGroup(\n groupId: LinxioId,\n payload: Partial<LinxioAreaGroupPayload>,\n ): Promise<LinxioResult<LinxioAreaGroup>> {\n return this.result(() =>\n this.http.patch(`/area-groups/${groupId}`, payload),\n );\n }\n\n /** Delete an area group. Prefer archive/restore when reversibility matters. */\n deleteGroup(groupId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() => this.http.delete(`/area-groups/${groupId}`));\n }\n\n /** Soft-archive an area group from the dashboard-derived endpoint. */\n archiveGroup(groupId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.patch(`/area-groups/${groupId}/archive`, {}),\n );\n }\n\n /** Restore an archived area group from the dashboard-derived endpoint. */\n restoreGroup(groupId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.patch(`/area-groups/${groupId}/restore`, {}),\n );\n }\n}\n","import type { LinxioResult } from \"../result\";\nimport type {\n LinxioCountryMap,\n LinxioCurrentPlan,\n LinxioDigitalFormSettings,\n LinxioEcoSpeedSettings,\n LinxioExcessiveIdlingSettings,\n LinxioLanguage,\n LinxioMapApiOption,\n LinxioPlan,\n LinxioPlatformDomain,\n LinxioProviderSetting,\n LinxioRole,\n LinxioTheme,\n LinxioTimezone,\n} from \"../types/metadata\";\nimport { BaseService } from \"./base.service\";\n\n/** Read-only dashboard reference data and tenant settings. */\nexport class MetadataService extends BaseService {\n /** Fetch country options as a map keyed by country code. */\n countries(): Promise<LinxioResult<LinxioCountryMap>> {\n return this.result(() => this.http.get(\"/country/list\"));\n }\n\n /** List user roles available to the authenticated Linxio account. */\n roles(): Promise<LinxioResult<LinxioRole[]>> {\n return this.result(() => this.http.get(\"/roles\"));\n }\n\n /** List plan definitions visible to the authenticated Linxio account. */\n plans(): Promise<LinxioResult<LinxioPlan[]>> {\n return this.result(() => this.http.get(\"/plans\"));\n }\n\n /** List timezone options used by Linxio tenant and user settings. */\n timezones(): Promise<LinxioResult<LinxioTimezone[]>> {\n return this.result(() => this.http.get(\"/timezones\"));\n }\n\n /** List dashboard theme definitions. */\n themes(): Promise<LinxioResult<LinxioTheme[]>> {\n return this.result(() => this.http.get(\"/themes\"));\n }\n\n /** Fetch the current user's active dashboard theme. */\n myTheme(): Promise<LinxioResult<LinxioTheme>> {\n return this.result(() => this.http.get(\"/themes/my\"));\n }\n\n /** Fetch current-plan permission keys. */\n currentPlan(): Promise<LinxioResult<LinxioCurrentPlan>> {\n return this.result(() => this.http.get(\"/permissions/current-plan\"));\n }\n\n /** Fetch the hosted-domain settings for the current platform. */\n platformDomain(): Promise<LinxioResult<LinxioPlatformDomain>> {\n return this.result(() => this.http.get(\"/platform-settings/domain\"));\n }\n\n /** List language options used by Linxio settings screens. */\n languages(): Promise<LinxioResult<LinxioLanguage[]>> {\n return this.result(() => this.http.get(\"/settings/language/list\"));\n }\n\n /** Fetch the map API setting record for the current tenant. */\n mapApiOptions(): Promise<LinxioResult<LinxioMapApiOption>> {\n return this.result(() => this.http.get(\"/settings/mapApiOptions\"));\n }\n\n /** Fetch dashboard provider settings visible to the current account. */\n providers(): Promise<LinxioResult<LinxioProviderSetting>> {\n return this.result(() => this.http.get(\"/settings/provider\"));\n }\n\n /** Fetch tenant-level digital-form settings. */\n digitalFormSettings(): Promise<LinxioResult<LinxioDigitalFormSettings>> {\n return this.result(() => this.http.get(\"/settings/digitalForm\"));\n }\n\n /** Fetch tenant-level eco-speed settings. */\n ecoSpeedSettings(): Promise<LinxioResult<LinxioEcoSpeedSettings>> {\n return this.result(() => this.http.get(\"/settings/ecoSpeed\"));\n }\n\n /** Fetch tenant-level excessive-idling settings. */\n excessiveIdlingSettings(): Promise<\n LinxioResult<LinxioExcessiveIdlingSettings>\n > {\n return this.result(() => this.http.get(\"/settings/excessiveIdling\"));\n }\n}\n","import type { LinxioPageResult, LinxioResult } from \"../result\";\nimport type { LinxioId, LinxioRecord } from \"../types/common\";\nimport type {\n LinxioDigitalForm,\n LinxioReportParams,\n LinxioScheduledReport,\n LinxioScheduledReportPayload,\n} from \"../types/reports\";\nimport { BaseService } from \"./base.service\";\n\n/** Scheduled report endpoints discovered from the dashboard bundle. */\nexport class ReportsService extends BaseService {\n /** List scheduled reports. */\n scheduled(\n params: LinxioReportParams = {},\n ): Promise<LinxioPageResult<LinxioScheduledReport>> {\n return this.getPage(\"/scheduled-report\", params);\n }\n\n /** Fetch the scheduled-report template used by the Linxio dashboard. */\n scheduledTemplate(): Promise<LinxioResult<LinxioRecord>> {\n return this.result(() => this.http.get(\"/scheduled-report/template\"));\n }\n\n /** Fetch one scheduled report. */\n getScheduled(\n reportId: LinxioId,\n ): Promise<LinxioResult<LinxioScheduledReport>> {\n return this.result(() =>\n this.http.get(`/scheduled-report/${reportId}`),\n );\n }\n\n /** Create a scheduled report. */\n createScheduled(\n payload: LinxioScheduledReportPayload,\n ): Promise<LinxioResult<LinxioScheduledReport>> {\n return this.result(() => this.http.post(\"/scheduled-report\", payload));\n }\n\n /** Update a scheduled report. */\n updateScheduled(\n reportId: LinxioId,\n payload: Partial<LinxioScheduledReportPayload>,\n ): Promise<LinxioResult<LinxioScheduledReport>> {\n return this.result(() =>\n this.http.patch(`/scheduled-report/${reportId}`, payload),\n );\n }\n\n /** Delete a scheduled report. */\n deleteScheduled(reportId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.delete(`/scheduled-report/${reportId}`),\n );\n }\n\n /** Restore a scheduled report from the dashboard-derived endpoint. */\n restoreScheduled(reportId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.patch(`/scheduled-report/${reportId}/restore`, {}),\n );\n }\n}\n\n/** Digital form endpoints discovered from the dashboard bundle. */\nexport class DigitalFormsService extends BaseService {\n /** List digital forms. */\n list(): Promise<LinxioResult<LinxioDigitalForm[]>> {\n return this.result(() => this.http.get(\"/digital-form/form\"));\n }\n\n /** Fetch one digital form. */\n get(formId: LinxioId): Promise<LinxioResult<LinxioDigitalForm>> {\n return this.result(() => this.http.get(`/digital-form/form/${formId}`));\n }\n\n /** Fetch one digital form answer. */\n answer(answerId: LinxioId): Promise<LinxioResult<LinxioRecord>> {\n return this.result(() =>\n this.http.get(`/digital-form/answer/${answerId}`),\n );\n }\n\n /** Download a digital form answer as a PDF Blob. */\n answerPdf(answerId: LinxioId): Promise<LinxioResult<Blob>> {\n return this.result(() =>\n this.http.get(`/digital-form/answer/${answerId}/pdf`, {\n responseType: \"blob\",\n }),\n );\n }\n}\n","import { mergeParams } from \"../params\";\nimport type { LinxioResult } from \"../result\";\nimport type { LinxioId } from \"../types/common\";\nimport type {\n LinxioVehicleRoutesGroup,\n LinxioVehicleRoutesParams,\n} from \"../types/routes\";\nimport { BaseService } from \"./base.service\";\n\n/** Vehicle route history endpoints. */\nexport class RoutesService extends BaseService {\n /**\n * Fetch route history for a vehicle.\n *\n * Requesting `fields: [\"coordinates\"]` can return very large responses, so\n * only include coordinates when your script really needs every point.\n */\n getVehicleRoutes(\n vehicleId: LinxioId,\n params: LinxioVehicleRoutesParams,\n ): Promise<LinxioResult<LinxioVehicleRoutesGroup[]>> {\n const { fields, ...rest } = params;\n return this.result(() =>\n this.http.get(`/vehicles/${vehicleId}/routes`, {\n params: mergeParams(rest, fields),\n }),\n );\n }\n}\n","import { collectPages, streamPages } from \"../pagination\";\nimport type { LinxioPageResult, LinxioResult } from \"../result\";\nimport type { LinxioId } from \"../types/common\";\nimport type {\n LinxioSensor,\n LinxioSensorListParams,\n LinxioSensorReportParams,\n LinxioTemperatureHumidityReading,\n} from \"../types/sensors\";\nimport { BaseService } from \"./base.service\";\n\n/** Sensor inventory and temperature/humidity report endpoints. */\nexport class SensorsService extends BaseService {\n /** List sensors from the dashboard-derived endpoint. */\n list(\n params: LinxioSensorListParams = {},\n ): Promise<LinxioPageResult<LinxioSensor>> {\n return this.getPage(\"/sensors\", params);\n }\n\n /** Load every sensor page into a single result. */\n iterate(\n params: LinxioSensorListParams = {},\n ): Promise<LinxioResult<LinxioSensor[]>> {\n return collectPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Stream sensors without loading the whole inventory at once. */\n stream(\n params: LinxioSensorListParams = {},\n ): AsyncGenerator<LinxioSensor, void, undefined> {\n return streamPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Fetch one sensor by internal Linxio sensor ID. */\n get(sensorId: LinxioId): Promise<LinxioResult<LinxioSensor>> {\n return this.result(() => this.http.get(`/sensors/${sensorId}`));\n }\n\n /** Install or pair a sensor with a device. */\n install(\n sensorId: LinxioId,\n deviceId: LinxioId,\n ): Promise<LinxioResult<LinxioSensor>> {\n return this.result(() =>\n this.http.post(`/sensors/${sensorId}/install`, { deviceId }),\n );\n }\n\n /** Fetch the documented temperature/humidity report grouped by device sensor. */\n deviceTemperatureHumidityReport(\n params: LinxioSensorReportParams = {},\n ): Promise<LinxioPageResult<LinxioTemperatureHumidityReading>> {\n return this.getPage(\n \"/devices/sensors/report/temp-and-humidity\",\n params,\n );\n }\n\n /** Fetch the documented temperature/humidity report grouped by vehicle. */\n vehicleTemperatureHumidityReport(\n params: LinxioSensorReportParams = {},\n ): Promise<LinxioPageResult<LinxioTemperatureHumidityReading>> {\n return this.getPage(\n \"/vehicles/report/sensors/temp-and-humidity\",\n params,\n );\n }\n\n /** Load every device temperature/humidity report page into a single result. */\n iterateDeviceTemperatureHumidityReport(\n params: LinxioSensorReportParams = {},\n ): Promise<LinxioResult<LinxioTemperatureHumidityReading[]>> {\n return collectPages(\n (pageParams) => this.deviceTemperatureHumidityReport(pageParams),\n params,\n );\n }\n\n /** Stream the device temperature/humidity report one reading at a time. */\n streamDeviceTemperatureHumidityReport(\n params: LinxioSensorReportParams = {},\n ): AsyncGenerator<LinxioTemperatureHumidityReading, void, undefined> {\n return streamPages(\n (pageParams) => this.deviceTemperatureHumidityReport(pageParams),\n params,\n );\n }\n}\n","import { collectPages, streamPages } from \"../pagination\";\nimport type { LinxioPageResult, LinxioResult } from \"../result\";\nimport type { LinxioId } from \"../types/common\";\nimport type {\n LinxioUser,\n LinxioUserListParams,\n LinxioUserPayload,\n} from \"../types/users\";\nimport { BaseService } from \"./base.service\";\n\n/** User management endpoints. */\nexport class UsersService extends BaseService {\n /** List users from the dashboard-derived endpoint. */\n list(\n params: LinxioUserListParams = {},\n ): Promise<LinxioPageResult<LinxioUser>> {\n return this.getPage(\"/users\", params);\n }\n\n /** Load every user page into a single result. */\n iterate(\n params: LinxioUserListParams = {},\n ): Promise<LinxioResult<LinxioUser[]>> {\n return collectPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Stream every user page without loading every user at once. */\n stream(\n params: LinxioUserListParams = {},\n ): AsyncGenerator<LinxioUser, void, undefined> {\n return streamPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Fetch one user by ID. */\n get(userId: LinxioId): Promise<LinxioResult<LinxioUser>> {\n return this.result(() => this.http.get(`/users/${userId}`));\n }\n\n /** Create a user. */\n create(payload: LinxioUserPayload): Promise<LinxioResult<LinxioUser>> {\n return this.result(() => this.http.post(\"/users\", payload));\n }\n\n /** Update a user. */\n update(\n userId: LinxioId,\n payload: LinxioUserPayload,\n ): Promise<LinxioResult<LinxioUser>> {\n return this.result(() => this.http.patch(`/users/${userId}`, payload));\n }\n\n /** Soft-archive a user. */\n archive(userId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.patch(`/users/${userId}/archive`, {}),\n );\n }\n\n /** Restore a previously archived user. */\n restore(userId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.patch(`/users/${userId}/restore`, {}),\n );\n }\n}\n","import { collectPages, streamPages } from \"../pagination\";\nimport type { LinxioPageResult, LinxioResult } from \"../result\";\nimport type { LinxioId } from \"../types/common\";\nimport type {\n LinxioCount,\n LinxioEngineHours,\n LinxioOdometer,\n LinxioOdometerParams,\n LinxioOdometerRecalibration,\n LinxioVehicle,\n LinxioVehicleCountParams,\n LinxioVehicleListParams,\n LinxioVehiclePayload,\n LinxioVehicleType,\n LinxioVehicleTypeParams,\n} from \"../types/vehicles\";\nimport { BaseService } from \"./base.service\";\n\n/** Vehicle inventory, odometer, and vehicle lifecycle endpoints. */\nexport class VehiclesService extends BaseService {\n /** List vehicles using Linxio's documented `/vehicles/fields/json` endpoint. */\n list(\n params: LinxioVehicleListParams = {},\n ): Promise<LinxioPageResult<LinxioVehicle>> {\n return this.getPage(\"/vehicles/fields/json\", params);\n }\n\n /** Load every vehicle page into a single result. */\n iterate(\n params: LinxioVehicleListParams = {},\n ): Promise<LinxioResult<LinxioVehicle[]>> {\n return collectPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Stream every vehicle page without loading the whole fleet at once. */\n stream(\n params: LinxioVehicleListParams = {},\n ): AsyncGenerator<LinxioVehicle, void, undefined> {\n return streamPages((pageParams) => this.list(pageParams), params);\n }\n\n /** Fetch one vehicle by internal Linxio vehicle ID. */\n get(vehicleId: LinxioId): Promise<LinxioResult<LinxioVehicle>> {\n return this.result(() => this.http.get(`/vehicles/${vehicleId}`));\n }\n\n /** Create a vehicle. Validate payloads carefully against your Linxio tenant requirements. */\n create(\n payload: LinxioVehiclePayload,\n ): Promise<LinxioResult<LinxioVehicle>> {\n return this.result(() => this.http.post(\"/vehicles\", payload));\n }\n\n /** Update a vehicle using Linxio's documented POST update endpoint. */\n update(\n vehicleId: LinxioId,\n payload: LinxioVehiclePayload,\n ): Promise<LinxioResult<LinxioVehicle>> {\n return this.result(() =>\n this.http.post(`/vehicles/${vehicleId}`, payload),\n );\n }\n\n /** Soft-archive a vehicle when the dashboard endpoint is available. */\n archive(vehicleId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.patch(`/vehicles/${vehicleId}/archive`, {}),\n );\n }\n\n /** Restore a previously archived vehicle when the dashboard endpoint is available. */\n restore(vehicleId: LinxioId): Promise<LinxioResult<void>> {\n return this.result(() =>\n this.http.post(`/vehicles/${vehicleId}/restore`, {}),\n );\n }\n\n /** Get a vehicle odometer reading, optionally at a specific occurrence time. */\n getOdometer(\n vehicleId: LinxioId,\n params: LinxioOdometerParams = {},\n ): Promise<LinxioResult<LinxioOdometer>> {\n return this.result(() =>\n this.http.get(`/vehicles/${vehicleId}/odometer`, { params }),\n );\n }\n\n /** Recalibrate a vehicle odometer in metres. */\n recalibrateOdometer(\n vehicleId: LinxioId,\n payload: LinxioOdometerRecalibration,\n ): Promise<LinxioResult<LinxioOdometer>> {\n return this.result(() =>\n this.http.post(`/vehicles/${vehicleId}/odometer`, payload),\n );\n }\n\n /** Fetch current engine hours from the dashboard-derived endpoint. */\n getEngineHours(\n vehicleId: LinxioId,\n ): Promise<LinxioResult<LinxioEngineHours>> {\n return this.result(() =>\n this.http.get(`/vehicles/${vehicleId}/engine-hours/current`),\n );\n }\n\n /** Count vehicles using the dashboard-derived count endpoint. */\n count(\n params: LinxioVehicleCountParams = {},\n ): Promise<LinxioResult<LinxioCount>> {\n return this.result(() => this.http.get(\"/vehicles/count\", { params }));\n }\n\n /** List vehicle types using the dashboard-derived vehicle type endpoint. */\n types(\n params: LinxioVehicleTypeParams = {},\n ): Promise<LinxioPageResult<LinxioVehicleType>> {\n return this.getPage(\"/vehicles/types\", {\n limit: 1000,\n sort: \"order\",\n ...params,\n });\n }\n}\n","import type { HttpMethod, LinxioHttpRequestOptions } from \"./http\";\nimport { type FetchLike, HttpClient, type RetryOptions } from \"./http\";\nimport { RealtimeClient } from \"./realtime\";\nimport { AuthService } from \"./services/auth.service\";\nimport { CamerasService } from \"./services/cameras.service\";\nimport { ClientsService, ResellersService } from \"./services/clients.service\";\nimport { DevicesService } from \"./services/devices.service\";\nimport { DriversService } from \"./services/drivers.service\";\nimport { FuelService } from \"./services/fuel.service\";\nimport { GeofencesService } from \"./services/geofences.service\";\nimport { MetadataService } from \"./services/metadata.service\";\nimport {\n DigitalFormsService,\n ReportsService,\n} from \"./services/reports.service\";\nimport { RoutesService } from \"./services/routes.service\";\nimport { SensorsService } from \"./services/sensors.service\";\nimport { UsersService } from \"./services/users.service\";\nimport { VehiclesService } from \"./services/vehicles.service\";\nimport type { LinxioSession } from \"./types/auth\";\n\n/**\n * Configuration for {@link createClient}.\n *\n * Pass `token` and `refreshToken` when you already have a Linxio session, or\n * call `client.auth.login()` and the SDK will keep the returned tokens in\n * memory for this client instance.\n */\nexport type LinxioClientOptions = {\n /** Override the REST API base URL. Defaults to `https://api.linxio.com/api`. */\n baseUrl?: string;\n /** Custom fetch implementation for tests, proxies, or non-standard runtimes. */\n fetch?: FetchLike;\n /** Override the Socket.IO tracking host. Defaults to `https://track.linxio.com`. */\n realtimeBaseUrl?: string;\n /** Refresh token used for automatic 401 recovery. */\n refreshToken?: string;\n /** Retry policy for idempotent requests. */\n retry?: RetryOptions;\n /** Per-request timeout in milliseconds. Defaults to 30 seconds. */\n timeoutMs?: number;\n /** JWT bearer token used for authenticated requests. */\n token?: string;\n};\n\n/**\n * Main Linxio SDK entry point.\n *\n * Create one instance per Linxio account/session and reuse it across your app.\n * The client exposes domain services for common workflows and `request()` for\n * tenant-specific endpoints that are not represented by a service yet.\n *\n * @example\n * ```ts\n * import { createClient } from \"linxio-js\";\n *\n * const linxio = createClient();\n * await linxio.auth.login({ email, password });\n *\n * const { data, error } = await linxio.vehicles.list({\n * fields: [\"id\", \"regNo\"],\n * });\n *\n * if (error) {\n * throw error;\n * }\n *\n * console.log(data);\n * ```\n */\nexport class LinxioClient {\n /** Authentication, session, and current-user helpers. */\n readonly auth: AuthService;\n /** Dash cam event helpers discovered from the dashboard bundle. */\n readonly cameras: CamerasService;\n /** Client account and client-user helpers. */\n readonly clients: ClientsService;\n /** Device inventory, install, uninstall, sensor, and coordinate helpers. */\n readonly devices: DevicesService;\n /** Digital forms and form answer helpers discovered from the dashboard bundle. */\n readonly digitalForms: DigitalFormsService;\n /** Driver listing and vehicle assignment helpers. */\n readonly drivers: DriversService;\n /** Fuel card, fuel record, and fuel summary helpers discovered from the dashboard bundle. */\n readonly fuel: FuelService;\n /** Geofence/area and area-group helpers. */\n readonly geofences: GeofencesService;\n /** Low-level HTTP client for advanced integrations. */\n readonly http: HttpClient;\n /** Read-only reference data and tenant settings discovered from the dashboard bundle. */\n readonly metadata: MetadataService;\n /** Socket.IO live tracking and notification client. */\n readonly realtime: RealtimeClient;\n /** Scheduled report helpers discovered from the dashboard bundle. */\n readonly reports: ReportsService;\n /** Reseller account helpers discovered from the dashboard bundle. */\n readonly resellers: ResellersService;\n /** Vehicle route history helpers. */\n readonly routes: RoutesService;\n /** Temperature/humidity sensor helpers. */\n readonly sensors: SensorsService;\n /** User management helpers. */\n readonly users: UsersService;\n /** Vehicle inventory, odometer, and engine-hours helpers. */\n readonly vehicles: VehiclesService;\n\n private currentSession: LinxioSession;\n\n constructor(options: LinxioClientOptions = {}) {\n this.currentSession = {\n refreshToken: options.refreshToken,\n token: options.token,\n };\n\n this.http = new HttpClient({\n baseUrl: options.baseUrl,\n fetch: options.fetch,\n getRefreshToken: () => this.currentSession.refreshToken,\n getToken: () => this.currentSession.token,\n onSession: (session) => this.setSession(session),\n retry: options.retry,\n timeoutMs: options.timeoutMs,\n });\n this.realtime = new RealtimeClient({\n baseUrl: options.realtimeBaseUrl,\n getToken: () => this.currentSession.token,\n });\n\n this.auth = new AuthService(this.http, (session) =>\n this.setSession(session),\n );\n this.cameras = new CamerasService(this.http);\n this.clients = new ClientsService(this.http);\n this.devices = new DevicesService(this.http);\n this.digitalForms = new DigitalFormsService(this.http);\n this.drivers = new DriversService(this.http);\n this.fuel = new FuelService(this.http);\n this.geofences = new GeofencesService(this.http);\n this.metadata = new MetadataService(this.http);\n this.reports = new ReportsService(this.http);\n this.resellers = new ResellersService(this.http);\n this.routes = new RoutesService(this.http);\n this.sensors = new SensorsService(this.http);\n this.users = new UsersService(this.http);\n this.vehicles = new VehiclesService(this.http);\n }\n\n /**\n * Replace or partially update the in-memory session used by this client.\n *\n * This is useful when you persist tokens yourself and want to hydrate a\n * client without calling `auth.login()` again.\n */\n setSession(session: LinxioSession): void {\n this.currentSession = {\n ...this.currentSession,\n ...session,\n };\n }\n\n /** Return a copy of the current in-memory session. */\n session(): LinxioSession {\n return { ...this.currentSession };\n }\n\n /**\n * Send a raw API request with the same auth, retry, timeout, and refresh\n * behavior used by the domain services.\n */\n request<TResponse = unknown>(\n method: HttpMethod,\n path: string,\n options: LinxioHttpRequestOptions = {},\n ): Promise<TResponse> {\n return this.http.request<TResponse>(method, path, options);\n }\n}\n\n/**\n * Create a Linxio SDK client.\n *\n * @example\n * ```ts\n * const linxio = createClient({ token, refreshToken });\n * const { data, error } = await linxio.vehicles.iterate({ limit: 100 });\n *\n * if (error) {\n * throw error;\n * }\n *\n * for (const vehicle of data) {\n * console.log(vehicle.id, vehicle.regNo);\n * }\n * ```\n */\nexport function createClient(options: LinxioClientOptions = {}): LinxioClient {\n return new LinxioClient(options);\n}\n","import type { LinxioEndpointDefinition } from \"./endpoints\";\n\n/** Dashboard source file used by endpoint discovery helpers. */\nexport type DashboardSourceFile = {\n /** JavaScript source content captured from the Linxio dashboard. */\n content: string;\n /** Source filename used for evidence reporting. */\n filename: string;\n};\n\nexport type DashboardEndpointMethod =\n | \"DELETE\"\n | \"GET\"\n | \"PATCH\"\n | \"POST\"\n | \"PUT\"\n | \"UNKNOWN\";\n\n/** Endpoint evidence extracted from Linxio dashboard JavaScript bundles. */\nexport type DashboardEndpointEvidence = {\n /** Source bundle filenames where the endpoint candidate appeared. */\n files: string[];\n /** HTTP methods inferred from nearby client calls. */\n methods: DashboardEndpointMethod[];\n /** Number of times the normalized path appeared. */\n occurrences: number;\n /** Normalized API path with dynamic template segments replaced by `{param}`. */\n path: string;\n};\n\n/** Coverage comparison between dashboard evidence and SDK endpoint definitions. */\nexport type DashboardEndpointCoverage = {\n /** Dashboard-observed endpoints represented in the SDK endpoint catalogue. */\n dashboardCovered: DashboardEndpointEvidence[];\n /** Dashboard-observed endpoints not yet represented in the SDK endpoint catalogue. */\n dashboardOnly: DashboardEndpointEvidence[];\n /** SDK catalogue endpoints not observed in the analysed dashboard bundle set. */\n sdkOnly: LinxioEndpointDefinition[];\n};\n\n/** Inputs accepted by {@link compareDashboardEndpointCoverage}. */\nexport type DashboardEndpointCoverageInput = {\n dashboardEndpoints: readonly DashboardEndpointEvidence[];\n sdkEndpoints: readonly LinxioEndpointDefinition[];\n};\n\nconst HTTP_METHODS = [\"DELETE\", \"GET\", \"PATCH\", \"POST\", \"PUT\"] as const;\nconst METHOD_PATTERN = /\\.(delete|get|patch|post|put)\\s*\\($/i;\nconst STRING_LITERAL_PATTERN = /([\"'`])((?:\\\\.|(?!\\1)[\\s\\S])*?)\\1/g;\n\n/** Extract endpoint candidates from Linxio dashboard JavaScript bundles. */\nexport function extractDashboardEndpoints(\n sources: readonly DashboardSourceFile[],\n): DashboardEndpointEvidence[] {\n const endpoints = new Map<\n string,\n {\n files: Set<string>;\n methods: Set<DashboardEndpointMethod>;\n occurrences: number;\n }\n >();\n\n for (const source of sources) {\n for (const match of source.content.matchAll(STRING_LITERAL_PATTERN)) {\n const rawValue = match[2];\n if (rawValue === undefined || match.index === undefined) {\n continue;\n }\n\n const path = normalizeDashboardPath(rawValue);\n if (!path || !isLikelyApiEndpoint(path)) {\n continue;\n }\n\n const method = inferHttpMethod(source.content, match.index);\n if (method === \"UNKNOWN\") {\n continue;\n }\n\n const evidence = endpoints.get(path) ?? {\n files: new Set<string>(),\n methods: new Set<DashboardEndpointMethod>(),\n occurrences: 0,\n };\n\n evidence.files.add(source.filename);\n evidence.methods.add(method);\n evidence.occurrences += 1;\n endpoints.set(path, evidence);\n }\n }\n\n return [...endpoints.entries()]\n .map(([path, evidence]) => ({\n files: [...evidence.files].sort((left, right) =>\n left.localeCompare(right),\n ),\n methods: [...evidence.methods].sort(compareMethods),\n occurrences: evidence.occurrences,\n path,\n }))\n .sort((left, right) => compareText(left.path, right.path));\n}\n\n/** Compare extracted dashboard endpoints against SDK endpoint definitions. */\nexport function compareDashboardEndpointCoverage({\n dashboardEndpoints,\n sdkEndpoints,\n}: DashboardEndpointCoverageInput): DashboardEndpointCoverage {\n const sdkKeys = new Set(sdkEndpoints.map(endpointKey));\n const dashboardKeys = new Set<string>();\n const dashboardCovered: DashboardEndpointEvidence[] = [];\n const dashboardOnly: DashboardEndpointEvidence[] = [];\n\n for (const endpoint of dashboardEndpoints) {\n const keys = endpoint.methods.map((method) =>\n endpointKey({ method, path: endpoint.path }),\n );\n for (const key of keys) {\n dashboardKeys.add(key);\n }\n\n if (keys.some((key) => sdkKeys.has(key))) {\n dashboardCovered.push(endpoint);\n } else {\n dashboardOnly.push(endpoint);\n }\n }\n\n return {\n dashboardCovered,\n dashboardOnly,\n sdkOnly: sdkEndpoints.filter(\n (endpoint) => !dashboardKeys.has(endpointKey(endpoint)),\n ),\n };\n}\n\n/** Flatten a nested SDK endpoint catalogue into endpoint definitions. */\nexport function flattenEndpointDefinitions(\n catalogue: unknown,\n): LinxioEndpointDefinition[] {\n const definitions: LinxioEndpointDefinition[] = [];\n collectEndpointDefinitions(catalogue, definitions);\n return definitions.sort((left, right) => {\n const pathOrder = compareText(left.path, right.path);\n return pathOrder === 0\n ? compareMethods(left.method, right.method)\n : pathOrder;\n });\n}\n\nfunction normalizeDashboardPath(value: string): string | undefined {\n const normalized = value\n .replace(/\\\\\\//g, \"/\")\n .replace(/\\$\\{[^}]*\\}/g, \"{param}\")\n .trim();\n\n if (!normalized.startsWith(\"/\") || normalized.startsWith(\"//\")) {\n return undefined;\n }\n\n return normalized.replace(/\\/+$/, \"\") || \"/\";\n}\n\nfunction isLikelyApiEndpoint(path: string): boolean {\n if (\n path === \"/\" ||\n path.includes(\" \") ||\n path.startsWith(\"/.\") ||\n path.startsWith(\"/MM/\") ||\n path.startsWith(\"/socket.io\")\n ) {\n return false;\n }\n\n return /^\\/[a-z][a-z0-9-]*(?:[/?#]|$)/i.test(path);\n}\n\nfunction inferHttpMethod(\n content: string,\n literalIndex: number,\n): DashboardEndpointMethod {\n const prefix = content.slice(Math.max(0, literalIndex - 80), literalIndex);\n const match = prefix.match(METHOD_PATTERN);\n if (!match?.[1]) {\n return \"UNKNOWN\";\n }\n\n return match[1].toUpperCase() as DashboardEndpointMethod;\n}\n\nfunction compareMethods(\n left: DashboardEndpointMethod,\n right: DashboardEndpointMethod,\n): number {\n return methodRank(left) - methodRank(right);\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) {\n return -1;\n }\n\n if (left > right) {\n return 1;\n }\n\n return 0;\n}\n\nfunction methodRank(method: DashboardEndpointMethod): number {\n const index = HTTP_METHODS.indexOf(method as (typeof HTTP_METHODS)[number]);\n return index === -1 ? HTTP_METHODS.length : index;\n}\n\nfunction endpointKey(endpoint: {\n method: DashboardEndpointMethod | LinxioEndpointDefinition[\"method\"];\n path: string;\n}): string {\n return `${endpoint.method}:${normalizeComparablePath(endpoint.path)}`;\n}\n\nfunction normalizeComparablePath(path: string): string {\n const [pathWithoutQuery] = path.split(\"?\");\n return (pathWithoutQuery ?? path).replace(/\\{[^}]+\\}/g, \"{param}\");\n}\n\nfunction collectEndpointDefinitions(\n value: unknown,\n definitions: LinxioEndpointDefinition[],\n): void {\n if (!isRecord(value)) {\n return;\n }\n\n if (isEndpointDefinition(value)) {\n definitions.push(value);\n return;\n }\n\n for (const nestedValue of Object.values(value)) {\n collectEndpointDefinitions(nestedValue, definitions);\n }\n}\n\nfunction isEndpointDefinition(\n value: Record<string, unknown>,\n): value is LinxioEndpointDefinition {\n return (\n typeof value.path === \"string\" &&\n (value.source === \"dashboard\" || value.source === \"public-docs\") &&\n isHttpMethod(value.method)\n );\n}\n\nfunction isHttpMethod(\n value: unknown,\n): value is LinxioEndpointDefinition[\"method\"] {\n return (\n value === \"DELETE\" ||\n value === \"GET\" ||\n value === \"PATCH\" ||\n value === \"POST\" ||\n value === \"PUT\"\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n","export type LinxioEndpointSource = \"dashboard\" | \"public-docs\";\n\nexport type LinxioEndpointDefinition = {\n method: \"DELETE\" | \"GET\" | \"PATCH\" | \"POST\" | \"PUT\";\n path: string;\n source: LinxioEndpointSource;\n};\n\nexport const linxioEndpoints = {\n auth: {\n login: { method: \"POST\", path: \"/login\", source: \"public-docs\" },\n logout: { method: \"POST\", path: \"/logout\", source: \"dashboard\" },\n me: { method: \"GET\", path: \"/me\", source: \"dashboard\" },\n refreshToken: {\n method: \"POST\",\n path: \"/token/refresh\",\n source: \"dashboard\",\n },\n verifyOtp: { method: \"POST\", path: \"/login/otp\", source: \"dashboard\" },\n },\n cameras: {\n eventTypes: {\n method: \"GET\",\n path: \"/devices/cameras/events/types\",\n source: \"dashboard\",\n },\n events: {\n method: \"GET\",\n path: \"/devices/cameras/events\",\n source: \"dashboard\",\n },\n },\n clients: {\n get: {\n method: \"GET\",\n path: \"/clients/{clientId}\",\n source: \"dashboard\",\n },\n list: { method: \"GET\", path: \"/clients/json\", source: \"dashboard\" },\n users: {\n create: {\n method: \"POST\",\n path: \"/clients/{clientId}/users\",\n source: \"public-docs\",\n },\n get: {\n method: \"GET\",\n path: \"/clients/{clientId}/users/{userId}\",\n source: \"public-docs\",\n },\n list: {\n method: \"GET\",\n path: \"/clients/{clientId}/users\",\n source: \"public-docs\",\n },\n update: {\n method: \"POST\",\n path: \"/clients/{clientId}/users/{userId}\",\n source: \"public-docs\",\n },\n },\n },\n devices: {\n archive: {\n method: \"PATCH\",\n path: \"/devices/{deviceId}/archive\",\n source: \"dashboard\",\n },\n coordinates: {\n method: \"GET\",\n path: \"/devices/{deviceId}/coordinates\",\n source: \"dashboard\",\n },\n cameras: {\n method: \"GET\",\n path: \"/devices/{deviceId}/cameras\",\n source: \"dashboard\",\n },\n create: { method: \"POST\", path: \"/devices\", source: \"public-docs\" },\n get: {\n method: \"GET\",\n path: \"/devices/{deviceId}\",\n source: \"public-docs\",\n },\n install: {\n method: \"POST\",\n path: \"/devices/{deviceId}/install\",\n source: \"public-docs\",\n },\n list: { method: \"GET\", path: \"/devices/json\", source: \"public-docs\" },\n history: {\n method: \"GET\",\n path: \"/devices/{deviceId}/history\",\n source: \"dashboard\",\n },\n installations: {\n method: \"GET\",\n path: \"/devices/installation/\",\n source: \"dashboard\",\n },\n sensors: {\n list: {\n method: \"GET\",\n path: \"/devices/{deviceId}/sensors/history\",\n source: \"dashboard\",\n },\n },\n uninstall: {\n method: \"POST\",\n path: \"/devices/{deviceId}/uninstall\",\n source: \"public-docs\",\n },\n update: {\n method: \"PATCH\",\n path: \"/devices/{deviceId}\",\n source: \"public-docs\",\n },\n vendors: {\n method: \"GET\",\n path: \"/devices/vendors/\",\n source: \"dashboard\",\n },\n },\n drivers: {\n assignToVehicle: {\n method: \"POST\",\n path: \"/vehicle/{vehicleId}/set-driver/{driverId}\",\n source: \"public-docs\",\n },\n list: {\n method: \"GET\",\n path: \"/clients/{clientId}/users?role=driver\",\n source: \"public-docs\",\n },\n unassignFromVehicle: {\n method: \"POST\",\n path: \"/vehicle/{vehicleId}/unset-driver/{driverId}\",\n source: \"public-docs\",\n },\n },\n fuel: {\n assignTransaction: {\n method: \"PATCH\",\n path: \"/fuel-cards/record/{recordId}\",\n source: \"dashboard\",\n },\n cards: { method: \"GET\", path: \"/fuel-cards/json\", source: \"dashboard\" },\n records: {\n method: \"GET\",\n path: \"/fuel-cards/json\",\n source: \"dashboard\",\n },\n recordsByVehicle: {\n method: \"GET\",\n path: \"/fuel-cards-by-vehicle/json\",\n source: \"dashboard\",\n },\n summary: {\n method: \"GET\",\n path: \"/fuel-summary-report\",\n source: \"dashboard\",\n },\n fuelTypes: {\n method: \"GET\",\n path: \"/fuel-types\",\n source: \"dashboard\",\n },\n },\n geofences: {\n archive: {\n method: \"PATCH\",\n path: \"/areas/{areaId}/archive\",\n source: \"dashboard\",\n },\n create: { method: \"POST\", path: \"/areas\", source: \"public-docs\" },\n delete: {\n method: \"DELETE\",\n path: \"/areas/{areaId}\",\n source: \"public-docs\",\n },\n get: { method: \"GET\", path: \"/areas/{areaId}\", source: \"dashboard\" },\n list: { method: \"GET\", path: \"/areas\", source: \"public-docs\" },\n restore: {\n method: \"PATCH\",\n path: \"/areas/{areaId}/restore\",\n source: \"dashboard\",\n },\n groups: {\n archive: {\n method: \"PATCH\",\n path: \"/area-groups/{groupId}/archive\",\n source: \"dashboard\",\n },\n create: {\n method: \"POST\",\n path: \"/area-groups\",\n source: \"dashboard\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/area-groups/{groupId}\",\n source: \"dashboard\",\n },\n get: {\n method: \"GET\",\n path: \"/area-groups/{groupId}\",\n source: \"dashboard\",\n },\n list: {\n method: \"GET\",\n path: \"/area-groups\",\n source: \"dashboard\",\n },\n restore: {\n method: \"PATCH\",\n path: \"/area-groups/{groupId}/restore\",\n source: \"dashboard\",\n },\n update: {\n method: \"PATCH\",\n path: \"/area-groups/{groupId}\",\n source: \"dashboard\",\n },\n },\n },\n metadata: {\n countries: {\n method: \"GET\",\n path: \"/country/list\",\n source: \"dashboard\",\n },\n currentPlan: {\n method: \"GET\",\n path: \"/permissions/current-plan\",\n source: \"dashboard\",\n },\n digitalFormSettings: {\n method: \"GET\",\n path: \"/settings/digitalForm\",\n source: \"dashboard\",\n },\n ecoSpeedSettings: {\n method: \"GET\",\n path: \"/settings/ecoSpeed\",\n source: \"dashboard\",\n },\n excessiveIdlingSettings: {\n method: \"GET\",\n path: \"/settings/excessiveIdling\",\n source: \"dashboard\",\n },\n languages: {\n method: \"GET\",\n path: \"/settings/language/list\",\n source: \"dashboard\",\n },\n mapApiOptions: {\n method: \"GET\",\n path: \"/settings/mapApiOptions\",\n source: \"dashboard\",\n },\n myTheme: {\n method: \"GET\",\n path: \"/themes/my\",\n source: \"dashboard\",\n },\n platformDomain: {\n method: \"GET\",\n path: \"/platform-settings/domain\",\n source: \"dashboard\",\n },\n plans: {\n method: \"GET\",\n path: \"/plans\",\n source: \"dashboard\",\n },\n providers: {\n method: \"GET\",\n path: \"/settings/provider\",\n source: \"dashboard\",\n },\n roles: {\n method: \"GET\",\n path: \"/roles\",\n source: \"dashboard\",\n },\n themes: {\n method: \"GET\",\n path: \"/themes\",\n source: \"dashboard\",\n },\n timezones: {\n method: \"GET\",\n path: \"/timezones\",\n source: \"dashboard\",\n },\n },\n realtime: {\n coordinates: {\n method: \"GET\",\n path: \"https://track.linxio.com/coordinates\",\n source: \"public-docs\",\n },\n notifications: {\n method: \"GET\",\n path: \"https://track.linxio.com/notifications\",\n source: \"public-docs\",\n },\n },\n reports: {\n digitalFormAnswer: {\n method: \"GET\",\n path: \"/digital-form/answer/{answerId}\",\n source: \"dashboard\",\n },\n digitalFormAnswerPdf: {\n method: \"GET\",\n path: \"/digital-form/answer/{answerId}/pdf\",\n source: \"dashboard\",\n },\n deleteScheduledReport: {\n method: \"DELETE\",\n path: \"/scheduled-report/{reportId}\",\n source: \"dashboard\",\n },\n getScheduledReport: {\n method: \"GET\",\n path: \"/scheduled-report/{reportId}\",\n source: \"dashboard\",\n },\n scheduledReport: {\n method: \"GET\",\n path: \"/scheduled-report\",\n source: \"dashboard\",\n },\n restoreScheduledReport: {\n method: \"PATCH\",\n path: \"/scheduled-report/{reportId}/restore\",\n source: \"dashboard\",\n },\n scheduledTemplate: {\n method: \"GET\",\n path: \"/scheduled-report/template\",\n source: \"dashboard\",\n },\n updateScheduledReport: {\n method: \"PATCH\",\n path: \"/scheduled-report/{reportId}\",\n source: \"dashboard\",\n },\n },\n sensors: {\n tempHumidityDeviceReport: {\n method: \"GET\",\n path: \"/devices/sensors/report/temp-and-humidity\",\n source: \"public-docs\",\n },\n tempHumidityVehicleReport: {\n method: \"GET\",\n path: \"/vehicles/report/sensors/temp-and-humidity\",\n source: \"public-docs\",\n },\n },\n vehicles: {\n archive: {\n method: \"PATCH\",\n path: \"/vehicles/{vehicleId}/archive\",\n source: \"dashboard\",\n },\n create: { method: \"POST\", path: \"/vehicles\", source: \"public-docs\" },\n count: {\n method: \"GET\",\n path: \"/vehicles/count\",\n source: \"dashboard\",\n },\n engineHours: {\n method: \"GET\",\n path: \"/vehicles/{vehicleId}/engine-hours/current\",\n source: \"dashboard\",\n },\n get: {\n method: \"GET\",\n path: \"/vehicles/{vehicleId}\",\n source: \"public-docs\",\n },\n list: {\n method: \"GET\",\n path: \"/vehicles/fields/json\",\n source: \"public-docs\",\n },\n odometer: {\n method: \"GET\",\n path: \"/vehicles/{vehicleId}/odometer\",\n source: \"public-docs\",\n },\n recalibrateOdometer: {\n method: \"POST\",\n path: \"/vehicles/{vehicleId}/odometer\",\n source: \"public-docs\",\n },\n restore: {\n method: \"POST\",\n path: \"/vehicles/{vehicleId}/restore\",\n source: \"dashboard\",\n },\n routes: {\n method: \"GET\",\n path: \"/vehicles/{vehicleId}/routes\",\n source: \"public-docs\",\n },\n update: {\n method: \"POST\",\n path: \"/vehicles/{vehicleId}\",\n source: \"public-docs\",\n },\n types: {\n method: \"GET\",\n path: \"/vehicles/types\",\n source: \"dashboard\",\n },\n },\n} as const satisfies Record<string, unknown>;\n"],"mappings":"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","names":["isRecord"]}