import {z} from 'zod' export type GetApiApiAuthSessionIsaliveOptions = {baseUrl?: string | undefined, ApiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const intectWebAPIControllersSessionExpiryInfo = z.object({CurrentServerTime: z.string().optional(), SessionExpiryTime: z.string().nullable().optional(), IsAlive: z.boolean().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Determines whether the login session is still active, and if so when it is set to expire (note that any activity in the form of calls to other endpoints will extend the session). * NOTE: A) Calling this method will not extend the lifetime of the session. B) This method is also used to check for important notifications. If such a notification is relevant, it will be returned with a 400 Bad Request response. * * GET /api/auth/session/isalive */ export const getApiApiAuthSessionIsalive = async (options?: GetApiApiAuthSessionIsaliveOptions) => { const {baseUrl = "https://api.intect.app", fetch: fetchFn = fetch, ApiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (ApiKey !== undefined) headers.set("X-API-Key", ApiKey) const url = `${baseUrl.replace(/\/+$/, '')}/api/auth/session/isalive${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(intectWebAPIControllersSessionExpiryInfo, await res.json()) };