@wandelbots/nova-js 3.3.1 → 3.3.2-pr.fix-local-auth0-handling.194.177ffd2

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 (40) hide show
  1. package/dist/NovaClient-CV7ooIkD.d.cts.map +1 -1
  2. package/dist/{NovaClient-D2EItmiH.cjs → NovaClient-DGYu3pLp.cjs} +313 -16
  3. package/dist/NovaClient-DGYu3pLp.cjs.map +1 -0
  4. package/dist/{NovaClient-B8XM3OPO.mjs → NovaClient-DMKIU9kQ.mjs} +239 -8
  5. package/dist/NovaClient-DMKIU9kQ.mjs.map +1 -0
  6. package/dist/NovaClient-qJnHcx2s.d.mts.map +1 -1
  7. package/dist/index.cjs +12 -41
  8. package/dist/index.d.cts +25 -1
  9. package/dist/index.d.cts.map +1 -1
  10. package/dist/index.d.mts +25 -1
  11. package/dist/index.d.mts.map +1 -1
  12. package/dist/index.mjs +3 -35
  13. package/dist/lib/v1/index.cjs +1 -2
  14. package/dist/lib/v1/index.cjs.map +1 -1
  15. package/dist/lib/v1/index.mjs +1 -2
  16. package/dist/lib/v1/index.mjs.map +1 -1
  17. package/dist/lib/v2/index.cjs +11 -14
  18. package/dist/lib/v2/index.cjs.map +1 -1
  19. package/dist/lib/v2/index.d.cts.map +1 -1
  20. package/dist/lib/v2/index.d.mts.map +1 -1
  21. package/dist/lib/v2/index.mjs +3 -6
  22. package/dist/lib/v2/index.mjs.map +1 -1
  23. package/dist/src-BF_NxIDn.mjs +35 -0
  24. package/dist/src-BF_NxIDn.mjs.map +1 -0
  25. package/dist/src-D0XlWTgy.cjs +52 -0
  26. package/dist/src-D0XlWTgy.cjs.map +1 -0
  27. package/package.json +2 -2
  28. package/src/LoginWithAuth0.ts +10 -9
  29. package/src/lib/converters.ts +43 -0
  30. package/src/lib/errorHandling.ts +2 -2
  31. package/src/lib/v1/NovaClient.ts +4 -10
  32. package/src/lib/v2/NovaClient.ts +4 -10
  33. package/dist/LoginWithAuth0-CBD9BXXz.cjs +0 -264
  34. package/dist/LoginWithAuth0-CBD9BXXz.cjs.map +0 -1
  35. package/dist/LoginWithAuth0-wQB-Sol1.mjs +0 -217
  36. package/dist/LoginWithAuth0-wQB-Sol1.mjs.map +0 -1
  37. package/dist/NovaClient-B8XM3OPO.mjs.map +0 -1
  38. package/dist/NovaClient-D2EItmiH.cjs.map +0 -1
  39. package/dist/index.cjs.map +0 -1
  40. package/dist/index.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["lastMotionIds: Set<string>","newTrajectories: GetTrajectoryResponse[]","nova: NovaClient","tryParseJson","AxiosError"],"sources":["../../../src/lib/v1/getLatestTrajectories.ts","../../../src/lib/v1/ProgramStateConnection.ts"],"sourcesContent":["import type { GetTrajectoryResponse } from \"@wandelbots/nova-api/v1\"\nimport type { NovaCellAPIClient } from \"./NovaCellAPIClient\"\n\nlet lastMotionIds: Set<string> = new Set()\n\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\"\nimport { tryParseJson } from \"../converters\"\nimport type { MotionStreamConnection } from \"./MotionStreamConnection\"\nimport type { NovaClient } from \"./NovaClient\"\n\nexport type ProgramRunnerLogEntry = {\n timestamp: number\n message: string\n level?: \"warn\" | \"error\"\n}\n\nexport enum ProgramState {\n NotStarted = \"not started\",\n Running = \"running\",\n Stopped = \"stopped\",\n Failed = \"failed\",\n Completed = \"completed\",\n}\n\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 */\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 constructor(readonly nova: NovaClient) {\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":["lastMotionIds: Set<string>","newTrajectories: GetTrajectoryResponse[]","nova: NovaClient","tryParseJson","AxiosError"],"sources":["../../../src/lib/v1/getLatestTrajectories.ts","../../../src/lib/v1/ProgramStateConnection.ts"],"sourcesContent":["import type { GetTrajectoryResponse } from \"@wandelbots/nova-api/v1\"\nimport type { NovaCellAPIClient } from \"./NovaCellAPIClient\"\n\nlet lastMotionIds: Set<string> = new Set()\n\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\"\nimport { tryParseJson } from \"../converters\"\nimport type { MotionStreamConnection } from \"./MotionStreamConnection\"\nimport type { NovaClient } from \"./NovaClient\"\n\nexport type ProgramRunnerLogEntry = {\n timestamp: number\n message: string\n level?: \"warn\" | \"error\"\n}\n\nexport enum ProgramState {\n NotStarted = \"not started\",\n Running = \"running\",\n Stopped = \"stopped\",\n Failed = \"failed\",\n Completed = \"completed\",\n}\n\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 */\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 constructor(readonly nova: NovaClient) {\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,5 +1,4 @@
1
- import "../../LoginWithAuth0-wQB-Sol1.mjs";
2
- import { a as ConnectedMotionGroup, f as tryParseJson, i as JoggerConnection, n as NovaCellAPIClient, o as poseToWandelscriptString, r as MotionStreamConnection, t as NovaClient } from "../../NovaClient-B8XM3OPO.mjs";
1
+ import { a as ConnectedMotionGroup, h as tryParseJson, i as JoggerConnection, n as NovaCellAPIClient, o as poseToWandelscriptString, r as MotionStreamConnection, t as NovaClient } from "../../NovaClient-DMKIU9kQ.mjs";
3
2
  import { AxiosError } from "axios";
4
3
  import { makeAutoObservable, runInAction } from "mobx";
5
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["lastMotionIds: Set<string>","newTrajectories: GetTrajectoryResponse[]","nova: NovaClient"],"sources":["../../../src/lib/v1/getLatestTrajectories.ts","../../../src/lib/v1/ProgramStateConnection.ts"],"sourcesContent":["import type { GetTrajectoryResponse } from \"@wandelbots/nova-api/v1\"\nimport type { NovaCellAPIClient } from \"./NovaCellAPIClient\"\n\nlet lastMotionIds: Set<string> = new Set()\n\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\"\nimport { tryParseJson } from \"../converters\"\nimport type { MotionStreamConnection } from \"./MotionStreamConnection\"\nimport type { NovaClient } from \"./NovaClient\"\n\nexport type ProgramRunnerLogEntry = {\n timestamp: number\n message: string\n level?: \"warn\" | \"error\"\n}\n\nexport enum ProgramState {\n NotStarted = \"not started\",\n Running = \"running\",\n Stopped = \"stopped\",\n Failed = \"failed\",\n Completed = \"completed\",\n}\n\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 */\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 constructor(readonly nova: NovaClient) {\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.mjs","names":["lastMotionIds: Set<string>","newTrajectories: GetTrajectoryResponse[]","nova: NovaClient"],"sources":["../../../src/lib/v1/getLatestTrajectories.ts","../../../src/lib/v1/ProgramStateConnection.ts"],"sourcesContent":["import type { GetTrajectoryResponse } from \"@wandelbots/nova-api/v1\"\nimport type { NovaCellAPIClient } from \"./NovaCellAPIClient\"\n\nlet lastMotionIds: Set<string> = new Set()\n\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\"\nimport { tryParseJson } from \"../converters\"\nimport type { MotionStreamConnection } from \"./MotionStreamConnection\"\nimport type { NovaClient } from \"./NovaClient\"\n\nexport type ProgramRunnerLogEntry = {\n timestamp: number\n message: string\n level?: \"warn\" | \"error\"\n}\n\nexport enum ProgramState {\n NotStarted = \"not started\",\n Running = \"running\",\n Stopped = \"stopped\",\n Failed = \"failed\",\n Completed = \"completed\",\n}\n\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 */\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 constructor(readonly nova: NovaClient) {\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,10 +1,11 @@
1
- const require_LoginWithAuth0 = require('../../LoginWithAuth0-CBD9BXXz.cjs');
1
+ const require_NovaClient = require('../../NovaClient-DGYu3pLp.cjs');
2
+ require('../../src-D0XlWTgy.cjs');
2
3
  let axios = require("axios");
3
- axios = require_LoginWithAuth0.__toESM(axios);
4
+ axios = require_NovaClient.__toESM(axios);
4
5
  let url_join = require("url-join");
5
- url_join = require_LoginWithAuth0.__toESM(url_join);
6
+ url_join = require_NovaClient.__toESM(url_join);
6
7
  let path_to_regexp = require("path-to-regexp");
7
- path_to_regexp = require_LoginWithAuth0.__toESM(path_to_regexp);
8
+ path_to_regexp = require_NovaClient.__toESM(path_to_regexp);
8
9
  let __wandelbots_nova_api_v2 = require("@wandelbots/nova-api/v2");
9
10
 
10
11
  //#region src/lib/v2/NovaCellAPIClient.ts
@@ -616,10 +617,6 @@ const defaultMotionState = { result: {
616
617
 
617
618
  //#endregion
618
619
  //#region src/lib/v2/NovaClient.ts
619
- function permissiveInstanceUrlParse(url) {
620
- if (!url.startsWith("http")) url = `http://${url}`;
621
- return new URL(url).toString();
622
- }
623
620
  /**
624
621
  *
625
622
  * Client for connecting to a Nova instance and controlling robots.
@@ -633,9 +630,9 @@ var NovaClient = class {
633
630
  cellId,
634
631
  ...config
635
632
  };
636
- this.accessToken = config.accessToken || require_LoginWithAuth0.availableStorage.getString("wbjs.access_token") || null;
633
+ this.accessToken = config.accessToken || require_NovaClient.availableStorage.getString("wbjs.access_token") || null;
637
634
  if (this.config.instanceUrl === "https://mock.example.com") this.mock = new MockNovaInstance();
638
- else this.config.instanceUrl = permissiveInstanceUrlParse(this.config.instanceUrl);
635
+ else this.config.instanceUrl = require_NovaClient.parseUrl(this.config.instanceUrl, { defaultScheme: "http" }).toString();
639
636
  const axiosInstance = axios.default.create({
640
637
  baseURL: (0, url_join.default)(this.config.instanceUrl, "/api/v2"),
641
638
  headers: typeof window !== "undefined" && window.location.origin.includes("localhost") ? {} : { "X-Wandelbots-Client": "Wandelbots-Nova-JS-SDK" }
@@ -682,11 +679,11 @@ var NovaClient = class {
682
679
  }
683
680
  async renewAuthentication() {
684
681
  if (this.authPromise) return;
685
- this.authPromise = require_LoginWithAuth0.loginWithAuth0(this.config.instanceUrl);
682
+ this.authPromise = require_NovaClient.loginWithAuth0(this.config.instanceUrl);
686
683
  try {
687
684
  this.accessToken = await this.authPromise;
688
- if (this.accessToken) require_LoginWithAuth0.availableStorage.setString("wbjs.access_token", this.accessToken);
689
- else require_LoginWithAuth0.availableStorage.delete("wbjs.access_token");
685
+ if (this.accessToken) require_NovaClient.availableStorage.setString("wbjs.access_token", this.accessToken);
686
+ else require_NovaClient.availableStorage.delete("wbjs.access_token");
690
687
  } finally {
691
688
  this.authPromise = null;
692
689
  }
@@ -708,7 +705,7 @@ var NovaClient = class {
708
705
  * on the returned object.
709
706
  */
710
707
  openReconnectingWebsocket(path) {
711
- return new require_LoginWithAuth0.AutoReconnectingWebsocket(this.makeWebsocketURL(path), { mock: this.mock });
708
+ return new require_NovaClient.AutoReconnectingWebsocket(this.makeWebsocketURL(path), { mock: this.mock });
712
709
  }
713
710
  };
714
711
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["cellId: string","opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n }","SystemApi","CellApi","MotionGroupApi","MotionGroupModelsApi","ControllerApi","ControllerInputsOutputsApi","TrajectoryPlanningApi","TrajectoryExecutionApi","TrajectoryCachingApi","ApplicationApi","JoggingApi","KinematicsApi","BUSInputsOutputsApi","VirtualControllerApi","VirtualControllerBehaviorApi","VirtualControllerInputsOutputsApi","StoreObjectApi","StoreCollisionComponentsApi","StoreCollisionSetupsApi","pathToRegexp","AxiosError","availableStorage","config","loginWithAuth0","AutoReconnectingWebsocket"],"sources":["../../../src/lib/v2/NovaCellAPIClient.ts","../../../src/lib/v2/mock/MockNovaInstance.ts","../../../src/lib/v2/NovaClient.ts","../../../src/lib/v2/wandelscriptUtils.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 MotionGroupApi,\n MotionGroupModelsApi,\n StoreCollisionComponentsApi,\n StoreCollisionSetupsApi,\n StoreObjectApi,\n SystemApi,\n TrajectoryCachingApi,\n TrajectoryExecutionApi,\n TrajectoryPlanningApi,\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\nexport type WithCellId<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<OmitFirstArg<T[P]>>\n}\n\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 */\nexport class NovaCellAPIClient {\n constructor(\n readonly cellId: string,\n readonly opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n },\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 readonly system = this.withUnwrappedResponsesOnly(SystemApi)\n readonly cell = this.withUnwrappedResponsesOnly(CellApi)\n\n readonly motionGroup = this.withCellId(MotionGroupApi)\n readonly motionGroupModels = this.withCellId(MotionGroupModelsApi)\n\n readonly controller = this.withCellId(ControllerApi)\n\n readonly controllerIOs = this.withCellId(ControllerInputsOutputsApi)\n\n readonly trajectoryPlanning = this.withCellId(TrajectoryPlanningApi)\n readonly trajectoryExecution = this.withCellId(TrajectoryExecutionApi)\n readonly trajectoryCaching = this.withCellId(TrajectoryCachingApi)\n\n readonly application = this.withCellId(ApplicationApi)\n readonly applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi)\n\n readonly jogging = this.withCellId(JoggingApi)\n\n readonly kinematics = this.withCellId(KinematicsApi)\n\n readonly busInputsOutputs = this.withCellId(BUSInputsOutputsApi)\n\n readonly virtualController = this.withCellId(VirtualControllerApi)\n readonly virtualControllerBehavior = this.withCellId(\n VirtualControllerBehaviorApi,\n )\n readonly virtualControllerIOs = this.withCellId(\n VirtualControllerInputsOutputsApi,\n )\n\n readonly storeObject = this.withCellId(StoreObjectApi)\n readonly storeCollisionComponents = this.withCellId(\n StoreCollisionComponentsApi,\n )\n readonly storeCollisionSetups = this.withCellId(StoreCollisionSetupsApi)\n}\n","/** biome-ignore-all lint/suspicious/noApproximativeNumericConstant: mock data contains approximative pi values from robot description */\nimport type { MotionGroupState, RobotController } 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\"\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 {\n method: \"GET\",\n path: \"/cells/:cellId/controllers\",\n handle() {\n return [\"mock-ur5e\"]\n },\n },\n {\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 {\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 {\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 {\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 ] //satisfies CoordinateSystems\n },\n },\n ]\n\n const method = config.method?.toUpperCase() || \"GET\"\n const path = `/cells${config.url?.split(\"/cells\")[1]?.split(\"?\")[0]}`\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 // return {\n // status: 404,\n // statusText: \"Not Found\",\n // data: \"\",\n // headers: {},\n // config,\n // request: {\n // responseURL: config.url,\n // },\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 } 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 urlJoin from \"url-join\"\nimport { loginWithAuth0 } from \"../../LoginWithAuth0\"\nimport { AutoReconnectingWebsocket } from \"../AutoReconnectingWebsocket\"\nimport { availableStorage } from \"../availableStorage\"\nimport { MockNovaInstance } from \"./mock/MockNovaInstance\"\nimport { NovaCellAPIClient } from \"./NovaCellAPIClient\"\n\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\nfunction permissiveInstanceUrlParse(url: string): string {\n if (!url.startsWith(\"http\")) {\n url = `http://${url}`\n }\n\n return new URL(url).toString()\n}\n\n/**\n *\n * Client for connecting to a Nova instance and controlling robots.\n */\nexport class NovaClient {\n readonly api: NovaCellAPIClient\n readonly config: NovaClientConfigWithDefaults\n readonly mock?: MockNovaInstance\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 } else {\n this.config.instanceUrl = permissiveInstanceUrlParse(\n this.config.instanceUrl,\n )\n }\n\n // Set up Axios instance with interceptor for token fetching\n const axiosInstance = axios.create({\n baseURL: urlJoin(this.config.instanceUrl, \"/api/v2\"),\n // TODO - backend needs to set proper CORS headers for this\n headers:\n typeof window !== \"undefined\" &&\n window.location.origin.includes(\"localhost\")\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 window.location.reload()\n }\n }\n }\n\n return Promise.reject(error)\n },\n )\n }\n\n this.api = new NovaCellAPIClient(cellId, {\n ...config,\n basePath: urlJoin(this.config.instanceUrl, \"/api/v2\"),\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 this.authPromise = loginWithAuth0(this.config.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 urlJoin(\n this.config.instanceUrl,\n `/api/v2/cells/${this.config.cellId}`,\n path,\n ),\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 */\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"],"mappings":"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OACN,MAAM;QACJ,UAAU;SAAC;SAAG;SAAG;SAAE;QACnB,aAAa;SAAC;SAAG;SAAG;SAAE;QACvB;OACF,EACF;MACD,UAAU,EACR,UAAU;OACR,MAAM;OACN,SAAS;OACT,gBAAgB;QAAC;QAAG;QAAG;QAAE;OACzB,mBAAmB;QAAC;QAAG;QAAG;QAAE;OAC7B,EACF;MACD,YAAY;MACZ,eAAe;OACb;QACE,OAAO;QACP,GAAG;QACJ;OACD,EACE,GAAG,MACJ;OACD,EACE,GAAG,QACJ;OACD;QACE,OAAO;QACP,GAAG;QACJ;OACD;QACE,OAAO;QACP,GAAG;QACJ;OACD,EACE,GAAG,MACJ;OACF;MACD,kBAAkB;OAChB,aAAa;QACX,QAAQ;SACN;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACF;QACD,KAAK,EACH,UAAU,KACX;QACD,OAAO,EACL,UAAU,KACX;QACD,QAAQ,EACN,UAAU,KACX;QACF;OACD,eAAe;QACb,QAAQ;SACN;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACF;QACD,KAAK,EACH,UAAU,KACX;QACF;OACD,kBAAkB;QAChB,QAAQ;SACN;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACF;QACD,KAAK,EACH,UAAU,KACX;QACF;OACD,kBAAkB;QAChB,QAAQ;SACN;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UAC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"}
1
+ {"version":3,"file":"index.cjs","names":["cellId: string","opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n }","SystemApi","CellApi","MotionGroupApi","MotionGroupModelsApi","ControllerApi","ControllerInputsOutputsApi","TrajectoryPlanningApi","TrajectoryExecutionApi","TrajectoryCachingApi","ApplicationApi","JoggingApi","KinematicsApi","BUSInputsOutputsApi","VirtualControllerApi","VirtualControllerBehaviorApi","VirtualControllerInputsOutputsApi","StoreObjectApi","StoreCollisionComponentsApi","StoreCollisionSetupsApi","pathToRegexp","AxiosError","availableStorage","parseUrl","config","loginWithAuth0","AutoReconnectingWebsocket"],"sources":["../../../src/lib/v2/NovaCellAPIClient.ts","../../../src/lib/v2/mock/MockNovaInstance.ts","../../../src/lib/v2/NovaClient.ts","../../../src/lib/v2/wandelscriptUtils.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 MotionGroupApi,\n MotionGroupModelsApi,\n StoreCollisionComponentsApi,\n StoreCollisionSetupsApi,\n StoreObjectApi,\n SystemApi,\n TrajectoryCachingApi,\n TrajectoryExecutionApi,\n TrajectoryPlanningApi,\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\nexport type WithCellId<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<OmitFirstArg<T[P]>>\n}\n\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 */\nexport class NovaCellAPIClient {\n constructor(\n readonly cellId: string,\n readonly opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n },\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 readonly system = this.withUnwrappedResponsesOnly(SystemApi)\n readonly cell = this.withUnwrappedResponsesOnly(CellApi)\n\n readonly motionGroup = this.withCellId(MotionGroupApi)\n readonly motionGroupModels = this.withCellId(MotionGroupModelsApi)\n\n readonly controller = this.withCellId(ControllerApi)\n\n readonly controllerIOs = this.withCellId(ControllerInputsOutputsApi)\n\n readonly trajectoryPlanning = this.withCellId(TrajectoryPlanningApi)\n readonly trajectoryExecution = this.withCellId(TrajectoryExecutionApi)\n readonly trajectoryCaching = this.withCellId(TrajectoryCachingApi)\n\n readonly application = this.withCellId(ApplicationApi)\n readonly applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi)\n\n readonly jogging = this.withCellId(JoggingApi)\n\n readonly kinematics = this.withCellId(KinematicsApi)\n\n readonly busInputsOutputs = this.withCellId(BUSInputsOutputsApi)\n\n readonly virtualController = this.withCellId(VirtualControllerApi)\n readonly virtualControllerBehavior = this.withCellId(\n VirtualControllerBehaviorApi,\n )\n readonly virtualControllerIOs = this.withCellId(\n VirtualControllerInputsOutputsApi,\n )\n\n readonly storeObject = this.withCellId(StoreObjectApi)\n readonly storeCollisionComponents = this.withCellId(\n StoreCollisionComponentsApi,\n )\n readonly storeCollisionSetups = this.withCellId(StoreCollisionSetupsApi)\n}\n","/** biome-ignore-all lint/suspicious/noApproximativeNumericConstant: mock data contains approximative pi values from robot description */\nimport type { MotionGroupState, RobotController } 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\"\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 {\n method: \"GET\",\n path: \"/cells/:cellId/controllers\",\n handle() {\n return [\"mock-ur5e\"]\n },\n },\n {\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 {\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 {\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 {\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 ] //satisfies CoordinateSystems\n },\n },\n ]\n\n const method = config.method?.toUpperCase() || \"GET\"\n const path = `/cells${config.url?.split(\"/cells\")[1]?.split(\"?\")[0]}`\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 // return {\n // status: 404,\n // statusText: \"Not Found\",\n // data: \"\",\n // headers: {},\n // config,\n // request: {\n // responseURL: config.url,\n // },\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 } 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 urlJoin from \"url-join\"\nimport { loginWithAuth0 } from \"../../LoginWithAuth0\"\nimport { AutoReconnectingWebsocket } from \"../AutoReconnectingWebsocket\"\nimport { availableStorage } from \"../availableStorage\"\nimport { MockNovaInstance } from \"./mock/MockNovaInstance\"\nimport { NovaCellAPIClient } from \"./NovaCellAPIClient\"\nimport { parseUrl } from \"../..\"\n\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 *\n * Client for connecting to a Nova instance and controlling robots.\n */\nexport class NovaClient {\n readonly api: NovaCellAPIClient\n readonly config: NovaClientConfigWithDefaults\n readonly mock?: MockNovaInstance\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 } else {\n this.config.instanceUrl = parseUrl(\n this.config.instanceUrl,\n { defaultScheme: \"http\" }\n ).toString()\n }\n\n // Set up Axios instance with interceptor for token fetching\n const axiosInstance = axios.create({\n baseURL: urlJoin(this.config.instanceUrl, \"/api/v2\"),\n // TODO - backend needs to set proper CORS headers for this\n headers:\n typeof window !== \"undefined\" &&\n window.location.origin.includes(\"localhost\")\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 window.location.reload()\n }\n }\n }\n\n return Promise.reject(error)\n },\n )\n }\n\n this.api = new NovaCellAPIClient(cellId, {\n ...config,\n basePath: urlJoin(this.config.instanceUrl, \"/api/v2\"),\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 this.authPromise = loginWithAuth0(this.config.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 urlJoin(\n this.config.instanceUrl,\n `/api/v2/cells/${this.config.cellId}`,\n path,\n ),\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 */\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"],"mappings":";;;;;;;;;;;;;;;AAoDA,IAAa,oBAAb,MAA+B;CAC7B,YACE,AAASA,QACT,AAASC,MAIT;EALS;EACA;gBAkFO,KAAK,2BAA2BC,mCAAU;cAC5C,KAAK,2BAA2BC,iCAAQ;qBAEjC,KAAK,WAAWC,wCAAe;2BACzB,KAAK,WAAWC,8CAAqB;oBAE5C,KAAK,WAAWC,uCAAc;uBAE3B,KAAK,WAAWC,oDAA2B;4BAEtC,KAAK,WAAWC,+CAAsB;6BACrC,KAAK,WAAWC,gDAAuB;2BACzC,KAAK,WAAWC,8CAAqB;qBAE3C,KAAK,WAAWC,wCAAe;2BACzB,KAAK,2BAA2BA,wCAAe;iBAEzD,KAAK,WAAWC,oCAAW;oBAExB,KAAK,WAAWC,uCAAc;0BAExB,KAAK,WAAWC,6CAAoB;2BAEnC,KAAK,WAAWC,8CAAqB;mCAC7B,KAAK,WACxCC,sDACD;8BAC+B,KAAK,WACnCC,2DACD;qBAEsB,KAAK,WAAWC,wCAAe;kCAClB,KAAK,WACvCC,qDACD;8BAC+B,KAAK,WAAWC,iDAAwB;;;;;;;CA1GxE,AAAQ,WACN,gBAKA;EACA,MAAM,YAAY,IAAI,eACpB;GACE,GAAG,KAAK;GACR,aAAa,SAAiB;AAC5B,WAAO,SAAS;;GAEnB,EACD,KAAK,KAAK,YAAY,IACtB,KAAK,KAAK,iBAAiB,cAAM,QAAQ,CAC1C;AAID,OAAK,MAAM,OAAO,QAAQ,QAAQ,QAAQ,eAAe,UAAU,CAAE,CACnE,KAAI,QAAQ,iBAAiB,OAAO,UAAU,SAAS,YAAY;GACjE,MAAM,mBAAmB,UAAU;AACnC,aAAU,QAAQ,GAAG,SAAgB;AACnC,WAAO,iBACJ,MAAM,WAAW,CAAC,KAAK,QAAQ,GAAG,KAAK,CAAC,CACxC,MAAM,QAAa,IAAI,KAAK;;;AAKrC,SAAO;;;;;CAMT,AAAQ,2BACN,gBAKA;EACA,MAAM,YAAY,IAAI,eACpB;GACE,GAAG,KAAK;GACR,aAAa,SAAiB;AAC5B,WAAO,SAAS;;GAEnB,EACD,KAAK,KAAK,YAAY,IACtB,KAAK,KAAK,iBAAiB,cAAM,QAAQ,CAC1C;AAID,OAAK,MAAM,OAAO,QAAQ,QAAQ,QAAQ,eAAe,UAAU,CAAE,CACnE,KAAI,QAAQ,iBAAiB,OAAO,UAAU,SAAS,YAAY;GACjE,MAAM,mBAAmB,UAAU;AACnC,aAAU,QAAQ,GAAG,SAAgB;AACnC,WAAO,iBACJ,MAAM,WAAW,KAAK,CACtB,MAAM,QAAa,IAAI,KAAK;;;AAKrC,SAAO;;;;;;;;;AC5HX,IAAa,mBAAb,MAA8B;;qBACwB,EAAE;;CAEtD,MAAM,iBACJ,QACwB;EACxB,MAAM,cAAc;GAClB;IACE,QAAQ;IACR,MAAM;IACN,SAAS;AACP,YAAO,CAAC,YAAY;;IAEvB;GACD;IACE,QAAQ;IACR,MAAM;IACN,SAAS;AACP,YAAO;MACL,eAAe;OACb,wBAAwB;OACxB,MAAM;OACN,cAAc;OACd,MAAM;OACP;MACD,MAAM;MACP;;IAEJ;GACD;IACE,QAAQ;IACR,MAAM;IACN,SAAS;AACP,YAAO;MACL,MAAM;MACN,YAAY,EAAE;MACd,WAAW;MACX,iBAAiB;MACjB,YAAY;MACZ,gBAAgB;MAChB,cAAc;MACd,mBAAmB;MACnB,eAAe,CACb;OACE,WAAW;OACX,iBAAiB;OACjB,cAAc;OACd,YAAY;OACZ,gBAAgB;QACd;QAAmB;QAAqB;QACxC;QAAmB;QAAoB;QACxC;OACD,qBAAqB,EACnB,eAAe;QAAC;QAAO;QAAO;QAAO;QAAO;QAAO;QAAM,EAC1D;OACD,cAAc,EAAE;OAChB,eAAe;QAAC;QAAG;QAAG;QAAG;QAAG;QAAG;QAAE;OACjC,aAAa;QACX,UAAU;SACR;SAAmB;SAAoB;SACxC;QACD,aAAa;SACX;SAAoB;SAAoB;SACzC;QACF;OACD,KAAK;OACL,UAAU;QACR,UAAU;SACR;SAAmB;SAAoB;SACxC;QACD,aAAa;SACX;SAAoB;SAAoB;SACzC;QACF;OACD,SAAS;OACT,mBAAmB;OACnB,YAAY;OACb,CACF;MACF;;IAEJ;GACD;IACE,QAAQ;IACR,MAAM;IACN,SAAS;AACP,YAAO;MACL,oBAAoB;MACpB,UAAU;OACR,UAAU;QAAC;QAAG;QAAG;QAAE;OACnB,aAAa;QAAC;QAAG;QAAG;QAAE;OACvB;MACD,MAAM,EACJ,QAAQ;OACN,MAAM;OACN,MAAM;QACJ,UAAU;SAAC;SAAG;SAAG;SAAE;QACnB,aAAa;SAAC;SAAG;SAAG;SAAE;QACvB;OACF,EACF;MACD,UAAU,EACR,UAAU;OACR,MAAM;OACN,SAAS;OACT,gBAAgB;QAAC;QAAG;QAAG;QAAE;OACzB,mBAAmB;QAAC;QAAG;QAAG;QAAE;OAC7B,EACF;MACD,YAAY;MACZ,eAAe;OACb;QACE,OAAO;QACP,GAAG;QACJ;OACD,EACE,GAAG,MACJ;OACD,EACE,GAAG,QACJ;OACD;QACE,OAAO;QACP,GAAG;QACJ;OACD;QACE,OAAO;QACP,GAAG;QACJ;OACD,EACE,GAAG,MACJ;OACF;MACD,kBAAkB;OAChB,aAAa;QACX,QAAQ;SACN;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACF;QACD,KAAK,EACH,UAAU,KACX;QACD,OAAO,EACL,UAAU,KACX;QACD,QAAQ,EACN,UAAU,KACX;QACF;OACD,eAAe;QACb,QAAQ;SACN;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACF;QACD,KAAK,EACH,UAAU,KACX;QACF;OACD,kBAAkB;QAChB,QAAQ;SACN;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACF;QACD,KAAK,EACH,UAAU,KACX;QACF;OACD,kBAAkB;QAChB,QAAQ;SACN;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UACD,UAAU;UACV,cAAc;UACd,QAAQ;UACT;SACD;UACE,UAAU;WACR,aAAa;WACb,aAAa;WACd;UA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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/v2/NovaCellAPIClient.ts","../../../src/lib/v2/NovaClient.ts","../../../src/lib/v2/wandelscriptUtils.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/v2/NovaCellAPIClient.ts","../../../src/lib/v2/NovaClient.ts","../../../src/lib/v2/wandelscriptUtils.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/v2/NovaCellAPIClient.ts","../../../src/lib/v2/NovaClient.ts","../../../src/lib/v2/wandelscriptUtils.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/v2/NovaCellAPIClient.ts","../../../src/lib/v2/NovaClient.ts","../../../src/lib/v2/wandelscriptUtils.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { n as availableStorage, r as AutoReconnectingWebsocket, t as loginWithAuth0 } from "../../LoginWithAuth0-wQB-Sol1.mjs";
1
+ import { c as loginWithAuth0, p as parseUrl, v as availableStorage, y as AutoReconnectingWebsocket } from "../../NovaClient-DMKIU9kQ.mjs";
2
+ import "../../src-BF_NxIDn.mjs";
2
3
  import axios, { AxiosError, isAxiosError } from "axios";
3
4
  import urlJoin from "url-join";
4
5
  import * as pathToRegexp from "path-to-regexp";
@@ -615,10 +616,6 @@ const defaultMotionState = { result: {
615
616
 
616
617
  //#endregion
617
618
  //#region src/lib/v2/NovaClient.ts
618
- function permissiveInstanceUrlParse(url) {
619
- if (!url.startsWith("http")) url = `http://${url}`;
620
- return new URL(url).toString();
621
- }
622
619
  /**
623
620
  *
624
621
  * Client for connecting to a Nova instance and controlling robots.
@@ -634,7 +631,7 @@ var NovaClient = class {
634
631
  };
635
632
  this.accessToken = config.accessToken || availableStorage.getString("wbjs.access_token") || null;
636
633
  if (this.config.instanceUrl === "https://mock.example.com") this.mock = new MockNovaInstance();
637
- else this.config.instanceUrl = permissiveInstanceUrlParse(this.config.instanceUrl);
634
+ else this.config.instanceUrl = parseUrl(this.config.instanceUrl, { defaultScheme: "http" }).toString();
638
635
  const axiosInstance = axios.create({
639
636
  baseURL: urlJoin(this.config.instanceUrl, "/api/v2"),
640
637
  headers: typeof window !== "undefined" && window.location.origin.includes("localhost") ? {} : { "X-Wandelbots-Client": "Wandelbots-Nova-JS-SDK" }