@flanksource/clicky-ui 0.2.8 → 0.2.9
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/components/Combobox.cjs +89 -49
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts +3 -0
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +91 -51
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/FilterBar.cjs +42 -44
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +19 -0
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +43 -45
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/JsonSchemaForm.cjs +35 -0
- package/dist/components/JsonSchemaForm.cjs.map +1 -0
- package/dist/components/JsonSchemaForm.d.ts +3 -0
- package/dist/components/JsonSchemaForm.d.ts.map +1 -0
- package/dist/components/JsonSchemaForm.js +35 -0
- package/dist/components/JsonSchemaForm.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +169 -0
- package/dist/components/json-schema-form-array.cjs.map +1 -0
- package/dist/components/json-schema-form-array.d.ts +8 -0
- package/dist/components/json-schema-form-array.d.ts.map +1 -0
- package/dist/components/json-schema-form-array.js +169 -0
- package/dist/components/json-schema-form-array.js.map +1 -0
- package/dist/components/json-schema-form-fields.cjs +365 -0
- package/dist/components/json-schema-form-fields.cjs.map +1 -0
- package/dist/components/json-schema-form-fields.d.ts +19 -0
- package/dist/components/json-schema-form-fields.d.ts.map +1 -0
- package/dist/components/json-schema-form-fields.js +365 -0
- package/dist/components/json-schema-form-fields.js.map +1 -0
- package/dist/components/json-schema-form-render.cjs +154 -0
- package/dist/components/json-schema-form-render.cjs.map +1 -0
- package/dist/components/json-schema-form-render.d.ts +40 -0
- package/dist/components/json-schema-form-render.d.ts.map +1 -0
- package/dist/components/json-schema-form-render.js +154 -0
- package/dist/components/json-schema-form-render.js.map +1 -0
- package/dist/components/json-schema-form-resolve.cjs +121 -0
- package/dist/components/json-schema-form-resolve.cjs.map +1 -0
- package/dist/components/json-schema-form-resolve.d.ts +19 -0
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -0
- package/dist/components/json-schema-form-resolve.js +121 -0
- package/dist/components/json-schema-form-resolve.js.map +1 -0
- package/dist/components/json-schema-form-types.d.ts +108 -0
- package/dist/components/json-schema-form-types.d.ts.map +1 -0
- package/dist/components.cjs +7 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +3 -0
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +8 -1
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +1 -1
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.js +1 -1
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +16 -15
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +2 -1
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +16 -15
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/Icon.cjs +11 -0
- package/dist/data/Icon.cjs.map +1 -1
- package/dist/data/Icon.d.ts +12 -1
- package/dist/data/Icon.d.ts.map +1 -1
- package/dist/data/Icon.js +12 -1
- package/dist/data/Icon.js.map +1 -1
- package/dist/data/LogDetails.cjs +277 -0
- package/dist/data/LogDetails.cjs.map +1 -0
- package/dist/data/LogDetails.d.ts +5 -0
- package/dist/data/LogDetails.d.ts.map +1 -0
- package/dist/data/LogDetails.js +277 -0
- package/dist/data/LogDetails.js.map +1 -0
- package/dist/data/LogsTable.cjs +6 -202
- package/dist/data/LogsTable.cjs.map +1 -1
- package/dist/data/LogsTable.d.ts.map +1 -1
- package/dist/data/LogsTable.js +4 -200
- package/dist/data/LogsTable.js.map +1 -1
- package/dist/data/Properties.cjs +2 -2
- package/dist/data/Properties.cjs.map +1 -1
- package/dist/data/Properties.js +2 -2
- package/dist/data/Properties.js.map +1 -1
- package/dist/data/cells/TagList.cjs +19 -3
- package/dist/data/cells/TagList.cjs.map +1 -1
- package/dist/data/cells/TagList.d.ts +11 -1
- package/dist/data/cells/TagList.d.ts.map +1 -1
- package/dist/data/cells/TagList.js +19 -3
- package/dist/data/cells/TagList.js.map +1 -1
- package/dist/data/cells/Timestamp.cjs +17 -2
- package/dist/data/cells/Timestamp.cjs.map +1 -1
- package/dist/data/cells/Timestamp.d.ts +2 -0
- package/dist/data/cells/Timestamp.d.ts.map +1 -1
- package/dist/data/cells/Timestamp.js +17 -2
- package/dist/data/cells/Timestamp.js.map +1 -1
- package/dist/data/log-utils.cjs +7 -0
- package/dist/data/log-utils.cjs.map +1 -0
- package/dist/data/log-utils.d.ts +2 -0
- package/dist/data/log-utils.d.ts.map +1 -0
- package/dist/data/log-utils.js +7 -0
- package/dist/data/log-utils.js.map +1 -0
- package/dist/data.cjs +3 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +2 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +5 -2
- package/dist/index.cjs +13 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +15 -2
- package/dist/index.js.map +1 -1
- package/dist/rpc/EntityExplorerApp.cjs +3 -2
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +3 -2
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/OperationActionDialog.cjs +1 -1
- package/dist/rpc/OperationActionDialog.cjs.map +1 -1
- package/dist/rpc/OperationActionDialog.js +1 -1
- package/dist/rpc/OperationActionDialog.js.map +1 -1
- package/dist/rpc/OperationCommandPage.cjs +21 -14
- package/dist/rpc/OperationCommandPage.cjs.map +1 -1
- package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
- package/dist/rpc/OperationCommandPage.js +21 -14
- package/dist/rpc/OperationCommandPage.js.map +1 -1
- package/dist/rpc/apiClient.cjs +316 -0
- package/dist/rpc/apiClient.cjs.map +1 -0
- package/dist/rpc/apiClient.d.ts +44 -0
- package/dist/rpc/apiClient.d.ts.map +1 -0
- package/dist/rpc/apiClient.js +316 -0
- package/dist/rpc/apiClient.js.map +1 -0
- package/dist/rpc/useOperations.cjs.map +1 -1
- package/dist/rpc/useOperations.d.ts +2 -1
- package/dist/rpc/useOperations.d.ts.map +1 -1
- package/dist/rpc/useOperations.js.map +1 -1
- package/dist/rpc.cjs +3 -0
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +1 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +3 -0
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
class OperationsApiClientError extends Error {
|
|
5
|
+
constructor(message, options = {}) {
|
|
6
|
+
super(message);
|
|
7
|
+
__publicField(this, "status");
|
|
8
|
+
__publicField(this, "method");
|
|
9
|
+
__publicField(this, "url");
|
|
10
|
+
__publicField(this, "responseBody");
|
|
11
|
+
__publicField(this, "responseData");
|
|
12
|
+
__publicField(this, "responseHeaders");
|
|
13
|
+
this.name = "OperationsApiClientError";
|
|
14
|
+
this.status = options.status;
|
|
15
|
+
this.method = options.method;
|
|
16
|
+
this.url = options.url;
|
|
17
|
+
this.responseBody = options.responseBody;
|
|
18
|
+
this.responseData = options.responseData;
|
|
19
|
+
this.responseHeaders = options.responseHeaders;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function createOperationsApiClient(options = {}) {
|
|
23
|
+
const fetcher = options.fetch ?? fetch;
|
|
24
|
+
const openApiPath = options.openApiPath ?? "/api/openapi.json";
|
|
25
|
+
async function makeHeaders(base, context) {
|
|
26
|
+
var _a;
|
|
27
|
+
const headers = new Headers(base);
|
|
28
|
+
const prepared = await ((_a = options.prepareHeaders) == null ? void 0 : _a.call(options, headers, context));
|
|
29
|
+
return prepared ? new Headers(prepared) : headers;
|
|
30
|
+
}
|
|
31
|
+
async function request(path, method, init = {}) {
|
|
32
|
+
const url = joinUrl(options.baseUrl, path);
|
|
33
|
+
const headers = await makeHeaders(init.headers, { path, method });
|
|
34
|
+
return fetcher(url, {
|
|
35
|
+
...init,
|
|
36
|
+
method,
|
|
37
|
+
headers,
|
|
38
|
+
...options.credentials ? { credentials: options.credentials } : {}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
async function getOpenAPISpec() {
|
|
42
|
+
const response = await request(openApiPath, "GET", {
|
|
43
|
+
headers: { Accept: "application/json" }
|
|
44
|
+
});
|
|
45
|
+
const parsed = await readResponseBody(response, "json");
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
throw errorFromResponse(response, "GET", openApiPath, parsed);
|
|
48
|
+
}
|
|
49
|
+
return parsed.data;
|
|
50
|
+
}
|
|
51
|
+
async function withDefaults(path, method, params) {
|
|
52
|
+
var _a;
|
|
53
|
+
return await ((_a = options.defaultParams) == null ? void 0 : _a.call(options, { path, method, params })) ?? params;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
getOpenAPISpec,
|
|
57
|
+
async executeCommand(path, method, params, headers) {
|
|
58
|
+
const upper = method.toUpperCase();
|
|
59
|
+
const resolved = resolvePathParams(path, params);
|
|
60
|
+
const scoped = await withDefaults(resolved.path, upper, resolved.params);
|
|
61
|
+
const accept = headerValue(headers, "Accept");
|
|
62
|
+
if (upper === "GET") {
|
|
63
|
+
const requestUrl = appendQuery(resolved.path, scoped);
|
|
64
|
+
const response2 = await request(requestUrl, upper, {
|
|
65
|
+
...headers ? { headers } : {},
|
|
66
|
+
requestUrl
|
|
67
|
+
});
|
|
68
|
+
return parseExecutionResponse(response2, await readResponseBody(response2, responseKind(accept)), {
|
|
69
|
+
method: upper,
|
|
70
|
+
requestUrl
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
const response = await request(resolved.path, upper, {
|
|
74
|
+
headers: { "Content-Type": "application/json", ...headers ?? {} },
|
|
75
|
+
body: JSON.stringify(scoped)
|
|
76
|
+
});
|
|
77
|
+
return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {
|
|
78
|
+
method: upper,
|
|
79
|
+
requestUrl: resolved.path
|
|
80
|
+
});
|
|
81
|
+
},
|
|
82
|
+
async executeCommandBody(path, body, headers) {
|
|
83
|
+
const accept = headerValue(headers, "Accept");
|
|
84
|
+
const response = await request(path, "POST", {
|
|
85
|
+
headers: { "Content-Type": "application/json", ...headers ?? {} },
|
|
86
|
+
body: JSON.stringify(body)
|
|
87
|
+
});
|
|
88
|
+
return parseExecutionResponse(response, await readResponseBody(response, responseKind(accept)), {
|
|
89
|
+
method: "POST",
|
|
90
|
+
requestUrl: path
|
|
91
|
+
});
|
|
92
|
+
},
|
|
93
|
+
async lookupFilters(path, method, params, headers) {
|
|
94
|
+
const upper = method.toUpperCase();
|
|
95
|
+
const resolved = resolvePathParams(path, params);
|
|
96
|
+
if (upper === "GET") {
|
|
97
|
+
const requestUrl = appendQuery(resolved.path, { ...resolved.params, __lookup: "filters" });
|
|
98
|
+
const response2 = await request(requestUrl, "GET", {
|
|
99
|
+
headers: { Accept: "application/json+clicky", ...headers ?? {} }
|
|
100
|
+
});
|
|
101
|
+
if (response2.status === 404) return { filters: {} };
|
|
102
|
+
const parsed2 = await readResponseBody(response2, "json");
|
|
103
|
+
if (!response2.ok) throw errorFromResponse(response2, "GET", requestUrl, parsed2);
|
|
104
|
+
return parsed2.data ?? { filters: {} };
|
|
105
|
+
}
|
|
106
|
+
const response = await request(appendQuery(resolved.path, { __lookup: "filters" }), upper, {
|
|
107
|
+
headers: {
|
|
108
|
+
Accept: "application/json+clicky",
|
|
109
|
+
"Content-Type": "application/json",
|
|
110
|
+
...headers ?? {}
|
|
111
|
+
},
|
|
112
|
+
body: JSON.stringify(resolved.params)
|
|
113
|
+
});
|
|
114
|
+
if (response.status === 404) return { filters: {} };
|
|
115
|
+
const parsed = await readResponseBody(response, "json");
|
|
116
|
+
if (!response.ok) throw errorFromResponse(response, upper, resolved.path, parsed);
|
|
117
|
+
return parsed.data ?? { filters: {} };
|
|
118
|
+
},
|
|
119
|
+
async lookupFilterOptions(path, method, filterKey, query) {
|
|
120
|
+
var _a, _b;
|
|
121
|
+
const upper = method.toUpperCase();
|
|
122
|
+
const resolved = resolvePathParams(path, {});
|
|
123
|
+
const queryParams = {
|
|
124
|
+
__lookup: "filters",
|
|
125
|
+
__lookup_filter: filterKey,
|
|
126
|
+
__lookup_q: query
|
|
127
|
+
};
|
|
128
|
+
const requestPath = appendQuery(resolved.path, queryParams);
|
|
129
|
+
const response = await request(requestPath, upper, {
|
|
130
|
+
headers: { Accept: "application/json+clicky" }
|
|
131
|
+
});
|
|
132
|
+
const parsed = await readResponseBody(response, "json");
|
|
133
|
+
if (!response.ok) throw errorFromResponse(response, upper, requestPath, parsed);
|
|
134
|
+
return ((_b = (_a = parsed.data) == null ? void 0 : _a.filters) == null ? void 0 : _b[filterKey]) ?? {};
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function responseKind(accept) {
|
|
139
|
+
if (!accept) return "json";
|
|
140
|
+
const normalized = accept.toLowerCase();
|
|
141
|
+
if (normalized.includes("application/pdf")) return "blob";
|
|
142
|
+
if (normalized.includes("text/") || normalized.includes("application/x-yaml") || normalized.includes("application/yaml")) {
|
|
143
|
+
return "text";
|
|
144
|
+
}
|
|
145
|
+
return "json";
|
|
146
|
+
}
|
|
147
|
+
async function readResponseBody(response, kind) {
|
|
148
|
+
const contentType = response.headers.get("Content-Type") || "";
|
|
149
|
+
if (kind === "blob") {
|
|
150
|
+
const blob = await response.blob();
|
|
151
|
+
return { data: void 0, text: "[binary]", blob, contentType };
|
|
152
|
+
}
|
|
153
|
+
const text = await response.text();
|
|
154
|
+
if (kind === "text" || !shouldParseJson(text, contentType)) {
|
|
155
|
+
return { data: text, text, contentType };
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
return { data: JSON.parse(text), text, contentType };
|
|
159
|
+
} catch {
|
|
160
|
+
return { data: text, text, contentType };
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function parseExecutionResponse(response, parsed, context) {
|
|
164
|
+
const headers = responseHeaders(response.headers);
|
|
165
|
+
const data = parsed.data;
|
|
166
|
+
const stdout = parsed.blob != null ? "[binary]" : typeof data === "string" ? data : parsed.text || JSON.stringify(data, null, 2);
|
|
167
|
+
const clickyEnvelope = isClickyEnvelope(data);
|
|
168
|
+
if (!response.ok && !clickyEnvelope) {
|
|
169
|
+
throw errorFromResponse(response, context.method, context.requestUrl, parsed);
|
|
170
|
+
}
|
|
171
|
+
const clickyError = errorFromClickyEnvelope(data);
|
|
172
|
+
const successHeader = headers["x-execution-success"];
|
|
173
|
+
const success = successHeader == null ? response.ok && !clickyError : successHeader !== "false";
|
|
174
|
+
const exitCode = parseInt(headers["x-exit-code"] ?? (success ? "0" : "1"), 10);
|
|
175
|
+
const cli = headers["x-cli-command"];
|
|
176
|
+
const error = headers["x-error"] || clickyError;
|
|
177
|
+
return {
|
|
178
|
+
success,
|
|
179
|
+
stdout,
|
|
180
|
+
output: stdout,
|
|
181
|
+
exit_code: Number.isFinite(exitCode) ? exitCode : success ? 0 : 1,
|
|
182
|
+
contentType: parsed.contentType || headers["content-type"] || "application/json",
|
|
183
|
+
requestUrl: context.requestUrl,
|
|
184
|
+
...cli ? { cli } : {},
|
|
185
|
+
...error ? { error } : {},
|
|
186
|
+
...parsed.blob ? { blob: parsed.blob } : {},
|
|
187
|
+
...parsed.blob == null && typeof data !== "string" ? { parsed: data } : {}
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function errorFromResponse(response, method, url, parsed) {
|
|
191
|
+
const headers = responseHeaders(response.headers);
|
|
192
|
+
const message = headers["x-error"] || messageFromBody(parsed.data) || `${method} ${url} failed with ${response.status}: ${parsed.text || response.statusText}`;
|
|
193
|
+
return new OperationsApiClientError(message, {
|
|
194
|
+
status: response.status,
|
|
195
|
+
method,
|
|
196
|
+
url,
|
|
197
|
+
responseBody: parsed.text,
|
|
198
|
+
responseData: parsed.data,
|
|
199
|
+
responseHeaders: headers
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
function resolvePathParams(path, params) {
|
|
203
|
+
const queryParams = { ...params };
|
|
204
|
+
let resolvedPath = path;
|
|
205
|
+
const placeholders = [...path.matchAll(/\{([^}]+)\}/g)].map((match) => match[1]).filter((name) => Boolean(name));
|
|
206
|
+
const argValues = parseArgsParam(params.args);
|
|
207
|
+
let consumedArgs = false;
|
|
208
|
+
const consumedDirectValues = [];
|
|
209
|
+
for (const [index, name] of placeholders.entries()) {
|
|
210
|
+
const directValue = queryParams[name];
|
|
211
|
+
const fallbackValue = directValue || argValues[index];
|
|
212
|
+
if (!fallbackValue) continue;
|
|
213
|
+
resolvedPath = resolvedPath.replace(`{${name}}`, encodeURIComponent(fallbackValue));
|
|
214
|
+
delete queryParams[name];
|
|
215
|
+
if (!directValue && argValues[index]) consumedArgs = true;
|
|
216
|
+
if (directValue) consumedDirectValues[index] = directValue;
|
|
217
|
+
}
|
|
218
|
+
const argsDuplicateResolvedPath = argValues.length > 0 && argValues.length === consumedDirectValues.filter(Boolean).length && argValues.every((value, index) => value === consumedDirectValues[index]);
|
|
219
|
+
if (consumedArgs || argsDuplicateResolvedPath) {
|
|
220
|
+
delete queryParams.args;
|
|
221
|
+
}
|
|
222
|
+
return { path: resolvedPath, params: stripRunnerParams(queryParams) };
|
|
223
|
+
}
|
|
224
|
+
function parseArgsParam(value) {
|
|
225
|
+
if (!value) return [];
|
|
226
|
+
const trimmed = value.trim();
|
|
227
|
+
if (!trimmed || trimmed === "[]" || trimmed.toLowerCase() === "null") return [];
|
|
228
|
+
try {
|
|
229
|
+
const parsed = JSON.parse(trimmed);
|
|
230
|
+
if (Array.isArray(parsed)) return parsed.map(String).filter(Boolean);
|
|
231
|
+
} catch {
|
|
232
|
+
}
|
|
233
|
+
return trimmed.split(",").map((part) => part.trim()).filter(Boolean);
|
|
234
|
+
}
|
|
235
|
+
function stripRunnerParams(params) {
|
|
236
|
+
const next = { ...params };
|
|
237
|
+
delete next.autoRun;
|
|
238
|
+
delete next.__autoRun;
|
|
239
|
+
return next;
|
|
240
|
+
}
|
|
241
|
+
function appendQuery(path, params) {
|
|
242
|
+
const query = new URLSearchParams(pruneParams(params)).toString();
|
|
243
|
+
if (!query) return path;
|
|
244
|
+
return `${path}${path.includes("?") ? "&" : "?"}${query}`;
|
|
245
|
+
}
|
|
246
|
+
function pruneParams(params) {
|
|
247
|
+
return Object.fromEntries(Object.entries(params).filter(([, value]) => value !== ""));
|
|
248
|
+
}
|
|
249
|
+
function joinUrl(baseUrl, path) {
|
|
250
|
+
if (!baseUrl || /^https?:\/\//i.test(path)) return path;
|
|
251
|
+
return `${baseUrl.replace(/\/+$/, "")}/${path.replace(/^\/+/, "")}`;
|
|
252
|
+
}
|
|
253
|
+
function headerValue(headers, name) {
|
|
254
|
+
const wanted = name.toLowerCase();
|
|
255
|
+
for (const [key, value] of Object.entries(headers ?? {})) {
|
|
256
|
+
if (key.toLowerCase() === wanted) return value;
|
|
257
|
+
}
|
|
258
|
+
return void 0;
|
|
259
|
+
}
|
|
260
|
+
function responseHeaders(headers) {
|
|
261
|
+
const out = {};
|
|
262
|
+
headers.forEach((value, key) => {
|
|
263
|
+
out[key.toLowerCase()] = value;
|
|
264
|
+
});
|
|
265
|
+
return out;
|
|
266
|
+
}
|
|
267
|
+
function shouldParseJson(text, contentType) {
|
|
268
|
+
const trimmed = text.trim();
|
|
269
|
+
return trimmed !== "" && (contentType.toLowerCase().includes("json") || trimmed.startsWith("{") || trimmed.startsWith("["));
|
|
270
|
+
}
|
|
271
|
+
function isClickyEnvelope(data) {
|
|
272
|
+
if (!data || typeof data !== "object") return false;
|
|
273
|
+
const body = data;
|
|
274
|
+
return body.version != null && body.node != null && typeof body.node === "object";
|
|
275
|
+
}
|
|
276
|
+
function readClickyText(node) {
|
|
277
|
+
if (!node || typeof node !== "object") return void 0;
|
|
278
|
+
const n = node;
|
|
279
|
+
if (typeof n.plain === "string" && n.plain !== "") return n.plain;
|
|
280
|
+
if (typeof n.text === "string" && n.text !== "") return n.text;
|
|
281
|
+
if (Array.isArray(n.children)) {
|
|
282
|
+
for (const child of n.children) {
|
|
283
|
+
const text = readClickyText(child);
|
|
284
|
+
if (text) return text;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return void 0;
|
|
288
|
+
}
|
|
289
|
+
function errorFromClickyEnvelope(data) {
|
|
290
|
+
if (!data || typeof data !== "object") return void 0;
|
|
291
|
+
const node = data.node;
|
|
292
|
+
if (!node || typeof node !== "object") return void 0;
|
|
293
|
+
const n = node;
|
|
294
|
+
if (n.kind !== "map" || !Array.isArray(n.fields)) return void 0;
|
|
295
|
+
let errorText;
|
|
296
|
+
let failed = false;
|
|
297
|
+
for (const field of n.fields) {
|
|
298
|
+
if (!field || typeof field !== "object") continue;
|
|
299
|
+
const f = field;
|
|
300
|
+
if (f.name === "Error") errorText = readClickyText(f.value);
|
|
301
|
+
if (f.name === "Success" && readClickyText(f.value) === "false") failed = true;
|
|
302
|
+
}
|
|
303
|
+
return failed ? errorText : void 0;
|
|
304
|
+
}
|
|
305
|
+
function messageFromBody(data) {
|
|
306
|
+
if (!data || typeof data !== "object") return void 0;
|
|
307
|
+
const body = data;
|
|
308
|
+
if (typeof body.error === "string" && body.error) return body.error;
|
|
309
|
+
if (typeof body.message === "string" && body.message) return body.message;
|
|
310
|
+
return errorFromClickyEnvelope(data);
|
|
311
|
+
}
|
|
312
|
+
export {
|
|
313
|
+
OperationsApiClientError,
|
|
314
|
+
createOperationsApiClient
|
|
315
|
+
};
|
|
316
|
+
//# sourceMappingURL=apiClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiClient.js","sources":["../../src/rpc/apiClient.ts"],"sourcesContent":["import type {\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 ): Promise<OperationLookupFilter>;\n executeCommandBody(\n path: 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 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) {\n const upper = method.toUpperCase();\n const resolved = resolvePathParams(path, {});\n const queryParams = {\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\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 ...(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 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOperations.cjs","sources":["../../src/rpc/useOperations.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport type {\n ExecutionResponse,\n OpenAPISpec,\n OperationLookupResponse,\n ResolvedOperation,\n} from \"./types\";\n\nexport interface OperationsApiClient {\n getOpenAPISpec(): Promise<OpenAPISpec>;\n executeCommand(\n path: string,\n method: string,\n params: Record<string, string>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n lookupFilters?(\n path: string,\n method: string,\n params: Record<string, string>,\n headers?: Record<string, string>,\n ): Promise<OperationLookupResponse>;\n}\n\nexport function useOpenAPI(client: OperationsApiClient) {\n return useQuery<OpenAPISpec>({\n queryKey: [\"openapi-spec\"],\n queryFn: () => client.getOpenAPISpec(),\n staleTime: 5 * 60 * 1000,\n });\n}\n\nexport function useOperations(client: OperationsApiClient) {\n const { data: spec, ...rest } = useOpenAPI(client);\n\n const operations: ResolvedOperation[] = [];\n if (spec) {\n for (const [path, methods] of Object.entries(spec.paths)) {\n for (const [method, operation] of Object.entries(methods)) {\n operations.push({ path, method, operation });\n }\n }\n }\n\n return { operations, spec, ...rest };\n}\n\nexport function useOperationById(client: OperationsApiClient, operationId: string | undefined) {\n const { operations, ...rest } = useOperations(client);\n const operation = operationId\n ? operations.find((op) => op.operation.operationId === operationId)\n : undefined;\n return { operation, ...rest };\n}\n"],"names":["useQuery"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"useOperations.cjs","sources":["../../src/rpc/useOperations.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport type {\n ExecutionResponse,\n OpenAPISpec,\n OperationLookupFilter,\n OperationLookupResponse,\n ResolvedOperation,\n} from \"./types\";\n\nexport interface OperationsApiClient {\n getOpenAPISpec(): Promise<OpenAPISpec>;\n executeCommand(\n path: string,\n method: string,\n params: Record<string, string>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n lookupFilters?(\n path: string,\n method: string,\n params: Record<string, string>,\n headers?: Record<string, string>,\n ): Promise<OperationLookupResponse>;\n lookupFilterOptions?(\n path: string,\n method: string,\n filterKey: string,\n query: string,\n ): Promise<OperationLookupFilter>;\n}\n\nexport function useOpenAPI(client: OperationsApiClient) {\n return useQuery<OpenAPISpec>({\n queryKey: [\"openapi-spec\"],\n queryFn: () => client.getOpenAPISpec(),\n staleTime: 5 * 60 * 1000,\n });\n}\n\nexport function useOperations(client: OperationsApiClient) {\n const { data: spec, ...rest } = useOpenAPI(client);\n\n const operations: ResolvedOperation[] = [];\n if (spec) {\n for (const [path, methods] of Object.entries(spec.paths)) {\n for (const [method, operation] of Object.entries(methods)) {\n operations.push({ path, method, operation });\n }\n }\n }\n\n return { operations, spec, ...rest };\n}\n\nexport function useOperationById(client: OperationsApiClient, operationId: string | undefined) {\n const { operations, ...rest } = useOperations(client);\n const operation = operationId\n ? operations.find((op) => op.operation.operationId === operationId)\n : undefined;\n return { operation, ...rest };\n}\n"],"names":["useQuery"],"mappings":";;;AA+BO,SAAS,WAAW,QAA6B;AACtD,SAAOA,oBAAsB;AAAA,IAC3B,UAAU,CAAC,cAAc;AAAA,IACzB,SAAS,MAAM,OAAO,eAAA;AAAA,IACtB,WAAW,IAAI,KAAK;AAAA,EAAA,CACrB;AACH;AAEO,SAAS,cAAc,QAA6B;AACzD,QAAM,EAAE,MAAM,MAAM,GAAG,KAAA,IAAS,WAAW,MAAM;AAEjD,QAAM,aAAkC,CAAA;AACxC,MAAI,MAAM;AACR,eAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;AACxD,iBAAW,CAAC,QAAQ,SAAS,KAAK,OAAO,QAAQ,OAAO,GAAG;AACzD,mBAAW,KAAK,EAAE,MAAM,QAAQ,WAAW;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,MAAM,GAAG,KAAA;AAChC;AAEO,SAAS,iBAAiB,QAA6B,aAAiC;AAC7F,QAAM,EAAE,YAAY,GAAG,KAAA,IAAS,cAAc,MAAM;AACpD,QAAM,YAAY,cACd,WAAW,KAAK,CAAC,OAAO,GAAG,UAAU,gBAAgB,WAAW,IAChE;AACJ,SAAO,EAAE,WAAW,GAAG,KAAA;AACzB;;;;"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { ExecutionResponse, OpenAPISpec, OperationLookupResponse, ResolvedOperation } from './types';
|
|
1
|
+
import { ExecutionResponse, OpenAPISpec, OperationLookupFilter, OperationLookupResponse, ResolvedOperation } from './types';
|
|
2
2
|
export interface OperationsApiClient {
|
|
3
3
|
getOpenAPISpec(): Promise<OpenAPISpec>;
|
|
4
4
|
executeCommand(path: string, method: string, params: Record<string, string>, headers?: Record<string, string>): Promise<ExecutionResponse>;
|
|
5
5
|
lookupFilters?(path: string, method: string, params: Record<string, string>, headers?: Record<string, string>): Promise<OperationLookupResponse>;
|
|
6
|
+
lookupFilterOptions?(path: string, method: string, filterKey: string, query: string): Promise<OperationLookupFilter>;
|
|
6
7
|
}
|
|
7
8
|
export declare function useOpenAPI(client: OperationsApiClient): import('@tanstack/react-query').UseQueryResult<OpenAPISpec, Error>;
|
|
8
9
|
export declare function useOperations(client: OperationsApiClient): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOperations.d.ts","sourceRoot":"","sources":["../../src/rpc/useOperations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,mBAAmB;IAClC,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,cAAc,CACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,aAAa,CAAC,CACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,uBAAuB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useOperations.d.ts","sourceRoot":"","sources":["../../src/rpc/useOperations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,mBAAmB;IAClC,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,cAAc,CACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,aAAa,CAAC,CACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACpC,mBAAmB,CAAC,CAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACnC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,mBAAmB,sEAMrD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaxD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM5F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOperations.js","sources":["../../src/rpc/useOperations.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport type {\n ExecutionResponse,\n OpenAPISpec,\n OperationLookupResponse,\n ResolvedOperation,\n} from \"./types\";\n\nexport interface OperationsApiClient {\n getOpenAPISpec(): Promise<OpenAPISpec>;\n executeCommand(\n path: string,\n method: string,\n params: Record<string, string>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n lookupFilters?(\n path: string,\n method: string,\n params: Record<string, string>,\n headers?: Record<string, string>,\n ): Promise<OperationLookupResponse>;\n}\n\nexport function useOpenAPI(client: OperationsApiClient) {\n return useQuery<OpenAPISpec>({\n queryKey: [\"openapi-spec\"],\n queryFn: () => client.getOpenAPISpec(),\n staleTime: 5 * 60 * 1000,\n });\n}\n\nexport function useOperations(client: OperationsApiClient) {\n const { data: spec, ...rest } = useOpenAPI(client);\n\n const operations: ResolvedOperation[] = [];\n if (spec) {\n for (const [path, methods] of Object.entries(spec.paths)) {\n for (const [method, operation] of Object.entries(methods)) {\n operations.push({ path, method, operation });\n }\n }\n }\n\n return { operations, spec, ...rest };\n}\n\nexport function useOperationById(client: OperationsApiClient, operationId: string | undefined) {\n const { operations, ...rest } = useOperations(client);\n const operation = operationId\n ? operations.find((op) => op.operation.operationId === operationId)\n : undefined;\n return { operation, ...rest };\n}\n"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"useOperations.js","sources":["../../src/rpc/useOperations.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport type {\n ExecutionResponse,\n OpenAPISpec,\n OperationLookupFilter,\n OperationLookupResponse,\n ResolvedOperation,\n} from \"./types\";\n\nexport interface OperationsApiClient {\n getOpenAPISpec(): Promise<OpenAPISpec>;\n executeCommand(\n path: string,\n method: string,\n params: Record<string, string>,\n headers?: Record<string, string>,\n ): Promise<ExecutionResponse>;\n lookupFilters?(\n path: string,\n method: string,\n params: Record<string, string>,\n headers?: Record<string, string>,\n ): Promise<OperationLookupResponse>;\n lookupFilterOptions?(\n path: string,\n method: string,\n filterKey: string,\n query: string,\n ): Promise<OperationLookupFilter>;\n}\n\nexport function useOpenAPI(client: OperationsApiClient) {\n return useQuery<OpenAPISpec>({\n queryKey: [\"openapi-spec\"],\n queryFn: () => client.getOpenAPISpec(),\n staleTime: 5 * 60 * 1000,\n });\n}\n\nexport function useOperations(client: OperationsApiClient) {\n const { data: spec, ...rest } = useOpenAPI(client);\n\n const operations: ResolvedOperation[] = [];\n if (spec) {\n for (const [path, methods] of Object.entries(spec.paths)) {\n for (const [method, operation] of Object.entries(methods)) {\n operations.push({ path, method, operation });\n }\n }\n }\n\n return { operations, spec, ...rest };\n}\n\nexport function useOperationById(client: OperationsApiClient, operationId: string | undefined) {\n const { operations, ...rest } = useOperations(client);\n const operation = operationId\n ? operations.find((op) => op.operation.operationId === operationId)\n : undefined;\n return { operation, ...rest };\n}\n"],"names":[],"mappings":";AA+BO,SAAS,WAAW,QAA6B;AACtD,SAAO,SAAsB;AAAA,IAC3B,UAAU,CAAC,cAAc;AAAA,IACzB,SAAS,MAAM,OAAO,eAAA;AAAA,IACtB,WAAW,IAAI,KAAK;AAAA,EAAA,CACrB;AACH;AAEO,SAAS,cAAc,QAA6B;AACzD,QAAM,EAAE,MAAM,MAAM,GAAG,KAAA,IAAS,WAAW,MAAM;AAEjD,QAAM,aAAkC,CAAA;AACxC,MAAI,MAAM;AACR,eAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;AACxD,iBAAW,CAAC,QAAQ,SAAS,KAAK,OAAO,QAAQ,OAAO,GAAG;AACzD,mBAAW,KAAK,EAAE,MAAM,QAAQ,WAAW;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,MAAM,GAAG,KAAA;AAChC;AAEO,SAAS,iBAAiB,QAA6B,aAAiC;AAC7F,QAAM,EAAE,YAAY,GAAG,KAAA,IAAS,cAAc,MAAM;AACpD,QAAM,YAAY,cACd,WAAW,KAAK,CAAC,OAAO,GAAG,UAAU,gBAAgB,WAAW,IAChE;AACJ,SAAO,EAAE,WAAW,GAAG,KAAA;AACzB;"}
|
package/dist/rpc.cjs
CHANGED
|
@@ -12,6 +12,7 @@ const OperationEntityPage = require("./rpc/OperationEntityPage.cjs");
|
|
|
12
12
|
const OperationCommandPage = require("./rpc/OperationCommandPage.cjs");
|
|
13
13
|
const EndpointList = require("./rpc/EndpointList.cjs");
|
|
14
14
|
const useOperations = require("./rpc/useOperations.cjs");
|
|
15
|
+
const apiClient = require("./rpc/apiClient.cjs");
|
|
15
16
|
const classify = require("./rpc/classify.cjs");
|
|
16
17
|
const types = require("./rpc/types.cjs");
|
|
17
18
|
exports.OperationCatalog = OperationCatalog.OperationCatalog;
|
|
@@ -30,6 +31,8 @@ exports.EndpointList = EndpointList.EndpointList;
|
|
|
30
31
|
exports.useOpenAPI = useOperations.useOpenAPI;
|
|
31
32
|
exports.useOperationById = useOperations.useOperationById;
|
|
32
33
|
exports.useOperations = useOperations.useOperations;
|
|
34
|
+
exports.OperationsApiClientError = apiClient.OperationsApiClientError;
|
|
35
|
+
exports.createOperationsApiClient = apiClient.createOperationsApiClient;
|
|
33
36
|
exports.filterOperationsByDomain = classify.filterOperationsByDomain;
|
|
34
37
|
exports.findDetailEndpoint = classify.findDetailEndpoint;
|
|
35
38
|
exports.findListEndpoint = classify.findListEndpoint;
|
package/dist/rpc.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rpc.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/rpc.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export { OperationEntityPage, type OperationEntityPageProps } from './rpc/Operat
|
|
|
10
10
|
export { OperationCommandPage, type OperationCommandPageProps } from './rpc/OperationCommandPage';
|
|
11
11
|
export { EndpointList, type EndpointListProps, type RenderLink, type RenderLinkArgs, } from './rpc/EndpointList';
|
|
12
12
|
export { useOpenAPI, useOperations, useOperationById, type OperationsApiClient, } from './rpc/useOperations';
|
|
13
|
+
export { createOperationsApiClient, OperationsApiClientError, type CreateOperationsApiClientOptions, type OperationApiClientContext, type OperationDefaultParams, type OperationHeadersProvider, type SharedOperationsApiClient, } from './rpc/apiClient';
|
|
13
14
|
export { filterOperationsByDomain, findDetailEndpoint, findListEndpoint, normalizeRows, parseJsonBody, } from './rpc/classify';
|
|
14
15
|
export { type ClickyOperationMeta, type ClickySpecMeta, type ClickySurface, isPositionalParam, type DomainDefinition, type ExecutionRequest, type ExecutionResponse, type OpenAPIOperation, type OperationLookupFilter, type OperationLookupFilterType, type OperationLookupResponse, type OpenAPIParameter, type OpenAPISchema, type OpenAPISpec, type ResolvedOperation, } from './rpc/types';
|
|
15
16
|
//# sourceMappingURL=rpc.d.ts.map
|
package/dist/rpc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EACL,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EACL,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,KAAK,gCAAgC,EACrC,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,GAC/B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC"}
|
package/dist/rpc.js
CHANGED
|
@@ -10,6 +10,7 @@ import { OperationEntityPage } from "./rpc/OperationEntityPage.js";
|
|
|
10
10
|
import { OperationCommandPage } from "./rpc/OperationCommandPage.js";
|
|
11
11
|
import { EndpointList } from "./rpc/EndpointList.js";
|
|
12
12
|
import { useOpenAPI, useOperationById, useOperations } from "./rpc/useOperations.js";
|
|
13
|
+
import { OperationsApiClientError, createOperationsApiClient } from "./rpc/apiClient.js";
|
|
13
14
|
import { filterOperationsByDomain, findDetailEndpoint, findListEndpoint, normalizeRows, parseJsonBody } from "./rpc/classify.js";
|
|
14
15
|
import { isPositionalParam } from "./rpc/types.js";
|
|
15
16
|
export {
|
|
@@ -25,7 +26,9 @@ export {
|
|
|
25
26
|
OperationCatalog,
|
|
26
27
|
OperationCommandPage,
|
|
27
28
|
OperationEntityPage,
|
|
29
|
+
OperationsApiClientError,
|
|
28
30
|
VIEW_OPTIONS,
|
|
31
|
+
createOperationsApiClient,
|
|
29
32
|
filterOperationsByDomain,
|
|
30
33
|
findDetailEndpoint,
|
|
31
34
|
findListEndpoint,
|
package/dist/rpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rpc.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
|