@innspel/core 0.6.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-INOPXTQM.js → chunk-3EIBWCTT.js} +3 -3
- package/dist/{chunk-INOPXTQM.js.map → chunk-3EIBWCTT.js.map} +1 -1
- package/dist/index.cjs +17 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -4
- package/dist/index.d.ts +6 -4
- package/dist/index.js +18 -2
- package/dist/index.js.map +1 -1
- package/dist/telemetri.cjs +1 -1
- package/dist/telemetri.cjs.map +1 -1
- package/dist/telemetri.d.cts +1 -1
- package/dist/telemetri.d.ts +1 -1
- package/dist/telemetri.js +1 -1
- package/dist/{typer-Cf6TFjPD.d.cts → typer-BJzuu_WP.d.cts} +21 -1
- package/dist/{typer-Cf6TFjPD.d.ts → typer-BJzuu_WP.d.ts} +21 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/generated/api/core/bodySerializer.gen.ts","../src/generated/api/core/serverSentEvents.gen.ts","../src/generated/api/core/pathSerializer.gen.ts","../src/generated/api/core/utils.gen.ts","../src/generated/api/core/auth.gen.ts","../src/generated/api/client/utils.gen.ts","../src/generated/api/client/client.gen.ts","../src/generated/api/client.gen.ts","../src/generated/api/sdk.gen.ts","../src/feil.ts","../src/identitet.ts","../src/flush.ts","../src/ko.ts","../src/kontekst.ts","../src/monster.ts","../src/uuid.ts","../src/vedlegg.ts","../src/versjon.ts","../src/klient.ts","../src/maskering.ts"],"names":["joinedValues","config","request","url","init"],"mappings":"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","file":"index.cjs","sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerializer.gen';\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: unknown) => unknown;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (data: FormData, key: string, value: unknown): void => {\n if (typeof value === 'string' || value instanceof Blob) {\n data.append(key, value);\n } else if (value instanceof Date) {\n data.append(key, value.toISOString());\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nconst serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value: unknown): void => {\n if (typeof value === 'string') {\n data.append(key, value);\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nexport const formDataBodySerializer = {\n bodySerializer: (body: unknown): FormData => {\n const data = new FormData();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeFormDataPair(data, key, v));\n } else {\n serializeFormDataPair(data, key, value);\n }\n });\n\n return data;\n },\n};\n\nexport const jsonBodySerializer = {\n bodySerializer: (body: unknown): string =>\n JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: (body: unknown): string => {\n const data = new URLSearchParams();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n } else {\n serializeUrlSearchParamsPair(data, key, value);\n }\n });\n\n return data.toString();\n },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Config } from './types.gen';\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, 'method'> &\n Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit['body'];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport function createSseClient<TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> {\n let lastEventId: string | undefined;\n\n const sleep = sseSleepFn ?? ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set('Last-Event-ID', lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: 'follow',\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\n }\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`);\n\n if (!response.body) throw new Error('No body in SSE response');\n\n const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();\n\n let buffer = '';\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener('abort', abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n buffer = buffer.replace(/\\r\\n?/g, '\\n'); // normalize line endings\n\n const chunks = buffer.split('\\n\\n');\n buffer = chunks.pop() ?? '';\n\n for (const chunk of chunks) {\n const lines = chunk.split('\\n');\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith('data:')) {\n dataLines.push(line.replace(/^data:\\s*/, ''));\n } else if (line.startsWith('event:')) {\n eventName = line.replace(/^event:\\s*/, '');\n } else if (line.startsWith('id:')) {\n lastEventId = line.replace(/^id:\\s*/, '');\n } else if (line.startsWith('retry:')) {\n const parsed = Number.parseInt(line.replace(/^retry:\\s*/, ''), 10);\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join('\\n');\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener('abort', abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (sseMaxRetryAttempts !== undefined && attempt >= sseMaxRetryAttempts) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 30000);\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T> extends SerializePrimitiveOptions, SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n allowReserved?: boolean;\n name: string;\n}\n\nexport interface SerializerOptions<T> {\n /**\n * @default true\n */\n explode: boolean;\n style: T;\n}\n\nexport type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = 'label' | 'matrix' | 'simple';\nexport type ObjectStyle = 'form' | 'deepObject';\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle): '.' | ';' | ',' | '&' => {\n switch (style) {\n case 'label':\n return '.';\n case 'matrix':\n return ';';\n case 'simple':\n return ',';\n default:\n return '&';\n }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle): ',' | '|' | '%20' => {\n switch (style) {\n case 'form':\n return ',';\n case 'pipeDelimited':\n return '|';\n case 'spaceDelimited':\n return '%20';\n default:\n return ',';\n }\n};\n\nexport const separatorObjectExplode = (style: ObjectSeparatorStyle): '.' | ';' | ',' | '&' => {\n switch (style) {\n case 'label':\n return '.';\n case 'matrix':\n return ';';\n case 'simple':\n return ',';\n default:\n return '&';\n }\n};\n\nexport const serializeArrayParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n}: SerializeOptions<ArraySeparatorStyle> & {\n value: unknown[];\n}): string => {\n if (!explode) {\n const joinedValues = (\n allowReserved ? value : value.map((v) => encodeURIComponent(v as string))\n ).join(separatorArrayNoExplode(style));\n switch (style) {\n case 'label':\n return `.${joinedValues}`;\n case 'matrix':\n return `;${name}=${joinedValues}`;\n case 'simple':\n return joinedValues;\n default:\n return `${name}=${joinedValues}`;\n }\n }\n\n const separator = separatorArrayExplode(style);\n const joinedValues = value\n .map((v) => {\n if (style === 'label' || style === 'simple') {\n return allowReserved ? v : encodeURIComponent(v as string);\n }\n\n return serializePrimitiveParam({\n allowReserved,\n name,\n value: v as string,\n });\n })\n .join(separator);\n return style === 'label' || style === 'matrix' ? separator + joinedValues : joinedValues;\n};\n\nexport const serializePrimitiveParam = ({\n allowReserved,\n name,\n value,\n}: SerializePrimitiveParam): string => {\n if (value === undefined || value === null) {\n return '';\n }\n\n if (typeof value === 'object') {\n throw new Error(\n 'Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.',\n );\n }\n\n return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\n\nexport const serializeObjectParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n valueOnly,\n}: SerializeOptions<ObjectSeparatorStyle> & {\n value: Record<string, unknown> | Date;\n valueOnly?: boolean;\n}): string => {\n if (value instanceof Date) {\n return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n }\n\n if (style !== 'deepObject' && !explode) {\n let values: string[] = [];\n Object.entries(value).forEach(([key, v]) => {\n values = [...values, key, allowReserved ? (v as string) : encodeURIComponent(v as string)];\n });\n const joinedValues = values.join(',');\n switch (style) {\n case 'form':\n return `${name}=${joinedValues}`;\n case 'label':\n return `.${joinedValues}`;\n case 'matrix':\n return `;${name}=${joinedValues}`;\n default:\n return joinedValues;\n }\n }\n\n const separator = separatorObjectExplode(style);\n const joinedValues = Object.entries(value)\n .map(([key, v]) =>\n serializePrimitiveParam({\n allowReserved,\n name: style === 'deepObject' ? `${name}[${key}]` : key,\n value: v as string,\n }),\n )\n .join(separator);\n return style === 'label' || style === 'matrix' ? separator + joinedValues : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from './bodySerializer.gen';\nimport {\n type ArraySeparatorStyle,\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from './pathSerializer.gen';\n\nexport interface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nexport const PATH_PARAM_RE: RegExp = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({ path, url: _url }: PathSerializer): string => {\n let url = _url;\n const matches = _url.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n let explode = false;\n let name = match.substring(1, match.length - 1);\n let style: ArraySeparatorStyle = 'simple';\n\n if (name.endsWith('*')) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n\n if (name.startsWith('.')) {\n name = name.substring(1);\n style = 'label';\n } else if (name.startsWith(';')) {\n name = name.substring(1);\n style = 'matrix';\n }\n\n const value = path[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n url = url.replace(match, serializeArrayParam({ explode, name, style, value }));\n continue;\n }\n\n if (typeof value === 'object') {\n url = url.replace(\n match,\n serializeObjectParam({\n explode,\n name,\n style,\n value: value as Record<string, unknown>,\n valueOnly: true,\n }),\n );\n continue;\n }\n\n if (style === 'matrix') {\n url = url.replace(\n match,\n `;${serializePrimitiveParam({\n name,\n value: value as string,\n })}`,\n );\n continue;\n }\n\n const replaceValue = encodeURIComponent(\n style === 'label' ? `.${value as string}` : (value as string),\n );\n url = url.replace(match, replaceValue);\n }\n }\n return url;\n};\n\nexport const getUrl = ({\n baseUrl,\n path,\n query,\n querySerializer,\n url: _url,\n}: {\n baseUrl?: string;\n path?: Record<string, unknown>;\n query?: Record<string, unknown>;\n querySerializer: QuerySerializer;\n url: string;\n}): string => {\n const pathUrl = _url.startsWith('/') ? _url : `/${_url}`;\n let url = (baseUrl ?? '') + pathUrl;\n if (path) {\n url = defaultPathSerializer({ path, url });\n }\n let search = query ? querySerializer(query) : '';\n if (search.startsWith('?')) {\n search = search.substring(1);\n }\n if (search) {\n url += `?${search}`;\n }\n return url;\n};\n\nexport function getValidRequestBody(options: {\n body?: unknown;\n bodySerializer?: BodySerializer | null;\n serializedBody?: unknown;\n}): unknown {\n const hasBody = options.body !== undefined;\n const isSerializedBody = hasBody && options.bodySerializer;\n\n if (isSerializedBody) {\n if ('serializedBody' in options) {\n const hasSerializedBody =\n options.serializedBody !== undefined && options.serializedBody !== '';\n\n return hasSerializedBody ? options.serializedBody : null;\n }\n\n // not all clients implement a serializedBody property (i.e., client-axios)\n return options.body !== '' ? options.body : null;\n }\n\n // plain/text body\n if (hasBody) {\n return options.body;\n }\n\n // no body was provided\n return undefined;\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type AuthToken = string | undefined;\n\nexport interface Auth {\n /**\n * Which part of the request do we use to send the auth?\n *\n * @default 'header'\n */\n in?: 'header' | 'query' | 'cookie';\n /**\n * A unique identifier for the security scheme.\n *\n * Defined only when there are multiple security schemes whose `Auth`\n * shape would otherwise be identical.\n */\n key?: string;\n /**\n * Header or query parameter name.\n *\n * @default 'Authorization'\n */\n name?: string;\n scheme?: 'basic' | 'bearer';\n type: 'apiKey' | 'http';\n}\n\nexport const getAuthToken = async (\n auth: Auth,\n callback: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken,\n): Promise<string | undefined> => {\n const token = typeof callback === 'function' ? await callback(auth) : callback;\n\n if (!token) {\n return;\n }\n\n if (auth.scheme === 'bearer') {\n return `Bearer ${token}`;\n }\n\n if (auth.scheme === 'basic') {\n return `Basic ${btoa(token)}`;\n }\n\n return token;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { getAuthToken } from '../core/auth.gen';\nimport type { QuerySerializerOptions } from '../core/bodySerializer.gen';\nimport { jsonBodySerializer } from '../core/bodySerializer.gen';\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from '../core/pathSerializer.gen';\nimport { getUrl } from '../core/utils.gen';\nimport type { Client, ClientOptions, Config, RequestOptions } from './types.gen';\n\nexport const createQuerySerializer = <T = unknown>({\n parameters = {},\n ...args\n}: QuerySerializerOptions = {}): ((queryParams: T) => string) => {\n const querySerializer = (queryParams: T): string => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === 'object') {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'form',\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === 'object') {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'deepObject',\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join('&');\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (contentType: string | null): Exclude<Config['parseAs'], 'auto'> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return 'stream';\n }\n\n const cleanContent = contentType.split(';')[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (cleanContent.startsWith('application/json') || cleanContent.endsWith('+json')) {\n return 'json';\n }\n\n if (cleanContent === 'multipart/form-data') {\n return 'formData';\n }\n\n if (\n ['application/', 'audio/', 'image/', 'video/'].some((type) => cleanContent.startsWith(type))\n ) {\n return 'blob';\n }\n\n if (cleanContent.startsWith('text/')) {\n return 'text';\n }\n\n return;\n};\n\nconst checkForExistence = (\n options: Pick<RequestOptions, 'auth' | 'query'> & {\n headers: Headers;\n },\n name?: string,\n): boolean => {\n if (!name) {\n return false;\n }\n if (\n options.headers.has(name) ||\n options.query?.[name] ||\n options.headers.get('Cookie')?.includes(`${name}=`)\n ) {\n return true;\n }\n return false;\n};\n\nexport async function setAuthParams(\n options: Pick<RequestOptions, 'auth' | 'query' | 'security'> & {\n headers: Headers;\n },\n): Promise<void> {\n for (const auth of options.security ?? []) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? 'Authorization';\n\n switch (auth.in) {\n case 'query':\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case 'cookie':\n options.headers.append('Cookie', `${name}=${token}`);\n break;\n case 'header':\n default:\n options.headers.set(name, token);\n break;\n }\n }\n}\n\nexport const buildUrl: Client['buildUrl'] = (options) =>\n getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === 'function'\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith('/')) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>['headers'] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header) {\n continue;\n }\n\n const iterator = header instanceof Headers ? headersEntries(header) : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e., their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === 'object' ? JSON.stringify(value) : (value as string),\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n /** response may be undefined due to a network error where no response object is produced */\n response: Res | undefined,\n /** request may be undefined, because error may be from building the request object itself */\n request: Req | undefined,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (request: Req, options: Options) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n fns: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === 'number') {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: 'form',\n },\n object: {\n explode: true,\n style: 'deepObject',\n },\n});\n\nconst defaultHeaders = {\n 'Content-Type': 'application/json',\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: 'auto',\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from '../core/serverSentEvents.gen';\nimport type { HttpMethod } from '../core/types.gen';\nimport { getValidRequestBody } from '../core/utils.gen';\nimport type { Client, Config, RequestOptions, ResolvedRequestOptions } from './types.gen';\nimport {\n buildUrl,\n createConfig,\n createInterceptors,\n getParseAs,\n mergeConfigs,\n mergeHeaders,\n setAuthParams,\n} from './utils.gen';\n\ntype ReqInit = Omit<RequestInit, 'body' | 'headers'> & {\n body?: any;\n headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n let _config = mergeConfigs(createConfig(), config);\n\n const getConfig = (): Config => ({ ..._config });\n\n const setConfig = (config: Config): Config => {\n _config = mergeConfigs(_config, config);\n return getConfig();\n };\n\n const interceptors = createInterceptors<Request, Response, unknown, ResolvedRequestOptions>();\n\n const beforeRequest = async <\n TData = unknown,\n TResponseStyle extends 'data' | 'fields' = 'fields',\n ThrowOnError extends boolean = boolean,\n Url extends string = string,\n >(\n options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,\n ) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: undefined as string | undefined,\n };\n\n if (opts.security) {\n await setAuthParams(opts);\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === '') {\n opts.headers.delete('Content-Type');\n }\n\n const resolvedOpts = opts as typeof opts &\n ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;\n const url = buildUrl(resolvedOpts);\n\n return { opts: resolvedOpts, url };\n };\n\n const request: Client['request'] = async (options) => {\n const throwOnError = options.throwOnError ?? _config.throwOnError;\n const responseStyle = options.responseStyle ?? _config.responseStyle;\n\n let request: Request | undefined;\n let response: Response | undefined;\n\n try {\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: 'follow',\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n request = new Request(url, requestInit);\n\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n\n response = await _fetch(request);\n\n for (const fn of interceptors.response.fns) {\n if (fn) {\n response = await fn(response, request, opts);\n }\n }\n\n const result = {\n request,\n response,\n };\n\n if (response.ok) {\n const parseAs =\n (opts.parseAs === 'auto'\n ? getParseAs(response.headers.get('Content-Type'))\n : opts.parseAs) ?? 'json';\n\n if (response.status === 204 || response.headers.get('Content-Length') === '0') {\n let emptyData: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'text':\n emptyData = await response[parseAs]();\n break;\n case 'formData':\n emptyData = new FormData();\n break;\n case 'stream':\n emptyData = response.body;\n break;\n case 'json':\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === 'data'\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'formData':\n case 'text':\n data = await response[parseAs]();\n break;\n case 'json': {\n // Some servers return 200 with no Content-Length and empty body.\n // response.json() would throw; read as text and parse if non-empty.\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n break;\n }\n case 'stream':\n return opts.responseStyle === 'data'\n ? response.body\n : {\n data: response.body,\n ...result,\n };\n }\n\n if (parseAs === 'json') {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n\n return opts.responseStyle === 'data'\n ? data\n : {\n data,\n ...result,\n };\n }\n\n const textError = await response.text();\n let jsonError: unknown;\n\n try {\n jsonError = JSON.parse(textError);\n } catch {\n // noop\n }\n\n throw jsonError ?? textError;\n } catch (error) {\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = await fn(finalError, response, request, options as ResolvedRequestOptions);\n }\n }\n\n finalError = finalError || {};\n\n if (throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n request,\n response,\n };\n }\n };\n\n const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn = (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n serializedBody: getValidRequestBody(opts) as BodyInit | null | undefined,\n url,\n });\n };\n\n const _buildUrl: Client['buildUrl'] = (options) => buildUrl({ ..._config, ...options });\n\n return {\n buildUrl: _buildUrl,\n connect: makeMethodFn('CONNECT'),\n delete: makeMethodFn('DELETE'),\n get: makeMethodFn('GET'),\n getConfig,\n head: makeMethodFn('HEAD'),\n interceptors,\n options: makeMethodFn('OPTIONS'),\n patch: makeMethodFn('PATCH'),\n post: makeMethodFn('POST'),\n put: makeMethodFn('PUT'),\n request,\n setConfig,\n sse: {\n connect: makeSseFn('CONNECT'),\n delete: makeSseFn('DELETE'),\n get: makeSseFn('GET'),\n head: makeSseFn('HEAD'),\n options: makeSseFn('OPTIONS'),\n patch: makeSseFn('PATCH'),\n post: makeSseFn('POST'),\n put: makeSseFn('PUT'),\n trace: makeSseFn('TRACE'),\n },\n trace: makeMethodFn('TRACE'),\n } as Client;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type Client, type ClientOptions, type Config, createClient, createConfig } from './client';\nimport type { ClientOptions as ClientOptions2 } from './types.gen';\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (override?: Config<ClientOptions & T>) => Config<Required<ClientOptions> & T>;\n\nexport const client: Client = createClient(createConfig<ClientOptions2>());\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Client, ClientMeta, Options as Options2, RequestResult, TDataShape } from './client';\nimport { client } from './client.gen';\nimport type { AdminUsersDisableData, AdminUsersDisableErrors, AdminUsersDisableResponses, AdminUsersEnableData, AdminUsersEnableErrors, AdminUsersEnableResponses, AdminUsersListData, AdminUsersListErrors, AdminUsersListResponses, ApiKeysCreateData, ApiKeysCreateErrors, ApiKeysCreateResponses, ApiKeysListData, ApiKeysListErrors, ApiKeysListResponses, ApiKeysRevokeData, ApiKeysRevokeErrors, ApiKeysRevokeResponses, AttachmentsCompleteData, AttachmentsCompleteErrors, AttachmentsCompleteResponses, AttachmentsPresignData, AttachmentsPresignErrors, AttachmentsPresignResponses, ConfigGetData, ConfigGetErrors, ConfigGetResponses, DeletionsGetData, DeletionsGetErrors, DeletionsGetResponses, EventsSendData, EventsSendErrors, EventsSendResponses, HandoffsCreateData, HandoffsCreateErrors, HandoffsCreateResponses, HandoffsGetData, HandoffsGetErrors, HandoffsGetResponses, KnownIssuesConfirmData, KnownIssuesConfirmErrors, KnownIssuesConfirmResponses, KnownIssuesCreateData, KnownIssuesCreateErrors, KnownIssuesCreateResponses, KnownIssuesGetData, KnownIssuesGetErrors, KnownIssuesGetResponses, KnownIssuesList2Data, KnownIssuesList2Errors, KnownIssuesList2Responses, KnownIssuesListData, KnownIssuesListErrors, KnownIssuesListResponses, KnownIssuesUpdateData, KnownIssuesUpdateErrors, KnownIssuesUpdateResponses, MeGetData, MeGetErrors, MeGetResponses, ProductsCreateData, ProductsCreateErrors, ProductsCreateResponses, ProductsListData, ProductsListErrors, ProductsListResponses, ProductsRevokeKeyData, ProductsRevokeKeyErrors, ProductsRevokeKeyResponses, ProductsRotateKeyData, ProductsRotateKeyErrors, ProductsRotateKeyResponses, ProductsUpdateData, ProductsUpdateErrors, ProductsUpdateResponses, ProgramsAcceptData, ProgramsAcceptErrors, ProgramsAcceptResponses, ProgramsCloseData, ProgramsCloseErrors, ProgramsCloseResponses, ProgramsCompleteTaskData, ProgramsCompleteTaskErrors, ProgramsCompleteTaskResponses, ProgramsCreateData, ProgramsCreateErrors, ProgramsCreateResponses, ProgramsDeclineData, ProgramsDeclineErrors, ProgramsDeclineResponses, ProgramsFlagConfirmedData, ProgramsFlagConfirmedErrors, ProgramsFlagConfirmedResponses, ProgramsGetData, ProgramsGetErrors, ProgramsGetReportData, ProgramsGetReportErrors, ProgramsGetReportResponses, ProgramsGetResponses, ProgramsInviteData, ProgramsInviteErrors, ProgramsInviteResponses, ProgramsListData, ProgramsListErrors, ProgramsListInvitationsData, ProgramsListInvitationsErrors, ProgramsListInvitationsResponses, ProgramsListMineData, ProgramsListMineErrors, ProgramsListMineResponses, ProgramsListParticipantsData, ProgramsListParticipantsErrors, ProgramsListParticipantsResponses, ProgramsListResponses, ProgramsReportData, ProgramsReportErrors, ProgramsReportResponses, ProgramsRespondData, ProgramsRespondErrors, ProgramsRespondResponses, ProgramsSegmentData, ProgramsSegmentErrors, ProgramsSegmentResponses, ProgramsUpdateData, ProgramsUpdateErrors, ProgramsUpdateResponses, ProgramsWithdrawData, ProgramsWithdrawErrors, ProgramsWithdrawResponses, SettingsGetData, SettingsGetErrors, SettingsGetResponses, SettingsUpdateData, SettingsUpdateErrors, SettingsUpdateResponses, StatsGetData, StatsGetErrors, StatsGetResponses, SubjectsRemoveData, SubjectsRemoveErrors, SubjectsRemoveResponses, SubmissionsAddNoteData, SubmissionsAddNoteErrors, SubmissionsAddNoteResponses, SubmissionsAttachmentUrlData, SubmissionsAttachmentUrlErrors, SubmissionsAttachmentUrlResponses, SubmissionsCountsData, SubmissionsCountsErrors, SubmissionsCountsResponses, SubmissionsCreateData, SubmissionsCreateErrors, SubmissionsCreateResponses, SubmissionsGetData, SubmissionsGetErrors, SubmissionsGetResponses, SubmissionsListData, SubmissionsListErrors, SubmissionsListMineData, SubmissionsListMineErrors, SubmissionsListMineResponses, SubmissionsListResponses, SubmissionsStatusData, SubmissionsStatusErrors, SubmissionsStatusResponses, SubmissionsUpdateData, SubmissionsUpdateErrors, SubmissionsUpdateResponses, SubmissionsUpdateStatusData, SubmissionsUpdateStatusErrors, SubmissionsUpdateStatusResponses, WebhooksCreateData, WebhooksCreateErrors, WebhooksCreateResponses, WebhooksGetData, WebhooksGetErrors, WebhooksGetResponses, WebhooksListData, WebhooksListDeliveriesData, WebhooksListDeliveriesErrors, WebhooksListDeliveriesResponses, WebhooksListErrors, WebhooksListResponses, WebhooksRemoveData, WebhooksRemoveErrors, WebhooksRemoveResponses, WebhooksRetryDeliveryData, WebhooksRetryDeliveryErrors, WebhooksRetryDeliveryResponses, WebhooksRotateSecretData, WebhooksRotateSecretErrors, WebhooksRotateSecretResponses, WebhooksTestData, WebhooksTestErrors, WebhooksTestResponses, WebhooksUpdateData, WebhooksUpdateErrors, WebhooksUpdateResponses, WebhooksVerifyData, WebhooksVerifyErrors, WebhooksVerifyResponses } from './types.gen';\n\nexport type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: keyof ClientMeta extends never ? Record<string, unknown> : ClientMeta;\n};\n\n/**\n * ApiKeys for Tenant-flaten, uten klartekst. Kun eier.\n */\nexport const apiKeysList = <ThrowOnError extends boolean = false>(options?: Options<ApiKeysListData, ThrowOnError>): RequestResult<ApiKeysListResponses, ApiKeysListErrors, ThrowOnError> => (options?.client ?? client).get<ApiKeysListResponses, ApiKeysListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/api-keys',\n ...options\n});\n\n/**\n * Oppretter en scopet ApiKey. Klarteksten finnes kun i denne responsen (DD-20). Kun eier.\n */\nexport const apiKeysCreate = <ThrowOnError extends boolean = false>(options: Options<ApiKeysCreateData, ThrowOnError>): RequestResult<ApiKeysCreateResponses, ApiKeysCreateErrors, ThrowOnError> => (options.client ?? client).post<ApiKeysCreateResponses, ApiKeysCreateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/api-keys',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Kaller tilbake. Kun eier.\n */\nexport const apiKeysRevoke = <ThrowOnError extends boolean = false>(options: Options<ApiKeysRevokeData, ThrowOnError>): RequestResult<ApiKeysRevokeResponses, ApiKeysRevokeErrors, ThrowOnError> => (options.client ?? client).delete<ApiKeysRevokeResponses, ApiKeysRevokeErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/api-keys/{id}',\n ...options\n});\n\n/**\n * Registeret (M2.4): alle kjente feil med tellere. Alle roller.\n */\nexport const knownIssuesList = <ThrowOnError extends boolean = false>(options?: Options<KnownIssuesListData, ThrowOnError>): RequestResult<KnownIssuesListResponses, KnownIssuesListErrors, ThrowOnError> => (options?.client ?? client).get<KnownIssuesListResponses, KnownIssuesListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/known-issues',\n ...options\n});\n\n/**\n * Oppretter en kjent feil, fra bunnen eller fra en sak («Gjør til kjent feil», f i innboksen). Med fromSubmissionId går saken til kjent_feil og teller i Reach. Behandler og eier.\n */\nexport const knownIssuesCreate = <ThrowOnError extends boolean = false>(options: Options<KnownIssuesCreateData, ThrowOnError>): RequestResult<KnownIssuesCreateResponses, KnownIssuesCreateErrors, ThrowOnError> => (options.client ?? client).post<KnownIssuesCreateResponses, KnownIssuesCreateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/known-issues',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Én kjent feil med tellere — hent den FØR PATCH til fikset, så panelet kan vise hvor mange som varsles (M2.4). Alle roller.\n */\nexport const knownIssuesGet = <ThrowOnError extends boolean = false>(options: Options<KnownIssuesGetData, ThrowOnError>): RequestResult<KnownIssuesGetResponses, KnownIssuesGetErrors, ThrowOnError> => (options.client ?? client).get<KnownIssuesGetResponses, KnownIssuesGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/known-issues/{id}',\n ...options\n});\n\n/**\n * Oppdaterer. status = fikset krever fixedIn (422 fixed_in_required), emitterer known_issue.fixed én gang til alle med Reach (DD-31) og tar sakene med knownIssueId til statusType complete. fikset → aktiv finnes ikke (409 invalid_status_transition). Behandler og eier.\n */\nexport const knownIssuesUpdate = <ThrowOnError extends boolean = false>(options: Options<KnownIssuesUpdateData, ThrowOnError>): RequestResult<KnownIssuesUpdateResponses, KnownIssuesUpdateErrors, ThrowOnError> => (options.client ?? client).patch<KnownIssuesUpdateResponses, KnownIssuesUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/known-issues/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Hvem er jeg — panelets første kall etter innlogging. Beviser at sesjonen har aal2 (ellers 403 mfa_required) og at brukeren har et sete hos en leietaker (ellers 401 — også når kontoen er deaktivert). Alle roller. Ingen skriving, ingen audit-oppføring.\n */\nexport const meGet = <ThrowOnError extends boolean = false>(options?: Options<MeGetData, ThrowOnError>): RequestResult<MeGetResponses, MeGetErrors, ThrowOnError> => (options?.client ?? client).get<MeGetResponses, MeGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/me',\n ...options\n});\n\n/**\n * Produktene med SDK-nøkler (kun prefiks). Alle roller.\n */\nexport const productsList = <ThrowOnError extends boolean = false>(options?: Options<ProductsListData, ThrowOnError>): RequestResult<ProductsListResponses, ProductsListErrors, ThrowOnError> => (options?.client ?? client).get<ProductsListResponses, ProductsListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/products',\n ...options\n});\n\n/**\n * Oppretter et produkt med én SDK-nøkkel; klarteksten står i keys[0].key og finnes aldri igjen (DD-20). Kun eier.\n */\nexport const productsCreate = <ThrowOnError extends boolean = false>(options: Options<ProductsCreateData, ThrowOnError>): RequestResult<ProductsCreateResponses, ProductsCreateErrors, ThrowOnError> => (options.client ?? client).post<ProductsCreateResponses, ProductsCreateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/products',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Oppdaterer navn, plattformer, bundle-ID-er og origins. Kun eier.\n */\nexport const productsUpdate = <ThrowOnError extends boolean = false>(options: Options<ProductsUpdateData, ThrowOnError>): RequestResult<ProductsUpdateResponses, ProductsUpdateErrors, ThrowOnError> => (options.client ?? client).patch<ProductsUpdateResponses, ProductsUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/products/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Roterer: oppretter en ny SDK-nøkkel ved siden av den gamle, så begge er gyldige til den gamle kalles tilbake (K3). Maks to aktive — finnes det allerede to, avvises rotasjonen med 409 invalid_status_transition; kall én tilbake først. Klarteksten kun her (DD-20). Kun eier.\n */\nexport const productsRotateKey = <ThrowOnError extends boolean = false>(options: Options<ProductsRotateKeyData, ThrowOnError>): RequestResult<ProductsRotateKeyResponses, ProductsRotateKeyErrors, ThrowOnError> => (options.client ?? client).post<ProductsRotateKeyResponses, ProductsRotateKeyErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/products/{id}/keys',\n ...options\n});\n\n/**\n * Kaller tilbake en SDK-nøkkel. Klienter med den nøkkelen får 401 fra neste kall. Kun eier.\n */\nexport const productsRevokeKey = <ThrowOnError extends boolean = false>(options: Options<ProductsRevokeKeyData, ThrowOnError>): RequestResult<ProductsRevokeKeyResponses, ProductsRevokeKeyErrors, ThrowOnError> => (options.client ?? client).delete<ProductsRevokeKeyResponses, ProductsRevokeKeyErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/products/{id}/keys/{keyId}',\n ...options\n});\n\n/**\n * Alle programmer. Alle roller.\n */\nexport const programsList = <ThrowOnError extends boolean = false>(options?: Options<ProgramsListData, ThrowOnError>): RequestResult<ProgramsListResponses, ProgramsListErrors, ThrowOnError> => (options?.client ?? client).get<ProgramsListResponses, ProgramsListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs',\n ...options\n});\n\n/**\n * Oppretter program i utkast (4a). Ved minorsPresent tvinges commitmentFree og termsUrl avvises (422 minors_present_conflict); maxContacts over leietakerens tak gir 422 contacts_exceed_tenant_cap. Behandler og eier.\n */\nexport const programsCreate = <ThrowOnError extends boolean = false>(options: Options<ProgramsCreateData, ThrowOnError>): RequestResult<ProgramsCreateResponses, ProgramsCreateErrors, ThrowOnError> => (options.client ?? client).post<ProgramsCreateResponses, ProgramsCreateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Programsiden (4c) med tellere. Alle roller.\n */\nexport const programsGet = <ThrowOnError extends boolean = false>(options: Options<ProgramsGetData, ThrowOnError>): RequestResult<ProgramsGetResponses, ProgramsGetErrors, ThrowOnError> => (options.client ?? client).get<ProgramsGetResponses, ProgramsGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}',\n ...options\n});\n\n/**\n * Oppdaterer og flytter status. aapen krever hypotese, suksesskriterium og ≥ 1 oppgave med estimatedMinutes — 409 program_incomplete med hva som mangler (forklart lås, DD-17). avbrutt krever cancelReason og emitterer program.closed. aktiv kan ikke settes herfra. Oppgaver kan ikke endres etter aapen. Behandler og eier.\n */\nexport const programsUpdate = <ThrowOnError extends boolean = false>(options: Options<ProgramsUpdateData, ThrowOnError>): RequestResult<ProgramsUpdateResponses, ProgramsUpdateErrors, ThrowOnError> => (options.client ?? client).patch<ProgramsUpdateResponses, ProgramsUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Utsendte invitasjoner uten token — sendt, akseptert, avslått, utløpt. Alle roller.\n */\nexport const programsListInvitations = <ThrowOnError extends boolean = false>(options: Options<ProgramsListInvitationsData, ThrowOnError>): RequestResult<ProgramsListInvitationsResponses, ProgramsListInvitationsErrors, ThrowOnError> => (options.client ?? client).get<ProgramsListInvitationsResponses, ProgramsListInvitationsErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}/invitations',\n ...options\n});\n\n/**\n * Inviterer pseudonymer (4b). Krever aapen (409 invalid_status_transition). Tokenet finnes i denne responsen og i webhooken program.invitation_created (én per invitasjon) — aldri i noe GET-svar. Leietakeren løser subject → bruker og sender tokenet gjennom egen kanal; plattformen sender aldri (DD-12). Et subject med aktiv invitasjon roterer: nytt token, det gamle slutter å virke. Behandler og eier.\n */\nexport const programsInvite = <ThrowOnError extends boolean = false>(options: Options<ProgramsInviteData, ThrowOnError>): RequestResult<ProgramsInviteResponses, ProgramsInviteErrors, ThrowOnError> => (options.client ?? client).post<ProgramsInviteResponses, ProgramsInviteErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}/invitations',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Deltakerne med flaggstatus (DD-36): «invitert, ikke slått på» og «trukket, flagg ikke bekreftet av» er egne tilstander. Ingen sortering på aktivitet, ingen score (DD-38). Alle roller.\n */\nexport const programsListParticipants = <ThrowOnError extends boolean = false>(options: Options<ProgramsListParticipantsData, ThrowOnError>): RequestResult<ProgramsListParticipantsResponses, ProgramsListParticipantsErrors, ThrowOnError> => (options.client ?? client).get<ProgramsListParticipantsResponses, ProgramsListParticipantsErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}/participants',\n ...options\n});\n\n/**\n * Den frosne rapporten. 404 report_not_found før programmet er avsluttet. Alle roller.\n */\nexport const programsGetReport = <ThrowOnError extends boolean = false>(options: Options<ProgramsGetReportData, ThrowOnError>): RequestResult<ProgramsGetReportResponses, ProgramsGetReportErrors, ThrowOnError> => (options.client ?? client).get<ProgramsGetReportResponses, ProgramsGetReportErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}/report',\n ...options\n});\n\n/**\n * Avslutter programmet og fryser rapporten (4d, DD-35). Krever avsluttes eller aktiv (409 invalid_status_transition); allerede fryst gir 409 report_frozen. Under 30 svar: dataLimitations kan ikke være tom (422 data_limitations_required) og payload har ingen prosent. Emitterer program.closed. Samme tall går til testerens takk. Behandler og eier.\n */\nexport const programsClose = <ThrowOnError extends boolean = false>(options: Options<ProgramsCloseData, ThrowOnError>): RequestResult<ProgramsCloseResponses, ProgramsCloseErrors, ThrowOnError> => (options.client ?? client).post<ProgramsCloseResponses, ProgramsCloseErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}/report',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Leietakerens innstillinger (5d) inkludert community-sjekklisten med rødt/grønt per krav (DD-18). Ingen hemmeligheter (DD-20). Alle roller.\n */\nexport const settingsGet = <ThrowOnError extends boolean = false>(options?: Options<SettingsGetData, ThrowOnError>): RequestResult<SettingsGetResponses, SettingsGetErrors, ThrowOnError> => (options?.client ?? client).get<SettingsGetResponses, SettingsGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/settings',\n ...options\n});\n\n/**\n * Oppdaterer innstillinger. Kun eier. minorsPresent = true strammer alt i samme forespørsel; en verdi som strider mot minorsPresent gir 422 minors_present_conflict med feltet i meldingen (K18). Frist og kontakter kan senkes, aldri heves over 90 / 3.\n */\nexport const settingsUpdate = <ThrowOnError extends boolean = false>(options: Options<SettingsUpdateData, ThrowOnError>): RequestResult<SettingsUpdateResponses, SettingsUpdateErrors, ThrowOnError> => (options.client ?? client).patch<SettingsUpdateResponses, SettingsUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/settings',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Leietakerens egne tall for de siste ukene (M4.2, maaling.md): statusflyt inn/ut per uke, tragten i widgeten, innsendinger og anonyme per uke, SDK-versjonsspredning, sløyfen ut, saker per adminøkt og gjentakende innsendere. Tellinger, aldri prosent — panelet regner, og aldri under 30 (DD-16). Regnes ved oppslag. Alle roller.\n */\nexport const statsGet = <ThrowOnError extends boolean = false>(options?: Options<StatsGetData, ThrowOnError>): RequestResult<StatsGetResponses, StatsGetErrors, ThrowOnError> => (options?.client ?? client).get<StatsGetResponses, StatsGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/stats',\n ...options\n});\n\n/**\n * Innboksen og Saker (DD-01, DD-11). Uten filter: alt. statusType = reviewing er innboksen; overdue og inactive gir «Avgjør nå» og DD-25-varslene. Sortering: overdue først, så inactive, så eldst først — de tre eldste uten aktivitet teller på toppen. Alle roller.\n */\nexport const submissionsList = <ThrowOnError extends boolean = false>(options?: Options<SubmissionsListData, ThrowOnError>): RequestResult<SubmissionsListResponses, SubmissionsListErrors, ThrowOnError> => (options?.client ?? client).get<SubmissionsListResponses, SubmissionsListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions',\n ...options\n});\n\n/**\n * Tellingen som ER forsiden: «40 til vurdering · 3 uten aktivitet · 3 over frist» (DD-01, DD-52). Alle roller.\n */\nexport const submissionsCounts = <ThrowOnError extends boolean = false>(options?: Options<SubmissionsCountsData, ThrowOnError>): RequestResult<SubmissionsCountsResponses, SubmissionsCountsErrors, ThrowOnError> => (options?.client ?? client).get<SubmissionsCountsResponses, SubmissionsCountsErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions/counts',\n ...options\n});\n\n/**\n * Saken i detalj, med notater, svar, dedupe-forslag (maks tre, null hvis tjenesten ikke svarte) og vedleggsmetadata. Åpning av detaljen logges (AuditEntry: hvem så hvilken innsending). Alle roller.\n */\nexport const submissionsGet = <ThrowOnError extends boolean = false>(options: Options<SubmissionsGetData, ThrowOnError>): RequestResult<SubmissionsGetResponses, SubmissionsGetErrors, ThrowOnError> => (options.client ?? client).get<SubmissionsGetResponses, SubmissionsGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions/{id}',\n ...options\n});\n\n/**\n * Triage i én forespørsel — status, sammenslåing, kjent feil, frist, svar. Reglene står på SubmissionUpdate. Behandler og eier. Emitterer submission.status_changed og/eller submission.replied via webhook; en sammenslåing emitterer INGENTING (DD-24). Svaret er saken etter endringen.\n */\nexport const submissionsUpdate = <ThrowOnError extends boolean = false>(options: Options<SubmissionsUpdateData, ThrowOnError>): RequestResult<SubmissionsUpdateResponses, SubmissionsUpdateErrors, ThrowOnError> => (options.client ?? client).patch<SubmissionsUpdateResponses, SubmissionsUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Korttidsgyldig URL til sakens skjermbilde. Logges som «åpnet skjermbilde» (rapport 5). 404 attachment_not_found når saken ikke har vedlegg eller det ikke er ferdig behandlet. Alle roller.\n */\nexport const submissionsAttachmentUrl = <ThrowOnError extends boolean = false>(options: Options<SubmissionsAttachmentUrlData, ThrowOnError>): RequestResult<SubmissionsAttachmentUrlResponses, SubmissionsAttachmentUrlErrors, ThrowOnError> => (options.client ?? client).get<SubmissionsAttachmentUrlResponses, SubmissionsAttachmentUrlErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions/{id}/attachment-url',\n ...options\n});\n\n/**\n * Internt notat — standardfeltet behandleren skriver i (DD-23). Forlater aldri panelet. Oppdaterer lastActivityAt. Behandler og eier.\n */\nexport const submissionsAddNote = <ThrowOnError extends boolean = false>(options: Options<SubmissionsAddNoteData, ThrowOnError>): RequestResult<SubmissionsAddNoteResponses, SubmissionsAddNoteErrors, ThrowOnError> => (options.client ?? client).post<SubmissionsAddNoteResponses, SubmissionsAddNoteErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions/{id}/notes',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Leietakerens panelbrukere, også de deaktiverte. Kun eier.\n */\nexport const adminUsersList = <ThrowOnError extends boolean = false>(options?: Options<AdminUsersListData, ThrowOnError>): RequestResult<AdminUsersListResponses, AdminUsersListErrors, ThrowOnError> => (options?.client ?? client).get<AdminUsersListResponses, AdminUsersListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/users',\n ...options\n});\n\n/**\n * Deaktiverer kontoen. Brukerens neste admin-kall gir 401 unauthenticated uansett hvor ferskt Supabase-tokenet er — sesjonen overlever ikke. Raden står, og alt hun gjorde er fortsatt sporbart. Idempotent: en alt deaktivert konto gir 204. Egen konto gir 409 cannot_disable_self — det er regelen som garanterer minst én aktiv eier. Kun eier. AuditEntry admin_user.disabled.\n */\nexport const adminUsersDisable = <ThrowOnError extends boolean = false>(options: Options<AdminUsersDisableData, ThrowOnError>): RequestResult<AdminUsersDisableResponses, AdminUsersDisableErrors, ThrowOnError> => (options.client ?? client).post<AdminUsersDisableResponses, AdminUsersDisableErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/users/{id}/disable',\n ...options\n});\n\n/**\n * Reaktiverer en deaktivert konto. Idempotent: en aktiv konto gir 204. Kun eier. AuditEntry admin_user.enabled.\n */\nexport const adminUsersEnable = <ThrowOnError extends boolean = false>(options: Options<AdminUsersEnableData, ThrowOnError>): RequestResult<AdminUsersEnableResponses, AdminUsersEnableErrors, ThrowOnError> => (options.client ?? client).post<AdminUsersEnableResponses, AdminUsersEnableErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/users/{id}/enable',\n ...options\n});\n\n/**\n * Registrerte webhooks. Alle roller.\n */\nexport const webhooksList = <ThrowOnError extends boolean = false>(options?: Options<WebhooksListData, ThrowOnError>): RequestResult<WebhooksListResponses, WebhooksListErrors, ThrowOnError> => (options?.client ?? client).get<WebhooksListResponses, WebhooksListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks',\n ...options\n});\n\n/**\n * Registrerer en mottaker. Opprettes inaktiv og uverifisert; secret finnes kun her (DD-20). https påkrevd, private nett avvises (400 validation_failed). Kun eier.\n */\nexport const webhooksCreate = <ThrowOnError extends boolean = false>(options: Options<WebhooksCreateData, ThrowOnError>): RequestResult<WebhooksCreateResponses, WebhooksCreateErrors, ThrowOnError> => (options.client ?? client).post<WebhooksCreateResponses, WebhooksCreateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Sletter webhooken og dens leveringslogg. Kun eier.\n */\nexport const webhooksRemove = <ThrowOnError extends boolean = false>(options: Options<WebhooksRemoveData, ThrowOnError>): RequestResult<WebhooksRemoveResponses, WebhooksRemoveErrors, ThrowOnError> => (options.client ?? client).delete<WebhooksRemoveResponses, WebhooksRemoveErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}',\n ...options\n});\n\n/**\n * Én webhook. Alle roller.\n */\nexport const webhooksGet = <ThrowOnError extends boolean = false>(options: Options<WebhooksGetData, ThrowOnError>): RequestResult<WebhooksGetResponses, WebhooksGetErrors, ThrowOnError> => (options.client ?? client).get<WebhooksGetResponses, WebhooksGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}',\n ...options\n});\n\n/**\n * Oppdaterer. Ny url nullstiller verifiseringen; active = true krever verifisert (409 webhook_not_verified). Kun eier.\n */\nexport const webhooksUpdate = <ThrowOnError extends boolean = false>(options: Options<WebhooksUpdateData, ThrowOnError>): RequestResult<WebhooksUpdateResponses, WebhooksUpdateErrors, ThrowOnError> => (options.client ?? client).patch<WebhooksUpdateResponses, WebhooksUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Leveringsloggen. status = dead er dead-letter-listen som skal være synlig i panelet (låst). Alle roller.\n */\nexport const webhooksListDeliveries = <ThrowOnError extends boolean = false>(options: Options<WebhooksListDeliveriesData, ThrowOnError>): RequestResult<WebhooksListDeliveriesResponses, WebhooksListDeliveriesErrors, ThrowOnError> => (options.client ?? client).get<WebhooksListDeliveriesResponses, WebhooksListDeliveriesErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}/deliveries',\n ...options\n});\n\n/**\n * Prøver en dead-letter-levering på nytt, én gang, med samme event_id (idempotent hos mottakeren). Krever status dead (409 invalid_status_transition). Behandler og eier.\n */\nexport const webhooksRetryDelivery = <ThrowOnError extends boolean = false>(options: Options<WebhooksRetryDeliveryData, ThrowOnError>): RequestResult<WebhooksRetryDeliveryResponses, WebhooksRetryDeliveryErrors, ThrowOnError> => (options.client ?? client).post<WebhooksRetryDeliveryResponses, WebhooksRetryDeliveryErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}/deliveries/{deliveryId}/retry',\n ...options\n});\n\n/**\n * Roterer secret. Den nye finnes kun i denne responsen; den gamle er ugyldig straks. Kun eier.\n */\nexport const webhooksRotateSecret = <ThrowOnError extends boolean = false>(options: Options<WebhooksRotateSecretData, ThrowOnError>): RequestResult<WebhooksRotateSecretResponses, WebhooksRotateSecretErrors, ThrowOnError> => (options.client ?? client).post<WebhooksRotateSecretResponses, WebhooksRotateSecretErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}/rotate-secret',\n ...options\n});\n\n/**\n * Testknappen (5d): sender en signert webhook.test-hendelse synkront, ett forsøk, ingen retry. Krever verifisert (409 webhook_not_verified). Behandler og eier.\n */\nexport const webhooksTest = <ThrowOnError extends boolean = false>(options: Options<WebhooksTestData, ThrowOnError>): RequestResult<WebhooksTestResponses, WebhooksTestErrors, ThrowOnError> => (options.client ?? client).post<WebhooksTestResponses, WebhooksTestErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}/test',\n ...options\n});\n\n/**\n * Verifiserer URL-en: sender en signert webhook.verify-hendelse med et engangs-challenge og krever at mottakeren svarer 2xx med challenge-verdien i kroppen. ok = true setter verifiedAt. Kun eier.\n */\nexport const webhooksVerify = <ThrowOnError extends boolean = false>(options: Options<WebhooksVerifyData, ThrowOnError>): RequestResult<WebhooksVerifyResponses, WebhooksVerifyErrors, ThrowOnError> => (options.client ?? client).post<WebhooksVerifyResponses, WebhooksVerifyErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}/verify',\n ...options\n});\n\n/**\n * Presigned PUT mot R2 (EU) for ett skjermbilde, maskert på klienten før dette kallet (K4). Tallene sjekkes her (413 attachment_too_large, 415 attachment_type_not_allowed) og på nytt server-side før dekoding (K9). 403 screenshots_disabled når leietakeren har skjermbilde av eller minorsPresent. Innsendingen må tilhøre kalleren — samme subject, eller anonymt: en anonym innsending med kjent submissionId (UUIDv7, kun gitt til skaperen) — og være opprettet for høyst 15 minutter siden (DD-42: vedlegget følger rett etter teksten, og skjermbilde køes aldri). Ellers 404 submission_not_found. Ett vedlegg per innsending (409 attachment_already_uploaded).\n */\nexport const attachmentsPresign = <ThrowOnError extends boolean = false>(options: Options<AttachmentsPresignData, ThrowOnError>): RequestResult<AttachmentsPresignResponses, AttachmentsPresignErrors, ThrowOnError> => (options.client ?? client).post<AttachmentsPresignResponses, AttachmentsPresignErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/attachments/presign',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Klienten melder at PUT-en er ferdig. Starter verifisering og re-enkoding i isolert prosess; svarer straks. Feiler verifiseringen etterpå, slettes objektet og innsendingen står uten vedlegg — kvitteringen i klienten har allerede sagt «teksten din er lagret» (DD-42). Tillegg utover briefens liste: uten et signal må plattformen polle R2.\n */\nexport const attachmentsComplete = <ThrowOnError extends boolean = false>(options: Options<AttachmentsCompleteData, ThrowOnError>): RequestResult<AttachmentsCompleteResponses, AttachmentsCompleteErrors, ThrowOnError> => (options.client ?? client).post<AttachmentsCompleteResponses, AttachmentsCompleteErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/attachments/{id}/complete',\n ...options\n});\n\n/**\n * Leietakerens klientkonfigurasjon for produktet nøkkelen tilhører (M2.5): tegngrense, minste antall tegn, skjermbilde-steg og personvernlenke — det SDK-et ellers måtte få duplisert i init(). Virker anonymt. Klienten henter ved hver åpning av widgeten, aldri i bakgrunnen, og faller tilbake på de strammeste verdiene (140 · 10 · av) når kallet ikke svarer. Tillegg utover M0.1: teknisk gjeld fra M1.2, eid av M2.5.\n */\nexport const configGet = <ThrowOnError extends boolean = false>(options?: Options<ConfigGetData, ThrowOnError>): RequestResult<ConfigGetResponses, ConfigGetErrors, ThrowOnError> => (options?.client ?? client).get<ConfigGetResponses, ConfigGetErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/config',\n ...options\n});\n\n/**\n * Målemodellens hendelser fra SDK-et (M4.2, maaling.md) — plattformens eget mottak, aldri en tredjepart (K19). ALLTID anonymt: et feedback-token ignoreres, og subject lagres aldri. Kroppen er lukket — ingen tekst, ingen enhets-ID, ingen IP (IP holdes kun i minne for rate limiting, K15). Svarer 202 og lagrer beste-innsats; klienten sender bunter og prøver aldri på nytt, for hendelsene er tellinger, ikke innhold. Rate-limitet per nøkkel og IP.\n */\nexport const eventsSend = <ThrowOnError extends boolean = false>(options: Options<EventsSendData, ThrowOnError>): RequestResult<EventsSendResponses, EventsSendErrors, ThrowOnError> => (options.client ?? client).post<EventsSendResponses, EventsSendErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/events',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Svarer på en oppfølging med spørsmål («Hvordan gikk det?» eller sjekkpunkt): tre lukkede valg og valgfri setning. Én Response per FollowUp (409 follow_up_already_answered). Bare kind = hvordan_gikk_det og sjekkpunkt tar svar — en påminnelse eller et tilbud om utgang gir 409 follow_up_not_answerable. Oppfølgingen må være emittert til kallerens subject (404 follow_up_not_found). Deltakelsen går til fullfoert når alle oppgavene er gjort og ingen oppfølging står planlagt eller ubesvart. Svarprosenten i rapporten måles mot de emitterte oppfølgingene som tar svar.\n */\nexport const programsRespond = <ThrowOnError extends boolean = false>(options: Options<ProgramsRespondData, ThrowOnError>): RequestResult<ProgramsRespondResponses, ProgramsRespondErrors, ThrowOnError> => (options.client ?? client).post<ProgramsRespondResponses, ProgramsRespondErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/follow-ups/{id}/respond',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * RESERVERT v2. TV-klienten oppretter en overleveringsøkt: kontekst inn, id + URL + QR som SVG ut. Lever 10 min, brukes én gang. Virker anonymt — identiteten avgjøres på mobilen. Konteksten slettes når økten utløper uten innsending.\n */\nexport const handoffsCreate = <ThrowOnError extends boolean = false>(options: Options<HandoffsCreateData, ThrowOnError>): RequestResult<HandoffsCreateResponses, HandoffsCreateErrors, ThrowOnError> => (options.client ?? client).post<HandoffsCreateResponses, HandoffsCreateErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/handoffs',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * RESERVERT v2. Mobilen henter TV-ens kontekst for å vise den fjernbar linje for linje (DD-05) og sende som vanlig med handoffId. Ukjent, utløpt eller brukt → 404 handoff_invalid.\n */\nexport const handoffsGet = <ThrowOnError extends boolean = false>(options: Options<HandoffsGetData, ThrowOnError>): RequestResult<HandoffsGetResponses, HandoffsGetErrors, ThrowOnError> => (options.client ?? client).get<HandoffsGetResponses, HandoffsGetErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/handoffs/{id}',\n ...options\n});\n\n/**\n * Aksepterer invitasjonen etter forventningsavklaringen (DD-13, DD-32). Tokenet i stien er engangs og ≤ 14 dager; det må være utstedt til kallerens subject — feil subject, ukjent, utløpt eller brukt gir alle 404 invitation_invalid. Gjentak fra samme subject er idempotent (200 med deltakelsen). Programmet må være aapen eller aktiv (409 invalid_status_transition), og ikke fullt (409 program_full). Avslått først → 409 invitation_already_answered. Emitterer program.participant_joined.\n */\nexport const programsAccept = <ThrowOnError extends boolean = false>(options: Options<ProgramsAcceptData, ThrowOnError>): RequestResult<ProgramsAcceptResponses, ProgramsAcceptErrors, ThrowOnError> => (options.client ?? client).post<ProgramsAcceptResponses, ProgramsAcceptErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/invitations/{token}/accept',\n ...options\n});\n\n/**\n * Avslår invitasjonen — invitation_declined i målemodellen og status avslaatt i panelet. Ingen årsak spørres (idébank). Samme 404-regel som accept. Akseptert først → 409 invitation_already_answered: et nei etter ja er «Gå ut», ikke avslag. Tillegg utover briefens liste: uten det finnes ikke status avslaatt.\n */\nexport const programsDecline = <ThrowOnError extends boolean = false>(options: Options<ProgramsDeclineData, ThrowOnError>): RequestResult<ProgramsDeclineResponses, ProgramsDeclineErrors, ThrowOnError> => (options.client ?? client).post<ProgramsDeclineResponses, ProgramsDeclineErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/invitations/{token}/decline',\n ...options\n});\n\n/**\n * Kjente feil for skjerm og versjon — vises FØR feltet i feilsporet (DD-03, differensiatoren). Maks tre kort, kun status aktiv eller fikset med appVersion ≤ fixedIn (DD-30), kun visibleInWidget. Virker anonymt. Tom liste er et gyldig svar og gir ingen kort, ikke en tomtilstand.\n */\nexport const knownIssuesList2 = <ThrowOnError extends boolean = false>(options?: Options<KnownIssuesList2Data, ThrowOnError>): RequestResult<KnownIssuesList2Responses, KnownIssuesList2Errors, ThrowOnError> => (options?.client ?? client).get<KnownIssuesList2Responses, KnownIssuesList2Errors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/known-issues',\n ...options\n});\n\n/**\n * «Ja, jeg også» (DD-29): oppretter en Submission med status kjent_feil, uten tekst, som øker Reach uten ny sak. Kortet må være synlig for kalleren (ellers 404 known_issue_not_found). Med token: én per (subject, knownIssue) — gjentak returnerer den eksisterende med 200. Anonymt: teller i anonymousCount. Erstatter briefens «POST submissions/{id}/confirm-known-issue», der {id} var tvetydig — her er det den kjente feilen.\n */\nexport const knownIssuesConfirm = <ThrowOnError extends boolean = false>(options: Options<KnownIssuesConfirmData, ThrowOnError>): RequestResult<KnownIssuesConfirmResponses, KnownIssuesConfirmErrors, ThrowOnError> => (options.client ?? client).post<KnownIssuesConfirmResponses, KnownIssuesConfirmErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/known-issues/{id}/confirm',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * «Gå ut» — alltid synlig i fanen (DD-36). Deltakelsen går til trukket, subjektet forsvinner fra segmentet i samme transaksjon, program.segment_changed og program.participant_withdrawn emitteres, og ingen flere kontakter sendes. Idempotent: allerede trukket gir 200. Tillegg utover briefens liste: DD-36 krever den.\n */\nexport const programsWithdraw = <ThrowOnError extends boolean = false>(options: Options<ProgramsWithdrawData, ThrowOnError>): RequestResult<ProgramsWithdrawResponses, ProgramsWithdrawErrors, ThrowOnError> => (options.client ?? client).post<ProgramsWithdrawResponses, ProgramsWithdrawErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/participations/{id}/withdraw',\n ...options\n});\n\n/**\n * Alt om betaprogram for kallerens subject — SDK-ets programs.list(): egne invitasjoner (til banneret, DD-12), deltakelser med oppgavestatus (fanen), og oppfølginger som venter på svar. Ett kall, fordi SDK-et spør ved åpning av widgeten og aldri i bakgrunnen.\n */\nexport const programsListMine = <ThrowOnError extends boolean = false>(options?: Options<ProgramsListMineData, ThrowOnError>): RequestResult<ProgramsListMineResponses, ProgramsListMineErrors, ThrowOnError> => (options?.client ?? client).get<ProgramsListMineResponses, ProgramsListMineErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/programs',\n ...options\n});\n\n/**\n * «Mine innspill» (DD-27, DD-41): kallerens egne innsendinger, nyeste først, med status, løfte-grunnlag og svar. Krever token (401 feedback_token_required uten) — anonym modus har ingen liste. Kjente-feil-bekreftelser er med (tom tekst, knownIssue satt). Tillegg utover briefens liste: portalen kan ikke holde id-er lokalt.\n */\nexport const submissionsListMine = <ThrowOnError extends boolean = false>(options?: Options<SubmissionsListMineData, ThrowOnError>): RequestResult<SubmissionsListMineResponses, SubmissionsListMineErrors, ThrowOnError> => (options?.client ?? client).get<SubmissionsListMineResponses, SubmissionsListMineErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/submissions',\n ...options\n});\n\n/**\n * Innsendingen. Diskriminert på type: feil kan bære correlation og relatedKnownIssueId; onske kan ikke — et slikt felt gir 400 unknown_field. Teksten er ferdig lagret når 201 kommer; et skjermbilde legges til etterpå via Attachments og kan feile alene (DD-42).\n *\n * Server-side: subject fra tokenet (null uten token), context lest ved feltnavn mot hvitelisten (ukjent → 400 unknown_field, K5), text mot leietakerens min/max (400 text_too_short / text_too_long), correlation mot deklarerte kind (400 correlation_invalid), programId krever token og aktiv deltakelse (404 program_not_found ellers). Samme clientRef fra samme subject innen 24 t gir 200 med den eksisterende — offline-køen kan trygt prøve igjen.\n *\n * Status er alltid ny ved 201. Kvitteringen lover per spor (DD-07); løfteteksten står i klienten.\n */\nexport const submissionsCreate = <ThrowOnError extends boolean = false>(options: Options<SubmissionsCreateData, ThrowOnError>): RequestResult<SubmissionsCreateResponses, SubmissionsCreateErrors, ThrowOnError> => (options.client ?? client).post<SubmissionsCreateResponses, SubmissionsCreateErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/submissions',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Status for én egen innsending — SDK-ets subjects.status(). Krever token; en innsending som tilhører et annet subject, eller er anonym, gir 404 submission_not_found. Anonyme innsendinger kan ikke slås opp: det finnes ingen identitet å binde dem til.\n */\nexport const submissionsStatus = <ThrowOnError extends boolean = false>(options: Options<SubmissionsStatusData, ThrowOnError>): RequestResult<SubmissionsStatusResponses, SubmissionsStatusErrors, ThrowOnError> => (options.client ?? client).get<SubmissionsStatusResponses, SubmissionsStatusErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/submissions/{id}/status',\n ...options\n});\n\n/**\n * Fullfører en oppgave med utfall (fungerte · delvis · ikke). Én completion per (deltaker, oppgave) — 409 task_already_completed. submissionId må være kallerens egen innsending (404 submission_not_found ellers). Emitterer task_completed i målemodellen; ingen webhook.\n */\nexport const programsCompleteTask = <ThrowOnError extends boolean = false>(options: Options<ProgramsCompleteTaskData, ThrowOnError>): RequestResult<ProgramsCompleteTaskResponses, ProgramsCompleteTaskErrors, ThrowOnError> => (options.client ?? client).post<ProgramsCompleteTaskResponses, ProgramsCompleteTaskErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/tasks/{id}/complete',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Slettekvitteringen med tellinger når den er completed. Scope subjects:delete.\n */\nexport const deletionsGet = <ThrowOnError extends boolean = false>(options: Options<DeletionsGetData, ThrowOnError>): RequestResult<DeletionsGetResponses, DeletionsGetErrors, ThrowOnError> => (options.client ?? client).get<DeletionsGetResponses, DeletionsGetErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/deletions/{id}',\n ...options\n});\n\n/**\n * Leietakeren bekrefter at flagget er PÅ (enabled = true) eller AV (false) for et pseudonym. Første bekreftelse tar programmet fra aapen til aktiv. false etter trukket fjerner «flagg ikke bekreftet av» (DD-36). Ukjent deltaker → 404 participant_not_found. Scope programs:confirm.\n */\nexport const programsFlagConfirmed = <ThrowOnError extends boolean = false>(options: Options<ProgramsFlagConfirmedData, ThrowOnError>): RequestResult<ProgramsFlagConfirmedResponses, ProgramsFlagConfirmedErrors, ThrowOnError> => (options.client ?? client).post<ProgramsFlagConfirmedResponses, ProgramsFlagConfirmedErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/programs/{id}/participants/{sub}/flag-confirmed',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Den frosne rapporten — samme tall som panelet og testerens takk (DD-16). 404 report_not_found før avsluttet. Scope admin.\n */\nexport const programsReport = <ThrowOnError extends boolean = false>(options: Options<ProgramsReportData, ThrowOnError>): RequestResult<ProgramsReportResponses, ProgramsReportErrors, ThrowOnError> => (options.client ?? client).get<ProgramsReportResponses, ProgramsReportErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/programs/{id}/report',\n ...options\n});\n\n/**\n * Segmentet leietakeren skrur flagget på for: aktive deltakeres pseudonymer og ingenting annet (M3.3). ETag på svaret; If-None-Match gir 304 når uendret. En deltaker som går ut er borte herfra i samme transaksjon som program.segment_changed emitteres (DD-36). Scope segment:read.\n */\nexport const programsSegment = <ThrowOnError extends boolean = false>(options: Options<ProgramsSegmentData, ThrowOnError>): RequestResult<ProgramsSegmentResponses, ProgramsSegmentErrors, ThrowOnError> => (options.client ?? client).get<ProgramsSegmentResponses, ProgramsSegmentErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/programs/{id}/segment',\n ...options\n});\n\n/**\n * Sletting per pseudonym (K11), utløst av leietakeren når brukeren ber om det. Sletter tekst, vedlegg, koblingsnøkler, svar, notater om saken, deltakelser og oppfølginger innen 24 timer; Reach-tallet på berørte saker står uten kobling. Svarer 202 med kvittering straks; completed hentes via Deletions.get eller kommer som subject.deleted. Idempotent: et ukjent subject gir også 202 med nullteller — å svare 404 ville bekreftet hvem som har sendt inn. Scope subjects:delete.\n */\nexport const subjectsRemove = <ThrowOnError extends boolean = false>(options: Options<SubjectsRemoveData, ThrowOnError>): RequestResult<SubjectsRemoveResponses, SubjectsRemoveErrors, ThrowOnError> => (options.client ?? client).delete<SubjectsRemoveResponses, SubjectsRemoveErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/subjects/{sub}',\n ...options\n});\n\n/**\n * Statusendring fra leietakerens verktøy (M1.4). Følger tilstandsmaskinen (409 invalid_status_transition); levert i feilsporet krever fixedIn (422). Emitterer submission.status_changed som ellers — innsenderen får samme løfte uansett hvem som flyttet saken. Scope admin. Står i kontrakten fordi M1.4 navngir den; bygges der.\n */\nexport const submissionsUpdateStatus = <ThrowOnError extends boolean = false>(options: Options<SubmissionsUpdateStatusData, ThrowOnError>): RequestResult<SubmissionsUpdateStatusResponses, SubmissionsUpdateStatusErrors, ThrowOnError> => (options.client ?? client).patch<SubmissionsUpdateStatusResponses, SubmissionsUpdateStatusErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/submissions/{id}/status',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n","import type { ErrorCode } from './api.js';\n\n/** Prefikset alle utviklerrettede meldinger fra SDK-et bærer. */\nexport const PREFIKS = '[innspel]';\n\n/**\n * En HTTP-headerverdi må være en ByteString: synlige ASCII-tegn, ingen\n * mellomrom, linjeskift eller tegn over U+00FF. Brytes det, kaster\n * `new Request(...)` en `TypeError` — og den er umulig å skille fra «nettet er\n * nede», så en utviklerfeil ville sett ut som en innsending som venter på nett.\n *\n * Funnet ved å kjøre quickstarten i et tomt prosjekt: README-placeholderen\n * `ik_pub_…` inneholder U+2026.\n */\nexport function erHeaderTrygg(verdi: string): boolean {\n return /^[\\x21-\\x7e]+$/.test(verdi);\n}\n\n/**\n * Utviklerfeil: opsjoner som er feil eller mangler, kontekstfelter utenfor\n * hvitelisten, tekst utenfor grensene. Kastes umiddelbart og navngir feltet —\n * aldri en stille tom widget (tech-decisions.md, «SDK — dokumentasjon og\n * utvikleropplevelse»).\n */\nexport class InnspelConfigError extends Error {\n override readonly name = 'InnspelConfigError';\n /** Feltet som er galt, slik det heter i `init`-opsjonene. */\n readonly field: string;\n\n constructor(field: string, hva: string, hvor = 'README.md') {\n super(`${PREFIKS} ${field}: ${hva}. Se ${hvor}.`);\n this.field = field;\n }\n}\n\n/**\n * Feil fra plattformen. Forgren på `code`, aldri på `message` — meldingen er\n * for mennesker og kan endres uten varsel (contracts/models/common.tsp).\n */\nexport class InnspelApiError extends Error {\n override readonly name = 'InnspelApiError';\n readonly code: ErrorCode | 'unknown';\n readonly status: number;\n /** Sekunder til neste forsøk, fra Retry-After. Kun ved 429. */\n readonly retryAfter: number | undefined;\n\n constructor(status: number, code: ErrorCode | 'unknown', message: string, retryAfter?: number) {\n super(message);\n this.status = status;\n this.code = code;\n this.retryAfter = retryAfter;\n }\n}\n\n/**\n * Intern, eksporteres ikke: `fetch` selv kastet — ingen forbindelse, eller\n * tidsgrensen avbrøt kallet. Bare denne legger en innsending i offline-køen. Alt\n * annet uten svar er en feil i koden og skal synes, ikke se ut som «Ingen nett».\n */\nexport class NettverksFeil extends Error {}\n\n/**\n * Offline-køen er full. Taket er 30 (DD-41), og den eldste beholdes: det første\n * innspillet er like mye verdt som det siste, og å kaste det stille ville brutt\n * løftet om at teksten aldri mistes.\n */\nexport class InnspelQueueFullError extends Error {\n override readonly name = 'InnspelQueueFullError';\n readonly code = 'queue_full' as const;\n /** Tekst som kan vises til innsenderen. Køen skal være synlig, ikke stille. */\n readonly userMessage: string;\n\n constructor(tak: number) {\n super(`${PREFIKS} offline-køen er full (${tak}).`);\n this.userMessage = `Du har ${tak} innspill som venter på nett. Send dem før du skriver flere — de sendes automatisk når du er på nett igjen.`;\n }\n}\n","import { erHeaderTrygg, PREFIKS } from './feil.js';\nimport type { IdentityProvider } from './typer.js';\n\n/**\n * Henter et ferskt feedback-token fra verten.\n *\n * Tokenet lagres ALDRI (K20, DD-41): det er gyldig i høyst 15 minutter, og ved\n * en flush av offline-køen er det gamle utløpt for lengst. Kjernen ber om et\n * nytt hver gang den trenger ett.\n *\n * Kaster vertens funksjon, eller returnerer den `null`, går kallet anonymt.\n * Innsenderen skal kunne melde fra selv om vertens innlogging er nede — men det\n * er en utviklerfeil, så den går til `console.error` med `[innspel]`-prefiks\n * (tech-decisions.md, «SDK — dokumentasjon og utvikleropplevelse»).\n */\nexport async function hentToken(\n provider: IdentityProvider | null,\n): Promise<string | null> {\n if (provider === null) return null;\n\n try {\n const token = await provider();\n if (typeof token !== 'string' || token.length === 0) return null;\n\n // Et token som ikke kan bli en headerverdi ville fått Request-byggingen til\n // å kaste en TypeError, og den er ikke til å skille fra «nettet er nede» —\n // innsendingen ville havnet i offline-køen og sett ut som om den venter på\n // nett. Feil i token-endepunktet skal være synlig som nettopp det.\n if (!erHeaderTrygg(token)) {\n console.error(\n `${PREFIKS} identityProvider ga et token med tegn som ikke kan stå i en HTTP-header (mellomrom, linjeskift eller tegn utenfor ASCII). Et JWT er base64url og har ingen slike. Innsendingen går anonymt — se docs/sdk/README.md.`,\n );\n return null;\n }\n\n return token;\n } catch (e) {\n console.error(\n `${PREFIKS} identityProvider kastet. Innsendingen går anonymt og kan ikke følges opp. Rett feilen i token-endepunktet — se docs/sdk/README.md.`,\n e,\n );\n return null;\n }\n}\n","import { InnspelApiError } from './feil.js';\nimport type { Ko } from './ko.js';\nimport type { FlushResult, QueuedSubmission, Telemetry } from './typer.js';\n\n/**\n * Tømmer offline-køen. Kalles når widgeten åpnes eller når appen får nett med\n * widgeten åpen — **aldri ved oppstart** (DD-41).\n *\n * Hver rad sendes med et FERSKT token: det gamle er utløpt for lengst (exp ≤ 15\n * min). Det er `send` som henter det, én gang per rad.\n *\n * To utfall skiller seg:\n * - **4xx** — plattformen avviste kroppen. Den blir aldri gyldig, så raden\n * forkastes i stedet for å prøves i evighet. Innsenderen skal ikke ha en rad\n * som står og «venter på nett» for alltid.\n * - **nettverksfeil** — nettet er nede igjen. Resten står, og vi stopper: de\n * neste radene ville feilet på samme måte, og hvert forsøk koster rate limit.\n */\nexport async function flushKo(\n kø: Ko,\n send: (rad: QueuedSubmission) => Promise<unknown>,\n telemetri: Telemetry,\n): Promise<FlushResult> {\n const rader = await kø.les();\n let sent = 0;\n let failed = 0;\n\n for (const rad of rader) {\n try {\n await send(rad);\n await kø.fjern(rad.clientRef);\n sent++;\n } catch (e) {\n if (e instanceof InnspelApiError && e.status >= 400 && e.status < 500) {\n await kø.fjern(rad.clientRef);\n failed++;\n telemetri.emit({ name: 'submission_failed', reason: e.code });\n continue;\n }\n break;\n }\n }\n\n return { sent, failed, remaining: await kø.antall() };\n}\n","import { InnspelQueueFullError } from './feil.js';\nimport type { InnspelStorage, QueuedSubmission } from './typer.js';\n\n/**\n * DD-41 — «Offline-køen er maks 30, tømmes aldri ved oppstart, og er synlig.»\n *\n * Kilde: Sentry `maxQueueSize` 30 og `flushAtStartup` false; Shake «Feedback\n * pending sync» er den eneste leverandøren som viser tilstanden til brukeren.\n * Kvitteringen i DD-07 kan ikke love svar på noe som ikke er sendt — derfor er\n * køen synlig i «Mine innspill», ikke en usynlig bakgrunnsjobb.\n *\n * Rate limit-tallet per subject i M1.1 er satt til 60 nettopp for at en full kø\n * på 30 skal kunne tømmes på ett minutt (tech-decisions.md, «M1.1»).\n */\nexport const KO_TAK = 30;\n\nconst NØKKEL = 'innspel:queue';\n\nexport class Ko {\n readonly #storage: InnspelStorage;\n\n constructor(storage: InnspelStorage) {\n this.#storage = storage;\n }\n\n /**\n * Leser køen. En ødelagt rad i lagringen gir tom kø, ikke et unntak: en\n * halvskrevet JSON etter at appen ble drept skal ikke hindre innsenderen i å\n * melde fra på nytt.\n */\n async les(): Promise<QueuedSubmission[]> {\n const rå = await this.#storage.get(NØKKEL);\n if (!rå) return [];\n try {\n const parset: unknown = JSON.parse(rå);\n return Array.isArray(parset) ? (parset as QueuedSubmission[]) : [];\n } catch {\n return [];\n }\n }\n\n async #skriv(rader: QueuedSubmission[]): Promise<void> {\n if (rader.length === 0) {\n await this.#storage.remove(NØKKEL);\n return;\n }\n await this.#storage.set(NØKKEL, JSON.stringify(rader));\n }\n\n /**\n * Legger en innsending bakerst.\n *\n * Ved fullt tak kastes {@link InnspelQueueFullError} — den eldste beholdes.\n * Å kaste den eldste ville vært stille tap av noe innsenderen tror er sendt.\n */\n async leggTil(rad: QueuedSubmission): Promise<void> {\n const rader = await this.les();\n if (rader.length >= KO_TAK) throw new InnspelQueueFullError(KO_TAK);\n rader.push(rad);\n await this.#skriv(rader);\n }\n\n async fjern(clientRef: string): Promise<void> {\n const rader = await this.les();\n await this.#skriv(rader.filter((r) => r.clientRef !== clientRef));\n }\n\n async antall(): Promise<number> {\n return (await this.les()).length;\n }\n}\n","import { InnspelConfigError } from './feil.js';\nimport type { ContextInput, Platform } from './typer.js';\n\n/**\n * Den lukkede hvitelista (K5), som feltnavn. Listen er kilden både til\n * valideringen og til det som faktisk sendes — et felt som ikke står her kommer\n * aldri ut av kjernen, uansett hva verten fyller inn.\n *\n * `sdkVersion` står ikke her fordi den ikke kommer fra verten: kjernen setter\n * den selv, og en vert som prøver å overstyre den blir ignorert.\n */\nexport const KONTEKST_FELTER = [\n 'platform',\n 'appVersion',\n 'build',\n 'os',\n 'screen',\n 'locale',\n] as const;\n\nconst PLATTFORMER: readonly Platform[] = [\n 'ios',\n 'android',\n 'web',\n 'tvos',\n 'androidtv',\n 'tizen',\n 'webos',\n];\n\n/**\n * Sjekker et kontekstobjekt mot hvitelisten og kaster med feltnavnet ved avvik.\n *\n * Plattformen ville svart 400 `unknown_field` på det samme, men da har\n * innsenderen allerede skrevet ferdig. Kjernen feiler i stedet ved `init`, mens\n * utvikleren står i det (tech-decisions.md, «Feil bruk feiler høyt og tidlig»).\n *\n * @param kontekst Rå kontekst fra verten.\n * @param sti Feltnavnet i feilmeldingen — `context` fra `init`, ellers `capture`.\n * @param krevPlatform `platform` er påkrevd i `init`, valgfri i et enkeltkall\n * som bare legger på `screen`.\n */\nexport function validerKontekst(\n kontekst: Partial<ContextInput>,\n sti: string,\n krevPlatform: boolean,\n): void {\n if (kontekst === null || typeof kontekst !== 'object') {\n throw new InnspelConfigError(sti, 'må være et objekt med minst { platform }');\n }\n\n for (const nøkkel of Object.keys(kontekst)) {\n if (!(KONTEKST_FELTER as readonly string[]).includes(nøkkel)) {\n throw new InnspelConfigError(\n `${sti}.${nøkkel}`,\n `er ikke i kontekst-hvitelisten. Tillatt: ${KONTEKST_FELTER.join(', ')}. Lista er lukket (K5) — enhets-ID, IP og skjerminnhold hører ikke hjemme her`,\n );\n }\n }\n\n const plattform = kontekst.platform;\n if (krevPlatform && plattform === undefined) {\n throw new InnspelConfigError(`${sti}.platform`, 'er påkrevd');\n }\n if (plattform !== undefined && !PLATTFORMER.includes(plattform)) {\n throw new InnspelConfigError(\n `${sti}.platform`,\n `må være en av ${PLATTFORMER.join(', ')}`,\n );\n }\n}\n\n/**\n * Slår sammen konteksten fra `init` med det enkeltkallet legger på, og setter\n * `sdkVersion` til slutt så den ikke kan overstyres.\n *\n * Et felt som STÅR i kallets kontekst med verdien `undefined` eller `null`\n * FJERNES — det er «Fjern» i kontekstlinja (DD-05). Et felt som ikke står der,\n * beholdes fra `init`. Skillet er `in`, ikke `??`: før 0.2.1 fylte kjernen et\n * fjernet felt fra `init` igjen, og «Fjern» i widgeten var en løgn.\n */\nexport function slåSammenKontekst(\n base: ContextInput,\n påLagt: Partial<ContextInput> | undefined,\n sdkVersion: string,\n): ContextInput & { sdkVersion: string } {\n const ut: Record<string, unknown> = {};\n for (const felt of KONTEKST_FELTER) {\n const verdi = påLagt && felt in påLagt ? påLagt[felt] : base[felt];\n if (verdi !== undefined && verdi !== null) ut[felt] = verdi;\n }\n ut['sdkVersion'] = sdkVersion;\n return ut as unknown as ContextInput & { sdkVersion: string };\n}\n","import type { PatternFinding, PatternKind } from './typer.js';\n\n/**\n * DD-46 — mønstervarsel før sending, aldri stille redaksjon.\n *\n * Shake redigerer de samme mønstrene, men stille og kun i logger. Innspel har\n * ingen logger: teksten ER innspillet, og en stille endring ville gjort\n * innsenderen til usikker kilde på sin egen sak. Derfor returnerer denne\n * funksjonen FUNN. Den fjerner aldri noe — «Fjern» eller «Behold» er\n * innsenderens valg (DD-05).\n *\n * Regex i kjernen, ingen avhengighet (K19).\n */\n\ninterface Regel {\n kind: PatternKind;\n re: RegExp;\n /** Ekstra sjekk der formen alene gir for mange falske varsler. */\n gyldig?: (treff: string) => boolean;\n}\n\n/**\n * Luhn. Uten den varsles hvert 16-sifrede ordrenummer som kortnummer, og et\n * varsel som stemmer sjelden lærer folk å trykke «Behold» uten å lese.\n */\nfunction luhn(siffer: string): boolean {\n let sum = 0;\n let annenhver = false;\n for (let i = siffer.length - 1; i >= 0; i--) {\n let n = siffer.charCodeAt(i) - 48;\n if (n < 0 || n > 9) return false;\n if (annenhver) {\n n *= 2;\n if (n > 9) n -= 9;\n }\n sum += n;\n annenhver = !annenhver;\n }\n return sum % 10 === 0;\n}\n\nfunction gyldigIp(treff: string): boolean {\n const deler = treff.split('.');\n return deler.length === 4 && deler.every((d) => d.length <= 3 && Number(d) <= 255);\n}\n\nconst REGLER: Regel[] = [\n {\n kind: 'email',\n re: /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}/g,\n },\n {\n // JWT-form først: tre base64url-segmenter. Fanger et feedback-token limt\n // inn fra en feilmelding — nøyaktig det innsenderen ikke bør sende.\n //\n // Siste segment krever bare 4 tegn. En ekte ES256-signatur er ~86, men et\n // token som er avkortet i en feilmelding er like uønsket i innspillsteksten,\n // og de to første segmentene på 16+ base64url-tegn hver gjør falske treff i\n // norsk prosa nesten umulige.\n kind: 'token',\n re: /\\b[A-Za-z0-9_-]{16,}\\.[A-Za-z0-9_-]{16,}\\.[A-Za-z0-9_-]{4,}\\b|\\b(?:sk|pk|ghp|xox[abpr])[-_][A-Za-z0-9_-]{16,}\\b/g,\n },\n {\n kind: 'card',\n // 13–19 siffer med valgfrie mellomrom eller bindestrek mellom grupper.\n re: /\\b(?:\\d[ -]?){12,18}\\d\\b/g,\n gyldig: (t) => {\n const siffer = t.replace(/[^\\d]/g, '');\n return siffer.length >= 13 && siffer.length <= 19 && luhn(siffer);\n },\n },\n {\n kind: 'ip',\n re: /\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b/g,\n gyldig: gyldigIp,\n },\n {\n kind: 'phone',\n // Norsk form: 8 siffer, med eller uten +47/0047 og gruppering.\n re: /(?:\\+47|0047)?[ ]?(?:\\d[ ]?){8}(?![ ]?\\d)/g,\n gyldig: (t) => {\n const siffer = t.replace(/[^\\d]/g, '');\n const uten = siffer.replace(/^(?:47|0047)/, '');\n return uten.length === 8;\n },\n },\n];\n\n/**\n * Leter etter e-post, telefonnummer, kortnummer (Luhn-validert), IP-adresser og\n * token-lignende strenger i en innspillstekst.\n *\n * Rekkefølgen på reglene er bevisst: de spesifikke først, så et treff som\n * allerede er dekket av en sterkere regel ikke varsles to ganger. Et kortnummer\n * er ikke også et telefonnummer.\n *\n * @param text Teksten innsenderen har skrevet. Endres ikke.\n * @returns Funnene med posisjon, så verten kan markere dem i feltet. Tom liste\n * for en vanlig innsending.\n */\nexport function scanText(text: string): PatternFinding[] {\n const funn: PatternFinding[] = [];\n const opptatt: Array<[number, number]> = [];\n\n for (const regel of REGLER) {\n regel.re.lastIndex = 0;\n let treff: RegExpExecArray | null;\n while ((treff = regel.re.exec(text)) !== null) {\n const rå = treff[0];\n const trimmet = rå.trim();\n if (!trimmet) continue;\n\n const start = treff.index + rå.indexOf(trimmet);\n const end = start + trimmet.length;\n\n if (regel.gyldig && !regel.gyldig(trimmet)) continue;\n if (opptatt.some(([a, b]) => start < b && end > a)) continue;\n\n opptatt.push([start, end]);\n funn.push({ kind: regel.kind, match: trimmet, start, end });\n }\n }\n\n return funn.sort((a, b) => a.start - b.start);\n}\n","/**\n * `clientRef` — en tilfeldig UUID per INNSENDING, aldri per enhet eller\n * installasjon (K20, og kontraktens `SubmissionCreateBase.clientRef`). Den er\n * en idempotensnøkkel for offline-køen, ikke en identitet: to innsendinger fra\n * samme telefon deler den aldri.\n *\n * Bruker `crypto.randomUUID` der den finnes (Node, moderne nettlesere) og\n * faller tilbake til `Math.random` ellers — React Native har ingen WebCrypto\n * uten polyfill, og kjernen skal ikke kreve en (K19). Fallbacken er god nok:\n * nøkkelen er ikke en hemmelighet, og kollisjonsvinduet er én innsender i 24\n * timer.\n */\nexport function nyClientRef(): string {\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (typeof c?.randomUUID === 'function') return c.randomUUID();\n\n const hex: string[] = [];\n for (let i = 0; i < 36; i++) {\n if (i === 8 || i === 13 || i === 18 || i === 23) {\n hex.push('-');\n } else if (i === 14) {\n hex.push('4');\n } else if (i === 19) {\n hex.push(((Math.random() * 4) | 8).toString(16));\n } else {\n hex.push(((Math.random() * 16) | 0).toString(16));\n }\n }\n return hex.join('');\n}\n","import type { AttachmentMime } from './api.js';\nimport { InnspelApiError, InnspelConfigError } from './feil.js';\nimport type { AttachmentBody, AttachmentInput } from './typer.js';\n\n/**\n * Grensene for et vedlegg (K9). Tallene er kontraktens\n * (`AttachmentPresignRequest`: 5 MB, 4096²) og sjekkes her FØR noe går på\n * nettet — plattformen sjekker dem på nytt før dekoding.\n */\nexport const VEDLEGG_GRENSER = {\n maxBytes: 5_242_880,\n maxDimension: 4096,\n} as const;\n\n/** Allowlisten (K9): aldri SVG, aldri GIF. Avgjøres på ledningen av magic bytes, ikke av denne strengen. */\nexport const TILLATTE_MIME: readonly AttachmentMime[] = ['image/png', 'image/jpeg', 'image/webp'];\n\n/** Byte-lengden på kroppen, uansett om verten gir Blob, ArrayBuffer eller en typed array. */\nexport function byteLengde(body: AttachmentBody): number {\n if (typeof body === 'object' && body !== null && 'size' in body && typeof body.size === 'number') {\n return body.size;\n }\n return (body as ArrayBuffer | ArrayBufferView).byteLength;\n}\n\n/**\n * Validerer vedlegget slik `init` validerer opsjonene: kaster {@link InnspelConfigError}\n * med feltnavn, før noe treffer nettet. Et vedlegg over grensene er en utviklerfeil\n * i vertens fangst — ikke noe innsenderen skal få 413 for etter å ha ventet.\n */\nexport function validerVedlegg(input: AttachmentInput): void {\n if (input === null || typeof input !== 'object') {\n throw new InnspelConfigError('attachment', 'må være et objekt med { submissionId?, mime, body, width, height }');\n }\n if (!TILLATTE_MIME.includes(input.mime)) {\n throw new InnspelConfigError(\n 'attachment.mime',\n `må være en av ${TILLATTE_MIME.join(', ')}. SVG og GIF er aldri tillatt (K9)`,\n );\n }\n if (input.body === null || input.body === undefined) {\n throw new InnspelConfigError('attachment.body', 'mangler — send bildet som Blob, ArrayBuffer eller Uint8Array');\n }\n const bytes = byteLengde(input.body);\n if (!Number.isFinite(bytes) || bytes < 1) {\n throw new InnspelConfigError('attachment.body', 'er tom');\n }\n if (bytes > VEDLEGG_GRENSER.maxBytes) {\n throw new InnspelConfigError(\n 'attachment.body',\n `er ${bytes} byte, over taket på ${VEDLEGG_GRENSER.maxBytes} (5 MB). Reduser kvaliteten eller oppløsningen ved fangst`,\n );\n }\n for (const felt of ['width', 'height'] as const) {\n const v = input[felt];\n if (!Number.isInteger(v) || v < 1 || v > VEDLEGG_GRENSER.maxDimension) {\n throw new InnspelConfigError(\n `attachment.${felt}`,\n `må være et heltall mellom 1 og ${VEDLEGG_GRENSER.maxDimension} (K9)`,\n );\n }\n }\n}\n\n/** Det presign svarer med, slik `lastOpp` trenger det. */\nexport interface PresignSvar {\n attachmentId: string;\n uploadUrl: string;\n headers: ReadonlyArray<{ name: string; value: string }>;\n}\n\n/**\n * PUT mot den presignede URL-en, med NØYAKTIG headerne presign ga — settet er\n * lukket, og lagringen avviser alt annet (signaturen dekker `Content-Type`).\n *\n * En egen funksjon fordi den ikke går gjennom den genererte klienten: URL-en\n * peker på lagringen, ikke på plattformen, og skal hverken ha tenantKey eller\n * token. En nettverksfeil kastes videre som den er, så kalleren kan skille\n * «nettet er nede» fra «lagringen sa nei».\n */\nexport async function lastOppTilLagring(\n fetchImpl: typeof fetch,\n presign: PresignSvar,\n body: AttachmentBody,\n signal: AbortSignal,\n): Promise<void> {\n const headers: Record<string, string> = {};\n for (const h of presign.headers) headers[h.name] = h.value;\n\n const res = await fetchImpl(new Request(presign.uploadUrl, { method: 'PUT', headers, body, signal }));\n if (!res.ok) {\n throw new InnspelApiError(\n res.status,\n 'unknown',\n `Lagringen avviste opplastingen med status ${res.status}. Bildet ble ikke lagt ved.`,\n );\n }\n}\n","/**\n * Versjonen som sendes som `context.sdkVersion` på hver innsending.\n *\n * `maaling.md` teller SDK-versjonsspredning per leietaker — «en gammel SDK er\n * et vedlikeholdsproblem som ellers er usynlig». Derfor er dette en konstant og\n * ikke et `require('../package.json')`: kjernen skal virke i en bundler som\n * ikke kan lese JSON, og `test/versjon.test.ts` holder den i takt med\n * `package.json`.\n */\nexport const VERSJON = '0.6.1';\n","import {\n createClient,\n createConfig,\n ingestAttachmentsComplete,\n ingestAttachmentsPresign,\n ingestConfigGet,\n ingestKnownIssuesConfirm,\n ingestKnownIssuesList,\n ingestProgramsAccept,\n ingestProgramsCompleteTask,\n ingestProgramsDecline,\n ingestProgramsListMine,\n ingestProgramsRespond,\n ingestProgramsWithdraw,\n ingestSubmissionsCreate,\n ingestSubmissionsListMine,\n ingestSubmissionsStatus,\n type ApiErrorBody,\n type AttachmentPresign,\n type AttachmentView,\n type Client,\n type ClientConfig,\n type ErrorCode,\n type FollowUpResponseCreate,\n type KnownIssueCard,\n type MyPrograms,\n type ParticipationView,\n type SubmissionStatusView,\n type TaskCompletionCreate,\n type TaskCompletionView,\n} from './api.js';\nimport { erHeaderTrygg, InnspelApiError, InnspelConfigError, NettverksFeil } from './feil.js';\nimport { hentToken } from './identitet.js';\nimport { flushKo } from './flush.js';\nimport { Ko } from './ko.js';\nimport { slåSammenKontekst, validerKontekst } from './kontekst.js';\nimport { scanText } from './monster.js';\nimport type {\n AttachmentInput,\n AttachmentOutcome,\n CaptureInput,\n CaptureResult,\n ContextInput,\n FlushResult,\n InnspelOptions,\n KnownIssueQuery,\n MySubmission,\n OpenFeedbackOptions,\n PatternFinding,\n Presenter,\n QueuedSubmission,\n ResolvedSettings,\n Telemetry,\n TelemetryEvent,\n} from './typer.js';\nimport { nyClientRef } from './uuid.js';\nimport { byteLengde, lastOppTilLagring, validerVedlegg } from './vedlegg.js';\nimport { VERSJON } from './versjon.js';\n\nconst STANDARD_TIMEOUT_MS = 10_000;\nconst noopTelemetri: Telemetry = { emit: () => undefined };\nconst UTFALL = ['fungerte', 'delvis', 'ikke'] as const;\nconst SETNING_MAKS = 140;\n\n/** Tre lukkede valg og en setning ≤ 140 — samme form for «Gjort» og «Hvordan gikk det?». Utviklerfeil kastes før noe kall går ut. */\nfunction validerUtfall(input: { outcome: string; text?: string | undefined }): void {\n if (!(UTFALL as readonly string[]).includes(input.outcome)) {\n throw new InnspelConfigError('outcome', `må være ett av ${UTFALL.join(' · ')}`);\n }\n if (input.text !== undefined && (typeof input.text !== 'string' || input.text.length > SETNING_MAKS)) {\n throw new InnspelConfigError('text', `er valgfri, men aldri lengre enn ${SETNING_MAKS} tegn`);\n }\n}\n\n/** Klienten `init` gir deg. Én per app; den er trygg å holde på. */\nexport interface InnspelClient {\n /** Versjonen av `@innspel/core`. Følger med hver innsending som `context.sdkVersion`. */\n readonly version: string;\n /** `true` når `identityProvider` er `null` — innsendinger kan ikke følges opp. */\n readonly isAnonymous: boolean;\n /** Leietakerens grenser slik klienten kjenner dem. Oppdateres på plass av {@link loadSettings}. */\n readonly settings: ResolvedSettings;\n /** Konteksten som følger hver innsending, med `sdkVersion` satt av kjernen. */\n readonly context: ContextInput & { sdkVersion: string };\n\n /**\n * Henter leietakerens klientkonfigurasjon (`GET /v1/ingest/config`, M2.5): tegngrense,\n * minste antall tegn, skjermbilde og personvernlenke — det verten ellers måtte\n * duplisere i `init()`. Kalles av widgeten ved åpning, aldri ved oppstart (DD-41).\n * Svarer ikke kallet, beholdes det klienten alt har: konfigurasjonen er et tilbud,\n * aldri en sperre. Returnerer `settings` — samme objekt, oppdatert.\n */\n loadSettings(): Promise<ResolvedSettings>;\n\n capture(input: CaptureInput): Promise<CaptureResult>;\n\n readonly knownIssues: {\n /** Kortene som vises FØR feltet i feilsporet (DD-03). Feiler oppslaget, er lista tom. */\n for(query?: KnownIssueQuery): Promise<KnownIssueCard[]>;\n /** «Ja, jeg også» (DD-29): Reach +1 uten ny sak. */\n confirm(knownIssueId: string): Promise<SubmissionStatusView>;\n };\n\n readonly subjects: {\n /** «Mine innspill» (DD-27), med køen gjort synlig (DD-41). */\n submissions(): Promise<MySubmission[]>;\n status(submissionId: string): Promise<SubmissionStatusView>;\n };\n\n readonly programs: {\n /** Alt om betaprogram for innsenderen i ett kall: invitasjoner til banneret (DD-12), deltakelser til fanen, og oppfølginger som venter. */\n list(): Promise<MyPrograms>;\n /**\n * Aksepterer invitasjonen etter forventningsavklaringen (DD-13, DD-32).\n * Tokenet kom fra leietakerens egen kanal — plattformen sender aldri (DD-12).\n * Er det brukt, utløpt eller utstedt til noen andre, kommer 404\n * `invitation_invalid`. Gjentak fra samme innsender er trygt: svaret er den\n * samme deltakelsen.\n */\n accept(invitationToken: string): Promise<ParticipationView>;\n /** Avslår invitasjonen. Ingen årsak spørres. Et nei etter ja er {@link withdraw}, ikke avslag. */\n decline(invitationToken: string): Promise<void>;\n /** «Gå ut» (DD-36): umiddelbart, alltid tilgjengelig, og aldri en straff. Idempotent. */\n withdraw(participationId: string): Promise<ParticipationView>;\n /**\n * «Gjort» (3c): ett av tre lukkede utfall — fungerte · delvis · ikke — og en valgfri\n * setning ≤ 140. Én per oppgave; et gjentak er 409 `task_already_completed`. En egen\n * innsending kan henge ved. Teller `task_completed` med utfallet, aldri teksten.\n */\n completeTask(taskId: string, completion: TaskCompletionCreate): Promise<TaskCompletionView>;\n /**\n * «Hvordan gikk det?» på en utsendt oppfølging fra `list().pendingFollowUps`: de samme\n * tre valgene og en valgfri setning ≤ 140. Bare `hvordan_gikk_det` og `sjekkpunkt` tar\n * svar — en påminnelse eller et tilbud om utgang gir 409 `follow_up_not_answerable`.\n * Engangs (409 `follow_up_already_answered`). Teller `followup_answered`.\n */\n respond(followUpId: string, response: FollowUpResponseCreate): Promise<void>;\n };\n\n readonly attachments: {\n /**\n * Laster opp ett maskert skjermbilde til en innsending som alt er lagret:\n * presign → PUT til lagringen → complete. Bruk `capture({ attachment })` i\n * stedet når teksten og bildet sendes sammen — da håndteres DD-42 for deg.\n * Plattformen verifiserer og re-enkoder etterpå; `processedAt` er satt når\n * det er gjort.\n */\n upload(submissionId: string, attachment: AttachmentInput): Promise<AttachmentView>;\n };\n\n readonly queue: {\n pending(): Promise<QueuedSubmission[]>;\n /** Sendes ellers automatisk når widgeten åpnes. Aldri ved oppstart (DD-41). */\n flush(): Promise<FlushResult>;\n };\n\n /** Mønstervarsel (DD-46). Returnerer funn — fjerner aldri noe. */\n scanText(text: string): PatternFinding[];\n\n /** Emitter en tragt-hendelse. Brukes av UI-laget for `widget_opened` og `track_selected`. */\n track(event: TelemetryEvent): void;\n\n /** Åpner widgeten. Krever `@innspel/react-native`. */\n openFeedback(options?: OpenFeedbackOptions): Promise<void>;\n\n /** Registrerer visningen. Kalles av `@innspel/react-native`, ikke av verten. */\n registerPresenter(presenter: Presenter): void;\n}\n\nfunction krev(betingelse: boolean, felt: string, hva: string): void {\n if (!betingelse) throw new InnspelConfigError(felt, hva);\n}\n\nfunction validerOpsjoner(o: InnspelOptions): void {\n krev(o !== null && typeof o === 'object', 'options', 'mangler — init() tar ett objekt');\n krev(\n typeof o.baseUrl === 'string' && o.baseUrl.length > 0,\n 'baseUrl',\n 'mangler. Sett plattformens API-rot, f.eks. https://api.innspel.example — SDK-et gjetter aldri hvor dataene havner',\n );\n krev(\n typeof o.tenantKey === 'string' && o.tenantKey.length > 0,\n 'tenantKey',\n 'mangler. Den offentlige SDK-nøkkelen finner du i panelet under Innstillinger → Produkter',\n );\n krev(\n erHeaderTrygg(o.tenantKey),\n 'tenantKey',\n 'har tegn som ikke kan stå i en HTTP-header (mellomrom, linjeskift eller tegn utenfor ASCII). Har du kopiert en placeholder med «…» i, bytt den mot den ekte nøkkelen fra panelet',\n );\n krev(\n o.identityProvider === null || typeof o.identityProvider === 'function',\n 'identityProvider',\n 'må være en funksjon som gir et feedback-token, eller null for anonym modus. Anonym modus er et eksplisitt valg, aldri en glemt opsjon',\n );\n\n const s = o.storage as Partial<InnspelOptions['storage']> | undefined;\n krev(s !== null && typeof s === 'object', 'storage', 'mangler. Offline-køen lagres her (DD-41)');\n for (const metode of ['get', 'set', 'remove'] as const) {\n krev(typeof s?.[metode] === 'function', `storage.${metode}`, 'mangler eller er ikke en funksjon');\n }\n\n validerKontekst(o.context ?? {}, 'context', true);\n\n if (o.textMaxLength !== undefined) {\n krev(\n o.textMaxLength === 140 || o.textMaxLength === 280,\n 'textMaxLength',\n 'må være 140 eller 280 — kontrakten har to verdier, og 140 er den som gjelder ved minorsPresent',\n );\n }\n if (o.minTextLength !== undefined) {\n krev(\n Number.isInteger(o.minTextLength) && o.minTextLength >= 1,\n 'minTextLength',\n 'må være et heltall ≥ 1 (DD-44)',\n );\n }\n if (o.telemetry !== undefined) {\n krev(\n typeof o.telemetry?.emit === 'function',\n 'telemetry.emit',\n 'mangler eller er ikke en funksjon',\n );\n }\n}\n\n/** Oversetter et feilsvar fra plattformen til {@link InnspelApiError}. */\nfunction tilApiFeil(status: number, kropp: unknown, response?: Response): InnspelApiError {\n const body = (kropp ?? {}) as Partial<ApiErrorBody>;\n const kode = (body.code ?? 'unknown') as ErrorCode | 'unknown';\n const retryAfter = Number(response?.headers.get('retry-after') ?? NaN);\n return new InnspelApiError(\n status,\n kode,\n body.message ?? `Kallet feilet med status ${status}.`,\n Number.isFinite(retryAfter) ? retryAfter : undefined,\n );\n}\n\n/**\n * Setter opp SDK-et. Validerer opsjonene ved kjøretid og kaster umiddelbart med\n * feltnavnet ved feil bruk — typer stopper ikke en JavaScript-vert eller en feil\n * `.env` (tech-decisions.md, «SDK — dokumentasjon og utvikleropplevelse»).\n *\n * Kaller ingenting og sender ingenting: køen tømmes ALDRI ved oppstart (DD-41).\n *\n * @example\n * ```ts\n * const innspel = init({\n * baseUrl: 'https://api.innspel.example',\n * tenantKey: 'ik_pub_xxxxxxxx',\n * identityProvider: hentFeedbackToken, // eller null = anonym\n * storage,\n * context: { platform: 'ios', appVersion: '1.4.2' },\n * });\n * ```\n */\nexport function init(options: InnspelOptions): InnspelClient {\n validerOpsjoner(options);\n\n const settings: ResolvedSettings = {\n // Strammest mulig til loadSettings() har svart: 140 / 10 / skjermbilde av er\n // verdiene ved minorsPresent (K18). Verten kan overstyre startverdiene, men\n // det leietakeren har satt i panelet vinner når konfigurasjonen er hentet.\n textMaxLength: options.textMaxLength ?? 140,\n minTextLength: options.minTextLength ?? 10,\n screenshotsEnabled: options.screenshotsEnabled ?? false,\n };\n\n const kontekst = slåSammenKontekst(options.context, undefined, VERSJON);\n const telemetri = options.telemetry ?? noopTelemetri;\n const kø = new Ko(options.storage);\n const anonym = options.identityProvider === null;\n\n /**\n * `fetch` med nettverksfeilene merket. Den genererte klienten fanger det fetch\n * kaster og svarer uten `response`; merket er det eneste som skiller «nettet er\n * nede» fra en feil i vår egen kode. Vertens fetch slås opp ved hvert kall.\n */\n const nett = ((input: Request) =>\n (options.fetch ?? fetch)(input).catch((e: unknown) => {\n throw new NettverksFeil(String(e));\n })) as typeof fetch;\n\n const klient: Client = createClient(createConfig({ baseUrl: options.baseUrl, fetch: nett }));\n\n let presenter: Presenter | null = null;\n\n /** Headere for ett kall. Tokenet hentes friskt hver gang — aldri fra disk (K20). */\n async function headere(): Promise<Record<string, string>> {\n const h: Record<string, string> = { 'X-Innspel-Tenant-Key': options.tenantKey };\n const token = await hentToken(options.identityProvider);\n if (token) h['Authorization'] = `Bearer ${token}`;\n return h;\n }\n\n /**\n * Tidsgrense for ett kall. React Native polyfyller `AbortSignal` uten\n * `AbortSignal.timeout`, og Expo legger den ikke til — der er det en egen\n * `AbortController` med timer, ryddet når kallet er ferdig.\n */\n async function medTidsgrense<T>(kall: (signal: AbortSignal) => Promise<T>): Promise<T> {\n const ms = options.timeoutMs ?? STANDARD_TIMEOUT_MS;\n if (typeof AbortSignal.timeout == 'function') return kall(AbortSignal.timeout(ms));\n const kontroll = new AbortController();\n const timer = setTimeout(() => kontroll.abort(), ms);\n try {\n return await kall(kontroll.signal);\n } finally {\n clearTimeout(timer);\n }\n }\n\n /**\n * Kjører et kall og prøver ÉN gang til ved `feedback_token_expired`.\n *\n * Kontrakten skiller bevisst `expired` fra `invalid`: den første er ventet og\n * håndteres her, den andre er en utviklerfeil i vertens token-endepunkt og\n * skal vises, ikke skjules.\n */\n async function medToken<T>(\n kall: (h: Record<string, string>, s: AbortSignal) => Promise<{ data?: T; error?: unknown; response: Response }>,\n ): Promise<T> {\n // Hvert forsøk får egen tidsgrense. Uten svar er feilen det fetch kastet\n // (NettverksFeil) eller en feil i koden før fetch — begge kastes som de er.\n const forsøk = async () => {\n const h = await headere();\n const r = await medTidsgrense((s) => kall(h, s));\n if (!r.response) throw r.error;\n return r;\n };\n let res = await forsøk();\n if (res.response.status === 401) {\n const feil = tilApiFeil(401, res.error, res.response);\n if (feil.code === 'feedback_token_expired' && !anonym) {\n res = await forsøk();\n }\n }\n if (!res.response.ok) throw tilApiFeil(res.response.status, res.error, res.response);\n return res.data as T;\n }\n\n /** Tokenet kommer fra leietakerens kanal (DD-12); en tom streng er en feil i vertens kobling, ikke et kall. */\n function krevInvitasjonstoken(token: string): void {\n if (typeof token !== 'string' || token.length === 0) {\n throw new InnspelConfigError(\n 'invitationToken',\n 'mangler — det er engangs-tokenet leietakeren sendte i sin egen kanal (dyplenke, varsel eller e-post)',\n );\n }\n }\n\n function krevToken(): void {\n if (anonym) {\n throw new InnspelApiError(\n 401,\n 'feedback_token_required',\n 'Anonym modus har ingen «mine innspill» — det finnes ingen identitet å slå opp.',\n );\n }\n }\n\n async function sendNå(\n input: CaptureInput,\n clientRef: string,\n kontekstForKall: ContextInput & { sdkVersion: string },\n ): Promise<SubmissionStatusView> {\n const body: Record<string, unknown> = {\n type: input.type,\n text: input.text,\n context: kontekstForKall,\n clientRef,\n };\n if (input.programId !== undefined) body['programId'] = input.programId;\n if (input.taskId !== undefined) body['taskId'] = input.taskId;\n if (input.type === 'feil') {\n if (input.correlation !== undefined) body['correlation'] = input.correlation;\n if (input.relatedKnownIssueId !== undefined) {\n body['relatedKnownIssueId'] = input.relatedKnownIssueId;\n }\n }\n\n return medToken<SubmissionStatusView>((h, s) =>\n ingestSubmissionsCreate({\n client: klient,\n headers: h,\n signal: s,\n body: body as never,\n }) as never,\n );\n }\n\n /**\n * Presign → PUT → complete. Bildet går rett til lagringen med nøyaktig\n * headerne presign ga; tenantKey og token følger aldri med dit.\n */\n async function lastOppVedlegg(submissionId: string, vedlegg: AttachmentInput): Promise<AttachmentView> {\n const presign = await medToken<AttachmentPresign>((h, s) =>\n ingestAttachmentsPresign({\n client: klient,\n headers: h,\n signal: s,\n body: {\n submissionId,\n mime: vedlegg.mime,\n bytes: byteLengde(vedlegg.body),\n width: vedlegg.width,\n height: vedlegg.height,\n },\n }) as never,\n );\n\n await medTidsgrense((s) => lastOppTilLagring(nett, presign, vedlegg.body, s));\n\n return medToken<AttachmentView>((h, s) =>\n ingestAttachmentsComplete({\n client: klient,\n headers: h,\n signal: s,\n path: { id: presign.attachmentId },\n }) as never,\n );\n }\n\n /**\n * Tømmer køen med et ferskt token per rad. Delt av og\n * — de to stedene DD-41 sier køen skal tømmes.\n */\n const flushKø = (): Promise<FlushResult> =>\n flushKo(\n kø,\n (rad) => sendNå({ type: rad.type, text: rad.text } as CaptureInput, rad.clientRef, kontekst),\n telemetri,\n );\n\n const innspel: InnspelClient = {\n version: VERSJON,\n isAnonymous: anonym,\n settings,\n context: kontekst,\n\n async loadSettings() {\n try {\n const cfg = await medToken<ClientConfig>((h, s) =>\n ingestConfigGet({ client: klient, headers: h, signal: s }) as never,\n );\n // Bare det som faktisk kom: en fake eller en gammel plattform kan svare\n // med et delvis objekt, og da står det klienten alt har.\n if (cfg?.textMaxLength === 140 || cfg?.textMaxLength === 280) settings.textMaxLength = cfg.textMaxLength;\n if (typeof cfg?.minTextLength === 'number' && cfg.minTextLength >= 1) settings.minTextLength = cfg.minTextLength;\n if (typeof cfg?.screenshotsEnabled === 'boolean') settings.screenshotsEnabled = cfg.screenshotsEnabled;\n if (typeof cfg?.privacyUrl === 'string' && cfg.privacyUrl) settings.privacyUrl = cfg.privacyUrl;\n } catch {\n // Konfigurasjonen er et tilbud (wireframe 2c-prinsippet): svarer den ikke,\n // står de strammeste verdiene, og innsenderen kan fortsatt melde.\n }\n return settings;\n },\n\n async capture(input) {\n const tekst = input.text ?? '';\n if (tekst.length < settings.minTextLength) {\n throw new InnspelConfigError(\n 'text',\n `er ${tekst.length} tegn. Send-knappen skal være inaktiv under minst ${settings.minTextLength} tegn (DD-44)`,\n );\n }\n if (tekst.length > settings.textMaxLength) {\n throw new InnspelConfigError(\n 'text',\n `er ${tekst.length} tegn, over leietakerens grense på ${settings.textMaxLength}`,\n );\n }\n if (input.context) validerKontekst(input.context, 'capture.context', false);\n // Vedlegget valideres FØR teksten sendes: et bilde over grensene er en\n // utviklerfeil i fangsten, og skal feile før noe er lagret.\n if (input.attachment) validerVedlegg(input.attachment);\n\n const clientRef = input.clientRef ?? nyClientRef();\n const kontekstForKall = slåSammenKontekst(options.context, input.context, VERSJON);\n\n let submission;\n try {\n submission = await sendNå(input, clientRef, kontekstForKall);\n } catch (e) {\n if (e instanceof InnspelApiError) {\n telemetri.emit({ name: 'submission_failed', reason: e.code });\n throw e;\n }\n // En feil i koden køes ikke: den ville sett ut som «Ingen nett» med nett\n // på og aldri blitt tømt. Teksten står i vertens felt.\n if (!(e instanceof NettverksFeil)) throw e;\n // Nettverksfeil: teksten mistes aldri. Kun tekst køes — aldri et\n // skjermbilde (rapport 3, kap. 5).\n await kø.leggTil({\n clientRef,\n type: input.type,\n text: tekst,\n queuedAt: new Date().toISOString(),\n });\n telemetri.emit({\n name: 'submission_sent',\n type: input.type,\n hasAttachment: false,\n offlineQueued: true,\n });\n // Et skjermbilde køes aldri (DD-41): det ble forkastet, og UI-et skal si det.\n return input.attachment\n ? { status: 'queued', clientRef, attachment: { status: 'dropped' } }\n : { status: 'queued', clientRef };\n }\n\n // DD-42: teksten er lagret. Bildet lastes opp i egen forespørsel og kan\n // feile alene — innsendingen står uansett, og kvitteringen sier hva som skjedde.\n let attachment: AttachmentOutcome | undefined;\n if (input.attachment) {\n try {\n attachment = { status: 'uploaded', attachment: await lastOppVedlegg(submission.id, input.attachment) };\n } catch (e) {\n attachment = { status: 'failed', error: e instanceof Error ? e : new Error(String(e)) };\n }\n }\n\n telemetri.emit({\n name: 'submission_sent',\n type: input.type,\n hasAttachment: attachment?.status === 'uploaded',\n offlineQueued: false,\n });\n return attachment ? { status: 'sent', submission, attachment } : { status: 'sent', submission };\n },\n\n knownIssues: {\n async for(query = {}) {\n try {\n const kort = await medToken<KnownIssueCard[]>((h, s) =>\n ingestKnownIssuesList({\n client: klient,\n headers: h,\n signal: s,\n query: {\n ...(query.screen !== undefined ? { screen: query.screen } : {}),\n ...(query.version !== undefined ? { version: query.version } : {}),\n platform: query.platform ?? kontekst.platform,\n },\n }) as never,\n );\n const liste = kort ?? [];\n telemetri.emit({ name: 'known_issue_shown', count: liste.length });\n return liste;\n } catch {\n // «Treffene er et tilbud, aldri en sperre» (wireframe 2c): svarer ikke\n // sjekken, hoppes den over — rett til feltet, ingen melding.\n return [];\n }\n },\n\n async confirm(knownIssueId) {\n const res = await medToken<SubmissionStatusView>((h, s) =>\n ingestKnownIssuesConfirm({\n client: klient,\n headers: h,\n signal: s,\n path: { id: knownIssueId },\n body: { context: kontekst } as never,\n }) as never,\n );\n telemetri.emit({ name: 'known_issue_confirmed' });\n return res;\n },\n },\n\n subjects: {\n async submissions() {\n krevToken();\n\n const ventende: MySubmission[] = (await kø.les()).map((r) => ({\n pending: true as const,\n clientRef: r.clientRef,\n type: r.type,\n text: r.text,\n queuedAt: r.queuedAt,\n }));\n\n let sendte: SubmissionStatusView[] | undefined;\n try {\n sendte = await medToken<SubmissionStatusView[]>((h, s) =>\n ingestSubmissionsListMine({ client: klient, headers: h, signal: s }) as never,\n );\n } catch (e) {\n // En ekte API-feil skjules aldri — 401 og 429 skal fram.\n if (!(e instanceof NettverksFeil)) throw e;\n // Nettverksfeil er noe annet: køen er LOKAL, og den er hele poenget\n // med «Mine innspill» offline (DD-41). At serveren er utilgjengelig\n // skal ikke skjule raden som venter på nett — det er nøyaktig da\n // innsenderen trenger å se den.\n return ventende;\n }\n\n telemetri.emit({ name: 'status_viewed' });\n return [...ventende, ...(sendte ?? [])];\n },\n\n async status(submissionId) {\n krevToken();\n return medToken<SubmissionStatusView>((h, s) =>\n ingestSubmissionsStatus({\n client: klient,\n headers: h,\n signal: s,\n path: { id: submissionId },\n }) as never,\n );\n },\n },\n\n programs: {\n async list() {\n krevToken();\n return medToken<MyPrograms>((h, s) =>\n ingestProgramsListMine({ client: klient, headers: h, signal: s }) as never,\n );\n },\n\n async accept(invitationToken) {\n krevInvitasjonstoken(invitationToken);\n krevToken();\n const svar = await medToken<ParticipationView>((h, s) =>\n ingestProgramsAccept({\n client: klient,\n headers: h,\n signal: s,\n path: { token: invitationToken },\n }) as never,\n );\n telemetri.emit({ name: 'invitation_accepted' });\n return svar;\n },\n\n async decline(invitationToken) {\n krevInvitasjonstoken(invitationToken);\n krevToken();\n await medToken<void>((h, s) =>\n ingestProgramsDecline({\n client: klient,\n headers: h,\n signal: s,\n path: { token: invitationToken },\n }) as never,\n );\n telemetri.emit({ name: 'invitation_declined' });\n },\n\n async withdraw(participationId) {\n if (typeof participationId !== 'string' || participationId.length === 0) {\n throw new InnspelConfigError('participationId', 'mangler — bruk id fra deltakelsen i programs.list()');\n }\n krevToken();\n return medToken<ParticipationView>((h, s) =>\n ingestProgramsWithdraw({\n client: klient,\n headers: h,\n signal: s,\n path: { id: participationId },\n }) as never,\n );\n },\n\n async completeTask(taskId, completion) {\n if (typeof taskId !== 'string' || taskId.length === 0) {\n throw new InnspelConfigError('taskId', 'mangler — bruk id fra program.tasks i programs.list()');\n }\n validerUtfall(completion);\n krevToken();\n const svar = await medToken<TaskCompletionView>((h, s) =>\n ingestProgramsCompleteTask({\n client: klient,\n headers: h,\n signal: s,\n path: { id: taskId },\n body: completion,\n }) as never,\n );\n telemetri.emit({ name: 'task_completed', outcome: completion.outcome });\n return svar;\n },\n\n async respond(followUpId, response) {\n if (typeof followUpId !== 'string' || followUpId.length === 0) {\n throw new InnspelConfigError('followUpId', 'mangler — bruk id fra pendingFollowUps i programs.list()');\n }\n validerUtfall(response);\n krevToken();\n await medToken<void>((h, s) =>\n ingestProgramsRespond({\n client: klient,\n headers: h,\n signal: s,\n path: { id: followUpId },\n body: response,\n }) as never,\n );\n telemetri.emit({ name: 'followup_answered' });\n },\n },\n\n attachments: {\n async upload(submissionId, attachment) {\n if (typeof submissionId !== 'string' || submissionId.length === 0) {\n throw new InnspelConfigError('submissionId', 'mangler — bruk id fra innsendingen capture() ga');\n }\n validerVedlegg(attachment);\n return lastOppVedlegg(submissionId, attachment);\n },\n },\n\n queue: {\n pending: () => kø.les(),\n flush: flushKø,\n },\n\n scanText,\n\n track: (event) => telemetri.emit(event),\n\n async openFeedback(åpneOpsjoner) {\n if (!presenter) {\n throw new InnspelConfigError(\n 'openFeedback',\n 'krever en visning. @innspel/core har ingen UI — installer @innspel/react-native og pakk appen i <InnspelProvider>. Trenger du å sende uten widget, bruk capture()',\n );\n }\n // Køen tømmes når widgeten åpnes — aldri ved oppstart (DD-41).\n await flushKø();\n await presenter.open(åpneOpsjoner);\n },\n\n registerPresenter(p) {\n presenter = p;\n },\n };\n\n return innspel;\n}\n","/**\n * Geometrien bak maskeringen (DD-39, DD-40) — ren TypeScript uten UI, så den\n * kan testes her og brukes likt av `@innspel/react-native` og `@innspel/web`.\n *\n * Alt er rektangler i BILDETS pikselkoordinater. UI-laget tegner dem som\n * heldekkende flater over forhåndsvisningen og rekomponerer bitmapen; det som\n * står her avgjør bare HVOR flatene ligger. Private views (DD-39) er rektangler\n * som UI-et aldri lar brukeren fjerne — den regelen håndheves der, ikke her,\n * fordi den handler om hvem som la rektangelet, ikke om geometri.\n */\n\nexport interface MaskPoint {\n x: number;\n y: number;\n}\n\nexport interface MaskRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Ett fingerstrøk («Tegn over», DD-40) til rektangler: en kvadratisk flate per\n * punkt, og én per mellomrom mellom to punkter, så strøket er tett selv om\n * fingeren beveget seg fort. Alle klippes til bildet.\n */\nexport function strokTilRekter(punkter: readonly MaskPoint[], penselBredde: number, bilde: { width: number; height: number }): MaskRect[] {\n if (penselBredde <= 0 || punkter.length === 0) return [];\n const halv = penselBredde / 2;\n const ut: MaskRect[] = [];\n\n const legg = (p: MaskPoint) => {\n const r = klipp({ x: p.x - halv, y: p.y - halv, width: penselBredde, height: penselBredde }, bilde);\n if (r) ut.push(r);\n };\n\n legg(punkter[0]!);\n for (let i = 1; i < punkter.length; i++) {\n const a = punkter[i - 1]!;\n const b = punkter[i]!;\n const avstand = Math.hypot(b.x - a.x, b.y - a.y);\n // Fyll gapet med mellomliggende kvadrater når fingeren beveget seg mer enn\n // en halv penselbredde — ellers blir strøket en rekke løse prikker.\n const steg = Math.max(1, Math.ceil(avstand / halv));\n for (let s = 1; s <= steg; s++) {\n legg({ x: a.x + ((b.x - a.x) * s) / steg, y: a.y + ((b.y - a.y) * s) / steg });\n }\n }\n return ut;\n}\n\n/** «Masker felt» (DD-40): ett trykk legger en boks sentrert på punktet. */\nexport function trykkTilRekt(punkt: MaskPoint, boks: { width: number; height: number }, bilde: { width: number; height: number }): MaskRect | null {\n return klipp({ x: punkt.x - boks.width / 2, y: punkt.y - boks.height / 2, width: boks.width, height: boks.height }, bilde);\n}\n\n/**\n * Klipper et rektangel til bildet. Null når ingenting er igjen — et rektangel\n * helt utenfor bildet skal ikke tegnes, og heller ikke telles som en maskering.\n */\nexport function klipp(r: MaskRect, bilde: { width: number; height: number }): MaskRect | null {\n const x1 = Math.max(0, r.x);\n const y1 = Math.max(0, r.y);\n const x2 = Math.min(bilde.width, r.x + r.width);\n const y2 = Math.min(bilde.height, r.y + r.height);\n if (x2 <= x1 || y2 <= y1) return null;\n return { x: x1, y: y1, width: x2 - x1, height: y2 - y1 };\n}\n\n/**\n * Skalerer et rektangel fra ett koordinatsystem til et annet — typisk fra\n * skjermpunkter (der fingeren var) til bildepiksler (der masken skal ligge).\n * Rundes UTOVER: en maske skal aldri bli en piksel for liten.\n */\nexport function skaler(r: MaskRect, fra: { width: number; height: number }, til: { width: number; height: number }): MaskRect {\n const sx = til.width / fra.width;\n const sy = til.height / fra.height;\n const x = Math.floor(r.x * sx);\n const y = Math.floor(r.y * sy);\n return {\n x,\n y,\n width: Math.ceil((r.x + r.width) * sx) - x,\n height: Math.ceil((r.y + r.height) * sy) - y,\n };\n}\n\n/** Om et punkt ligger i et av rektanglene — brukes for «trykk på en maske for å angre den». */\nexport function treffer(punkt: MaskPoint, r: MaskRect): boolean {\n return punkt.x >= r.x && punkt.x < r.x + r.width && punkt.y >= r.y && punkt.y < r.y + r.height;\n}\n\n/**\n * Om rektanglene dekker hele bildet. UI-et bruker det til å si «alt er\n * maskert» — da er det ingenting å sende, og «Fjern bildet» er det ærlige valget.\n */\nexport function dekkerAlt(rekter: readonly MaskRect[], bilde: { width: number; height: number }): boolean {\n return rekter.some((r) => r.x <= 0 && r.y <= 0 && r.x + r.width >= bilde.width && r.y + r.height >= bilde.height);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/generated/api/core/bodySerializer.gen.ts","../src/generated/api/core/serverSentEvents.gen.ts","../src/generated/api/core/pathSerializer.gen.ts","../src/generated/api/core/utils.gen.ts","../src/generated/api/core/auth.gen.ts","../src/generated/api/client/utils.gen.ts","../src/generated/api/client/client.gen.ts","../src/generated/api/client.gen.ts","../src/generated/api/sdk.gen.ts","../src/feil.ts","../src/identitet.ts","../src/flush.ts","../src/ko.ts","../src/kontekst.ts","../src/monster.ts","../src/uuid.ts","../src/vedlegg.ts","../src/versjon.ts","../src/klient.ts","../src/maskering.ts"],"names":["joinedValues","config","request","url","init"],"mappings":"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","file":"index.cjs","sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ArrayStyle, ObjectStyle, SerializerOptions } from './pathSerializer.gen';\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: unknown) => unknown;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (data: FormData, key: string, value: unknown): void => {\n if (typeof value === 'string' || value instanceof Blob) {\n data.append(key, value);\n } else if (value instanceof Date) {\n data.append(key, value.toISOString());\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nconst serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value: unknown): void => {\n if (typeof value === 'string') {\n data.append(key, value);\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nexport const formDataBodySerializer = {\n bodySerializer: (body: unknown): FormData => {\n const data = new FormData();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeFormDataPair(data, key, v));\n } else {\n serializeFormDataPair(data, key, value);\n }\n });\n\n return data;\n },\n};\n\nexport const jsonBodySerializer = {\n bodySerializer: (body: unknown): string =>\n JSON.stringify(body, (_key, value) => (typeof value === 'bigint' ? value.toString() : value)),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: (body: unknown): string => {\n const data = new URLSearchParams();\n\n Object.entries(body as Record<string, unknown>).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n } else {\n serializeUrlSearchParamsPair(data, key, value);\n }\n });\n\n return data.toString();\n },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Config } from './types.gen';\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, 'method'> &\n Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit['body'];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport function createSseClient<TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> {\n let lastEventId: string | undefined;\n\n const sleep = sseSleepFn ?? ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set('Last-Event-ID', lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: 'follow',\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\n }\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`);\n\n if (!response.body) throw new Error('No body in SSE response');\n\n const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();\n\n let buffer = '';\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener('abort', abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n buffer = buffer.replace(/\\r\\n?/g, '\\n'); // normalize line endings\n\n const chunks = buffer.split('\\n\\n');\n buffer = chunks.pop() ?? '';\n\n for (const chunk of chunks) {\n const lines = chunk.split('\\n');\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith('data:')) {\n dataLines.push(line.replace(/^data:\\s*/, ''));\n } else if (line.startsWith('event:')) {\n eventName = line.replace(/^event:\\s*/, '');\n } else if (line.startsWith('id:')) {\n lastEventId = line.replace(/^id:\\s*/, '');\n } else if (line.startsWith('retry:')) {\n const parsed = Number.parseInt(line.replace(/^retry:\\s*/, ''), 10);\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join('\\n');\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener('abort', abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (sseMaxRetryAttempts !== undefined && attempt >= sseMaxRetryAttempts) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 30000);\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T> extends SerializePrimitiveOptions, SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n allowReserved?: boolean;\n name: string;\n}\n\nexport interface SerializerOptions<T> {\n /**\n * @default true\n */\n explode: boolean;\n style: T;\n}\n\nexport type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = 'label' | 'matrix' | 'simple';\nexport type ObjectStyle = 'form' | 'deepObject';\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle): '.' | ';' | ',' | '&' => {\n switch (style) {\n case 'label':\n return '.';\n case 'matrix':\n return ';';\n case 'simple':\n return ',';\n default:\n return '&';\n }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle): ',' | '|' | '%20' => {\n switch (style) {\n case 'form':\n return ',';\n case 'pipeDelimited':\n return '|';\n case 'spaceDelimited':\n return '%20';\n default:\n return ',';\n }\n};\n\nexport const separatorObjectExplode = (style: ObjectSeparatorStyle): '.' | ';' | ',' | '&' => {\n switch (style) {\n case 'label':\n return '.';\n case 'matrix':\n return ';';\n case 'simple':\n return ',';\n default:\n return '&';\n }\n};\n\nexport const serializeArrayParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n}: SerializeOptions<ArraySeparatorStyle> & {\n value: unknown[];\n}): string => {\n if (!explode) {\n const joinedValues = (\n allowReserved ? value : value.map((v) => encodeURIComponent(v as string))\n ).join(separatorArrayNoExplode(style));\n switch (style) {\n case 'label':\n return `.${joinedValues}`;\n case 'matrix':\n return `;${name}=${joinedValues}`;\n case 'simple':\n return joinedValues;\n default:\n return `${name}=${joinedValues}`;\n }\n }\n\n const separator = separatorArrayExplode(style);\n const joinedValues = value\n .map((v) => {\n if (style === 'label' || style === 'simple') {\n return allowReserved ? v : encodeURIComponent(v as string);\n }\n\n return serializePrimitiveParam({\n allowReserved,\n name,\n value: v as string,\n });\n })\n .join(separator);\n return style === 'label' || style === 'matrix' ? separator + joinedValues : joinedValues;\n};\n\nexport const serializePrimitiveParam = ({\n allowReserved,\n name,\n value,\n}: SerializePrimitiveParam): string => {\n if (value === undefined || value === null) {\n return '';\n }\n\n if (typeof value === 'object') {\n throw new Error(\n 'Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.',\n );\n }\n\n return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\n\nexport const serializeObjectParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n valueOnly,\n}: SerializeOptions<ObjectSeparatorStyle> & {\n value: Record<string, unknown> | Date;\n valueOnly?: boolean;\n}): string => {\n if (value instanceof Date) {\n return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n }\n\n if (style !== 'deepObject' && !explode) {\n let values: string[] = [];\n Object.entries(value).forEach(([key, v]) => {\n values = [...values, key, allowReserved ? (v as string) : encodeURIComponent(v as string)];\n });\n const joinedValues = values.join(',');\n switch (style) {\n case 'form':\n return `${name}=${joinedValues}`;\n case 'label':\n return `.${joinedValues}`;\n case 'matrix':\n return `;${name}=${joinedValues}`;\n default:\n return joinedValues;\n }\n }\n\n const separator = separatorObjectExplode(style);\n const joinedValues = Object.entries(value)\n .map(([key, v]) =>\n serializePrimitiveParam({\n allowReserved,\n name: style === 'deepObject' ? `${name}[${key}]` : key,\n value: v as string,\n }),\n )\n .join(separator);\n return style === 'label' || style === 'matrix' ? separator + joinedValues : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from './bodySerializer.gen';\nimport {\n type ArraySeparatorStyle,\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from './pathSerializer.gen';\n\nexport interface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nexport const PATH_PARAM_RE: RegExp = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({ path, url: _url }: PathSerializer): string => {\n let url = _url;\n const matches = _url.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n let explode = false;\n let name = match.substring(1, match.length - 1);\n let style: ArraySeparatorStyle = 'simple';\n\n if (name.endsWith('*')) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n\n if (name.startsWith('.')) {\n name = name.substring(1);\n style = 'label';\n } else if (name.startsWith(';')) {\n name = name.substring(1);\n style = 'matrix';\n }\n\n const value = path[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n url = url.replace(match, serializeArrayParam({ explode, name, style, value }));\n continue;\n }\n\n if (typeof value === 'object') {\n url = url.replace(\n match,\n serializeObjectParam({\n explode,\n name,\n style,\n value: value as Record<string, unknown>,\n valueOnly: true,\n }),\n );\n continue;\n }\n\n if (style === 'matrix') {\n url = url.replace(\n match,\n `;${serializePrimitiveParam({\n name,\n value: value as string,\n })}`,\n );\n continue;\n }\n\n const replaceValue = encodeURIComponent(\n style === 'label' ? `.${value as string}` : (value as string),\n );\n url = url.replace(match, replaceValue);\n }\n }\n return url;\n};\n\nexport const getUrl = ({\n baseUrl,\n path,\n query,\n querySerializer,\n url: _url,\n}: {\n baseUrl?: string;\n path?: Record<string, unknown>;\n query?: Record<string, unknown>;\n querySerializer: QuerySerializer;\n url: string;\n}): string => {\n const pathUrl = _url.startsWith('/') ? _url : `/${_url}`;\n let url = (baseUrl ?? '') + pathUrl;\n if (path) {\n url = defaultPathSerializer({ path, url });\n }\n let search = query ? querySerializer(query) : '';\n if (search.startsWith('?')) {\n search = search.substring(1);\n }\n if (search) {\n url += `?${search}`;\n }\n return url;\n};\n\nexport function getValidRequestBody(options: {\n body?: unknown;\n bodySerializer?: BodySerializer | null;\n serializedBody?: unknown;\n}): unknown {\n const hasBody = options.body !== undefined;\n const isSerializedBody = hasBody && options.bodySerializer;\n\n if (isSerializedBody) {\n if ('serializedBody' in options) {\n const hasSerializedBody =\n options.serializedBody !== undefined && options.serializedBody !== '';\n\n return hasSerializedBody ? options.serializedBody : null;\n }\n\n // not all clients implement a serializedBody property (i.e., client-axios)\n return options.body !== '' ? options.body : null;\n }\n\n // plain/text body\n if (hasBody) {\n return options.body;\n }\n\n // no body was provided\n return undefined;\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type AuthToken = string | undefined;\n\nexport interface Auth {\n /**\n * Which part of the request do we use to send the auth?\n *\n * @default 'header'\n */\n in?: 'header' | 'query' | 'cookie';\n /**\n * A unique identifier for the security scheme.\n *\n * Defined only when there are multiple security schemes whose `Auth`\n * shape would otherwise be identical.\n */\n key?: string;\n /**\n * Header or query parameter name.\n *\n * @default 'Authorization'\n */\n name?: string;\n scheme?: 'basic' | 'bearer';\n type: 'apiKey' | 'http';\n}\n\nexport const getAuthToken = async (\n auth: Auth,\n callback: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken,\n): Promise<string | undefined> => {\n const token = typeof callback === 'function' ? await callback(auth) : callback;\n\n if (!token) {\n return;\n }\n\n if (auth.scheme === 'bearer') {\n return `Bearer ${token}`;\n }\n\n if (auth.scheme === 'basic') {\n return `Basic ${btoa(token)}`;\n }\n\n return token;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { getAuthToken } from '../core/auth.gen';\nimport type { QuerySerializerOptions } from '../core/bodySerializer.gen';\nimport { jsonBodySerializer } from '../core/bodySerializer.gen';\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from '../core/pathSerializer.gen';\nimport { getUrl } from '../core/utils.gen';\nimport type { Client, ClientOptions, Config, RequestOptions } from './types.gen';\n\nexport const createQuerySerializer = <T = unknown>({\n parameters = {},\n ...args\n}: QuerySerializerOptions = {}): ((queryParams: T) => string) => {\n const querySerializer = (queryParams: T): string => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === 'object') {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'form',\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === 'object') {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: 'deepObject',\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join('&');\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (contentType: string | null): Exclude<Config['parseAs'], 'auto'> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return 'stream';\n }\n\n const cleanContent = contentType.split(';')[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (cleanContent.startsWith('application/json') || cleanContent.endsWith('+json')) {\n return 'json';\n }\n\n if (cleanContent === 'multipart/form-data') {\n return 'formData';\n }\n\n if (\n ['application/', 'audio/', 'image/', 'video/'].some((type) => cleanContent.startsWith(type))\n ) {\n return 'blob';\n }\n\n if (cleanContent.startsWith('text/')) {\n return 'text';\n }\n\n return;\n};\n\nconst checkForExistence = (\n options: Pick<RequestOptions, 'auth' | 'query'> & {\n headers: Headers;\n },\n name?: string,\n): boolean => {\n if (!name) {\n return false;\n }\n if (\n options.headers.has(name) ||\n options.query?.[name] ||\n options.headers.get('Cookie')?.includes(`${name}=`)\n ) {\n return true;\n }\n return false;\n};\n\nexport async function setAuthParams(\n options: Pick<RequestOptions, 'auth' | 'query' | 'security'> & {\n headers: Headers;\n },\n): Promise<void> {\n for (const auth of options.security ?? []) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? 'Authorization';\n\n switch (auth.in) {\n case 'query':\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case 'cookie':\n options.headers.append('Cookie', `${name}=${token}`);\n break;\n case 'header':\n default:\n options.headers.set(name, token);\n break;\n }\n }\n}\n\nexport const buildUrl: Client['buildUrl'] = (options) =>\n getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === 'function'\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith('/')) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>['headers'] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header) {\n continue;\n }\n\n const iterator = header instanceof Headers ? headersEntries(header) : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e., their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === 'object' ? JSON.stringify(value) : (value as string),\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n /** response may be undefined due to a network error where no response object is produced */\n response: Res | undefined,\n /** request may be undefined, because error may be from building the request object itself */\n request: Req | undefined,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (request: Req, options: Options) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n fns: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === 'number') {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: 'form',\n },\n object: {\n explode: true,\n style: 'deepObject',\n },\n});\n\nconst defaultHeaders = {\n 'Content-Type': 'application/json',\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: 'auto',\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from '../core/serverSentEvents.gen';\nimport type { HttpMethod } from '../core/types.gen';\nimport { getValidRequestBody } from '../core/utils.gen';\nimport type { Client, Config, RequestOptions, ResolvedRequestOptions } from './types.gen';\nimport {\n buildUrl,\n createConfig,\n createInterceptors,\n getParseAs,\n mergeConfigs,\n mergeHeaders,\n setAuthParams,\n} from './utils.gen';\n\ntype ReqInit = Omit<RequestInit, 'body' | 'headers'> & {\n body?: any;\n headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n let _config = mergeConfigs(createConfig(), config);\n\n const getConfig = (): Config => ({ ..._config });\n\n const setConfig = (config: Config): Config => {\n _config = mergeConfigs(_config, config);\n return getConfig();\n };\n\n const interceptors = createInterceptors<Request, Response, unknown, ResolvedRequestOptions>();\n\n const beforeRequest = async <\n TData = unknown,\n TResponseStyle extends 'data' | 'fields' = 'fields',\n ThrowOnError extends boolean = boolean,\n Url extends string = string,\n >(\n options: RequestOptions<TData, TResponseStyle, ThrowOnError, Url>,\n ) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: undefined as string | undefined,\n };\n\n if (opts.security) {\n await setAuthParams(opts);\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body) as string | undefined;\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === '') {\n opts.headers.delete('Content-Type');\n }\n\n const resolvedOpts = opts as typeof opts &\n ResolvedRequestOptions<TResponseStyle, ThrowOnError, Url>;\n const url = buildUrl(resolvedOpts);\n\n return { opts: resolvedOpts, url };\n };\n\n const request: Client['request'] = async (options) => {\n const throwOnError = options.throwOnError ?? _config.throwOnError;\n const responseStyle = options.responseStyle ?? _config.responseStyle;\n\n let request: Request | undefined;\n let response: Response | undefined;\n\n try {\n const { opts, url } = await beforeRequest(options);\n const requestInit: ReqInit = {\n redirect: 'follow',\n ...opts,\n body: getValidRequestBody(opts),\n };\n\n request = new Request(url, requestInit);\n\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n\n response = await _fetch(request);\n\n for (const fn of interceptors.response.fns) {\n if (fn) {\n response = await fn(response, request, opts);\n }\n }\n\n const result = {\n request,\n response,\n };\n\n if (response.ok) {\n const parseAs =\n (opts.parseAs === 'auto'\n ? getParseAs(response.headers.get('Content-Type'))\n : opts.parseAs) ?? 'json';\n\n if (response.status === 204 || response.headers.get('Content-Length') === '0') {\n let emptyData: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'text':\n emptyData = await response[parseAs]();\n break;\n case 'formData':\n emptyData = new FormData();\n break;\n case 'stream':\n emptyData = response.body;\n break;\n case 'json':\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === 'data'\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case 'arrayBuffer':\n case 'blob':\n case 'formData':\n case 'text':\n data = await response[parseAs]();\n break;\n case 'json': {\n // Some servers return 200 with no Content-Length and empty body.\n // response.json() would throw; read as text and parse if non-empty.\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n break;\n }\n case 'stream':\n return opts.responseStyle === 'data'\n ? response.body\n : {\n data: response.body,\n ...result,\n };\n }\n\n if (parseAs === 'json') {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n\n return opts.responseStyle === 'data'\n ? data\n : {\n data,\n ...result,\n };\n }\n\n const textError = await response.text();\n let jsonError: unknown;\n\n try {\n jsonError = JSON.parse(textError);\n } catch {\n // noop\n }\n\n throw jsonError ?? textError;\n } catch (error) {\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = await fn(finalError, response, request, options as ResolvedRequestOptions);\n }\n }\n\n finalError = finalError || {};\n\n if (throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return responseStyle === 'data'\n ? undefined\n : {\n error: finalError,\n request,\n response,\n };\n }\n };\n\n const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn = (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n serializedBody: getValidRequestBody(opts) as BodyInit | null | undefined,\n url,\n });\n };\n\n const _buildUrl: Client['buildUrl'] = (options) => buildUrl({ ..._config, ...options });\n\n return {\n buildUrl: _buildUrl,\n connect: makeMethodFn('CONNECT'),\n delete: makeMethodFn('DELETE'),\n get: makeMethodFn('GET'),\n getConfig,\n head: makeMethodFn('HEAD'),\n interceptors,\n options: makeMethodFn('OPTIONS'),\n patch: makeMethodFn('PATCH'),\n post: makeMethodFn('POST'),\n put: makeMethodFn('PUT'),\n request,\n setConfig,\n sse: {\n connect: makeSseFn('CONNECT'),\n delete: makeSseFn('DELETE'),\n get: makeSseFn('GET'),\n head: makeSseFn('HEAD'),\n options: makeSseFn('OPTIONS'),\n patch: makeSseFn('PATCH'),\n post: makeSseFn('POST'),\n put: makeSseFn('PUT'),\n trace: makeSseFn('TRACE'),\n },\n trace: makeMethodFn('TRACE'),\n } as Client;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type Client, type ClientOptions, type Config, createClient, createConfig } from './client';\nimport type { ClientOptions as ClientOptions2 } from './types.gen';\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (override?: Config<ClientOptions & T>) => Config<Required<ClientOptions> & T>;\n\nexport const client: Client = createClient(createConfig<ClientOptions2>());\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Client, ClientMeta, Options as Options2, RequestResult, TDataShape } from './client';\nimport { client } from './client.gen';\nimport type { AdminUsersDisableData, AdminUsersDisableErrors, AdminUsersDisableResponses, AdminUsersEnableData, AdminUsersEnableErrors, AdminUsersEnableResponses, AdminUsersListData, AdminUsersListErrors, AdminUsersListResponses, ApiKeysCreateData, ApiKeysCreateErrors, ApiKeysCreateResponses, ApiKeysListData, ApiKeysListErrors, ApiKeysListResponses, ApiKeysRevokeData, ApiKeysRevokeErrors, ApiKeysRevokeResponses, AttachmentsCompleteData, AttachmentsCompleteErrors, AttachmentsCompleteResponses, AttachmentsPresignData, AttachmentsPresignErrors, AttachmentsPresignResponses, ConfigGetData, ConfigGetErrors, ConfigGetResponses, DeletionsGetData, DeletionsGetErrors, DeletionsGetResponses, EventsSendData, EventsSendErrors, EventsSendResponses, HandoffsCreateData, HandoffsCreateErrors, HandoffsCreateResponses, HandoffsGetData, HandoffsGetErrors, HandoffsGetResponses, KnownIssuesConfirmData, KnownIssuesConfirmErrors, KnownIssuesConfirmResponses, KnownIssuesCreateData, KnownIssuesCreateErrors, KnownIssuesCreateResponses, KnownIssuesGetData, KnownIssuesGetErrors, KnownIssuesGetResponses, KnownIssuesList2Data, KnownIssuesList2Errors, KnownIssuesList2Responses, KnownIssuesListData, KnownIssuesListErrors, KnownIssuesListResponses, KnownIssuesUpdateData, KnownIssuesUpdateErrors, KnownIssuesUpdateResponses, MeGetData, MeGetErrors, MeGetResponses, ProductsCreateData, ProductsCreateErrors, ProductsCreateResponses, ProductsListData, ProductsListErrors, ProductsListResponses, ProductsRevokeKeyData, ProductsRevokeKeyErrors, ProductsRevokeKeyResponses, ProductsRotateKeyData, ProductsRotateKeyErrors, ProductsRotateKeyResponses, ProductsUpdateData, ProductsUpdateErrors, ProductsUpdateResponses, ProgramsAcceptData, ProgramsAcceptErrors, ProgramsAcceptResponses, ProgramsCloseData, ProgramsCloseErrors, ProgramsCloseResponses, ProgramsCompleteTaskData, ProgramsCompleteTaskErrors, ProgramsCompleteTaskResponses, ProgramsCreateData, ProgramsCreateErrors, ProgramsCreateResponses, ProgramsDeclineData, ProgramsDeclineErrors, ProgramsDeclineResponses, ProgramsFlagConfirmedData, ProgramsFlagConfirmedErrors, ProgramsFlagConfirmedResponses, ProgramsGetData, ProgramsGetErrors, ProgramsGetReportData, ProgramsGetReportErrors, ProgramsGetReportResponses, ProgramsGetResponses, ProgramsInviteData, ProgramsInviteErrors, ProgramsInviteResponses, ProgramsListData, ProgramsListErrors, ProgramsListInvitationsData, ProgramsListInvitationsErrors, ProgramsListInvitationsResponses, ProgramsListMineData, ProgramsListMineErrors, ProgramsListMineResponses, ProgramsListParticipantsData, ProgramsListParticipantsErrors, ProgramsListParticipantsResponses, ProgramsListResponses, ProgramsReportData, ProgramsReportErrors, ProgramsReportResponses, ProgramsRespondData, ProgramsRespondErrors, ProgramsRespondResponses, ProgramsSegmentData, ProgramsSegmentErrors, ProgramsSegmentResponses, ProgramsUpdateData, ProgramsUpdateErrors, ProgramsUpdateResponses, ProgramsWithdrawData, ProgramsWithdrawErrors, ProgramsWithdrawResponses, SettingsGetData, SettingsGetErrors, SettingsGetResponses, SettingsUpdateData, SettingsUpdateErrors, SettingsUpdateResponses, StatsGetData, StatsGetErrors, StatsGetResponses, SubjectsRemoveData, SubjectsRemoveErrors, SubjectsRemoveResponses, SubmissionsAddNoteData, SubmissionsAddNoteErrors, SubmissionsAddNoteResponses, SubmissionsAttachmentUrlData, SubmissionsAttachmentUrlErrors, SubmissionsAttachmentUrlResponses, SubmissionsCountsData, SubmissionsCountsErrors, SubmissionsCountsResponses, SubmissionsCreateData, SubmissionsCreateErrors, SubmissionsCreateResponses, SubmissionsGetData, SubmissionsGetErrors, SubmissionsGetResponses, SubmissionsListData, SubmissionsListErrors, SubmissionsListMineData, SubmissionsListMineErrors, SubmissionsListMineResponses, SubmissionsListResponses, SubmissionsRemoveAttachmentData, SubmissionsRemoveAttachmentErrors, SubmissionsRemoveAttachmentResponses, SubmissionsStatusData, SubmissionsStatusErrors, SubmissionsStatusResponses, SubmissionsUpdateData, SubmissionsUpdateErrors, SubmissionsUpdateResponses, SubmissionsUpdateStatusData, SubmissionsUpdateStatusErrors, SubmissionsUpdateStatusResponses, WebhooksCreateData, WebhooksCreateErrors, WebhooksCreateResponses, WebhooksGetData, WebhooksGetErrors, WebhooksGetResponses, WebhooksListData, WebhooksListDeliveriesData, WebhooksListDeliveriesErrors, WebhooksListDeliveriesResponses, WebhooksListErrors, WebhooksListResponses, WebhooksRemoveData, WebhooksRemoveErrors, WebhooksRemoveResponses, WebhooksRetryDeliveryData, WebhooksRetryDeliveryErrors, WebhooksRetryDeliveryResponses, WebhooksRotateSecretData, WebhooksRotateSecretErrors, WebhooksRotateSecretResponses, WebhooksTestData, WebhooksTestErrors, WebhooksTestResponses, WebhooksUpdateData, WebhooksUpdateErrors, WebhooksUpdateResponses, WebhooksVerifyData, WebhooksVerifyErrors, WebhooksVerifyResponses } from './types.gen';\n\nexport type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: keyof ClientMeta extends never ? Record<string, unknown> : ClientMeta;\n};\n\n/**\n * ApiKeys for Tenant-flaten, uten klartekst. Kun eier.\n */\nexport const apiKeysList = <ThrowOnError extends boolean = false>(options?: Options<ApiKeysListData, ThrowOnError>): RequestResult<ApiKeysListResponses, ApiKeysListErrors, ThrowOnError> => (options?.client ?? client).get<ApiKeysListResponses, ApiKeysListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/api-keys',\n ...options\n});\n\n/**\n * Oppretter en scopet ApiKey. Klarteksten finnes kun i denne responsen (DD-20). Kun eier.\n */\nexport const apiKeysCreate = <ThrowOnError extends boolean = false>(options: Options<ApiKeysCreateData, ThrowOnError>): RequestResult<ApiKeysCreateResponses, ApiKeysCreateErrors, ThrowOnError> => (options.client ?? client).post<ApiKeysCreateResponses, ApiKeysCreateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/api-keys',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Kaller tilbake. Kun eier.\n */\nexport const apiKeysRevoke = <ThrowOnError extends boolean = false>(options: Options<ApiKeysRevokeData, ThrowOnError>): RequestResult<ApiKeysRevokeResponses, ApiKeysRevokeErrors, ThrowOnError> => (options.client ?? client).delete<ApiKeysRevokeResponses, ApiKeysRevokeErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/api-keys/{id}',\n ...options\n});\n\n/**\n * Registeret (M2.4): alle kjente feil med tellere. Alle roller.\n */\nexport const knownIssuesList = <ThrowOnError extends boolean = false>(options?: Options<KnownIssuesListData, ThrowOnError>): RequestResult<KnownIssuesListResponses, KnownIssuesListErrors, ThrowOnError> => (options?.client ?? client).get<KnownIssuesListResponses, KnownIssuesListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/known-issues',\n ...options\n});\n\n/**\n * Oppretter en kjent feil, fra bunnen eller fra en sak («Gjør til kjent feil», f i innboksen). Med fromSubmissionId går saken til kjent_feil og teller i Reach. Behandler og eier.\n */\nexport const knownIssuesCreate = <ThrowOnError extends boolean = false>(options: Options<KnownIssuesCreateData, ThrowOnError>): RequestResult<KnownIssuesCreateResponses, KnownIssuesCreateErrors, ThrowOnError> => (options.client ?? client).post<KnownIssuesCreateResponses, KnownIssuesCreateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/known-issues',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Én kjent feil med tellere — hent den FØR PATCH til fikset, så panelet kan vise hvor mange som varsles (M2.4). Alle roller.\n */\nexport const knownIssuesGet = <ThrowOnError extends boolean = false>(options: Options<KnownIssuesGetData, ThrowOnError>): RequestResult<KnownIssuesGetResponses, KnownIssuesGetErrors, ThrowOnError> => (options.client ?? client).get<KnownIssuesGetResponses, KnownIssuesGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/known-issues/{id}',\n ...options\n});\n\n/**\n * Oppdaterer. status = fikset krever fixedIn (422 fixed_in_required), emitterer known_issue.fixed én gang til alle med Reach (DD-31) og tar sakene med knownIssueId til statusType complete. fikset → aktiv finnes ikke (409 invalid_status_transition). Behandler og eier.\n */\nexport const knownIssuesUpdate = <ThrowOnError extends boolean = false>(options: Options<KnownIssuesUpdateData, ThrowOnError>): RequestResult<KnownIssuesUpdateResponses, KnownIssuesUpdateErrors, ThrowOnError> => (options.client ?? client).patch<KnownIssuesUpdateResponses, KnownIssuesUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/known-issues/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Hvem er jeg — panelets første kall etter innlogging. Beviser at sesjonen har aal2 (ellers 403 mfa_required) og at brukeren har et sete hos en leietaker (ellers 401 — også når kontoen er deaktivert). Alle roller. Ingen skriving, ingen audit-oppføring.\n */\nexport const meGet = <ThrowOnError extends boolean = false>(options?: Options<MeGetData, ThrowOnError>): RequestResult<MeGetResponses, MeGetErrors, ThrowOnError> => (options?.client ?? client).get<MeGetResponses, MeGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/me',\n ...options\n});\n\n/**\n * Produktene med SDK-nøkler (kun prefiks). Alle roller.\n */\nexport const productsList = <ThrowOnError extends boolean = false>(options?: Options<ProductsListData, ThrowOnError>): RequestResult<ProductsListResponses, ProductsListErrors, ThrowOnError> => (options?.client ?? client).get<ProductsListResponses, ProductsListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/products',\n ...options\n});\n\n/**\n * Oppretter et produkt med én SDK-nøkkel; klarteksten står i keys[0].key og finnes aldri igjen (DD-20). Kun eier.\n */\nexport const productsCreate = <ThrowOnError extends boolean = false>(options: Options<ProductsCreateData, ThrowOnError>): RequestResult<ProductsCreateResponses, ProductsCreateErrors, ThrowOnError> => (options.client ?? client).post<ProductsCreateResponses, ProductsCreateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/products',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Oppdaterer navn, plattformer, bundle-ID-er og origins. Kun eier.\n */\nexport const productsUpdate = <ThrowOnError extends boolean = false>(options: Options<ProductsUpdateData, ThrowOnError>): RequestResult<ProductsUpdateResponses, ProductsUpdateErrors, ThrowOnError> => (options.client ?? client).patch<ProductsUpdateResponses, ProductsUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/products/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Roterer: oppretter en ny SDK-nøkkel ved siden av den gamle, så begge er gyldige til den gamle kalles tilbake (K3). Maks to aktive — finnes det allerede to, avvises rotasjonen med 409 invalid_status_transition; kall én tilbake først. Klarteksten kun her (DD-20). Kun eier.\n */\nexport const productsRotateKey = <ThrowOnError extends boolean = false>(options: Options<ProductsRotateKeyData, ThrowOnError>): RequestResult<ProductsRotateKeyResponses, ProductsRotateKeyErrors, ThrowOnError> => (options.client ?? client).post<ProductsRotateKeyResponses, ProductsRotateKeyErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/products/{id}/keys',\n ...options\n});\n\n/**\n * Kaller tilbake en SDK-nøkkel. Klienter med den nøkkelen får 401 fra neste kall. Kun eier.\n */\nexport const productsRevokeKey = <ThrowOnError extends boolean = false>(options: Options<ProductsRevokeKeyData, ThrowOnError>): RequestResult<ProductsRevokeKeyResponses, ProductsRevokeKeyErrors, ThrowOnError> => (options.client ?? client).delete<ProductsRevokeKeyResponses, ProductsRevokeKeyErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/products/{id}/keys/{keyId}',\n ...options\n});\n\n/**\n * Alle programmer. Alle roller.\n */\nexport const programsList = <ThrowOnError extends boolean = false>(options?: Options<ProgramsListData, ThrowOnError>): RequestResult<ProgramsListResponses, ProgramsListErrors, ThrowOnError> => (options?.client ?? client).get<ProgramsListResponses, ProgramsListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs',\n ...options\n});\n\n/**\n * Oppretter program i utkast (4a). Ved minorsPresent tvinges commitmentFree og termsUrl avvises (422 minors_present_conflict); maxContacts over leietakerens tak gir 422 contacts_exceed_tenant_cap. Behandler og eier.\n */\nexport const programsCreate = <ThrowOnError extends boolean = false>(options: Options<ProgramsCreateData, ThrowOnError>): RequestResult<ProgramsCreateResponses, ProgramsCreateErrors, ThrowOnError> => (options.client ?? client).post<ProgramsCreateResponses, ProgramsCreateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Programsiden (4c) med tellere. Alle roller.\n */\nexport const programsGet = <ThrowOnError extends boolean = false>(options: Options<ProgramsGetData, ThrowOnError>): RequestResult<ProgramsGetResponses, ProgramsGetErrors, ThrowOnError> => (options.client ?? client).get<ProgramsGetResponses, ProgramsGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}',\n ...options\n});\n\n/**\n * Oppdaterer og flytter status. aapen krever hypotese, suksesskriterium og ≥ 1 oppgave med estimatedMinutes — 409 program_incomplete med hva som mangler (forklart lås, DD-17). avbrutt krever cancelReason og emitterer program.closed. aktiv kan ikke settes herfra. Oppgaver kan ikke endres etter aapen. Behandler og eier.\n */\nexport const programsUpdate = <ThrowOnError extends boolean = false>(options: Options<ProgramsUpdateData, ThrowOnError>): RequestResult<ProgramsUpdateResponses, ProgramsUpdateErrors, ThrowOnError> => (options.client ?? client).patch<ProgramsUpdateResponses, ProgramsUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Utsendte invitasjoner uten token — sendt, akseptert, avslått, utløpt. Alle roller.\n */\nexport const programsListInvitations = <ThrowOnError extends boolean = false>(options: Options<ProgramsListInvitationsData, ThrowOnError>): RequestResult<ProgramsListInvitationsResponses, ProgramsListInvitationsErrors, ThrowOnError> => (options.client ?? client).get<ProgramsListInvitationsResponses, ProgramsListInvitationsErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}/invitations',\n ...options\n});\n\n/**\n * Inviterer pseudonymer (4b). Krever aapen (409 invalid_status_transition). Tokenet finnes i denne responsen og i webhooken program.invitation_created (én per invitasjon) — aldri i noe GET-svar. Leietakeren løser subject → bruker og sender tokenet gjennom egen kanal; plattformen sender aldri (DD-12). Et subject med aktiv invitasjon roterer: nytt token, det gamle slutter å virke. Behandler og eier.\n */\nexport const programsInvite = <ThrowOnError extends boolean = false>(options: Options<ProgramsInviteData, ThrowOnError>): RequestResult<ProgramsInviteResponses, ProgramsInviteErrors, ThrowOnError> => (options.client ?? client).post<ProgramsInviteResponses, ProgramsInviteErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}/invitations',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Deltakerne med flaggstatus (DD-36): «invitert, ikke slått på» og «trukket, flagg ikke bekreftet av» er egne tilstander. Ingen sortering på aktivitet, ingen score (DD-38). Alle roller.\n */\nexport const programsListParticipants = <ThrowOnError extends boolean = false>(options: Options<ProgramsListParticipantsData, ThrowOnError>): RequestResult<ProgramsListParticipantsResponses, ProgramsListParticipantsErrors, ThrowOnError> => (options.client ?? client).get<ProgramsListParticipantsResponses, ProgramsListParticipantsErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}/participants',\n ...options\n});\n\n/**\n * Den frosne rapporten. 404 report_not_found før programmet er avsluttet. Alle roller.\n */\nexport const programsGetReport = <ThrowOnError extends boolean = false>(options: Options<ProgramsGetReportData, ThrowOnError>): RequestResult<ProgramsGetReportResponses, ProgramsGetReportErrors, ThrowOnError> => (options.client ?? client).get<ProgramsGetReportResponses, ProgramsGetReportErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}/report',\n ...options\n});\n\n/**\n * Avslutter programmet og fryser rapporten (4d, DD-35). Krever avsluttes eller aktiv (409 invalid_status_transition); allerede fryst gir 409 report_frozen. Under 30 svar: dataLimitations kan ikke være tom (422 data_limitations_required) og payload har ingen prosent. Emitterer program.closed. Samme tall går til testerens takk. Behandler og eier.\n */\nexport const programsClose = <ThrowOnError extends boolean = false>(options: Options<ProgramsCloseData, ThrowOnError>): RequestResult<ProgramsCloseResponses, ProgramsCloseErrors, ThrowOnError> => (options.client ?? client).post<ProgramsCloseResponses, ProgramsCloseErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/programs/{id}/report',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Leietakerens innstillinger (5d) inkludert community-sjekklisten med rødt/grønt per krav (DD-18). Ingen hemmeligheter (DD-20). Alle roller.\n */\nexport const settingsGet = <ThrowOnError extends boolean = false>(options?: Options<SettingsGetData, ThrowOnError>): RequestResult<SettingsGetResponses, SettingsGetErrors, ThrowOnError> => (options?.client ?? client).get<SettingsGetResponses, SettingsGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/settings',\n ...options\n});\n\n/**\n * Oppdaterer innstillinger. Kun eier. minorsPresent = true strammer alt i samme forespørsel; en verdi som strider mot minorsPresent gir 422 minors_present_conflict med feltet i meldingen (K18). Frist og kontakter kan senkes, aldri heves over 90 / 3.\n */\nexport const settingsUpdate = <ThrowOnError extends boolean = false>(options: Options<SettingsUpdateData, ThrowOnError>): RequestResult<SettingsUpdateResponses, SettingsUpdateErrors, ThrowOnError> => (options.client ?? client).patch<SettingsUpdateResponses, SettingsUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/settings',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Leietakerens egne tall for de siste ukene (M4.2, maaling.md): statusflyt inn/ut per uke, tragten i widgeten, innsendinger og anonyme per uke, SDK-versjonsspredning, sløyfen ut, saker per adminøkt og gjentakende innsendere. Tellinger, aldri prosent — panelet regner, og aldri under 30 (DD-16). Regnes ved oppslag. Alle roller.\n */\nexport const statsGet = <ThrowOnError extends boolean = false>(options?: Options<StatsGetData, ThrowOnError>): RequestResult<StatsGetResponses, StatsGetErrors, ThrowOnError> => (options?.client ?? client).get<StatsGetResponses, StatsGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/stats',\n ...options\n});\n\n/**\n * Innboksen og Saker (DD-01, DD-11). Uten filter: alt. statusType = reviewing er innboksen; overdue og inactive gir «Avgjør nå» og DD-25-varslene. Sortering: overdue først, så inactive, så eldst først — de tre eldste uten aktivitet teller på toppen. Alle roller.\n */\nexport const submissionsList = <ThrowOnError extends boolean = false>(options?: Options<SubmissionsListData, ThrowOnError>): RequestResult<SubmissionsListResponses, SubmissionsListErrors, ThrowOnError> => (options?.client ?? client).get<SubmissionsListResponses, SubmissionsListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions',\n ...options\n});\n\n/**\n * Tellingen som ER forsiden: «40 til vurdering · 3 uten aktivitet · 3 over frist» (DD-01, DD-52). Alle roller.\n */\nexport const submissionsCounts = <ThrowOnError extends boolean = false>(options?: Options<SubmissionsCountsData, ThrowOnError>): RequestResult<SubmissionsCountsResponses, SubmissionsCountsErrors, ThrowOnError> => (options?.client ?? client).get<SubmissionsCountsResponses, SubmissionsCountsErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions/counts',\n ...options\n});\n\n/**\n * Saken i detalj, med notater, svar, dedupe-forslag (maks tre, null hvis tjenesten ikke svarte) og vedleggsmetadata. Åpning av detaljen logges (AuditEntry: hvem så hvilken innsending). Alle roller.\n */\nexport const submissionsGet = <ThrowOnError extends boolean = false>(options: Options<SubmissionsGetData, ThrowOnError>): RequestResult<SubmissionsGetResponses, SubmissionsGetErrors, ThrowOnError> => (options.client ?? client).get<SubmissionsGetResponses, SubmissionsGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions/{id}',\n ...options\n});\n\n/**\n * Triage i én forespørsel — status, sammenslåing, kjent feil, frist, svar. Reglene står på SubmissionUpdate. Behandler og eier. Emitterer submission.status_changed og/eller submission.replied via webhook; en sammenslåing emitterer INGENTING (DD-24). Svaret er saken etter endringen.\n */\nexport const submissionsUpdate = <ThrowOnError extends boolean = false>(options: Options<SubmissionsUpdateData, ThrowOnError>): RequestResult<SubmissionsUpdateResponses, SubmissionsUpdateErrors, ThrowOnError> => (options.client ?? client).patch<SubmissionsUpdateResponses, SubmissionsUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Fjerner sakens vedlegg — f.eks. et bilde av andre personer. Objektet slettes i lagringen, saken står uendret, og fjerningen logges (AuditEntry attachment.removed: hvem og når, aldri hvorfor). Kan ikke angres. Etter fjerning har SubmissionDetail attachmentRemovedAt og SubmissionStatusView attachmentRemoved: innsenderen ser i «mine innspill» at bildet er fjernet, uten begrunnelse. Ingen webhook. 404 attachment_not_found når saken ikke har et ferdig behandlet vedlegg, eller det alt er fjernet — samme regel som attachment-url, og det som ikke er ferdig behandlet kan behandleren heller ikke ha sett. Behandler og eier; leser får 403.\n */\nexport const submissionsRemoveAttachment = <ThrowOnError extends boolean = false>(options: Options<SubmissionsRemoveAttachmentData, ThrowOnError>): RequestResult<SubmissionsRemoveAttachmentResponses, SubmissionsRemoveAttachmentErrors, ThrowOnError> => (options.client ?? client).delete<SubmissionsRemoveAttachmentResponses, SubmissionsRemoveAttachmentErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions/{id}/attachment',\n ...options\n});\n\n/**\n * Korttidsgyldig URL til sakens skjermbilde. Logges som «åpnet skjermbilde» (rapport 5). 404 attachment_not_found når saken ikke har vedlegg, det ikke er ferdig behandlet, eller det er fjernet. Alle roller.\n */\nexport const submissionsAttachmentUrl = <ThrowOnError extends boolean = false>(options: Options<SubmissionsAttachmentUrlData, ThrowOnError>): RequestResult<SubmissionsAttachmentUrlResponses, SubmissionsAttachmentUrlErrors, ThrowOnError> => (options.client ?? client).get<SubmissionsAttachmentUrlResponses, SubmissionsAttachmentUrlErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions/{id}/attachment-url',\n ...options\n});\n\n/**\n * Internt notat — standardfeltet behandleren skriver i (DD-23). Forlater aldri panelet. Oppdaterer lastActivityAt. Behandler og eier.\n */\nexport const submissionsAddNote = <ThrowOnError extends boolean = false>(options: Options<SubmissionsAddNoteData, ThrowOnError>): RequestResult<SubmissionsAddNoteResponses, SubmissionsAddNoteErrors, ThrowOnError> => (options.client ?? client).post<SubmissionsAddNoteResponses, SubmissionsAddNoteErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/submissions/{id}/notes',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Leietakerens panelbrukere, også de deaktiverte. Kun eier.\n */\nexport const adminUsersList = <ThrowOnError extends boolean = false>(options?: Options<AdminUsersListData, ThrowOnError>): RequestResult<AdminUsersListResponses, AdminUsersListErrors, ThrowOnError> => (options?.client ?? client).get<AdminUsersListResponses, AdminUsersListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/users',\n ...options\n});\n\n/**\n * Deaktiverer kontoen. Brukerens neste admin-kall gir 401 unauthenticated uansett hvor ferskt Supabase-tokenet er — sesjonen overlever ikke. Raden står, og alt hun gjorde er fortsatt sporbart. Idempotent: en alt deaktivert konto gir 204. Egen konto gir 409 cannot_disable_self — det er regelen som garanterer minst én aktiv eier. Kun eier. AuditEntry admin_user.disabled.\n */\nexport const adminUsersDisable = <ThrowOnError extends boolean = false>(options: Options<AdminUsersDisableData, ThrowOnError>): RequestResult<AdminUsersDisableResponses, AdminUsersDisableErrors, ThrowOnError> => (options.client ?? client).post<AdminUsersDisableResponses, AdminUsersDisableErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/users/{id}/disable',\n ...options\n});\n\n/**\n * Reaktiverer en deaktivert konto. Idempotent: en aktiv konto gir 204. Kun eier. AuditEntry admin_user.enabled.\n */\nexport const adminUsersEnable = <ThrowOnError extends boolean = false>(options: Options<AdminUsersEnableData, ThrowOnError>): RequestResult<AdminUsersEnableResponses, AdminUsersEnableErrors, ThrowOnError> => (options.client ?? client).post<AdminUsersEnableResponses, AdminUsersEnableErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/users/{id}/enable',\n ...options\n});\n\n/**\n * Registrerte webhooks. Alle roller.\n */\nexport const webhooksList = <ThrowOnError extends boolean = false>(options?: Options<WebhooksListData, ThrowOnError>): RequestResult<WebhooksListResponses, WebhooksListErrors, ThrowOnError> => (options?.client ?? client).get<WebhooksListResponses, WebhooksListErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks',\n ...options\n});\n\n/**\n * Registrerer en mottaker. Opprettes inaktiv og uverifisert; secret finnes kun her (DD-20). https påkrevd, private nett avvises (400 validation_failed). Kun eier.\n */\nexport const webhooksCreate = <ThrowOnError extends boolean = false>(options: Options<WebhooksCreateData, ThrowOnError>): RequestResult<WebhooksCreateResponses, WebhooksCreateErrors, ThrowOnError> => (options.client ?? client).post<WebhooksCreateResponses, WebhooksCreateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Sletter webhooken og dens leveringslogg. Kun eier.\n */\nexport const webhooksRemove = <ThrowOnError extends boolean = false>(options: Options<WebhooksRemoveData, ThrowOnError>): RequestResult<WebhooksRemoveResponses, WebhooksRemoveErrors, ThrowOnError> => (options.client ?? client).delete<WebhooksRemoveResponses, WebhooksRemoveErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}',\n ...options\n});\n\n/**\n * Én webhook. Alle roller.\n */\nexport const webhooksGet = <ThrowOnError extends boolean = false>(options: Options<WebhooksGetData, ThrowOnError>): RequestResult<WebhooksGetResponses, WebhooksGetErrors, ThrowOnError> => (options.client ?? client).get<WebhooksGetResponses, WebhooksGetErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}',\n ...options\n});\n\n/**\n * Oppdaterer. Ny url nullstiller verifiseringen; active = true krever verifisert (409 webhook_not_verified). Kun eier.\n */\nexport const webhooksUpdate = <ThrowOnError extends boolean = false>(options: Options<WebhooksUpdateData, ThrowOnError>): RequestResult<WebhooksUpdateResponses, WebhooksUpdateErrors, ThrowOnError> => (options.client ?? client).patch<WebhooksUpdateResponses, WebhooksUpdateErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Leveringsloggen. status = dead er dead-letter-listen som skal være synlig i panelet (låst). Alle roller.\n */\nexport const webhooksListDeliveries = <ThrowOnError extends boolean = false>(options: Options<WebhooksListDeliveriesData, ThrowOnError>): RequestResult<WebhooksListDeliveriesResponses, WebhooksListDeliveriesErrors, ThrowOnError> => (options.client ?? client).get<WebhooksListDeliveriesResponses, WebhooksListDeliveriesErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}/deliveries',\n ...options\n});\n\n/**\n * Prøver en dead-letter-levering på nytt, én gang, med samme event_id (idempotent hos mottakeren). Krever status dead (409 invalid_status_transition). Behandler og eier.\n */\nexport const webhooksRetryDelivery = <ThrowOnError extends boolean = false>(options: Options<WebhooksRetryDeliveryData, ThrowOnError>): RequestResult<WebhooksRetryDeliveryResponses, WebhooksRetryDeliveryErrors, ThrowOnError> => (options.client ?? client).post<WebhooksRetryDeliveryResponses, WebhooksRetryDeliveryErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}/deliveries/{deliveryId}/retry',\n ...options\n});\n\n/**\n * Roterer secret. Den nye finnes kun i denne responsen; den gamle er ugyldig straks. Kun eier.\n */\nexport const webhooksRotateSecret = <ThrowOnError extends boolean = false>(options: Options<WebhooksRotateSecretData, ThrowOnError>): RequestResult<WebhooksRotateSecretResponses, WebhooksRotateSecretErrors, ThrowOnError> => (options.client ?? client).post<WebhooksRotateSecretResponses, WebhooksRotateSecretErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}/rotate-secret',\n ...options\n});\n\n/**\n * Testknappen (5d): sender en signert webhook.test-hendelse synkront, ett forsøk, ingen retry. Krever verifisert (409 webhook_not_verified). Behandler og eier.\n */\nexport const webhooksTest = <ThrowOnError extends boolean = false>(options: Options<WebhooksTestData, ThrowOnError>): RequestResult<WebhooksTestResponses, WebhooksTestErrors, ThrowOnError> => (options.client ?? client).post<WebhooksTestResponses, WebhooksTestErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}/test',\n ...options\n});\n\n/**\n * Verifiserer URL-en: sender en signert webhook.verify-hendelse med et engangs-challenge og krever at mottakeren svarer 2xx med challenge-verdien i kroppen. ok = true setter verifiedAt. Kun eier.\n */\nexport const webhooksVerify = <ThrowOnError extends boolean = false>(options: Options<WebhooksVerifyData, ThrowOnError>): RequestResult<WebhooksVerifyResponses, WebhooksVerifyErrors, ThrowOnError> => (options.client ?? client).post<WebhooksVerifyResponses, WebhooksVerifyErrors, ThrowOnError>({\n security: [{\n key: 'AdminAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/admin/webhooks/{id}/verify',\n ...options\n});\n\n/**\n * Presigned PUT mot R2 (EU) for ett skjermbilde, maskert på klienten før dette kallet (K4). Tallene sjekkes her (413 attachment_too_large, 415 attachment_type_not_allowed) og på nytt server-side før dekoding (K9). 403 screenshots_disabled når leietakeren har skjermbilde av eller minorsPresent. Innsendingen må tilhøre kalleren — samme subject, eller anonymt: en anonym innsending med kjent submissionId (UUIDv7, kun gitt til skaperen) — og være opprettet for høyst 15 minutter siden (DD-42: vedlegget følger rett etter teksten, og skjermbilde køes aldri). Ellers 404 submission_not_found. Ett vedlegg per innsending (409 attachment_already_uploaded).\n */\nexport const attachmentsPresign = <ThrowOnError extends boolean = false>(options: Options<AttachmentsPresignData, ThrowOnError>): RequestResult<AttachmentsPresignResponses, AttachmentsPresignErrors, ThrowOnError> => (options.client ?? client).post<AttachmentsPresignResponses, AttachmentsPresignErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/attachments/presign',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Klienten melder at PUT-en er ferdig. Starter verifisering og re-enkoding i isolert prosess; svarer straks. Feiler verifiseringen etterpå, slettes objektet og innsendingen står uten vedlegg — kvitteringen i klienten har allerede sagt «teksten din er lagret» (DD-42). Tillegg utover briefens liste: uten et signal må plattformen polle R2.\n */\nexport const attachmentsComplete = <ThrowOnError extends boolean = false>(options: Options<AttachmentsCompleteData, ThrowOnError>): RequestResult<AttachmentsCompleteResponses, AttachmentsCompleteErrors, ThrowOnError> => (options.client ?? client).post<AttachmentsCompleteResponses, AttachmentsCompleteErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/attachments/{id}/complete',\n ...options\n});\n\n/**\n * Leietakerens klientkonfigurasjon for produktet nøkkelen tilhører (M2.5): tegngrense, minste antall tegn, skjermbilde-steg og personvernlenke — det SDK-et ellers måtte få duplisert i init(). Virker anonymt. Klienten henter ved hver åpning av widgeten, aldri i bakgrunnen, og faller tilbake på de strammeste verdiene (140 · 10 · av) når kallet ikke svarer. Tillegg utover M0.1: teknisk gjeld fra M1.2, eid av M2.5.\n */\nexport const configGet = <ThrowOnError extends boolean = false>(options?: Options<ConfigGetData, ThrowOnError>): RequestResult<ConfigGetResponses, ConfigGetErrors, ThrowOnError> => (options?.client ?? client).get<ConfigGetResponses, ConfigGetErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/config',\n ...options\n});\n\n/**\n * Målemodellens hendelser fra SDK-et (M4.2, maaling.md) — plattformens eget mottak, aldri en tredjepart (K19). ALLTID anonymt: et feedback-token ignoreres, og subject lagres aldri. Kroppen er lukket — ingen tekst, ingen enhets-ID, ingen IP (IP holdes kun i minne for rate limiting, K15). Svarer 202 og lagrer beste-innsats; klienten sender bunter og prøver aldri på nytt, for hendelsene er tellinger, ikke innhold. Rate-limitet per nøkkel og IP.\n */\nexport const eventsSend = <ThrowOnError extends boolean = false>(options: Options<EventsSendData, ThrowOnError>): RequestResult<EventsSendResponses, EventsSendErrors, ThrowOnError> => (options.client ?? client).post<EventsSendResponses, EventsSendErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/events',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Svarer på en oppfølging med spørsmål («Hvordan gikk det?» eller sjekkpunkt): tre lukkede valg og valgfri setning. Én Response per FollowUp (409 follow_up_already_answered). Bare kind = hvordan_gikk_det og sjekkpunkt tar svar — en påminnelse eller et tilbud om utgang gir 409 follow_up_not_answerable. Oppfølgingen må være emittert til kallerens subject (404 follow_up_not_found). Deltakelsen går til fullfoert når alle oppgavene er gjort og ingen oppfølging står planlagt eller ubesvart. Svarprosenten i rapporten måles mot de emitterte oppfølgingene som tar svar.\n */\nexport const programsRespond = <ThrowOnError extends boolean = false>(options: Options<ProgramsRespondData, ThrowOnError>): RequestResult<ProgramsRespondResponses, ProgramsRespondErrors, ThrowOnError> => (options.client ?? client).post<ProgramsRespondResponses, ProgramsRespondErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/follow-ups/{id}/respond',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * RESERVERT v2. TV-klienten oppretter en overleveringsøkt: kontekst inn, id + URL + QR som SVG ut. Lever 10 min, brukes én gang. Virker anonymt — identiteten avgjøres på mobilen. Konteksten slettes når økten utløper uten innsending.\n */\nexport const handoffsCreate = <ThrowOnError extends boolean = false>(options: Options<HandoffsCreateData, ThrowOnError>): RequestResult<HandoffsCreateResponses, HandoffsCreateErrors, ThrowOnError> => (options.client ?? client).post<HandoffsCreateResponses, HandoffsCreateErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/handoffs',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * RESERVERT v2. Mobilen henter TV-ens kontekst for å vise den fjernbar linje for linje (DD-05) og sende som vanlig med handoffId. Ukjent, utløpt eller brukt → 404 handoff_invalid.\n */\nexport const handoffsGet = <ThrowOnError extends boolean = false>(options: Options<HandoffsGetData, ThrowOnError>): RequestResult<HandoffsGetResponses, HandoffsGetErrors, ThrowOnError> => (options.client ?? client).get<HandoffsGetResponses, HandoffsGetErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/handoffs/{id}',\n ...options\n});\n\n/**\n * Aksepterer invitasjonen etter forventningsavklaringen (DD-13, DD-32). Tokenet i stien er engangs og ≤ 14 dager; det må være utstedt til kallerens subject — feil subject, ukjent, utløpt eller brukt gir alle 404 invitation_invalid. Gjentak fra samme subject er idempotent (200 med deltakelsen). Programmet må være aapen eller aktiv (409 invalid_status_transition), og ikke fullt (409 program_full). Avslått først → 409 invitation_already_answered. Emitterer program.participant_joined.\n */\nexport const programsAccept = <ThrowOnError extends boolean = false>(options: Options<ProgramsAcceptData, ThrowOnError>): RequestResult<ProgramsAcceptResponses, ProgramsAcceptErrors, ThrowOnError> => (options.client ?? client).post<ProgramsAcceptResponses, ProgramsAcceptErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/invitations/{token}/accept',\n ...options\n});\n\n/**\n * Avslår invitasjonen — invitation_declined i målemodellen og status avslaatt i panelet. Ingen årsak spørres (idébank). Samme 404-regel som accept. Akseptert først → 409 invitation_already_answered: et nei etter ja er «Gå ut», ikke avslag. Tillegg utover briefens liste: uten det finnes ikke status avslaatt.\n */\nexport const programsDecline = <ThrowOnError extends boolean = false>(options: Options<ProgramsDeclineData, ThrowOnError>): RequestResult<ProgramsDeclineResponses, ProgramsDeclineErrors, ThrowOnError> => (options.client ?? client).post<ProgramsDeclineResponses, ProgramsDeclineErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/invitations/{token}/decline',\n ...options\n});\n\n/**\n * Kjente feil for skjerm og versjon — vises FØR feltet i feilsporet (DD-03, differensiatoren). Maks tre kort, kun status aktiv eller fikset med appVersion ≤ fixedIn (DD-30), kun visibleInWidget. Virker anonymt. Tom liste er et gyldig svar og gir ingen kort, ikke en tomtilstand.\n */\nexport const knownIssuesList2 = <ThrowOnError extends boolean = false>(options?: Options<KnownIssuesList2Data, ThrowOnError>): RequestResult<KnownIssuesList2Responses, KnownIssuesList2Errors, ThrowOnError> => (options?.client ?? client).get<KnownIssuesList2Responses, KnownIssuesList2Errors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/known-issues',\n ...options\n});\n\n/**\n * «Ja, jeg også» (DD-29): oppretter en Submission med status kjent_feil, uten tekst, som øker Reach uten ny sak. Kortet må være synlig for kalleren (ellers 404 known_issue_not_found). Med token: én per (subject, knownIssue) — gjentak returnerer den eksisterende med 200. Anonymt: teller i anonymousCount. Erstatter briefens «POST submissions/{id}/confirm-known-issue», der {id} var tvetydig — her er det den kjente feilen.\n */\nexport const knownIssuesConfirm = <ThrowOnError extends boolean = false>(options: Options<KnownIssuesConfirmData, ThrowOnError>): RequestResult<KnownIssuesConfirmResponses, KnownIssuesConfirmErrors, ThrowOnError> => (options.client ?? client).post<KnownIssuesConfirmResponses, KnownIssuesConfirmErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/known-issues/{id}/confirm',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * «Gå ut» — alltid synlig i fanen (DD-36). Deltakelsen går til trukket, subjektet forsvinner fra segmentet i samme transaksjon, program.segment_changed og program.participant_withdrawn emitteres, og ingen flere kontakter sendes. Idempotent: allerede trukket gir 200. Tillegg utover briefens liste: DD-36 krever den.\n */\nexport const programsWithdraw = <ThrowOnError extends boolean = false>(options: Options<ProgramsWithdrawData, ThrowOnError>): RequestResult<ProgramsWithdrawResponses, ProgramsWithdrawErrors, ThrowOnError> => (options.client ?? client).post<ProgramsWithdrawResponses, ProgramsWithdrawErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/participations/{id}/withdraw',\n ...options\n});\n\n/**\n * Alt om betaprogram for kallerens subject — SDK-ets programs.list(): egne invitasjoner (til banneret, DD-12), deltakelser med oppgavestatus (fanen), og oppfølginger som venter på svar. Ett kall, fordi SDK-et spør ved åpning av widgeten og aldri i bakgrunnen.\n */\nexport const programsListMine = <ThrowOnError extends boolean = false>(options?: Options<ProgramsListMineData, ThrowOnError>): RequestResult<ProgramsListMineResponses, ProgramsListMineErrors, ThrowOnError> => (options?.client ?? client).get<ProgramsListMineResponses, ProgramsListMineErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/programs',\n ...options\n});\n\n/**\n * «Mine innspill» (DD-27, DD-41): kallerens egne innsendinger, nyeste først, med status, løfte-grunnlag og svar. Krever token (401 feedback_token_required uten) — anonym modus har ingen liste. Kjente-feil-bekreftelser er med (tom tekst, knownIssue satt). Tillegg utover briefens liste: portalen kan ikke holde id-er lokalt.\n */\nexport const submissionsListMine = <ThrowOnError extends boolean = false>(options?: Options<SubmissionsListMineData, ThrowOnError>): RequestResult<SubmissionsListMineResponses, SubmissionsListMineErrors, ThrowOnError> => (options?.client ?? client).get<SubmissionsListMineResponses, SubmissionsListMineErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/submissions',\n ...options\n});\n\n/**\n * Innsendingen. Diskriminert på type: feil kan bære correlation og relatedKnownIssueId; onske kan ikke — et slikt felt gir 400 unknown_field. Teksten er ferdig lagret når 201 kommer; et skjermbilde legges til etterpå via Attachments og kan feile alene (DD-42).\n *\n * Server-side: subject fra tokenet (null uten token), context lest ved feltnavn mot hvitelisten (ukjent → 400 unknown_field, K5), text mot leietakerens min/max (400 text_too_short / text_too_long), correlation mot deklarerte kind (400 correlation_invalid), programId krever token og aktiv deltakelse (404 program_not_found ellers). Samme clientRef fra samme subject innen 24 t gir 200 med den eksisterende — offline-køen kan trygt prøve igjen.\n *\n * Status er alltid ny ved 201. Kvitteringen lover per spor (DD-07); løfteteksten står i klienten.\n */\nexport const submissionsCreate = <ThrowOnError extends boolean = false>(options: Options<SubmissionsCreateData, ThrowOnError>): RequestResult<SubmissionsCreateResponses, SubmissionsCreateErrors, ThrowOnError> => (options.client ?? client).post<SubmissionsCreateResponses, SubmissionsCreateErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/submissions',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Status for én egen innsending — SDK-ets subjects.status(). Krever token; en innsending som tilhører et annet subject, eller er anonym, gir 404 submission_not_found. Anonyme innsendinger kan ikke slås opp: det finnes ingen identitet å binde dem til.\n */\nexport const submissionsStatus = <ThrowOnError extends boolean = false>(options: Options<SubmissionsStatusData, ThrowOnError>): RequestResult<SubmissionsStatusResponses, SubmissionsStatusErrors, ThrowOnError> => (options.client ?? client).get<SubmissionsStatusResponses, SubmissionsStatusErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/submissions/{id}/status',\n ...options\n});\n\n/**\n * Fullfører en oppgave med utfall (fungerte · delvis · ikke). Én completion per (deltaker, oppgave) — 409 task_already_completed. submissionId må være kallerens egen innsending (404 submission_not_found ellers). Emitterer task_completed i målemodellen; ingen webhook.\n */\nexport const programsCompleteTask = <ThrowOnError extends boolean = false>(options: Options<ProgramsCompleteTaskData, ThrowOnError>): RequestResult<ProgramsCompleteTaskResponses, ProgramsCompleteTaskErrors, ThrowOnError> => (options.client ?? client).post<ProgramsCompleteTaskResponses, ProgramsCompleteTaskErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Tenant-Key', type: 'apiKey' }, {\n key: 'FeedbackTokenAuth',\n scheme: 'bearer',\n type: 'http'\n }],\n url: '/v1/ingest/tasks/{id}/complete',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Slettekvitteringen med tellinger når den er completed. Scope subjects:delete.\n */\nexport const deletionsGet = <ThrowOnError extends boolean = false>(options: Options<DeletionsGetData, ThrowOnError>): RequestResult<DeletionsGetResponses, DeletionsGetErrors, ThrowOnError> => (options.client ?? client).get<DeletionsGetResponses, DeletionsGetErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/deletions/{id}',\n ...options\n});\n\n/**\n * Leietakeren bekrefter at flagget er PÅ (enabled = true) eller AV (false) for et pseudonym. Første bekreftelse tar programmet fra aapen til aktiv. false etter trukket fjerner «flagg ikke bekreftet av» (DD-36). Ukjent deltaker → 404 participant_not_found. Scope programs:confirm.\n */\nexport const programsFlagConfirmed = <ThrowOnError extends boolean = false>(options: Options<ProgramsFlagConfirmedData, ThrowOnError>): RequestResult<ProgramsFlagConfirmedResponses, ProgramsFlagConfirmedErrors, ThrowOnError> => (options.client ?? client).post<ProgramsFlagConfirmedResponses, ProgramsFlagConfirmedErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/programs/{id}/participants/{sub}/flag-confirmed',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Den frosne rapporten — samme tall som panelet og testerens takk (DD-16). 404 report_not_found før avsluttet. Scope admin.\n */\nexport const programsReport = <ThrowOnError extends boolean = false>(options: Options<ProgramsReportData, ThrowOnError>): RequestResult<ProgramsReportResponses, ProgramsReportErrors, ThrowOnError> => (options.client ?? client).get<ProgramsReportResponses, ProgramsReportErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/programs/{id}/report',\n ...options\n});\n\n/**\n * Segmentet leietakeren skrur flagget på for: aktive deltakeres pseudonymer og ingenting annet (M3.3). ETag på svaret; If-None-Match gir 304 når uendret. En deltaker som går ut er borte herfra i samme transaksjon som program.segment_changed emitteres (DD-36). Scope segment:read.\n */\nexport const programsSegment = <ThrowOnError extends boolean = false>(options: Options<ProgramsSegmentData, ThrowOnError>): RequestResult<ProgramsSegmentResponses, ProgramsSegmentErrors, ThrowOnError> => (options.client ?? client).get<ProgramsSegmentResponses, ProgramsSegmentErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/programs/{id}/segment',\n ...options\n});\n\n/**\n * Sletting per pseudonym (K11), utløst av leietakeren når brukeren ber om det. Sletter tekst, vedlegg, koblingsnøkler, svar, notater om saken, deltakelser og oppfølginger innen 24 timer; Reach-tallet på berørte saker står uten kobling. Svarer 202 med kvittering straks; completed hentes via Deletions.get eller kommer som subject.deleted. Idempotent: et ukjent subject gir også 202 med nullteller — å svare 404 ville bekreftet hvem som har sendt inn. Scope subjects:delete.\n */\nexport const subjectsRemove = <ThrowOnError extends boolean = false>(options: Options<SubjectsRemoveData, ThrowOnError>): RequestResult<SubjectsRemoveResponses, SubjectsRemoveErrors, ThrowOnError> => (options.client ?? client).delete<SubjectsRemoveResponses, SubjectsRemoveErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/subjects/{sub}',\n ...options\n});\n\n/**\n * Statusendring fra leietakerens verktøy (M1.4). Følger tilstandsmaskinen (409 invalid_status_transition); levert i feilsporet krever fixedIn (422). Emitterer submission.status_changed som ellers — innsenderen får samme løfte uansett hvem som flyttet saken. Scope admin. Står i kontrakten fordi M1.4 navngir den; bygges der.\n */\nexport const submissionsUpdateStatus = <ThrowOnError extends boolean = false>(options: Options<SubmissionsUpdateStatusData, ThrowOnError>): RequestResult<SubmissionsUpdateStatusResponses, SubmissionsUpdateStatusErrors, ThrowOnError> => (options.client ?? client).patch<SubmissionsUpdateStatusResponses, SubmissionsUpdateStatusErrors, ThrowOnError>({\n security: [{ name: 'X-Innspel-Api-Key', type: 'apiKey' }],\n url: '/v1/tenant/submissions/{id}/status',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n","import type { ErrorCode } from './api.js';\n\n/** Prefikset alle utviklerrettede meldinger fra SDK-et bærer. */\nexport const PREFIKS = '[innspel]';\n\n/**\n * En HTTP-headerverdi må være en ByteString: synlige ASCII-tegn, ingen\n * mellomrom, linjeskift eller tegn over U+00FF. Brytes det, kaster\n * `new Request(...)` en `TypeError` — og den er umulig å skille fra «nettet er\n * nede», så en utviklerfeil ville sett ut som en innsending som venter på nett.\n *\n * Funnet ved å kjøre quickstarten i et tomt prosjekt: README-placeholderen\n * `ik_pub_…` inneholder U+2026.\n */\nexport function erHeaderTrygg(verdi: string): boolean {\n return /^[\\x21-\\x7e]+$/.test(verdi);\n}\n\n/**\n * Utviklerfeil: opsjoner som er feil eller mangler, kontekstfelter utenfor\n * hvitelisten, tekst utenfor grensene. Kastes umiddelbart og navngir feltet —\n * aldri en stille tom widget (tech-decisions.md, «SDK — dokumentasjon og\n * utvikleropplevelse»).\n */\nexport class InnspelConfigError extends Error {\n override readonly name = 'InnspelConfigError';\n /** Feltet som er galt, slik det heter i `init`-opsjonene. */\n readonly field: string;\n\n constructor(field: string, hva: string, hvor = 'README.md') {\n super(`${PREFIKS} ${field}: ${hva}. Se ${hvor}.`);\n this.field = field;\n }\n}\n\n/**\n * Feil fra plattformen. Forgren på `code`, aldri på `message` — meldingen er\n * for mennesker og kan endres uten varsel (contracts/models/common.tsp).\n */\nexport class InnspelApiError extends Error {\n override readonly name = 'InnspelApiError';\n readonly code: ErrorCode | 'unknown';\n readonly status: number;\n /** Sekunder til neste forsøk, fra Retry-After. Kun ved 429. */\n readonly retryAfter: number | undefined;\n\n constructor(status: number, code: ErrorCode | 'unknown', message: string, retryAfter?: number) {\n super(message);\n this.status = status;\n this.code = code;\n this.retryAfter = retryAfter;\n }\n}\n\n/**\n * Intern, eksporteres ikke: `fetch` selv kastet — ingen forbindelse, eller\n * tidsgrensen avbrøt kallet. Bare denne legger en innsending i offline-køen. Alt\n * annet uten svar er en feil i koden og skal synes, ikke se ut som «Ingen nett».\n */\nexport class NettverksFeil extends Error {}\n\n/**\n * Offline-køen er full. Taket er 30 (DD-41), og den eldste beholdes: det første\n * innspillet er like mye verdt som det siste, og å kaste det stille ville brutt\n * løftet om at teksten aldri mistes.\n */\nexport class InnspelQueueFullError extends Error {\n override readonly name = 'InnspelQueueFullError';\n readonly code = 'queue_full' as const;\n /** Tekst som kan vises til innsenderen. Køen skal være synlig, ikke stille. */\n readonly userMessage: string;\n\n constructor(tak: number) {\n super(`${PREFIKS} offline-køen er full (${tak}).`);\n this.userMessage = `Du har ${tak} innspill som venter på nett. Send dem før du skriver flere — de sendes automatisk når du er på nett igjen.`;\n }\n}\n","import { erHeaderTrygg, PREFIKS } from './feil.js';\nimport type { IdentityProvider } from './typer.js';\n\n/**\n * Henter et ferskt feedback-token fra verten.\n *\n * Tokenet lagres ALDRI (K20, DD-41): det er gyldig i høyst 15 minutter, og ved\n * en flush av offline-køen er det gamle utløpt for lengst. Kjernen ber om et\n * nytt hver gang den trenger ett.\n *\n * Kaster vertens funksjon, eller returnerer den `null`, går kallet anonymt.\n * Innsenderen skal kunne melde fra selv om vertens innlogging er nede — men det\n * er en utviklerfeil, så den går til `console.error` med `[innspel]`-prefiks\n * (tech-decisions.md, «SDK — dokumentasjon og utvikleropplevelse»).\n */\nexport async function hentToken(\n provider: IdentityProvider | null,\n): Promise<string | null> {\n if (provider === null) return null;\n\n try {\n const token = await provider();\n if (typeof token !== 'string' || token.length === 0) return null;\n\n // Et token som ikke kan bli en headerverdi ville fått Request-byggingen til\n // å kaste en TypeError, og den er ikke til å skille fra «nettet er nede» —\n // innsendingen ville havnet i offline-køen og sett ut som om den venter på\n // nett. Feil i token-endepunktet skal være synlig som nettopp det.\n if (!erHeaderTrygg(token)) {\n console.error(\n `${PREFIKS} identityProvider ga et token med tegn som ikke kan stå i en HTTP-header (mellomrom, linjeskift eller tegn utenfor ASCII). Et JWT er base64url og har ingen slike. Innsendingen går anonymt — se docs/sdk/README.md.`,\n );\n return null;\n }\n\n return token;\n } catch (e) {\n console.error(\n `${PREFIKS} identityProvider kastet. Innsendingen går anonymt og kan ikke følges opp. Rett feilen i token-endepunktet — se docs/sdk/README.md.`,\n e,\n );\n return null;\n }\n}\n","import { InnspelApiError } from './feil.js';\nimport type { Ko } from './ko.js';\nimport type { FlushResult, QueuedSubmission, Telemetry } from './typer.js';\n\n/**\n * Tømmer offline-køen. Kalles når widgeten åpnes eller når appen får nett med\n * widgeten åpen — **aldri ved oppstart** (DD-41).\n *\n * Hver rad sendes med et FERSKT token: det gamle er utløpt for lengst (exp ≤ 15\n * min). Det er `send` som henter det, én gang per rad.\n *\n * To utfall skiller seg:\n * - **4xx** — plattformen avviste kroppen. Den blir aldri gyldig, så raden\n * forkastes i stedet for å prøves i evighet. Innsenderen skal ikke ha en rad\n * som står og «venter på nett» for alltid.\n * - **nettverksfeil** — nettet er nede igjen. Resten står, og vi stopper: de\n * neste radene ville feilet på samme måte, og hvert forsøk koster rate limit.\n */\nexport async function flushKo(\n kø: Ko,\n send: (rad: QueuedSubmission) => Promise<unknown>,\n telemetri: Telemetry,\n): Promise<FlushResult> {\n const rader = await kø.les();\n let sent = 0;\n let failed = 0;\n\n for (const rad of rader) {\n try {\n await send(rad);\n await kø.fjern(rad.clientRef);\n sent++;\n } catch (e) {\n if (e instanceof InnspelApiError && e.status >= 400 && e.status < 500) {\n await kø.fjern(rad.clientRef);\n failed++;\n telemetri.emit({ name: 'submission_failed', reason: e.code });\n continue;\n }\n break;\n }\n }\n\n return { sent, failed, remaining: await kø.antall() };\n}\n","import { InnspelQueueFullError } from './feil.js';\nimport type { InnspelStorage, QueuedSubmission } from './typer.js';\n\n/**\n * DD-41 — «Offline-køen er maks 30, tømmes aldri ved oppstart, og er synlig.»\n *\n * Kilde: Sentry `maxQueueSize` 30 og `flushAtStartup` false; Shake «Feedback\n * pending sync» er den eneste leverandøren som viser tilstanden til brukeren.\n * Kvitteringen i DD-07 kan ikke love svar på noe som ikke er sendt — derfor er\n * køen synlig i «Mine innspill», ikke en usynlig bakgrunnsjobb.\n *\n * Rate limit-tallet per subject i M1.1 er satt til 60 nettopp for at en full kø\n * på 30 skal kunne tømmes på ett minutt (tech-decisions.md, «M1.1»).\n */\nexport const KO_TAK = 30;\n\nconst NØKKEL = 'innspel:queue';\n\nexport class Ko {\n readonly #storage: InnspelStorage;\n\n constructor(storage: InnspelStorage) {\n this.#storage = storage;\n }\n\n /**\n * Leser køen. En ødelagt rad i lagringen gir tom kø, ikke et unntak: en\n * halvskrevet JSON etter at appen ble drept skal ikke hindre innsenderen i å\n * melde fra på nytt.\n */\n async les(): Promise<QueuedSubmission[]> {\n const rå = await this.#storage.get(NØKKEL);\n if (!rå) return [];\n try {\n const parset: unknown = JSON.parse(rå);\n return Array.isArray(parset) ? (parset as QueuedSubmission[]) : [];\n } catch {\n return [];\n }\n }\n\n async #skriv(rader: QueuedSubmission[]): Promise<void> {\n if (rader.length === 0) {\n await this.#storage.remove(NØKKEL);\n return;\n }\n await this.#storage.set(NØKKEL, JSON.stringify(rader));\n }\n\n /**\n * Legger en innsending bakerst.\n *\n * Ved fullt tak kastes {@link InnspelQueueFullError} — den eldste beholdes.\n * Å kaste den eldste ville vært stille tap av noe innsenderen tror er sendt.\n */\n async leggTil(rad: QueuedSubmission): Promise<void> {\n const rader = await this.les();\n if (rader.length >= KO_TAK) throw new InnspelQueueFullError(KO_TAK);\n rader.push(rad);\n await this.#skriv(rader);\n }\n\n async fjern(clientRef: string): Promise<void> {\n const rader = await this.les();\n await this.#skriv(rader.filter((r) => r.clientRef !== clientRef));\n }\n\n async antall(): Promise<number> {\n return (await this.les()).length;\n }\n}\n","import { InnspelConfigError } from './feil.js';\nimport type { ContextInput, Platform } from './typer.js';\n\n/**\n * Den lukkede hvitelista (K5), som feltnavn. Listen er kilden både til\n * valideringen og til det som faktisk sendes — et felt som ikke står her kommer\n * aldri ut av kjernen, uansett hva verten fyller inn.\n *\n * `sdkVersion` står ikke her fordi den ikke kommer fra verten: kjernen setter\n * den selv, og en vert som prøver å overstyre den blir ignorert.\n */\nexport const KONTEKST_FELTER = [\n 'platform',\n 'appVersion',\n 'build',\n 'os',\n 'screen',\n 'locale',\n] as const;\n\nconst PLATTFORMER: readonly Platform[] = [\n 'ios',\n 'android',\n 'web',\n 'tvos',\n 'androidtv',\n 'tizen',\n 'webos',\n];\n\n/**\n * Sjekker et kontekstobjekt mot hvitelisten og kaster med feltnavnet ved avvik.\n *\n * Plattformen ville svart 400 `unknown_field` på det samme, men da har\n * innsenderen allerede skrevet ferdig. Kjernen feiler i stedet ved `init`, mens\n * utvikleren står i det (tech-decisions.md, «Feil bruk feiler høyt og tidlig»).\n *\n * @param kontekst Rå kontekst fra verten.\n * @param sti Feltnavnet i feilmeldingen — `context` fra `init`, ellers `capture`.\n * @param krevPlatform `platform` er påkrevd i `init`, valgfri i et enkeltkall\n * som bare legger på `screen`.\n */\nexport function validerKontekst(\n kontekst: Partial<ContextInput>,\n sti: string,\n krevPlatform: boolean,\n): void {\n if (kontekst === null || typeof kontekst !== 'object') {\n throw new InnspelConfigError(sti, 'må være et objekt med minst { platform }');\n }\n\n for (const nøkkel of Object.keys(kontekst)) {\n if (!(KONTEKST_FELTER as readonly string[]).includes(nøkkel)) {\n throw new InnspelConfigError(\n `${sti}.${nøkkel}`,\n `er ikke i kontekst-hvitelisten. Tillatt: ${KONTEKST_FELTER.join(', ')}. Lista er lukket (K5) — enhets-ID, IP og skjerminnhold hører ikke hjemme her`,\n );\n }\n }\n\n const plattform = kontekst.platform;\n if (krevPlatform && plattform === undefined) {\n throw new InnspelConfigError(`${sti}.platform`, 'er påkrevd');\n }\n if (plattform !== undefined && !PLATTFORMER.includes(plattform)) {\n throw new InnspelConfigError(\n `${sti}.platform`,\n `må være en av ${PLATTFORMER.join(', ')}`,\n );\n }\n}\n\n/**\n * Slår sammen konteksten fra `init` med det enkeltkallet legger på, og setter\n * `sdkVersion` til slutt så den ikke kan overstyres.\n *\n * Et felt som STÅR i kallets kontekst med verdien `undefined` eller `null`\n * FJERNES — det er «Fjern» i kontekstlinja (DD-05). Et felt som ikke står der,\n * beholdes fra `init`. Skillet er `in`, ikke `??`: før 0.2.1 fylte kjernen et\n * fjernet felt fra `init` igjen, og «Fjern» i widgeten var en løgn.\n */\nexport function slåSammenKontekst(\n base: ContextInput,\n påLagt: Partial<ContextInput> | undefined,\n sdkVersion: string,\n): ContextInput & { sdkVersion: string } {\n const ut: Record<string, unknown> = {};\n for (const felt of KONTEKST_FELTER) {\n const verdi = påLagt && felt in påLagt ? påLagt[felt] : base[felt];\n if (verdi !== undefined && verdi !== null) ut[felt] = verdi;\n }\n ut['sdkVersion'] = sdkVersion;\n return ut as unknown as ContextInput & { sdkVersion: string };\n}\n","import type { PatternFinding, PatternKind } from './typer.js';\n\n/**\n * DD-46 — mønstervarsel før sending, aldri stille redaksjon.\n *\n * Shake redigerer de samme mønstrene, men stille og kun i logger. Innspel har\n * ingen logger: teksten ER innspillet, og en stille endring ville gjort\n * innsenderen til usikker kilde på sin egen sak. Derfor returnerer denne\n * funksjonen FUNN. Den fjerner aldri noe — «Fjern» eller «Behold» er\n * innsenderens valg (DD-05).\n *\n * Regex i kjernen, ingen avhengighet (K19).\n */\n\ninterface Regel {\n kind: PatternKind;\n re: RegExp;\n /** Ekstra sjekk der formen alene gir for mange falske varsler. */\n gyldig?: (treff: string) => boolean;\n}\n\n/**\n * Luhn. Uten den varsles hvert 16-sifrede ordrenummer som kortnummer, og et\n * varsel som stemmer sjelden lærer folk å trykke «Behold» uten å lese.\n */\nfunction luhn(siffer: string): boolean {\n let sum = 0;\n let annenhver = false;\n for (let i = siffer.length - 1; i >= 0; i--) {\n let n = siffer.charCodeAt(i) - 48;\n if (n < 0 || n > 9) return false;\n if (annenhver) {\n n *= 2;\n if (n > 9) n -= 9;\n }\n sum += n;\n annenhver = !annenhver;\n }\n return sum % 10 === 0;\n}\n\nfunction gyldigIp(treff: string): boolean {\n const deler = treff.split('.');\n return deler.length === 4 && deler.every((d) => d.length <= 3 && Number(d) <= 255);\n}\n\nconst REGLER: Regel[] = [\n {\n kind: 'email',\n re: /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}/g,\n },\n {\n // JWT-form først: tre base64url-segmenter. Fanger et feedback-token limt\n // inn fra en feilmelding — nøyaktig det innsenderen ikke bør sende.\n //\n // Siste segment krever bare 4 tegn. En ekte ES256-signatur er ~86, men et\n // token som er avkortet i en feilmelding er like uønsket i innspillsteksten,\n // og de to første segmentene på 16+ base64url-tegn hver gjør falske treff i\n // norsk prosa nesten umulige.\n kind: 'token',\n re: /\\b[A-Za-z0-9_-]{16,}\\.[A-Za-z0-9_-]{16,}\\.[A-Za-z0-9_-]{4,}\\b|\\b(?:sk|pk|ghp|xox[abpr])[-_][A-Za-z0-9_-]{16,}\\b/g,\n },\n {\n kind: 'card',\n // 13–19 siffer med valgfrie mellomrom eller bindestrek mellom grupper.\n re: /\\b(?:\\d[ -]?){12,18}\\d\\b/g,\n gyldig: (t) => {\n const siffer = t.replace(/[^\\d]/g, '');\n return siffer.length >= 13 && siffer.length <= 19 && luhn(siffer);\n },\n },\n {\n kind: 'ip',\n re: /\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b/g,\n gyldig: gyldigIp,\n },\n {\n kind: 'phone',\n // Norsk form: 8 siffer, med eller uten +47/0047 og gruppering.\n re: /(?:\\+47|0047)?[ ]?(?:\\d[ ]?){8}(?![ ]?\\d)/g,\n gyldig: (t) => {\n const siffer = t.replace(/[^\\d]/g, '');\n const uten = siffer.replace(/^(?:47|0047)/, '');\n return uten.length === 8;\n },\n },\n];\n\n/**\n * Leter etter e-post, telefonnummer, kortnummer (Luhn-validert), IP-adresser og\n * token-lignende strenger i en innspillstekst.\n *\n * Rekkefølgen på reglene er bevisst: de spesifikke først, så et treff som\n * allerede er dekket av en sterkere regel ikke varsles to ganger. Et kortnummer\n * er ikke også et telefonnummer.\n *\n * @param text Teksten innsenderen har skrevet. Endres ikke.\n * @returns Funnene med posisjon, så verten kan markere dem i feltet. Tom liste\n * for en vanlig innsending.\n */\nexport function scanText(text: string): PatternFinding[] {\n const funn: PatternFinding[] = [];\n const opptatt: Array<[number, number]> = [];\n\n for (const regel of REGLER) {\n regel.re.lastIndex = 0;\n let treff: RegExpExecArray | null;\n while ((treff = regel.re.exec(text)) !== null) {\n const rå = treff[0];\n const trimmet = rå.trim();\n if (!trimmet) continue;\n\n const start = treff.index + rå.indexOf(trimmet);\n const end = start + trimmet.length;\n\n if (regel.gyldig && !regel.gyldig(trimmet)) continue;\n if (opptatt.some(([a, b]) => start < b && end > a)) continue;\n\n opptatt.push([start, end]);\n funn.push({ kind: regel.kind, match: trimmet, start, end });\n }\n }\n\n return funn.sort((a, b) => a.start - b.start);\n}\n","/**\n * `clientRef` — en tilfeldig UUID per INNSENDING, aldri per enhet eller\n * installasjon (K20, og kontraktens `SubmissionCreateBase.clientRef`). Den er\n * en idempotensnøkkel for offline-køen, ikke en identitet: to innsendinger fra\n * samme telefon deler den aldri.\n *\n * Bruker `crypto.randomUUID` der den finnes (Node, moderne nettlesere) og\n * faller tilbake til `Math.random` ellers — React Native har ingen WebCrypto\n * uten polyfill, og kjernen skal ikke kreve en (K19). Fallbacken er god nok:\n * nøkkelen er ikke en hemmelighet, og kollisjonsvinduet er én innsender i 24\n * timer.\n */\nexport function nyClientRef(): string {\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (typeof c?.randomUUID === 'function') return c.randomUUID();\n\n const hex: string[] = [];\n for (let i = 0; i < 36; i++) {\n if (i === 8 || i === 13 || i === 18 || i === 23) {\n hex.push('-');\n } else if (i === 14) {\n hex.push('4');\n } else if (i === 19) {\n hex.push(((Math.random() * 4) | 8).toString(16));\n } else {\n hex.push(((Math.random() * 16) | 0).toString(16));\n }\n }\n return hex.join('');\n}\n","import type { AttachmentMime } from './api.js';\nimport { InnspelApiError, InnspelConfigError } from './feil.js';\nimport type { AttachmentBody, AttachmentInput } from './typer.js';\n\n/**\n * Grensene for et vedlegg (K9). Tallene er kontraktens\n * (`AttachmentPresignRequest`: 5 MB, 4096²) og sjekkes her FØR noe går på\n * nettet — plattformen sjekker dem på nytt før dekoding.\n */\nexport const VEDLEGG_GRENSER = {\n maxBytes: 5_242_880,\n maxDimension: 4096,\n} as const;\n\n/** Allowlisten (K9): aldri SVG, aldri GIF. Avgjøres på ledningen av magic bytes, ikke av denne strengen. */\nexport const TILLATTE_MIME: readonly AttachmentMime[] = ['image/png', 'image/jpeg', 'image/webp'];\n\n/** Byte-lengden på kroppen, uansett om verten gir Blob, ArrayBuffer eller en typed array. */\nexport function byteLengde(body: AttachmentBody): number {\n if (typeof body === 'object' && body !== null && 'size' in body && typeof body.size === 'number') {\n return body.size;\n }\n return (body as ArrayBuffer | ArrayBufferView).byteLength;\n}\n\n/**\n * Validerer vedlegget slik `init` validerer opsjonene: kaster {@link InnspelConfigError}\n * med feltnavn, før noe treffer nettet. Et vedlegg over grensene er en utviklerfeil\n * i vertens fangst — ikke noe innsenderen skal få 413 for etter å ha ventet.\n */\nexport function validerVedlegg(input: AttachmentInput): void {\n if (input === null || typeof input !== 'object') {\n throw new InnspelConfigError('attachment', 'må være et objekt med { submissionId?, mime, body, width, height }');\n }\n if (!TILLATTE_MIME.includes(input.mime)) {\n throw new InnspelConfigError(\n 'attachment.mime',\n `må være en av ${TILLATTE_MIME.join(', ')}. SVG og GIF er aldri tillatt (K9)`,\n );\n }\n if (input.body === null || input.body === undefined) {\n throw new InnspelConfigError('attachment.body', 'mangler — send bildet som Blob, ArrayBuffer eller Uint8Array');\n }\n const bytes = byteLengde(input.body);\n if (!Number.isFinite(bytes) || bytes < 1) {\n throw new InnspelConfigError('attachment.body', 'er tom');\n }\n if (bytes > VEDLEGG_GRENSER.maxBytes) {\n throw new InnspelConfigError(\n 'attachment.body',\n `er ${bytes} byte, over taket på ${VEDLEGG_GRENSER.maxBytes} (5 MB). Reduser kvaliteten eller oppløsningen ved fangst`,\n );\n }\n for (const felt of ['width', 'height'] as const) {\n const v = input[felt];\n if (!Number.isInteger(v) || v < 1 || v > VEDLEGG_GRENSER.maxDimension) {\n throw new InnspelConfigError(\n `attachment.${felt}`,\n `må være et heltall mellom 1 og ${VEDLEGG_GRENSER.maxDimension} (K9)`,\n );\n }\n }\n}\n\n/** Det presign svarer med, slik `lastOpp` trenger det. */\nexport interface PresignSvar {\n attachmentId: string;\n uploadUrl: string;\n headers: ReadonlyArray<{ name: string; value: string }>;\n}\n\n/**\n * PUT mot den presignede URL-en, med NØYAKTIG headerne presign ga — settet er\n * lukket, og lagringen avviser alt annet (signaturen dekker `Content-Type`).\n *\n * En egen funksjon fordi den ikke går gjennom den genererte klienten: URL-en\n * peker på lagringen, ikke på plattformen, og skal hverken ha tenantKey eller\n * token. En nettverksfeil kastes videre som den er, så kalleren kan skille\n * «nettet er nede» fra «lagringen sa nei».\n */\nexport async function lastOppTilLagring(\n fetchImpl: typeof fetch,\n presign: PresignSvar,\n body: AttachmentBody,\n signal: AbortSignal,\n): Promise<void> {\n const headers: Record<string, string> = {};\n for (const h of presign.headers) headers[h.name] = h.value;\n\n const res = await fetchImpl(new Request(presign.uploadUrl, { method: 'PUT', headers, body, signal }));\n if (!res.ok) {\n throw new InnspelApiError(\n res.status,\n 'unknown',\n `Lagringen avviste opplastingen med status ${res.status}. Bildet ble ikke lagt ved.`,\n );\n }\n}\n","/**\n * Versjonen som sendes som `context.sdkVersion` på hver innsending.\n *\n * `maaling.md` teller SDK-versjonsspredning per leietaker — «en gammel SDK er\n * et vedlikeholdsproblem som ellers er usynlig». Derfor er dette en konstant og\n * ikke et `require('../package.json')`: kjernen skal virke i en bundler som\n * ikke kan lese JSON, og `test/versjon.test.ts` holder den i takt med\n * `package.json`.\n */\nexport const VERSJON = '0.8.0';\n","import {\n createClient,\n createConfig,\n ingestAttachmentsComplete,\n ingestAttachmentsPresign,\n ingestConfigGet,\n ingestKnownIssuesConfirm,\n ingestKnownIssuesList,\n ingestProgramsAccept,\n ingestProgramsCompleteTask,\n ingestProgramsDecline,\n ingestProgramsListMine,\n ingestProgramsRespond,\n ingestProgramsWithdraw,\n ingestSubmissionsCreate,\n ingestSubmissionsListMine,\n ingestSubmissionsStatus,\n type ApiErrorBody,\n type AttachmentPresign,\n type AttachmentView,\n type Client,\n type ClientConfig,\n type ErrorCode,\n type FollowUpResponseCreate,\n type KnownIssueCard,\n type MyPrograms,\n type ParticipationView,\n type SubmissionStatusView,\n type TaskCompletionCreate,\n type TaskCompletionView,\n} from './api.js';\nimport { erHeaderTrygg, InnspelApiError, InnspelConfigError, NettverksFeil } from './feil.js';\nimport { hentToken } from './identitet.js';\nimport { flushKo } from './flush.js';\nimport { Ko } from './ko.js';\nimport { slåSammenKontekst, validerKontekst } from './kontekst.js';\nimport { scanText } from './monster.js';\nimport type {\n AttachmentInput,\n AttachmentOutcome,\n CaptureInput,\n CaptureResult,\n ContextInput,\n FlushResult,\n InnspelOptions,\n KnownIssueQuery,\n MySubmission,\n OpenFeedbackOptions,\n PatternFinding,\n Presenter,\n QueuedSubmission,\n ResolvedSettings,\n Connectivity,\n Telemetry,\n TelemetryEvent,\n} from './typer.js';\nimport { nyClientRef } from './uuid.js';\nimport { byteLengde, lastOppTilLagring, validerVedlegg } from './vedlegg.js';\nimport { VERSJON } from './versjon.js';\n\nconst STANDARD_TIMEOUT_MS = 10_000;\nconst noopTelemetri: Telemetry = { emit: () => undefined };\nconst UTFALL = ['fungerte', 'delvis', 'ikke'] as const;\nconst SETNING_MAKS = 140;\n\n/** Tre lukkede valg og en setning ≤ 140 — samme form for «Gjort» og «Hvordan gikk det?». Utviklerfeil kastes før noe kall går ut. */\nfunction validerUtfall(input: { outcome: string; text?: string | undefined }): void {\n if (!(UTFALL as readonly string[]).includes(input.outcome)) {\n throw new InnspelConfigError('outcome', `må være ett av ${UTFALL.join(' · ')}`);\n }\n if (input.text !== undefined && (typeof input.text !== 'string' || input.text.length > SETNING_MAKS)) {\n throw new InnspelConfigError('text', `er valgfri, men aldri lengre enn ${SETNING_MAKS} tegn`);\n }\n}\n\n/** Klienten `init` gir deg. Én per app; den er trygg å holde på. */\nexport interface InnspelClient {\n /** Versjonen av `@innspel/core`. Følger med hver innsending som `context.sdkVersion`. */\n readonly version: string;\n /** `true` når `identityProvider` er `null` — innsendinger kan ikke følges opp. */\n readonly isAnonymous: boolean;\n /** Vertens nettstatus fra `init({ connectivity })`, eller `null` — da vet widgeten om nettet først når et kall feiler. */\n readonly connectivity: Connectivity | null;\n /** Leietakerens grenser slik klienten kjenner dem. Oppdateres på plass av {@link loadSettings}. */\n readonly settings: ResolvedSettings;\n /** Konteksten som følger hver innsending, med `sdkVersion` satt av kjernen. */\n readonly context: ContextInput & { sdkVersion: string };\n\n /**\n * Henter leietakerens klientkonfigurasjon (`GET /v1/ingest/config`, M2.5): tegngrense,\n * minste antall tegn, skjermbilde og personvernlenke — det verten ellers måtte\n * duplisere i `init()`. Kalles av widgeten ved åpning, aldri ved oppstart (DD-41).\n * Svarer ikke kallet, beholdes det klienten alt har: konfigurasjonen er et tilbud,\n * aldri en sperre. Returnerer `settings` — samme objekt, oppdatert.\n */\n loadSettings(): Promise<ResolvedSettings>;\n\n capture(input: CaptureInput): Promise<CaptureResult>;\n\n readonly knownIssues: {\n /** Kortene som vises FØR feltet i feilsporet (DD-03). Feiler oppslaget, er lista tom. */\n for(query?: KnownIssueQuery): Promise<KnownIssueCard[]>;\n /** «Ja, jeg også» (DD-29): Reach +1 uten ny sak. */\n confirm(knownIssueId: string): Promise<SubmissionStatusView>;\n };\n\n readonly subjects: {\n /** «Mine innspill» (DD-27), med køen gjort synlig (DD-41). */\n submissions(): Promise<MySubmission[]>;\n status(submissionId: string): Promise<SubmissionStatusView>;\n };\n\n readonly programs: {\n /** Alt om betaprogram for innsenderen i ett kall: invitasjoner til banneret (DD-12), deltakelser til fanen, og oppfølginger som venter. */\n list(): Promise<MyPrograms>;\n /**\n * Aksepterer invitasjonen etter forventningsavklaringen (DD-13, DD-32).\n * Tokenet kom fra leietakerens egen kanal — plattformen sender aldri (DD-12).\n * Er det brukt, utløpt eller utstedt til noen andre, kommer 404\n * `invitation_invalid`. Gjentak fra samme innsender er trygt: svaret er den\n * samme deltakelsen.\n */\n accept(invitationToken: string): Promise<ParticipationView>;\n /** Avslår invitasjonen. Ingen årsak spørres. Et nei etter ja er {@link withdraw}, ikke avslag. */\n decline(invitationToken: string): Promise<void>;\n /** «Gå ut» (DD-36): umiddelbart, alltid tilgjengelig, og aldri en straff. Idempotent. */\n withdraw(participationId: string): Promise<ParticipationView>;\n /**\n * «Gjort» (3c): ett av tre lukkede utfall — fungerte · delvis · ikke — og en valgfri\n * setning ≤ 140. Én per oppgave; et gjentak er 409 `task_already_completed`. En egen\n * innsending kan henge ved. Teller `task_completed` med utfallet, aldri teksten.\n */\n completeTask(taskId: string, completion: TaskCompletionCreate): Promise<TaskCompletionView>;\n /**\n * «Hvordan gikk det?» på en utsendt oppfølging fra `list().pendingFollowUps`: de samme\n * tre valgene og en valgfri setning ≤ 140. Bare `hvordan_gikk_det` og `sjekkpunkt` tar\n * svar — en påminnelse eller et tilbud om utgang gir 409 `follow_up_not_answerable`.\n * Engangs (409 `follow_up_already_answered`). Teller `followup_answered`.\n */\n respond(followUpId: string, response: FollowUpResponseCreate): Promise<void>;\n };\n\n readonly attachments: {\n /**\n * Laster opp ett maskert skjermbilde til en innsending som alt er lagret:\n * presign → PUT til lagringen → complete. Bruk `capture({ attachment })` i\n * stedet når teksten og bildet sendes sammen — da håndteres DD-42 for deg.\n * Plattformen verifiserer og re-enkoder etterpå; `processedAt` er satt når\n * det er gjort.\n */\n upload(submissionId: string, attachment: AttachmentInput): Promise<AttachmentView>;\n };\n\n readonly queue: {\n pending(): Promise<QueuedSubmission[]>;\n /** Sendes ellers automatisk når widgeten åpnes. Aldri ved oppstart (DD-41). */\n flush(): Promise<FlushResult>;\n };\n\n /** Mønstervarsel (DD-46). Returnerer funn — fjerner aldri noe. */\n scanText(text: string): PatternFinding[];\n\n /** Emitter en tragt-hendelse. Brukes av UI-laget for `widget_opened` og `track_selected`. */\n track(event: TelemetryEvent): void;\n\n /** Åpner widgeten. Krever `@innspel/react-native`. */\n openFeedback(options?: OpenFeedbackOptions): Promise<void>;\n\n /** Registrerer visningen. Kalles av `@innspel/react-native`, ikke av verten. */\n registerPresenter(presenter: Presenter): void;\n}\n\nfunction krev(betingelse: boolean, felt: string, hva: string): void {\n if (!betingelse) throw new InnspelConfigError(felt, hva);\n}\n\nfunction validerOpsjoner(o: InnspelOptions): void {\n krev(o !== null && typeof o === 'object', 'options', 'mangler — init() tar ett objekt');\n krev(\n typeof o.baseUrl === 'string' && o.baseUrl.length > 0,\n 'baseUrl',\n 'mangler. Sett plattformens API-rot, f.eks. https://api.innspel.example — SDK-et gjetter aldri hvor dataene havner',\n );\n krev(\n typeof o.tenantKey === 'string' && o.tenantKey.length > 0,\n 'tenantKey',\n 'mangler. Den offentlige SDK-nøkkelen finner du i panelet under Innstillinger → Produkter',\n );\n krev(\n erHeaderTrygg(o.tenantKey),\n 'tenantKey',\n 'har tegn som ikke kan stå i en HTTP-header (mellomrom, linjeskift eller tegn utenfor ASCII). Har du kopiert en placeholder med «…» i, bytt den mot den ekte nøkkelen fra panelet',\n );\n krev(\n o.identityProvider === null || typeof o.identityProvider === 'function',\n 'identityProvider',\n 'må være en funksjon som gir et feedback-token, eller null for anonym modus. Anonym modus er et eksplisitt valg, aldri en glemt opsjon',\n );\n\n const s = o.storage as Partial<InnspelOptions['storage']> | undefined;\n krev(s !== null && typeof s === 'object', 'storage', 'mangler. Offline-køen lagres her (DD-41)');\n for (const metode of ['get', 'set', 'remove'] as const) {\n krev(typeof s?.[metode] === 'function', `storage.${metode}`, 'mangler eller er ikke en funksjon');\n }\n\n validerKontekst(o.context ?? {}, 'context', true);\n\n if (o.textMaxLength !== undefined) {\n krev(\n o.textMaxLength === 140 || o.textMaxLength === 280,\n 'textMaxLength',\n 'må være 140 eller 280 — kontrakten har to verdier, og 140 er den som gjelder ved minorsPresent',\n );\n }\n if (o.minTextLength !== undefined) {\n krev(\n Number.isInteger(o.minTextLength) && o.minTextLength >= 1,\n 'minTextLength',\n 'må være et heltall ≥ 1 (DD-44)',\n );\n }\n if (o.telemetry !== undefined) {\n krev(\n typeof o.telemetry?.emit === 'function',\n 'telemetry.emit',\n 'mangler eller er ikke en funksjon',\n );\n }\n if (o.connectivity !== undefined) {\n krev(\n typeof o.connectivity?.isOnline === 'function',\n 'connectivity.isOnline',\n 'mangler eller er ikke en funksjon. Gi et objekt med isOnline() og valgfri subscribe(), eller utelat opsjonen — se docs/sdk/README.md, «Nettstatus»',\n );\n krev(\n o.connectivity.subscribe === undefined || typeof o.connectivity.subscribe === 'function',\n 'connectivity.subscribe',\n 'er valgfri, men må være en funksjon som gir en avmelding tilbake',\n );\n }\n}\n\n/** Oversetter et feilsvar fra plattformen til {@link InnspelApiError}. */\nfunction tilApiFeil(status: number, kropp: unknown, response?: Response): InnspelApiError {\n const body = (kropp ?? {}) as Partial<ApiErrorBody>;\n const kode = (body.code ?? 'unknown') as ErrorCode | 'unknown';\n const retryAfter = Number(response?.headers.get('retry-after') ?? NaN);\n return new InnspelApiError(\n status,\n kode,\n body.message ?? `Kallet feilet med status ${status}.`,\n Number.isFinite(retryAfter) ? retryAfter : undefined,\n );\n}\n\n/**\n * Setter opp SDK-et. Validerer opsjonene ved kjøretid og kaster umiddelbart med\n * feltnavnet ved feil bruk — typer stopper ikke en JavaScript-vert eller en feil\n * `.env` (tech-decisions.md, «SDK — dokumentasjon og utvikleropplevelse»).\n *\n * Kaller ingenting og sender ingenting: køen tømmes ALDRI ved oppstart (DD-41).\n *\n * @example\n * ```ts\n * const innspel = init({\n * baseUrl: 'https://api.innspel.example',\n * tenantKey: 'ik_pub_xxxxxxxx',\n * identityProvider: hentFeedbackToken, // eller null = anonym\n * storage,\n * context: { platform: 'ios', appVersion: '1.4.2' },\n * });\n * ```\n */\nexport function init(options: InnspelOptions): InnspelClient {\n validerOpsjoner(options);\n\n const settings: ResolvedSettings = {\n // Strammest mulig til loadSettings() har svart: 140 / 10 / skjermbilde av er\n // verdiene ved minorsPresent (K18). Verten kan overstyre startverdiene, men\n // det leietakeren har satt i panelet vinner når konfigurasjonen er hentet.\n textMaxLength: options.textMaxLength ?? 140,\n minTextLength: options.minTextLength ?? 10,\n screenshotsEnabled: options.screenshotsEnabled ?? false,\n };\n\n const kontekst = slåSammenKontekst(options.context, undefined, VERSJON);\n const telemetri = options.telemetry ?? noopTelemetri;\n const kø = new Ko(options.storage);\n const anonym = options.identityProvider === null;\n\n /**\n * `fetch` med nettverksfeilene merket. Den genererte klienten fanger det fetch\n * kaster og svarer uten `response`; merket er det eneste som skiller «nettet er\n * nede» fra en feil i vår egen kode. Vertens fetch slås opp ved hvert kall.\n */\n const nett = ((input: Request) =>\n (options.fetch ?? fetch)(input).catch((e: unknown) => {\n throw new NettverksFeil(String(e));\n })) as typeof fetch;\n\n const klient: Client = createClient(createConfig({ baseUrl: options.baseUrl, fetch: nett }));\n\n let presenter: Presenter | null = null;\n\n /** Headere for ett kall. Tokenet hentes friskt hver gang — aldri fra disk (K20). */\n async function headere(): Promise<Record<string, string>> {\n const h: Record<string, string> = { 'X-Innspel-Tenant-Key': options.tenantKey };\n const token = await hentToken(options.identityProvider);\n if (token) h['Authorization'] = `Bearer ${token}`;\n return h;\n }\n\n /**\n * Tidsgrense for ett kall. React Native polyfyller `AbortSignal` uten\n * `AbortSignal.timeout`, og Expo legger den ikke til — der er det en egen\n * `AbortController` med timer, ryddet når kallet er ferdig.\n */\n async function medTidsgrense<T>(kall: (signal: AbortSignal) => Promise<T>): Promise<T> {\n const ms = options.timeoutMs ?? STANDARD_TIMEOUT_MS;\n if (typeof AbortSignal.timeout == 'function') return kall(AbortSignal.timeout(ms));\n const kontroll = new AbortController();\n const timer = setTimeout(() => kontroll.abort(), ms);\n try {\n return await kall(kontroll.signal);\n } finally {\n clearTimeout(timer);\n }\n }\n\n /**\n * Kjører et kall og prøver ÉN gang til ved `feedback_token_expired`.\n *\n * Kontrakten skiller bevisst `expired` fra `invalid`: den første er ventet og\n * håndteres her, den andre er en utviklerfeil i vertens token-endepunkt og\n * skal vises, ikke skjules.\n */\n async function medToken<T>(\n kall: (h: Record<string, string>, s: AbortSignal) => Promise<{ data?: T; error?: unknown; response: Response }>,\n ): Promise<T> {\n // Hvert forsøk får egen tidsgrense. Uten svar er feilen det fetch kastet\n // (NettverksFeil) eller en feil i koden før fetch — begge kastes som de er.\n const forsøk = async () => {\n const h = await headere();\n const r = await medTidsgrense((s) => kall(h, s));\n if (!r.response) throw r.error;\n return r;\n };\n let res = await forsøk();\n if (res.response.status === 401) {\n const feil = tilApiFeil(401, res.error, res.response);\n if (feil.code === 'feedback_token_expired' && !anonym) {\n res = await forsøk();\n }\n }\n if (!res.response.ok) throw tilApiFeil(res.response.status, res.error, res.response);\n return res.data as T;\n }\n\n /** Tokenet kommer fra leietakerens kanal (DD-12); en tom streng er en feil i vertens kobling, ikke et kall. */\n function krevInvitasjonstoken(token: string): void {\n if (typeof token !== 'string' || token.length === 0) {\n throw new InnspelConfigError(\n 'invitationToken',\n 'mangler — det er engangs-tokenet leietakeren sendte i sin egen kanal (dyplenke, varsel eller e-post)',\n );\n }\n }\n\n function krevToken(): void {\n if (anonym) {\n throw new InnspelApiError(\n 401,\n 'feedback_token_required',\n 'Anonym modus har ingen «mine innspill» — det finnes ingen identitet å slå opp.',\n );\n }\n }\n\n async function sendNå(\n input: CaptureInput,\n clientRef: string,\n kontekstForKall: ContextInput & { sdkVersion: string },\n ): Promise<SubmissionStatusView> {\n const body: Record<string, unknown> = {\n type: input.type,\n text: input.text,\n context: kontekstForKall,\n clientRef,\n };\n if (input.programId !== undefined) body['programId'] = input.programId;\n if (input.taskId !== undefined) body['taskId'] = input.taskId;\n if (input.type === 'feil') {\n if (input.correlation !== undefined) body['correlation'] = input.correlation;\n if (input.relatedKnownIssueId !== undefined) {\n body['relatedKnownIssueId'] = input.relatedKnownIssueId;\n }\n }\n\n return medToken<SubmissionStatusView>((h, s) =>\n ingestSubmissionsCreate({\n client: klient,\n headers: h,\n signal: s,\n body: body as never,\n }) as never,\n );\n }\n\n /**\n * Presign → PUT → complete. Bildet går rett til lagringen med nøyaktig\n * headerne presign ga; tenantKey og token følger aldri med dit.\n */\n async function lastOppVedlegg(submissionId: string, vedlegg: AttachmentInput): Promise<AttachmentView> {\n const presign = await medToken<AttachmentPresign>((h, s) =>\n ingestAttachmentsPresign({\n client: klient,\n headers: h,\n signal: s,\n body: {\n submissionId,\n mime: vedlegg.mime,\n bytes: byteLengde(vedlegg.body),\n width: vedlegg.width,\n height: vedlegg.height,\n },\n }) as never,\n );\n\n await medTidsgrense((s) => lastOppTilLagring(nett, presign, vedlegg.body, s));\n\n return medToken<AttachmentView>((h, s) =>\n ingestAttachmentsComplete({\n client: klient,\n headers: h,\n signal: s,\n path: { id: presign.attachmentId },\n }) as never,\n );\n }\n\n /**\n * Tømmer køen med et ferskt token per rad. Delt av og\n * — de to stedene DD-41 sier køen skal tømmes.\n */\n const flushKø = (): Promise<FlushResult> =>\n flushKo(\n kø,\n (rad) => sendNå({ type: rad.type, text: rad.text } as CaptureInput, rad.clientRef, kontekst),\n telemetri,\n );\n\n // Nettet tilbake → køen tømmes. Aldri ved oppstart (DD-41): bare på en hendelse verten melder.\n options.connectivity?.subscribe?.((online) => {\n if (online) void flushKø().catch(() => undefined);\n });\n\n const innspel: InnspelClient = {\n version: VERSJON,\n isAnonymous: anonym,\n connectivity: options.connectivity ?? null,\n settings,\n context: kontekst,\n\n async loadSettings() {\n try {\n const cfg = await medToken<ClientConfig>((h, s) =>\n ingestConfigGet({ client: klient, headers: h, signal: s }) as never,\n );\n // Bare det som faktisk kom: en fake eller en gammel plattform kan svare\n // med et delvis objekt, og da står det klienten alt har.\n if (cfg?.textMaxLength === 140 || cfg?.textMaxLength === 280) settings.textMaxLength = cfg.textMaxLength;\n if (typeof cfg?.minTextLength === 'number' && cfg.minTextLength >= 1) settings.minTextLength = cfg.minTextLength;\n if (typeof cfg?.screenshotsEnabled === 'boolean') settings.screenshotsEnabled = cfg.screenshotsEnabled;\n if (typeof cfg?.privacyUrl === 'string' && cfg.privacyUrl) settings.privacyUrl = cfg.privacyUrl;\n } catch {\n // Konfigurasjonen er et tilbud (wireframe 2c-prinsippet): svarer den ikke,\n // står de strammeste verdiene, og innsenderen kan fortsatt melde.\n }\n return settings;\n },\n\n async capture(input) {\n const tekst = input.text ?? '';\n if (tekst.length < settings.minTextLength) {\n throw new InnspelConfigError(\n 'text',\n `er ${tekst.length} tegn. Send-knappen skal være inaktiv under minst ${settings.minTextLength} tegn (DD-44)`,\n );\n }\n if (tekst.length > settings.textMaxLength) {\n throw new InnspelConfigError(\n 'text',\n `er ${tekst.length} tegn, over leietakerens grense på ${settings.textMaxLength}`,\n );\n }\n if (input.context) validerKontekst(input.context, 'capture.context', false);\n // Vedlegget valideres FØR teksten sendes: et bilde over grensene er en\n // utviklerfeil i fangsten, og skal feile før noe er lagret.\n if (input.attachment) validerVedlegg(input.attachment);\n\n const clientRef = input.clientRef ?? nyClientRef();\n const kontekstForKall = slåSammenKontekst(options.context, input.context, VERSJON);\n\n let submission;\n try {\n submission = await sendNå(input, clientRef, kontekstForKall);\n } catch (e) {\n if (e instanceof InnspelApiError) {\n telemetri.emit({ name: 'submission_failed', reason: e.code });\n throw e;\n }\n // En feil i koden køes ikke: den ville sett ut som «Ingen nett» med nett\n // på og aldri blitt tømt. Teksten står i vertens felt.\n if (!(e instanceof NettverksFeil)) throw e;\n // Nettverksfeil: teksten mistes aldri. Kun tekst køes — aldri et\n // skjermbilde (rapport 3, kap. 5).\n await kø.leggTil({\n clientRef,\n type: input.type,\n text: tekst,\n queuedAt: new Date().toISOString(),\n });\n telemetri.emit({\n name: 'submission_sent',\n type: input.type,\n hasAttachment: false,\n offlineQueued: true,\n });\n // Et skjermbilde køes aldri (DD-41): det ble forkastet, og UI-et skal si det.\n return input.attachment\n ? { status: 'queued', clientRef, attachment: { status: 'dropped' } }\n : { status: 'queued', clientRef };\n }\n\n // DD-42: teksten er lagret. Bildet lastes opp i egen forespørsel og kan\n // feile alene — innsendingen står uansett, og kvitteringen sier hva som skjedde.\n let attachment: AttachmentOutcome | undefined;\n if (input.attachment) {\n try {\n attachment = { status: 'uploaded', attachment: await lastOppVedlegg(submission.id, input.attachment) };\n } catch (e) {\n attachment = { status: 'failed', error: e instanceof Error ? e : new Error(String(e)) };\n }\n }\n\n telemetri.emit({\n name: 'submission_sent',\n type: input.type,\n hasAttachment: attachment?.status === 'uploaded',\n offlineQueued: false,\n });\n return attachment ? { status: 'sent', submission, attachment } : { status: 'sent', submission };\n },\n\n knownIssues: {\n async for(query = {}) {\n try {\n const kort = await medToken<KnownIssueCard[]>((h, s) =>\n ingestKnownIssuesList({\n client: klient,\n headers: h,\n signal: s,\n query: {\n ...(query.screen !== undefined ? { screen: query.screen } : {}),\n ...(query.version !== undefined ? { version: query.version } : {}),\n platform: query.platform ?? kontekst.platform,\n },\n }) as never,\n );\n const liste = kort ?? [];\n telemetri.emit({ name: 'known_issue_shown', count: liste.length });\n return liste;\n } catch {\n // «Treffene er et tilbud, aldri en sperre» (wireframe 2c): svarer ikke\n // sjekken, hoppes den over — rett til feltet, ingen melding.\n return [];\n }\n },\n\n async confirm(knownIssueId) {\n const res = await medToken<SubmissionStatusView>((h, s) =>\n ingestKnownIssuesConfirm({\n client: klient,\n headers: h,\n signal: s,\n path: { id: knownIssueId },\n body: { context: kontekst } as never,\n }) as never,\n );\n telemetri.emit({ name: 'known_issue_confirmed' });\n return res;\n },\n },\n\n subjects: {\n async submissions() {\n krevToken();\n\n const ventende: MySubmission[] = (await kø.les()).map((r) => ({\n pending: true as const,\n clientRef: r.clientRef,\n type: r.type,\n text: r.text,\n queuedAt: r.queuedAt,\n }));\n\n let sendte: SubmissionStatusView[] | undefined;\n try {\n sendte = await medToken<SubmissionStatusView[]>((h, s) =>\n ingestSubmissionsListMine({ client: klient, headers: h, signal: s }) as never,\n );\n } catch (e) {\n // En ekte API-feil skjules aldri — 401 og 429 skal fram.\n if (!(e instanceof NettverksFeil)) throw e;\n // Nettverksfeil er noe annet: køen er LOKAL, og den er hele poenget\n // med «Mine innspill» offline (DD-41). At serveren er utilgjengelig\n // skal ikke skjule raden som venter på nett — det er nøyaktig da\n // innsenderen trenger å se den.\n return ventende;\n }\n\n telemetri.emit({ name: 'status_viewed' });\n return [...ventende, ...(sendte ?? [])];\n },\n\n async status(submissionId) {\n krevToken();\n return medToken<SubmissionStatusView>((h, s) =>\n ingestSubmissionsStatus({\n client: klient,\n headers: h,\n signal: s,\n path: { id: submissionId },\n }) as never,\n );\n },\n },\n\n programs: {\n async list() {\n krevToken();\n return medToken<MyPrograms>((h, s) =>\n ingestProgramsListMine({ client: klient, headers: h, signal: s }) as never,\n );\n },\n\n async accept(invitationToken) {\n krevInvitasjonstoken(invitationToken);\n krevToken();\n const svar = await medToken<ParticipationView>((h, s) =>\n ingestProgramsAccept({\n client: klient,\n headers: h,\n signal: s,\n path: { token: invitationToken },\n }) as never,\n );\n telemetri.emit({ name: 'invitation_accepted' });\n return svar;\n },\n\n async decline(invitationToken) {\n krevInvitasjonstoken(invitationToken);\n krevToken();\n await medToken<void>((h, s) =>\n ingestProgramsDecline({\n client: klient,\n headers: h,\n signal: s,\n path: { token: invitationToken },\n }) as never,\n );\n telemetri.emit({ name: 'invitation_declined' });\n },\n\n async withdraw(participationId) {\n if (typeof participationId !== 'string' || participationId.length === 0) {\n throw new InnspelConfigError('participationId', 'mangler — bruk id fra deltakelsen i programs.list()');\n }\n krevToken();\n return medToken<ParticipationView>((h, s) =>\n ingestProgramsWithdraw({\n client: klient,\n headers: h,\n signal: s,\n path: { id: participationId },\n }) as never,\n );\n },\n\n async completeTask(taskId, completion) {\n if (typeof taskId !== 'string' || taskId.length === 0) {\n throw new InnspelConfigError('taskId', 'mangler — bruk id fra program.tasks i programs.list()');\n }\n validerUtfall(completion);\n krevToken();\n const svar = await medToken<TaskCompletionView>((h, s) =>\n ingestProgramsCompleteTask({\n client: klient,\n headers: h,\n signal: s,\n path: { id: taskId },\n body: completion,\n }) as never,\n );\n telemetri.emit({ name: 'task_completed', outcome: completion.outcome });\n return svar;\n },\n\n async respond(followUpId, response) {\n if (typeof followUpId !== 'string' || followUpId.length === 0) {\n throw new InnspelConfigError('followUpId', 'mangler — bruk id fra pendingFollowUps i programs.list()');\n }\n validerUtfall(response);\n krevToken();\n await medToken<void>((h, s) =>\n ingestProgramsRespond({\n client: klient,\n headers: h,\n signal: s,\n path: { id: followUpId },\n body: response,\n }) as never,\n );\n telemetri.emit({ name: 'followup_answered' });\n },\n },\n\n attachments: {\n async upload(submissionId, attachment) {\n if (typeof submissionId !== 'string' || submissionId.length === 0) {\n throw new InnspelConfigError('submissionId', 'mangler — bruk id fra innsendingen capture() ga');\n }\n validerVedlegg(attachment);\n return lastOppVedlegg(submissionId, attachment);\n },\n },\n\n queue: {\n pending: () => kø.les(),\n flush: flushKø,\n },\n\n scanText,\n\n track: (event) => telemetri.emit(event),\n\n async openFeedback(åpneOpsjoner) {\n if (!presenter) {\n throw new InnspelConfigError(\n 'openFeedback',\n 'krever en visning. @innspel/core har ingen UI — installer @innspel/react-native og pakk appen i <InnspelProvider>. Trenger du å sende uten widget, bruk capture()',\n );\n }\n // Køen tømmes når widgeten åpnes — aldri ved oppstart (DD-41).\n await flushKø();\n await presenter.open(åpneOpsjoner);\n },\n\n registerPresenter(p) {\n presenter = p;\n },\n };\n\n return innspel;\n}\n","/**\n * Geometrien bak maskeringen (DD-39, DD-40) — ren TypeScript uten UI, så den\n * kan testes her og brukes likt av `@innspel/react-native` og `@innspel/web`.\n *\n * Alt er rektangler i BILDETS pikselkoordinater. UI-laget tegner dem som\n * heldekkende flater over forhåndsvisningen og rekomponerer bitmapen; det som\n * står her avgjør bare HVOR flatene ligger. Private views (DD-39) er rektangler\n * som UI-et aldri lar brukeren fjerne — den regelen håndheves der, ikke her,\n * fordi den handler om hvem som la rektangelet, ikke om geometri.\n */\n\nexport interface MaskPoint {\n x: number;\n y: number;\n}\n\nexport interface MaskRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Ett fingerstrøk («Tegn over», DD-40) til rektangler: en kvadratisk flate per\n * punkt, og én per mellomrom mellom to punkter, så strøket er tett selv om\n * fingeren beveget seg fort. Alle klippes til bildet.\n */\nexport function strokTilRekter(punkter: readonly MaskPoint[], penselBredde: number, bilde: { width: number; height: number }): MaskRect[] {\n if (penselBredde <= 0 || punkter.length === 0) return [];\n const halv = penselBredde / 2;\n const ut: MaskRect[] = [];\n\n const legg = (p: MaskPoint) => {\n const r = klipp({ x: p.x - halv, y: p.y - halv, width: penselBredde, height: penselBredde }, bilde);\n if (r) ut.push(r);\n };\n\n legg(punkter[0]!);\n for (let i = 1; i < punkter.length; i++) {\n const a = punkter[i - 1]!;\n const b = punkter[i]!;\n const avstand = Math.hypot(b.x - a.x, b.y - a.y);\n // Fyll gapet med mellomliggende kvadrater når fingeren beveget seg mer enn\n // en halv penselbredde — ellers blir strøket en rekke løse prikker.\n const steg = Math.max(1, Math.ceil(avstand / halv));\n for (let s = 1; s <= steg; s++) {\n legg({ x: a.x + ((b.x - a.x) * s) / steg, y: a.y + ((b.y - a.y) * s) / steg });\n }\n }\n return ut;\n}\n\n/** «Masker felt» (DD-40): ett trykk legger en boks sentrert på punktet. */\nexport function trykkTilRekt(punkt: MaskPoint, boks: { width: number; height: number }, bilde: { width: number; height: number }): MaskRect | null {\n return klipp({ x: punkt.x - boks.width / 2, y: punkt.y - boks.height / 2, width: boks.width, height: boks.height }, bilde);\n}\n\n/**\n * Klipper et rektangel til bildet. Null når ingenting er igjen — et rektangel\n * helt utenfor bildet skal ikke tegnes, og heller ikke telles som en maskering.\n */\nexport function klipp(r: MaskRect, bilde: { width: number; height: number }): MaskRect | null {\n const x1 = Math.max(0, r.x);\n const y1 = Math.max(0, r.y);\n const x2 = Math.min(bilde.width, r.x + r.width);\n const y2 = Math.min(bilde.height, r.y + r.height);\n if (x2 <= x1 || y2 <= y1) return null;\n return { x: x1, y: y1, width: x2 - x1, height: y2 - y1 };\n}\n\n/**\n * Skalerer et rektangel fra ett koordinatsystem til et annet — typisk fra\n * skjermpunkter (der fingeren var) til bildepiksler (der masken skal ligge).\n * Rundes UTOVER: en maske skal aldri bli en piksel for liten.\n */\nexport function skaler(r: MaskRect, fra: { width: number; height: number }, til: { width: number; height: number }): MaskRect {\n const sx = til.width / fra.width;\n const sy = til.height / fra.height;\n const x = Math.floor(r.x * sx);\n const y = Math.floor(r.y * sy);\n return {\n x,\n y,\n width: Math.ceil((r.x + r.width) * sx) - x,\n height: Math.ceil((r.y + r.height) * sy) - y,\n };\n}\n\n/** Om et punkt ligger i et av rektanglene — brukes for «trykk på en maske for å angre den». */\nexport function treffer(punkt: MaskPoint, r: MaskRect): boolean {\n return punkt.x >= r.x && punkt.x < r.x + r.width && punkt.y >= r.y && punkt.y < r.y + r.height;\n}\n\n/**\n * Om rektanglene dekker hele bildet. UI-et bruker det til å si «alt er\n * maskert» — da er det ingenting å sende, og «Fjern bildet» er det ærlige valget.\n */\nexport function dekkerAlt(rekter: readonly MaskRect[], bilde: { width: number; height: number }): boolean {\n return rekter.some((r) => r.x <= 0 && r.y <= 0 && r.x + r.width >= bilde.width && r.y + r.height >= bilde.height);\n}\n"]}
|