@wandelbots/nova-js 3.9.0-pr.280.2a86180 → 3.9.0-pr.280.2b62f3c

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.
@@ -1,5 +1,6 @@
1
1
  import { n as MockNovaInstance, t as AutoReconnectingWebsocket } from "../../AutoReconnectingWebsocket-DEs8wlLZ.mjs";
2
2
  import { AxiosInstance } from "axios";
3
+ import * as novaApiV2 from "@wandelbots/nova-api/v2";
3
4
  import { ApplicationApi, BUSInputsOutputsApi, CellApi, Configuration, ControllerApi, ControllerInputsOutputsApi, JoggingApi, KinematicsApi, LicenseApi, MotionGroupApi, MotionGroupModelsApi, NOVACloudApi, Pose, ProgramApi, RobotConfigurationsApi, SessionApi, StoreCollisionComponentsApi, StoreCollisionSetupsApi, StoreObjectApi, SystemApi, TrajectoryCachingApi, TrajectoryExecutionApi, TrajectoryPlanningApi, VersionApi, VirtualControllerApi, VirtualControllerBehaviorApi, VirtualControllerInputsOutputsApi } from "@wandelbots/nova-api/v2";
4
5
  export * from "@wandelbots/nova-api/v2";
5
6
 
@@ -122,51 +123,45 @@ declare class NovaClient {
122
123
  declare function poseToWandelscriptString(pose: Pick<Pose, "position" | "orientation">): string;
123
124
  //#endregion
124
125
  //#region src/lib/v2/NovaAPIClient.d.ts
125
- type UnwrapAxiosResponseReturn<T> = T extends ((...a: any) => any) ? (...a: Parameters<T>) => Promise<Awaited<ReturnType<T>> extends {
126
+ type UnwrapAxiosResponseReturn<T> = T extends ((...a: unknown[]) => unknown[]) ? (...a: Parameters<T>) => Promise<Awaited<ReturnType<T>> extends {
126
127
  data: infer D;
127
128
  } ? D : never> : never;
128
129
  type WithUnwrappedAxiosResponse$1<T> = { [P in keyof T]: UnwrapAxiosResponseReturn<T[P]> };
130
+ /**
131
+ * Filters nova-api/v2 exports to just the API class constructors,
132
+ * excluding helper factories and param creators.
133
+ */
134
+ type ApiConstructors = { [K in keyof typeof novaApiV2 as K extends `${string}Api` ? K extends `${string}Factory${string}` | `${string}Fp${string}` | `${string}ParamCreator${string}` ? never : K : never]: (typeof novaApiV2)[K] };
135
+ /**
136
+ * Lowercases leading uppercase characters to produce a camelCase property name.
137
+ * e.g. "BUSInputsOutputs" -> "busInputsOutputs", "NOVACloud" -> "novaCloud",
138
+ * "Application" -> "application"
139
+ */
140
+ type CamelCase<S extends string> = S extends `${Uppercase<infer A>}${Uppercase<infer B>}${infer Rest}` ? Rest extends `${Lowercase<string>}${string}` ? `${Lowercase<A>}${CamelCase<`${Uppercase<B>}${Rest}`>}` : `${Lowercase<A>}${CamelCase<`${Uppercase<B>}${Rest}`>}` : Uncapitalize<S>;
141
+ /**
142
+ * Maps API class names to property names by stripping "Api" and converting
143
+ * the leading acronym to lowercase camelCase.
144
+ *
145
+ * Properties are auto-discovered from the upstream package at runtime,
146
+ * so new API sections are available immediately without code changes.
147
+ */
148
+ type ApiProperties = { readonly [K in keyof ApiConstructors as K extends `${infer P}Api` ? CamelCase<P> : never]: ApiConstructors[K] extends (new (...args: unknown[]) => infer I) ? WithUnwrappedAxiosResponse$1<I> : never };
149
+ type NovaAPIClientOpts = Configuration & {
150
+ axiosInstance?: AxiosInstance;
151
+ mock?: boolean;
152
+ };
129
153
  /**
130
154
  * API client providing type-safe access to all the endpoints of a NOVA
131
- * instance.
155
+ * instance. API sections are auto-discovered from @wandelbots/nova-api/v2
156
+ * at runtime, so new sections added upstream are exposed automatically.
132
157
  */
133
- declare class NovaAPIClient {
134
- readonly cellId: string;
135
- readonly opts: Configuration & {
136
- axiosInstance?: AxiosInstance;
137
- mock?: boolean;
158
+ declare const NovaAPIClient: {
159
+ new (opts: NovaAPIClientOpts): ApiProperties & {
160
+ readonly cellId: string;
161
+ readonly opts: NovaAPIClientOpts;
138
162
  };
139
- constructor(cellId: string, opts: Configuration & {
140
- axiosInstance?: AxiosInstance;
141
- mock?: boolean;
142
- });
143
- private withUnwrappedResponsesOnly;
144
- readonly system: WithUnwrappedAxiosResponse$1<SystemApi>;
145
- readonly cell: WithUnwrappedAxiosResponse$1<CellApi>;
146
- readonly motionGroup: WithUnwrappedAxiosResponse$1<MotionGroupApi>;
147
- readonly motionGroupModels: WithUnwrappedAxiosResponse$1<MotionGroupModelsApi>;
148
- readonly controller: WithUnwrappedAxiosResponse$1<ControllerApi>;
149
- readonly controllerIOs: WithUnwrappedAxiosResponse$1<ControllerInputsOutputsApi>;
150
- readonly trajectoryPlanning: WithUnwrappedAxiosResponse$1<TrajectoryPlanningApi>;
151
- readonly trajectoryExecution: WithUnwrappedAxiosResponse$1<TrajectoryExecutionApi>;
152
- readonly trajectoryCaching: WithUnwrappedAxiosResponse$1<TrajectoryCachingApi>;
153
- readonly application: WithUnwrappedAxiosResponse$1<ApplicationApi>;
154
- readonly applicationGlobal: WithUnwrappedAxiosResponse$1<ApplicationApi>;
155
- readonly jogging: WithUnwrappedAxiosResponse$1<JoggingApi>;
156
- readonly kinematics: WithUnwrappedAxiosResponse$1<KinematicsApi>;
157
- readonly busInputsOutputs: WithUnwrappedAxiosResponse$1<BUSInputsOutputsApi>;
158
- readonly virtualController: WithUnwrappedAxiosResponse$1<VirtualControllerApi>;
159
- readonly virtualControllerBehavior: WithUnwrappedAxiosResponse$1<VirtualControllerBehaviorApi>;
160
- readonly virtualControllerIOs: WithUnwrappedAxiosResponse$1<VirtualControllerInputsOutputsApi>;
161
- readonly storeObject: WithUnwrappedAxiosResponse$1<StoreObjectApi>;
162
- readonly storeCollisionComponents: WithUnwrappedAxiosResponse$1<StoreCollisionComponentsApi>;
163
- readonly storeCollisionSetups: WithUnwrappedAxiosResponse$1<StoreCollisionSetupsApi>;
164
- readonly program: WithUnwrappedAxiosResponse$1<ProgramApi>;
165
- readonly license: WithUnwrappedAxiosResponse$1<LicenseApi>;
166
- readonly novaCloud: WithUnwrappedAxiosResponse$1<NOVACloudApi>;
167
- readonly robotConfigurations: WithUnwrappedAxiosResponse$1<RobotConfigurationsApi>;
168
- readonly version: WithUnwrappedAxiosResponse$1<VersionApi>;
169
- }
163
+ };
164
+ type NovaAPIClient = InstanceType<typeof NovaAPIClient>;
170
165
  //#endregion
171
166
  //#region src/lib/v2/Nova.d.ts
172
167
  type NovaClientConfig = {
@@ -175,10 +170,6 @@ type NovaClientConfig = {
175
170
  * e.g. https://saeattii.instance.wandelbots.io
176
171
  */
177
172
  instanceUrl: string;
178
- /**
179
- * Id of the cell to connect to
180
- */
181
- cellId: string;
182
173
  /**
183
174
  * Access token for Bearer authentication.
184
175
  * If running on a NOVA instance, this can be automatically retrieved from
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/deprecated/v2/NovaCellAPIClient.ts","../../../src/lib/deprecated/v2/NovaClient.ts","../../../src/lib/deprecated/v2/wandelscriptUtils.ts","../../../src/lib/v2/NovaAPIClient.ts","../../../src/lib/v2/Nova.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/deprecated/v2/NovaCellAPIClient.ts","../../../src/lib/deprecated/v2/NovaClient.ts","../../../src/lib/deprecated/v2/wandelscriptUtils.ts","../../../src/lib/v2/NovaAPIClient.ts","../../../src/lib/v2/Nova.ts"],"mappings":"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"}
@@ -2,6 +2,7 @@ import { m as AutoReconnectingWebsocket, n as loginWithAuth0, p as availableStor
2
2
  import axios, { AxiosError, isAxiosError } from "axios";
3
3
  import urlJoin from "url-join";
4
4
  import * as pathToRegexp from "path-to-regexp";
5
+ import * as novaApiV2 from "@wandelbots/nova-api/v2";
5
6
  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";
6
7
  export * from "@wandelbots/nova-api/v2";
7
8
  //#region src/lib/deprecated/v2/NovaCellAPIClient.ts
@@ -809,54 +810,36 @@ function poseToWandelscriptString(pose) {
809
810
  }
810
811
  //#endregion
811
812
  //#region src/lib/v2/NovaAPIClient.ts
813
+ function isApiClass(name, value) {
814
+ return name.endsWith("Api") && typeof value === "function" && !name.includes("Factory") && !name.includes("Fp") && !name.includes("ParamCreator");
815
+ }
816
+ function wrapApi(ApiConstructor, opts) {
817
+ const apiClient = new ApiConstructor({
818
+ ...opts,
819
+ isJsonMime: (mime) => mime === "application/json"
820
+ }, opts.basePath ?? "", opts.axiosInstance ?? axios.create());
821
+ for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient))) if (key !== "constructor" && typeof apiClient[key] === "function") {
822
+ const originalFunction = apiClient[key];
823
+ apiClient[key] = (...args) => originalFunction.apply(apiClient, args).then((res) => res.data);
824
+ }
825
+ return apiClient;
826
+ }
812
827
  /**
813
828
  * API client providing type-safe access to all the endpoints of a NOVA
814
- * instance.
829
+ * instance. API sections are auto-discovered from @wandelbots/nova-api/v2
830
+ * at runtime, so new sections added upstream are exposed automatically.
815
831
  */
816
- var NovaAPIClient = class {
817
- constructor(cellId, opts) {
818
- this.cellId = cellId;
832
+ const NovaAPIClient = class NovaAPIClient {
833
+ constructor(opts) {
819
834
  this.opts = opts;
820
- this.system = this.withUnwrappedResponsesOnly(SystemApi);
821
- this.cell = this.withUnwrappedResponsesOnly(CellApi);
822
- this.motionGroup = this.withUnwrappedResponsesOnly(MotionGroupApi);
823
- this.motionGroupModels = this.withUnwrappedResponsesOnly(MotionGroupModelsApi);
824
- this.controller = this.withUnwrappedResponsesOnly(ControllerApi);
825
- this.controllerIOs = this.withUnwrappedResponsesOnly(ControllerInputsOutputsApi);
826
- this.trajectoryPlanning = this.withUnwrappedResponsesOnly(TrajectoryPlanningApi);
827
- this.trajectoryExecution = this.withUnwrappedResponsesOnly(TrajectoryExecutionApi);
828
- this.trajectoryCaching = this.withUnwrappedResponsesOnly(TrajectoryCachingApi);
829
- this.application = this.withUnwrappedResponsesOnly(ApplicationApi);
830
- this.applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi);
831
- this.jogging = this.withUnwrappedResponsesOnly(JoggingApi);
832
- this.kinematics = this.withUnwrappedResponsesOnly(KinematicsApi);
833
- this.busInputsOutputs = this.withUnwrappedResponsesOnly(BUSInputsOutputsApi);
834
- this.virtualController = this.withUnwrappedResponsesOnly(VirtualControllerApi);
835
- this.virtualControllerBehavior = this.withUnwrappedResponsesOnly(VirtualControllerBehaviorApi);
836
- this.virtualControllerIOs = this.withUnwrappedResponsesOnly(VirtualControllerInputsOutputsApi);
837
- this.storeObject = this.withUnwrappedResponsesOnly(StoreObjectApi);
838
- this.storeCollisionComponents = this.withUnwrappedResponsesOnly(StoreCollisionComponentsApi);
839
- this.storeCollisionSetups = this.withUnwrappedResponsesOnly(StoreCollisionSetupsApi);
840
- this.program = this.withUnwrappedResponsesOnly(ProgramApi);
841
- this.license = this.withUnwrappedResponsesOnly(LicenseApi);
842
- this.novaCloud = this.withUnwrappedResponsesOnly(NOVACloudApi);
843
- this.robotConfigurations = this.withUnwrappedResponsesOnly(RobotConfigurationsApi);
844
- this.version = this.withUnwrappedResponsesOnly(VersionApi);
845
- }
846
- withUnwrappedResponsesOnly(ApiConstructor) {
847
- const apiClient = new ApiConstructor({
848
- ...this.opts,
849
- isJsonMime: (mime) => {
850
- return mime === "application/json";
851
- }
852
- }, this.opts.basePath ?? "", this.opts.axiosInstance ?? axios.create());
853
- for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient))) if (key !== "constructor" && typeof apiClient[key] === "function") {
854
- const originalFunction = apiClient[key];
855
- apiClient[key] = (...args) => {
856
- return originalFunction.apply(apiClient, args).then((res) => res.data);
857
- };
835
+ for (const [name, value] of Object.entries(novaApiV2)) if (isApiClass(name, value)) {
836
+ const stripped = name.slice(0, -3);
837
+ let i = 0;
838
+ while (i < stripped.length && stripped[i] === stripped[i].toUpperCase() && stripped[i] !== stripped[i].toLowerCase()) i++;
839
+ const boundary = i > 1 ? i - 1 : i;
840
+ const propName = stripped.slice(0, boundary).toLowerCase() + stripped.slice(boundary);
841
+ this[propName] = wrapApi(value, opts);
858
842
  }
859
- return apiClient;
860
843
  }
861
844
  };
862
845
  //#endregion
@@ -902,7 +885,7 @@ var Nova = class {
902
885
  }
903
886
  return Promise.reject(error);
904
887
  });
905
- this.api = new NovaAPIClient(this.config.cellId, {
888
+ this.api = new NovaAPIClient({
906
889
  ...config,
907
890
  basePath: urlJoin(this.instanceUrl.href, "/api/v2"),
908
891
  isJsonMime: (mime) => {
@@ -934,7 +917,7 @@ var Nova = class {
934
917
  }
935
918
  }
936
919
  makeWebsocketURL(path) {
937
- const url = new URL(urlJoin(this.instanceUrl.href, `/api/v2/cells/${this.config.cellId}`, path));
920
+ const url = new URL(urlJoin(this.instanceUrl.href, `/api/v2`, path));
938
921
  url.protocol = url.protocol.replace("http", "ws");
939
922
  url.protocol = url.protocol.replace("https", "wss");
940
923
  if (this.accessToken) url.searchParams.append("token", this.accessToken);
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/deprecated/v2/NovaCellAPIClient.ts","../../../src/lib/v2/mock/getCurrentRobotControllerState.ts","../../../src/lib/v2/mock/getMotionGroupDescription.ts","../../../src/lib/v2/mock/getMotionGroupKinematicModel.ts","../../../src/lib/v2/mock/getRobotController.ts","../../../src/lib/v2/mock/listCoordinateSystems.ts","../../../src/lib/v2/mock/listRobotControllers.ts","../../../src/lib/v2/mock/MockNovaInstance.ts","../../../src/lib/deprecated/v2/NovaClient.ts","../../../src/lib/deprecated/v2/wandelscriptUtils.ts","../../../src/lib/v2/NovaAPIClient.ts","../../../src/lib/v2/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\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 =\n this.withUnwrappedResponsesOnly(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 readonly program = this.withCellId(ProgramApi)\n\n readonly license = this.withUnwrappedResponsesOnly(LicenseApi)\n readonly novaCloud = this.withUnwrappedResponsesOnly(NOVACloudApi)\n readonly robotConfigurations = this.withUnwrappedResponsesOnly(\n RobotConfigurationsApi,\n )\n readonly version = this.withUnwrappedResponsesOnly(VersionApi)\n readonly session = this.withUnwrappedResponsesOnly(SessionApi)\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\"\nimport { getCurrentRobotControllerState } from \"./getCurrentRobotControllerState\"\nimport { getMotionGroupDescription } from \"./getMotionGroupDescription\"\nimport { getMotionGroupKinematicModel } from \"./getMotionGroupKinematicModel\"\nimport { getRobotController } from \"./getRobotController\"\nimport { listCoordinateSystems } from \"./listCoordinateSystems\"\nimport { listRobotControllers } from \"./listRobotControllers\"\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]\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 urlJoin from \"url-join\"\nimport { loginWithAuth0 } from \"../../../LoginWithAuth0\"\nimport { AutoReconnectingWebsocket } from \"../../AutoReconnectingWebsocket\"\nimport { availableStorage } from \"../../availableStorage\"\nimport { parseNovaInstanceUrl } from \"../../converters\"\nimport { MockNovaInstance } from \"../../v2/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\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 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: urlJoin(this.instanceUrl.href, \"/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.instanceUrl.href, \"/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 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 urlJoin(\n this.instanceUrl.href,\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","/** 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 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\ntype WithUnwrappedAxiosResponse<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<T[P]>\n}\n\n/**\n * API client providing type-safe access to all the endpoints of a NOVA\n * instance.\n */\nexport class NovaAPIClient {\n constructor(\n readonly cellId: string,\n readonly opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n },\n ) {}\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.withUnwrappedResponsesOnly(MotionGroupApi)\n readonly motionGroupModels =\n this.withUnwrappedResponsesOnly(MotionGroupModelsApi)\n\n readonly controller = this.withUnwrappedResponsesOnly(ControllerApi)\n\n readonly controllerIOs = this.withUnwrappedResponsesOnly(\n ControllerInputsOutputsApi,\n )\n\n readonly trajectoryPlanning = this.withUnwrappedResponsesOnly(\n TrajectoryPlanningApi,\n )\n readonly trajectoryExecution = this.withUnwrappedResponsesOnly(\n TrajectoryExecutionApi,\n )\n readonly trajectoryCaching =\n this.withUnwrappedResponsesOnly(TrajectoryCachingApi)\n\n readonly application = this.withUnwrappedResponsesOnly(ApplicationApi)\n readonly applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi)\n\n readonly jogging = this.withUnwrappedResponsesOnly(JoggingApi)\n\n readonly kinematics = this.withUnwrappedResponsesOnly(KinematicsApi)\n\n readonly busInputsOutputs =\n this.withUnwrappedResponsesOnly(BUSInputsOutputsApi)\n\n readonly virtualController =\n this.withUnwrappedResponsesOnly(VirtualControllerApi)\n readonly virtualControllerBehavior = this.withUnwrappedResponsesOnly(\n VirtualControllerBehaviorApi,\n )\n readonly virtualControllerIOs = this.withUnwrappedResponsesOnly(\n VirtualControllerInputsOutputsApi,\n )\n\n readonly storeObject = this.withUnwrappedResponsesOnly(StoreObjectApi)\n readonly storeCollisionComponents = this.withUnwrappedResponsesOnly(\n StoreCollisionComponentsApi,\n )\n readonly storeCollisionSetups = this.withUnwrappedResponsesOnly(\n StoreCollisionSetupsApi,\n )\n\n readonly program = this.withUnwrappedResponsesOnly(ProgramApi)\n\n readonly license = this.withUnwrappedResponsesOnly(LicenseApi)\n readonly novaCloud = this.withUnwrappedResponsesOnly(NOVACloudApi)\n readonly robotConfigurations = this.withUnwrappedResponsesOnly(\n RobotConfigurationsApi,\n )\n readonly version = this.withUnwrappedResponsesOnly(VersionApi)\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 { parseNovaInstanceUrl } from \"../converters\"\nimport { NovaAPIClient } from \"./NovaAPIClient\"\nimport { MockNovaInstance } from \"./mock/MockNovaInstance\"\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\n\n /**\n * Id of the cell to connect to\n */\n cellId: 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: NovaClientConfig\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 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: urlJoin(this.instanceUrl.href, \"/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 NovaAPIClient(this.config.cellId, {\n ...config,\n basePath: urlJoin(this.instanceUrl.href, \"/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 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 urlJoin(\n this.instanceUrl.href,\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"],"mappings":"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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;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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/deprecated/v2/NovaCellAPIClient.ts","../../../src/lib/v2/mock/getCurrentRobotControllerState.ts","../../../src/lib/v2/mock/getMotionGroupDescription.ts","../../../src/lib/v2/mock/getMotionGroupKinematicModel.ts","../../../src/lib/v2/mock/getRobotController.ts","../../../src/lib/v2/mock/listCoordinateSystems.ts","../../../src/lib/v2/mock/listRobotControllers.ts","../../../src/lib/v2/mock/MockNovaInstance.ts","../../../src/lib/deprecated/v2/NovaClient.ts","../../../src/lib/deprecated/v2/wandelscriptUtils.ts","../../../src/lib/v2/NovaAPIClient.ts","../../../src/lib/v2/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\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 =\n this.withUnwrappedResponsesOnly(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 readonly program = this.withCellId(ProgramApi)\n\n readonly license = this.withUnwrappedResponsesOnly(LicenseApi)\n readonly novaCloud = this.withUnwrappedResponsesOnly(NOVACloudApi)\n readonly robotConfigurations = this.withUnwrappedResponsesOnly(\n RobotConfigurationsApi,\n )\n readonly version = this.withUnwrappedResponsesOnly(VersionApi)\n readonly session = this.withUnwrappedResponsesOnly(SessionApi)\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\"\nimport { getCurrentRobotControllerState } from \"./getCurrentRobotControllerState\"\nimport { getMotionGroupDescription } from \"./getMotionGroupDescription\"\nimport { getMotionGroupKinematicModel } from \"./getMotionGroupKinematicModel\"\nimport { getRobotController } from \"./getRobotController\"\nimport { listCoordinateSystems } from \"./listCoordinateSystems\"\nimport { listRobotControllers } from \"./listRobotControllers\"\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]\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 urlJoin from \"url-join\"\nimport { loginWithAuth0 } from \"../../../LoginWithAuth0\"\nimport { AutoReconnectingWebsocket } from \"../../AutoReconnectingWebsocket\"\nimport { availableStorage } from \"../../availableStorage\"\nimport { parseNovaInstanceUrl } from \"../../converters\"\nimport { MockNovaInstance } from \"../../v2/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\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 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: urlJoin(this.instanceUrl.href, \"/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.instanceUrl.href, \"/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 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 urlJoin(\n this.instanceUrl.href,\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","import type {\n BaseAPI,\n Configuration as BaseConfiguration,\n} from \"@wandelbots/nova-api/v2\"\nimport * as novaApiV2 from \"@wandelbots/nova-api/v2\"\nimport type { AxiosInstance } from \"axios\"\nimport axios from \"axios\"\n\ntype UnwrapAxiosResponseReturn<T> = T extends (...a: unknown[]) => unknown[]\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\n/**\n * Filters nova-api/v2 exports to just the API class constructors,\n * excluding helper factories and param creators.\n */\ntype ApiConstructors = {\n [K in keyof typeof novaApiV2 as K extends `${string}Api`\n ? K extends\n | `${string}Factory${string}`\n | `${string}Fp${string}`\n | `${string}ParamCreator${string}`\n ? never\n : K\n : never]: (typeof novaApiV2)[K]\n}\n\n/**\n * Lowercases leading uppercase characters to produce a camelCase property name.\n * e.g. \"BUSInputsOutputs\" -> \"busInputsOutputs\", \"NOVACloud\" -> \"novaCloud\",\n * \"Application\" -> \"application\"\n */\ntype CamelCase<S extends string> =\n S extends `${Uppercase<infer A>}${Uppercase<infer B>}${infer Rest}`\n ? Rest extends `${Lowercase<string>}${string}`\n ? `${Lowercase<A>}${CamelCase<`${Uppercase<B>}${Rest}`>}`\n : `${Lowercase<A>}${CamelCase<`${Uppercase<B>}${Rest}`>}`\n : Uncapitalize<S>\n\n/**\n * Maps API class names to property names by stripping \"Api\" and converting\n * the leading acronym to lowercase camelCase.\n *\n * Properties are auto-discovered from the upstream package at runtime,\n * so new API sections are available immediately without code changes.\n */\ntype ApiProperties = {\n readonly [K in keyof ApiConstructors as K extends `${infer P}Api`\n ? CamelCase<P>\n : never]: ApiConstructors[K] extends new (\n ...args: unknown[]\n ) => infer I\n ? WithUnwrappedAxiosResponse<I>\n : never\n}\n\ntype NovaAPIClientOpts = BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n}\n\nfunction isApiClass(\n name: string,\n value: unknown,\n): value is new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n) => BaseAPI {\n return (\n name.endsWith(\"Api\") &&\n typeof value === \"function\" &&\n !name.includes(\"Factory\") &&\n !name.includes(\"Fp\") &&\n !name.includes(\"ParamCreator\")\n )\n}\n\nfunction wrapApi<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. API sections are auto-discovered from @wandelbots/nova-api/v2\n * at runtime, so new sections added upstream are exposed automatically.\n */\nexport const NovaAPIClient = class NovaAPIClient {\n readonly opts: NovaAPIClientOpts\n\n constructor(opts: NovaAPIClientOpts) {\n this.opts = opts\n\n for (const [name, value] of Object.entries(novaApiV2)) {\n if (isApiClass(name, value)) {\n const stripped = name.slice(0, -3)\n // Lowercase leading acronym run: \"BUSInputsOutputs\" -> \"busInputsOutputs\"\n let i = 0\n while (\n i < stripped.length &&\n stripped[i] === stripped[i].toUpperCase() &&\n stripped[i] !== stripped[i].toLowerCase()\n ) {\n i++\n }\n // If multiple uppercase chars, keep the last one uppercase (it starts the next word)\n const boundary = i > 1 ? i - 1 : i\n const propName =\n stripped.slice(0, boundary).toLowerCase() + stripped.slice(boundary)\n // biome-ignore lint/suspicious/noExplicitAny: dynamically assigning discovered API properties\n ;(this as any)[propName] = wrapApi(value, opts)\n }\n }\n }\n} as {\n new (\n opts: NovaAPIClientOpts,\n ): ApiProperties & {\n readonly cellId: string\n readonly opts: NovaAPIClientOpts\n }\n}\n\nexport type NovaAPIClient = InstanceType<typeof NovaAPIClient>\n","import 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 { parseNovaInstanceUrl } from \"../converters\"\nimport { NovaAPIClient } from \"./NovaAPIClient\"\nimport { MockNovaInstance } from \"./mock/MockNovaInstance\"\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\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: NovaClientConfig\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 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: urlJoin(this.instanceUrl.href, \"/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 NovaAPIClient({\n ...config,\n basePath: urlJoin(this.instanceUrl.href, \"/api/v2\"),\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n baseOptions: {\n ...(this.mock\n ? ({\n adapter: (config) => {\n // biome-ignore lint/style/noNonNullAssertion: guarded by ternary condition\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(urlJoin(this.instanceUrl.href, `/api/v2`, path))\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"],"mappings":";;;;;;;;;;;;AA0DA,IAAa,oBAAb,MAA+B;CAC7B,YACE,QACA,MAIA;EALS,KAAA,SAAA;EACA,KAAA,OAAA;gBAkFO,KAAK,2BAA2B,SAAS;cAC3C,KAAK,2BAA2B,OAAO;qBAEhC,KAAK,WAAW,cAAc;2BAEnD,KAAK,2BAA2B,oBAAoB;oBAEhC,KAAK,WAAW,aAAa;uBAE1B,KAAK,WAAW,0BAA0B;4BAErC,KAAK,WAAW,qBAAqB;6BACpC,KAAK,WAAW,sBAAsB;2BACxC,KAAK,WAAW,oBAAoB;qBAE1C,KAAK,WAAW,cAAc;2BACxB,KAAK,2BAA2B,cAAc;iBAExD,KAAK,WAAW,UAAU;oBAEvB,KAAK,WAAW,aAAa;0BAEvB,KAAK,WAAW,mBAAmB;2BAElC,KAAK,WAAW,oBAAoB;mCAC5B,KAAK,WACxC,4BACF;8BACgC,KAAK,WACnC,iCACF;qBAEuB,KAAK,WAAW,cAAc;kCACjB,KAAK,WACvC,2BACF;8BACgC,KAAK,WAAW,uBAAuB;iBAEpD,KAAK,WAAW,UAAU;iBAE1B,KAAK,2BAA2B,UAAU;mBACxC,KAAK,2BAA2B,YAAY;6BAClC,KAAK,2BAClC,sBACF;iBACmB,KAAK,2BAA2B,UAAU;iBAC1C,KAAK,2BAA2B,UAAU;CA5H1D;;;;;;CAOH,WACE,gBAKA;EACA,MAAM,YAAY,IAAI,eACpB;GACE,GAAG,KAAK;GACR,aAAa,SAAiB;IAC5B,OAAO,SAAS;GAClB;EACF,GACA,KAAK,KAAK,YAAY,IACtB,KAAK,KAAK,iBAAiB,MAAM,OAAO,CAC1C;EAIA,KAAK,MAAM,OAAO,QAAQ,QAAQ,QAAQ,eAAe,SAAS,CAAE,GAClE,IAAI,QAAQ,iBAAiB,OAAO,UAAU,SAAS,YAAY;GACjE,MAAM,mBAAmB,UAAU;GACnC,UAAU,QAAQ,GAAG,SAAgB;IACnC,OAAO,iBACJ,MAAM,WAAW,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,EACvC,MAAM,QAAa,IAAI,IAAI;GAChC;EACF;EAGF,OAAO;CACT;;;;CAKA,2BACE,gBAKA;EACA,MAAM,YAAY,IAAI,eACpB;GACE,GAAG,KAAK;GACR,aAAa,SAAiB;IAC5B,OAAO,SAAS;GAClB;EACF,GACA,KAAK,KAAK,YAAY,IACtB,KAAK,KAAK,iBAAiB,MAAM,OAAO,CAC1C;EAIA,KAAK,MAAM,OAAO,QAAQ,QAAQ,QAAQ,eAAe,SAAS,CAAE,GAClE,IAAI,QAAQ,iBAAiB,OAAO,UAAU,SAAS,YAAY;GACjE,MAAM,mBAAmB,UAAU;GACnC,UAAU,QAAQ,GAAG,SAAgB;IACnC,OAAO,iBACJ,MAAM,WAAW,IAAI,EACrB,MAAM,QAAa,IAAI,IAAI;GAChC;EACF;EAGF,OAAO;CACT;AAiDF;;;AC9LA,MAAa,iCAAiC;CAC5C,QAAQ;CACR,MAAM;CACN,SAAS;EACP,OAAO;GACL,MAAM;GACN,YAAY,CAAC;GACb,WAAW;GACX,iBAAiB;GACjB,YAAY;GACZ,gBAAgB;GAChB,cAAc;GACd,mBAAmB;GACnB,eAAe,CACb;IACE,WAAW;IACX,iBAAiB;IACjB,cAAc;IACd,YAAY;IACZ,gBAAgB;KACd;KAAmB;KAAqB;KACxC;KAAmB;KAAoB;IACzC;IACA,qBAAqB,EACnB,eAAe;KAAC;KAAO;KAAO;KAAO;KAAO;KAAO;IAAK,EAC1D;IACA,cAAc,CAAC;IACf,eAAe;KAAC;KAAG;KAAG;KAAG;KAAG;KAAG;IAAC;IAChC,aAAa;KACX,UAAU;MACR;MAAmB;MAAoB;KACzC;KACA,aAAa;MACX;MAAoB;MAAoB;KAC1C;IACF;IACA,KAAK;IACL,UAAU;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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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@wandelbots/nova-js",
3
3
  "type": "module",
4
- "version": "3.9.0-pr.280.2a86180",
4
+ "version": "3.9.0-pr.280.2b62f3c",
5
5
  "description": "Official JS client for the Wandelbots API",
6
6
  "sideEffects": false,
7
7
  "packageManager": "pnpm@11.1.3+sha512.c85357fe17ca12dd23dd7071822666dfd7e3cb76fe214e3370b5ea2fb34f2a231185509b63e717f3cd0acb38dd3f8d82bcd5e8172400ae678b70ea4fbed0896d",
@@ -31,10 +31,10 @@
31
31
  "lint": "biome check --error-on-warnings .",
32
32
  "format": "biome format . --write",
33
33
  "knip": "knip",
34
- "build": "tsdown src/index.ts src/lib/deprecated/v1/index.ts src/lib/v2/index.ts --format esm,cjs --clean --sourcemap",
34
+ "build": "tsdown",
35
35
  "test": "pnpm run build && vitest run",
36
36
  "e2e": "vitest run --config vitest.e2e.config.ts",
37
- "checks": "pnpm format && concurrently --group --timings --names audit,lint,tsc,knip,test \"pnpm audit\" \"pnpm lint\" \"pnpm tsc\" \"pnpm knip\" \"pnpm test\""
37
+ "checks": "pnpm format && pnpm build && concurrently --group --timings --names audit,lint,tsc,knip,test \"pnpm audit\" \"pnpm lint\" \"pnpm tsc\" \"pnpm knip\" \"vitest run\""
38
38
  },
39
39
  "repository": {
40
40
  "type": "git",
@@ -51,6 +51,7 @@
51
51
  "@biomejs/biome": "^2.4.15",
52
52
  "@types/lodash-es": "^4.17.12",
53
53
  "@types/node": "^25.9.1",
54
+ "@types/ws": "^8.18.1",
54
55
  "concurrently": "^9.2.1",
55
56
  "conventional-changelog-conventionalcommits": "^9.3.1",
56
57
  "knip": "^6.14.2",
@@ -59,6 +60,7 @@
59
60
  "semantic-release": "^25.0.3",
60
61
  "semantic-release-export-data": "^1.2.0",
61
62
  "tsdown": "^0.22.0",
63
+ "tsnapi": "^0.3.3",
62
64
  "typescript": "^6.0.3",
63
65
  "vite": "^8.0.14",
64
66
  "vitest": "^4.1.7",
@@ -1,4 +1,3 @@
1
- /** biome-ignore-all lint/style/noNonNullAssertion: legacy code */
2
1
  import type { Configuration as BaseConfiguration } from "@wandelbots/nova-api/v2"
3
2
  import type { AxiosRequestConfig } from "axios"
4
3
  import axios, { isAxiosError } from "axios"
@@ -17,11 +16,6 @@ export type NovaClientConfig = {
17
16
  */
18
17
  instanceUrl: string
19
18
 
20
- /**
21
- * Id of the cell to connect to
22
- */
23
- cellId: string
24
-
25
19
  /**
26
20
  * Access token for Bearer authentication.
27
21
  * If running on a NOVA instance, this can be automatically retrieved from
@@ -116,7 +110,7 @@ export class Nova {
116
110
  )
117
111
  }
118
112
 
119
- this.api = new NovaAPIClient(this.config.cellId, {
113
+ this.api = new NovaAPIClient({
120
114
  ...config,
121
115
  basePath: urlJoin(this.instanceUrl.href, "/api/v2"),
122
116
  isJsonMime: (mime: string) => {
@@ -126,6 +120,7 @@ export class Nova {
126
120
  ...(this.mock
127
121
  ? ({
128
122
  adapter: (config) => {
123
+ // biome-ignore lint/style/noNonNullAssertion: guarded by ternary condition
129
124
  return this.mock!.handleAPIRequest(config)
130
125
  },
131
126
  } satisfies AxiosRequestConfig)
@@ -165,13 +160,7 @@ export class Nova {
165
160
  }
166
161
 
167
162
  makeWebsocketURL(path: string): string {
168
- const url = new URL(
169
- urlJoin(
170
- this.instanceUrl.href,
171
- `/api/v2/cells/${this.config.cellId}`,
172
- path,
173
- ),
174
- )
163
+ const url = new URL(urlJoin(this.instanceUrl.href, `/api/v2`, path))
175
164
  url.protocol = url.protocol.replace("http", "ws")
176
165
  url.protocol = url.protocol.replace("https", "wss")
177
166