apitestcenter 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/THIRD-PARTY-NOTICES-UI.txt +1 -1
  2. package/dist/THIRD-PARTY-NOTICES.txt +1 -1
  3. package/dist/cli.mjs +116 -13
  4. package/dist/ui/404/index.html +1 -1
  5. package/dist/ui/404.html +1 -1
  6. package/dist/ui/__next.__PAGE__.txt +10 -10
  7. package/dist/ui/__next._full.txt +11 -11
  8. package/dist/ui/__next._tree.txt +2 -2
  9. package/dist/ui/_next/static/chunks/{11nxnz4doxir5.js → 13xdai3-mkg7c.js} +61 -60
  10. package/dist/ui/_next/static/chunks/2i7s5kuurlkr6.css +3 -0
  11. package/dist/ui/_next/static/chunks/2od90u8fd_sla.js +18 -0
  12. package/dist/ui/_next/static/chunks/36lx6-56-udwb.js +2 -0
  13. package/dist/ui/_next/static/chunks/3qxq1d9u_kohv.js +1 -0
  14. package/dist/ui/_not-found/__next._full.txt +10 -10
  15. package/dist/ui/_not-found/__next._not-found.__PAGE__.txt +9 -9
  16. package/dist/ui/_not-found/__next._tree.txt +2 -2
  17. package/dist/ui/_not-found/index.html +1 -1
  18. package/dist/ui/_not-found/index.txt +10 -10
  19. package/dist/ui/compare/__next._full.txt +11 -11
  20. package/dist/ui/compare/__next._tree.txt +2 -2
  21. package/dist/ui/compare/__next.compare.__PAGE__.txt +10 -10
  22. package/dist/ui/compare/index.html +1 -1
  23. package/dist/ui/compare/index.txt +11 -11
  24. package/dist/ui/history/__next._full.txt +12 -12
  25. package/dist/ui/history/__next._tree.txt +2 -2
  26. package/dist/ui/history/__next.history.__PAGE__.txt +11 -11
  27. package/dist/ui/history/index.html +1 -1
  28. package/dist/ui/history/index.txt +12 -12
  29. package/dist/ui/index.html +1 -1
  30. package/dist/ui/index.txt +11 -11
  31. package/dist/ui/preview/__next._full.txt +12 -12
  32. package/dist/ui/preview/__next._tree.txt +2 -2
  33. package/dist/ui/preview/__next.preview.__PAGE__.txt +11 -11
  34. package/dist/ui/preview/index.html +1 -1
  35. package/dist/ui/preview/index.txt +12 -12
  36. package/dist/ui/suite/__next._full.txt +11 -11
  37. package/dist/ui/suite/__next._tree.txt +2 -2
  38. package/dist/ui/suite/__next.suite.__PAGE__.txt +10 -10
  39. package/dist/ui/suite/index.html +1 -1
  40. package/dist/ui/suite/index.txt +11 -11
  41. package/dist/ui/tests/__next._full.txt +10 -10
  42. package/dist/ui/tests/__next._tree.txt +2 -2
  43. package/dist/ui/tests/__next.tests.__PAGE__.txt +9 -9
  44. package/dist/ui/tests/index.html +1 -1
  45. package/dist/ui/tests/index.txt +10 -10
  46. package/package.json +1 -1
  47. package/dist/ui/_next/static/chunks/0-898cb98enjv.css +0 -3
  48. package/dist/ui/_next/static/chunks/0e1nwxi9i1ag7.js +0 -1
  49. package/dist/ui/_next/static/chunks/0vkcbl8nakdh1.js +0 -2
  50. package/dist/ui/_next/static/chunks/2xls_z5abvl-5.js +0 -1
  51. /package/dist/ui/_next/static/{BJz1RrA7HqZwUV22DBTCg → C6zMFzDkVqF8IXny_v7JK}/_buildManifest.js +0 -0
  52. /package/dist/ui/_next/static/{BJz1RrA7HqZwUV22DBTCg → C6zMFzDkVqF8IXny_v7JK}/_clientMiddlewareManifest.js +0 -0
  53. /package/dist/ui/_next/static/{BJz1RrA7HqZwUV22DBTCg → C6zMFzDkVqF8IXny_v7JK}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- APITestCenter CLI 0.8.0 — notices for the app screens in dist/ui (used by `atc ui`)
1
+ APITestCenter CLI 0.9.0 — notices for the app screens in dist/ui (used by `atc ui`)
2
2
 
3
3
  ==============================================================================
4
4
  @babel/runtime 7.29.7 — MIT
@@ -1,4 +1,4 @@
1
- APITestCenter CLI 0.8.0 — third-party notices
1
+ APITestCenter CLI 0.9.0 — third-party notices
2
2
 
3
3
  This package bundles the open-source packages below. k6 (AGPL-3.0) is not bundled: if it is
4
4
  not installed, the CLI downloads the unmodified official release from github.com/grafana/k6.
package/dist/cli.mjs CHANGED
@@ -16070,7 +16070,7 @@ function checkLabel(check2) {
16070
16070
  case "body":
16071
16071
  return `body ${check2.op === "contains" ? "contains" : "does not contain"} "${clip(check2.value)}"`;
16072
16072
  case "json":
16073
- return check2.op === "exists" ? `${jsonPathLabel(check2.path)} exists` : `${jsonPathLabel(check2.path)} ${check2.op === "equals" ? "=" : check2.op === "not_equals" ? "\u2260" : "contains"} "${clip(check2.value)}"`;
16073
+ return check2.op === "exists" || check2.op === "not_exists" ? `${jsonPathLabel(check2.path)} ${check2.op === "exists" ? "exists" : "does not exist"}` : `${jsonPathLabel(check2.path)} ${check2.op === "equals" ? "=" : check2.op === "not_equals" ? "\u2260" : "contains"} "${clip(check2.value)}"`;
16074
16074
  case "header":
16075
16075
  return check2.op === "exists" ? `header ${check2.name} exists` : `header ${check2.name} ${check2.op === "equals" ? "=" : "contains"} "${clip(check2.value)}"`;
16076
16076
  case "time":
@@ -16115,7 +16115,7 @@ var init_checks3 = __esm({
16115
16115
  external_exports.object({
16116
16116
  type: external_exports.literal("json"),
16117
16117
  path: external_exports.string().min(1).max(300),
16118
- op: external_exports.enum(["exists", "equals", "not_equals", "contains"]),
16118
+ op: external_exports.enum(["exists", "not_exists", "equals", "not_equals", "contains"]),
16119
16119
  value: external_exports.string().max(2e3).default("")
16120
16120
  }).strict(),
16121
16121
  external_exports.object({
@@ -16178,6 +16178,7 @@ function __atcCheck(check, res) {
16178
16178
  try { parsed = JSON.parse(res.body); } catch (e) { return false; }
16179
16179
  var got = __atcJsonGet(parsed, check.path);
16180
16180
  if (check.op === "exists") return got.found;
16181
+ if (check.op === "not_exists") return !got.found;
16181
16182
  if (!got.found) return check.op === "not_equals";
16182
16183
  var text = __atcAsText(got.value);
16183
16184
  if (check.op === "equals") return text === check.value;
@@ -24098,6 +24099,10 @@ function defaultRequestDraft() {
24098
24099
  params: [],
24099
24100
  headers: [],
24100
24101
  bodyMode: "none",
24102
+ graphqlQuery: "",
24103
+ graphqlVariables: "",
24104
+ graphqlOperation: "",
24105
+ graphqlErrorsFail: true,
24101
24106
  bodyText: "",
24102
24107
  authMode: "inherit",
24103
24108
  oauth: defaultOAuth(),
@@ -24157,7 +24162,7 @@ function requestFromUnknown(value) {
24157
24162
  const base = defaultRequestDraft();
24158
24163
  if (!value || typeof value !== "object") return base;
24159
24164
  const item = value;
24160
- const bodyMode = item.bodyMode === "json" || item.bodyMode === "text" ? item.bodyMode : "none";
24165
+ const bodyMode = item.bodyMode === "json" || item.bodyMode === "text" || item.bodyMode === "graphql" ? item.bodyMode : "none";
24161
24166
  const authMode2 = item.authMode === "bearer" || item.authMode === "basic" || item.authMode === "api_key" || item.authMode === "inherit" || item.authMode === "oauth2" || item.authMode === "digest" || item.authMode === "ntlm" || item.authMode === "aws_sigv4" || item.authMode === "jwt" || item.authMode === "oauth1" ? item.authMode : item.authMode === void 0 ? "inherit" : "none";
24162
24167
  return {
24163
24168
  method: METHODS.includes(item.method) ? item.method : "GET",
@@ -24168,6 +24173,10 @@ function requestFromUnknown(value) {
24168
24173
  headers: rows(item.headers),
24169
24174
  bodyMode,
24170
24175
  bodyText: str(item.bodyText, ""),
24176
+ graphqlQuery: str(item.graphqlQuery, ""),
24177
+ graphqlVariables: str(item.graphqlVariables, ""),
24178
+ graphqlOperation: str(item.graphqlOperation, ""),
24179
+ graphqlErrorsFail: item.graphqlErrorsFail !== false,
24171
24180
  authMode: authMode2,
24172
24181
  oauth: oauthFromUnknown(item.oauth),
24173
24182
  oauth1: oauth1FromUnknown(item.oauth1),
@@ -24300,6 +24309,17 @@ function requestParts(draft) {
24300
24309
  if (bare) throw new Error(`Put quotes around {{${bare}}} in the JSON body \u2014 values from test data and run-first steps are filled in as text`);
24301
24310
  throw new Error(`Body is not valid JSON: ${err instanceof Error ? err.message : "parse error"}`);
24302
24311
  }
24312
+ } else if (hasBody(draft.method) && draft.bodyMode === "graphql") {
24313
+ if (!draft.graphqlQuery.trim()) throw new Error("Write the GraphQL query");
24314
+ let variables = {};
24315
+ if (draft.graphqlVariables.trim()) {
24316
+ try {
24317
+ variables = JSON.parse(draft.graphqlVariables);
24318
+ } catch (err) {
24319
+ throw new Error(`GraphQL variables are not valid JSON: ${err instanceof Error ? err.message : "parse error"} \u2014 put quotes around "{{values}}" from test data`);
24320
+ }
24321
+ }
24322
+ body = { mode: "json", json: { query: draft.graphqlQuery, variables, ...draft.graphqlOperation.trim() ? { operationName: draft.graphqlOperation.trim() } : {} } };
24303
24323
  } else if (hasBody(draft.method) && draft.bodyMode === "text") {
24304
24324
  body = { mode: "text", text: draft.bodyText };
24305
24325
  }
@@ -24311,7 +24331,11 @@ function requestParts(draft) {
24311
24331
  headers: draft.headers.filter((h) => h.key.trim()),
24312
24332
  body,
24313
24333
  expectedStatus: [],
24314
- checks: usableChecks(draft.checks)
24334
+ // GraphQL answers 200 even when the query failed; "errors" in the answer is the failure.
24335
+ checks: [
24336
+ ...usableChecks(draft.checks),
24337
+ ...hasBody(draft.method) && draft.bodyMode === "graphql" && draft.graphqlErrorsFail ? [{ type: "json", path: "errors", op: "not_exists", value: "" }] : []
24338
+ ]
24315
24339
  },
24316
24340
  auth,
24317
24341
  options: {
@@ -24462,6 +24486,8 @@ var init_draft = __esm({
24462
24486
  "params",
24463
24487
  "headers",
24464
24488
  "bodyText",
24489
+ "graphqlQuery",
24490
+ "graphqlVariables",
24465
24491
  "token",
24466
24492
  "username",
24467
24493
  "password",
@@ -25679,6 +25705,13 @@ function __atcOAuth1(method, url, headers, body) {
25679
25705
  }
25680
25706
  });
25681
25707
 
25708
+ // ../shared/src/graphql.ts
25709
+ var init_graphql = __esm({
25710
+ "../shared/src/graphql.ts"() {
25711
+ "use strict";
25712
+ }
25713
+ });
25714
+
25682
25715
  // ../shared/src/export-fields.ts
25683
25716
  function roundN(n, digits = 2) {
25684
25717
  if (!Number.isFinite(n)) return 0;
@@ -26636,6 +26669,7 @@ var init_src = __esm({
26636
26669
  init_ci_templates();
26637
26670
  init_sigv4();
26638
26671
  init_oauth1();
26672
+ init_graphql();
26639
26673
  init_latency_bins();
26640
26674
  init_checks3();
26641
26675
  init_definition();
@@ -73162,6 +73196,17 @@ async function runProbe(input) {
73162
73196
  const saved = parsed.save?.length && !sent.result.error ? takeValues(parsed.save, sent) : void 0;
73163
73197
  return { ...sent.result, setup, dataRow: parsed.data ? { row: 1, of: parsed.data.rows.length } : void 0, saved };
73164
73198
  }
73199
+ async function probeFull(input) {
73200
+ const parsed = parseLab(input);
73201
+ let vars = {};
73202
+ if (parsed.setup) {
73203
+ const step = await runSetupStep(parsed.setup);
73204
+ if (!step.result.ok) return { status: 0, body: "", error: step.result.error };
73205
+ vars = step.vars;
73206
+ }
73207
+ const sent = await sendOnce(fillLab(parsed, vars));
73208
+ return { status: sent.result.status, body: sent.raw.slice(0, 2e7), error: sent.result.error };
73209
+ }
73165
73210
  function takeValues(rules, sent) {
73166
73211
  const res = { status: sent.result.status, headers: sent.lowered, body: sent.raw, durationMs: sent.result.durationMs };
73167
73212
  return rules.map((rule) => {
@@ -112123,6 +112168,8 @@ async function routes(api) {
112123
112168
  status: "ok",
112124
112169
  service: "engine",
112125
112170
  version: appVersion,
112171
+ // "cli": started by `atc ui` — the screens say so when it stops.
112172
+ host: process.env.ATC_HOST ?? (uiDir ? "desktop" : "dev"),
112126
112173
  persistence: "files",
112127
112174
  dataDir: history.dir,
112128
112175
  k6: await detectK6(root),
@@ -112149,6 +112196,13 @@ async function routes(api) {
112149
112196
  return usage.setEnabled(request3.body.enabled);
112150
112197
  });
112151
112198
  await api.register(async (demo) => registerDemoApi(demo), { prefix: "/demo-api", logLevel: "warn" });
112199
+ api.post("/graphql/introspect", async (request3, reply) => {
112200
+ try {
112201
+ return await probeFull(request3.body);
112202
+ } catch (err) {
112203
+ return reply.code(400).send({ error: err instanceof Error ? err.message : "invalid request" });
112204
+ }
112205
+ });
112152
112206
  api.post("/probe", async (request3, reply) => {
112153
112207
  const parsed = labRequestSchema.safeParse(request3.body);
112154
112208
  if (!parsed.success) {
@@ -112304,7 +112358,8 @@ init_src();
112304
112358
  init_draft();
112305
112359
  init_history_store();
112306
112360
  init_k6();
112307
- import { spawn as spawn3 } from "node:child_process";
112361
+ import { spawn as spawn3, spawnSync } from "node:child_process";
112362
+ import { tmpdir as tmpdir3 } from "node:os";
112308
112363
  import { randomUUID as randomUUID7 } from "node:crypto";
112309
112364
  import { existsSync as existsSync2, mkdirSync as mkdirSync2, readdirSync as readdirSync2, writeFileSync as writeFileSync2 } from "node:fs";
112310
112365
  import { readFile as readFile10, writeFile as writeFile9 } from "node:fs/promises";
@@ -112393,11 +112448,12 @@ init_cookies();
112393
112448
  init_workspace_store();
112394
112449
  var repoRoot = resolve4(dirname3(fileURLToPath2(import.meta.url)), "../../..");
112395
112450
  var EXIT = { passed: 0, failed: 1, error: 2 };
112396
- var VERSION = "0.8.0";
112451
+ var VERSION = "0.9.0";
112397
112452
  var HELP = `APITestCenter CLI ${VERSION} \u2014 https://apitestcenter.com/docs/cli-and-ci.html
112398
112453
 
112399
112454
  Usage (apitestcenter, or the short name atc once installed)
112400
- atc ui [collection] Open the app in your browser to build and edit tests
112455
+ atc ui [collection] Open the app in a window to build and edit tests
112456
+ (--browser: a tab in your usual browser; --no-open: just print the address)
112401
112457
  atc init [collection] Start api-tests/ in this repository, with a CI pipeline
112402
112458
  atc suite <collection> [options] Send every request in a collection once and check each one
112403
112459
  atc run <request> [options] Run a load test and exit 0 (passed) / 1 (failed) / 2 (error)
@@ -112482,7 +112538,8 @@ async function main() {
112482
112538
  help: { type: "boolean", short: "h" },
112483
112539
  version: { type: "boolean", short: "v" },
112484
112540
  data: { type: "string" },
112485
- "no-open": { type: "boolean" }
112541
+ "no-open": { type: "boolean" },
112542
+ browser: { type: "boolean" }
112486
112543
  }
112487
112544
  });
112488
112545
  const [command, target] = positionals;
@@ -112500,7 +112557,7 @@ async function main() {
112500
112557
  }
112501
112558
  if (command === "init") return init(target, values.data ?? "api-tests");
112502
112559
  const dataDir = resolveDataDir();
112503
- if (command === "ui") return ui(target, dataDir, values["no-open"] === true);
112560
+ if (command === "ui") return ui(target, dataDir, values["no-open"] === true, values.browser === true);
112504
112561
  const secrets2 = new SecretStore(dataDir);
112505
112562
  const workspace = new WorkspaceStore(dataDir, secrets2);
112506
112563
  useOAuthStore(secrets2);
@@ -112684,9 +112741,9 @@ compared with baseline \u201C${baseline.testName}\u201D (${baseline.startedAt.sl
112684
112741
  if (history2) log(` saved to History in ${dataDir}`);
112685
112742
  return failed ? EXIT.failed : EXIT.passed;
112686
112743
  }
112687
- async function ui(collection, dataDir, noOpen) {
112744
+ async function ui(collection, dataDir, noOpen, inBrowserTab = false) {
112688
112745
  const here = dirname3(fileURLToPath2(import.meta.url));
112689
- const uiDir2 = [resolve4(here, "ui"), resolve4(repoRoot, "apps/web/.next-desktop")].find((d) => existsSync2(resolve4(d, "index.html")));
112746
+ const uiDir2 = [process.env.ATC_UI_DIR, resolve4(here, "ui"), resolve4(repoRoot, "apps/web/.next-desktop")].find((d) => Boolean(d) && existsSync2(resolve4(d, "index.html")));
112690
112747
  if (!uiDir2) fail("this build has no app screens. Use the npm package (npx apitestcenter ui), or run: pnpm --filter @apitestcenter/desktop build:ui");
112691
112748
  Object.assign(process.env, {
112692
112749
  ATC_UI_DIR: uiDir2,
@@ -112697,7 +112754,9 @@ async function ui(collection, dataDir, noOpen) {
112697
112754
  ATC_USAGE_URL: "",
112698
112755
  ATC_NO_DOTENV: "1",
112699
112756
  ATC_NO_READY_LINE: "1",
112700
- ATC_LOG_LEVEL: process.env.ATC_LOG_LEVEL ?? "warn"
112757
+ ATC_LOG_LEVEL: process.env.ATC_LOG_LEVEL ?? "warn",
112758
+ // The screens show "stopped" when this engine goes away (a browser tab can't be closed for them).
112759
+ ATC_HOST: "cli"
112701
112760
  });
112702
112761
  if (!(await resolveK6Bin(repoRoot)).available) {
112703
112762
  const cached3 = cachedK6();
@@ -112712,10 +112771,54 @@ async function ui(collection, dataDir, noOpen) {
112712
112771
  console.log(` tests in: ${dataDir}`);
112713
112772
  console.log(" Saved secrets last until you stop it \u2014 use {{variables}} for tests you commit.");
112714
112773
  console.log(" Press Ctrl+C to stop.");
112715
- if (!noOpen) openBrowser(page2);
112774
+ if (!noOpen) {
112775
+ const win = inBrowserTab ? null : openAppWindow(page2);
112776
+ if (!win) openBrowser(page2);
112777
+ else {
112778
+ console.log(" Closing the window stops it too.");
112779
+ const stop = (why) => {
112780
+ if (why) console.log(why);
112781
+ closeWindow(win);
112782
+ process.exit(EXIT.passed);
112783
+ };
112784
+ process.on("SIGINT", () => stop("\nStopped."));
112785
+ process.on("SIGTERM", () => stop(""));
112786
+ win.on("exit", () => {
112787
+ console.log("Window closed \u2014 stopped.");
112788
+ process.exit(EXIT.passed);
112789
+ });
112790
+ }
112791
+ }
112716
112792
  return new Promise(() => {
112717
112793
  });
112718
112794
  }
112795
+ function findAppBrowser() {
112796
+ const env = process.env;
112797
+ const candidates = process.platform === "win32" ? [env["ProgramFiles(x86)"], env.ProgramFiles, env.LOCALAPPDATA].flatMap(
112798
+ (root2) => root2 ? [`${root2}\\Microsoft\\Edge\\Application\\msedge.exe`, `${root2}\\Google\\Chrome\\Application\\chrome.exe`, `${root2}\\BraveSoftware\\Brave-Browser\\Application\\brave.exe`] : []
112799
+ ) : process.platform === "darwin" ? ["/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", "/Applications/Chromium.app/Contents/MacOS/Chromium", "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"] : ["/usr/bin/microsoft-edge", "/usr/bin/google-chrome", "/usr/bin/google-chrome-stable", "/usr/bin/chromium", "/usr/bin/chromium-browser", "/usr/bin/brave-browser", "/snap/bin/chromium"];
112800
+ return candidates.find((p) => existsSync2(p)) ?? null;
112801
+ }
112802
+ function openAppWindow(url2) {
112803
+ const bin = findAppBrowser();
112804
+ if (!bin) return null;
112805
+ const profile = resolve4(tmpdir3(), "apitestcenter-ui-window");
112806
+ try {
112807
+ const child = spawn3(bin, [`--app=${url2}`, `--user-data-dir=${profile}`, "--no-first-run", "--no-default-browser-check", "--window-size=1440,900"], { stdio: "ignore", windowsHide: false });
112808
+ child.on("error", () => openBrowser(url2));
112809
+ return child;
112810
+ } catch {
112811
+ return null;
112812
+ }
112813
+ }
112814
+ function closeWindow(win) {
112815
+ if (win.exitCode !== null || !win.pid) return;
112816
+ try {
112817
+ if (process.platform === "win32") spawnSync("taskkill", ["/pid", String(win.pid), "/T", "/F"], { stdio: "ignore", windowsHide: true });
112818
+ else win.kill("SIGTERM");
112819
+ } catch {
112820
+ }
112821
+ }
112719
112822
  function openBrowser(url2) {
112720
112823
  const [cmd, args] = process.platform === "win32" ? ["cmd", ["/c", "start", "", url2]] : process.platform === "darwin" ? ["open", [url2]] : ["xdg-open", [url2]];
112721
112824
  try {
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="h-full ibm_plex_sans_324d14c7-module__gA-HIW__variable ibm_plex_mono_1876b2ed-module__4fpJGW__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/0-898cb98enjv.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/41ad2nnyaestx.js"/><script src="/_next/static/chunks/08w_94tt7q8fk.js" async=""></script><script src="/_next/static/chunks/0ezgetg09gtvn.js" async=""></script><script src="/_next/static/chunks/1l0uy37izo74u.js" async=""></script><script src="/_next/static/chunks/turbopack-2kiaj9_7vlslw.js" async=""></script><script src="/_next/static/chunks/2xls_z5abvl-5.js" async="" crossorigin=""></script><script src="/_next/static/chunks/11nxnz4doxir5.js" async="" crossorigin=""></script><script src="/_next/static/chunks/0e1nwxi9i1ag7.js" async="" crossorigin=""></script><meta name="robots" content="noindex"/><title>APITestCenter</title><meta name="description" content="HTTP API performance testing — configure, run, visualize, export."/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="h-full font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","apitestcenter-theme","system",null,["light","dark"],null,true,true)</script><div class="flex h-dvh overflow-hidden"><a href="#main" class="sr-only z-50 rounded-md bg-accent px-3 py-2 text-sm text-canvas focus:not-sr-only focus:fixed focus:top-2 focus:left-2">Skip to content</a><aside aria-label="Main navigation" class="flex h-full shrink-0 flex-col border-r border-line bg-panel transition-[width] duration-150 w-56"><div class="flex items-center border-b border-line justify-between gap-2 px-4 py-4"><a class="min-w-0" aria-label="APITestCenter home" href="/"><span class="block"><span class="block text-sm font-semibold text-ink">APITestCenter</span><span class="block text-xs text-mute">API &amp; performance lab</span></span></a><button type="button" aria-label="Collapse sidebar" aria-expanded="true" class="shrink-0 rounded-md p-1.5 text-mute hover:bg-panel-2 hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left-close" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path><path d="m16 15-3-3 3-3"></path></svg></button></div><nav class="flex flex-1 flex-col gap-0.5 p-3"><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-flask-conical" aria-hidden="true"><path d="M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2"></path><path d="M6.453 15h11.094"></path><path d="M8.5 2h7"></path></svg>Test API</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/suite/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-checks" aria-hidden="true"><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path><path d="M13 6h8"></path><path d="M13 12h8"></path><path d="M13 18h8"></path></svg>Run collection</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/compare/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-compare-arrows" aria-hidden="true"><circle cx="5" cy="6" r="3"></circle><path d="M12 6h5a2 2 0 0 1 2 2v7"></path><path d="m15 9-3-3 3-3"></path><circle cx="19" cy="18" r="3"></circle><path d="M12 18H7a2 2 0 0 1-2-2V9"></path><path d="m9 15 3 3-3 3"></path></svg>Compare</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/history/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-history" aria-hidden="true"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"></path><path d="M3 3v5h5"></path><path d="M12 7v5l4 2"></path></svg>History</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/preview/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-search" aria-hidden="true"><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M4.268 21a2 2 0 0 0 1.727 1H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3"></path><path d="m9 18-1.5-1.5"></path><circle cx="5" cy="14" r="3"></circle></svg>Open report</a></nav><div class="space-y-3 border-t border-line p-4"><button type="button" data-tour="help" title="What the words mean, and the tour" aria-label="Help" class="flex w-full items-center rounded-md border border-line text-xs text-mute hover:border-accent hover:text-ink gap-2 px-2.5 py-1.5"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-question-mark" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><path d="M12 17h.01"></path></svg>Help · what words mean</button><button type="button" title="Command palette (Ctrl+K)" aria-label="Open command palette" class="flex w-full items-center rounded-md border border-line text-xs text-mute hover:border-accent hover:text-ink gap-2 px-2.5 py-1.5"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-command" aria-hidden="true"><path d="M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3"></path></svg>Commands <span class="kbd ml-auto">Ctrl K</span></button><div><div class="grid grid-cols-3 gap-1 rounded-md border border-line bg-panel-2 p-1" role="radiogroup" aria-label="Theme"><button type="button" role="radio" aria-checked="true" aria-label="System" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors bg-panel text-ink shadow-sm"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-monitor" aria-hidden="true"><rect width="20" height="14" x="2" y="3" rx="2"></rect><line x1="8" x2="16" y1="21" y2="21"></line><line x1="12" x2="12" y1="17" y2="21"></line></svg><span>System</span></button><button type="button" role="radio" aria-checked="false" aria-label="Light" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors text-mute hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg><span>Light</span></button><button type="button" role="radio" aria-checked="false" aria-label="Dark" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors text-mute hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg><span>Dark</span></button></div></div><div class="text-xs" role="status"><div class="flex items-center gap-2 text-ink"><span class="h-2 w-2 rounded-full bg-mute" aria-hidden="true"></span>Checking engine</div><div class="mt-1 text-xs leading-snug text-mute">…</div><button type="button" class="mt-1 text-xs text-mute hover:text-accent" title="Version, updates, and where your files are">Development build<!-- --> · About</button></div></div></aside><main id="main" class="flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div><div aria-live="polite" class="pointer-events-none fixed right-4 bottom-4 z-50 flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2"></div><script src="/_next/static/chunks/41ad2nnyaestx.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[87329,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"Providers\"]\n3:I[60459,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"AppShell\"]\n4:I[32428,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"default\"]\n5:I[48549,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"default\"]\n6:I[65709,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[65709,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"ViewportBoundary\"]\nc:I[65709,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"MetadataBoundary\"]\ne:I[49202,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0-898cb98enjv.css\",\"style\"]\n9:X\n0:{\"P\":null,\"c\":[\"\",\"_not-found\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0-898cb98enjv.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/2xls_z5abvl-5.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/11nxnz4doxir5.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/0e1nwxi9i1ag7.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full ibm_plex_sans_324d14c7-module__gA-HIW__variable ibm_plex_mono_1876b2ed-module__4fpJGW__variable\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"h-full font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0-898cb98enjv.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"BJz1RrA7HqZwUV22DBTCg\"}\n9:C\nb:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"APITestCenter\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"HTTP API performance testing — configure, run, visualize, export.\"}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="h-full ibm_plex_sans_324d14c7-module__gA-HIW__variable ibm_plex_mono_1876b2ed-module__4fpJGW__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/2i7s5kuurlkr6.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/41ad2nnyaestx.js"/><script src="/_next/static/chunks/08w_94tt7q8fk.js" async=""></script><script src="/_next/static/chunks/0ezgetg09gtvn.js" async=""></script><script src="/_next/static/chunks/1l0uy37izo74u.js" async=""></script><script src="/_next/static/chunks/turbopack-2kiaj9_7vlslw.js" async=""></script><script src="/_next/static/chunks/3fb2986f7qg9x.js" async="" crossorigin=""></script><script src="/_next/static/chunks/3qxq1d9u_kohv.js" async="" crossorigin=""></script><script src="/_next/static/chunks/2od90u8fd_sla.js" async="" crossorigin=""></script><script src="/_next/static/chunks/13xdai3-mkg7c.js" async="" crossorigin=""></script><meta name="robots" content="noindex"/><title>APITestCenter</title><meta name="description" content="HTTP API performance testing — configure, run, visualize, export."/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="h-full font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","apitestcenter-theme","system",null,["light","dark"],null,true,true)</script><div class="flex h-dvh overflow-hidden"><a href="#main" class="sr-only z-50 rounded-md bg-accent px-3 py-2 text-sm text-canvas focus:not-sr-only focus:fixed focus:top-2 focus:left-2">Skip to content</a><aside aria-label="Main navigation" class="flex h-full shrink-0 flex-col border-r border-line bg-panel transition-[width] duration-150 w-56"><div class="flex items-center border-b border-line justify-between gap-2 px-4 py-4"><a class="min-w-0" aria-label="APITestCenter home" href="/"><span class="block"><span class="block text-sm font-semibold text-ink">APITestCenter</span><span class="block text-xs text-mute">API &amp; performance lab</span></span></a><button type="button" aria-label="Collapse sidebar" aria-expanded="true" class="shrink-0 rounded-md p-1.5 text-mute hover:bg-panel-2 hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left-close" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path><path d="m16 15-3-3 3-3"></path></svg></button></div><nav class="flex flex-1 flex-col gap-0.5 p-3"><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-flask-conical" aria-hidden="true"><path d="M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2"></path><path d="M6.453 15h11.094"></path><path d="M8.5 2h7"></path></svg>Test API</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/suite/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-checks" aria-hidden="true"><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path><path d="M13 6h8"></path><path d="M13 12h8"></path><path d="M13 18h8"></path></svg>Run collection</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/compare/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-compare-arrows" aria-hidden="true"><circle cx="5" cy="6" r="3"></circle><path d="M12 6h5a2 2 0 0 1 2 2v7"></path><path d="m15 9-3-3 3-3"></path><circle cx="19" cy="18" r="3"></circle><path d="M12 18H7a2 2 0 0 1-2-2V9"></path><path d="m9 15 3 3-3 3"></path></svg>Compare</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/history/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-history" aria-hidden="true"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"></path><path d="M3 3v5h5"></path><path d="M12 7v5l4 2"></path></svg>History</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/preview/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-search" aria-hidden="true"><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M4.268 21a2 2 0 0 0 1.727 1H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3"></path><path d="m9 18-1.5-1.5"></path><circle cx="5" cy="14" r="3"></circle></svg>Open report</a></nav><div class="space-y-3 border-t border-line p-4"><button type="button" data-tour="help" title="What the words mean, and the tour" aria-label="Help" class="flex w-full items-center rounded-md border border-line text-xs text-mute hover:border-accent hover:text-ink gap-2 px-2.5 py-1.5"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-question-mark" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><path d="M12 17h.01"></path></svg>Help · what words mean</button><button type="button" title="Command palette (Ctrl+K)" aria-label="Open command palette" class="flex w-full items-center rounded-md border border-line text-xs text-mute hover:border-accent hover:text-ink gap-2 px-2.5 py-1.5"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-command" aria-hidden="true"><path d="M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3"></path></svg>Commands <span class="kbd ml-auto">Ctrl K</span></button><div><div class="grid grid-cols-3 gap-1 rounded-md border border-line bg-panel-2 p-1" role="radiogroup" aria-label="Theme"><button type="button" role="radio" aria-checked="true" aria-label="System" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors bg-panel text-ink shadow-sm"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-monitor" aria-hidden="true"><rect width="20" height="14" x="2" y="3" rx="2"></rect><line x1="8" x2="16" y1="21" y2="21"></line><line x1="12" x2="12" y1="17" y2="21"></line></svg><span>System</span></button><button type="button" role="radio" aria-checked="false" aria-label="Light" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors text-mute hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg><span>Light</span></button><button type="button" role="radio" aria-checked="false" aria-label="Dark" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors text-mute hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg><span>Dark</span></button></div></div><div class="text-xs" role="status"><div class="flex items-center gap-2 text-ink"><span class="h-2 w-2 rounded-full bg-mute" aria-hidden="true"></span>Checking engine</div><div class="mt-1 text-xs leading-snug text-mute">…</div><button type="button" class="mt-1 text-xs text-mute hover:text-accent" title="Version, updates, and where your files are">Development build<!-- --> · About</button></div></div></aside><main id="main" class="flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div><div aria-live="polite" class="pointer-events-none fixed right-4 bottom-4 z-50 flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2"></div><script src="/_next/static/chunks/41ad2nnyaestx.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[87329,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"Providers\"]\n3:I[60459,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"AppShell\"]\n4:I[32428,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"default\"]\n5:I[48549,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"default\"]\n6:I[65709,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[65709,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"ViewportBoundary\"]\nc:I[65709,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"MetadataBoundary\"]\ne:I[49202,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/2i7s5kuurlkr6.css\",\"style\"]\n9:X\n0:{\"P\":null,\"c\":[\"\",\"_not-found\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/2i7s5kuurlkr6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3fb2986f7qg9x.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/2od90u8fd_sla.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/13xdai3-mkg7c.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full ibm_plex_sans_324d14c7-module__gA-HIW__variable ibm_plex_mono_1876b2ed-module__4fpJGW__variable\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"h-full font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/2i7s5kuurlkr6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"C6zMFzDkVqF8IXny_v7JK\"}\n9:C\nb:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"APITestCenter\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"HTTP API performance testing — configure, run, visualize, export.\"}]]\n"])</script></body></html>
package/dist/ui/404.html CHANGED
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="h-full ibm_plex_sans_324d14c7-module__gA-HIW__variable ibm_plex_mono_1876b2ed-module__4fpJGW__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/0-898cb98enjv.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/41ad2nnyaestx.js"/><script src="/_next/static/chunks/08w_94tt7q8fk.js" async=""></script><script src="/_next/static/chunks/0ezgetg09gtvn.js" async=""></script><script src="/_next/static/chunks/1l0uy37izo74u.js" async=""></script><script src="/_next/static/chunks/turbopack-2kiaj9_7vlslw.js" async=""></script><script src="/_next/static/chunks/2xls_z5abvl-5.js" async="" crossorigin=""></script><script src="/_next/static/chunks/11nxnz4doxir5.js" async="" crossorigin=""></script><script src="/_next/static/chunks/0e1nwxi9i1ag7.js" async="" crossorigin=""></script><meta name="robots" content="noindex"/><title>APITestCenter</title><meta name="description" content="HTTP API performance testing — configure, run, visualize, export."/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="h-full font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","apitestcenter-theme","system",null,["light","dark"],null,true,true)</script><div class="flex h-dvh overflow-hidden"><a href="#main" class="sr-only z-50 rounded-md bg-accent px-3 py-2 text-sm text-canvas focus:not-sr-only focus:fixed focus:top-2 focus:left-2">Skip to content</a><aside aria-label="Main navigation" class="flex h-full shrink-0 flex-col border-r border-line bg-panel transition-[width] duration-150 w-56"><div class="flex items-center border-b border-line justify-between gap-2 px-4 py-4"><a class="min-w-0" aria-label="APITestCenter home" href="/"><span class="block"><span class="block text-sm font-semibold text-ink">APITestCenter</span><span class="block text-xs text-mute">API &amp; performance lab</span></span></a><button type="button" aria-label="Collapse sidebar" aria-expanded="true" class="shrink-0 rounded-md p-1.5 text-mute hover:bg-panel-2 hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left-close" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path><path d="m16 15-3-3 3-3"></path></svg></button></div><nav class="flex flex-1 flex-col gap-0.5 p-3"><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-flask-conical" aria-hidden="true"><path d="M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2"></path><path d="M6.453 15h11.094"></path><path d="M8.5 2h7"></path></svg>Test API</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/suite/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-checks" aria-hidden="true"><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path><path d="M13 6h8"></path><path d="M13 12h8"></path><path d="M13 18h8"></path></svg>Run collection</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/compare/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-compare-arrows" aria-hidden="true"><circle cx="5" cy="6" r="3"></circle><path d="M12 6h5a2 2 0 0 1 2 2v7"></path><path d="m15 9-3-3 3-3"></path><circle cx="19" cy="18" r="3"></circle><path d="M12 18H7a2 2 0 0 1-2-2V9"></path><path d="m9 15 3 3-3 3"></path></svg>Compare</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/history/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-history" aria-hidden="true"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"></path><path d="M3 3v5h5"></path><path d="M12 7v5l4 2"></path></svg>History</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/preview/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-search" aria-hidden="true"><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M4.268 21a2 2 0 0 0 1.727 1H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3"></path><path d="m9 18-1.5-1.5"></path><circle cx="5" cy="14" r="3"></circle></svg>Open report</a></nav><div class="space-y-3 border-t border-line p-4"><button type="button" data-tour="help" title="What the words mean, and the tour" aria-label="Help" class="flex w-full items-center rounded-md border border-line text-xs text-mute hover:border-accent hover:text-ink gap-2 px-2.5 py-1.5"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-question-mark" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><path d="M12 17h.01"></path></svg>Help · what words mean</button><button type="button" title="Command palette (Ctrl+K)" aria-label="Open command palette" class="flex w-full items-center rounded-md border border-line text-xs text-mute hover:border-accent hover:text-ink gap-2 px-2.5 py-1.5"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-command" aria-hidden="true"><path d="M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3"></path></svg>Commands <span class="kbd ml-auto">Ctrl K</span></button><div><div class="grid grid-cols-3 gap-1 rounded-md border border-line bg-panel-2 p-1" role="radiogroup" aria-label="Theme"><button type="button" role="radio" aria-checked="true" aria-label="System" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors bg-panel text-ink shadow-sm"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-monitor" aria-hidden="true"><rect width="20" height="14" x="2" y="3" rx="2"></rect><line x1="8" x2="16" y1="21" y2="21"></line><line x1="12" x2="12" y1="17" y2="21"></line></svg><span>System</span></button><button type="button" role="radio" aria-checked="false" aria-label="Light" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors text-mute hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg><span>Light</span></button><button type="button" role="radio" aria-checked="false" aria-label="Dark" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors text-mute hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg><span>Dark</span></button></div></div><div class="text-xs" role="status"><div class="flex items-center gap-2 text-ink"><span class="h-2 w-2 rounded-full bg-mute" aria-hidden="true"></span>Checking engine</div><div class="mt-1 text-xs leading-snug text-mute">…</div><button type="button" class="mt-1 text-xs text-mute hover:text-accent" title="Version, updates, and where your files are">Development build<!-- --> · About</button></div></div></aside><main id="main" class="flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div><div aria-live="polite" class="pointer-events-none fixed right-4 bottom-4 z-50 flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2"></div><script src="/_next/static/chunks/41ad2nnyaestx.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[87329,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"Providers\"]\n3:I[60459,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"AppShell\"]\n4:I[32428,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"default\"]\n5:I[48549,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"default\"]\n6:I[65709,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[65709,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"ViewportBoundary\"]\nc:I[65709,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"MetadataBoundary\"]\ne:I[49202,[\"/_next/static/chunks/2xls_z5abvl-5.js\",\"/_next/static/chunks/11nxnz4doxir5.js\",\"/_next/static/chunks/0e1nwxi9i1ag7.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0-898cb98enjv.css\",\"style\"]\n9:X\n0:{\"P\":null,\"c\":[\"\",\"_not-found\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0-898cb98enjv.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/2xls_z5abvl-5.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/11nxnz4doxir5.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/0e1nwxi9i1ag7.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full ibm_plex_sans_324d14c7-module__gA-HIW__variable ibm_plex_mono_1876b2ed-module__4fpJGW__variable\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"h-full font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0-898cb98enjv.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"BJz1RrA7HqZwUV22DBTCg\"}\n9:C\nb:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"APITestCenter\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"HTTP API performance testing — configure, run, visualize, export.\"}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="h-full ibm_plex_sans_324d14c7-module__gA-HIW__variable ibm_plex_mono_1876b2ed-module__4fpJGW__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/2i7s5kuurlkr6.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/41ad2nnyaestx.js"/><script src="/_next/static/chunks/08w_94tt7q8fk.js" async=""></script><script src="/_next/static/chunks/0ezgetg09gtvn.js" async=""></script><script src="/_next/static/chunks/1l0uy37izo74u.js" async=""></script><script src="/_next/static/chunks/turbopack-2kiaj9_7vlslw.js" async=""></script><script src="/_next/static/chunks/3fb2986f7qg9x.js" async="" crossorigin=""></script><script src="/_next/static/chunks/3qxq1d9u_kohv.js" async="" crossorigin=""></script><script src="/_next/static/chunks/2od90u8fd_sla.js" async="" crossorigin=""></script><script src="/_next/static/chunks/13xdai3-mkg7c.js" async="" crossorigin=""></script><meta name="robots" content="noindex"/><title>APITestCenter</title><meta name="description" content="HTTP API performance testing — configure, run, visualize, export."/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="h-full font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","apitestcenter-theme","system",null,["light","dark"],null,true,true)</script><div class="flex h-dvh overflow-hidden"><a href="#main" class="sr-only z-50 rounded-md bg-accent px-3 py-2 text-sm text-canvas focus:not-sr-only focus:fixed focus:top-2 focus:left-2">Skip to content</a><aside aria-label="Main navigation" class="flex h-full shrink-0 flex-col border-r border-line bg-panel transition-[width] duration-150 w-56"><div class="flex items-center border-b border-line justify-between gap-2 px-4 py-4"><a class="min-w-0" aria-label="APITestCenter home" href="/"><span class="block"><span class="block text-sm font-semibold text-ink">APITestCenter</span><span class="block text-xs text-mute">API &amp; performance lab</span></span></a><button type="button" aria-label="Collapse sidebar" aria-expanded="true" class="shrink-0 rounded-md p-1.5 text-mute hover:bg-panel-2 hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left-close" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path><path d="m16 15-3-3 3-3"></path></svg></button></div><nav class="flex flex-1 flex-col gap-0.5 p-3"><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-flask-conical" aria-hidden="true"><path d="M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2"></path><path d="M6.453 15h11.094"></path><path d="M8.5 2h7"></path></svg>Test API</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/suite/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-checks" aria-hidden="true"><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path><path d="M13 6h8"></path><path d="M13 12h8"></path><path d="M13 18h8"></path></svg>Run collection</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/compare/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-compare-arrows" aria-hidden="true"><circle cx="5" cy="6" r="3"></circle><path d="M12 6h5a2 2 0 0 1 2 2v7"></path><path d="m15 9-3-3 3-3"></path><circle cx="19" cy="18" r="3"></circle><path d="M12 18H7a2 2 0 0 1-2-2V9"></path><path d="m9 15 3 3-3 3"></path></svg>Compare</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/history/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-history" aria-hidden="true"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"></path><path d="M3 3v5h5"></path><path d="M12 7v5l4 2"></path></svg>History</a><a class="flex items-center rounded-md text-sm transition-colors gap-2.5 px-3 py-2 text-mute hover:bg-panel-2 hover:text-ink" href="/preview/"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-search" aria-hidden="true"><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M4.268 21a2 2 0 0 0 1.727 1H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3"></path><path d="m9 18-1.5-1.5"></path><circle cx="5" cy="14" r="3"></circle></svg>Open report</a></nav><div class="space-y-3 border-t border-line p-4"><button type="button" data-tour="help" title="What the words mean, and the tour" aria-label="Help" class="flex w-full items-center rounded-md border border-line text-xs text-mute hover:border-accent hover:text-ink gap-2 px-2.5 py-1.5"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-question-mark" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><path d="M12 17h.01"></path></svg>Help · what words mean</button><button type="button" title="Command palette (Ctrl+K)" aria-label="Open command palette" class="flex w-full items-center rounded-md border border-line text-xs text-mute hover:border-accent hover:text-ink gap-2 px-2.5 py-1.5"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-command" aria-hidden="true"><path d="M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3"></path></svg>Commands <span class="kbd ml-auto">Ctrl K</span></button><div><div class="grid grid-cols-3 gap-1 rounded-md border border-line bg-panel-2 p-1" role="radiogroup" aria-label="Theme"><button type="button" role="radio" aria-checked="true" aria-label="System" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors bg-panel text-ink shadow-sm"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-monitor" aria-hidden="true"><rect width="20" height="14" x="2" y="3" rx="2"></rect><line x1="8" x2="16" y1="21" y2="21"></line><line x1="12" x2="12" y1="17" y2="21"></line></svg><span>System</span></button><button type="button" role="radio" aria-checked="false" aria-label="Light" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors text-mute hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg><span>Light</span></button><button type="button" role="radio" aria-checked="false" aria-label="Dark" disabled="" class="flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors text-mute hover:text-ink"><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg><span>Dark</span></button></div></div><div class="text-xs" role="status"><div class="flex items-center gap-2 text-ink"><span class="h-2 w-2 rounded-full bg-mute" aria-hidden="true"></span>Checking engine</div><div class="mt-1 text-xs leading-snug text-mute">…</div><button type="button" class="mt-1 text-xs text-mute hover:text-accent" title="Version, updates, and where your files are">Development build<!-- --> · About</button></div></div></aside><main id="main" class="flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div><div aria-live="polite" class="pointer-events-none fixed right-4 bottom-4 z-50 flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2"></div><script src="/_next/static/chunks/41ad2nnyaestx.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[87329,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"Providers\"]\n3:I[60459,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"AppShell\"]\n4:I[32428,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"default\"]\n5:I[48549,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"default\"]\n6:I[65709,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[65709,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"ViewportBoundary\"]\nc:I[65709,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"MetadataBoundary\"]\ne:I[49202,[\"/_next/static/chunks/3fb2986f7qg9x.js\",\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"/_next/static/chunks/2od90u8fd_sla.js\",\"/_next/static/chunks/13xdai3-mkg7c.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/2i7s5kuurlkr6.css\",\"style\"]\n9:X\n0:{\"P\":null,\"c\":[\"\",\"_not-found\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/2i7s5kuurlkr6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3fb2986f7qg9x.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/3qxq1d9u_kohv.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/2od90u8fd_sla.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/13xdai3-mkg7c.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full ibm_plex_sans_324d14c7-module__gA-HIW__variable ibm_plex_mono_1876b2ed-module__4fpJGW__variable\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"h-full font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/2i7s5kuurlkr6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"C6zMFzDkVqF8IXny_v7JK\"}\n9:C\nb:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"APITestCenter\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"HTTP API performance testing — configure, run, visualize, export.\"}]]\n"])</script></body></html>