@wandelbots/nova-js 3.11.0 → 3.11.1

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 (84) hide show
  1. package/dist/{AutoReconnectingWebsocket-DNOF9mpz.d.cts → AutoReconnectingWebsocket-1K2J1NA4.d.cts} +5 -5
  2. package/dist/AutoReconnectingWebsocket-1K2J1NA4.d.cts.map +1 -0
  3. package/dist/{AutoReconnectingWebsocket-DNOF9mpz.d.mts → AutoReconnectingWebsocket-1K2J1NA4.d.mts} +5 -5
  4. package/dist/AutoReconnectingWebsocket-1K2J1NA4.d.mts.map +1 -0
  5. package/dist/{context-Dmy8AyY7.cjs → context-TPb5fGlK.cjs} +8 -7
  6. package/dist/context-TPb5fGlK.cjs.map +1 -0
  7. package/dist/{context-BQk3xGAI.mjs → context-kT2C20EX.mjs} +8 -7
  8. package/dist/context-kT2C20EX.mjs.map +1 -0
  9. package/dist/index.cjs +2 -2
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.cts +3 -3
  12. package/dist/index.d.cts.map +1 -1
  13. package/dist/index.d.mts +3 -3
  14. package/dist/index.d.mts.map +1 -1
  15. package/dist/index.mjs +2 -2
  16. package/dist/index.mjs.map +1 -1
  17. package/dist/{lib/deprecated/v1 → v1}/index.cjs +8 -6
  18. package/dist/v1/index.cjs.map +1 -0
  19. package/dist/{lib/deprecated/v1 → v1}/index.d.cts +3 -3
  20. package/dist/v1/index.d.cts.map +1 -0
  21. package/dist/{lib/deprecated/v1 → v1}/index.d.mts +3 -3
  22. package/dist/v1/index.d.mts.map +1 -0
  23. package/dist/{lib/deprecated/v1 → v1}/index.mjs +8 -6
  24. package/dist/v1/index.mjs.map +1 -0
  25. package/dist/{lib/v2 → v2}/index.cjs +82 -20
  26. package/dist/v2/index.cjs.map +1 -0
  27. package/dist/{lib/v2 → v2}/index.d.cts +22 -22
  28. package/dist/v2/index.d.cts.map +1 -0
  29. package/dist/{lib/v2 → v2}/index.d.mts +22 -22
  30. package/dist/v2/index.d.mts.map +1 -0
  31. package/dist/{lib/v2 → v2}/index.mjs +82 -20
  32. package/dist/v2/index.mjs.map +1 -0
  33. package/dist/{wandelscriptUtils-BDdIFHPD.mjs → wandelscriptUtils-CwtdZRDs.mjs} +71 -14
  34. package/dist/wandelscriptUtils-CwtdZRDs.mjs.map +1 -0
  35. package/dist/{wandelscriptUtils-1A9uFPV_.d.cts → wandelscriptUtils-DY3WsiuB.d.cts} +37 -37
  36. package/dist/wandelscriptUtils-DY3WsiuB.d.cts.map +1 -0
  37. package/dist/{wandelscriptUtils-pySXnBlX.d.mts → wandelscriptUtils-YHTxn_p9.d.mts} +37 -37
  38. package/dist/wandelscriptUtils-YHTxn_p9.d.mts.map +1 -0
  39. package/dist/{wandelscriptUtils-BUUwGZNr.cjs → wandelscriptUtils-dUlZrOhy.cjs} +71 -14
  40. package/dist/wandelscriptUtils-dUlZrOhy.cjs.map +1 -0
  41. package/package.json +7 -7
  42. package/src/index.ts +7 -7
  43. package/src/lib/AutoReconnectingWebsocket.ts +8 -3
  44. package/src/lib/{v2/Nova.ts → Nova.ts} +21 -11
  45. package/src/lib/deprecated/v1/ConnectedMotionGroup.ts +42 -16
  46. package/src/lib/deprecated/v1/JoggerConnection.ts +13 -7
  47. package/src/lib/deprecated/v1/MotionStreamConnection.ts +21 -9
  48. package/src/lib/deprecated/v1/NovaCellAPIClient.ts +65 -44
  49. package/src/lib/deprecated/v1/NovaClient.ts +10 -10
  50. package/src/lib/deprecated/v1/ProgramStateConnection.ts +8 -5
  51. package/src/lib/deprecated/v1/getLatestTrajectories.ts +1 -1
  52. package/src/lib/deprecated/v1/mock/MockNovaInstance.ts +1 -1
  53. package/src/lib/deprecated/v2/NovaCellAPIClient.ts +72 -51
  54. package/src/lib/deprecated/v2/NovaClient.ts +8 -8
  55. package/src/lib/errorHandling.ts +1 -1
  56. package/src/lib/{v2/mock → mock}/MockNovaInstance.ts +8 -8
  57. package/src/v1/index.ts +14 -0
  58. package/src/v2/index.ts +7 -0
  59. package/dist/AutoReconnectingWebsocket-DNOF9mpz.d.cts.map +0 -1
  60. package/dist/AutoReconnectingWebsocket-DNOF9mpz.d.mts.map +0 -1
  61. package/dist/context-BQk3xGAI.mjs.map +0 -1
  62. package/dist/context-Dmy8AyY7.cjs.map +0 -1
  63. package/dist/lib/deprecated/v1/index.cjs.map +0 -1
  64. package/dist/lib/deprecated/v1/index.d.cts.map +0 -1
  65. package/dist/lib/deprecated/v1/index.d.mts.map +0 -1
  66. package/dist/lib/deprecated/v1/index.mjs.map +0 -1
  67. package/dist/lib/v2/index.cjs.map +0 -1
  68. package/dist/lib/v2/index.d.cts.map +0 -1
  69. package/dist/lib/v2/index.d.mts.map +0 -1
  70. package/dist/lib/v2/index.mjs.map +0 -1
  71. package/dist/wandelscriptUtils-1A9uFPV_.d.cts.map +0 -1
  72. package/dist/wandelscriptUtils-BDdIFHPD.mjs.map +0 -1
  73. package/dist/wandelscriptUtils-BUUwGZNr.cjs.map +0 -1
  74. package/dist/wandelscriptUtils-pySXnBlX.d.mts.map +0 -1
  75. package/src/lib/deprecated/v1/index.ts +0 -14
  76. package/src/lib/v2/index.ts +0 -7
  77. /package/src/{LoginWithAuth0.ts → lib/LoginWithAuth0.ts} +0 -0
  78. /package/src/lib/{v2/NovaAPIClient.ts → NovaAPIClient.ts} +0 -0
  79. /package/src/lib/{v2/mock → mock}/getCurrentRobotControllerState.ts +0 -0
  80. /package/src/lib/{v2/mock → mock}/getMotionGroupDescription.ts +0 -0
  81. /package/src/lib/{v2/mock → mock}/getMotionGroupKinematicModel.ts +0 -0
  82. /package/src/lib/{v2/mock → mock}/getRobotController.ts +0 -0
  83. /package/src/lib/{v2/mock → mock}/listCoordinateSystems.ts +0 -0
  84. /package/src/lib/{v2/mock → mock}/listRobotControllers.ts +0 -0
@@ -1,4 +1,4 @@
1
- import { g as AutoReconnectingWebsocket, h as availableStorage, i as loginWithAuth0, l as parseNovaInstanceUrl, n as isLocalhostDev } from "../../context-BQk3xGAI.mjs";
1
+ import { g as AutoReconnectingWebsocket, h as availableStorage, i as loginWithAuth0, l as parseNovaInstanceUrl, n as isLocalhostDev } from "../context-kT2C20EX.mjs";
2
2
  import axios, { AxiosError, isAxiosError } from "axios";
3
3
  import * as pathToRegexp from "path-to-regexp";
4
4
  import { ApplicationApi, BUSInputsOutputsApi, CellApi, ControllerApi, ControllerInputsOutputsApi, JoggingApi, KinematicsApi, LicenseApi, MotionGroupApi, MotionGroupModelsApi, NOVACloudApi, ProgramApi, RobotConfigurationsApi, SessionApi, StoreCollisionComponentsApi, StoreCollisionSetupsApi, StoreObjectApi, SystemApi, TrajectoryCachingApi, TrajectoryExecutionApi, TrajectoryPlanningApi, VersionApi, VirtualControllerApi, VirtualControllerBehaviorApi, VirtualControllerInputsOutputsApi } from "@wandelbots/nova-api/v2";
@@ -10,6 +10,34 @@ export * from "@wandelbots/nova-api/v2";
10
10
  * @deprecated Use `NovaAPIClient` from `@wandelbots/nova-js/v2` instead.
11
11
  */
12
12
  var NovaCellAPIClient = class {
13
+ system;
14
+ cell;
15
+ motionGroup;
16
+ motionGroupModels;
17
+ controller;
18
+ controllerIOs;
19
+ trajectoryPlanning;
20
+ trajectoryExecution;
21
+ trajectoryCaching;
22
+ application;
23
+ applicationGlobal;
24
+ jogging;
25
+ kinematics;
26
+ busInputsOutputs;
27
+ virtualController;
28
+ virtualControllerBehavior;
29
+ virtualControllerIOs;
30
+ storeObject;
31
+ storeCollisionComponents;
32
+ storeCollisionSetups;
33
+ program;
34
+ license;
35
+ novaCloud;
36
+ robotConfigurations;
37
+ version;
38
+ session;
39
+ cellId;
40
+ opts;
13
41
  constructor(cellId, opts) {
14
42
  this.cellId = cellId;
15
43
  this.opts = opts;
@@ -80,7 +108,7 @@ var NovaCellAPIClient = class {
80
108
  }
81
109
  };
82
110
  //#endregion
83
- //#region src/lib/v2/mock/getCurrentRobotControllerState.ts
111
+ //#region src/lib/mock/getCurrentRobotControllerState.ts
84
112
  const getCurrentRobotControllerState = {
85
113
  method: "GET",
86
114
  path: "/cells/:cellId/controllers/:controllerId/state",
@@ -157,7 +185,7 @@ const getCurrentRobotControllerState = {
157
185
  }
158
186
  };
159
187
  //#endregion
160
- //#region src/lib/v2/mock/getMotionGroupDescription.ts
188
+ //#region src/lib/mock/getMotionGroupDescription.ts
161
189
  const getMotionGroupDescription = {
162
190
  method: "GET",
163
191
  path: "/cells/:cellId/controllers/:controllerId/motion-groups/:motionGroupId/description",
@@ -468,7 +496,7 @@ const getMotionGroupDescription = {
468
496
  }
469
497
  };
470
498
  //#endregion
471
- //#region src/lib/v2/mock/getMotionGroupKinematicModel.ts
499
+ //#region src/lib/mock/getMotionGroupKinematicModel.ts
472
500
  const getMotionGroupKinematicModel = {
473
501
  method: "GET",
474
502
  path: "/motion-group-models/:motionGroupModel/kinematic",
@@ -523,7 +551,7 @@ const getMotionGroupKinematicModel = {
523
551
  }
524
552
  };
525
553
  //#endregion
526
- //#region src/lib/v2/mock/getRobotController.ts
554
+ //#region src/lib/mock/getRobotController.ts
527
555
  const getRobotController = {
528
556
  method: "GET",
529
557
  path: "/cells/:cellId/controllers/:controllerId",
@@ -540,7 +568,7 @@ const getRobotController = {
540
568
  }
541
569
  };
542
570
  //#endregion
543
- //#region src/lib/v2/mock/listCoordinateSystems.ts
571
+ //#region src/lib/mock/listCoordinateSystems.ts
544
572
  const listCoordinateSystems = {
545
573
  method: "GET",
546
574
  path: "/cells/:cellId/controllers/:controllerId/coordinate-systems",
@@ -579,7 +607,7 @@ const listCoordinateSystems = {
579
607
  }
580
608
  };
581
609
  //#endregion
582
- //#region src/lib/v2/mock/listRobotControllers.ts
610
+ //#region src/lib/mock/listRobotControllers.ts
583
611
  const listRobotControllers = {
584
612
  method: "GET",
585
613
  path: "/cells/:cellId/controllers",
@@ -588,14 +616,12 @@ const listRobotControllers = {
588
616
  }
589
617
  };
590
618
  //#endregion
591
- //#region src/lib/v2/mock/MockNovaInstance.ts
619
+ //#region src/lib/mock/MockNovaInstance.ts
592
620
  /**
593
621
  * Ultra-simplified mock Nova server for testing stuff
594
622
  */
595
623
  var MockNovaInstance = class {
596
- constructor() {
597
- this.connections = [];
598
- }
624
+ connections = [];
599
625
  async handleAPIRequest(config) {
600
626
  const apiHandlers = [
601
627
  listRobotControllers,
@@ -607,7 +633,7 @@ var MockNovaInstance = class {
607
633
  ];
608
634
  const method = config.method?.toUpperCase() || "GET";
609
635
  if (!config.url) throw new Error("No url sent with request");
610
- const path = config.url.split("?")[0];
636
+ const path = config.url.split("?")[0] ?? config.url;
611
637
  for (const handler of apiHandlers) {
612
638
  const match = pathToRegexp.match(handler.path)(path);
613
639
  if (method === handler.method && match) {
@@ -695,9 +721,13 @@ const defaultMotionState = { result: {
695
721
  * @deprecated Use `Nova` from `@wandelbots/nova-js/v2` instead.
696
722
  */
697
723
  var NovaClient = class {
724
+ api;
725
+ config;
726
+ mock;
727
+ instanceUrl;
728
+ authPromise = null;
729
+ accessToken = null;
698
730
  constructor(config) {
699
- this.authPromise = null;
700
- this.accessToken = null;
701
731
  const cellId = config.cellId ?? "cell";
702
732
  this.config = {
703
733
  cellId,
@@ -809,7 +839,7 @@ function poseToWandelscriptString(pose) {
809
839
  return `(${positionValues.concat(rotationValues).join(", ")})`;
810
840
  }
811
841
  //#endregion
812
- //#region src/lib/v2/NovaAPIClient.ts
842
+ //#region src/lib/NovaAPIClient.ts
813
843
  function unwrap(ApiConstructor, opts) {
814
844
  const apiClient = new ApiConstructor({
815
845
  ...opts,
@@ -826,6 +856,32 @@ function unwrap(ApiConstructor, opts) {
826
856
  * instance.
827
857
  */
828
858
  var NovaAPIClient = class {
859
+ opts;
860
+ application;
861
+ busIOs;
862
+ cell;
863
+ controller;
864
+ controllerIOs;
865
+ jogging;
866
+ kinematics;
867
+ license;
868
+ motionGroup;
869
+ motionGroupModels;
870
+ novaCloud;
871
+ program;
872
+ robotConfigurations;
873
+ session;
874
+ storeCollisionComponents;
875
+ storeCollisionSetups;
876
+ storeObject;
877
+ system;
878
+ trajectoryCaching;
879
+ trajectoryExecution;
880
+ trajectoryPlanning;
881
+ version;
882
+ virtualController;
883
+ virtualControllerBehavior;
884
+ virtualControllerIOs;
829
885
  constructor(opts) {
830
886
  this.opts = opts;
831
887
  this.application = unwrap(ApplicationApi, opts);
@@ -856,15 +912,19 @@ var NovaAPIClient = class {
856
912
  }
857
913
  };
858
914
  //#endregion
859
- //#region src/lib/v2/Nova.ts
915
+ //#region src/lib/Nova.ts
860
916
  /**
861
917
  *
862
918
  * Client for connecting to a NOVA instance and controlling robots.
863
919
  */
864
920
  var Nova = class {
921
+ api;
922
+ config;
923
+ mock;
924
+ instanceUrl;
925
+ authPromise = null;
926
+ accessToken = null;
865
927
  constructor(config) {
866
- this.authPromise = null;
867
- this.accessToken = null;
868
928
  this.config = config;
869
929
  this.accessToken = config.accessToken || availableStorage.getString("wbjs.access_token") || null;
870
930
  if (this.config.instanceUrl === "https://mock.example.com") this.mock = new MockNovaInstance();
@@ -891,10 +951,12 @@ var Nova = class {
891
951
  } catch (err) {
892
952
  return Promise.reject(err);
893
953
  }
894
- else if (error.response?.status === 403 && !error.config?.url?.split(/[?#]/)[0].endsWith("/session")) try {
954
+ else if (error.response?.status === 403 && !error.config?.url?.split(/[?#]/)[0]?.endsWith("/session")) try {
895
955
  const session = await this.api.session.getSession();
896
956
  if (session.session_id !== "default" && session.capabilities.length === 0) window.location.href = this.instanceUrl.href;
897
- } catch {}
957
+ } catch (sessionError) {
958
+ if (isAxiosError(sessionError) && sessionError.response?.status === 403) window.location.href = this.instanceUrl.href;
959
+ }
898
960
  else if (error.response?.status === 503) {
899
961
  if ((await fetch(window.location.href)).status === 503) window.location.reload();
900
962
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/lib/deprecated/v2/NovaCellAPIClient.ts","../../src/lib/mock/getCurrentRobotControllerState.ts","../../src/lib/mock/getMotionGroupDescription.ts","../../src/lib/mock/getMotionGroupKinematicModel.ts","../../src/lib/mock/getRobotController.ts","../../src/lib/mock/listCoordinateSystems.ts","../../src/lib/mock/listRobotControllers.ts","../../src/lib/mock/MockNovaInstance.ts","../../src/lib/deprecated/v2/NovaClient.ts","../../src/lib/deprecated/v2/wandelscriptUtils.ts","../../src/lib/NovaAPIClient.ts","../../src/lib/Nova.ts"],"sourcesContent":["/** biome-ignore-all lint/suspicious/noExplicitAny: legacy code */\n/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type {\n BaseAPI,\n Configuration as BaseConfiguration,\n} from \"@wandelbots/nova-api/v2\"\nimport {\n ApplicationApi,\n BUSInputsOutputsApi,\n CellApi,\n ControllerApi,\n ControllerInputsOutputsApi,\n JoggingApi,\n KinematicsApi,\n LicenseApi,\n MotionGroupApi,\n MotionGroupModelsApi,\n NOVACloudApi,\n ProgramApi,\n RobotConfigurationsApi,\n SessionApi,\n StoreCollisionComponentsApi,\n StoreCollisionSetupsApi,\n StoreObjectApi,\n SystemApi,\n TrajectoryCachingApi,\n TrajectoryExecutionApi,\n TrajectoryPlanningApi,\n VersionApi,\n VirtualControllerApi,\n VirtualControllerBehaviorApi,\n VirtualControllerInputsOutputsApi,\n} from \"@wandelbots/nova-api/v2\"\nimport type { AxiosInstance } from \"axios\"\nimport axios from \"axios\"\n\ntype OmitFirstArg<F> = F extends (x: any, ...args: infer P) => infer R\n ? (...args: P) => R\n : never\n\ntype UnwrapAxiosResponseReturn<T> = T extends (...a: any) => any\n ? (\n ...a: Parameters<T>\n ) => Promise<Awaited<ReturnType<T>> extends { data: infer D } ? D : never>\n : never\n\n/** @deprecated Use `NovaAPIClient` instead. */\nexport type WithCellId<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<OmitFirstArg<T[P]>>\n}\n\n/** @deprecated Use `NovaAPIClient` instead. */\nexport type WithUnwrappedAxiosResponse<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<T[P]>\n}\n\n/**\n * API client providing type-safe access to all the Nova API REST endpoints\n * associated with a specific cell id.\n * @deprecated Use `NovaAPIClient` from `@wandelbots/nova-js/v2` instead.\n */\nexport class NovaCellAPIClient {\n readonly system: WithUnwrappedAxiosResponse<SystemApi>\n readonly cell: WithUnwrappedAxiosResponse<CellApi>\n readonly motionGroup: WithCellId<MotionGroupApi>\n readonly motionGroupModels: WithUnwrappedAxiosResponse<MotionGroupModelsApi>\n readonly controller: WithCellId<ControllerApi>\n readonly controllerIOs: WithCellId<ControllerInputsOutputsApi>\n readonly trajectoryPlanning: WithCellId<TrajectoryPlanningApi>\n readonly trajectoryExecution: WithCellId<TrajectoryExecutionApi>\n readonly trajectoryCaching: WithCellId<TrajectoryCachingApi>\n readonly application: WithCellId<ApplicationApi>\n readonly applicationGlobal: WithUnwrappedAxiosResponse<ApplicationApi>\n readonly jogging: WithCellId<JoggingApi>\n readonly kinematics: WithCellId<KinematicsApi>\n readonly busInputsOutputs: WithCellId<BUSInputsOutputsApi>\n readonly virtualController: WithCellId<VirtualControllerApi>\n readonly virtualControllerBehavior: WithCellId<VirtualControllerBehaviorApi>\n readonly virtualControllerIOs: WithCellId<VirtualControllerInputsOutputsApi>\n readonly storeObject: WithCellId<StoreObjectApi>\n readonly storeCollisionComponents: WithCellId<StoreCollisionComponentsApi>\n readonly storeCollisionSetups: WithCellId<StoreCollisionSetupsApi>\n readonly program: WithCellId<ProgramApi>\n readonly license: WithUnwrappedAxiosResponse<LicenseApi>\n readonly novaCloud: WithUnwrappedAxiosResponse<NOVACloudApi>\n readonly robotConfigurations: WithUnwrappedAxiosResponse<RobotConfigurationsApi>\n readonly version: WithUnwrappedAxiosResponse<VersionApi>\n readonly session: WithUnwrappedAxiosResponse<SessionApi>\n\n readonly cellId: string\n readonly opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n }\n\n constructor(\n cellId: string,\n opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n },\n ) {\n this.cellId = cellId\n this.opts = opts\n this.system = this.withUnwrappedResponsesOnly(SystemApi)\n this.cell = this.withUnwrappedResponsesOnly(CellApi)\n this.motionGroup = this.withCellId(MotionGroupApi)\n this.motionGroupModels =\n this.withUnwrappedResponsesOnly(MotionGroupModelsApi)\n this.controller = this.withCellId(ControllerApi)\n this.controllerIOs = this.withCellId(ControllerInputsOutputsApi)\n this.trajectoryPlanning = this.withCellId(TrajectoryPlanningApi)\n this.trajectoryExecution = this.withCellId(TrajectoryExecutionApi)\n this.trajectoryCaching = this.withCellId(TrajectoryCachingApi)\n this.application = this.withCellId(ApplicationApi)\n this.applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi)\n this.jogging = this.withCellId(JoggingApi)\n this.kinematics = this.withCellId(KinematicsApi)\n this.busInputsOutputs = this.withCellId(BUSInputsOutputsApi)\n this.virtualController = this.withCellId(VirtualControllerApi)\n this.virtualControllerBehavior = this.withCellId(\n VirtualControllerBehaviorApi,\n )\n this.virtualControllerIOs = this.withCellId(\n VirtualControllerInputsOutputsApi,\n )\n this.storeObject = this.withCellId(StoreObjectApi)\n this.storeCollisionComponents = this.withCellId(StoreCollisionComponentsApi)\n this.storeCollisionSetups = this.withCellId(StoreCollisionSetupsApi)\n this.program = this.withCellId(ProgramApi)\n this.license = this.withUnwrappedResponsesOnly(LicenseApi)\n this.novaCloud = this.withUnwrappedResponsesOnly(NOVACloudApi)\n this.robotConfigurations = this.withUnwrappedResponsesOnly(\n RobotConfigurationsApi,\n )\n this.version = this.withUnwrappedResponsesOnly(VersionApi)\n this.session = this.withUnwrappedResponsesOnly(SessionApi)\n }\n\n /**\n * Some TypeScript sorcery which alters the API class methods so you don't\n * have to pass the cell id to every single one, and de-encapsulates the\n * response data\n */\n private withCellId<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n ) {\n const apiClient = new ApiConstructor(\n {\n ...this.opts,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n },\n this.opts.basePath ?? \"\",\n this.opts.axiosInstance ?? axios.create(),\n ) as {\n [key: string | symbol]: any\n }\n\n for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient)!)) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key]\n apiClient[key] = (...args: any[]) => {\n return originalFunction\n .apply(apiClient, [this.cellId, ...args])\n .then((res: any) => res.data)\n }\n }\n }\n\n return apiClient as WithCellId<T>\n }\n\n /**\n * As withCellId, but only does the response unwrapping\n */\n private withUnwrappedResponsesOnly<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n ) {\n const apiClient = new ApiConstructor(\n {\n ...this.opts,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n },\n this.opts.basePath ?? \"\",\n this.opts.axiosInstance ?? axios.create(),\n ) as {\n [key: string | symbol]: any\n }\n\n for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient)!)) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key]\n apiClient[key] = (...args: any[]) => {\n return originalFunction\n .apply(apiClient, args)\n .then((res: any) => res.data)\n }\n }\n }\n\n return apiClient as WithUnwrappedAxiosResponse<T>\n }\n}\n","export const getCurrentRobotControllerState = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId/state\",\n handle() {\n return {\n mode: \"MODE_CONTROL\",\n last_error: [],\n timestamp: \"2025-10-16T09:19:26.634534092Z\",\n sequence_number: 1054764,\n controller: \"mock-ur5e\",\n operation_mode: \"OPERATION_MODE_AUTO\",\n safety_state: \"SAFETY_STATE_NORMAL\",\n velocity_override: 100,\n motion_groups: [\n {\n timestamp: \"2025-10-16T09:19:26.634534092Z\",\n sequence_number: 1054764,\n motion_group: \"0@mock-ur5e\",\n controller: \"mock-ur5e\",\n joint_position: [\n 1.487959623336792, -1.8501918315887451, 1.8003005981445312,\n 6.034560203552246, 1.4921919107437134, 1.593459963798523,\n ],\n joint_limit_reached: {\n limit_reached: [false, false, false, false, false, false],\n },\n joint_torque: [],\n joint_current: [0, 0, 0, 0, 0, 0],\n flange_pose: {\n position: [\n 107.6452433732927, -409.0402987746852, 524.2402132330305,\n ],\n orientation: [\n 0.9874434028353319, -0.986571714997442, 1.3336589451098142,\n ],\n },\n tcp: \"Flange\",\n tcp_pose: {\n position: [\n 107.6452433732927, -409.0402987746852, 524.2402132330305,\n ],\n orientation: [\n 0.9874434028353319, -0.986571714997442, 1.3336589451098142,\n ],\n },\n payload: \"\",\n coordinate_system: \"\",\n standstill: true,\n },\n ],\n }\n },\n}\n","export const getMotionGroupDescription = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId/motion-groups/:motionGroupId/description\",\n handle() {\n return {\n motion_group_model: \"UniversalRobots_UR5e\",\n mounting: {\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n },\n tcps: {\n Flange: {\n name: \"Default-Flange\",\n pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n },\n },\n },\n payloads: {\n \"FPay-0\": {\n name: \"FPay-0\",\n payload: 0,\n center_of_mass: [0, 0, 0],\n moment_of_inertia: [0, 0, 0],\n },\n },\n cycle_time: 8,\n dh_parameters: [\n {\n alpha: 1.5707963267948966,\n d: 162.25,\n },\n {\n a: -425,\n },\n {\n a: -392.2,\n },\n {\n alpha: 1.5707963267948966,\n d: 133.3,\n },\n {\n alpha: -1.5707963267948966,\n d: 99.7,\n },\n {\n d: 99.6,\n },\n ],\n operation_limits: {\n auto_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n elbow: {\n velocity: 5000,\n },\n flange: {\n velocity: 5000,\n },\n },\n manual_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n },\n manual_t1_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n },\n manual_t2_limits: {\n joints: [\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 150,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n {\n position: {\n lower_limit: -6.283185307179586,\n upper_limit: 6.283185307179586,\n },\n velocity: 3.34159255027771,\n acceleration: 40,\n torque: 28,\n },\n ],\n tcp: {\n velocity: 5000,\n },\n },\n },\n serial_number: \"WBVirtualRobot\",\n }\n },\n}\n","export const getMotionGroupKinematicModel = {\n method: \"GET\",\n path: \"/motion-group-models/:motionGroupModel/kinematic\",\n handle() {\n return {\n dh_parameters: [\n {\n alpha: 1.5707963267948966,\n theta: 0.0,\n a: 0.0,\n d: 162.25,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0.0,\n theta: 0.0,\n a: -425.0,\n d: 0.0,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0.0,\n theta: 0.0,\n a: -392.2,\n d: 0.0,\n reverse_rotation_direction: false,\n },\n {\n alpha: 1.5707963267948966,\n theta: 0.0,\n a: 0.0,\n d: 133.3,\n reverse_rotation_direction: false,\n },\n {\n alpha: -1.5707963267948966,\n theta: 0.0,\n a: 0.0,\n d: 99.7,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0.0,\n theta: 0.0,\n a: 0.0,\n d: 99.6,\n reverse_rotation_direction: false,\n },\n ],\n inverse_solver: \"Universalrobots\",\n }\n },\n}\n","import type { RobotController } from \"@wandelbots/nova-api/v2\"\n\nexport const getRobotController = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId\",\n handle() {\n return {\n configuration: {\n initial_joint_position: \"[0,-1.571,-1.571,-1.571,1.571,-1.571,0]\",\n kind: \"VirtualController\",\n manufacturer: \"universalrobots\",\n type: \"universalrobots-ur5e\",\n },\n name: \"mock-ur5\",\n } satisfies RobotController\n },\n}\n","export const listCoordinateSystems = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId/coordinate-systems\",\n handle() {\n return [\n {\n coordinate_system: \"\",\n name: \"world\",\n reference_coordinate_system: \"\",\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n orientation_type: \"ROTATION_VECTOR\",\n },\n {\n coordinate_system: \"CS-0\",\n name: \"Default-CS\",\n reference_coordinate_system: \"\",\n position: [0, 0, 0],\n orientation: [0, 0, 0],\n orientation_type: \"ROTATION_VECTOR\",\n },\n ]\n },\n}\n","export const listRobotControllers = {\n method: \"GET\",\n path: \"/cells/:cellId/controllers\",\n handle() {\n return [\"mock-ur5e\"]\n },\n}\n","import type { MotionGroupState } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosResponse, InternalAxiosRequestConfig } from \"axios\"\nimport { AxiosError } from \"axios\"\nimport * as pathToRegexp from \"path-to-regexp\"\nimport type { AutoReconnectingWebsocket } from \"../AutoReconnectingWebsocket.ts\"\nimport { getCurrentRobotControllerState } from \"./getCurrentRobotControllerState.ts\"\nimport { getMotionGroupDescription } from \"./getMotionGroupDescription.ts\"\nimport { getMotionGroupKinematicModel } from \"./getMotionGroupKinematicModel.ts\"\nimport { getRobotController } from \"./getRobotController.ts\"\nimport { listCoordinateSystems } from \"./listCoordinateSystems.ts\"\nimport { listRobotControllers } from \"./listRobotControllers.ts\"\n\n/**\n * Ultra-simplified mock Nova server for testing stuff\n */\nexport class MockNovaInstance {\n readonly connections: AutoReconnectingWebsocket[] = []\n\n async handleAPIRequest(\n config: InternalAxiosRequestConfig,\n ): Promise<AxiosResponse> {\n const apiHandlers = [\n listRobotControllers,\n getRobotController,\n getMotionGroupDescription,\n getCurrentRobotControllerState,\n listCoordinateSystems,\n getMotionGroupKinematicModel,\n ]\n\n const method = config.method?.toUpperCase() || \"GET\"\n if (!config.url) {\n throw new Error(\"No url sent with request\")\n }\n const path = config.url.split(\"?\")[0] ?? config.url\n\n for (const handler of apiHandlers) {\n const match = pathToRegexp.match(handler.path)(path)\n if (method === handler.method && match) {\n const json = handler.handle()\n return {\n status: 200,\n statusText: \"Success\",\n data: JSON.stringify(json),\n headers: {},\n config,\n request: {\n responseURL: config.url,\n },\n }\n }\n }\n\n throw new AxiosError(\n `No mock handler matched this request: ${method} ${path}`,\n \"404\",\n config,\n )\n }\n\n // Please note: Only very basic websocket mocking is done here, needs to be extended as needed\n handleWebsocketConnection(socket: AutoReconnectingWebsocket) {\n this.connections.push(socket)\n\n setTimeout(() => {\n socket.dispatchEvent(new Event(\"open\"))\n\n console.log(\"Websocket connection opened from\", socket.url)\n\n if (socket.url.includes(\"/state-stream\")) {\n socket.dispatchEvent(\n new MessageEvent(\"message\", {\n data: JSON.stringify(defaultMotionState),\n }),\n )\n }\n\n if (socket.url.includes(\"/execution/jogging\")) {\n socket.dispatchEvent(\n new MessageEvent(\"message\", {\n data: JSON.stringify({\n result: {\n message: \"string\",\n kind: \"INITIALIZE_RECEIVED\",\n },\n }),\n }),\n )\n }\n }, 10)\n }\n\n handleWebsocketMessage(socket: AutoReconnectingWebsocket, message: string) {\n console.log(`Received message on ${socket.url}`, message)\n }\n}\n\nconst defaultMotionState = {\n result: {\n motion_group: \"0@universalrobots-ur5e\",\n controller: \"universalrobots-ur5e\",\n timestamp: new Date().toISOString(),\n sequence_number: 1,\n joint_position: [\n 1.1699999570846558, -1.5700000524520874, 1.3600000143051147,\n 1.0299999713897705, 1.2899999618530273, 1.2799999713897705,\n ],\n joint_limit_reached: {\n limit_reached: [false, false, false, false, false, false],\n },\n standstill: false,\n flange_pose: {\n position: [1.3300010259703043, -409.2680714682808, 531.0203477065281],\n orientation: [\n 1.7564919306270736, -1.7542521568325058, 0.7326972590614671,\n ],\n },\n tcp_pose: {\n position: [1.3300010259703043, -409.2680714682808, 531.0203477065281],\n orientation: [\n 1.7564919306270736, -1.7542521568325058, 0.7326972590614671,\n ],\n },\n description_revision: 0,\n } satisfies MotionGroupState,\n}\n","/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type { Configuration as BaseConfiguration } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosRequestConfig } from \"axios\"\nimport axios, { isAxiosError } from \"axios\"\nimport { AutoReconnectingWebsocket } from \"../../AutoReconnectingWebsocket.ts\"\nimport { availableStorage } from \"../../availableStorage.ts\"\nimport { parseNovaInstanceUrl } from \"../../converters.ts\"\nimport { loginWithAuth0 } from \"../../LoginWithAuth0.ts\"\n\nimport { isLocalhostDev } from \"../../context.ts\"\nimport { MockNovaInstance } from \"../../mock/MockNovaInstance.ts\"\nimport { NovaCellAPIClient } from \"./NovaCellAPIClient.ts\"\n\n/** @deprecated Use `NovaClientConfig` from `Nova` instead. */\nexport type NovaClientConfig = {\n /**\n * Url of the deployed Nova instance to connect to\n * e.g. https://saeattii.instance.wandelbots.io\n */\n instanceUrl: string | \"https://mock.example.com\"\n\n /**\n * Identifier of the cell on the Nova instance to connect this client to.\n * If omitted, the default identifier \"cell\" is used.\n **/\n cellId?: string\n\n /**\n * Username for basic auth to the Nova instance.\n * @deprecated use accessToken instead\n */\n username?: string\n\n /**\n * Password for basic auth to the Nova instance.\n * @deprecated use accessToken instead\n */\n password?: string\n\n /**\n * Access token for Bearer authentication.\n */\n accessToken?: string\n} & Omit<BaseConfiguration, \"isJsonMime\" | \"basePath\">\n\ntype NovaClientConfigWithDefaults = NovaClientConfig & { cellId: string }\n\n/**\n * Client for connecting to a Nova instance and controlling robots.\n * @deprecated Use `Nova` from `@wandelbots/nova-js/v2` instead.\n */\nexport class NovaClient {\n readonly api: NovaCellAPIClient\n readonly config: NovaClientConfigWithDefaults\n readonly mock?: MockNovaInstance\n readonly instanceUrl: URL\n authPromise: Promise<string | null> | null = null\n accessToken: string | null = null\n\n constructor(config: NovaClientConfig) {\n const cellId = config.cellId ?? \"cell\"\n this.config = {\n cellId,\n ...config,\n }\n this.accessToken =\n config.accessToken ||\n availableStorage.getString(\"wbjs.access_token\") ||\n null\n\n if (this.config.instanceUrl === \"https://mock.example.com\") {\n this.mock = new MockNovaInstance()\n }\n this.instanceUrl = parseNovaInstanceUrl(this.config.instanceUrl)\n\n // Set up Axios instance with interceptor for token fetching\n const axiosInstance = axios.create({\n baseURL: new URL(\"/api/v2\", this.instanceUrl).href,\n // TODO - backend needs to set proper CORS headers for this\n headers: isLocalhostDev\n ? {}\n : {\n // Identify the client to the backend for logging purposes\n \"X-Wandelbots-Client\": \"Wandelbots-Nova-JS-SDK\",\n },\n })\n\n axiosInstance.interceptors.request.use(async (request) => {\n if (!request.headers.Authorization) {\n if (this.accessToken) {\n request.headers.Authorization = `Bearer ${this.accessToken}`\n } else if (this.config.username && this.config.password) {\n request.headers.Authorization = `Basic ${btoa(`${config.username}:${config.password}`)}`\n }\n }\n return request\n })\n\n if (typeof window !== \"undefined\") {\n axiosInstance.interceptors.response.use(\n (r) => r,\n async (error) => {\n if (isAxiosError(error)) {\n if (error.response?.status === 401) {\n // If we hit a 401, attempt to login the user and retry with\n // a new access token\n try {\n await this.renewAuthentication()\n\n if (error.config) {\n if (this.accessToken) {\n error.config.headers.Authorization = `Bearer ${this.accessToken}`\n } else {\n delete error.config.headers.Authorization\n }\n return axiosInstance.request(error.config)\n }\n } catch (err) {\n return Promise.reject(err)\n }\n } else if (error.response?.status === 503) {\n // Check if the server as a whole is down\n const res = await fetch(window.location.href)\n if (res.status === 503) {\n // Go to 503 page\n 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: new URL(\"/api/v2\", this.instanceUrl).href,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n baseOptions: {\n ...(this.mock\n ? ({\n adapter: (config) => {\n return this.mock!.handleAPIRequest(config)\n },\n } satisfies AxiosRequestConfig)\n : {}),\n ...config.baseOptions,\n },\n axiosInstance,\n })\n }\n\n async renewAuthentication(): Promise<void> {\n if (this.authPromise) {\n // Don't double up\n return\n }\n\n const storedToken = availableStorage.getString(\"wbjs.access_token\")\n if (storedToken && this.accessToken !== storedToken) {\n // Might be newer than the one we have\n this.accessToken = storedToken\n return\n }\n\n // Otherwise, perform login flow\n this.authPromise = loginWithAuth0(this.instanceUrl)\n try {\n this.accessToken = await this.authPromise\n if (this.accessToken) {\n // Cache access token so we don't need to log in every refresh\n availableStorage.setString(\"wbjs.access_token\", this.accessToken)\n } else {\n availableStorage.delete(\"wbjs.access_token\")\n }\n } finally {\n this.authPromise = null\n }\n }\n\n makeWebsocketURL(path: string): string {\n const url = new URL(\n new URL(\n `/api/v2/cells/${this.config.cellId}/${path.replace(/^\\/+/, \"\")}`,\n this.instanceUrl,\n ).href,\n )\n url.protocol = url.protocol.replace(\"http\", \"ws\")\n url.protocol = url.protocol.replace(\"https\", \"wss\")\n\n // If provided, add basic auth credentials to the URL\n // NOTE - basic auth is deprecated on websockets and doesn't work in Safari\n // use tokens instead\n if (this.accessToken) {\n url.searchParams.append(\"token\", this.accessToken)\n } else if (this.config.username && this.config.password) {\n url.username = this.config.username\n url.password = this.config.password\n }\n\n return url.toString()\n }\n\n /**\n * Retrieve an AutoReconnectingWebsocket to the given path on the Nova instance.\n * If you explicitly want to reconnect an existing websocket, call `reconnect`\n * on the returned object.\n */\n openReconnectingWebsocket(path: string) {\n return new AutoReconnectingWebsocket(this.makeWebsocketURL(path), {\n mock: this.mock,\n })\n }\n}\n","import type { Pose } from \"@wandelbots/nova-api/v2\"\n\n/**\n * Convert a Pose object representing a motion group position\n * into a string which represents that pose in Wandelscript.\n * @deprecated Wandelscript usage is deprecated; switching to Python is recommended.\n */\nexport function poseToWandelscriptString(\n pose: Pick<Pose, \"position\" | \"orientation\">,\n) {\n const position = [\n pose.position?.[0] ?? 0,\n pose.position?.[1] ?? 0,\n pose.position?.[2] ?? 0,\n ]\n\n const orientation = [\n pose.orientation?.[0] ?? 0,\n pose.orientation?.[1] ?? 0,\n pose.orientation?.[2] ?? 0,\n ]\n\n const positionValues = position.map((v) => v.toFixed(1))\n // Rotation needs more precision since it's in radians\n const rotationValues = orientation.map((v) => v.toFixed(4))\n\n return `(${positionValues.concat(rotationValues).join(\", \")})`\n}\n","import type {\n BaseAPI,\n Configuration as BaseConfiguration,\n} from \"@wandelbots/nova-api/v2\"\nimport {\n ApplicationApi,\n BUSInputsOutputsApi,\n CellApi,\n ControllerApi,\n ControllerInputsOutputsApi,\n JoggingApi,\n KinematicsApi,\n LicenseApi,\n MotionGroupApi,\n MotionGroupModelsApi,\n NOVACloudApi,\n ProgramApi,\n RobotConfigurationsApi,\n SessionApi,\n StoreCollisionComponentsApi,\n StoreCollisionSetupsApi,\n StoreObjectApi,\n SystemApi,\n TrajectoryCachingApi,\n TrajectoryExecutionApi,\n TrajectoryPlanningApi,\n VersionApi,\n VirtualControllerApi,\n VirtualControllerBehaviorApi,\n VirtualControllerInputsOutputsApi,\n} from \"@wandelbots/nova-api/v2\"\nimport type { AxiosInstance } from \"axios\"\nimport axios from \"axios\"\n\n// biome-ignore lint/suspicious/noExplicitAny: metamagic\ntype UnwrapAxiosResponseReturn<T> = T extends (...a: any[]) => any\n ? (\n ...a: Parameters<T>\n ) => Promise<Awaited<ReturnType<T>> extends { data: infer D } ? D : never>\n : never\n\ntype WithUnwrappedAxiosResponse<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<T[P]>\n}\n\ntype NovaAPIClientOpts = BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n}\n\nfunction unwrap<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n opts: NovaAPIClientOpts,\n): WithUnwrappedAxiosResponse<T> {\n const apiClient = new ApiConstructor(\n {\n ...opts,\n isJsonMime: (mime: string) => mime === \"application/json\",\n },\n opts.basePath ?? \"\",\n opts.axiosInstance ?? axios.create(),\n ) as Record<string | symbol, unknown>\n\n for (const key of Reflect.ownKeys(\n Reflect.getPrototypeOf(apiClient) as object,\n )) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key] as (\n ...args: unknown[]\n ) => Promise<{ data: unknown }>\n apiClient[key] = (...args: unknown[]) =>\n originalFunction.apply(apiClient, args).then((res) => res.data)\n }\n }\n\n return apiClient as WithUnwrappedAxiosResponse<T>\n}\n\n/**\n * API client providing type-safe access to all the endpoints of a NOVA\n * instance.\n */\nexport class NovaAPIClient {\n readonly opts: NovaAPIClientOpts\n\n readonly application: WithUnwrappedAxiosResponse<ApplicationApi>\n readonly busIOs: WithUnwrappedAxiosResponse<BUSInputsOutputsApi>\n readonly cell: WithUnwrappedAxiosResponse<CellApi>\n readonly controller: WithUnwrappedAxiosResponse<ControllerApi>\n readonly controllerIOs: WithUnwrappedAxiosResponse<ControllerInputsOutputsApi>\n readonly jogging: WithUnwrappedAxiosResponse<JoggingApi>\n readonly kinematics: WithUnwrappedAxiosResponse<KinematicsApi>\n readonly license: WithUnwrappedAxiosResponse<LicenseApi>\n readonly motionGroup: WithUnwrappedAxiosResponse<MotionGroupApi>\n readonly motionGroupModels: WithUnwrappedAxiosResponse<MotionGroupModelsApi>\n readonly novaCloud: WithUnwrappedAxiosResponse<NOVACloudApi>\n readonly program: WithUnwrappedAxiosResponse<ProgramApi>\n readonly robotConfigurations: WithUnwrappedAxiosResponse<RobotConfigurationsApi>\n readonly session: WithUnwrappedAxiosResponse<SessionApi>\n readonly storeCollisionComponents: WithUnwrappedAxiosResponse<StoreCollisionComponentsApi>\n readonly storeCollisionSetups: WithUnwrappedAxiosResponse<StoreCollisionSetupsApi>\n readonly storeObject: WithUnwrappedAxiosResponse<StoreObjectApi>\n readonly system: WithUnwrappedAxiosResponse<SystemApi>\n readonly trajectoryCaching: WithUnwrappedAxiosResponse<TrajectoryCachingApi>\n readonly trajectoryExecution: WithUnwrappedAxiosResponse<TrajectoryExecutionApi>\n readonly trajectoryPlanning: WithUnwrappedAxiosResponse<TrajectoryPlanningApi>\n readonly version: WithUnwrappedAxiosResponse<VersionApi>\n readonly virtualController: WithUnwrappedAxiosResponse<VirtualControllerApi>\n readonly virtualControllerBehavior: WithUnwrappedAxiosResponse<VirtualControllerBehaviorApi>\n readonly virtualControllerIOs: WithUnwrappedAxiosResponse<VirtualControllerInputsOutputsApi>\n\n constructor(opts: NovaAPIClientOpts) {\n this.opts = opts\n\n this.application = unwrap(ApplicationApi, opts)\n this.busIOs = unwrap(BUSInputsOutputsApi, opts)\n this.cell = unwrap(CellApi, opts)\n this.controller = unwrap(ControllerApi, opts)\n this.controllerIOs = unwrap(ControllerInputsOutputsApi, opts)\n this.jogging = unwrap(JoggingApi, opts)\n this.kinematics = unwrap(KinematicsApi, opts)\n this.license = unwrap(LicenseApi, opts)\n this.motionGroup = unwrap(MotionGroupApi, opts)\n this.motionGroupModels = unwrap(MotionGroupModelsApi, opts)\n this.novaCloud = unwrap(NOVACloudApi, opts)\n this.program = unwrap(ProgramApi, opts)\n this.robotConfigurations = unwrap(RobotConfigurationsApi, opts)\n this.session = unwrap(SessionApi, opts)\n this.storeCollisionComponents = unwrap(StoreCollisionComponentsApi, opts)\n this.storeCollisionSetups = unwrap(StoreCollisionSetupsApi, opts)\n this.storeObject = unwrap(StoreObjectApi, opts)\n this.system = unwrap(SystemApi, opts)\n this.trajectoryCaching = unwrap(TrajectoryCachingApi, opts)\n this.trajectoryExecution = unwrap(TrajectoryExecutionApi, opts)\n this.trajectoryPlanning = unwrap(TrajectoryPlanningApi, opts)\n this.version = unwrap(VersionApi, opts)\n this.virtualController = unwrap(VirtualControllerApi, opts)\n this.virtualControllerBehavior = unwrap(VirtualControllerBehaviorApi, opts)\n this.virtualControllerIOs = unwrap(VirtualControllerInputsOutputsApi, opts)\n }\n}\n","import type { Configuration as BaseConfiguration } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosRequestConfig } from \"axios\"\nimport axios, { isAxiosError } from \"axios\"\nimport { AutoReconnectingWebsocket } from \"./AutoReconnectingWebsocket.ts\"\nimport { availableStorage } from \"./availableStorage.ts\"\nimport { isLocalhostDev } from \"./context.ts\"\nimport { parseNovaInstanceUrl } from \"./converters.ts\"\nimport { loginWithAuth0 } from \"./LoginWithAuth0.ts\"\nimport { MockNovaInstance } from \"./mock/MockNovaInstance.ts\"\nimport { NovaAPIClient } from \"./NovaAPIClient.ts\"\n\nexport type NovaConfig = {\n /**\n * Url of the deployed NOVA instance to connect to\n * e.g. https://saeattii.instance.wandelbots.io\n */\n instanceUrl: string\n\n /**\n * Access token for Bearer authentication.\n * If running on a NOVA instance, this can be automatically retrieved from\n * the current session when omitted.\n */\n accessToken?: string\n} & Omit<BaseConfiguration, \"isJsonMime\" | \"basePath\">\n\n/**\n *\n * Client for connecting to a NOVA instance and controlling robots.\n */\nexport class Nova {\n readonly api: NovaAPIClient\n readonly config: NovaConfig\n readonly mock?: MockNovaInstance\n readonly instanceUrl: URL\n authPromise: Promise<string | null> | null = null\n accessToken: string | null = null\n\n constructor(config: NovaConfig) {\n this.config = config\n this.accessToken =\n config.accessToken ||\n availableStorage.getString(\"wbjs.access_token\") ||\n null\n\n if (this.config.instanceUrl === \"https://mock.example.com\") {\n this.mock = new MockNovaInstance()\n }\n this.instanceUrl = parseNovaInstanceUrl(this.config.instanceUrl)\n\n // Set up Axios instance with interceptor for token fetching\n const axiosInstance = axios.create({\n baseURL: new URL(\"/api/v2\", this.instanceUrl).href,\n // TODO - backend needs to set proper CORS headers for this\n headers: isLocalhostDev\n ? {}\n : {\n // Identify the client to the backend for logging purposes\n \"X-Wandelbots-Client\": \"Wandelbots-Nova-JS-SDK\",\n },\n })\n\n axiosInstance.interceptors.request.use(async (request) => {\n if (!request.headers.Authorization) {\n if (this.accessToken) {\n request.headers.Authorization = `Bearer ${this.accessToken}`\n }\n }\n return request\n })\n\n if (typeof window !== \"undefined\") {\n axiosInstance.interceptors.response.use(\n (r) => r,\n async (error) => {\n if (isAxiosError(error)) {\n if (error.response?.status === 401) {\n // If we hit a 401, attempt to login the user and retry with\n // a new access token\n try {\n await this.renewAuthentication()\n\n if (error.config) {\n if (this.accessToken) {\n error.config.headers.Authorization = `Bearer ${this.accessToken}`\n } else {\n delete error.config.headers.Authorization\n }\n return axiosInstance.request(error.config)\n }\n } catch (err) {\n return Promise.reject(err)\n }\n } else if (\n error.response?.status === 403 &&\n !error.config?.url?.split(/[?#]/)[0]?.endsWith(\"/session\")\n ) {\n // If we hit a 403, the user is authenticated but may lack access\n // to the instance entirely. Check the session to find out.\n try {\n const session = await this.api.session.getSession()\n if (\n session.session_id !== \"default\" &&\n session.capabilities.length === 0\n ) {\n // An authenticated user with no capabilities has no access;\n // send them to the instance url, which renders the access\n // denied screen.\n window.location.href = this.instanceUrl.href\n }\n } catch (sessionError) {\n // The session endpoint itself returns a 403 when the user is\n // not assigned to a cell at all, which is equivalent to an\n // authenticated user with non-default empty capabilities ->\n // send them to the access denied screen.\n if (\n isAxiosError(sessionError) &&\n sessionError.response?.status === 403\n ) {\n window.location.href = this.instanceUrl.href\n }\n // Otherwise couldn't determine access; fall through to bubble\n // the original 403 error below.\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 NovaAPIClient({\n ...config,\n basePath: new URL(\"/api/v2\", this.instanceUrl).href,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n baseOptions: {\n ...(this.mock\n ? ({\n adapter: (config) => {\n if (!this.mock) {\n throw new Error(\"Mock adapter used without a mock instance\")\n }\n return this.mock.handleAPIRequest(config)\n },\n } satisfies AxiosRequestConfig)\n : {}),\n ...config.baseOptions,\n },\n axiosInstance,\n })\n }\n\n async renewAuthentication(): Promise<void> {\n if (this.authPromise) {\n // Don't double up\n return\n }\n\n const storedToken = availableStorage.getString(\"wbjs.access_token\")\n if (storedToken && this.accessToken !== storedToken) {\n // Might be newer than the one we have\n this.accessToken = storedToken\n return\n }\n\n // Otherwise, perform login flow\n this.authPromise = loginWithAuth0(this.instanceUrl)\n try {\n this.accessToken = await this.authPromise\n if (this.accessToken) {\n // Cache access token so we don't need to log in every refresh\n availableStorage.setString(\"wbjs.access_token\", this.accessToken)\n } else {\n availableStorage.delete(\"wbjs.access_token\")\n }\n } finally {\n this.authPromise = null\n }\n }\n\n makeWebsocketURL(path: string): string {\n const url = new URL(`/api/v2/${path.replace(/^\\/+/, \"\")}`, this.instanceUrl)\n url.protocol = url.protocol.replace(\"http\", \"ws\")\n url.protocol = url.protocol.replace(\"https\", \"wss\")\n\n if (this.accessToken) {\n url.searchParams.append(\"token\", this.accessToken)\n }\n\n return url.toString()\n }\n\n /**\n * Retrieve an AutoReconnectingWebsocket to the given path on the Nova instance.\n * If you explicitly want to reconnect an existing websocket, call `reconnect`\n * on the returned object.\n */\n openReconnectingWebsocket(path: string) {\n return new AutoReconnectingWebsocket(this.makeWebsocketURL(path), {\n mock: this.mock,\n })\n }\n}\n"],"mappings":"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U;KACR,UAAU;MACR;MAAmB;MAAoB;KACzC;KACA,aAAa;MACX;MAAoB;MAAoB;KAC1C;IACF;IACA,SAAS;IACT,mBAAmB;IACnB,YAAY;GACd,CACF;EACF;CACF;AACF;;;ACpDA,MAAa,4BAA4B;CACvC,QAAQ;CACR,MAAM;CACN,SAAS;EACP,OAAO;GACL,oBAAoB;GACpB,UAAU;IACR,UAAU;KAAC;KAAG;KAAG;IAAC;IAClB,aAAa;KAAC;KAAG;KAAG;IAAC;GACvB;GACA,MAAM,EACJ,QAAQ;IACN,MAAM;IACN,MAAM;KACJ,UAAU;MAAC;MAAG;MAAG;KAAC;KAClB,aAAa;MAAC;MAAG;MAAG;KAAC;IACvB;GACF,EACF;GACA,UAAU,EACR,UAAU;IACR,MAAM;IACN,SAAS;IACT,gBAAgB;KAAC;KAAG;KAAG;IAAC;IACxB,mBAAmB;KAAC;KAAG;KAAG;IAAC;GAC7B,EACF;GACA,YAAY;GACZ,eAAe;IACb;KACE,OAAO;KACP,GAAG;IACL;IACA,EACE,GAAG,KACL;IACA,EACE,GAAG,OACL;IACA;KACE,OAAO;KACP,GAAG;IACL;IACA;KACE,OAAO;KACP,GAAG;IACL;IACA,EACE,GAAG,KACL;GACF;GACA,kBAAkB;IAChB,aAAa;KACX,QAAQ;MACN;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;KACA,OAAO,EACL,UAAU,IACZ;KACA,QAAQ,EACN,UAAU,IACZ;IACF;IACA,eAAe;KACb,QAAQ;MACN;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;IACF;IACA,kBAAkB;KAChB,QAAQ;MACN;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;IACF;IACA,kBAAkB;KAChB,QAAQ;MACN;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;MACA;OACE,UAAU;QACR,aAAa;QACb,aAAa;OACf;OACA,UAAU;OACV,cAAc;OACd,QAAQ;MACV;KACF;KACA,KAAK,EACH,UAAU,IACZ;IACF;GACF;GACA,eAAe;EACjB;CACF;AACF;;;AClTA,MAAa,+BAA+B;CAC1C,QAAQ;CACR,MAAM;CACN,SAAS;EACP,OAAO;GACL,eAAe;IACb;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;IACA;KACE,OAAO;KACP,OAAO;KACP,GAAG;KACH,GAAG;KACH,4BAA4B;IAC9B;GACF;GACA,gBAAgB;EAClB;CACF;AACF;;;AClDA,MAAa,qBAAqB;CAChC,QAAQ;CACR,MAAM;CACN,SAAS;EACP,OAAO;GACL,eAAe;IACb,wBAAwB;IACxB,MAAM;IACN,cAAc;IACd,MAAM;GACR;GACA,MAAM;EACR;CACF;AACF;;;AChBA,MAAa,wBAAwB;CACnC,QAAQ;CACR,MAAM;CACN,SAAS;EACP,OAAO,CACL;GACE,mBAAmB;GACnB,MAAM;GACN,6BAA6B;GAC7B,UAAU;IAAC;IAAG;IAAG;GAAC;GAClB,aAAa;IAAC;IAAG;IAAG;GAAC;G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"}
@@ -1,4 +1,4 @@
1
- import { f as tryParseJson, g as AutoReconnectingWebsocket, h as availableStorage, i as loginWithAuth0, l as parseNovaInstanceUrl, n as isLocalhostDev, s as isSameCoordinateSystem, t as isBrowser } from "./context-BQk3xGAI.mjs";
1
+ import { f as tryParseJson, g as AutoReconnectingWebsocket, h as availableStorage, i as loginWithAuth0, l as parseNovaInstanceUrl, n as isLocalhostDev, s as isSameCoordinateSystem, t as isBrowser } from "./context-kT2C20EX.mjs";
2
2
  import axios, { AxiosError, isAxiosError } from "axios";
3
3
  import { makeAutoObservable, runInAction } from "mobx";
4
4
  import * as THREE from "three";
@@ -62,6 +62,29 @@ var ConnectedMotionGroup = class ConnectedMotionGroup {
62
62
  const { tcps } = await nova.api.motionGroupInfos.listTcps(motionGroupId);
63
63
  return new ConnectedMotionGroup(nova, controller, motionGroup, initialMotionState, motionStateSocket, isVirtual, tcps, await nova.api.motionGroupInfos.getMotionGroupSpecification(motionGroupId), await nova.api.motionGroupInfos.getSafetySetup(motionGroupId), mounting, initialControllerState, controllerStateSocket);
64
64
  }
65
+ connectedJoggingCartesianSocket = null;
66
+ connectedJoggingJointsSocket = null;
67
+ planData;
68
+ joggingVelocity = 10;
69
+ rapidlyChangingMotionState;
70
+ controllerState;
71
+ /**
72
+ * Reflects activation state of the motion group / robot servos. The
73
+ * movement controls in the UI should only be enabled in the "active" state
74
+ */
75
+ activationState = "inactive";
76
+ nova;
77
+ controller;
78
+ motionGroup;
79
+ initialMotionState;
80
+ motionStateSocket;
81
+ isVirtual;
82
+ tcps;
83
+ motionGroupSpecification;
84
+ safetySetup;
85
+ mounting;
86
+ initialControllerState;
87
+ controllerStateSocket;
65
88
  constructor(nova, controller, motionGroup, initialMotionState, motionStateSocket, isVirtual, tcps, motionGroupSpecification, safetySetup, mounting, initialControllerState, controllerStateSocket) {
66
89
  this.nova = nova;
67
90
  this.controller = controller;
@@ -75,10 +98,6 @@ var ConnectedMotionGroup = class ConnectedMotionGroup {
75
98
  this.mounting = mounting;
76
99
  this.initialControllerState = initialControllerState;
77
100
  this.controllerStateSocket = controllerStateSocket;
78
- this.connectedJoggingCartesianSocket = null;
79
- this.connectedJoggingJointsSocket = null;
80
- this.joggingVelocity = 10;
81
- this.activationState = "inactive";
82
101
  this.rapidlyChangingMotionState = initialMotionState;
83
102
  this.controllerState = initialControllerState;
84
103
  controllerStateSocket.addEventListener("message", (event) => {
@@ -237,15 +256,17 @@ var ConnectedMotionGroup = class ConnectedMotionGroup {
237
256
  //#region src/lib/deprecated/v1/JoggerConnection.ts
238
257
  /** @deprecated */
239
258
  var JoggerConnection = class JoggerConnection {
259
+ cartesianWebsocket = null;
260
+ jointWebsocket = null;
261
+ cartesianJoggingOpts = {};
240
262
  static async open(nova, motionGroupId, opts = {}) {
241
263
  return new JoggerConnection(await nova.connectMotionStream(motionGroupId), opts);
242
264
  }
265
+ motionStream;
266
+ opts;
243
267
  constructor(motionStream, opts = {}) {
244
268
  this.motionStream = motionStream;
245
269
  this.opts = opts;
246
- this.cartesianWebsocket = null;
247
- this.jointWebsocket = null;
248
- this.cartesianJoggingOpts = {};
249
270
  }
250
271
  get motionGroupId() {
251
272
  return this.motionStream.motionGroupId;
@@ -498,6 +519,12 @@ var MotionStreamConnection = class MotionStreamConnection {
498
519
  console.log(`Connected motion state websocket to motion group ${motionGroup.motion_group}. Initial state:\n `, initialMotionState);
499
520
  return new MotionStreamConnection(nova, controller, motionGroup, initialMotionState, motionStateSocket);
500
521
  }
522
+ rapidlyChangingMotionState;
523
+ nova;
524
+ controller;
525
+ motionGroup;
526
+ initialMotionState;
527
+ motionStateSocket;
501
528
  constructor(nova, controller, motionGroup, initialMotionState, motionStateSocket) {
502
529
  this.nova = nova;
503
530
  this.controller = controller;
@@ -553,6 +580,34 @@ var MotionStreamConnection = class MotionStreamConnection {
553
580
  * @deprecated Use `NovaAPIClient` from `@wandelbots/nova-js/v2` instead.
554
581
  */
555
582
  var NovaCellAPIClient = class {
583
+ system;
584
+ cell;
585
+ deviceConfig;
586
+ motionGroup;
587
+ motionGroupInfos;
588
+ controller;
589
+ program;
590
+ programValues;
591
+ controllerIOs;
592
+ motionGroupKinematic;
593
+ motion;
594
+ coordinateSystems;
595
+ application;
596
+ applicationGlobal;
597
+ motionGroupJogging;
598
+ virtualRobot;
599
+ virtualRobotSetup;
600
+ virtualRobotMode;
601
+ virtualRobotBehavior;
602
+ libraryProgramMetadata;
603
+ libraryProgram;
604
+ libraryRecipeMetadata;
605
+ libraryRecipe;
606
+ storeObject;
607
+ storeCollisionComponents;
608
+ storeCollisionScenes;
609
+ cellId;
610
+ opts;
556
611
  constructor(cellId, opts) {
557
612
  this.cellId = cellId;
558
613
  this.opts = opts;
@@ -629,9 +684,7 @@ var NovaCellAPIClient = class {
629
684
  * @deprecated
630
685
  */
631
686
  var MockNovaInstance = class {
632
- constructor() {
633
- this.connections = [];
634
- }
687
+ connections = [];
635
688
  async handleAPIRequest(config) {
636
689
  const apiHandlers = [
637
690
  {
@@ -1866,9 +1919,13 @@ const defaultMotionState = { result: {
1866
1919
  * @deprecated The nova v1 client is deprecated. Please use the v2 client from `@wandelbots/nova-js/v2` instead.
1867
1920
  */
1868
1921
  var NovaClient = class {
1922
+ api;
1923
+ config;
1924
+ mock;
1925
+ instanceUrl;
1926
+ authPromise = null;
1927
+ accessToken = null;
1869
1928
  constructor(config) {
1870
- this.authPromise = null;
1871
- this.accessToken = null;
1872
1929
  const cellId = config.cellId ?? "cell";
1873
1930
  this.config = {
1874
1931
  cellId,
@@ -2001,4 +2058,4 @@ function poseToWandelscriptString(pose) {
2001
2058
  //#endregion
2002
2059
  export { JoggerConnection as a, MotionStreamConnection as i, NovaClient as n, ConnectedMotionGroup as o, NovaCellAPIClient as r, poseToWandelscriptString as t };
2003
2060
 
2004
- //# sourceMappingURL=wandelscriptUtils-BDdIFHPD.mjs.map
2061
+ //# sourceMappingURL=wandelscriptUtils-CwtdZRDs.mjs.map