@flanksource/clicky-ui 0.3.12 → 0.3.13

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.
Files changed (52) hide show
  1. package/dist/data/ai/SessionViewer.input.cjs +2 -1
  2. package/dist/data/ai/SessionViewer.input.cjs.map +1 -1
  3. package/dist/data/ai/SessionViewer.input.d.ts.map +1 -1
  4. package/dist/data/ai/SessionViewer.input.js +2 -1
  5. package/dist/data/ai/SessionViewer.input.js.map +1 -1
  6. package/dist/data/diagnostics/error-diagnostics.cjs +38 -6
  7. package/dist/data/diagnostics/error-diagnostics.cjs.map +1 -1
  8. package/dist/data/diagnostics/error-diagnostics.js +38 -6
  9. package/dist/data/diagnostics/error-diagnostics.js.map +1 -1
  10. package/dist/data/diagnostics/jvm-stacktrace.cjs +35 -3
  11. package/dist/data/diagnostics/jvm-stacktrace.cjs.map +1 -1
  12. package/dist/data/diagnostics/jvm-stacktrace.d.ts.map +1 -1
  13. package/dist/data/diagnostics/jvm-stacktrace.js +35 -3
  14. package/dist/data/diagnostics/jvm-stacktrace.js.map +1 -1
  15. package/dist/data/diagnostics/stacktrace-parse.cjs +19 -5
  16. package/dist/data/diagnostics/stacktrace-parse.cjs.map +1 -1
  17. package/dist/data/diagnostics/stacktrace-parse.d.ts.map +1 -1
  18. package/dist/data/diagnostics/stacktrace-parse.js +19 -5
  19. package/dist/data/diagnostics/stacktrace-parse.js.map +1 -1
  20. package/dist/data/diagnostics/stacktrace.cjs +15 -2
  21. package/dist/data/diagnostics/stacktrace.cjs.map +1 -1
  22. package/dist/data/diagnostics/stacktrace.js +15 -2
  23. package/dist/data/diagnostics/stacktrace.js.map +1 -1
  24. package/dist/data/test-runner/routePath.cjs +3 -1
  25. package/dist/data/test-runner/routePath.cjs.map +1 -1
  26. package/dist/data/test-runner/routePath.d.ts.map +1 -1
  27. package/dist/data/test-runner/routePath.js +3 -1
  28. package/dist/data/test-runner/routePath.js.map +1 -1
  29. package/dist/data/version-info.cjs +3 -3
  30. package/dist/data/version-info.js +3 -3
  31. package/dist/lib/string.cjs +15 -0
  32. package/dist/lib/string.cjs.map +1 -0
  33. package/dist/lib/string.d.ts +3 -0
  34. package/dist/lib/string.d.ts.map +1 -0
  35. package/dist/lib/string.js +15 -0
  36. package/dist/lib/string.js.map +1 -0
  37. package/dist/rpc/OperationActionDialog.cjs +4 -10
  38. package/dist/rpc/OperationActionDialog.cjs.map +1 -1
  39. package/dist/rpc/OperationActionDialog.d.ts.map +1 -1
  40. package/dist/rpc/OperationActionDialog.js +2 -8
  41. package/dist/rpc/OperationActionDialog.js.map +1 -1
  42. package/dist/rpc/OperationCommandPage.cjs +3 -2
  43. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  44. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  45. package/dist/rpc/OperationCommandPage.js +3 -2
  46. package/dist/rpc/OperationCommandPage.js.map +1 -1
  47. package/dist/rpc/apiClient.cjs +2 -1
  48. package/dist/rpc/apiClient.cjs.map +1 -1
  49. package/dist/rpc/apiClient.d.ts.map +1 -1
  50. package/dist/rpc/apiClient.js +2 -1
  51. package/dist/rpc/apiClient.js.map +1 -1
  52. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"apiClient.cjs","sources":["../../src/rpc/apiClient.ts"],"sourcesContent":["import type { JsonSchemaObject } from \"../components/json-schema-form-types\";\nimport type {\n ExecutionPagination,\n ExecutionResponse,\n OpenAPISpec,\n OperationLookupFilter,\n OperationLookupResponse,\n} from \"./types\";\nimport type { OperationsApiClient } from \"./useOperations\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type OperationApiClientContext = {\n path: string;\n method: string;\n};\n\nexport type OperationDefaultParams = (context: {\n path: string;\n method: string;\n params: Record<string, string>;\n}) => MaybePromise<Record<string, string>>;\n\nexport type OperationHeadersProvider = (\n headers: Headers,\n context: OperationApiClientContext,\n) => MaybePromise<HeadersInit | void>;\n\nexport type CreateOperationsApiClientOptions = {\n baseUrl?: string;\n openApiPath?: string;\n credentials?: RequestCredentials;\n fetch?: typeof fetch;\n prepareHeaders?: OperationHeadersProvider;\n defaultParams?: OperationDefaultParams;\n};\n\nexport class OperationsApiClientError extends Error {\n status: number | undefined;\n method: string | undefined;\n url: string | undefined;\n responseBody: string | undefined;\n responseData: unknown;\n responseHeaders: Record<string, string> | undefined;\n\n constructor(\n message: string,\n options: {\n status?: number;\n method?: string;\n url?: string;\n responseBody?: string;\n responseData?: unknown;\n responseHeaders?: Record<string, string>;\n } = {},\n ) {\n super(message);\n this.name = \"OperationsApiClientError\";\n this.status = options.status;\n this.method = options.method;\n this.url = options.url;\n this.responseBody = options.responseBody;\n this.responseData = options.responseData;\n this.responseHeaders = options.responseHeaders;\n }\n}\n\nexport interface SharedOperationsApiClient extends OperationsApiClient {\n lookupFilterOptions(\n path: string,\n method: string,\n filterKey: string,\n query: string,\n extraParams?: Record<string, string>,\n ): Promise<OperationLookupFilter>;\n executeCommandBody(\n path: string,\n body: Record<string, unknown>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n getSchema(path: string): Promise<JsonSchemaObject | undefined>;\n submitForm(\n path: string,\n method: string,\n body: Record<string, unknown>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n}\n\nexport function createOperationsApiClient(\n options: CreateOperationsApiClientOptions = {},\n): SharedOperationsApiClient {\n const fetcher = options.fetch ?? fetch;\n const openApiPath = options.openApiPath ?? \"/api/openapi.json\";\n\n async function makeHeaders(\n base: HeadersInit | undefined,\n context: OperationApiClientContext,\n ): Promise<Headers> {\n const headers = new Headers(base);\n const prepared = await options.prepareHeaders?.(headers, context);\n return prepared ? new Headers(prepared) : headers;\n }\n\n async function request(\n path: string,\n method: string,\n init: Omit<RequestInit, \"method\" | \"headers\" | \"credentials\"> & {\n headers?: HeadersInit;\n requestUrl?: string;\n } = {},\n ): Promise<Response> {\n const url = joinUrl(options.baseUrl, path);\n const headers = await makeHeaders(init.headers, { path, method });\n return fetcher(url, {\n ...init,\n method,\n headers,\n ...(options.credentials ? { credentials: options.credentials } : {}),\n });\n }\n\n async function getOpenAPISpec(): Promise<OpenAPISpec> {\n const response = await request(openApiPath, \"GET\", {\n headers: { Accept: \"application/json\" },\n });\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) {\n throw errorFromResponse(response, \"GET\", openApiPath, parsed);\n }\n return parsed.data as OpenAPISpec;\n }\n\n async function withDefaults(path: string, method: string, params: Record<string, string>) {\n return (await options.defaultParams?.({ path, method, params })) ?? params;\n }\n\n return {\n getOpenAPISpec,\n\n async executeCommand(path, method, params, headers) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, params);\n const scoped = await withDefaults(resolved.path, upper, resolved.params);\n const accept = headerValue(headers, \"Accept\");\n\n if (upper === \"GET\") {\n const requestUrl = appendQuery(resolved.path, scoped);\n const response = await request(requestUrl, upper, {\n ...(headers ? { headers } : {}),\n requestUrl,\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: upper,\n requestUrl,\n });\n }\n\n const response = await request(resolved.path, upper, {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(scoped),\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: upper,\n requestUrl: resolved.path,\n });\n },\n\n async executeCommandBody(path, body, headers) {\n const accept = headerValue(headers, \"Accept\");\n const response = await request(path, \"POST\", {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(body),\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: \"POST\",\n requestUrl: path,\n });\n },\n\n // getSchema fetches a resource's JSON Schema via content negotiation\n // (Accept: application/schema+json on the same endpoint). It returns\n // undefined when the resource serves no schema (the request falls through to\n // its data representation), so callers can fall back to a parameter form.\n async getSchema(path) {\n const response = await request(path, \"GET\", {\n headers: { Accept: \"application/schema+json\" },\n });\n if (!response.ok) return undefined;\n const contentType = response.headers.get(\"Content-Type\") || \"\";\n if (!contentType.toLowerCase().includes(\"schema\")) return undefined;\n const parsed = await readResponseBody(response, \"json\");\n const data = parsed.data;\n return data && typeof data === \"object\" ? (data as JsonSchemaObject) : undefined;\n },\n\n // submitForm sends a nested JSON body with the given HTTP method (POST to\n // create, PUT to update). Unlike executeCommand it preserves nested objects\n // and arrays — the server reads the raw body (clicky's RequestFromContext),\n // so connection `properties` and profile `provider`/`params`/`columns`\n // survive intact.\n async submitForm(path, method, body, headers) {\n const upper = method.toUpperCase();\n const response = await request(path, upper, {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(body),\n });\n return parseExecutionResponse(response, await readResponseBody(response, \"json\"), {\n method: upper,\n requestUrl: path,\n });\n },\n\n async lookupFilters(path, method, params, headers) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, params);\n\n if (upper === \"GET\") {\n const requestUrl = appendQuery(resolved.path, { ...resolved.params, __lookup: \"filters\" });\n const response = await request(requestUrl, \"GET\", {\n headers: { Accept: \"application/json+clicky\", ...headers },\n });\n if (response.status === 404) return { filters: {} };\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, \"GET\", requestUrl, parsed);\n return (parsed.data as OperationLookupResponse | undefined) ?? { filters: {} };\n }\n\n const response = await request(appendQuery(resolved.path, { __lookup: \"filters\" }), upper, {\n headers: {\n Accept: \"application/json+clicky\",\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(resolved.params),\n });\n if (response.status === 404) return { filters: {} };\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, upper, resolved.path, parsed);\n return (parsed.data as OperationLookupResponse | undefined) ?? { filters: {} };\n },\n\n async lookupFilterOptions(path, method, filterKey, query, extraParams) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, {});\n const queryParams = {\n ...extraParams,\n __lookup: \"filters\",\n __lookup_filter: filterKey,\n __lookup_q: query,\n };\n\n const requestPath = appendQuery(resolved.path, queryParams);\n const response = await request(requestPath, upper, {\n headers: { Accept: \"application/json+clicky\" },\n });\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, upper, requestPath, parsed);\n return ((parsed.data as OperationLookupResponse | undefined)?.filters?.[filterKey] ??\n {}) as OperationLookupFilter;\n },\n };\n}\n\nfunction responseKind(accept?: string): \"json\" | \"text\" | \"blob\" {\n if (!accept) return \"json\";\n const normalized = accept.toLowerCase();\n if (normalized.includes(\"application/pdf\")) return \"blob\";\n if (\n normalized.includes(\"text/\") ||\n normalized.includes(\"application/x-yaml\") ||\n normalized.includes(\"application/yaml\")\n ) {\n return \"text\";\n }\n return \"json\";\n}\n\ntype ParsedBody = {\n data: unknown;\n text: string;\n blob?: Blob;\n contentType: string;\n};\n\nasync function readResponseBody(response: Response, kind: \"json\" | \"text\" | \"blob\"): Promise<ParsedBody> {\n const contentType = response.headers.get(\"Content-Type\") || \"\";\n if (kind === \"blob\") {\n const blob = await response.blob();\n return { data: undefined, text: \"[binary]\", blob, contentType };\n }\n\n const text = await response.text();\n if (kind === \"text\" || !shouldParseJson(text, contentType)) {\n return { data: text, text, contentType };\n }\n\n try {\n return { data: JSON.parse(text) as unknown, text, contentType };\n } catch {\n return { data: text, text, contentType };\n }\n}\n\nfunction parseExecutionResponse(\n response: Response,\n parsed: ParsedBody,\n context: { method: string; requestUrl: string },\n): ExecutionResponse {\n const headers = responseHeaders(response.headers);\n const data = parsed.data;\n const stdout =\n parsed.blob != null\n ? \"[binary]\"\n : typeof data === \"string\"\n ? data\n : parsed.text || JSON.stringify(data, null, 2);\n const clickyEnvelope = isClickyEnvelope(data);\n\n if (!response.ok && !clickyEnvelope) {\n throw errorFromResponse(response, context.method, context.requestUrl, parsed);\n }\n\n const clickyError = errorFromClickyEnvelope(data);\n const successHeader = headers[\"x-execution-success\"];\n const success = successHeader == null ? response.ok && !clickyError : successHeader !== \"false\";\n const exitCode = parseInt(headers[\"x-exit-code\"] ?? (success ? \"0\" : \"1\"), 10);\n const cli = headers[\"x-cli-command\"];\n const error = headers[\"x-error\"] || clickyError;\n const pagination = paginationFromHeaders(headers);\n\n return {\n success,\n stdout,\n output: stdout,\n exit_code: Number.isFinite(exitCode) ? exitCode : success ? 0 : 1,\n contentType: parsed.contentType || headers[\"content-type\"] || \"application/json\",\n requestUrl: context.requestUrl,\n responseHeaders: headers,\n ...(pagination ? { pagination } : {}),\n ...(cli ? { cli } : {}),\n ...(error ? { error } : {}),\n ...(parsed.blob ? { blob: parsed.blob } : {}),\n ...(parsed.blob == null && typeof data !== \"string\" ? { parsed: data } : {}),\n };\n}\n\nfunction errorFromResponse(\n response: Response,\n method: string,\n url: string,\n parsed: ParsedBody,\n): OperationsApiClientError {\n const headers = responseHeaders(response.headers);\n const message =\n headers[\"x-error\"] ||\n messageFromBody(parsed.data) ||\n `${method} ${url} failed with ${response.status}: ${\n parsed.text || response.statusText\n }`;\n return new OperationsApiClientError(message, {\n status: response.status,\n method,\n url,\n responseBody: parsed.text,\n responseData: parsed.data,\n responseHeaders: headers,\n });\n}\n\nfunction resolvePathParams(\n path: string,\n params: Record<string, string>,\n): { path: string; params: Record<string, string> } {\n const queryParams = { ...params };\n let resolvedPath = path;\n const placeholders = [...path.matchAll(/\\{([^{}]+)\\}/g)]\n .map((match) => match[1])\n .filter((name): name is string => Boolean(name));\n const argValues = parseArgsParam(params.args);\n let consumedArgs = false;\n const consumedDirectValues: string[] = [];\n\n for (const [index, name] of placeholders.entries()) {\n const directValue = queryParams[name];\n const fallbackValue = directValue || argValues[index];\n if (!fallbackValue) continue;\n\n resolvedPath = resolvedPath.replace(`{${name}}`, encodeURIComponent(fallbackValue));\n delete queryParams[name];\n if (!directValue && argValues[index]) consumedArgs = true;\n if (directValue) consumedDirectValues[index] = directValue;\n }\n\n const argsDuplicateResolvedPath =\n argValues.length > 0 &&\n argValues.length === consumedDirectValues.filter(Boolean).length &&\n argValues.every((value, index) => value === consumedDirectValues[index]);\n\n if (consumedArgs || argsDuplicateResolvedPath) {\n delete queryParams.args;\n }\n\n return { path: resolvedPath, params: stripRunnerParams(queryParams) };\n}\n\nfunction parseArgsParam(value: string | undefined): string[] {\n if (!value) return [];\n const trimmed = value.trim();\n if (!trimmed || trimmed === \"[]\" || trimmed.toLowerCase() === \"null\") return [];\n try {\n const parsed = JSON.parse(trimmed);\n if (Array.isArray(parsed)) return parsed.map(String).filter(Boolean);\n } catch {\n // Fall back to comma-delimited args below.\n }\n return trimmed\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction stripRunnerParams(params: Record<string, string>) {\n const next = { ...params };\n delete next.autoRun;\n delete next.__autoRun;\n return next;\n}\n\nfunction appendQuery(path: string, params: Record<string, string>) {\n const query = new URLSearchParams(pruneParams(params)).toString();\n if (!query) return path;\n return `${path}${path.includes(\"?\") ? \"&\" : \"?\"}${query}`;\n}\n\nfunction pruneParams(params: Record<string, string>) {\n return Object.fromEntries(Object.entries(params).filter(([, value]) => value !== \"\"));\n}\n\nfunction joinUrl(baseUrl: string | undefined, path: string) {\n if (!baseUrl || /^https?:\\/\\//i.test(path)) return path;\n return `${baseUrl.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n}\n\nfunction headerValue(headers: Record<string, string> | undefined, name: string) {\n const wanted = name.toLowerCase();\n for (const [key, value] of Object.entries(headers ?? {})) {\n if (key.toLowerCase() === wanted) return value;\n }\n return undefined;\n}\n\nfunction responseHeaders(headers: Headers): Record<string, string> {\n const out: Record<string, string> = {};\n headers.forEach((value, key) => {\n out[key.toLowerCase()] = value;\n });\n return out;\n}\n\nfunction paginationFromHeaders(headers: Record<string, string>): ExecutionPagination | undefined {\n const pagination: ExecutionPagination = {};\n const total = integerHeader(headers[\"x-total-count\"]);\n const limit = integerHeader(headers[\"x-page-limit\"]);\n const offset = integerHeader(headers[\"x-page-offset\"]);\n\n if (total !== undefined) pagination.total = total;\n if (limit !== undefined) pagination.limit = limit;\n if (offset !== undefined) pagination.offset = offset;\n\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n\nfunction integerHeader(value: string | undefined): number | undefined {\n if (value == null || value.trim() === \"\") return undefined;\n const parsed = parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction shouldParseJson(text: string, contentType: string) {\n const trimmed = text.trim();\n return (\n trimmed !== \"\" &&\n (contentType.toLowerCase().includes(\"json\") ||\n trimmed.startsWith(\"{\") ||\n trimmed.startsWith(\"[\"))\n );\n}\n\nfunction isClickyEnvelope(data: unknown): boolean {\n if (!data || typeof data !== \"object\") return false;\n const body = data as Record<string, unknown>;\n return body.version != null && body.node != null && typeof body.node === \"object\";\n}\n\nfunction readClickyText(node: unknown): string | undefined {\n if (!node || typeof node !== \"object\") return undefined;\n const n = node as Record<string, unknown>;\n if (typeof n.plain === \"string\" && n.plain !== \"\") return n.plain;\n if (typeof n.text === \"string\" && n.text !== \"\") return n.text;\n if (Array.isArray(n.children)) {\n for (const child of n.children) {\n const text = readClickyText(child);\n if (text) return text;\n }\n }\n return undefined;\n}\n\nfunction errorFromClickyEnvelope(data: unknown): string | undefined {\n if (!data || typeof data !== \"object\") return undefined;\n const node = (data as Record<string, unknown>).node;\n if (!node || typeof node !== \"object\") return undefined;\n const n = node as Record<string, unknown>;\n if (n.kind !== \"map\" || !Array.isArray(n.fields)) return undefined;\n\n let errorText: string | undefined;\n let failed = false;\n for (const field of n.fields) {\n if (!field || typeof field !== \"object\") continue;\n const f = field as Record<string, unknown>;\n if (f.name === \"Error\") errorText = readClickyText(f.value);\n if (f.name === \"Success\" && readClickyText(f.value) === \"false\") failed = true;\n }\n return failed ? errorText : undefined;\n}\n\nfunction messageFromBody(data: unknown): string | undefined {\n if (!data || typeof data !== \"object\") return undefined;\n const body = data as Record<string, unknown>;\n if (typeof body.error === \"string\" && body.error) return body.error;\n if (typeof body.message === \"string\" && body.message) return body.message;\n return errorFromClickyEnvelope(data);\n}\n"],"names":["response","parsed"],"mappings":"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"}
1
+ {"version":3,"file":"apiClient.cjs","sources":["../../src/rpc/apiClient.ts"],"sourcesContent":["import type { JsonSchemaObject } from \"../components/json-schema-form-types\";\nimport { stripLeadingSlashes, stripTrailingSlashes } from \"../lib/string\";\nimport type {\n ExecutionPagination,\n ExecutionResponse,\n OpenAPISpec,\n OperationLookupFilter,\n OperationLookupResponse,\n} from \"./types\";\nimport type { OperationsApiClient } from \"./useOperations\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type OperationApiClientContext = {\n path: string;\n method: string;\n};\n\nexport type OperationDefaultParams = (context: {\n path: string;\n method: string;\n params: Record<string, string>;\n}) => MaybePromise<Record<string, string>>;\n\nexport type OperationHeadersProvider = (\n headers: Headers,\n context: OperationApiClientContext,\n) => MaybePromise<HeadersInit | void>;\n\nexport type CreateOperationsApiClientOptions = {\n baseUrl?: string;\n openApiPath?: string;\n credentials?: RequestCredentials;\n fetch?: typeof fetch;\n prepareHeaders?: OperationHeadersProvider;\n defaultParams?: OperationDefaultParams;\n};\n\nexport class OperationsApiClientError extends Error {\n status: number | undefined;\n method: string | undefined;\n url: string | undefined;\n responseBody: string | undefined;\n responseData: unknown;\n responseHeaders: Record<string, string> | undefined;\n\n constructor(\n message: string,\n options: {\n status?: number;\n method?: string;\n url?: string;\n responseBody?: string;\n responseData?: unknown;\n responseHeaders?: Record<string, string>;\n } = {},\n ) {\n super(message);\n this.name = \"OperationsApiClientError\";\n this.status = options.status;\n this.method = options.method;\n this.url = options.url;\n this.responseBody = options.responseBody;\n this.responseData = options.responseData;\n this.responseHeaders = options.responseHeaders;\n }\n}\n\nexport interface SharedOperationsApiClient extends OperationsApiClient {\n lookupFilterOptions(\n path: string,\n method: string,\n filterKey: string,\n query: string,\n extraParams?: Record<string, string>,\n ): Promise<OperationLookupFilter>;\n executeCommandBody(\n path: string,\n body: Record<string, unknown>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n getSchema(path: string): Promise<JsonSchemaObject | undefined>;\n submitForm(\n path: string,\n method: string,\n body: Record<string, unknown>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n}\n\nexport function createOperationsApiClient(\n options: CreateOperationsApiClientOptions = {},\n): SharedOperationsApiClient {\n const fetcher = options.fetch ?? fetch;\n const openApiPath = options.openApiPath ?? \"/api/openapi.json\";\n\n async function makeHeaders(\n base: HeadersInit | undefined,\n context: OperationApiClientContext,\n ): Promise<Headers> {\n const headers = new Headers(base);\n const prepared = await options.prepareHeaders?.(headers, context);\n return prepared ? new Headers(prepared) : headers;\n }\n\n async function request(\n path: string,\n method: string,\n init: Omit<RequestInit, \"method\" | \"headers\" | \"credentials\"> & {\n headers?: HeadersInit;\n requestUrl?: string;\n } = {},\n ): Promise<Response> {\n const url = joinUrl(options.baseUrl, path);\n const headers = await makeHeaders(init.headers, { path, method });\n return fetcher(url, {\n ...init,\n method,\n headers,\n ...(options.credentials ? { credentials: options.credentials } : {}),\n });\n }\n\n async function getOpenAPISpec(): Promise<OpenAPISpec> {\n const response = await request(openApiPath, \"GET\", {\n headers: { Accept: \"application/json\" },\n });\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) {\n throw errorFromResponse(response, \"GET\", openApiPath, parsed);\n }\n return parsed.data as OpenAPISpec;\n }\n\n async function withDefaults(path: string, method: string, params: Record<string, string>) {\n return (await options.defaultParams?.({ path, method, params })) ?? params;\n }\n\n return {\n getOpenAPISpec,\n\n async executeCommand(path, method, params, headers) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, params);\n const scoped = await withDefaults(resolved.path, upper, resolved.params);\n const accept = headerValue(headers, \"Accept\");\n\n if (upper === \"GET\") {\n const requestUrl = appendQuery(resolved.path, scoped);\n const response = await request(requestUrl, upper, {\n ...(headers ? { headers } : {}),\n requestUrl,\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: upper,\n requestUrl,\n });\n }\n\n const response = await request(resolved.path, upper, {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(scoped),\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: upper,\n requestUrl: resolved.path,\n });\n },\n\n async executeCommandBody(path, body, headers) {\n const accept = headerValue(headers, \"Accept\");\n const response = await request(path, \"POST\", {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(body),\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: \"POST\",\n requestUrl: path,\n });\n },\n\n // getSchema fetches a resource's JSON Schema via content negotiation\n // (Accept: application/schema+json on the same endpoint). It returns\n // undefined when the resource serves no schema (the request falls through to\n // its data representation), so callers can fall back to a parameter form.\n async getSchema(path) {\n const response = await request(path, \"GET\", {\n headers: { Accept: \"application/schema+json\" },\n });\n if (!response.ok) return undefined;\n const contentType = response.headers.get(\"Content-Type\") || \"\";\n if (!contentType.toLowerCase().includes(\"schema\")) return undefined;\n const parsed = await readResponseBody(response, \"json\");\n const data = parsed.data;\n return data && typeof data === \"object\" ? (data as JsonSchemaObject) : undefined;\n },\n\n // submitForm sends a nested JSON body with the given HTTP method (POST to\n // create, PUT to update). Unlike executeCommand it preserves nested objects\n // and arrays — the server reads the raw body (clicky's RequestFromContext),\n // so connection `properties` and profile `provider`/`params`/`columns`\n // survive intact.\n async submitForm(path, method, body, headers) {\n const upper = method.toUpperCase();\n const response = await request(path, upper, {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(body),\n });\n return parseExecutionResponse(response, await readResponseBody(response, \"json\"), {\n method: upper,\n requestUrl: path,\n });\n },\n\n async lookupFilters(path, method, params, headers) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, params);\n\n if (upper === \"GET\") {\n const requestUrl = appendQuery(resolved.path, { ...resolved.params, __lookup: \"filters\" });\n const response = await request(requestUrl, \"GET\", {\n headers: { Accept: \"application/json+clicky\", ...headers },\n });\n if (response.status === 404) return { filters: {} };\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, \"GET\", requestUrl, parsed);\n return (parsed.data as OperationLookupResponse | undefined) ?? { filters: {} };\n }\n\n const response = await request(appendQuery(resolved.path, { __lookup: \"filters\" }), upper, {\n headers: {\n Accept: \"application/json+clicky\",\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(resolved.params),\n });\n if (response.status === 404) return { filters: {} };\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, upper, resolved.path, parsed);\n return (parsed.data as OperationLookupResponse | undefined) ?? { filters: {} };\n },\n\n async lookupFilterOptions(path, method, filterKey, query, extraParams) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, {});\n const queryParams = {\n ...extraParams,\n __lookup: \"filters\",\n __lookup_filter: filterKey,\n __lookup_q: query,\n };\n\n const requestPath = appendQuery(resolved.path, queryParams);\n const response = await request(requestPath, upper, {\n headers: { Accept: \"application/json+clicky\" },\n });\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, upper, requestPath, parsed);\n return ((parsed.data as OperationLookupResponse | undefined)?.filters?.[filterKey] ??\n {}) as OperationLookupFilter;\n },\n };\n}\n\nfunction responseKind(accept?: string): \"json\" | \"text\" | \"blob\" {\n if (!accept) return \"json\";\n const normalized = accept.toLowerCase();\n if (normalized.includes(\"application/pdf\")) return \"blob\";\n if (\n normalized.includes(\"text/\") ||\n normalized.includes(\"application/x-yaml\") ||\n normalized.includes(\"application/yaml\")\n ) {\n return \"text\";\n }\n return \"json\";\n}\n\ntype ParsedBody = {\n data: unknown;\n text: string;\n blob?: Blob;\n contentType: string;\n};\n\nasync function readResponseBody(response: Response, kind: \"json\" | \"text\" | \"blob\"): Promise<ParsedBody> {\n const contentType = response.headers.get(\"Content-Type\") || \"\";\n if (kind === \"blob\") {\n const blob = await response.blob();\n return { data: undefined, text: \"[binary]\", blob, contentType };\n }\n\n const text = await response.text();\n if (kind === \"text\" || !shouldParseJson(text, contentType)) {\n return { data: text, text, contentType };\n }\n\n try {\n return { data: JSON.parse(text) as unknown, text, contentType };\n } catch {\n return { data: text, text, contentType };\n }\n}\n\nfunction parseExecutionResponse(\n response: Response,\n parsed: ParsedBody,\n context: { method: string; requestUrl: string },\n): ExecutionResponse {\n const headers = responseHeaders(response.headers);\n const data = parsed.data;\n const stdout =\n parsed.blob != null\n ? \"[binary]\"\n : typeof data === \"string\"\n ? data\n : parsed.text || JSON.stringify(data, null, 2);\n const clickyEnvelope = isClickyEnvelope(data);\n\n if (!response.ok && !clickyEnvelope) {\n throw errorFromResponse(response, context.method, context.requestUrl, parsed);\n }\n\n const clickyError = errorFromClickyEnvelope(data);\n const successHeader = headers[\"x-execution-success\"];\n const success = successHeader == null ? response.ok && !clickyError : successHeader !== \"false\";\n const exitCode = parseInt(headers[\"x-exit-code\"] ?? (success ? \"0\" : \"1\"), 10);\n const cli = headers[\"x-cli-command\"];\n const error = headers[\"x-error\"] || clickyError;\n const pagination = paginationFromHeaders(headers);\n\n return {\n success,\n stdout,\n output: stdout,\n exit_code: Number.isFinite(exitCode) ? exitCode : success ? 0 : 1,\n contentType: parsed.contentType || headers[\"content-type\"] || \"application/json\",\n requestUrl: context.requestUrl,\n responseHeaders: headers,\n ...(pagination ? { pagination } : {}),\n ...(cli ? { cli } : {}),\n ...(error ? { error } : {}),\n ...(parsed.blob ? { blob: parsed.blob } : {}),\n ...(parsed.blob == null && typeof data !== \"string\" ? { parsed: data } : {}),\n };\n}\n\nfunction errorFromResponse(\n response: Response,\n method: string,\n url: string,\n parsed: ParsedBody,\n): OperationsApiClientError {\n const headers = responseHeaders(response.headers);\n const message =\n headers[\"x-error\"] ||\n messageFromBody(parsed.data) ||\n `${method} ${url} failed with ${response.status}: ${\n parsed.text || response.statusText\n }`;\n return new OperationsApiClientError(message, {\n status: response.status,\n method,\n url,\n responseBody: parsed.text,\n responseData: parsed.data,\n responseHeaders: headers,\n });\n}\n\nfunction resolvePathParams(\n path: string,\n params: Record<string, string>,\n): { path: string; params: Record<string, string> } {\n const queryParams = { ...params };\n let resolvedPath = path;\n const placeholders = [...path.matchAll(/\\{([^{}]+)\\}/g)]\n .map((match) => match[1])\n .filter((name): name is string => Boolean(name));\n const argValues = parseArgsParam(params.args);\n let consumedArgs = false;\n const consumedDirectValues: string[] = [];\n\n for (const [index, name] of placeholders.entries()) {\n const directValue = queryParams[name];\n const fallbackValue = directValue || argValues[index];\n if (!fallbackValue) continue;\n\n resolvedPath = resolvedPath.replace(`{${name}}`, encodeURIComponent(fallbackValue));\n delete queryParams[name];\n if (!directValue && argValues[index]) consumedArgs = true;\n if (directValue) consumedDirectValues[index] = directValue;\n }\n\n const argsDuplicateResolvedPath =\n argValues.length > 0 &&\n argValues.length === consumedDirectValues.filter(Boolean).length &&\n argValues.every((value, index) => value === consumedDirectValues[index]);\n\n if (consumedArgs || argsDuplicateResolvedPath) {\n delete queryParams.args;\n }\n\n return { path: resolvedPath, params: stripRunnerParams(queryParams) };\n}\n\nfunction parseArgsParam(value: string | undefined): string[] {\n if (!value) return [];\n const trimmed = value.trim();\n if (!trimmed || trimmed === \"[]\" || trimmed.toLowerCase() === \"null\") return [];\n try {\n const parsed = JSON.parse(trimmed);\n if (Array.isArray(parsed)) return parsed.map(String).filter(Boolean);\n } catch {\n // Fall back to comma-delimited args below.\n }\n return trimmed\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction stripRunnerParams(params: Record<string, string>) {\n const next = { ...params };\n delete next.autoRun;\n delete next.__autoRun;\n return next;\n}\n\nfunction appendQuery(path: string, params: Record<string, string>) {\n const query = new URLSearchParams(pruneParams(params)).toString();\n if (!query) return path;\n return `${path}${path.includes(\"?\") ? \"&\" : \"?\"}${query}`;\n}\n\nfunction pruneParams(params: Record<string, string>) {\n return Object.fromEntries(Object.entries(params).filter(([, value]) => value !== \"\"));\n}\n\nfunction joinUrl(baseUrl: string | undefined, path: string) {\n if (!baseUrl || /^https?:\\/\\//i.test(path)) return path;\n return `${stripTrailingSlashes(baseUrl)}/${stripLeadingSlashes(path)}`;\n}\n\nfunction headerValue(headers: Record<string, string> | undefined, name: string) {\n const wanted = name.toLowerCase();\n for (const [key, value] of Object.entries(headers ?? {})) {\n if (key.toLowerCase() === wanted) return value;\n }\n return undefined;\n}\n\nfunction responseHeaders(headers: Headers): Record<string, string> {\n const out: Record<string, string> = {};\n headers.forEach((value, key) => {\n out[key.toLowerCase()] = value;\n });\n return out;\n}\n\nfunction paginationFromHeaders(headers: Record<string, string>): ExecutionPagination | undefined {\n const pagination: ExecutionPagination = {};\n const total = integerHeader(headers[\"x-total-count\"]);\n const limit = integerHeader(headers[\"x-page-limit\"]);\n const offset = integerHeader(headers[\"x-page-offset\"]);\n\n if (total !== undefined) pagination.total = total;\n if (limit !== undefined) pagination.limit = limit;\n if (offset !== undefined) pagination.offset = offset;\n\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n\nfunction integerHeader(value: string | undefined): number | undefined {\n if (value == null || value.trim() === \"\") return undefined;\n const parsed = parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction shouldParseJson(text: string, contentType: string) {\n const trimmed = text.trim();\n return (\n trimmed !== \"\" &&\n (contentType.toLowerCase().includes(\"json\") ||\n trimmed.startsWith(\"{\") ||\n trimmed.startsWith(\"[\"))\n );\n}\n\nfunction isClickyEnvelope(data: unknown): boolean {\n if (!data || typeof data !== \"object\") return false;\n const body = data as Record<string, unknown>;\n return body.version != null && body.node != null && typeof body.node === \"object\";\n}\n\nfunction readClickyText(node: unknown): string | undefined {\n if (!node || typeof node !== \"object\") return undefined;\n const n = node as Record<string, unknown>;\n if (typeof n.plain === \"string\" && n.plain !== \"\") return n.plain;\n if (typeof n.text === \"string\" && n.text !== \"\") return n.text;\n if (Array.isArray(n.children)) {\n for (const child of n.children) {\n const text = readClickyText(child);\n if (text) return text;\n }\n }\n return undefined;\n}\n\nfunction errorFromClickyEnvelope(data: unknown): string | undefined {\n if (!data || typeof data !== \"object\") return undefined;\n const node = (data as Record<string, unknown>).node;\n if (!node || typeof node !== \"object\") return undefined;\n const n = node as Record<string, unknown>;\n if (n.kind !== \"map\" || !Array.isArray(n.fields)) return undefined;\n\n let errorText: string | undefined;\n let failed = false;\n for (const field of n.fields) {\n if (!field || typeof field !== \"object\") continue;\n const f = field as Record<string, unknown>;\n if (f.name === \"Error\") errorText = readClickyText(f.value);\n if (f.name === \"Success\" && readClickyText(f.value) === \"false\") failed = true;\n }\n return failed ? errorText : undefined;\n}\n\nfunction messageFromBody(data: unknown): string | undefined {\n if (!data || typeof data !== \"object\") return undefined;\n const body = data as Record<string, unknown>;\n if (typeof body.error === \"string\" && body.error) return body.error;\n if (typeof body.message === \"string\" && body.message) return body.message;\n return errorFromClickyEnvelope(data);\n}\n"],"names":["response","parsed","stripTrailingSlashes","stripLeadingSlashes"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../src/rpc/apiClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../src/rpc/apiClient.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ import { stripTrailingSlashes, stripLeadingSlashes } from "../lib/string.js";
4
5
  class OperationsApiClientError extends Error {
5
6
  constructor(message, options = {}) {
6
7
  super(message);
@@ -283,7 +284,7 @@ function pruneParams(params) {
283
284
  }
284
285
  function joinUrl(baseUrl, path) {
285
286
  if (!baseUrl || /^https?:\/\//i.test(path)) return path;
286
- return `${baseUrl.replace(/\/+$/, "")}/${path.replace(/^\/+/, "")}`;
287
+ return `${stripTrailingSlashes(baseUrl)}/${stripLeadingSlashes(path)}`;
287
288
  }
288
289
  function headerValue(headers, name) {
289
290
  const wanted = name.toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"apiClient.js","sources":["../../src/rpc/apiClient.ts"],"sourcesContent":["import type { JsonSchemaObject } from \"../components/json-schema-form-types\";\nimport type {\n ExecutionPagination,\n ExecutionResponse,\n OpenAPISpec,\n OperationLookupFilter,\n OperationLookupResponse,\n} from \"./types\";\nimport type { OperationsApiClient } from \"./useOperations\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type OperationApiClientContext = {\n path: string;\n method: string;\n};\n\nexport type OperationDefaultParams = (context: {\n path: string;\n method: string;\n params: Record<string, string>;\n}) => MaybePromise<Record<string, string>>;\n\nexport type OperationHeadersProvider = (\n headers: Headers,\n context: OperationApiClientContext,\n) => MaybePromise<HeadersInit | void>;\n\nexport type CreateOperationsApiClientOptions = {\n baseUrl?: string;\n openApiPath?: string;\n credentials?: RequestCredentials;\n fetch?: typeof fetch;\n prepareHeaders?: OperationHeadersProvider;\n defaultParams?: OperationDefaultParams;\n};\n\nexport class OperationsApiClientError extends Error {\n status: number | undefined;\n method: string | undefined;\n url: string | undefined;\n responseBody: string | undefined;\n responseData: unknown;\n responseHeaders: Record<string, string> | undefined;\n\n constructor(\n message: string,\n options: {\n status?: number;\n method?: string;\n url?: string;\n responseBody?: string;\n responseData?: unknown;\n responseHeaders?: Record<string, string>;\n } = {},\n ) {\n super(message);\n this.name = \"OperationsApiClientError\";\n this.status = options.status;\n this.method = options.method;\n this.url = options.url;\n this.responseBody = options.responseBody;\n this.responseData = options.responseData;\n this.responseHeaders = options.responseHeaders;\n }\n}\n\nexport interface SharedOperationsApiClient extends OperationsApiClient {\n lookupFilterOptions(\n path: string,\n method: string,\n filterKey: string,\n query: string,\n extraParams?: Record<string, string>,\n ): Promise<OperationLookupFilter>;\n executeCommandBody(\n path: string,\n body: Record<string, unknown>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n getSchema(path: string): Promise<JsonSchemaObject | undefined>;\n submitForm(\n path: string,\n method: string,\n body: Record<string, unknown>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n}\n\nexport function createOperationsApiClient(\n options: CreateOperationsApiClientOptions = {},\n): SharedOperationsApiClient {\n const fetcher = options.fetch ?? fetch;\n const openApiPath = options.openApiPath ?? \"/api/openapi.json\";\n\n async function makeHeaders(\n base: HeadersInit | undefined,\n context: OperationApiClientContext,\n ): Promise<Headers> {\n const headers = new Headers(base);\n const prepared = await options.prepareHeaders?.(headers, context);\n return prepared ? new Headers(prepared) : headers;\n }\n\n async function request(\n path: string,\n method: string,\n init: Omit<RequestInit, \"method\" | \"headers\" | \"credentials\"> & {\n headers?: HeadersInit;\n requestUrl?: string;\n } = {},\n ): Promise<Response> {\n const url = joinUrl(options.baseUrl, path);\n const headers = await makeHeaders(init.headers, { path, method });\n return fetcher(url, {\n ...init,\n method,\n headers,\n ...(options.credentials ? { credentials: options.credentials } : {}),\n });\n }\n\n async function getOpenAPISpec(): Promise<OpenAPISpec> {\n const response = await request(openApiPath, \"GET\", {\n headers: { Accept: \"application/json\" },\n });\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) {\n throw errorFromResponse(response, \"GET\", openApiPath, parsed);\n }\n return parsed.data as OpenAPISpec;\n }\n\n async function withDefaults(path: string, method: string, params: Record<string, string>) {\n return (await options.defaultParams?.({ path, method, params })) ?? params;\n }\n\n return {\n getOpenAPISpec,\n\n async executeCommand(path, method, params, headers) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, params);\n const scoped = await withDefaults(resolved.path, upper, resolved.params);\n const accept = headerValue(headers, \"Accept\");\n\n if (upper === \"GET\") {\n const requestUrl = appendQuery(resolved.path, scoped);\n const response = await request(requestUrl, upper, {\n ...(headers ? { headers } : {}),\n requestUrl,\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: upper,\n requestUrl,\n });\n }\n\n const response = await request(resolved.path, upper, {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(scoped),\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: upper,\n requestUrl: resolved.path,\n });\n },\n\n async executeCommandBody(path, body, headers) {\n const accept = headerValue(headers, \"Accept\");\n const response = await request(path, \"POST\", {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(body),\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: \"POST\",\n requestUrl: path,\n });\n },\n\n // getSchema fetches a resource's JSON Schema via content negotiation\n // (Accept: application/schema+json on the same endpoint). It returns\n // undefined when the resource serves no schema (the request falls through to\n // its data representation), so callers can fall back to a parameter form.\n async getSchema(path) {\n const response = await request(path, \"GET\", {\n headers: { Accept: \"application/schema+json\" },\n });\n if (!response.ok) return undefined;\n const contentType = response.headers.get(\"Content-Type\") || \"\";\n if (!contentType.toLowerCase().includes(\"schema\")) return undefined;\n const parsed = await readResponseBody(response, \"json\");\n const data = parsed.data;\n return data && typeof data === \"object\" ? (data as JsonSchemaObject) : undefined;\n },\n\n // submitForm sends a nested JSON body with the given HTTP method (POST to\n // create, PUT to update). Unlike executeCommand it preserves nested objects\n // and arrays — the server reads the raw body (clicky's RequestFromContext),\n // so connection `properties` and profile `provider`/`params`/`columns`\n // survive intact.\n async submitForm(path, method, body, headers) {\n const upper = method.toUpperCase();\n const response = await request(path, upper, {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(body),\n });\n return parseExecutionResponse(response, await readResponseBody(response, \"json\"), {\n method: upper,\n requestUrl: path,\n });\n },\n\n async lookupFilters(path, method, params, headers) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, params);\n\n if (upper === \"GET\") {\n const requestUrl = appendQuery(resolved.path, { ...resolved.params, __lookup: \"filters\" });\n const response = await request(requestUrl, \"GET\", {\n headers: { Accept: \"application/json+clicky\", ...headers },\n });\n if (response.status === 404) return { filters: {} };\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, \"GET\", requestUrl, parsed);\n return (parsed.data as OperationLookupResponse | undefined) ?? { filters: {} };\n }\n\n const response = await request(appendQuery(resolved.path, { __lookup: \"filters\" }), upper, {\n headers: {\n Accept: \"application/json+clicky\",\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(resolved.params),\n });\n if (response.status === 404) return { filters: {} };\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, upper, resolved.path, parsed);\n return (parsed.data as OperationLookupResponse | undefined) ?? { filters: {} };\n },\n\n async lookupFilterOptions(path, method, filterKey, query, extraParams) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, {});\n const queryParams = {\n ...extraParams,\n __lookup: \"filters\",\n __lookup_filter: filterKey,\n __lookup_q: query,\n };\n\n const requestPath = appendQuery(resolved.path, queryParams);\n const response = await request(requestPath, upper, {\n headers: { Accept: \"application/json+clicky\" },\n });\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, upper, requestPath, parsed);\n return ((parsed.data as OperationLookupResponse | undefined)?.filters?.[filterKey] ??\n {}) as OperationLookupFilter;\n },\n };\n}\n\nfunction responseKind(accept?: string): \"json\" | \"text\" | \"blob\" {\n if (!accept) return \"json\";\n const normalized = accept.toLowerCase();\n if (normalized.includes(\"application/pdf\")) return \"blob\";\n if (\n normalized.includes(\"text/\") ||\n normalized.includes(\"application/x-yaml\") ||\n normalized.includes(\"application/yaml\")\n ) {\n return \"text\";\n }\n return \"json\";\n}\n\ntype ParsedBody = {\n data: unknown;\n text: string;\n blob?: Blob;\n contentType: string;\n};\n\nasync function readResponseBody(response: Response, kind: \"json\" | \"text\" | \"blob\"): Promise<ParsedBody> {\n const contentType = response.headers.get(\"Content-Type\") || \"\";\n if (kind === \"blob\") {\n const blob = await response.blob();\n return { data: undefined, text: \"[binary]\", blob, contentType };\n }\n\n const text = await response.text();\n if (kind === \"text\" || !shouldParseJson(text, contentType)) {\n return { data: text, text, contentType };\n }\n\n try {\n return { data: JSON.parse(text) as unknown, text, contentType };\n } catch {\n return { data: text, text, contentType };\n }\n}\n\nfunction parseExecutionResponse(\n response: Response,\n parsed: ParsedBody,\n context: { method: string; requestUrl: string },\n): ExecutionResponse {\n const headers = responseHeaders(response.headers);\n const data = parsed.data;\n const stdout =\n parsed.blob != null\n ? \"[binary]\"\n : typeof data === \"string\"\n ? data\n : parsed.text || JSON.stringify(data, null, 2);\n const clickyEnvelope = isClickyEnvelope(data);\n\n if (!response.ok && !clickyEnvelope) {\n throw errorFromResponse(response, context.method, context.requestUrl, parsed);\n }\n\n const clickyError = errorFromClickyEnvelope(data);\n const successHeader = headers[\"x-execution-success\"];\n const success = successHeader == null ? response.ok && !clickyError : successHeader !== \"false\";\n const exitCode = parseInt(headers[\"x-exit-code\"] ?? (success ? \"0\" : \"1\"), 10);\n const cli = headers[\"x-cli-command\"];\n const error = headers[\"x-error\"] || clickyError;\n const pagination = paginationFromHeaders(headers);\n\n return {\n success,\n stdout,\n output: stdout,\n exit_code: Number.isFinite(exitCode) ? exitCode : success ? 0 : 1,\n contentType: parsed.contentType || headers[\"content-type\"] || \"application/json\",\n requestUrl: context.requestUrl,\n responseHeaders: headers,\n ...(pagination ? { pagination } : {}),\n ...(cli ? { cli } : {}),\n ...(error ? { error } : {}),\n ...(parsed.blob ? { blob: parsed.blob } : {}),\n ...(parsed.blob == null && typeof data !== \"string\" ? { parsed: data } : {}),\n };\n}\n\nfunction errorFromResponse(\n response: Response,\n method: string,\n url: string,\n parsed: ParsedBody,\n): OperationsApiClientError {\n const headers = responseHeaders(response.headers);\n const message =\n headers[\"x-error\"] ||\n messageFromBody(parsed.data) ||\n `${method} ${url} failed with ${response.status}: ${\n parsed.text || response.statusText\n }`;\n return new OperationsApiClientError(message, {\n status: response.status,\n method,\n url,\n responseBody: parsed.text,\n responseData: parsed.data,\n responseHeaders: headers,\n });\n}\n\nfunction resolvePathParams(\n path: string,\n params: Record<string, string>,\n): { path: string; params: Record<string, string> } {\n const queryParams = { ...params };\n let resolvedPath = path;\n const placeholders = [...path.matchAll(/\\{([^{}]+)\\}/g)]\n .map((match) => match[1])\n .filter((name): name is string => Boolean(name));\n const argValues = parseArgsParam(params.args);\n let consumedArgs = false;\n const consumedDirectValues: string[] = [];\n\n for (const [index, name] of placeholders.entries()) {\n const directValue = queryParams[name];\n const fallbackValue = directValue || argValues[index];\n if (!fallbackValue) continue;\n\n resolvedPath = resolvedPath.replace(`{${name}}`, encodeURIComponent(fallbackValue));\n delete queryParams[name];\n if (!directValue && argValues[index]) consumedArgs = true;\n if (directValue) consumedDirectValues[index] = directValue;\n }\n\n const argsDuplicateResolvedPath =\n argValues.length > 0 &&\n argValues.length === consumedDirectValues.filter(Boolean).length &&\n argValues.every((value, index) => value === consumedDirectValues[index]);\n\n if (consumedArgs || argsDuplicateResolvedPath) {\n delete queryParams.args;\n }\n\n return { path: resolvedPath, params: stripRunnerParams(queryParams) };\n}\n\nfunction parseArgsParam(value: string | undefined): string[] {\n if (!value) return [];\n const trimmed = value.trim();\n if (!trimmed || trimmed === \"[]\" || trimmed.toLowerCase() === \"null\") return [];\n try {\n const parsed = JSON.parse(trimmed);\n if (Array.isArray(parsed)) return parsed.map(String).filter(Boolean);\n } catch {\n // Fall back to comma-delimited args below.\n }\n return trimmed\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction stripRunnerParams(params: Record<string, string>) {\n const next = { ...params };\n delete next.autoRun;\n delete next.__autoRun;\n return next;\n}\n\nfunction appendQuery(path: string, params: Record<string, string>) {\n const query = new URLSearchParams(pruneParams(params)).toString();\n if (!query) return path;\n return `${path}${path.includes(\"?\") ? \"&\" : \"?\"}${query}`;\n}\n\nfunction pruneParams(params: Record<string, string>) {\n return Object.fromEntries(Object.entries(params).filter(([, value]) => value !== \"\"));\n}\n\nfunction joinUrl(baseUrl: string | undefined, path: string) {\n if (!baseUrl || /^https?:\\/\\//i.test(path)) return path;\n return `${baseUrl.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n}\n\nfunction headerValue(headers: Record<string, string> | undefined, name: string) {\n const wanted = name.toLowerCase();\n for (const [key, value] of Object.entries(headers ?? {})) {\n if (key.toLowerCase() === wanted) return value;\n }\n return undefined;\n}\n\nfunction responseHeaders(headers: Headers): Record<string, string> {\n const out: Record<string, string> = {};\n headers.forEach((value, key) => {\n out[key.toLowerCase()] = value;\n });\n return out;\n}\n\nfunction paginationFromHeaders(headers: Record<string, string>): ExecutionPagination | undefined {\n const pagination: ExecutionPagination = {};\n const total = integerHeader(headers[\"x-total-count\"]);\n const limit = integerHeader(headers[\"x-page-limit\"]);\n const offset = integerHeader(headers[\"x-page-offset\"]);\n\n if (total !== undefined) pagination.total = total;\n if (limit !== undefined) pagination.limit = limit;\n if (offset !== undefined) pagination.offset = offset;\n\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n\nfunction integerHeader(value: string | undefined): number | undefined {\n if (value == null || value.trim() === \"\") return undefined;\n const parsed = parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction shouldParseJson(text: string, contentType: string) {\n const trimmed = text.trim();\n return (\n trimmed !== \"\" &&\n (contentType.toLowerCase().includes(\"json\") ||\n trimmed.startsWith(\"{\") ||\n trimmed.startsWith(\"[\"))\n );\n}\n\nfunction isClickyEnvelope(data: unknown): boolean {\n if (!data || typeof data !== \"object\") return false;\n const body = data as Record<string, unknown>;\n return body.version != null && body.node != null && typeof body.node === \"object\";\n}\n\nfunction readClickyText(node: unknown): string | undefined {\n if (!node || typeof node !== \"object\") return undefined;\n const n = node as Record<string, unknown>;\n if (typeof n.plain === \"string\" && n.plain !== \"\") return n.plain;\n if (typeof n.text === \"string\" && n.text !== \"\") return n.text;\n if (Array.isArray(n.children)) {\n for (const child of n.children) {\n const text = readClickyText(child);\n if (text) return text;\n }\n }\n return undefined;\n}\n\nfunction errorFromClickyEnvelope(data: unknown): string | undefined {\n if (!data || typeof data !== \"object\") return undefined;\n const node = (data as Record<string, unknown>).node;\n if (!node || typeof node !== \"object\") return undefined;\n const n = node as Record<string, unknown>;\n if (n.kind !== \"map\" || !Array.isArray(n.fields)) return undefined;\n\n let errorText: string | undefined;\n let failed = false;\n for (const field of n.fields) {\n if (!field || typeof field !== \"object\") continue;\n const f = field as Record<string, unknown>;\n if (f.name === \"Error\") errorText = readClickyText(f.value);\n if (f.name === \"Success\" && readClickyText(f.value) === \"false\") failed = true;\n }\n return failed ? errorText : undefined;\n}\n\nfunction messageFromBody(data: unknown): string | undefined {\n if (!data || typeof data !== \"object\") return undefined;\n const body = data as Record<string, unknown>;\n if (typeof body.error === \"string\" && body.error) return body.error;\n if (typeof body.message === \"string\" && body.message) return body.message;\n return errorFromClickyEnvelope(data);\n}\n"],"names":["response","parsed"],"mappings":";;;AAqCO,MAAM,iCAAiC,MAAM;AAAA,EAQlD,YACE,SACA,UAOI,IACJ;AACA,UAAM,OAAO;AAlBf;AACA;AACA;AACA;AACA;AACA;AAcE,SAAK,OAAO;AACZ,SAAK,SAAS,QAAQ;AACtB,SAAK,SAAS,QAAQ;AACtB,SAAK,MAAM,QAAQ;AACnB,SAAK,eAAe,QAAQ;AAC5B,SAAK,eAAe,QAAQ;AAC5B,SAAK,kBAAkB,QAAQ;AAAA,EACjC;AACF;AAwBO,SAAS,0BACd,UAA4C,IACjB;AAC3B,QAAM,UAAU,QAAQ,SAAS;AACjC,QAAM,cAAc,QAAQ,eAAe;AAE3C,iBAAe,YACb,MACA,SACkB;AA7Df;AA8DH,UAAM,UAAU,IAAI,QAAQ,IAAI;AAChC,UAAM,WAAW,QAAM,aAAQ,mBAAR,iCAAyB,SAAS;AACzD,WAAO,WAAW,IAAI,QAAQ,QAAQ,IAAI;AAAA,EAC5C;AAEA,iBAAe,QACb,MACA,QACA,OAGI,CAAA,GACe;AACnB,UAAM,MAAM,QAAQ,QAAQ,SAAS,IAAI;AACzC,UAAM,UAAU,MAAM,YAAY,KAAK,SAAS,EAAE,MAAM,QAAQ;AAChE,WAAO,QAAQ,KAAK;AAAA,MAClB,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA,GAAI,QAAQ,cAAc,EAAE,aAAa,QAAQ,YAAA,IAAgB,CAAA;AAAA,IAAC,CACnE;AAAA,EACH;AAEA,iBAAe,iBAAuC;AACpD,UAAM,WAAW,MAAM,QAAQ,aAAa,OAAO;AAAA,MACjD,SAAS,EAAE,QAAQ,mBAAA;AAAA,IAAmB,CACvC;AACD,UAAM,SAAS,MAAM,iBAAiB,UAAU,MAAM;AACtD,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,kBAAkB,UAAU,OAAO,aAAa,MAAM;AAAA,IAC9D;AACA,WAAO,OAAO;AAAA,EAChB;AAEA,iBAAe,aAAa,MAAc,QAAgB,QAAgC;AAhGrF;AAiGH,WAAQ,QAAM,aAAQ,kBAAR,iCAAwB,EAAE,MAAM,QAAQ,OAAA,OAAc;AAAA,EACtE;AAEA,SAAO;AAAA,IACL;AAAA,IAEA,MAAM,eAAe,MAAM,QAAQ,QAAQ,SAAS;AAClD,YAAM,QAAQ,OAAO,YAAA;AACrB,YAAM,WAAW,kBAAkB,MAAM,MAAM;AAC/C,YAAM,SAAS,MAAM,aAAa,SAAS,MAAM,OAAO,SAAS,MAAM;AACvE,YAAM,SAAS,YAAY,SAAS,QAAQ;AAE5C,UAAI,UAAU,OAAO;AACnB,cAAM,aAAa,YAAY,SAAS,MAAM,MAAM;AACpD,cAAMA,YAAW,MAAM,QAAQ,YAAY,OAAO;AAAA,UAChD,GAAI,UAAU,EAAE,QAAA,IAAY,CAAA;AAAA,UAC5B;AAAA,QAAA,CACD;AACD,eAAO,uBAAuBA,WAAU,MAAM,iBAAiBA,WAAU,aAAa,MAAM,CAAC,GAAG;AAAA,UAC9F,QAAQ;AAAA,UACR;AAAA,QAAA,CACD;AAAA,MACH;AAEA,YAAM,WAAW,MAAM,QAAQ,SAAS,MAAM,OAAO;AAAA,QACnD,SAAS,EAAE,gBAAgB,oBAAoB,GAAG,QAAA;AAAA,QAClD,MAAM,KAAK,UAAU,MAAM;AAAA,MAAA,CAC5B;AACD,aAAO,uBAAuB,UAAU,MAAM,iBAAiB,UAAU,aAAa,MAAM,CAAC,GAAG;AAAA,QAC9F,QAAQ;AAAA,QACR,YAAY,SAAS;AAAA,MAAA,CACtB;AAAA,IACH;AAAA,IAEA,MAAM,mBAAmB,MAAM,MAAM,SAAS;AAC5C,YAAM,SAAS,YAAY,SAAS,QAAQ;AAC5C,YAAM,WAAW,MAAM,QAAQ,MAAM,QAAQ;AAAA,QAC3C,SAAS,EAAE,gBAAgB,oBAAoB,GAAG,QAAA;AAAA,QAClD,MAAM,KAAK,UAAU,IAAI;AAAA,MAAA,CAC1B;AACD,aAAO,uBAAuB,UAAU,MAAM,iBAAiB,UAAU,aAAa,MAAM,CAAC,GAAG;AAAA,QAC9F,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA,CACb;AAAA,IACH;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAM,UAAU,MAAM;AACpB,YAAM,WAAW,MAAM,QAAQ,MAAM,OAAO;AAAA,QAC1C,SAAS,EAAE,QAAQ,0BAAA;AAAA,MAA0B,CAC9C;AACD,UAAI,CAAC,SAAS,GAAI,QAAO;AACzB,YAAM,cAAc,SAAS,QAAQ,IAAI,cAAc,KAAK;AAC5D,UAAI,CAAC,YAAY,YAAA,EAAc,SAAS,QAAQ,EAAG,QAAO;AAC1D,YAAM,SAAS,MAAM,iBAAiB,UAAU,MAAM;AACtD,YAAM,OAAO,OAAO;AACpB,aAAO,QAAQ,OAAO,SAAS,WAAY,OAA4B;AAAA,IACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,WAAW,MAAM,QAAQ,MAAM,SAAS;AAC5C,YAAM,QAAQ,OAAO,YAAA;AACrB,YAAM,WAAW,MAAM,QAAQ,MAAM,OAAO;AAAA,QAC1C,SAAS,EAAE,gBAAgB,oBAAoB,GAAG,QAAA;AAAA,QAClD,MAAM,KAAK,UAAU,IAAI;AAAA,MAAA,CAC1B;AACD,aAAO,uBAAuB,UAAU,MAAM,iBAAiB,UAAU,MAAM,GAAG;AAAA,QAChF,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA,CACb;AAAA,IACH;AAAA,IAEA,MAAM,cAAc,MAAM,QAAQ,QAAQ,SAAS;AACjD,YAAM,QAAQ,OAAO,YAAA;AACrB,YAAM,WAAW,kBAAkB,MAAM,MAAM;AAE/C,UAAI,UAAU,OAAO;AACnB,cAAM,aAAa,YAAY,SAAS,MAAM,EAAE,GAAG,SAAS,QAAQ,UAAU,WAAW;AACzF,cAAMA,YAAW,MAAM,QAAQ,YAAY,OAAO;AAAA,UAChD,SAAS,EAAE,QAAQ,2BAA2B,GAAG,QAAA;AAAA,QAAQ,CAC1D;AACD,YAAIA,UAAS,WAAW,YAAY,EAAE,SAAS,CAAA,EAAC;AAChD,cAAMC,UAAS,MAAM,iBAAiBD,WAAU,MAAM;AACtD,YAAI,CAACA,UAAS,GAAI,OAAM,kBAAkBA,WAAU,OAAO,YAAYC,OAAM;AAC7E,eAAQA,QAAO,QAAgD,EAAE,SAAS,CAAA,EAAC;AAAA,MAC7E;AAEA,YAAM,WAAW,MAAM,QAAQ,YAAY,SAAS,MAAM,EAAE,UAAU,WAAW,GAAG,OAAO;AAAA,QACzF,SAAS;AAAA,UACP,QAAQ;AAAA,UACR,gBAAgB;AAAA,UAChB,GAAG;AAAA,QAAA;AAAA,QAEL,MAAM,KAAK,UAAU,SAAS,MAAM;AAAA,MAAA,CACrC;AACD,UAAI,SAAS,WAAW,YAAY,EAAE,SAAS,CAAA,EAAC;AAChD,YAAM,SAAS,MAAM,iBAAiB,UAAU,MAAM;AACtD,UAAI,CAAC,SAAS,GAAI,OAAM,kBAAkB,UAAU,OAAO,SAAS,MAAM,MAAM;AAChF,aAAQ,OAAO,QAAgD,EAAE,SAAS,CAAA,EAAC;AAAA,IAC7E;AAAA,IAEA,MAAM,oBAAoB,MAAM,QAAQ,WAAW,OAAO,aAAa;AA7MpE;AA8MD,YAAM,QAAQ,OAAO,YAAA;AACrB,YAAM,WAAW,kBAAkB,MAAM,EAAE;AAC3C,YAAM,cAAc;AAAA,QAClB,GAAG;AAAA,QACH,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,YAAY;AAAA,MAAA;AAGd,YAAM,cAAc,YAAY,SAAS,MAAM,WAAW;AAC1D,YAAM,WAAW,MAAM,QAAQ,aAAa,OAAO;AAAA,QACjD,SAAS,EAAE,QAAQ,0BAAA;AAAA,MAA0B,CAC9C;AACD,YAAM,SAAS,MAAM,iBAAiB,UAAU,MAAM;AACtD,UAAI,CAAC,SAAS,GAAI,OAAM,kBAAkB,UAAU,OAAO,aAAa,MAAM;AAC9E,eAAS,kBAAO,SAAP,mBAAqD,YAArD,mBAA+D,eACtE,CAAA;AAAA,IACJ;AAAA,EAAA;AAEJ;AAEA,SAAS,aAAa,QAA2C;AAC/D,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,aAAa,OAAO,YAAA;AAC1B,MAAI,WAAW,SAAS,iBAAiB,EAAG,QAAO;AACnD,MACE,WAAW,SAAS,OAAO,KAC3B,WAAW,SAAS,oBAAoB,KACxC,WAAW,SAAS,kBAAkB,GACtC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AASA,eAAe,iBAAiB,UAAoB,MAAqD;AACvG,QAAM,cAAc,SAAS,QAAQ,IAAI,cAAc,KAAK;AAC5D,MAAI,SAAS,QAAQ;AACnB,UAAM,OAAO,MAAM,SAAS,KAAA;AAC5B,WAAO,EAAE,MAAM,QAAW,MAAM,YAAY,MAAM,YAAA;AAAA,EACpD;AAEA,QAAM,OAAO,MAAM,SAAS,KAAA;AAC5B,MAAI,SAAS,UAAU,CAAC,gBAAgB,MAAM,WAAW,GAAG;AAC1D,WAAO,EAAE,MAAM,MAAM,MAAM,YAAA;AAAA,EAC7B;AAEA,MAAI;AACF,WAAO,EAAE,MAAM,KAAK,MAAM,IAAI,GAAc,MAAM,YAAA;AAAA,EACpD,QAAQ;AACN,WAAO,EAAE,MAAM,MAAM,MAAM,YAAA;AAAA,EAC7B;AACF;AAEA,SAAS,uBACP,UACA,QACA,SACmB;AACnB,QAAM,UAAU,gBAAgB,SAAS,OAAO;AAChD,QAAM,OAAO,OAAO;AACpB,QAAM,SACJ,OAAO,QAAQ,OACX,aACA,OAAO,SAAS,WACd,OACA,OAAO,QAAQ,KAAK,UAAU,MAAM,MAAM,CAAC;AACnD,QAAM,iBAAiB,iBAAiB,IAAI;AAE5C,MAAI,CAAC,SAAS,MAAM,CAAC,gBAAgB;AACnC,UAAM,kBAAkB,UAAU,QAAQ,QAAQ,QAAQ,YAAY,MAAM;AAAA,EAC9E;AAEA,QAAM,cAAc,wBAAwB,IAAI;AAChD,QAAM,gBAAgB,QAAQ,qBAAqB;AACnD,QAAM,UAAU,iBAAiB,OAAO,SAAS,MAAM,CAAC,cAAc,kBAAkB;AACxF,QAAM,WAAW,SAAS,QAAQ,aAAa,MAAM,UAAU,MAAM,MAAM,EAAE;AAC7E,QAAM,MAAM,QAAQ,eAAe;AACnC,QAAM,QAAQ,QAAQ,SAAS,KAAK;AACpC,QAAM,aAAa,sBAAsB,OAAO;AAEhD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,WAAW,OAAO,SAAS,QAAQ,IAAI,WAAW,UAAU,IAAI;AAAA,IAChE,aAAa,OAAO,eAAe,QAAQ,cAAc,KAAK;AAAA,IAC9D,YAAY,QAAQ;AAAA,IACpB,iBAAiB;AAAA,IACjB,GAAI,aAAa,EAAE,WAAA,IAAe,CAAA;AAAA,IAClC,GAAI,MAAM,EAAE,IAAA,IAAQ,CAAA;AAAA,IACpB,GAAI,QAAQ,EAAE,MAAA,IAAU,CAAA;AAAA,IACxB,GAAI,OAAO,OAAO,EAAE,MAAM,OAAO,KAAA,IAAS,CAAA;AAAA,IAC1C,GAAI,OAAO,QAAQ,QAAQ,OAAO,SAAS,WAAW,EAAE,QAAQ,SAAS,CAAA;AAAA,EAAC;AAE9E;AAEA,SAAS,kBACP,UACA,QACA,KACA,QAC0B;AAC1B,QAAM,UAAU,gBAAgB,SAAS,OAAO;AAChD,QAAM,UACJ,QAAQ,SAAS,KACjB,gBAAgB,OAAO,IAAI,KAC3B,GAAG,MAAM,IAAI,GAAG,gBAAgB,SAAS,MAAM,KAC7C,OAAO,QAAQ,SAAS,UAC1B;AACF,SAAO,IAAI,yBAAyB,SAAS;AAAA,IAC3C,QAAQ,SAAS;AAAA,IACjB;AAAA,IACA;AAAA,IACA,cAAc,OAAO;AAAA,IACrB,cAAc,OAAO;AAAA,IACrB,iBAAiB;AAAA,EAAA,CAClB;AACH;AAEA,SAAS,kBACP,MACA,QACkD;AAClD,QAAM,cAAc,EAAE,GAAG,OAAA;AACzB,MAAI,eAAe;AACnB,QAAM,eAAe,CAAC,GAAG,KAAK,SAAS,eAAe,CAAC,EACpD,IAAI,CAAC,UAAU,MAAM,CAAC,CAAC,EACvB,OAAO,CAAC,SAAyB,QAAQ,IAAI,CAAC;AACjD,QAAM,YAAY,eAAe,OAAO,IAAI;AAC5C,MAAI,eAAe;AACnB,QAAM,uBAAiC,CAAA;AAEvC,aAAW,CAAC,OAAO,IAAI,KAAK,aAAa,WAAW;AAClD,UAAM,cAAc,YAAY,IAAI;AACpC,UAAM,gBAAgB,eAAe,UAAU,KAAK;AACpD,QAAI,CAAC,cAAe;AAEpB,mBAAe,aAAa,QAAQ,IAAI,IAAI,KAAK,mBAAmB,aAAa,CAAC;AAClF,WAAO,YAAY,IAAI;AACvB,QAAI,CAAC,eAAe,UAAU,KAAK,EAAG,gBAAe;AACrD,QAAI,YAAa,sBAAqB,KAAK,IAAI;AAAA,EACjD;AAEA,QAAM,4BACJ,UAAU,SAAS,KACnB,UAAU,WAAW,qBAAqB,OAAO,OAAO,EAAE,UAC1D,UAAU,MAAM,CAAC,OAAO,UAAU,UAAU,qBAAqB,KAAK,CAAC;AAEzE,MAAI,gBAAgB,2BAA2B;AAC7C,WAAO,YAAY;AAAA,EACrB;AAEA,SAAO,EAAE,MAAM,cAAc,QAAQ,kBAAkB,WAAW,EAAA;AACpE;AAEA,SAAS,eAAe,OAAqC;AAC3D,MAAI,CAAC,MAAO,QAAO,CAAA;AACnB,QAAM,UAAU,MAAM,KAAA;AACtB,MAAI,CAAC,WAAW,YAAY,QAAQ,QAAQ,YAAA,MAAkB,OAAQ,QAAO,CAAA;AAC7E,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,OAAO;AACjC,QAAI,MAAM,QAAQ,MAAM,EAAG,QAAO,OAAO,IAAI,MAAM,EAAE,OAAO,OAAO;AAAA,EACrE,QAAQ;AAAA,EAER;AACA,SAAO,QACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAA,CAAM,EACzB,OAAO,OAAO;AACnB;AAEA,SAAS,kBAAkB,QAAgC;AACzD,QAAM,OAAO,EAAE,GAAG,OAAA;AAClB,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO;AACT;AAEA,SAAS,YAAY,MAAc,QAAgC;AACjE,QAAM,QAAQ,IAAI,gBAAgB,YAAY,MAAM,CAAC,EAAE,SAAA;AACvD,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,GAAG,IAAI,GAAG,KAAK,SAAS,GAAG,IAAI,MAAM,GAAG,GAAG,KAAK;AACzD;AAEA,SAAS,YAAY,QAAgC;AACnD,SAAO,OAAO,YAAY,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,CAAA,EAAG,KAAK,MAAM,UAAU,EAAE,CAAC;AACtF;AAEA,SAAS,QAAQ,SAA6B,MAAc;AAC1D,MAAI,CAAC,WAAW,gBAAgB,KAAK,IAAI,EAAG,QAAO;AACnD,SAAO,GAAG,QAAQ,QAAQ,QAAQ,EAAE,CAAC,IAAI,KAAK,QAAQ,QAAQ,EAAE,CAAC;AACnE;AAEA,SAAS,YAAY,SAA6C,MAAc;AAC9E,QAAM,SAAS,KAAK,YAAA;AACpB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,WAAW,CAAA,CAAE,GAAG;AACxD,QAAI,IAAI,kBAAkB,OAAQ,QAAO;AAAA,EAC3C;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,SAA0C;AACjE,QAAM,MAA8B,CAAA;AACpC,UAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC9B,QAAI,IAAI,YAAA,CAAa,IAAI;AAAA,EAC3B,CAAC;AACD,SAAO;AACT;AAEA,SAAS,sBAAsB,SAAkE;AAC/F,QAAM,aAAkC,CAAA;AACxC,QAAM,QAAQ,cAAc,QAAQ,eAAe,CAAC;AACpD,QAAM,QAAQ,cAAc,QAAQ,cAAc,CAAC;AACnD,QAAM,SAAS,cAAc,QAAQ,eAAe,CAAC;AAErD,MAAI,UAAU,OAAW,YAAW,QAAQ;AAC5C,MAAI,UAAU,OAAW,YAAW,QAAQ;AAC5C,MAAI,WAAW,OAAW,YAAW,SAAS;AAE9C,SAAO,OAAO,KAAK,UAAU,EAAE,SAAS,IAAI,aAAa;AAC3D;AAEA,SAAS,cAAc,OAA+C;AACpE,MAAI,SAAS,QAAQ,MAAM,KAAA,MAAW,GAAI,QAAO;AACjD,QAAM,SAAS,SAAS,OAAO,EAAE;AACjC,SAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAC5C;AAEA,SAAS,gBAAgB,MAAc,aAAqB;AAC1D,QAAM,UAAU,KAAK,KAAA;AACrB,SACE,YAAY,OACX,YAAY,YAAA,EAAc,SAAS,MAAM,KACxC,QAAQ,WAAW,GAAG,KACtB,QAAQ,WAAW,GAAG;AAE5B;AAEA,SAAS,iBAAiB,MAAwB;AAChD,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,QAAM,OAAO;AACb,SAAO,KAAK,WAAW,QAAQ,KAAK,QAAQ,QAAQ,OAAO,KAAK,SAAS;AAC3E;AAEA,SAAS,eAAe,MAAmC;AACzD,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,QAAM,IAAI;AACV,MAAI,OAAO,EAAE,UAAU,YAAY,EAAE,UAAU,WAAW,EAAE;AAC5D,MAAI,OAAO,EAAE,SAAS,YAAY,EAAE,SAAS,WAAW,EAAE;AAC1D,MAAI,MAAM,QAAQ,EAAE,QAAQ,GAAG;AAC7B,eAAW,SAAS,EAAE,UAAU;AAC9B,YAAM,OAAO,eAAe,KAAK;AACjC,UAAI,KAAM,QAAO;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,wBAAwB,MAAmC;AAClE,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,QAAM,OAAQ,KAAiC;AAC/C,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,QAAM,IAAI;AACV,MAAI,EAAE,SAAS,SAAS,CAAC,MAAM,QAAQ,EAAE,MAAM,EAAG,QAAO;AAEzD,MAAI;AACJ,MAAI,SAAS;AACb,aAAW,SAAS,EAAE,QAAQ;AAC5B,QAAI,CAAC,SAAS,OAAO,UAAU,SAAU;AACzC,UAAM,IAAI;AACV,QAAI,EAAE,SAAS,QAAS,aAAY,eAAe,EAAE,KAAK;AAC1D,QAAI,EAAE,SAAS,aAAa,eAAe,EAAE,KAAK,MAAM,QAAS,UAAS;AAAA,EAC5E;AACA,SAAO,SAAS,YAAY;AAC9B;AAEA,SAAS,gBAAgB,MAAmC;AAC1D,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,QAAM,OAAO;AACb,MAAI,OAAO,KAAK,UAAU,YAAY,KAAK,cAAc,KAAK;AAC9D,MAAI,OAAO,KAAK,YAAY,YAAY,KAAK,gBAAgB,KAAK;AAClE,SAAO,wBAAwB,IAAI;AACrC;"}
1
+ {"version":3,"file":"apiClient.js","sources":["../../src/rpc/apiClient.ts"],"sourcesContent":["import type { JsonSchemaObject } from \"../components/json-schema-form-types\";\nimport { stripLeadingSlashes, stripTrailingSlashes } from \"../lib/string\";\nimport type {\n ExecutionPagination,\n ExecutionResponse,\n OpenAPISpec,\n OperationLookupFilter,\n OperationLookupResponse,\n} from \"./types\";\nimport type { OperationsApiClient } from \"./useOperations\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type OperationApiClientContext = {\n path: string;\n method: string;\n};\n\nexport type OperationDefaultParams = (context: {\n path: string;\n method: string;\n params: Record<string, string>;\n}) => MaybePromise<Record<string, string>>;\n\nexport type OperationHeadersProvider = (\n headers: Headers,\n context: OperationApiClientContext,\n) => MaybePromise<HeadersInit | void>;\n\nexport type CreateOperationsApiClientOptions = {\n baseUrl?: string;\n openApiPath?: string;\n credentials?: RequestCredentials;\n fetch?: typeof fetch;\n prepareHeaders?: OperationHeadersProvider;\n defaultParams?: OperationDefaultParams;\n};\n\nexport class OperationsApiClientError extends Error {\n status: number | undefined;\n method: string | undefined;\n url: string | undefined;\n responseBody: string | undefined;\n responseData: unknown;\n responseHeaders: Record<string, string> | undefined;\n\n constructor(\n message: string,\n options: {\n status?: number;\n method?: string;\n url?: string;\n responseBody?: string;\n responseData?: unknown;\n responseHeaders?: Record<string, string>;\n } = {},\n ) {\n super(message);\n this.name = \"OperationsApiClientError\";\n this.status = options.status;\n this.method = options.method;\n this.url = options.url;\n this.responseBody = options.responseBody;\n this.responseData = options.responseData;\n this.responseHeaders = options.responseHeaders;\n }\n}\n\nexport interface SharedOperationsApiClient extends OperationsApiClient {\n lookupFilterOptions(\n path: string,\n method: string,\n filterKey: string,\n query: string,\n extraParams?: Record<string, string>,\n ): Promise<OperationLookupFilter>;\n executeCommandBody(\n path: string,\n body: Record<string, unknown>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n getSchema(path: string): Promise<JsonSchemaObject | undefined>;\n submitForm(\n path: string,\n method: string,\n body: Record<string, unknown>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n}\n\nexport function createOperationsApiClient(\n options: CreateOperationsApiClientOptions = {},\n): SharedOperationsApiClient {\n const fetcher = options.fetch ?? fetch;\n const openApiPath = options.openApiPath ?? \"/api/openapi.json\";\n\n async function makeHeaders(\n base: HeadersInit | undefined,\n context: OperationApiClientContext,\n ): Promise<Headers> {\n const headers = new Headers(base);\n const prepared = await options.prepareHeaders?.(headers, context);\n return prepared ? new Headers(prepared) : headers;\n }\n\n async function request(\n path: string,\n method: string,\n init: Omit<RequestInit, \"method\" | \"headers\" | \"credentials\"> & {\n headers?: HeadersInit;\n requestUrl?: string;\n } = {},\n ): Promise<Response> {\n const url = joinUrl(options.baseUrl, path);\n const headers = await makeHeaders(init.headers, { path, method });\n return fetcher(url, {\n ...init,\n method,\n headers,\n ...(options.credentials ? { credentials: options.credentials } : {}),\n });\n }\n\n async function getOpenAPISpec(): Promise<OpenAPISpec> {\n const response = await request(openApiPath, \"GET\", {\n headers: { Accept: \"application/json\" },\n });\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) {\n throw errorFromResponse(response, \"GET\", openApiPath, parsed);\n }\n return parsed.data as OpenAPISpec;\n }\n\n async function withDefaults(path: string, method: string, params: Record<string, string>) {\n return (await options.defaultParams?.({ path, method, params })) ?? params;\n }\n\n return {\n getOpenAPISpec,\n\n async executeCommand(path, method, params, headers) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, params);\n const scoped = await withDefaults(resolved.path, upper, resolved.params);\n const accept = headerValue(headers, \"Accept\");\n\n if (upper === \"GET\") {\n const requestUrl = appendQuery(resolved.path, scoped);\n const response = await request(requestUrl, upper, {\n ...(headers ? { headers } : {}),\n requestUrl,\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: upper,\n requestUrl,\n });\n }\n\n const response = await request(resolved.path, upper, {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(scoped),\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: upper,\n requestUrl: resolved.path,\n });\n },\n\n async executeCommandBody(path, body, headers) {\n const accept = headerValue(headers, \"Accept\");\n const response = await request(path, \"POST\", {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(body),\n });\n return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {\n method: \"POST\",\n requestUrl: path,\n });\n },\n\n // getSchema fetches a resource's JSON Schema via content negotiation\n // (Accept: application/schema+json on the same endpoint). It returns\n // undefined when the resource serves no schema (the request falls through to\n // its data representation), so callers can fall back to a parameter form.\n async getSchema(path) {\n const response = await request(path, \"GET\", {\n headers: { Accept: \"application/schema+json\" },\n });\n if (!response.ok) return undefined;\n const contentType = response.headers.get(\"Content-Type\") || \"\";\n if (!contentType.toLowerCase().includes(\"schema\")) return undefined;\n const parsed = await readResponseBody(response, \"json\");\n const data = parsed.data;\n return data && typeof data === \"object\" ? (data as JsonSchemaObject) : undefined;\n },\n\n // submitForm sends a nested JSON body with the given HTTP method (POST to\n // create, PUT to update). Unlike executeCommand it preserves nested objects\n // and arrays — the server reads the raw body (clicky's RequestFromContext),\n // so connection `properties` and profile `provider`/`params`/`columns`\n // survive intact.\n async submitForm(path, method, body, headers) {\n const upper = method.toUpperCase();\n const response = await request(path, upper, {\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(body),\n });\n return parseExecutionResponse(response, await readResponseBody(response, \"json\"), {\n method: upper,\n requestUrl: path,\n });\n },\n\n async lookupFilters(path, method, params, headers) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, params);\n\n if (upper === \"GET\") {\n const requestUrl = appendQuery(resolved.path, { ...resolved.params, __lookup: \"filters\" });\n const response = await request(requestUrl, \"GET\", {\n headers: { Accept: \"application/json+clicky\", ...headers },\n });\n if (response.status === 404) return { filters: {} };\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, \"GET\", requestUrl, parsed);\n return (parsed.data as OperationLookupResponse | undefined) ?? { filters: {} };\n }\n\n const response = await request(appendQuery(resolved.path, { __lookup: \"filters\" }), upper, {\n headers: {\n Accept: \"application/json+clicky\",\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(resolved.params),\n });\n if (response.status === 404) return { filters: {} };\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, upper, resolved.path, parsed);\n return (parsed.data as OperationLookupResponse | undefined) ?? { filters: {} };\n },\n\n async lookupFilterOptions(path, method, filterKey, query, extraParams) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, {});\n const queryParams = {\n ...extraParams,\n __lookup: \"filters\",\n __lookup_filter: filterKey,\n __lookup_q: query,\n };\n\n const requestPath = appendQuery(resolved.path, queryParams);\n const response = await request(requestPath, upper, {\n headers: { Accept: \"application/json+clicky\" },\n });\n const parsed = await readResponseBody(response, \"json\");\n if (!response.ok) throw errorFromResponse(response, upper, requestPath, parsed);\n return ((parsed.data as OperationLookupResponse | undefined)?.filters?.[filterKey] ??\n {}) as OperationLookupFilter;\n },\n };\n}\n\nfunction responseKind(accept?: string): \"json\" | \"text\" | \"blob\" {\n if (!accept) return \"json\";\n const normalized = accept.toLowerCase();\n if (normalized.includes(\"application/pdf\")) return \"blob\";\n if (\n normalized.includes(\"text/\") ||\n normalized.includes(\"application/x-yaml\") ||\n normalized.includes(\"application/yaml\")\n ) {\n return \"text\";\n }\n return \"json\";\n}\n\ntype ParsedBody = {\n data: unknown;\n text: string;\n blob?: Blob;\n contentType: string;\n};\n\nasync function readResponseBody(response: Response, kind: \"json\" | \"text\" | \"blob\"): Promise<ParsedBody> {\n const contentType = response.headers.get(\"Content-Type\") || \"\";\n if (kind === \"blob\") {\n const blob = await response.blob();\n return { data: undefined, text: \"[binary]\", blob, contentType };\n }\n\n const text = await response.text();\n if (kind === \"text\" || !shouldParseJson(text, contentType)) {\n return { data: text, text, contentType };\n }\n\n try {\n return { data: JSON.parse(text) as unknown, text, contentType };\n } catch {\n return { data: text, text, contentType };\n }\n}\n\nfunction parseExecutionResponse(\n response: Response,\n parsed: ParsedBody,\n context: { method: string; requestUrl: string },\n): ExecutionResponse {\n const headers = responseHeaders(response.headers);\n const data = parsed.data;\n const stdout =\n parsed.blob != null\n ? \"[binary]\"\n : typeof data === \"string\"\n ? data\n : parsed.text || JSON.stringify(data, null, 2);\n const clickyEnvelope = isClickyEnvelope(data);\n\n if (!response.ok && !clickyEnvelope) {\n throw errorFromResponse(response, context.method, context.requestUrl, parsed);\n }\n\n const clickyError = errorFromClickyEnvelope(data);\n const successHeader = headers[\"x-execution-success\"];\n const success = successHeader == null ? response.ok && !clickyError : successHeader !== \"false\";\n const exitCode = parseInt(headers[\"x-exit-code\"] ?? (success ? \"0\" : \"1\"), 10);\n const cli = headers[\"x-cli-command\"];\n const error = headers[\"x-error\"] || clickyError;\n const pagination = paginationFromHeaders(headers);\n\n return {\n success,\n stdout,\n output: stdout,\n exit_code: Number.isFinite(exitCode) ? exitCode : success ? 0 : 1,\n contentType: parsed.contentType || headers[\"content-type\"] || \"application/json\",\n requestUrl: context.requestUrl,\n responseHeaders: headers,\n ...(pagination ? { pagination } : {}),\n ...(cli ? { cli } : {}),\n ...(error ? { error } : {}),\n ...(parsed.blob ? { blob: parsed.blob } : {}),\n ...(parsed.blob == null && typeof data !== \"string\" ? { parsed: data } : {}),\n };\n}\n\nfunction errorFromResponse(\n response: Response,\n method: string,\n url: string,\n parsed: ParsedBody,\n): OperationsApiClientError {\n const headers = responseHeaders(response.headers);\n const message =\n headers[\"x-error\"] ||\n messageFromBody(parsed.data) ||\n `${method} ${url} failed with ${response.status}: ${\n parsed.text || response.statusText\n }`;\n return new OperationsApiClientError(message, {\n status: response.status,\n method,\n url,\n responseBody: parsed.text,\n responseData: parsed.data,\n responseHeaders: headers,\n });\n}\n\nfunction resolvePathParams(\n path: string,\n params: Record<string, string>,\n): { path: string; params: Record<string, string> } {\n const queryParams = { ...params };\n let resolvedPath = path;\n const placeholders = [...path.matchAll(/\\{([^{}]+)\\}/g)]\n .map((match) => match[1])\n .filter((name): name is string => Boolean(name));\n const argValues = parseArgsParam(params.args);\n let consumedArgs = false;\n const consumedDirectValues: string[] = [];\n\n for (const [index, name] of placeholders.entries()) {\n const directValue = queryParams[name];\n const fallbackValue = directValue || argValues[index];\n if (!fallbackValue) continue;\n\n resolvedPath = resolvedPath.replace(`{${name}}`, encodeURIComponent(fallbackValue));\n delete queryParams[name];\n if (!directValue && argValues[index]) consumedArgs = true;\n if (directValue) consumedDirectValues[index] = directValue;\n }\n\n const argsDuplicateResolvedPath =\n argValues.length > 0 &&\n argValues.length === consumedDirectValues.filter(Boolean).length &&\n argValues.every((value, index) => value === consumedDirectValues[index]);\n\n if (consumedArgs || argsDuplicateResolvedPath) {\n delete queryParams.args;\n }\n\n return { path: resolvedPath, params: stripRunnerParams(queryParams) };\n}\n\nfunction parseArgsParam(value: string | undefined): string[] {\n if (!value) return [];\n const trimmed = value.trim();\n if (!trimmed || trimmed === \"[]\" || trimmed.toLowerCase() === \"null\") return [];\n try {\n const parsed = JSON.parse(trimmed);\n if (Array.isArray(parsed)) return parsed.map(String).filter(Boolean);\n } catch {\n // Fall back to comma-delimited args below.\n }\n return trimmed\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction stripRunnerParams(params: Record<string, string>) {\n const next = { ...params };\n delete next.autoRun;\n delete next.__autoRun;\n return next;\n}\n\nfunction appendQuery(path: string, params: Record<string, string>) {\n const query = new URLSearchParams(pruneParams(params)).toString();\n if (!query) return path;\n return `${path}${path.includes(\"?\") ? \"&\" : \"?\"}${query}`;\n}\n\nfunction pruneParams(params: Record<string, string>) {\n return Object.fromEntries(Object.entries(params).filter(([, value]) => value !== \"\"));\n}\n\nfunction joinUrl(baseUrl: string | undefined, path: string) {\n if (!baseUrl || /^https?:\\/\\//i.test(path)) return path;\n return `${stripTrailingSlashes(baseUrl)}/${stripLeadingSlashes(path)}`;\n}\n\nfunction headerValue(headers: Record<string, string> | undefined, name: string) {\n const wanted = name.toLowerCase();\n for (const [key, value] of Object.entries(headers ?? {})) {\n if (key.toLowerCase() === wanted) return value;\n }\n return undefined;\n}\n\nfunction responseHeaders(headers: Headers): Record<string, string> {\n const out: Record<string, string> = {};\n headers.forEach((value, key) => {\n out[key.toLowerCase()] = value;\n });\n return out;\n}\n\nfunction paginationFromHeaders(headers: Record<string, string>): ExecutionPagination | undefined {\n const pagination: ExecutionPagination = {};\n const total = integerHeader(headers[\"x-total-count\"]);\n const limit = integerHeader(headers[\"x-page-limit\"]);\n const offset = integerHeader(headers[\"x-page-offset\"]);\n\n if (total !== undefined) pagination.total = total;\n if (limit !== undefined) pagination.limit = limit;\n if (offset !== undefined) pagination.offset = offset;\n\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n\nfunction integerHeader(value: string | undefined): number | undefined {\n if (value == null || value.trim() === \"\") return undefined;\n const parsed = parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction shouldParseJson(text: string, contentType: string) {\n const trimmed = text.trim();\n return (\n trimmed !== \"\" &&\n (contentType.toLowerCase().includes(\"json\") ||\n trimmed.startsWith(\"{\") ||\n trimmed.startsWith(\"[\"))\n );\n}\n\nfunction isClickyEnvelope(data: unknown): boolean {\n if (!data || typeof data !== \"object\") return false;\n const body = data as Record<string, unknown>;\n return body.version != null && body.node != null && typeof body.node === \"object\";\n}\n\nfunction readClickyText(node: unknown): string | undefined {\n if (!node || typeof node !== \"object\") return undefined;\n const n = node as Record<string, unknown>;\n if (typeof n.plain === \"string\" && n.plain !== \"\") return n.plain;\n if (typeof n.text === \"string\" && n.text !== \"\") return n.text;\n if (Array.isArray(n.children)) {\n for (const child of n.children) {\n const text = readClickyText(child);\n if (text) return text;\n }\n }\n return undefined;\n}\n\nfunction errorFromClickyEnvelope(data: unknown): string | undefined {\n if (!data || typeof data !== \"object\") return undefined;\n const node = (data as Record<string, unknown>).node;\n if (!node || typeof node !== \"object\") return undefined;\n const n = node as Record<string, unknown>;\n if (n.kind !== \"map\" || !Array.isArray(n.fields)) return undefined;\n\n let errorText: string | undefined;\n let failed = false;\n for (const field of n.fields) {\n if (!field || typeof field !== \"object\") continue;\n const f = field as Record<string, unknown>;\n if (f.name === \"Error\") errorText = readClickyText(f.value);\n if (f.name === \"Success\" && readClickyText(f.value) === \"false\") failed = true;\n }\n return failed ? errorText : undefined;\n}\n\nfunction messageFromBody(data: unknown): string | undefined {\n if (!data || typeof data !== \"object\") return undefined;\n const body = data as Record<string, unknown>;\n if (typeof body.error === \"string\" && body.error) return body.error;\n if (typeof body.message === \"string\" && body.message) return body.message;\n return errorFromClickyEnvelope(data);\n}\n"],"names":["response","parsed"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flanksource/clicky-ui",
3
- "version": "0.3.12",
3
+ "version": "0.3.13",
4
4
  "description": "Flanksource Clicky UI — React component library built on shadcn/ui with light/dark and density theming.",
5
5
  "homepage": "https://github.com/flanksource/clicky-ui#readme",
6
6
  "bugs": "https://github.com/flanksource/clicky-ui/issues",