@wandelbots/nova-js 3.13.0-pr.307.dd54f61 → 3.13.0-pr.307.ea0533d

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 (45) hide show
  1. package/dist/{context-ffr5Q2dc.mjs → context-CmXqEEwW.mjs} +86 -3
  2. package/dist/context-CmXqEEwW.mjs.map +1 -0
  3. package/dist/{context-BZELA2eh.cjs → context-Cu5mXcFZ.cjs} +146 -3
  4. package/dist/context-Cu5mXcFZ.cjs.map +1 -0
  5. package/dist/experimental/nats/index.cjs +15 -84
  6. package/dist/experimental/nats/index.cjs.map +1 -1
  7. package/dist/experimental/nats/index.d.cts +10 -95
  8. package/dist/experimental/nats/index.d.cts.map +1 -1
  9. package/dist/experimental/nats/index.d.mts +10 -95
  10. package/dist/experimental/nats/index.d.mts.map +1 -1
  11. package/dist/experimental/nats/index.mjs +16 -84
  12. package/dist/experimental/nats/index.mjs.map +1 -1
  13. package/dist/index.cjs +12 -13
  14. package/dist/index.mjs +2 -3
  15. package/dist/v1/index.cjs +3 -3
  16. package/dist/v1/index.cjs.map +1 -1
  17. package/dist/v1/index.mjs +2 -2
  18. package/dist/v2/index.cjs +3 -4
  19. package/dist/v2/index.cjs.map +1 -1
  20. package/dist/v2/index.d.cts +83 -5
  21. package/dist/v2/index.d.cts.map +1 -1
  22. package/dist/v2/index.d.mts +82 -4
  23. package/dist/v2/index.d.mts.map +1 -1
  24. package/dist/v2/index.mjs +1 -2
  25. package/dist/v2/index.mjs.map +1 -1
  26. package/dist/{wandelscriptUtils-DcY1aLWu.cjs → wandelscriptUtils-BdqeVDCY.cjs} +12 -13
  27. package/dist/{wandelscriptUtils-DcY1aLWu.cjs.map → wandelscriptUtils-BdqeVDCY.cjs.map} +1 -1
  28. package/dist/{wandelscriptUtils-CpUXdLVc.mjs → wandelscriptUtils-CKhiZJsB.mjs} +2 -3
  29. package/dist/{wandelscriptUtils-CpUXdLVc.mjs.map → wandelscriptUtils-CKhiZJsB.mjs.map} +1 -1
  30. package/package.json +1 -1
  31. package/src/experimental/nats/index.ts +0 -3
  32. package/src/lib/experimental/nats/NovaNatsClient.ts +13 -67
  33. package/src/lib/experimental/nats/buildSubject.ts +5 -50
  34. package/src/lib/experimental/nats/generated/operations.ts +4 -64
  35. package/dist/Nova--8gozkLR.d.mts +0 -85
  36. package/dist/Nova--8gozkLR.d.mts.map +0 -1
  37. package/dist/Nova-B1o5iTQ6.d.cts +0 -85
  38. package/dist/Nova-B1o5iTQ6.d.cts.map +0 -1
  39. package/dist/context-BZELA2eh.cjs.map +0 -1
  40. package/dist/context-ffr5Q2dc.mjs.map +0 -1
  41. package/dist/converters-DnG1fX23.mjs +0 -87
  42. package/dist/converters-DnG1fX23.mjs.map +0 -1
  43. package/dist/converters-EYS27XJE.cjs +0 -146
  44. package/dist/converters-EYS27XJE.cjs.map +0 -1
  45. package/src/lib/experimental/nats/buildNatsServerUrl.ts +0 -15
package/dist/index.cjs CHANGED
@@ -1,24 +1,23 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_context = require("./context-BZELA2eh.cjs");
3
- const require_converters = require("./converters-EYS27XJE.cjs");
4
- const require_wandelscriptUtils = require("./wandelscriptUtils-DcY1aLWu.cjs");
2
+ const require_context = require("./context-Cu5mXcFZ.cjs");
3
+ const require_wandelscriptUtils = require("./wandelscriptUtils-BdqeVDCY.cjs");
5
4
  exports.AutoReconnectingWebsocket = require_context.AutoReconnectingWebsocket;
6
5
  exports.NovaClient = require_wandelscriptUtils.NovaClient;
7
- exports.XYZ_TO_VECTOR = require_converters.XYZ_TO_VECTOR;
6
+ exports.XYZ_TO_VECTOR = require_context.XYZ_TO_VECTOR;
8
7
  exports.availableStorage = require_context.availableStorage;
9
- exports.degreesToRadians = require_converters.degreesToRadians;
8
+ exports.degreesToRadians = require_context.degreesToRadians;
10
9
  exports.delay = require_context.delay;
11
10
  exports.getAuth0Config = require_context.getAuth0Config;
12
11
  exports.guardedPageReload = require_context.guardedPageReload;
13
- exports.isSameCoordinateSystem = require_converters.isSameCoordinateSystem;
12
+ exports.isSameCoordinateSystem = require_context.isSameCoordinateSystem;
14
13
  exports.loginWithAuth0 = require_context.loginWithAuth0;
15
14
  exports.makeErrorMessage = require_context.makeErrorMessage;
16
15
  exports.makeShortErrorMessage = require_context.makeShortErrorMessage;
17
- exports.makeUrlQueryString = require_converters.makeUrlQueryString;
18
- exports.parseNovaInstanceUrl = require_converters.parseNovaInstanceUrl;
19
- exports.parseUrl = require_converters.parseUrl;
16
+ exports.makeUrlQueryString = require_context.makeUrlQueryString;
17
+ exports.parseNovaInstanceUrl = require_context.parseNovaInstanceUrl;
18
+ exports.parseUrl = require_context.parseUrl;
20
19
  exports.poseToWandelscriptString = require_wandelscriptUtils.poseToWandelscriptString;
21
- exports.radiansToDegrees = require_converters.radiansToDegrees;
22
- exports.tryParseJson = require_converters.tryParseJson;
23
- exports.tryParseUrl = require_converters.tryParseUrl;
24
- exports.tryStringifyJson = require_converters.tryStringifyJson;
20
+ exports.radiansToDegrees = require_context.radiansToDegrees;
21
+ exports.tryParseJson = require_context.tryParseJson;
22
+ exports.tryParseUrl = require_context.tryParseUrl;
23
+ exports.tryStringifyJson = require_context.tryStringifyJson;
package/dist/index.mjs CHANGED
@@ -1,4 +1,3 @@
1
- import { a as delay, c as makeShortErrorMessage, i as loginWithAuth0, l as availableStorage, o as guardedPageReload, r as getAuth0Config, s as makeErrorMessage, u as AutoReconnectingWebsocket } from "./context-ffr5Q2dc.mjs";
2
- import { a as parseNovaInstanceUrl, c as tryParseJson, i as makeUrlQueryString, l as tryParseUrl, n as degreesToRadians, o as parseUrl, r as isSameCoordinateSystem, s as radiansToDegrees, t as XYZ_TO_VECTOR, u as tryStringifyJson } from "./converters-DnG1fX23.mjs";
3
- import { n as NovaClient, t as poseToWandelscriptString } from "./wandelscriptUtils-CpUXdLVc.mjs";
1
+ import { _ as tryParseUrl, a as delay, b as AutoReconnectingWebsocket, c as makeShortErrorMessage, d as isSameCoordinateSystem, f as makeUrlQueryString, g as tryParseJson, h as radiansToDegrees, i as loginWithAuth0, l as XYZ_TO_VECTOR, m as parseUrl, o as guardedPageReload, p as parseNovaInstanceUrl, r as getAuth0Config, s as makeErrorMessage, u as degreesToRadians, v as tryStringifyJson, y as availableStorage } from "./context-CmXqEEwW.mjs";
2
+ import { n as NovaClient, t as poseToWandelscriptString } from "./wandelscriptUtils-CKhiZJsB.mjs";
4
3
  export { AutoReconnectingWebsocket, NovaClient, XYZ_TO_VECTOR, availableStorage, degreesToRadians, delay, getAuth0Config, guardedPageReload, isSameCoordinateSystem, loginWithAuth0, makeErrorMessage, makeShortErrorMessage, makeUrlQueryString, parseNovaInstanceUrl, parseUrl, poseToWandelscriptString, radiansToDegrees, tryParseJson, tryParseUrl, tryStringifyJson };
package/dist/v1/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_converters = require("../converters-EYS27XJE.cjs");
3
- const require_wandelscriptUtils = require("../wandelscriptUtils-DcY1aLWu.cjs");
2
+ const require_context = require("../context-Cu5mXcFZ.cjs");
3
+ const require_wandelscriptUtils = require("../wandelscriptUtils-BdqeVDCY.cjs");
4
4
  let axios = require("axios");
5
5
  let mobx = require("mobx");
6
6
  //#region src/lib/deprecated/v1/getLatestTrajectories.ts
@@ -50,7 +50,7 @@ var ProgramStateConnection = class {
50
50
  (0, mobx.makeAutoObservable)(this, {}, { autoBind: true });
51
51
  this.programStateSocket = nova.openReconnectingWebsocket(`/programs/state`);
52
52
  this.programStateSocket.addEventListener("message", (ev) => {
53
- const msg = require_converters.tryParseJson(ev.data);
53
+ const msg = require_context.tryParseJson(ev.data);
54
54
  if (!msg) {
55
55
  console.error("Failed to parse program state message", ev.data);
56
56
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["tryParseJson","AxiosError"],"sources":["../../src/lib/deprecated/v1/getLatestTrajectories.ts","../../src/lib/deprecated/v1/ProgramStateConnection.ts"],"sourcesContent":["import type { GetTrajectoryResponse } from \"@wandelbots/nova-api/v1\"\nimport type { NovaCellAPIClient } from \"./NovaCellAPIClient.ts\"\n\nlet lastMotionIds: Set<string> = new Set()\n\n/** @deprecated */\nexport async function getLatestTrajectories(\n apiClient: NovaCellAPIClient,\n sampleTime: number = 50,\n responsesCoordinateSystem?: string,\n): Promise<GetTrajectoryResponse[]> {\n const newTrajectories: GetTrajectoryResponse[] = []\n\n try {\n const motions = await apiClient.motion.listMotions()\n const currentMotionIds = new Set(motions.motions)\n\n const newMotionIds = Array.from(currentMotionIds).filter(\n (id) => !lastMotionIds.has(id),\n )\n\n for (const motionId of newMotionIds) {\n const trajectory = await apiClient.motion.getMotionTrajectory(\n motionId,\n sampleTime,\n responsesCoordinateSystem,\n )\n newTrajectories.push(trajectory)\n }\n\n lastMotionIds = currentMotionIds\n } catch (error) {\n console.error(\"Failed to get latest trajectories:\", error)\n }\n\n return newTrajectories\n}\n","/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type { CollectionValue } from \"@wandelbots/nova-api/v1\"\nimport { AxiosError } from \"axios\"\nimport { makeAutoObservable, runInAction } from \"mobx\"\nimport type { AutoReconnectingWebsocket } from \"../../AutoReconnectingWebsocket.ts\"\nimport { tryParseJson } from \"../../converters.ts\"\nimport type { MotionStreamConnection } from \"./MotionStreamConnection.ts\"\nimport type { NovaClient } from \"./NovaClient.ts\"\n\n/** @deprecated */\nexport type ProgramRunnerLogEntry = {\n timestamp: number\n message: string\n level?: \"warn\" | \"error\"\n}\n\n/** @deprecated */\nexport enum ProgramState {\n NotStarted = \"not started\",\n Running = \"running\",\n Stopped = \"stopped\",\n Failed = \"failed\",\n Completed = \"completed\",\n}\n\n/** @deprecated */\nexport type CurrentProgram = {\n id?: string\n wandelscript?: string\n state?: ProgramState\n}\n\ntype ProgramStateMessage = {\n type: string\n runner: {\n id: string\n state: ProgramState\n start_time?: number | null\n execution_time?: number | null\n }\n}\n\n/**\n * Interface for running Wandelscript programs on the Nova instance and\n * tracking their progress and output\n * @deprecated\n */\nexport class ProgramStateConnection {\n currentProgram: CurrentProgram = {}\n logs: ProgramRunnerLogEntry[] = []\n\n executionState = \"idle\" as \"idle\" | \"starting\" | \"executing\" | \"stopping\"\n currentlyExecutingProgramRunnerId = null as string | null\n\n programStateSocket: AutoReconnectingWebsocket\n\n readonly nova: NovaClient\n\n constructor(nova: NovaClient) {\n this.nova = nova\n makeAutoObservable(this, {}, { autoBind: true })\n\n this.programStateSocket = nova.openReconnectingWebsocket(`/programs/state`)\n\n this.programStateSocket.addEventListener(\"message\", (ev) => {\n const msg = tryParseJson(ev.data)\n\n if (!msg) {\n console.error(\"Failed to parse program state message\", ev.data)\n return\n }\n if (msg.type === \"update\") {\n this.handleProgramStateMessage(msg)\n }\n })\n }\n\n /** Handle a program state update from the backend */\n async handleProgramStateMessage(msg: ProgramStateMessage) {\n const { runner } = msg\n\n // Ignoring other programs for now\n // TODO - show if execution state is busy from another source\n if (runner.id !== this.currentlyExecutingProgramRunnerId) return\n\n if (runner.state === ProgramState.Failed) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n // TODO - wandelengine should send print statements in real time over\n // websocket as well, rather than at the end\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n this.logError(\n `Program runner ${runner.id} failed with error: ${runnerState.error}\\n${runnerState.traceback}`,\n )\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.currentProgram.state = ProgramState.Failed\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Stopped) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n\n this.currentProgram.state = ProgramState.Stopped\n this.log(`Program runner ${runner.id} stopped`)\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Completed) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n this.log(\n `Program runner ${runner.id} finished successfully in ${runner.execution_time?.toFixed(2)} seconds`,\n )\n\n this.currentProgram.state = ProgramState.Completed\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Running) {\n this.currentProgram.state = ProgramState.Running\n this.log(`Program runner ${runner.id} now running`)\n } else if (runner.state !== ProgramState.NotStarted) {\n console.error(runner)\n this.logError(\n `Program runner ${runner.id} entered unexpected state: ${runner.state}`,\n )\n this.currentProgram.state = ProgramState.NotStarted\n this.gotoIdleState()\n }\n }\n\n /** Call when a program is no longer executing */\n gotoIdleState() {\n runInAction(() => {\n this.executionState = \"idle\"\n })\n this.currentlyExecutingProgramRunnerId = null\n }\n\n async executeProgram(\n wandelscript: string,\n initial_state?: { [key: string]: CollectionValue },\n activeRobot?: MotionStreamConnection,\n ) {\n this.currentProgram = {\n wandelscript: wandelscript,\n state: ProgramState.NotStarted,\n }\n\n const { currentProgram: openProgram } = this\n if (!openProgram) return\n runInAction(() => {\n this.executionState = \"starting\"\n })\n\n // Jogging can cause program execution to fail for some time after\n // So we need to explicitly stop jogging before running a program\n if (activeRobot) {\n try {\n await this.nova.api.motionGroupJogging.stopJogging(\n activeRobot.motionGroupId,\n )\n } catch (err) {\n console.error(err)\n }\n }\n\n // WOS-1539: Wandelengine parser currently breaks if there are empty lines with indentation\n const trimmedCode = openProgram.wandelscript!.replaceAll(/^\\s*$/gm, \"\")\n\n try {\n const programRunnerRef = await this.nova.api.program.createProgramRunner(\n {\n code: trimmedCode,\n initial_state: initial_state,\n // @ts-expect-error legacy code - check if param still used\n default_robot: activeRobot?.wandelscriptIdentifier,\n },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n )\n\n this.log(`Created program runner ${programRunnerRef.id}\"`)\n runInAction(() => {\n this.executionState = \"executing\"\n })\n this.currentlyExecutingProgramRunnerId = programRunnerRef.id\n } catch (error) {\n if (error instanceof AxiosError && error.response && error.request) {\n this.logError(\n `${error.response.status} ${error.response.statusText} from ${error.response.config.url} ${JSON.stringify(error.response.data)}`,\n )\n } else {\n this.logError(JSON.stringify(error))\n }\n runInAction(() => {\n this.executionState = \"idle\"\n })\n }\n }\n\n async stopProgram() {\n if (!this.currentlyExecutingProgramRunnerId) return\n runInAction(() => {\n this.executionState = \"stopping\"\n })\n\n try {\n await this.nova.api.program.stopProgramRunner(\n this.currentlyExecutingProgramRunnerId,\n )\n } catch (err) {\n // Reactivate the stop button so user can try again\n runInAction(() => {\n this.executionState = \"executing\"\n })\n throw err\n }\n }\n\n reset() {\n this.currentProgram = {}\n }\n\n log(message: string) {\n console.log(message)\n this.logs.push({\n timestamp: Date.now(),\n message,\n })\n }\n\n logError(message: string) {\n console.log(message)\n this.logs.push({\n timestamp: Date.now(),\n message,\n level: \"error\",\n })\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["tryParseJson","AxiosError"],"sources":["../../src/lib/deprecated/v1/getLatestTrajectories.ts","../../src/lib/deprecated/v1/ProgramStateConnection.ts"],"sourcesContent":["import type { GetTrajectoryResponse } from \"@wandelbots/nova-api/v1\"\nimport type { NovaCellAPIClient } from \"./NovaCellAPIClient.ts\"\n\nlet lastMotionIds: Set<string> = new Set()\n\n/** @deprecated */\nexport async function getLatestTrajectories(\n apiClient: NovaCellAPIClient,\n sampleTime: number = 50,\n responsesCoordinateSystem?: string,\n): Promise<GetTrajectoryResponse[]> {\n const newTrajectories: GetTrajectoryResponse[] = []\n\n try {\n const motions = await apiClient.motion.listMotions()\n const currentMotionIds = new Set(motions.motions)\n\n const newMotionIds = Array.from(currentMotionIds).filter(\n (id) => !lastMotionIds.has(id),\n )\n\n for (const motionId of newMotionIds) {\n const trajectory = await apiClient.motion.getMotionTrajectory(\n motionId,\n sampleTime,\n responsesCoordinateSystem,\n )\n newTrajectories.push(trajectory)\n }\n\n lastMotionIds = currentMotionIds\n } catch (error) {\n console.error(\"Failed to get latest trajectories:\", error)\n }\n\n return newTrajectories\n}\n","/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type { CollectionValue } from \"@wandelbots/nova-api/v1\"\nimport { AxiosError } from \"axios\"\nimport { makeAutoObservable, runInAction } from \"mobx\"\nimport type { AutoReconnectingWebsocket } from \"../../AutoReconnectingWebsocket.ts\"\nimport { tryParseJson } from \"../../converters.ts\"\nimport type { MotionStreamConnection } from \"./MotionStreamConnection.ts\"\nimport type { NovaClient } from \"./NovaClient.ts\"\n\n/** @deprecated */\nexport type ProgramRunnerLogEntry = {\n timestamp: number\n message: string\n level?: \"warn\" | \"error\"\n}\n\n/** @deprecated */\nexport enum ProgramState {\n NotStarted = \"not started\",\n Running = \"running\",\n Stopped = \"stopped\",\n Failed = \"failed\",\n Completed = \"completed\",\n}\n\n/** @deprecated */\nexport type CurrentProgram = {\n id?: string\n wandelscript?: string\n state?: ProgramState\n}\n\ntype ProgramStateMessage = {\n type: string\n runner: {\n id: string\n state: ProgramState\n start_time?: number | null\n execution_time?: number | null\n }\n}\n\n/**\n * Interface for running Wandelscript programs on the Nova instance and\n * tracking their progress and output\n * @deprecated\n */\nexport class ProgramStateConnection {\n currentProgram: CurrentProgram = {}\n logs: ProgramRunnerLogEntry[] = []\n\n executionState = \"idle\" as \"idle\" | \"starting\" | \"executing\" | \"stopping\"\n currentlyExecutingProgramRunnerId = null as string | null\n\n programStateSocket: AutoReconnectingWebsocket\n\n readonly nova: NovaClient\n\n constructor(nova: NovaClient) {\n this.nova = nova\n makeAutoObservable(this, {}, { autoBind: true })\n\n this.programStateSocket = nova.openReconnectingWebsocket(`/programs/state`)\n\n this.programStateSocket.addEventListener(\"message\", (ev) => {\n const msg = tryParseJson(ev.data)\n\n if (!msg) {\n console.error(\"Failed to parse program state message\", ev.data)\n return\n }\n if (msg.type === \"update\") {\n this.handleProgramStateMessage(msg)\n }\n })\n }\n\n /** Handle a program state update from the backend */\n async handleProgramStateMessage(msg: ProgramStateMessage) {\n const { runner } = msg\n\n // Ignoring other programs for now\n // TODO - show if execution state is busy from another source\n if (runner.id !== this.currentlyExecutingProgramRunnerId) return\n\n if (runner.state === ProgramState.Failed) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n // TODO - wandelengine should send print statements in real time over\n // websocket as well, rather than at the end\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n this.logError(\n `Program runner ${runner.id} failed with error: ${runnerState.error}\\n${runnerState.traceback}`,\n )\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.currentProgram.state = ProgramState.Failed\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Stopped) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n\n this.currentProgram.state = ProgramState.Stopped\n this.log(`Program runner ${runner.id} stopped`)\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Completed) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n this.log(\n `Program runner ${runner.id} finished successfully in ${runner.execution_time?.toFixed(2)} seconds`,\n )\n\n this.currentProgram.state = ProgramState.Completed\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Running) {\n this.currentProgram.state = ProgramState.Running\n this.log(`Program runner ${runner.id} now running`)\n } else if (runner.state !== ProgramState.NotStarted) {\n console.error(runner)\n this.logError(\n `Program runner ${runner.id} entered unexpected state: ${runner.state}`,\n )\n this.currentProgram.state = ProgramState.NotStarted\n this.gotoIdleState()\n }\n }\n\n /** Call when a program is no longer executing */\n gotoIdleState() {\n runInAction(() => {\n this.executionState = \"idle\"\n })\n this.currentlyExecutingProgramRunnerId = null\n }\n\n async executeProgram(\n wandelscript: string,\n initial_state?: { [key: string]: CollectionValue },\n activeRobot?: MotionStreamConnection,\n ) {\n this.currentProgram = {\n wandelscript: wandelscript,\n state: ProgramState.NotStarted,\n }\n\n const { currentProgram: openProgram } = this\n if (!openProgram) return\n runInAction(() => {\n this.executionState = \"starting\"\n })\n\n // Jogging can cause program execution to fail for some time after\n // So we need to explicitly stop jogging before running a program\n if (activeRobot) {\n try {\n await this.nova.api.motionGroupJogging.stopJogging(\n activeRobot.motionGroupId,\n )\n } catch (err) {\n console.error(err)\n }\n }\n\n // WOS-1539: Wandelengine parser currently breaks if there are empty lines with indentation\n const trimmedCode = openProgram.wandelscript!.replaceAll(/^\\s*$/gm, \"\")\n\n try {\n const programRunnerRef = await this.nova.api.program.createProgramRunner(\n {\n code: trimmedCode,\n initial_state: initial_state,\n // @ts-expect-error legacy code - check if param still used\n default_robot: activeRobot?.wandelscriptIdentifier,\n },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n )\n\n this.log(`Created program runner ${programRunnerRef.id}\"`)\n runInAction(() => {\n this.executionState = \"executing\"\n })\n this.currentlyExecutingProgramRunnerId = programRunnerRef.id\n } catch (error) {\n if (error instanceof AxiosError && error.response && error.request) {\n this.logError(\n `${error.response.status} ${error.response.statusText} from ${error.response.config.url} ${JSON.stringify(error.response.data)}`,\n )\n } else {\n this.logError(JSON.stringify(error))\n }\n runInAction(() => {\n this.executionState = \"idle\"\n })\n }\n }\n\n async stopProgram() {\n if (!this.currentlyExecutingProgramRunnerId) return\n runInAction(() => {\n this.executionState = \"stopping\"\n })\n\n try {\n await this.nova.api.program.stopProgramRunner(\n this.currentlyExecutingProgramRunnerId,\n )\n } catch (err) {\n // Reactivate the stop button so user can try again\n runInAction(() => {\n this.executionState = \"executing\"\n })\n throw err\n }\n }\n\n reset() {\n this.currentProgram = {}\n }\n\n log(message: string) {\n console.log(message)\n this.logs.push({\n timestamp: Date.now(),\n message,\n })\n }\n\n logError(message: string) {\n console.log(message)\n this.logs.push({\n timestamp: Date.now(),\n message,\n level: \"error\",\n })\n }\n}\n"],"mappings":";;;;;;AAGA,IAAI,gCAA6B,IAAI,IAAI;;AAGzC,eAAsB,sBACpB,WACA,aAAqB,IACrB,2BACkC;CAClC,MAAM,kBAA2C,CAAC;CAElD,IAAI;EACF,MAAM,UAAU,MAAM,UAAU,OAAO,YAAY;EACnD,MAAM,mBAAmB,IAAI,IAAI,QAAQ,OAAO;EAEhD,MAAM,eAAe,MAAM,KAAK,gBAAgB,EAAE,QAC/C,OAAO,CAAC,cAAc,IAAI,EAAE,CAC/B;EAEA,KAAK,MAAM,YAAY,cAAc;GACnC,MAAM,aAAa,MAAM,UAAU,OAAO,oBACxC,UACA,YACA,yBACF;GACA,gBAAgB,KAAK,UAAU;EACjC;EAEA,gBAAgB;CAClB,SAAS,OAAO;EACd,QAAQ,MAAM,sCAAsC,KAAK;CAC3D;CAEA,OAAO;AACT;;;;ACnBA,IAAY,eAAL,yBAAA,cAAA;CACL,aAAA,gBAAA;CACA,aAAA,aAAA;CACA,aAAA,aAAA;CACA,aAAA,YAAA;CACA,aAAA,eAAA;;AACF,EAAA,CAAA,CAAA;;;;;;AAwBA,IAAa,yBAAb,MAAoC;CAClC,iBAAiC,CAAC;CAClC,OAAgC,CAAC;CAEjC,iBAAiB;CACjB,oCAAoC;CAEpC;CAEA;CAEA,YAAY,MAAkB;EAC5B,KAAK,OAAO;EACZ,CAAA,GAAA,KAAA,oBAAmB,MAAM,CAAC,GAAG,EAAE,UAAU,KAAK,CAAC;EAE/C,KAAK,qBAAqB,KAAK,0BAA0B,iBAAiB;EAE1E,KAAK,mBAAmB,iBAAiB,YAAY,OAAO;GAC1D,MAAM,MAAMA,gBAAAA,aAAa,GAAG,IAAI;GAEhC,IAAI,CAAC,KAAK;IACR,QAAQ,MAAM,yCAAyC,GAAG,IAAI;IAC9D;GACF;GACA,IAAI,IAAI,SAAS,UACf,KAAK,0BAA0B,GAAG;EAEtC,CAAC;CACH;;CAGA,MAAM,0BAA0B,KAA0B;EACxD,MAAM,EAAE,WAAW;EAInB,IAAI,OAAO,OAAO,KAAK,mCAAmC;EAE1D,IAAI,OAAO,UAAA,UAA+B;GACxC,IAAI;IACF,MAAM,cAAc,MAAM,KAAK,KAAK,IAAI,QAAQ,iBAC9C,OAAO,EACT;IAIA,MAAM,SAAS,YAAY;IAC3B,IAAI,QACF,KAAK,IAAI,MAAM;IAEjB,KAAK,SACH,kBAAkB,OAAO,GAAG,sBAAsB,YAAY,MAAM,IAAI,YAAY,WACtF;GACF,SAAS,KAAK;IACZ,KAAK,SACH,0CAA0C,OAAO,GAAG,IAAI,KAC1D;GACF;GAEA,KAAK,eAAe,QAAA;GAEpB,KAAK,cAAc;EACrB,OAAO,IAAI,OAAO,UAAA,WAAgC;GAChD,IAAI;IAKF,MAAM,UAAS,MAJW,KAAK,KAAK,IAAI,QAAQ,iBAC9C,OAAO,EACT,GAE2B;IAC3B,IAAI,QACF,KAAK,IAAI,MAAM;IAGjB,KAAK,eAAe,QAAA;IACpB,KAAK,IAAI,kBAAkB,OAAO,GAAG,SAAS;GAChD,SAAS,KAAK;IACZ,KAAK,SACH,0CAA0C,OAAO,GAAG,IAAI,KAC1D;GACF;GAEA,KAAK,cAAc;EACrB,OAAO,IAAI,OAAO,UAAA,aAAkC;GAClD,IAAI;IAKF,MAAM,UAAS,MAJW,KAAK,KAAK,IAAI,QAAQ,iBAC9C,OAAO,EACT,GAE2B;IAC3B,IAAI,QACF,KAAK,IAAI,MAAM;IAEjB,KAAK,IACH,kBAAkB,OAAO,GAAG,4BAA4B,OAAO,gBAAgB,QAAQ,CAAC,EAAE,SAC5F;IAEA,KAAK,eAAe,QAAA;GACtB,SAAS,KAAK;IACZ,KAAK,SACH,0CAA0C,OAAO,GAAG,IAAI,KAC1D;GACF;GAEA,KAAK,cAAc;EACrB,OAAO,IAAI,OAAO,UAAA,WAAgC;GAChD,KAAK,eAAe,QAAA;GACpB,KAAK,IAAI,kBAAkB,OAAO,GAAG,aAAa;EACpD,OAAO,IAAI,OAAO,UAAA,eAAmC;GACnD,QAAQ,MAAM,MAAM;GACpB,KAAK,SACH,kBAAkB,OAAO,GAAG,6BAA6B,OAAO,OAClE;GACA,KAAK,eAAe,QAAA;GACpB,KAAK,cAAc;EACrB;CACF;;CAGA,gBAAgB;EACd,CAAA,GAAA,KAAA,mBAAkB;GAChB,KAAK,iBAAiB;EACxB,CAAC;EACD,KAAK,oCAAoC;CAC3C;CAEA,MAAM,eACJ,cACA,eACA,aACA;EACA,KAAK,iBAAiB;GACN;GACd,OAAA;EACF;EAEA,MAAM,EAAE,gBAAgB,gBAAgB;EACxC,IAAI,CAAC,aAAa;EAClB,CAAA,GAAA,KAAA,mBAAkB;GAChB,KAAK,iBAAiB;EACxB,CAAC;EAID,IAAI,aACF,IAAI;GACF,MAAM,KAAK,KAAK,IAAI,mBAAmB,YACrC,YAAY,aACd;EACF,SAAS,KAAK;GACZ,QAAQ,MAAM,GAAG;EACnB;EAIF,MAAM,cAAc,YAAY,aAAc,WAAW,WAAW,EAAE;EAEtE,IAAI;GACF,MAAM,mBAAmB,MAAM,KAAK,KAAK,IAAI,QAAQ,oBACnD;IACE,MAAM;IACS;IAEf,eAAe,aAAa;GAC9B,GACA,EACE,SAAS,EACP,gBAAgB,mBAClB,EACF,CACF;GAEA,KAAK,IAAI,0BAA0B,iBAAiB,GAAG,EAAE;GACzD,CAAA,GAAA,KAAA,mBAAkB;IAChB,KAAK,iBAAiB;GACxB,CAAC;GACD,KAAK,oCAAoC,iBAAiB;EAC5D,SAAS,OAAO;GACd,IAAI,iBAAiBC,MAAAA,cAAc,MAAM,YAAY,MAAM,SACzD,KAAK,SACH,GAAG,MAAM,SAAS,OAAO,GAAG,MAAM,SAAS,WAAW,QAAQ,MAAM,SAAS,OAAO,IAAI,GAAG,KAAK,UAAU,MAAM,SAAS,IAAI,GAC/H;QAEA,KAAK,SAAS,KAAK,UAAU,KAAK,CAAC;GAErC,CAAA,GAAA,KAAA,mBAAkB;IAChB,KAAK,iBAAiB;GACxB,CAAC;EACH;CACF;CAEA,MAAM,cAAc;EAClB,IAAI,CAAC,KAAK,mCAAmC;EAC7C,CAAA,GAAA,KAAA,mBAAkB;GAChB,KAAK,iBAAiB;EACxB,CAAC;EAED,IAAI;GACF,MAAM,KAAK,KAAK,IAAI,QAAQ,kBAC1B,KAAK,iCACP;EACF,SAAS,KAAK;GAEZ,CAAA,GAAA,KAAA,mBAAkB;IAChB,KAAK,iBAAiB;GACxB,CAAC;GACD,MAAM;EACR;CACF;CAEA,QAAQ;EACN,KAAK,iBAAiB,CAAC;CACzB;CAEA,IAAI,SAAiB;EACnB,QAAQ,IAAI,OAAO;EACnB,KAAK,KAAK,KAAK;GACb,WAAW,KAAK,IAAI;GACpB;EACF,CAAC;CACH;CAEA,SAAS,SAAiB;EACxB,QAAQ,IAAI,OAAO;EACnB,KAAK,KAAK,KAAK;GACb,WAAW,KAAK,IAAI;GACpB;GACA,OAAO;EACT,CAAC;CACH;AACF"}
package/dist/v1/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { c as tryParseJson } from "../converters-DnG1fX23.mjs";
2
- import { a as JoggerConnection, i as MotionStreamConnection, n as NovaClient, o as ConnectedMotionGroup, r as NovaCellAPIClient, t as poseToWandelscriptString } from "../wandelscriptUtils-CpUXdLVc.mjs";
1
+ import { g as tryParseJson } from "../context-CmXqEEwW.mjs";
2
+ import { a as JoggerConnection, i as MotionStreamConnection, n as NovaClient, o as ConnectedMotionGroup, r as NovaCellAPIClient, t as poseToWandelscriptString } from "../wandelscriptUtils-CKhiZJsB.mjs";
3
3
  import { AxiosError } from "axios";
4
4
  import { makeAutoObservable, runInAction } from "mobx";
5
5
  export * from "@wandelbots/nova-api/v1";
package/dist/v2/index.cjs CHANGED
@@ -1,6 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_context = require("../context-BZELA2eh.cjs");
3
- const require_converters = require("../converters-EYS27XJE.cjs");
2
+ const require_context = require("../context-Cu5mXcFZ.cjs");
4
3
  let axios = require("axios");
5
4
  axios = require_context.__toESM(axios, 1);
6
5
  let path_to_regexp = require("path-to-regexp");
@@ -738,7 +737,7 @@ var NovaClient = class {
738
737
  };
739
738
  this.accessToken = config.accessToken || require_context.availableStorage.getString("wbjs.access_token") || null;
740
739
  if (this.config.instanceUrl === "https://mock.example.com") this.mock = new MockNovaInstance();
741
- this.instanceUrl = require_converters.parseNovaInstanceUrl(this.config.instanceUrl);
740
+ this.instanceUrl = require_context.parseNovaInstanceUrl(this.config.instanceUrl);
742
741
  const axiosInstance = axios.default.create({
743
742
  baseURL: new URL("/api/v2", this.instanceUrl).href,
744
743
  headers: require_context.isLocalhostDev ? {} : { "X-Wandelbots-Client": "Wandelbots-Nova-JS-SDK" }
@@ -931,7 +930,7 @@ var Nova = class {
931
930
  this.config = config;
932
931
  this.accessToken = config.accessToken || require_context.availableStorage.getString("wbjs.access_token") || null;
933
932
  if (this.config.instanceUrl === "https://mock.example.com") this.mock = new MockNovaInstance();
934
- this.instanceUrl = require_converters.parseNovaInstanceUrl(this.config.instanceUrl);
933
+ this.instanceUrl = require_context.parseNovaInstanceUrl(this.config.instanceUrl);
935
934
  const axiosInstance = axios.default.create({
936
935
  baseURL: new URL("/api/v2", this.instanceUrl).href,
937
936
  headers: require_context.isLocalhostDev ? {} : { "X-Wandelbots-Client": "Wandelbots-Nova-JS-SDK" }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["SystemApi","CellApi","MotionGroupApi","MotionGroupModelsApi","ControllerApi","ControllerInputsOutputsApi","TrajectoryPlanningApi","TrajectoryExecutionApi","TrajectoryCachingApi","ApplicationApi","JoggingApi","KinematicsApi","BUSInputsOutputsApi","VirtualControllerApi","VirtualControllerBehaviorApi","VirtualControllerInputsOutputsApi","StoreObjectApi","StoreCollisionComponentsApi","StoreCollisionSetupsApi","ProgramApi","LicenseApi","NOVACloudApi","RobotConfigurationsApi","VersionApi","SessionApi","pathToRegexp","AxiosError","availableStorage","parseNovaInstanceUrl","isLocalhostDev","guardedPageReload","loginWithAuth0","AutoReconnectingWebsocket","ApplicationApi","BUSInputsOutputsApi","CellApi","ControllerApi","ControllerInputsOutputsApi","JoggingApi","KinematicsApi","LicenseApi","MotionGroupApi","MotionGroupModelsApi","NOVACloudApi","ProgramApi","RobotConfigurationsApi","SessionApi","StoreCollisionComponentsApi","StoreCollisionSetupsApi","StoreObjectApi","SystemApi","TrajectoryCachingApi","TrajectoryExecutionApi","TrajectoryPlanningApi","VersionApi","VirtualControllerApi","VirtualControllerBehaviorApi","VirtualControllerInputsOutputsApi","availableStorage","parseNovaInstanceUrl","isLocalhostDev","guardedPageReload","loginWithAuth0","AutoReconnectingWebsocket"],"sources":["../../src/lib/deprecated/v2/NovaCellAPIClient.ts","../../src/lib/mock/getCurrentRobotControllerState.ts","../../src/lib/mock/getMotionGroupDescription.ts","../../src/lib/mock/getMotionGroupKinematicModel.ts","../../src/lib/mock/getRobotController.ts","../../src/lib/mock/listCoordinateSystems.ts","../../src/lib/mock/listRobotControllers.ts","../../src/lib/mock/MockNovaInstance.ts","../../src/lib/deprecated/v2/NovaClient.ts","../../src/lib/deprecated/v2/wandelscriptUtils.ts","../../src/lib/NovaAPIClient.ts","../../src/lib/Nova.ts"],"sourcesContent":["/** biome-ignore-all lint/suspicious/noExplicitAny: legacy code */\n/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type {\n BaseAPI,\n Configuration as BaseConfiguration,\n} from \"@wandelbots/nova-api/v2\"\nimport {\n ApplicationApi,\n BUSInputsOutputsApi,\n CellApi,\n ControllerApi,\n ControllerInputsOutputsApi,\n JoggingApi,\n KinematicsApi,\n LicenseApi,\n MotionGroupApi,\n MotionGroupModelsApi,\n NOVACloudApi,\n ProgramApi,\n RobotConfigurationsApi,\n SessionApi,\n StoreCollisionComponentsApi,\n StoreCollisionSetupsApi,\n StoreObjectApi,\n SystemApi,\n TrajectoryCachingApi,\n TrajectoryExecutionApi,\n TrajectoryPlanningApi,\n VersionApi,\n VirtualControllerApi,\n VirtualControllerBehaviorApi,\n VirtualControllerInputsOutputsApi,\n} from \"@wandelbots/nova-api/v2\"\nimport type { AxiosInstance } from \"axios\"\nimport axios from \"axios\"\n\ntype OmitFirstArg<F> = F extends (x: any, ...args: infer P) => infer R\n ? (...args: P) => R\n : never\n\ntype UnwrapAxiosResponseReturn<T> = T extends (...a: any) => any\n ? (\n ...a: Parameters<T>\n ) => Promise<Awaited<ReturnType<T>> extends { data: infer D } ? D : never>\n : never\n\n/** @deprecated Use `NovaAPIClient` instead. */\nexport type WithCellId<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<OmitFirstArg<T[P]>>\n}\n\n/** @deprecated Use `NovaAPIClient` instead. */\nexport type WithUnwrappedAxiosResponse<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<T[P]>\n}\n\n/**\n * API client providing type-safe access to all the Nova API REST endpoints\n * associated with a specific cell id.\n * @deprecated Use `NovaAPIClient` from `@wandelbots/nova-js/v2` instead.\n */\nexport class NovaCellAPIClient {\n readonly system: WithUnwrappedAxiosResponse<SystemApi>\n readonly cell: WithUnwrappedAxiosResponse<CellApi>\n readonly motionGroup: WithCellId<MotionGroupApi>\n readonly motionGroupModels: WithUnwrappedAxiosResponse<MotionGroupModelsApi>\n readonly controller: WithCellId<ControllerApi>\n readonly controllerIOs: WithCellId<ControllerInputsOutputsApi>\n readonly trajectoryPlanning: WithCellId<TrajectoryPlanningApi>\n readonly trajectoryExecution: WithCellId<TrajectoryExecutionApi>\n readonly trajectoryCaching: WithCellId<TrajectoryCachingApi>\n readonly application: WithCellId<ApplicationApi>\n readonly applicationGlobal: WithUnwrappedAxiosResponse<ApplicationApi>\n readonly jogging: WithCellId<JoggingApi>\n readonly kinematics: WithCellId<KinematicsApi>\n readonly busInputsOutputs: WithCellId<BUSInputsOutputsApi>\n readonly virtualController: WithCellId<VirtualControllerApi>\n readonly virtualControllerBehavior: WithCellId<VirtualControllerBehaviorApi>\n readonly virtualControllerIOs: WithCellId<VirtualControllerInputsOutputsApi>\n readonly storeObject: WithCellId<StoreObjectApi>\n readonly storeCollisionComponents: WithCellId<StoreCollisionComponentsApi>\n readonly storeCollisionSetups: WithCellId<StoreCollisionSetupsApi>\n readonly program: WithCellId<ProgramApi>\n readonly license: WithUnwrappedAxiosResponse<LicenseApi>\n readonly novaCloud: WithUnwrappedAxiosResponse<NOVACloudApi>\n readonly robotConfigurations: WithUnwrappedAxiosResponse<RobotConfigurationsApi>\n readonly version: WithUnwrappedAxiosResponse<VersionApi>\n readonly session: WithUnwrappedAxiosResponse<SessionApi>\n\n readonly cellId: string\n readonly opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n }\n\n constructor(\n cellId: string,\n opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n },\n ) {\n this.cellId = cellId\n this.opts = opts\n this.system = this.withUnwrappedResponsesOnly(SystemApi)\n this.cell = this.withUnwrappedResponsesOnly(CellApi)\n this.motionGroup = this.withCellId(MotionGroupApi)\n this.motionGroupModels =\n this.withUnwrappedResponsesOnly(MotionGroupModelsApi)\n this.controller = this.withCellId(ControllerApi)\n this.controllerIOs = this.withCellId(ControllerInputsOutputsApi)\n this.trajectoryPlanning = this.withCellId(TrajectoryPlanningApi)\n this.trajectoryExecution = this.withCellId(TrajectoryExecutionApi)\n this.trajectoryCaching = this.withCellId(TrajectoryCachingApi)\n this.application = this.withCellId(ApplicationApi)\n this.applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi)\n this.jogging = this.withCellId(JoggingApi)\n this.kinematics = this.withCellId(KinematicsApi)\n this.busInputsOutputs = this.withCellId(BUSInputsOutputsApi)\n this.virtualController = this.withCellId(VirtualControllerApi)\n this.virtualControllerBehavior = this.withCellId(\n VirtualControllerBehaviorApi,\n )\n this.virtualControllerIOs = this.withCellId(\n VirtualControllerInputsOutputsApi,\n )\n this.storeObject = this.withCellId(StoreObjectApi)\n this.storeCollisionComponents = this.withCellId(StoreCollisionComponentsApi)\n this.storeCollisionSetups = this.withCellId(StoreCollisionSetupsApi)\n this.program = this.withCellId(ProgramApi)\n this.license = this.withUnwrappedResponsesOnly(LicenseApi)\n this.novaCloud = this.withUnwrappedResponsesOnly(NOVACloudApi)\n this.robotConfigurations = this.withUnwrappedResponsesOnly(\n RobotConfigurationsApi,\n )\n this.version = this.withUnwrappedResponsesOnly(VersionApi)\n this.session = this.withUnwrappedResponsesOnly(SessionApi)\n }\n\n /**\n * Some TypeScript sorcery which alters the API class methods so you don't\n * have to pass the cell id to every single one, and de-encapsulates the\n * response data\n */\n private withCellId<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n ) {\n const apiClient = new ApiConstructor(\n {\n ...this.opts,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n },\n this.opts.basePath ?? \"\",\n this.opts.axiosInstance ?? axios.create(),\n ) as {\n [key: string | symbol]: any\n }\n\n for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient)!)) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key]\n apiClient[key] = (...args: any[]) => {\n return originalFunction\n .apply(apiClient, [this.cellId, ...args])\n .then((res: any) => res.data)\n }\n }\n }\n\n return apiClient as WithCellId<T>\n }\n\n /**\n * As withCellId, but only does the response unwrapping\n */\n private withUnwrappedResponsesOnly<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n ) {\n const apiClient = new ApiConstructor(\n {\n ...this.opts,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n },\n this.opts.basePath ?? \"\",\n this.opts.axiosInstance ?? axios.create(),\n ) as {\n [key: string | symbol]: any\n }\n\n for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient)!)) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key]\n apiClient[key] = (...args: any[]) => {\n return originalFunction\n .apply(apiClient, args)\n .then((res: any) => res.data)\n }\n }\n }\n\n return apiClient as WithUnwrappedAxiosResponse<T>\n }\n}\n","export const getCurrentRobotControllerState = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId/state\",\n handle() {\n return {\n mode: \"MODE_CONTROL\",\n last_error: [],\n timestamp: \"2025-10-16T09:19:26.634534092Z\",\n sequence_number: 1054764,\n controller: \"mock-ur5e\",\n operation_mode: \"OPERATION_MODE_AUTO\",\n safety_state: \"SAFETY_STATE_NORMAL\",\n velocity_override: 100,\n motion_groups: [\n {\n timestamp: \"2025-10-16T09:19:26.634534092Z\",\n sequence_number: 1054764,\n motion_group: \"0@mock-ur5e\",\n controller: \"mock-ur5e\",\n joint_position: [\n 1.487959623336792, -1.8501918315887451, 1.8003005981445312,\n 6.034560203552246, 1.4921919107437134, 1.593459963798523,\n ],\n joint_limit_reached: {\n limit_reached: [false, false, false, false, false, false],\n },\n joint_torque: [],\n joint_current: [0, 0, 0, 0, 0, 0],\n flange_pose: {\n position: [\n 107.6452433732927, -409.0402987746852, 524.2402132330305,\n ],\n orientation: [\n 0.9874434028353319, -0.986571714997442, 1.3336589451098142,\n ],\n },\n tcp: \"Flange\",\n tcp_pose: {\n position: [\n 107.6452433732927, -409.0402987746852, 524.2402132330305,\n ],\n orientation: [\n 0.9874434028353319, -0.986571714997442, 1.3336589451098142,\n ],\n },\n payload: \"\",\n coordinate_system: \"\",\n standstill: true,\n },\n ],\n }\n },\n}\n","export const getMotionGroupDescription = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId/motion-groups/:motionGroupId/description\",\n handle() {\n return {\n motion_group_model: \"UniversalRobots_UR5e\",\n mounting: {\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n },\n tcps: {\n Flange: {\n name: \"Default-Flange\",\n pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n },\n },\n },\n payloads: {\n \"FPay-0\": {\n name: \"FPay-0\",\n payload: 0,\n center_of_mass: [0, 0, 0],\n moment_of_inertia: [0, 0, 0],\n },\n },\n cycle_time: 8,\n dh_parameters: [\n {\n alpha: 1.5707963267948966,\n d: 162.25,\n },\n {\n a: -425,\n },\n {\n a: -392.2,\n },\n {\n alpha: 1.5707963267948966,\n d: 133.3,\n },\n {\n alpha: -1.5707963267948966,\n d: 99.7,\n },\n {\n d: 99.6,\n },\n ],\n operation_limits: {\n auto_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n elbow: {\n velocity: 5000,\n },\n flange: {\n velocity: 5000,\n },\n },\n manual_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n },\n manual_t1_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n },\n manual_t2_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n },\n },\n serial_number: \"WBVirtualRobot\",\n }\n },\n}\n","export const getMotionGroupKinematicModel = {\n method: \"GET\",\n path: \"/motion-group-models/:motionGroupModel/kinematic\",\n handle() {\n return {\n dh_parameters: [\n {\n alpha: 1.5707963267948966,\n theta: 0.0,\n a: 0.0,\n d: 162.25,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0.0,\n theta: 0.0,\n a: -425.0,\n d: 0.0,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0.0,\n theta: 0.0,\n a: -392.2,\n d: 0.0,\n reverse_rotation_direction: false,\n },\n {\n alpha: 1.5707963267948966,\n theta: 0.0,\n a: 0.0,\n d: 133.3,\n reverse_rotation_direction: false,\n },\n {\n alpha: -1.5707963267948966,\n theta: 0.0,\n a: 0.0,\n d: 99.7,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0.0,\n theta: 0.0,\n a: 0.0,\n d: 99.6,\n reverse_rotation_direction: false,\n },\n ],\n inverse_solver: \"Universalrobots\",\n }\n },\n}\n","import type { RobotController } from \"@wandelbots/nova-api/v2\"\n\nexport const getRobotController = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId\",\n handle() {\n return {\n configuration: {\n initial_joint_position: \"[0,-1.571,-1.571,-1.571,1.571,-1.571,0]\",\n kind: \"VirtualController\",\n manufacturer: \"universalrobots\",\n type: \"universalrobots-ur5e\",\n },\n name: \"mock-ur5\",\n } satisfies RobotController\n },\n}\n","export const listCoordinateSystems = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId/coordinate-systems\",\n handle() {\n return [\n {\n coordinate_system: \"\",\n name: \"world\",\n reference_coordinate_system: \"\",\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n orientation_type: \"ROTATION_VECTOR\",\n },\n {\n coordinate_system: \"CS-0\",\n name: \"Default-CS\",\n reference_coordinate_system: \"\",\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n orientation_type: \"ROTATION_VECTOR\",\n },\n ]\n },\n}\n","export const listRobotControllers = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers\",\n handle() {\n return [\"mock-ur5e\"]\n },\n}\n","import type { MotionGroupState } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosResponse, InternalAxiosRequestConfig } from \"axios\"\nimport { AxiosError } from \"axios\"\nimport * as pathToRegexp from \"path-to-regexp\"\nimport type { AutoReconnectingWebsocket } from \"../AutoReconnectingWebsocket.ts\"\nimport { getCurrentRobotControllerState } from \"./getCurrentRobotControllerState.ts\"\nimport { getMotionGroupDescription } from \"./getMotionGroupDescription.ts\"\nimport { getMotionGroupKinematicModel } from \"./getMotionGroupKinematicModel.ts\"\nimport { getRobotController } from \"./getRobotController.ts\"\nimport { listCoordinateSystems } from \"./listCoordinateSystems.ts\"\nimport { listRobotControllers } from \"./listRobotControllers.ts\"\n\n/**\n * Ultra-simplified mock Nova server for testing stuff\n */\nexport class MockNovaInstance {\n readonly connections: AutoReconnectingWebsocket[] = []\n\n async handleAPIRequest(\n config: InternalAxiosRequestConfig,\n ): Promise<AxiosResponse> {\n const apiHandlers = [\n listRobotControllers,\n getRobotController,\n getMotionGroupDescription,\n getCurrentRobotControllerState,\n listCoordinateSystems,\n getMotionGroupKinematicModel,\n ]\n\n const method = config.method?.toUpperCase() || \"GET\"\n if (!config.url) {\n throw new Error(\"No url sent with request\")\n }\n const path = config.url.split(\"?\")[0] ?? config.url\n\n for (const handler of apiHandlers) {\n const match = pathToRegexp.match(handler.path)(path)\n if (method === handler.method && match) {\n const json = handler.handle()\n return {\n status: 200,\n statusText: \"Success\",\n data: JSON.stringify(json),\n headers: {},\n config,\n request: {\n responseURL: config.url,\n },\n }\n }\n }\n\n throw new AxiosError(\n `No mock handler matched this request: ${method} ${path}`,\n \"404\",\n config,\n )\n }\n\n // Please note: Only very basic websocket mocking is done here, needs to be extended as needed\n handleWebsocketConnection(socket: AutoReconnectingWebsocket) {\n this.connections.push(socket)\n\n setTimeout(() => {\n socket.dispatchEvent(new Event(\"open\"))\n\n console.log(\"Websocket connection opened from\", socket.url)\n\n if (socket.url.includes(\"/state-stream\")) {\n socket.dispatchEvent(\n new MessageEvent(\"message\", {\n data: JSON.stringify(defaultMotionState),\n }),\n )\n }\n\n if (socket.url.includes(\"/execution/jogging\")) {\n socket.dispatchEvent(\n new MessageEvent(\"message\", {\n data: JSON.stringify({\n result: {\n message: \"string\",\n kind: \"INITIALIZE_RECEIVED\",\n },\n }),\n }),\n )\n }\n }, 10)\n }\n\n handleWebsocketMessage(socket: AutoReconnectingWebsocket, message: string) {\n console.log(`Received message on ${socket.url}`, message)\n }\n}\n\nconst defaultMotionState = {\n result: {\n motion_group: \"0@universalrobots-ur5e\",\n controller: \"universalrobots-ur5e\",\n timestamp: new Date().toISOString(),\n sequence_number: 1,\n joint_position: [\n 1.1699999570846558, -1.5700000524520874, 1.3600000143051147,\n 1.0299999713897705, 1.2899999618530273, 1.2799999713897705,\n ],\n joint_limit_reached: {\n limit_reached: [false, false, false, false, false, false],\n },\n standstill: false,\n flange_pose: {\n position: [1.3300010259703043, -409.2680714682808, 531.0203477065281],\n orientation: [\n 1.7564919306270736, -1.7542521568325058, 0.7326972590614671,\n ],\n },\n tcp_pose: {\n position: [1.3300010259703043, -409.2680714682808, 531.0203477065281],\n orientation: [\n 1.7564919306270736, -1.7542521568325058, 0.7326972590614671,\n ],\n },\n description_revision: 0,\n } satisfies MotionGroupState,\n}\n","/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type { Configuration as BaseConfiguration } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosRequestConfig } from \"axios\"\nimport axios, { isAxiosError } from \"axios\"\nimport { AutoReconnectingWebsocket } from \"../../AutoReconnectingWebsocket.ts\"\nimport { availableStorage } from \"../../availableStorage.ts\"\nimport { parseNovaInstanceUrl } from \"../../converters.ts\"\nimport { guardedPageReload } from \"../../errorHandling.ts\"\nimport { loginWithAuth0 } from \"../../LoginWithAuth0.ts\"\n\nimport { isLocalhostDev } from \"../../context.ts\"\nimport { MockNovaInstance } from \"../../mock/MockNovaInstance.ts\"\nimport { NovaCellAPIClient } from \"./NovaCellAPIClient.ts\"\n\n/** @deprecated Use `NovaClientConfig` from `Nova` instead. */\nexport type NovaClientConfig = {\n /**\n * Url of the deployed Nova instance to connect to\n * e.g. https://saeattii.instance.wandelbots.io\n */\n instanceUrl: string | \"https://mock.example.com\"\n\n /**\n * Identifier of the cell on the Nova instance to connect this client to.\n * If omitted, the default identifier \"cell\" is used.\n **/\n cellId?: string\n\n /**\n * Username for basic auth to the Nova instance.\n * @deprecated use accessToken instead\n */\n username?: string\n\n /**\n * Password for basic auth to the Nova instance.\n * @deprecated use accessToken instead\n */\n password?: string\n\n /**\n * Access token for Bearer authentication.\n */\n accessToken?: string\n} & Omit<BaseConfiguration, \"isJsonMime\" | \"basePath\">\n\ntype NovaClientConfigWithDefaults = NovaClientConfig & { cellId: string }\n\n/**\n * Client for connecting to a Nova instance and controlling robots.\n * @deprecated Use `Nova` from `@wandelbots/nova-js/v2` instead.\n */\nexport class NovaClient {\n readonly api: NovaCellAPIClient\n readonly config: NovaClientConfigWithDefaults\n readonly mock?: MockNovaInstance\n readonly instanceUrl: URL\n authPromise: Promise<string | null> | null = null\n accessToken: string | null = null\n\n constructor(config: NovaClientConfig) {\n const cellId = config.cellId ?? \"cell\"\n this.config = {\n cellId,\n ...config,\n }\n this.accessToken =\n config.accessToken ||\n availableStorage.getString(\"wbjs.access_token\") ||\n null\n\n if (this.config.instanceUrl === \"https://mock.example.com\") {\n this.mock = new MockNovaInstance()\n }\n this.instanceUrl = parseNovaInstanceUrl(this.config.instanceUrl)\n\n // Set up Axios instance with interceptor for token fetching\n const axiosInstance = axios.create({\n baseURL: new URL(\"/api/v2\", this.instanceUrl).href,\n // TODO - backend needs to set proper CORS headers for this\n headers: isLocalhostDev\n ? {}\n : {\n // Identify the client to the backend for logging purposes\n \"X-Wandelbots-Client\": \"Wandelbots-Nova-JS-SDK\",\n },\n })\n\n axiosInstance.interceptors.request.use(async (request) => {\n if (!request.headers.Authorization) {\n if (this.accessToken) {\n request.headers.Authorization = `Bearer ${this.accessToken}`\n } else if (this.config.username && this.config.password) {\n request.headers.Authorization = `Basic ${btoa(`${config.username}:${config.password}`)}`\n }\n }\n return request\n })\n\n if (typeof window !== \"undefined\") {\n axiosInstance.interceptors.response.use(\n (r) => r,\n async (error) => {\n if (isAxiosError(error)) {\n if (error.response?.status === 401) {\n // If we hit a 401, attempt to login the user and retry with\n // a new access token\n try {\n await this.renewAuthentication()\n\n if (error.config) {\n if (this.accessToken) {\n error.config.headers.Authorization = `Bearer ${this.accessToken}`\n } else {\n delete error.config.headers.Authorization\n }\n return axiosInstance.request(error.config)\n }\n } catch (err) {\n return Promise.reject(err)\n }\n } else if (error.response?.status === 503) {\n // Check if the server as a whole is down\n const res = await fetch(window.location.href)\n if (res.status === 503) {\n // Go to 503 page\n return guardedPageReload(\"503_server_unavailable\")\n }\n }\n }\n\n return Promise.reject(error)\n },\n )\n }\n\n this.api = new NovaCellAPIClient(cellId, {\n ...config,\n basePath: new URL(\"/api/v2\", this.instanceUrl).href,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n baseOptions: {\n ...(this.mock\n ? ({\n adapter: (config) => {\n return this.mock!.handleAPIRequest(config)\n },\n } satisfies AxiosRequestConfig)\n : {}),\n ...config.baseOptions,\n },\n axiosInstance,\n })\n }\n\n async renewAuthentication(): Promise<void> {\n if (this.authPromise) {\n // Don't double up\n return\n }\n\n const storedToken = availableStorage.getString(\"wbjs.access_token\")\n if (storedToken && this.accessToken !== storedToken) {\n // Might be newer than the one we have\n this.accessToken = storedToken\n return\n }\n\n // Otherwise, perform login flow\n this.authPromise = loginWithAuth0(this.instanceUrl)\n try {\n this.accessToken = await this.authPromise\n if (this.accessToken) {\n // Cache access token so we don't need to log in every refresh\n availableStorage.setString(\"wbjs.access_token\", this.accessToken)\n } else {\n availableStorage.delete(\"wbjs.access_token\")\n }\n } finally {\n this.authPromise = null\n }\n }\n\n makeWebsocketURL(path: string): string {\n const url = new URL(\n new URL(\n `/api/v2/cells/${this.config.cellId}/${path.replace(/^\\/+/, \"\")}`,\n this.instanceUrl,\n ).href,\n )\n url.protocol = url.protocol.replace(\"http\", \"ws\")\n url.protocol = url.protocol.replace(\"https\", \"wss\")\n\n // If provided, add basic auth credentials to the URL\n // NOTE - basic auth is deprecated on websockets and doesn't work in Safari\n // use tokens instead\n if (this.accessToken) {\n url.searchParams.append(\"token\", this.accessToken)\n } else if (this.config.username && this.config.password) {\n url.username = this.config.username\n url.password = this.config.password\n }\n\n return url.toString()\n }\n\n /**\n * Retrieve an AutoReconnectingWebsocket to the given path on the Nova instance.\n * If you explicitly want to reconnect an existing websocket, call `reconnect`\n * on the returned object.\n */\n openReconnectingWebsocket(path: string) {\n return new AutoReconnectingWebsocket(this.makeWebsocketURL(path), {\n mock: this.mock,\n })\n }\n}\n","import type { Pose } from \"@wandelbots/nova-api/v2\"\n\n/**\n * Convert a Pose object representing a motion group position\n * into a string which represents that pose in Wandelscript.\n * @deprecated Wandelscript usage is deprecated; switching to Python is recommended.\n */\nexport function poseToWandelscriptString(\n pose: Pick<Pose, \"position\" | \"orientation\">,\n) {\n const position = [\n pose.position?.[0] ?? 0,\n pose.position?.[1] ?? 0,\n pose.position?.[2] ?? 0,\n ]\n\n const orientation = [\n pose.orientation?.[0] ?? 0,\n pose.orientation?.[1] ?? 0,\n pose.orientation?.[2] ?? 0,\n ]\n\n const positionValues = position.map((v) => v.toFixed(1))\n // Rotation needs more precision since it's in radians\n const rotationValues = orientation.map((v) => v.toFixed(4))\n\n return `(${positionValues.concat(rotationValues).join(\", \")})`\n}\n","import type {\n BaseAPI,\n Configuration as BaseConfiguration,\n} from \"@wandelbots/nova-api/v2\"\nimport {\n ApplicationApi,\n BUSInputsOutputsApi,\n CellApi,\n ControllerApi,\n ControllerInputsOutputsApi,\n JoggingApi,\n KinematicsApi,\n LicenseApi,\n MotionGroupApi,\n MotionGroupModelsApi,\n NOVACloudApi,\n ProgramApi,\n RobotConfigurationsApi,\n SessionApi,\n StoreCollisionComponentsApi,\n StoreCollisionSetupsApi,\n StoreObjectApi,\n SystemApi,\n TrajectoryCachingApi,\n TrajectoryExecutionApi,\n TrajectoryPlanningApi,\n VersionApi,\n VirtualControllerApi,\n VirtualControllerBehaviorApi,\n VirtualControllerInputsOutputsApi,\n} from \"@wandelbots/nova-api/v2\"\nimport type { AxiosInstance } from \"axios\"\nimport axios from \"axios\"\n\n// biome-ignore lint/suspicious/noExplicitAny: metamagic\ntype UnwrapAxiosResponseReturn<T> = T extends (...a: any[]) => any\n ? (\n ...a: Parameters<T>\n ) => Promise<Awaited<ReturnType<T>> extends { data: infer D } ? D : never>\n : never\n\ntype WithUnwrappedAxiosResponse<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<T[P]>\n}\n\ntype NovaAPIClientOpts = BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n}\n\nfunction unwrap<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n opts: NovaAPIClientOpts,\n): WithUnwrappedAxiosResponse<T> {\n const apiClient = new ApiConstructor(\n {\n ...opts,\n isJsonMime: (mime: string) => mime === \"application/json\",\n },\n opts.basePath ?? \"\",\n opts.axiosInstance ?? axios.create(),\n ) as Record<string | symbol, unknown>\n\n for (const key of Reflect.ownKeys(\n Reflect.getPrototypeOf(apiClient) as object,\n )) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key] as (\n ...args: unknown[]\n ) => Promise<{ data: unknown }>\n apiClient[key] = (...args: unknown[]) =>\n originalFunction.apply(apiClient, args).then((res) => res.data)\n }\n }\n\n return apiClient as WithUnwrappedAxiosResponse<T>\n}\n\n/**\n * API client providing type-safe access to all the endpoints of a NOVA\n * instance.\n */\nexport class NovaAPIClient {\n readonly opts: NovaAPIClientOpts\n\n readonly application: WithUnwrappedAxiosResponse<ApplicationApi>\n readonly busIOs: WithUnwrappedAxiosResponse<BUSInputsOutputsApi>\n readonly cell: WithUnwrappedAxiosResponse<CellApi>\n readonly controller: WithUnwrappedAxiosResponse<ControllerApi>\n readonly controllerIOs: WithUnwrappedAxiosResponse<ControllerInputsOutputsApi>\n readonly jogging: WithUnwrappedAxiosResponse<JoggingApi>\n readonly kinematics: WithUnwrappedAxiosResponse<KinematicsApi>\n readonly license: WithUnwrappedAxiosResponse<LicenseApi>\n readonly motionGroup: WithUnwrappedAxiosResponse<MotionGroupApi>\n readonly motionGroupModels: WithUnwrappedAxiosResponse<MotionGroupModelsApi>\n readonly novaCloud: WithUnwrappedAxiosResponse<NOVACloudApi>\n readonly program: WithUnwrappedAxiosResponse<ProgramApi>\n readonly robotConfigurations: WithUnwrappedAxiosResponse<RobotConfigurationsApi>\n readonly session: WithUnwrappedAxiosResponse<SessionApi>\n readonly storeCollisionComponents: WithUnwrappedAxiosResponse<StoreCollisionComponentsApi>\n readonly storeCollisionSetups: WithUnwrappedAxiosResponse<StoreCollisionSetupsApi>\n readonly storeObject: WithUnwrappedAxiosResponse<StoreObjectApi>\n readonly system: WithUnwrappedAxiosResponse<SystemApi>\n readonly trajectoryCaching: WithUnwrappedAxiosResponse<TrajectoryCachingApi>\n readonly trajectoryExecution: WithUnwrappedAxiosResponse<TrajectoryExecutionApi>\n readonly trajectoryPlanning: WithUnwrappedAxiosResponse<TrajectoryPlanningApi>\n readonly version: WithUnwrappedAxiosResponse<VersionApi>\n readonly virtualController: WithUnwrappedAxiosResponse<VirtualControllerApi>\n readonly virtualControllerBehavior: WithUnwrappedAxiosResponse<VirtualControllerBehaviorApi>\n readonly virtualControllerIOs: WithUnwrappedAxiosResponse<VirtualControllerInputsOutputsApi>\n\n constructor(opts: NovaAPIClientOpts) {\n this.opts = opts\n\n this.application = unwrap(ApplicationApi, opts)\n this.busIOs = unwrap(BUSInputsOutputsApi, opts)\n this.cell = unwrap(CellApi, opts)\n this.controller = unwrap(ControllerApi, opts)\n this.controllerIOs = unwrap(ControllerInputsOutputsApi, opts)\n this.jogging = unwrap(JoggingApi, opts)\n this.kinematics = unwrap(KinematicsApi, opts)\n this.license = unwrap(LicenseApi, opts)\n this.motionGroup = unwrap(MotionGroupApi, opts)\n this.motionGroupModels = unwrap(MotionGroupModelsApi, opts)\n this.novaCloud = unwrap(NOVACloudApi, opts)\n this.program = unwrap(ProgramApi, opts)\n this.robotConfigurations = unwrap(RobotConfigurationsApi, opts)\n this.session = unwrap(SessionApi, opts)\n this.storeCollisionComponents = unwrap(StoreCollisionComponentsApi, opts)\n this.storeCollisionSetups = unwrap(StoreCollisionSetupsApi, opts)\n this.storeObject = unwrap(StoreObjectApi, opts)\n this.system = unwrap(SystemApi, opts)\n this.trajectoryCaching = unwrap(TrajectoryCachingApi, opts)\n this.trajectoryExecution = unwrap(TrajectoryExecutionApi, opts)\n this.trajectoryPlanning = unwrap(TrajectoryPlanningApi, opts)\n this.version = unwrap(VersionApi, opts)\n this.virtualController = unwrap(VirtualControllerApi, opts)\n this.virtualControllerBehavior = unwrap(VirtualControllerBehaviorApi, opts)\n this.virtualControllerIOs = unwrap(VirtualControllerInputsOutputsApi, opts)\n }\n}\n","import type { Configuration as BaseConfiguration } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosRequestConfig } from \"axios\"\nimport axios, { isAxiosError } from \"axios\"\nimport { AutoReconnectingWebsocket } from \"./AutoReconnectingWebsocket.ts\"\nimport { availableStorage } from \"./availableStorage.ts\"\nimport { isLocalhostDev } from \"./context.ts\"\nimport { parseNovaInstanceUrl } from \"./converters.ts\"\nimport { guardedPageReload } from \"./errorHandling.ts\"\nimport { loginWithAuth0 } from \"./LoginWithAuth0.ts\"\nimport { MockNovaInstance } from \"./mock/MockNovaInstance.ts\"\nimport { NovaAPIClient } from \"./NovaAPIClient.ts\"\n\nexport type NovaConfig = {\n /**\n * Url of the deployed NOVA instance to connect to\n * e.g. https://saeattii.instance.wandelbots.io\n */\n instanceUrl: string\n\n /**\n * Access token for Bearer authentication.\n * If running on a NOVA instance, this can be automatically retrieved from\n * the current session when omitted.\n */\n accessToken?: string\n} & Omit<BaseConfiguration, \"isJsonMime\" | \"basePath\">\n\n/**\n *\n * Client for connecting to a NOVA instance and controlling robots.\n */\nexport class Nova {\n readonly api: NovaAPIClient\n readonly config: NovaConfig\n readonly mock?: MockNovaInstance\n readonly instanceUrl: URL\n authPromise: Promise<string | null> | null = null\n accessToken: string | null = null\n\n constructor(config: NovaConfig) {\n this.config = config\n this.accessToken =\n config.accessToken ||\n availableStorage.getString(\"wbjs.access_token\") ||\n null\n\n if (this.config.instanceUrl === \"https://mock.example.com\") {\n this.mock = new MockNovaInstance()\n }\n this.instanceUrl = parseNovaInstanceUrl(this.config.instanceUrl)\n\n // Set up Axios instance with interceptor for token fetching\n const axiosInstance = axios.create({\n baseURL: new URL(\"/api/v2\", this.instanceUrl).href,\n // TODO - backend needs to set proper CORS headers for this\n headers: isLocalhostDev\n ? {}\n : {\n // Identify the client to the backend for logging purposes\n \"X-Wandelbots-Client\": \"Wandelbots-Nova-JS-SDK\",\n },\n })\n\n axiosInstance.interceptors.request.use(async (request) => {\n if (!request.headers.Authorization) {\n if (this.accessToken) {\n request.headers.Authorization = `Bearer ${this.accessToken}`\n }\n }\n return request\n })\n\n if (typeof window !== \"undefined\") {\n axiosInstance.interceptors.response.use(\n (r) => r,\n async (error) => {\n if (isAxiosError(error)) {\n if (error.response?.status === 401) {\n // If we hit a 401, attempt to login the user and retry with\n // a new access token\n try {\n await this.renewAuthentication()\n\n if (error.config) {\n if (this.accessToken) {\n error.config.headers.Authorization = `Bearer ${this.accessToken}`\n } else {\n delete error.config.headers.Authorization\n }\n return axiosInstance.request(error.config)\n }\n } catch (err) {\n return Promise.reject(err)\n }\n } else if (\n error.response?.status === 403 &&\n !error.config?.url?.split(/[?#]/)[0]?.endsWith(\"/session\")\n ) {\n // If we hit a 403, the user is authenticated but may lack access\n // to the instance entirely. Check the session to find out.\n let redirectToAccessDenied = false\n try {\n const session = await this.api.session.getSession()\n if (\n session.session_id !== \"default\" &&\n session.capabilities.length === 0\n ) {\n // An authenticated user with no capabilities has no access.\n redirectToAccessDenied = true\n }\n } catch (sessionError) {\n // The session endpoint itself returns a 403 when the user is\n // not assigned to an instance at all, which we treat as equivalent to\n // an authenticated user with empty capabilities.\n if (\n isAxiosError(sessionError) &&\n sessionError.response?.status === 403\n ) {\n redirectToAccessDenied = true\n }\n // Otherwise couldn't determine access; fall through to bubble\n // the original 403 error below.\n }\n\n if (redirectToAccessDenied) {\n // Send them to the instance url, which renders the access\n // denied screen. Return a promise that never settles so the\n // caller doesn't flash an error state before the navigation\n // takes effect.\n window.location.href = this.instanceUrl.href\n return new Promise(() => {})\n }\n } else if (error.response?.status === 503) {\n // Check if the server as a whole is down\n const res = await fetch(window.location.href)\n if (res.status === 503) {\n // Go to 503 page. Return a promise that never settles so the\n // caller doesn't flash an error state before the reload takes\n // effect.\n return guardedPageReload(\"503_server_unavailable\")\n }\n }\n }\n\n return Promise.reject(error)\n },\n )\n }\n\n this.api = new NovaAPIClient({\n ...config,\n basePath: new URL(\"/api/v2\", this.instanceUrl).href,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n baseOptions: {\n ...(this.mock\n ? ({\n adapter: (config) => {\n if (!this.mock) {\n throw new Error(\"Mock adapter used without a mock instance\")\n }\n return this.mock.handleAPIRequest(config)\n },\n } satisfies AxiosRequestConfig)\n : {}),\n ...config.baseOptions,\n },\n axiosInstance,\n })\n }\n\n async renewAuthentication(): Promise<void> {\n if (this.authPromise) {\n // Don't double up\n return\n }\n\n const storedToken = availableStorage.getString(\"wbjs.access_token\")\n if (storedToken && this.accessToken !== storedToken) {\n // Might be newer than the one we have\n this.accessToken = storedToken\n return\n }\n\n // Otherwise, perform login flow\n this.authPromise = loginWithAuth0(this.instanceUrl)\n try {\n this.accessToken = await this.authPromise\n if (this.accessToken) {\n // Cache access token so we don't need to log in every refresh\n availableStorage.setString(\"wbjs.access_token\", this.accessToken)\n } else {\n availableStorage.delete(\"wbjs.access_token\")\n }\n } finally {\n this.authPromise = null\n }\n }\n\n makeWebsocketURL(path: string): string {\n const url = new URL(`/api/v2/${path.replace(/^\\/+/, \"\")}`, this.instanceUrl)\n url.protocol = url.protocol.replace(\"http\", \"ws\")\n url.protocol = url.protocol.replace(\"https\", \"wss\")\n\n if (this.accessToken) {\n url.searchParams.append(\"token\", this.accessToken)\n }\n\n return url.toString()\n }\n\n /**\n * Retrieve an AutoReconnectingWebsocket to the given path on the Nova instance.\n * If you explicitly want to reconnect an existing websocket, call `reconnect`\n * on the returned object.\n */\n openReconnectingWebsocket(path: string) {\n return new AutoReconnectingWebsocket(this.makeWebsocketURL(path), {\n mock: this.mock,\n })\n }\n}\n"],"mappings":"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AAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;KACA,OAAO,EACL,UAAU,IACZ;KACA,QAAQ,EACN,UAAU,IACZ;IACF;IACA,eAAe;KACb,QAAQ;MACN;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;IACF;IACA,kBAAkB;KAChB,QAAQ;MACN;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;IACF;IACA,kBAAkB;KAChB,QAAQ;MACN;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;IACF;GACF;GACA,eAAe;EACjB;CACF;AACF;;;AClTA,MAAa,+BAA+B;CAC1C,QAAQ;CACR,MAAM;CACN,SAAS;EACP,OAAO;GACL,eAAe;IACb;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;GACF;GACA,gBAAgB;EAClB;CACF;AACF;;;AClDA,MAAa,qBAAqB;CAChC,QAAQ;CACR,MAAM;CACN,SAAS;EACP,OAAO;GACL,eAAe;IACb,wBAAwB;IACx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"}
1
+ {"version":3,"file":"index.cjs","names":["SystemApi","CellApi","MotionGroupApi","MotionGroupModelsApi","ControllerApi","ControllerInputsOutputsApi","TrajectoryPlanningApi","TrajectoryExecutionApi","TrajectoryCachingApi","ApplicationApi","JoggingApi","KinematicsApi","BUSInputsOutputsApi","VirtualControllerApi","VirtualControllerBehaviorApi","VirtualControllerInputsOutputsApi","StoreObjectApi","StoreCollisionComponentsApi","StoreCollisionSetupsApi","ProgramApi","LicenseApi","NOVACloudApi","RobotConfigurationsApi","VersionApi","SessionApi","pathToRegexp","AxiosError","availableStorage","parseNovaInstanceUrl","isLocalhostDev","guardedPageReload","loginWithAuth0","AutoReconnectingWebsocket","ApplicationApi","BUSInputsOutputsApi","CellApi","ControllerApi","ControllerInputsOutputsApi","JoggingApi","KinematicsApi","LicenseApi","MotionGroupApi","MotionGroupModelsApi","NOVACloudApi","ProgramApi","RobotConfigurationsApi","SessionApi","StoreCollisionComponentsApi","StoreCollisionSetupsApi","StoreObjectApi","SystemApi","TrajectoryCachingApi","TrajectoryExecutionApi","TrajectoryPlanningApi","VersionApi","VirtualControllerApi","VirtualControllerBehaviorApi","VirtualControllerInputsOutputsApi","availableStorage","parseNovaInstanceUrl","isLocalhostDev","guardedPageReload","loginWithAuth0","AutoReconnectingWebsocket"],"sources":["../../src/lib/deprecated/v2/NovaCellAPIClient.ts","../../src/lib/mock/getCurrentRobotControllerState.ts","../../src/lib/mock/getMotionGroupDescription.ts","../../src/lib/mock/getMotionGroupKinematicModel.ts","../../src/lib/mock/getRobotController.ts","../../src/lib/mock/listCoordinateSystems.ts","../../src/lib/mock/listRobotControllers.ts","../../src/lib/mock/MockNovaInstance.ts","../../src/lib/deprecated/v2/NovaClient.ts","../../src/lib/deprecated/v2/wandelscriptUtils.ts","../../src/lib/NovaAPIClient.ts","../../src/lib/Nova.ts"],"sourcesContent":["/** biome-ignore-all lint/suspicious/noExplicitAny: legacy code */\n/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type {\n BaseAPI,\n Configuration as BaseConfiguration,\n} from \"@wandelbots/nova-api/v2\"\nimport {\n ApplicationApi,\n BUSInputsOutputsApi,\n CellApi,\n ControllerApi,\n ControllerInputsOutputsApi,\n JoggingApi,\n KinematicsApi,\n LicenseApi,\n MotionGroupApi,\n MotionGroupModelsApi,\n NOVACloudApi,\n ProgramApi,\n RobotConfigurationsApi,\n SessionApi,\n StoreCollisionComponentsApi,\n StoreCollisionSetupsApi,\n StoreObjectApi,\n SystemApi,\n TrajectoryCachingApi,\n TrajectoryExecutionApi,\n TrajectoryPlanningApi,\n VersionApi,\n VirtualControllerApi,\n VirtualControllerBehaviorApi,\n VirtualControllerInputsOutputsApi,\n} from \"@wandelbots/nova-api/v2\"\nimport type { AxiosInstance } from \"axios\"\nimport axios from \"axios\"\n\ntype OmitFirstArg<F> = F extends (x: any, ...args: infer P) => infer R\n ? (...args: P) => R\n : never\n\ntype UnwrapAxiosResponseReturn<T> = T extends (...a: any) => any\n ? (\n ...a: Parameters<T>\n ) => Promise<Awaited<ReturnType<T>> extends { data: infer D } ? D : never>\n : never\n\n/** @deprecated Use `NovaAPIClient` instead. */\nexport type WithCellId<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<OmitFirstArg<T[P]>>\n}\n\n/** @deprecated Use `NovaAPIClient` instead. */\nexport type WithUnwrappedAxiosResponse<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<T[P]>\n}\n\n/**\n * API client providing type-safe access to all the Nova API REST endpoints\n * associated with a specific cell id.\n * @deprecated Use `NovaAPIClient` from `@wandelbots/nova-js/v2` instead.\n */\nexport class NovaCellAPIClient {\n readonly system: WithUnwrappedAxiosResponse<SystemApi>\n readonly cell: WithUnwrappedAxiosResponse<CellApi>\n readonly motionGroup: WithCellId<MotionGroupApi>\n readonly motionGroupModels: WithUnwrappedAxiosResponse<MotionGroupModelsApi>\n readonly controller: WithCellId<ControllerApi>\n readonly controllerIOs: WithCellId<ControllerInputsOutputsApi>\n readonly trajectoryPlanning: WithCellId<TrajectoryPlanningApi>\n readonly trajectoryExecution: WithCellId<TrajectoryExecutionApi>\n readonly trajectoryCaching: WithCellId<TrajectoryCachingApi>\n readonly application: WithCellId<ApplicationApi>\n readonly applicationGlobal: WithUnwrappedAxiosResponse<ApplicationApi>\n readonly jogging: WithCellId<JoggingApi>\n readonly kinematics: WithCellId<KinematicsApi>\n readonly busInputsOutputs: WithCellId<BUSInputsOutputsApi>\n readonly virtualController: WithCellId<VirtualControllerApi>\n readonly virtualControllerBehavior: WithCellId<VirtualControllerBehaviorApi>\n readonly virtualControllerIOs: WithCellId<VirtualControllerInputsOutputsApi>\n readonly storeObject: WithCellId<StoreObjectApi>\n readonly storeCollisionComponents: WithCellId<StoreCollisionComponentsApi>\n readonly storeCollisionSetups: WithCellId<StoreCollisionSetupsApi>\n readonly program: WithCellId<ProgramApi>\n readonly license: WithUnwrappedAxiosResponse<LicenseApi>\n readonly novaCloud: WithUnwrappedAxiosResponse<NOVACloudApi>\n readonly robotConfigurations: WithUnwrappedAxiosResponse<RobotConfigurationsApi>\n readonly version: WithUnwrappedAxiosResponse<VersionApi>\n readonly session: WithUnwrappedAxiosResponse<SessionApi>\n\n readonly cellId: string\n readonly opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n }\n\n constructor(\n cellId: string,\n opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n },\n ) {\n this.cellId = cellId\n this.opts = opts\n this.system = this.withUnwrappedResponsesOnly(SystemApi)\n this.cell = this.withUnwrappedResponsesOnly(CellApi)\n this.motionGroup = this.withCellId(MotionGroupApi)\n this.motionGroupModels =\n this.withUnwrappedResponsesOnly(MotionGroupModelsApi)\n this.controller = this.withCellId(ControllerApi)\n this.controllerIOs = this.withCellId(ControllerInputsOutputsApi)\n this.trajectoryPlanning = this.withCellId(TrajectoryPlanningApi)\n this.trajectoryExecution = this.withCellId(TrajectoryExecutionApi)\n this.trajectoryCaching = this.withCellId(TrajectoryCachingApi)\n this.application = this.withCellId(ApplicationApi)\n this.applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi)\n this.jogging = this.withCellId(JoggingApi)\n this.kinematics = this.withCellId(KinematicsApi)\n this.busInputsOutputs = this.withCellId(BUSInputsOutputsApi)\n this.virtualController = this.withCellId(VirtualControllerApi)\n this.virtualControllerBehavior = this.withCellId(\n VirtualControllerBehaviorApi,\n )\n this.virtualControllerIOs = this.withCellId(\n VirtualControllerInputsOutputsApi,\n )\n this.storeObject = this.withCellId(StoreObjectApi)\n this.storeCollisionComponents = this.withCellId(StoreCollisionComponentsApi)\n this.storeCollisionSetups = this.withCellId(StoreCollisionSetupsApi)\n this.program = this.withCellId(ProgramApi)\n this.license = this.withUnwrappedResponsesOnly(LicenseApi)\n this.novaCloud = this.withUnwrappedResponsesOnly(NOVACloudApi)\n this.robotConfigurations = this.withUnwrappedResponsesOnly(\n RobotConfigurationsApi,\n )\n this.version = this.withUnwrappedResponsesOnly(VersionApi)\n this.session = this.withUnwrappedResponsesOnly(SessionApi)\n }\n\n /**\n * Some TypeScript sorcery which alters the API class methods so you don't\n * have to pass the cell id to every single one, and de-encapsulates the\n * response data\n */\n private withCellId<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n ) {\n const apiClient = new ApiConstructor(\n {\n ...this.opts,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n },\n this.opts.basePath ?? \"\",\n this.opts.axiosInstance ?? axios.create(),\n ) as {\n [key: string | symbol]: any\n }\n\n for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient)!)) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key]\n apiClient[key] = (...args: any[]) => {\n return originalFunction\n .apply(apiClient, [this.cellId, ...args])\n .then((res: any) => res.data)\n }\n }\n }\n\n return apiClient as WithCellId<T>\n }\n\n /**\n * As withCellId, but only does the response unwrapping\n */\n private withUnwrappedResponsesOnly<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n ) {\n const apiClient = new ApiConstructor(\n {\n ...this.opts,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n },\n this.opts.basePath ?? \"\",\n this.opts.axiosInstance ?? axios.create(),\n ) as {\n [key: string | symbol]: any\n }\n\n for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient)!)) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key]\n apiClient[key] = (...args: any[]) => {\n return originalFunction\n .apply(apiClient, args)\n .then((res: any) => res.data)\n }\n }\n }\n\n return apiClient as WithUnwrappedAxiosResponse<T>\n }\n}\n","export const getCurrentRobotControllerState = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId/state\",\n handle() {\n return {\n mode: \"MODE_CONTROL\",\n last_error: [],\n timestamp: \"2025-10-16T09:19:26.634534092Z\",\n sequence_number: 1054764,\n controller: \"mock-ur5e\",\n operation_mode: \"OPERATION_MODE_AUTO\",\n safety_state: \"SAFETY_STATE_NORMAL\",\n velocity_override: 100,\n motion_groups: [\n {\n timestamp: \"2025-10-16T09:19:26.634534092Z\",\n sequence_number: 1054764,\n motion_group: \"0@mock-ur5e\",\n controller: \"mock-ur5e\",\n joint_position: [\n 1.487959623336792, -1.8501918315887451, 1.8003005981445312,\n 6.034560203552246, 1.4921919107437134, 1.593459963798523,\n ],\n joint_limit_reached: {\n limit_reached: [false, false, false, false, false, false],\n },\n joint_torque: [],\n joint_current: [0, 0, 0, 0, 0, 0],\n flange_pose: {\n position: [\n 107.6452433732927, -409.0402987746852, 524.2402132330305,\n ],\n orientation: [\n 0.9874434028353319, -0.986571714997442, 1.3336589451098142,\n ],\n },\n tcp: \"Flange\",\n tcp_pose: {\n position: [\n 107.6452433732927, -409.0402987746852, 524.2402132330305,\n ],\n orientation: [\n 0.9874434028353319, -0.986571714997442, 1.3336589451098142,\n ],\n },\n payload: \"\",\n coordinate_system: \"\",\n standstill: true,\n },\n ],\n }\n },\n}\n","export const getMotionGroupDescription = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId/motion-groups/:motionGroupId/description\",\n handle() {\n return {\n motion_group_model: \"UniversalRobots_UR5e\",\n mounting: {\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n },\n tcps: {\n Flange: {\n name: \"Default-Flange\",\n pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n },\n },\n },\n payloads: {\n \"FPay-0\": {\n name: \"FPay-0\",\n payload: 0,\n center_of_mass: [0, 0, 0],\n moment_of_inertia: [0, 0, 0],\n },\n },\n cycle_time: 8,\n dh_parameters: [\n {\n alpha: 1.5707963267948966,\n d: 162.25,\n },\n {\n a: -425,\n },\n {\n a: -392.2,\n },\n {\n alpha: 1.5707963267948966,\n d: 133.3,\n },\n {\n alpha: -1.5707963267948966,\n d: 99.7,\n },\n {\n d: 99.6,\n },\n ],\n operation_limits: {\n auto_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n elbow: {\n velocity: 5000,\n },\n flange: {\n velocity: 5000,\n },\n },\n manual_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n },\n manual_t1_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n },\n manual_t2_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n },\n },\n serial_number: \"WBVirtualRobot\",\n }\n },\n}\n","export const getMotionGroupKinematicModel = {\n method: \"GET\",\n path: \"/motion-group-models/:motionGroupModel/kinematic\",\n handle() {\n return {\n dh_parameters: [\n {\n alpha: 1.5707963267948966,\n theta: 0.0,\n a: 0.0,\n d: 162.25,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0.0,\n theta: 0.0,\n a: -425.0,\n d: 0.0,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0.0,\n theta: 0.0,\n a: -392.2,\n d: 0.0,\n reverse_rotation_direction: false,\n },\n {\n alpha: 1.5707963267948966,\n theta: 0.0,\n a: 0.0,\n d: 133.3,\n reverse_rotation_direction: false,\n },\n {\n alpha: -1.5707963267948966,\n theta: 0.0,\n a: 0.0,\n d: 99.7,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0.0,\n theta: 0.0,\n a: 0.0,\n d: 99.6,\n reverse_rotation_direction: false,\n },\n ],\n inverse_solver: \"Universalrobots\",\n }\n },\n}\n","import type { RobotController } from \"@wandelbots/nova-api/v2\"\n\nexport const getRobotController = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId\",\n handle() {\n return {\n configuration: {\n initial_joint_position: \"[0,-1.571,-1.571,-1.571,1.571,-1.571,0]\",\n kind: \"VirtualController\",\n manufacturer: \"universalrobots\",\n type: \"universalrobots-ur5e\",\n },\n name: \"mock-ur5\",\n } satisfies RobotController\n },\n}\n","export const listCoordinateSystems = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId/coordinate-systems\",\n handle() {\n return [\n {\n coordinate_system: \"\",\n name: \"world\",\n reference_coordinate_system: \"\",\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n orientation_type: \"ROTATION_VECTOR\",\n },\n {\n coordinate_system: \"CS-0\",\n name: \"Default-CS\",\n reference_coordinate_system: \"\",\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n orientation_type: \"ROTATION_VECTOR\",\n },\n ]\n },\n}\n","export const listRobotControllers = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers\",\n handle() {\n return [\"mock-ur5e\"]\n },\n}\n","import type { MotionGroupState } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosResponse, InternalAxiosRequestConfig } from \"axios\"\nimport { AxiosError } from \"axios\"\nimport * as pathToRegexp from \"path-to-regexp\"\nimport type { AutoReconnectingWebsocket } from \"../AutoReconnectingWebsocket.ts\"\nimport { getCurrentRobotControllerState } from \"./getCurrentRobotControllerState.ts\"\nimport { getMotionGroupDescription } from \"./getMotionGroupDescription.ts\"\nimport { getMotionGroupKinematicModel } from \"./getMotionGroupKinematicModel.ts\"\nimport { getRobotController } from \"./getRobotController.ts\"\nimport { listCoordinateSystems } from \"./listCoordinateSystems.ts\"\nimport { listRobotControllers } from \"./listRobotControllers.ts\"\n\n/**\n * Ultra-simplified mock Nova server for testing stuff\n */\nexport class MockNovaInstance {\n readonly connections: AutoReconnectingWebsocket[] = []\n\n async handleAPIRequest(\n config: InternalAxiosRequestConfig,\n ): Promise<AxiosResponse> {\n const apiHandlers = [\n listRobotControllers,\n getRobotController,\n getMotionGroupDescription,\n getCurrentRobotControllerState,\n listCoordinateSystems,\n getMotionGroupKinematicModel,\n ]\n\n const method = config.method?.toUpperCase() || \"GET\"\n if (!config.url) {\n throw new Error(\"No url sent with request\")\n }\n const path = config.url.split(\"?\")[0] ?? config.url\n\n for (const handler of apiHandlers) {\n const match = pathToRegexp.match(handler.path)(path)\n if (method === handler.method && match) {\n const json = handler.handle()\n return {\n status: 200,\n statusText: \"Success\",\n data: JSON.stringify(json),\n headers: {},\n config,\n request: {\n responseURL: config.url,\n },\n }\n }\n }\n\n throw new AxiosError(\n `No mock handler matched this request: ${method} ${path}`,\n \"404\",\n config,\n )\n }\n\n // Please note: Only very basic websocket mocking is done here, needs to be extended as needed\n handleWebsocketConnection(socket: AutoReconnectingWebsocket) {\n this.connections.push(socket)\n\n setTimeout(() => {\n socket.dispatchEvent(new Event(\"open\"))\n\n console.log(\"Websocket connection opened from\", socket.url)\n\n if (socket.url.includes(\"/state-stream\")) {\n socket.dispatchEvent(\n new MessageEvent(\"message\", {\n data: JSON.stringify(defaultMotionState),\n }),\n )\n }\n\n if (socket.url.includes(\"/execution/jogging\")) {\n socket.dispatchEvent(\n new MessageEvent(\"message\", {\n data: JSON.stringify({\n result: {\n message: \"string\",\n kind: \"INITIALIZE_RECEIVED\",\n },\n }),\n }),\n )\n }\n }, 10)\n }\n\n handleWebsocketMessage(socket: AutoReconnectingWebsocket, message: string) {\n console.log(`Received message on ${socket.url}`, message)\n }\n}\n\nconst defaultMotionState = {\n result: {\n motion_group: \"0@universalrobots-ur5e\",\n controller: \"universalrobots-ur5e\",\n timestamp: new Date().toISOString(),\n sequence_number: 1,\n joint_position: [\n 1.1699999570846558, -1.5700000524520874, 1.3600000143051147,\n 1.0299999713897705, 1.2899999618530273, 1.2799999713897705,\n ],\n joint_limit_reached: {\n limit_reached: [false, false, false, false, false, false],\n },\n standstill: false,\n flange_pose: {\n position: [1.3300010259703043, -409.2680714682808, 531.0203477065281],\n orientation: [\n 1.7564919306270736, -1.7542521568325058, 0.7326972590614671,\n ],\n },\n tcp_pose: {\n position: [1.3300010259703043, -409.2680714682808, 531.0203477065281],\n orientation: [\n 1.7564919306270736, -1.7542521568325058, 0.7326972590614671,\n ],\n },\n description_revision: 0,\n } satisfies MotionGroupState,\n}\n","/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type { Configuration as BaseConfiguration } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosRequestConfig } from \"axios\"\nimport axios, { isAxiosError } from \"axios\"\nimport { AutoReconnectingWebsocket } from \"../../AutoReconnectingWebsocket.ts\"\nimport { availableStorage } from \"../../availableStorage.ts\"\nimport { parseNovaInstanceUrl } from \"../../converters.ts\"\nimport { guardedPageReload } from \"../../errorHandling.ts\"\nimport { loginWithAuth0 } from \"../../LoginWithAuth0.ts\"\n\nimport { isLocalhostDev } from \"../../context.ts\"\nimport { MockNovaInstance } from \"../../mock/MockNovaInstance.ts\"\nimport { NovaCellAPIClient } from \"./NovaCellAPIClient.ts\"\n\n/** @deprecated Use `NovaClientConfig` from `Nova` instead. */\nexport type NovaClientConfig = {\n /**\n * Url of the deployed Nova instance to connect to\n * e.g. https://saeattii.instance.wandelbots.io\n */\n instanceUrl: string | \"https://mock.example.com\"\n\n /**\n * Identifier of the cell on the Nova instance to connect this client to.\n * If omitted, the default identifier \"cell\" is used.\n **/\n cellId?: string\n\n /**\n * Username for basic auth to the Nova instance.\n * @deprecated use accessToken instead\n */\n username?: string\n\n /**\n * Password for basic auth to the Nova instance.\n * @deprecated use accessToken instead\n */\n password?: string\n\n /**\n * Access token for Bearer authentication.\n */\n accessToken?: string\n} & Omit<BaseConfiguration, \"isJsonMime\" | \"basePath\">\n\ntype NovaClientConfigWithDefaults = NovaClientConfig & { cellId: string }\n\n/**\n * Client for connecting to a Nova instance and controlling robots.\n * @deprecated Use `Nova` from `@wandelbots/nova-js/v2` instead.\n */\nexport class NovaClient {\n readonly api: NovaCellAPIClient\n readonly config: NovaClientConfigWithDefaults\n readonly mock?: MockNovaInstance\n readonly instanceUrl: URL\n authPromise: Promise<string | null> | null = null\n accessToken: string | null = null\n\n constructor(config: NovaClientConfig) {\n const cellId = config.cellId ?? \"cell\"\n this.config = {\n cellId,\n ...config,\n }\n this.accessToken =\n config.accessToken ||\n availableStorage.getString(\"wbjs.access_token\") ||\n null\n\n if (this.config.instanceUrl === \"https://mock.example.com\") {\n this.mock = new MockNovaInstance()\n }\n this.instanceUrl = parseNovaInstanceUrl(this.config.instanceUrl)\n\n // Set up Axios instance with interceptor for token fetching\n const axiosInstance = axios.create({\n baseURL: new URL(\"/api/v2\", this.instanceUrl).href,\n // TODO - backend needs to set proper CORS headers for this\n headers: isLocalhostDev\n ? {}\n : {\n // Identify the client to the backend for logging purposes\n \"X-Wandelbots-Client\": \"Wandelbots-Nova-JS-SDK\",\n },\n })\n\n axiosInstance.interceptors.request.use(async (request) => {\n if (!request.headers.Authorization) {\n if (this.accessToken) {\n request.headers.Authorization = `Bearer ${this.accessToken}`\n } else if (this.config.username && this.config.password) {\n request.headers.Authorization = `Basic ${btoa(`${config.username}:${config.password}`)}`\n }\n }\n return request\n })\n\n if (typeof window !== \"undefined\") {\n axiosInstance.interceptors.response.use(\n (r) => r,\n async (error) => {\n if (isAxiosError(error)) {\n if (error.response?.status === 401) {\n // If we hit a 401, attempt to login the user and retry with\n // a new access token\n try {\n await this.renewAuthentication()\n\n if (error.config) {\n if (this.accessToken) {\n error.config.headers.Authorization = `Bearer ${this.accessToken}`\n } else {\n delete error.config.headers.Authorization\n }\n return axiosInstance.request(error.config)\n }\n } catch (err) {\n return Promise.reject(err)\n }\n } else if (error.response?.status === 503) {\n // Check if the server as a whole is down\n const res = await fetch(window.location.href)\n if (res.status === 503) {\n // Go to 503 page\n return guardedPageReload(\"503_server_unavailable\")\n }\n }\n }\n\n return Promise.reject(error)\n },\n )\n }\n\n this.api = new NovaCellAPIClient(cellId, {\n ...config,\n basePath: new URL(\"/api/v2\", this.instanceUrl).href,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n baseOptions: {\n ...(this.mock\n ? ({\n adapter: (config) => {\n return this.mock!.handleAPIRequest(config)\n },\n } satisfies AxiosRequestConfig)\n : {}),\n ...config.baseOptions,\n },\n axiosInstance,\n })\n }\n\n async renewAuthentication(): Promise<void> {\n if (this.authPromise) {\n // Don't double up\n return\n }\n\n const storedToken = availableStorage.getString(\"wbjs.access_token\")\n if (storedToken && this.accessToken !== storedToken) {\n // Might be newer than the one we have\n this.accessToken = storedToken\n return\n }\n\n // Otherwise, perform login flow\n this.authPromise = loginWithAuth0(this.instanceUrl)\n try {\n this.accessToken = await this.authPromise\n if (this.accessToken) {\n // Cache access token so we don't need to log in every refresh\n availableStorage.setString(\"wbjs.access_token\", this.accessToken)\n } else {\n availableStorage.delete(\"wbjs.access_token\")\n }\n } finally {\n this.authPromise = null\n }\n }\n\n makeWebsocketURL(path: string): string {\n const url = new URL(\n new URL(\n `/api/v2/cells/${this.config.cellId}/${path.replace(/^\\/+/, \"\")}`,\n this.instanceUrl,\n ).href,\n )\n url.protocol = url.protocol.replace(\"http\", \"ws\")\n url.protocol = url.protocol.replace(\"https\", \"wss\")\n\n // If provided, add basic auth credentials to the URL\n // NOTE - basic auth is deprecated on websockets and doesn't work in Safari\n // use tokens instead\n if (this.accessToken) {\n url.searchParams.append(\"token\", this.accessToken)\n } else if (this.config.username && this.config.password) {\n url.username = this.config.username\n url.password = this.config.password\n }\n\n return url.toString()\n }\n\n /**\n * Retrieve an AutoReconnectingWebsocket to the given path on the Nova instance.\n * If you explicitly want to reconnect an existing websocket, call `reconnect`\n * on the returned object.\n */\n openReconnectingWebsocket(path: string) {\n return new AutoReconnectingWebsocket(this.makeWebsocketURL(path), {\n mock: this.mock,\n })\n }\n}\n","import type { Pose } from \"@wandelbots/nova-api/v2\"\n\n/**\n * Convert a Pose object representing a motion group position\n * into a string which represents that pose in Wandelscript.\n * @deprecated Wandelscript usage is deprecated; switching to Python is recommended.\n */\nexport function poseToWandelscriptString(\n pose: Pick<Pose, \"position\" | \"orientation\">,\n) {\n const position = [\n pose.position?.[0] ?? 0,\n pose.position?.[1] ?? 0,\n pose.position?.[2] ?? 0,\n ]\n\n const orientation = [\n pose.orientation?.[0] ?? 0,\n pose.orientation?.[1] ?? 0,\n pose.orientation?.[2] ?? 0,\n ]\n\n const positionValues = position.map((v) => v.toFixed(1))\n // Rotation needs more precision since it's in radians\n const rotationValues = orientation.map((v) => v.toFixed(4))\n\n return `(${positionValues.concat(rotationValues).join(\", \")})`\n}\n","import type {\n BaseAPI,\n Configuration as BaseConfiguration,\n} from \"@wandelbots/nova-api/v2\"\nimport {\n ApplicationApi,\n BUSInputsOutputsApi,\n CellApi,\n ControllerApi,\n ControllerInputsOutputsApi,\n JoggingApi,\n KinematicsApi,\n LicenseApi,\n MotionGroupApi,\n MotionGroupModelsApi,\n NOVACloudApi,\n ProgramApi,\n RobotConfigurationsApi,\n SessionApi,\n StoreCollisionComponentsApi,\n StoreCollisionSetupsApi,\n StoreObjectApi,\n SystemApi,\n TrajectoryCachingApi,\n TrajectoryExecutionApi,\n TrajectoryPlanningApi,\n VersionApi,\n VirtualControllerApi,\n VirtualControllerBehaviorApi,\n VirtualControllerInputsOutputsApi,\n} from \"@wandelbots/nova-api/v2\"\nimport type { AxiosInstance } from \"axios\"\nimport axios from \"axios\"\n\n// biome-ignore lint/suspicious/noExplicitAny: metamagic\ntype UnwrapAxiosResponseReturn<T> = T extends (...a: any[]) => any\n ? (\n ...a: Parameters<T>\n ) => Promise<Awaited<ReturnType<T>> extends { data: infer D } ? D : never>\n : never\n\ntype WithUnwrappedAxiosResponse<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<T[P]>\n}\n\ntype NovaAPIClientOpts = BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n}\n\nfunction unwrap<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n opts: NovaAPIClientOpts,\n): WithUnwrappedAxiosResponse<T> {\n const apiClient = new ApiConstructor(\n {\n ...opts,\n isJsonMime: (mime: string) => mime === \"application/json\",\n },\n opts.basePath ?? \"\",\n opts.axiosInstance ?? axios.create(),\n ) as Record<string | symbol, unknown>\n\n for (const key of Reflect.ownKeys(\n Reflect.getPrototypeOf(apiClient) as object,\n )) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key] as (\n ...args: unknown[]\n ) => Promise<{ data: unknown }>\n apiClient[key] = (...args: unknown[]) =>\n originalFunction.apply(apiClient, args).then((res) => res.data)\n }\n }\n\n return apiClient as WithUnwrappedAxiosResponse<T>\n}\n\n/**\n * API client providing type-safe access to all the endpoints of a NOVA\n * instance.\n */\nexport class NovaAPIClient {\n readonly opts: NovaAPIClientOpts\n\n readonly application: WithUnwrappedAxiosResponse<ApplicationApi>\n readonly busIOs: WithUnwrappedAxiosResponse<BUSInputsOutputsApi>\n readonly cell: WithUnwrappedAxiosResponse<CellApi>\n readonly controller: WithUnwrappedAxiosResponse<ControllerApi>\n readonly controllerIOs: WithUnwrappedAxiosResponse<ControllerInputsOutputsApi>\n readonly jogging: WithUnwrappedAxiosResponse<JoggingApi>\n readonly kinematics: WithUnwrappedAxiosResponse<KinematicsApi>\n readonly license: WithUnwrappedAxiosResponse<LicenseApi>\n readonly motionGroup: WithUnwrappedAxiosResponse<MotionGroupApi>\n readonly motionGroupModels: WithUnwrappedAxiosResponse<MotionGroupModelsApi>\n readonly novaCloud: WithUnwrappedAxiosResponse<NOVACloudApi>\n readonly program: WithUnwrappedAxiosResponse<ProgramApi>\n readonly robotConfigurations: WithUnwrappedAxiosResponse<RobotConfigurationsApi>\n readonly session: WithUnwrappedAxiosResponse<SessionApi>\n readonly storeCollisionComponents: WithUnwrappedAxiosResponse<StoreCollisionComponentsApi>\n readonly storeCollisionSetups: WithUnwrappedAxiosResponse<StoreCollisionSetupsApi>\n readonly storeObject: WithUnwrappedAxiosResponse<StoreObjectApi>\n readonly system: WithUnwrappedAxiosResponse<SystemApi>\n readonly trajectoryCaching: WithUnwrappedAxiosResponse<TrajectoryCachingApi>\n readonly trajectoryExecution: WithUnwrappedAxiosResponse<TrajectoryExecutionApi>\n readonly trajectoryPlanning: WithUnwrappedAxiosResponse<TrajectoryPlanningApi>\n readonly version: WithUnwrappedAxiosResponse<VersionApi>\n readonly virtualController: WithUnwrappedAxiosResponse<VirtualControllerApi>\n readonly virtualControllerBehavior: WithUnwrappedAxiosResponse<VirtualControllerBehaviorApi>\n readonly virtualControllerIOs: WithUnwrappedAxiosResponse<VirtualControllerInputsOutputsApi>\n\n constructor(opts: NovaAPIClientOpts) {\n this.opts = opts\n\n this.application = unwrap(ApplicationApi, opts)\n this.busIOs = unwrap(BUSInputsOutputsApi, opts)\n this.cell = unwrap(CellApi, opts)\n this.controller = unwrap(ControllerApi, opts)\n this.controllerIOs = unwrap(ControllerInputsOutputsApi, opts)\n this.jogging = unwrap(JoggingApi, opts)\n this.kinematics = unwrap(KinematicsApi, opts)\n this.license = unwrap(LicenseApi, opts)\n this.motionGroup = unwrap(MotionGroupApi, opts)\n this.motionGroupModels = unwrap(MotionGroupModelsApi, opts)\n this.novaCloud = unwrap(NOVACloudApi, opts)\n this.program = unwrap(ProgramApi, opts)\n this.robotConfigurations = unwrap(RobotConfigurationsApi, opts)\n this.session = unwrap(SessionApi, opts)\n this.storeCollisionComponents = unwrap(StoreCollisionComponentsApi, opts)\n this.storeCollisionSetups = unwrap(StoreCollisionSetupsApi, opts)\n this.storeObject = unwrap(StoreObjectApi, opts)\n this.system = unwrap(SystemApi, opts)\n this.trajectoryCaching = unwrap(TrajectoryCachingApi, opts)\n this.trajectoryExecution = unwrap(TrajectoryExecutionApi, opts)\n this.trajectoryPlanning = unwrap(TrajectoryPlanningApi, opts)\n this.version = unwrap(VersionApi, opts)\n this.virtualController = unwrap(VirtualControllerApi, opts)\n this.virtualControllerBehavior = unwrap(VirtualControllerBehaviorApi, opts)\n this.virtualControllerIOs = unwrap(VirtualControllerInputsOutputsApi, opts)\n }\n}\n","import type { Configuration as BaseConfiguration } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosRequestConfig } from \"axios\"\nimport axios, { isAxiosError } from \"axios\"\nimport { AutoReconnectingWebsocket } from \"./AutoReconnectingWebsocket.ts\"\nimport { availableStorage } from \"./availableStorage.ts\"\nimport { isLocalhostDev } from \"./context.ts\"\nimport { parseNovaInstanceUrl } from \"./converters.ts\"\nimport { guardedPageReload } from \"./errorHandling.ts\"\nimport { loginWithAuth0 } from \"./LoginWithAuth0.ts\"\nimport { MockNovaInstance } from \"./mock/MockNovaInstance.ts\"\nimport { NovaAPIClient } from \"./NovaAPIClient.ts\"\n\nexport type NovaConfig = {\n /**\n * Url of the deployed NOVA instance to connect to\n * e.g. https://saeattii.instance.wandelbots.io\n */\n instanceUrl: string\n\n /**\n * Access token for Bearer authentication.\n * If running on a NOVA instance, this can be automatically retrieved from\n * the current session when omitted.\n */\n accessToken?: string\n} & Omit<BaseConfiguration, \"isJsonMime\" | \"basePath\">\n\n/**\n *\n * Client for connecting to a NOVA instance and controlling robots.\n */\nexport class Nova {\n readonly api: NovaAPIClient\n readonly config: NovaConfig\n readonly mock?: MockNovaInstance\n readonly instanceUrl: URL\n authPromise: Promise<string | null> | null = null\n accessToken: string | null = null\n\n constructor(config: NovaConfig) {\n this.config = config\n this.accessToken =\n config.accessToken ||\n availableStorage.getString(\"wbjs.access_token\") ||\n null\n\n if (this.config.instanceUrl === \"https://mock.example.com\") {\n this.mock = new MockNovaInstance()\n }\n this.instanceUrl = parseNovaInstanceUrl(this.config.instanceUrl)\n\n // Set up Axios instance with interceptor for token fetching\n const axiosInstance = axios.create({\n baseURL: new URL(\"/api/v2\", this.instanceUrl).href,\n // TODO - backend needs to set proper CORS headers for this\n headers: isLocalhostDev\n ? {}\n : {\n // Identify the client to the backend for logging purposes\n \"X-Wandelbots-Client\": \"Wandelbots-Nova-JS-SDK\",\n },\n })\n\n axiosInstance.interceptors.request.use(async (request) => {\n if (!request.headers.Authorization) {\n if (this.accessToken) {\n request.headers.Authorization = `Bearer ${this.accessToken}`\n }\n }\n return request\n })\n\n if (typeof window !== \"undefined\") {\n axiosInstance.interceptors.response.use(\n (r) => r,\n async (error) => {\n if (isAxiosError(error)) {\n if (error.response?.status === 401) {\n // If we hit a 401, attempt to login the user and retry with\n // a new access token\n try {\n await this.renewAuthentication()\n\n if (error.config) {\n if (this.accessToken) {\n error.config.headers.Authorization = `Bearer ${this.accessToken}`\n } else {\n delete error.config.headers.Authorization\n }\n return axiosInstance.request(error.config)\n }\n } catch (err) {\n return Promise.reject(err)\n }\n } else if (\n error.response?.status === 403 &&\n !error.config?.url?.split(/[?#]/)[0]?.endsWith(\"/session\")\n ) {\n // If we hit a 403, the user is authenticated but may lack access\n // to the instance entirely. Check the session to find out.\n let redirectToAccessDenied = false\n try {\n const session = await this.api.session.getSession()\n if (\n session.session_id !== \"default\" &&\n session.capabilities.length === 0\n ) {\n // An authenticated user with no capabilities has no access.\n redirectToAccessDenied = true\n }\n } catch (sessionError) {\n // The session endpoint itself returns a 403 when the user is\n // not assigned to an instance at all, which we treat as equivalent to\n // an authenticated user with empty capabilities.\n if (\n isAxiosError(sessionError) &&\n sessionError.response?.status === 403\n ) {\n redirectToAccessDenied = true\n }\n // Otherwise couldn't determine access; fall through to bubble\n // the original 403 error below.\n }\n\n if (redirectToAccessDenied) {\n // Send them to the instance url, which renders the access\n // denied screen. Return a promise that never settles so the\n // caller doesn't flash an error state before the navigation\n // takes effect.\n window.location.href = this.instanceUrl.href\n return new Promise(() => {})\n }\n } else if (error.response?.status === 503) {\n // Check if the server as a whole is down\n const res = await fetch(window.location.href)\n if (res.status === 503) {\n // Go to 503 page. Return a promise that never settles so the\n // caller doesn't flash an error state before the reload takes\n // effect.\n return guardedPageReload(\"503_server_unavailable\")\n }\n }\n }\n\n return Promise.reject(error)\n },\n )\n }\n\n this.api = new NovaAPIClient({\n ...config,\n basePath: new URL(\"/api/v2\", this.instanceUrl).href,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n baseOptions: {\n ...(this.mock\n ? ({\n adapter: (config) => {\n if (!this.mock) {\n throw new Error(\"Mock adapter used without a mock instance\")\n }\n return this.mock.handleAPIRequest(config)\n },\n } satisfies AxiosRequestConfig)\n : {}),\n ...config.baseOptions,\n },\n axiosInstance,\n })\n }\n\n async renewAuthentication(): Promise<void> {\n if (this.authPromise) {\n // Don't double up\n return\n }\n\n const storedToken = availableStorage.getString(\"wbjs.access_token\")\n if (storedToken && this.accessToken !== storedToken) {\n // Might be newer than the one we have\n this.accessToken = storedToken\n return\n }\n\n // Otherwise, perform login flow\n this.authPromise = loginWithAuth0(this.instanceUrl)\n try {\n this.accessToken = await this.authPromise\n if (this.accessToken) {\n // Cache access token so we don't need to log in every refresh\n availableStorage.setString(\"wbjs.access_token\", this.accessToken)\n } else {\n availableStorage.delete(\"wbjs.access_token\")\n }\n } finally {\n this.authPromise = null\n }\n }\n\n makeWebsocketURL(path: string): string {\n const url = new URL(`/api/v2/${path.replace(/^\\/+/, \"\")}`, this.instanceUrl)\n url.protocol = url.protocol.replace(\"http\", \"ws\")\n url.protocol = url.protocol.replace(\"https\", \"wss\")\n\n if (this.accessToken) {\n url.searchParams.append(\"token\", this.accessToken)\n }\n\n return url.toString()\n }\n\n /**\n * Retrieve an AutoReconnectingWebsocket to the given path on the Nova instance.\n * If you explicitly want to reconnect an existing websocket, call `reconnect`\n * on the returned object.\n */\n openReconnectingWebsocket(path: string) {\n return new AutoReconnectingWebsocket(this.makeWebsocketURL(path), {\n mock: this.mock,\n })\n }\n}\n"],"mappings":"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Aa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;KACA,OAAO,EACL,UAAU,IACZ;KACA,QAAQ,EACN,UAAU,IACZ;IACF;IACA,eAAe;KACb,QAAQ;MACN;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;IACF;IACA,kBAAkB;KAChB,QAAQ;MACN;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;IACF;IACA,kBAAkB;KAChB,QAAQ;MACN;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;IACF;GACF;GACA,eAAe;EACjB;CACF;AACF;;;AClTA,MAAa,+BAA+B;CAC1C,QAAQ;CACR,MAAM;CACN,SAAS;EACP,OAAO;GACL,eAAe;IACb;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;GACF;GACA,gBAAgB;EAClB;CACF;AACF;;;AClDA,MAAa,qBAAqB;CAChC,QAAQ;CACR,MAAM;CACN,SAAS;EACP,OAAO;GACL,eAAe;IACb,wBAAwB;IACxB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"}
@@ -1,18 +1,17 @@
1
1
  import { n as MockNovaInstance, t as AutoReconnectingWebsocket } from "../AutoReconnectingWebsocket-1K2J1NA4.cjs";
2
- import { n as NovaConfig, r as NovaAPIClient, t as Nova } from "../Nova-B1o5iTQ6.cjs";
3
- import { ApplicationApi, BUSInputsOutputsApi, CellApi, Configuration, ControllerApi, ControllerInputsOutputsApi, JoggingApi, KinematicsApi, LicenseApi, MotionGroupApi, MotionGroupModelsApi, NOVACloudApi, Pose, ProgramApi, RobotConfigurationsApi, SessionApi, StoreCollisionComponentsApi, StoreCollisionSetupsApi, StoreObjectApi, SystemApi, TrajectoryCachingApi, TrajectoryExecutionApi, TrajectoryPlanningApi, VersionApi, VirtualControllerApi, VirtualControllerBehaviorApi, VirtualControllerInputsOutputsApi } from "@wandelbots/nova-api/v2";
4
2
  import { AxiosInstance } from "axios";
3
+ import { ApplicationApi, BUSInputsOutputsApi, CellApi, Configuration, ControllerApi, ControllerInputsOutputsApi, JoggingApi, KinematicsApi, LicenseApi, MotionGroupApi, MotionGroupModelsApi, NOVACloudApi, Pose, ProgramApi, RobotConfigurationsApi, SessionApi, StoreCollisionComponentsApi, StoreCollisionSetupsApi, StoreObjectApi, SystemApi, TrajectoryCachingApi, TrajectoryExecutionApi, TrajectoryPlanningApi, VersionApi, VirtualControllerApi, VirtualControllerBehaviorApi, VirtualControllerInputsOutputsApi } from "@wandelbots/nova-api/v2";
5
4
  export * from "@wandelbots/nova-api/v2";
6
5
 
7
6
  //#region src/lib/deprecated/v2/NovaCellAPIClient.d.ts
8
7
  type OmitFirstArg<F> = F extends ((x: any, ...args: infer P) => infer R) ? (...args: P) => R : never;
9
- type UnwrapAxiosResponseReturn<T> = T extends ((...a: any) => any) ? (...a: Parameters<T>) => Promise<Awaited<ReturnType<T>> extends {
8
+ type UnwrapAxiosResponseReturn$1<T> = T extends ((...a: any) => any) ? (...a: Parameters<T>) => Promise<Awaited<ReturnType<T>> extends {
10
9
  data: infer D;
11
10
  } ? D : never> : never;
12
11
  /** @deprecated Use `NovaAPIClient` instead. */
13
- type WithCellId<T> = { [P in keyof T]: UnwrapAxiosResponseReturn<OmitFirstArg<T[P]>> };
12
+ type WithCellId<T> = { [P in keyof T]: UnwrapAxiosResponseReturn$1<OmitFirstArg<T[P]>> };
14
13
  /** @deprecated Use `NovaAPIClient` instead. */
15
- type WithUnwrappedAxiosResponse<T> = { [P in keyof T]: UnwrapAxiosResponseReturn<T[P]> };
14
+ type WithUnwrappedAxiosResponse<T> = { [P in keyof T]: UnwrapAxiosResponseReturn$1<T[P]> };
16
15
  /**
17
16
  * API client providing type-safe access to all the Nova API REST endpoints
18
17
  * associated with a specific cell id.
@@ -127,5 +126,84 @@ declare class NovaClient {
127
126
  */
128
127
  declare function poseToWandelscriptString(pose: Pick<Pose, "position" | "orientation">): string;
129
128
  //#endregion
129
+ //#region src/lib/NovaAPIClient.d.ts
130
+ type UnwrapAxiosResponseReturn<T> = T extends ((...a: any[]) => any) ? (...a: Parameters<T>) => Promise<Awaited<ReturnType<T>> extends {
131
+ data: infer D;
132
+ } ? D : never> : never;
133
+ type WithUnwrappedAxiosResponse$1<T> = { [P in keyof T]: UnwrapAxiosResponseReturn<T[P]> };
134
+ type NovaAPIClientOpts = Configuration & {
135
+ axiosInstance?: AxiosInstance;
136
+ mock?: boolean;
137
+ };
138
+ /**
139
+ * API client providing type-safe access to all the endpoints of a NOVA
140
+ * instance.
141
+ */
142
+ declare class NovaAPIClient {
143
+ readonly opts: NovaAPIClientOpts;
144
+ readonly application: WithUnwrappedAxiosResponse$1<ApplicationApi>;
145
+ readonly busIOs: WithUnwrappedAxiosResponse$1<BUSInputsOutputsApi>;
146
+ readonly cell: WithUnwrappedAxiosResponse$1<CellApi>;
147
+ readonly controller: WithUnwrappedAxiosResponse$1<ControllerApi>;
148
+ readonly controllerIOs: WithUnwrappedAxiosResponse$1<ControllerInputsOutputsApi>;
149
+ readonly jogging: WithUnwrappedAxiosResponse$1<JoggingApi>;
150
+ readonly kinematics: WithUnwrappedAxiosResponse$1<KinematicsApi>;
151
+ readonly license: WithUnwrappedAxiosResponse$1<LicenseApi>;
152
+ readonly motionGroup: WithUnwrappedAxiosResponse$1<MotionGroupApi>;
153
+ readonly motionGroupModels: WithUnwrappedAxiosResponse$1<MotionGroupModelsApi>;
154
+ readonly novaCloud: WithUnwrappedAxiosResponse$1<NOVACloudApi>;
155
+ readonly program: WithUnwrappedAxiosResponse$1<ProgramApi>;
156
+ readonly robotConfigurations: WithUnwrappedAxiosResponse$1<RobotConfigurationsApi>;
157
+ readonly session: WithUnwrappedAxiosResponse$1<SessionApi>;
158
+ readonly storeCollisionComponents: WithUnwrappedAxiosResponse$1<StoreCollisionComponentsApi>;
159
+ readonly storeCollisionSetups: WithUnwrappedAxiosResponse$1<StoreCollisionSetupsApi>;
160
+ readonly storeObject: WithUnwrappedAxiosResponse$1<StoreObjectApi>;
161
+ readonly system: WithUnwrappedAxiosResponse$1<SystemApi>;
162
+ readonly trajectoryCaching: WithUnwrappedAxiosResponse$1<TrajectoryCachingApi>;
163
+ readonly trajectoryExecution: WithUnwrappedAxiosResponse$1<TrajectoryExecutionApi>;
164
+ readonly trajectoryPlanning: WithUnwrappedAxiosResponse$1<TrajectoryPlanningApi>;
165
+ readonly version: WithUnwrappedAxiosResponse$1<VersionApi>;
166
+ readonly virtualController: WithUnwrappedAxiosResponse$1<VirtualControllerApi>;
167
+ readonly virtualControllerBehavior: WithUnwrappedAxiosResponse$1<VirtualControllerBehaviorApi>;
168
+ readonly virtualControllerIOs: WithUnwrappedAxiosResponse$1<VirtualControllerInputsOutputsApi>;
169
+ constructor(opts: NovaAPIClientOpts);
170
+ }
171
+ //#endregion
172
+ //#region src/lib/Nova.d.ts
173
+ type NovaConfig = {
174
+ /**
175
+ * Url of the deployed NOVA instance to connect to
176
+ * e.g. https://saeattii.instance.wandelbots.io
177
+ */
178
+ instanceUrl: string;
179
+ /**
180
+ * Access token for Bearer authentication.
181
+ * If running on a NOVA instance, this can be automatically retrieved from
182
+ * the current session when omitted.
183
+ */
184
+ accessToken?: string;
185
+ } & Omit<Configuration, "isJsonMime" | "basePath">;
186
+ /**
187
+ *
188
+ * Client for connecting to a NOVA instance and controlling robots.
189
+ */
190
+ declare class Nova {
191
+ readonly api: NovaAPIClient;
192
+ readonly config: NovaConfig;
193
+ readonly mock?: MockNovaInstance;
194
+ readonly instanceUrl: URL;
195
+ authPromise: Promise<string | null> | null;
196
+ accessToken: string | null;
197
+ constructor(config: NovaConfig);
198
+ renewAuthentication(): Promise<void>;
199
+ makeWebsocketURL(path: string): string;
200
+ /**
201
+ * Retrieve an AutoReconnectingWebsocket to the given path on the Nova instance.
202
+ * If you explicitly want to reconnect an existing websocket, call `reconnect`
203
+ * on the returned object.
204
+ */
205
+ openReconnectingWebsocket(path: string): AutoReconnectingWebsocket;
206
+ }
207
+ //#endregion
130
208
  export { Nova, NovaAPIClient, NovaCellAPIClient, NovaClient, NovaClientConfig, type NovaConfig, WithCellId, WithUnwrappedAxiosResponse, poseToWandelscriptString };
131
209
  //# sourceMappingURL=index.d.cts.map