@wandelbots/nova-js 3.1.0 → 3.2.0-pr.ci-simplify-build.137.87eeb8d
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.
- package/dist/AutoReconnectingWebsocket-BI1ckzP8.d.ts +71 -0
- package/dist/AutoReconnectingWebsocket-BI1ckzP8.d.ts.map +1 -0
- package/dist/AutoReconnectingWebsocket-Cr7f9016.d.cts +71 -0
- package/dist/AutoReconnectingWebsocket-Cr7f9016.d.cts.map +1 -0
- package/dist/LoginWithAuth0-0g0wWRUC.js +217 -0
- package/dist/LoginWithAuth0-0g0wWRUC.js.map +1 -0
- package/dist/LoginWithAuth0-C82OCyDy.cjs +264 -0
- package/dist/LoginWithAuth0-C82OCyDy.cjs.map +1 -0
- package/dist/converters-DP2EIVv6.cjs +108 -0
- package/dist/converters-DP2EIVv6.cjs.map +1 -0
- package/dist/converters-DY6Lf7mb.js +66 -0
- package/dist/converters-DY6Lf7mb.js.map +1 -0
- package/dist/index.cjs +41 -386
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +70 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +69 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -52
- package/dist/index.js.map +1 -1
- package/dist/lib/v1/index.cjs +2146 -2917
- package/dist/lib/v1/index.cjs.map +1 -1
- package/dist/lib/v1/index.d.cts +397 -0
- package/dist/lib/v1/index.d.cts.map +1 -0
- package/dist/lib/v1/index.d.ts +395 -7
- package/dist/lib/v1/index.d.ts.map +1 -1
- package/dist/lib/v1/index.js +2127 -2623
- package/dist/lib/v1/index.js.map +1 -1
- package/dist/lib/v2/index.cjs +1356 -1472
- package/dist/lib/v2/index.cjs.map +1 -1
- package/dist/lib/v2/index.d.cts +115 -0
- package/dist/lib/v2/index.d.cts.map +1 -0
- package/dist/lib/v2/index.d.ts +113 -2
- package/dist/lib/v2/index.d.ts.map +1 -1
- package/dist/lib/v2/index.js +1346 -1189
- package/dist/lib/v2/index.js.map +1 -1
- package/package.json +14 -16
- package/src/LoginWithAuth0.ts +9 -9
- package/src/lib/v1/NovaCellAPIClient.ts +4 -2
- package/src/lib/v2/NovaCellAPIClient.ts +4 -2
- package/src/lib/v2/mock/MockNovaInstance.ts +9 -13
- package/dist/LoginWithAuth0.d.ts +0 -7
- package/dist/LoginWithAuth0.d.ts.map +0 -1
- package/dist/chunk-B2C22PTK.js +0 -53
- package/dist/chunk-B2C22PTK.js.map +0 -1
- package/dist/chunk-I3PUV6ZD.js +0 -286
- package/dist/chunk-I3PUV6ZD.js.map +0 -1
- package/dist/lib/AutoReconnectingWebsocket.d.ts +0 -43
- package/dist/lib/AutoReconnectingWebsocket.d.ts.map +0 -1
- package/dist/lib/availableStorage.d.ts +0 -15
- package/dist/lib/availableStorage.d.ts.map +0 -1
- package/dist/lib/converters.d.ts +0 -26
- package/dist/lib/converters.d.ts.map +0 -1
- package/dist/lib/errorHandling.d.ts +0 -15
- package/dist/lib/errorHandling.d.ts.map +0 -1
- package/dist/lib/v1/ConnectedMotionGroup.d.ts +0 -77
- package/dist/lib/v1/ConnectedMotionGroup.d.ts.map +0 -1
- package/dist/lib/v1/JoggerConnection.d.ts +0 -94
- package/dist/lib/v1/JoggerConnection.d.ts.map +0 -1
- package/dist/lib/v1/MotionStreamConnection.d.ts +0 -26
- package/dist/lib/v1/MotionStreamConnection.d.ts.map +0 -1
- package/dist/lib/v1/NovaCellAPIClient.d.ts +0 -68
- package/dist/lib/v1/NovaCellAPIClient.d.ts.map +0 -1
- package/dist/lib/v1/NovaClient.d.ts +0 -67
- package/dist/lib/v1/NovaClient.d.ts.map +0 -1
- package/dist/lib/v1/ProgramStateConnection.d.ts +0 -57
- package/dist/lib/v1/ProgramStateConnection.d.ts.map +0 -1
- package/dist/lib/v1/getLatestTrajectories.d.ts +0 -4
- package/dist/lib/v1/getLatestTrajectories.d.ts.map +0 -1
- package/dist/lib/v1/mock/MockNovaInstance.d.ts +0 -13
- package/dist/lib/v1/mock/MockNovaInstance.d.ts.map +0 -1
- package/dist/lib/v1/motionStateUpdate.d.ts +0 -4
- package/dist/lib/v1/motionStateUpdate.d.ts.map +0 -1
- package/dist/lib/v2/NovaCellAPIClient.d.ts +0 -62
- package/dist/lib/v2/NovaCellAPIClient.d.ts.map +0 -1
- package/dist/lib/v2/NovaClient.d.ts +0 -60
- package/dist/lib/v2/NovaClient.d.ts.map +0 -1
- package/dist/lib/v2/mock/MockNovaInstance.d.ts +0 -13
- package/dist/lib/v2/mock/MockNovaInstance.d.ts.map +0 -1
package/dist/lib/v2/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/v2/index.ts","../../../src/lib/v2/NovaCellAPIClient.ts","../../../src/lib/v2/NovaClient.ts","../../../src/lib/v2/mock/MockNovaInstance.ts"],"sourcesContent":["export * from \"@wandelbots/nova-api/v2\"\nexport * from \"./NovaCellAPIClient\"\nexport * from \"./NovaClient\"\n","/** biome-ignore-all lint/suspicious/noExplicitAny: legacy code */\n/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type { Configuration as BaseConfiguration } from \"@wandelbots/nova-api/v2\"\nimport {\n ApplicationApi,\n BUSInputsOutputsApi,\n CellApi,\n ControllerApi,\n ControllerInputsOutputsApi,\n JoggingApi,\n KinematicsApi,\n MotionGroupApi,\n MotionGroupModelsApi,\n StoreCollisionComponentsApi,\n StoreCollisionSetupsApi,\n StoreObjectApi,\n SystemApi,\n TrajectoryCachingApi,\n TrajectoryExecutionApi,\n TrajectoryPlanningApi,\n VirtualControllerApi,\n VirtualControllerBehaviorApi,\n VirtualControllerInputsOutputsApi,\n} from \"@wandelbots/nova-api/v2\"\nimport type { BaseAPI } from \"@wandelbots/nova-api/v2/base\"\nimport type { AxiosInstance } from \"axios\"\nimport axios from \"axios\"\n\ntype OmitFirstArg<F> = F extends (x: any, ...args: infer P) => infer R\n ? (...args: P) => R\n : never\n\ntype UnwrapAxiosResponseReturn<T> = T extends (...a: any) => any\n ? (\n ...a: Parameters<T>\n ) => Promise<Awaited<ReturnType<T>> extends { data: infer D } ? D : never>\n : never\n\nexport type WithCellId<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<OmitFirstArg<T[P]>>\n}\n\nexport type WithUnwrappedAxiosResponse<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<T[P]>\n}\n\n/**\n * API client providing type-safe access to all the Nova API REST endpoints\n * associated with a specific cell id.\n */\nexport class NovaCellAPIClient {\n constructor(\n readonly cellId: string,\n readonly opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n },\n ) {}\n\n /**\n * Some TypeScript sorcery which alters the API class methods so you don't\n * have to pass the cell id to every single one, and de-encapsulates the\n * response data\n */\n private withCellId<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n ) {\n const apiClient = new ApiConstructor(\n {\n ...this.opts,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n },\n this.opts.basePath ?? \"\",\n this.opts.axiosInstance ?? axios.create(),\n ) as {\n [key: string | symbol]: any\n }\n\n for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient)!)) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key]\n apiClient[key] = (...args: any[]) => {\n return originalFunction\n .apply(apiClient, [this.cellId, ...args])\n .then((res: any) => res.data)\n }\n }\n }\n\n return apiClient as WithCellId<T>\n }\n\n /**\n * As withCellId, but only does the response unwrapping\n */\n private withUnwrappedResponsesOnly<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n ) {\n const apiClient = new ApiConstructor(\n {\n ...this.opts,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n },\n this.opts.basePath ?? \"\",\n this.opts.axiosInstance ?? axios.create(),\n ) as {\n [key: string | symbol]: any\n }\n\n for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient)!)) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key]\n apiClient[key] = (...args: any[]) => {\n return originalFunction\n .apply(apiClient, args)\n .then((res: any) => res.data)\n }\n }\n }\n\n return apiClient as WithUnwrappedAxiosResponse<T>\n }\n\n readonly system = this.withUnwrappedResponsesOnly(SystemApi)\n readonly cell = this.withUnwrappedResponsesOnly(CellApi)\n\n readonly motionGroup = this.withCellId(MotionGroupApi)\n readonly motionGroupModels = this.withCellId(MotionGroupModelsApi)\n\n readonly controller = this.withCellId(ControllerApi)\n\n readonly controllerIOs = this.withCellId(ControllerInputsOutputsApi)\n\n readonly trajectoryPlanning = this.withCellId(TrajectoryPlanningApi)\n readonly trajectoryExecution = this.withCellId(TrajectoryExecutionApi)\n readonly trajectoryCaching = this.withCellId(TrajectoryCachingApi)\n\n readonly application = this.withCellId(ApplicationApi)\n readonly applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi)\n\n readonly jogging = this.withCellId(JoggingApi)\n\n readonly kinematics = this.withCellId(KinematicsApi)\n\n readonly busInputsOutputs = this.withCellId(BUSInputsOutputsApi)\n\n readonly virtualController = this.withCellId(VirtualControllerApi)\n readonly virtualControllerBehavior = this.withCellId(\n VirtualControllerBehaviorApi,\n )\n readonly virtualControllerIOs = this.withCellId(\n VirtualControllerInputsOutputsApi,\n )\n\n readonly storeObject = this.withCellId(StoreObjectApi)\n readonly storeCollisionComponents = this.withCellId(\n StoreCollisionComponentsApi,\n )\n readonly storeCollisionSetups = this.withCellId(StoreCollisionSetupsApi)\n}\n","/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type { Configuration as BaseConfiguration } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosRequestConfig } from \"axios\"\nimport axios, { isAxiosError } from \"axios\"\nimport urlJoin from \"url-join\"\nimport { loginWithAuth0 } from \"../../LoginWithAuth0\"\nimport { AutoReconnectingWebsocket } from \"../AutoReconnectingWebsocket\"\nimport { availableStorage } from \"../availableStorage\"\nimport { MockNovaInstance } from \"./mock/MockNovaInstance\"\nimport { NovaCellAPIClient } from \"./NovaCellAPIClient\"\n\nexport type NovaClientConfig = {\n /**\n * Url of the deployed Nova instance to connect to\n * e.g. https://saeattii.instance.wandelbots.io\n */\n instanceUrl: string | \"https://mock.example.com\"\n\n /**\n * Identifier of the cell on the Nova instance to connect this client to.\n * If omitted, the default identifier \"cell\" is used.\n **/\n cellId?: string\n\n /**\n * Username for basic auth to the Nova instance.\n * @deprecated use accessToken instead\n */\n username?: string\n\n /**\n * Password for basic auth to the Nova instance.\n * @deprecated use accessToken instead\n */\n password?: string\n\n /**\n * Access token for Bearer authentication.\n */\n accessToken?: string\n} & Omit<BaseConfiguration, \"isJsonMime\" | \"basePath\">\n\ntype NovaClientConfigWithDefaults = NovaClientConfig & { cellId: string }\n\n/**\n * EXPERIMENTAL\n *\n * This client provides a starting point to migrate NOVA api v2.\n * As v2 is still in development, this client has to be considered unstable\n *\n * Client for connecting to a Nova instance and controlling robots.\n */\nexport class NovaClient {\n readonly api: NovaCellAPIClient\n readonly config: NovaClientConfigWithDefaults\n readonly mock?: MockNovaInstance\n authPromise: Promise<string | null> | null = null\n accessToken: string | null = null\n\n constructor(config: NovaClientConfig) {\n console.warn(\"Using experimental NOVA v2 client\")\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\n // Set up Axios instance with interceptor for token fetching\n const axiosInstance = axios.create({\n baseURL: urlJoin(this.config.instanceUrl, \"/api/v2\"),\n // TODO - backend needs to set proper CORS headers for this\n headers:\n typeof window !== \"undefined\" &&\n window.location.origin.includes(\"localhost\")\n ? {}\n : {\n // Identify the client to the backend for logging purposes\n \"X-Wandelbots-Client\": \"Wandelbots-Nova-JS-SDK\",\n },\n })\n\n axiosInstance.interceptors.request.use(async (request) => {\n if (!request.headers.Authorization) {\n if (this.accessToken) {\n request.headers.Authorization = `Bearer ${this.accessToken}`\n } else if (this.config.username && this.config.password) {\n request.headers.Authorization = `Basic ${btoa(`${config.username}:${config.password}`)}`\n }\n }\n return request\n })\n\n if (typeof window !== \"undefined\") {\n axiosInstance.interceptors.response.use(\n (r) => r,\n async (error) => {\n if (isAxiosError(error)) {\n if (error.response?.status === 401) {\n // If we hit a 401, attempt to login the user and retry with\n // a new access token\n try {\n await this.renewAuthentication()\n\n if (error.config) {\n if (this.accessToken) {\n error.config.headers.Authorization = `Bearer ${this.accessToken}`\n } else {\n delete error.config.headers.Authorization\n }\n return axiosInstance.request(error.config)\n }\n } catch (err) {\n return Promise.reject(err)\n }\n } else if (error.response?.status === 503) {\n // Check if the server as a whole is down\n const res = await fetch(window.location.href)\n if (res.status === 503) {\n // Go to 503 page\n window.location.reload()\n }\n }\n }\n\n return Promise.reject(error)\n },\n )\n }\n\n this.api = new NovaCellAPIClient(cellId, {\n ...config,\n basePath: urlJoin(this.config.instanceUrl, \"/api/v1\"),\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n baseOptions: {\n ...(this.mock\n ? ({\n adapter: (config) => {\n return this.mock!.handleAPIRequest(config)\n },\n } satisfies AxiosRequestConfig)\n : {}),\n ...config.baseOptions,\n },\n axiosInstance,\n })\n }\n\n async renewAuthentication(): Promise<void> {\n if (this.authPromise) {\n // Don't double up\n return\n }\n\n this.authPromise = loginWithAuth0(this.config.instanceUrl)\n try {\n this.accessToken = await this.authPromise\n if (this.accessToken) {\n // Cache access token so we don't need to log in every refresh\n availableStorage.setString(\"wbjs.access_token\", this.accessToken)\n } else {\n availableStorage.delete(\"wbjs.access_token\")\n }\n } finally {\n this.authPromise = null\n }\n }\n\n makeWebsocketURL(path: string): string {\n const url = new URL(\n urlJoin(\n this.config.instanceUrl,\n `/api/v1/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 { MotionGroupState, RobotController } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosResponse, InternalAxiosRequestConfig } from \"axios\"\nimport { AxiosError } from \"axios\"\nimport * as pathToRegexp from \"path-to-regexp\"\nimport type { AutoReconnectingWebsocket } from \"../../AutoReconnectingWebsocket\"\n\n/**\n * EXPERIMENTAL\n * Ultra-simplified mock Nova server for testing stuff\n */\nexport class MockNovaInstance {\n readonly connections: AutoReconnectingWebsocket[] = []\n\n async handleAPIRequest(\n config: InternalAxiosRequestConfig,\n ): Promise<AxiosResponse> {\n const apiHandlers = [\n {\n method: \"GET\",\n path: \"/cells/:cellId/controllers\",\n handle() {\n return {\n controllers: [\n {\n controller: \"mock-ur5e\",\n model_name: \"UniversalRobots::Controller\",\n host: \"mock-ur5e\",\n allow_software_install_on_controller: true,\n motion_groups: [\n {\n motion_group: \"0@mock-ur5e\",\n name_from_controller: \"UR5e\",\n active: false,\n model_from_controller: \"UniversalRobots_UR5e\",\n },\n ],\n has_error: false,\n error_details: \"\",\n },\n ],\n }\n },\n },\n {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId\",\n handle() {\n return {\n configuration: {\n kind: \"VirtualController\",\n manufacturer: \"universalrobots\",\n type: \"universalrobots-ur5e\",\n },\n name: \"mock-ur5\",\n } satisfies RobotController\n },\n },\n {\n method: \"GET\",\n path: \"/cells/:cellId/motion-groups/:motionGroupId/specification\",\n handle() {\n return {\n dh_parameters: [\n {\n alpha: 1.5707963267948966,\n theta: 0,\n a: 0,\n d: 162.25,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0,\n theta: 0,\n a: -425,\n d: 0,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0,\n theta: 0,\n a: -392.2,\n d: 0,\n reverse_rotation_direction: false,\n },\n {\n alpha: 1.5707963267948966,\n theta: 0,\n a: 0,\n d: 133.3,\n reverse_rotation_direction: false,\n },\n {\n alpha: -1.5707963267948966,\n theta: 0,\n a: 0,\n d: 99.7,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0,\n theta: 0,\n a: 0,\n d: 99.6,\n reverse_rotation_direction: false,\n },\n ],\n mechanical_joint_limits: [\n {\n joint: \"JOINTNAME_AXIS_1\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_2\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_3\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_4\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_5\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_6\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n ],\n } // Mock motion group specification\n },\n },\n {\n method: \"GET\",\n path: \"/cells/:cellId/motion-groups/:motionGroupId/safety-setup\",\n handle() {\n return {\n safety_settings: [\n {\n safety_state: \"SAFETY_NORMAL\",\n settings: {\n joint_position_limits: [\n {\n joint: \"JOINTNAME_AXIS_1\",\n lower_limit: -2.96705961227417,\n upper_limit: 2.96705961227417,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_2\",\n lower_limit: -1.7453292608261108,\n upper_limit: 2.7925267219543457,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_3\",\n lower_limit: -3.3161256313323975,\n upper_limit: 0.40142571926116943,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_4\",\n lower_limit: -3.4906585216522217,\n upper_limit: 3.4906585216522217,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_5\",\n lower_limit: -2.4434609413146973,\n upper_limit: 2.4434609413146973,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_6\",\n lower_limit: -4.71238899230957,\n upper_limit: 4.71238899230957,\n unlimited: false,\n },\n ],\n joint_velocity_limits: [\n {\n joint: \"JOINTNAME_AXIS_1\",\n limit: 3.1415927410125732,\n },\n {\n joint: \"JOINTNAME_AXIS_2\",\n limit: 3.1415927410125732,\n },\n {\n joint: \"JOINTNAME_AXIS_3\",\n limit: 3.4906585216522217,\n },\n {\n joint: \"JOINTNAME_AXIS_4\",\n limit: 6.108652591705322,\n },\n {\n joint: \"JOINTNAME_AXIS_5\",\n limit: 6.108652591705322,\n },\n {\n joint: \"JOINTNAME_AXIS_6\",\n limit: 6.981317043304443,\n },\n ],\n joint_acceleration_limits: [],\n joint_torque_limits: [],\n tcp_velocity_limit: 1800,\n },\n },\n ],\n safety_zones: [\n {\n id: 1,\n priority: 0,\n geometry: {\n compound: {\n child_geometries: [\n {\n convex_hull: {\n vertices: [\n { vertex: [-800, -1330, -1820] },\n { vertex: [1650, -1330, -1820] },\n { vertex: [1650, 1330, -1820] },\n { vertex: [-800, 1330, -1820] },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n {\n convex_hull: {\n vertices: [\n {\n vertex: [-800, -1330, -1820],\n },\n {\n vertex: [1650, -1330, -1820],\n },\n {\n vertex: [1650, -1330, 1500],\n },\n {\n vertex: [-800, -1330, 1500],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n {\n convex_hull: {\n vertices: [\n {\n vertex: [-800, -1330, -1820],\n },\n {\n vertex: [-800, 1330, -1820],\n },\n {\n vertex: [-800, 1330, 1500],\n },\n {\n vertex: [-800, -1330, 1500],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, 1330, 1500],\n },\n {\n vertex: [-800, 1330, 1500],\n },\n {\n vertex: [-800, -1330, 1500],\n },\n {\n vertex: [1650, -1330, 1500],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, 1330, 1500],\n },\n {\n vertex: [-800, 1330, 1500],\n },\n {\n vertex: [-800, 1330, -1820],\n },\n {\n vertex: [1650, 1330, -1820],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, 1330, 1500],\n },\n {\n vertex: [1650, -1330, 1500],\n },\n {\n vertex: [1650, -1330, -1820],\n },\n {\n vertex: [1650, 1330, -1820],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"Cell workzone\",\n },\n motion_group_uid: 1,\n },\n {\n id: 2,\n priority: 0,\n geometry: {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, 1330, -1850],\n },\n {\n vertex: [865, 1330, -1850],\n },\n {\n vertex: [865, -720, -1850],\n },\n {\n vertex: [1650, -720, -1850],\n },\n {\n vertex: [1650, 1330, -920],\n },\n {\n vertex: [865, 1330, -920],\n },\n {\n vertex: [865, -720, -920],\n },\n {\n vertex: [1650, -720, -920],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"Transport\",\n },\n motion_group_uid: 1,\n },\n {\n id: 3,\n priority: 0,\n geometry: {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, 1330, -600],\n },\n {\n vertex: [865, 1330, -600],\n },\n {\n vertex: [865, 430, -600],\n },\n {\n vertex: [1650, 430, -600],\n },\n {\n vertex: [1650, 1330, -1250],\n },\n {\n vertex: [865, 1330, -1250],\n },\n {\n vertex: [865, 430, -1250],\n },\n {\n vertex: [1650, 430, -1250],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"Tunel\",\n },\n motion_group_uid: 1,\n },\n {\n id: 4,\n priority: 0,\n geometry: {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, -760, -440],\n },\n {\n vertex: [900, -760, -440],\n },\n {\n vertex: [900, -1330, -440],\n },\n {\n vertex: [1650, -1330, -440],\n },\n {\n vertex: [1650, -760, -1800],\n },\n {\n vertex: [900, -760, -1800],\n },\n {\n vertex: [900, -1330, -1800],\n },\n {\n vertex: [1650, -1330, -1800],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"Fanuc controller\",\n },\n motion_group_uid: 1,\n },\n {\n id: 6,\n priority: 0,\n geometry: {\n convex_hull: {\n vertices: [\n {\n vertex: [-200, -200, -1900],\n },\n {\n vertex: [200, -200, -1900],\n },\n {\n vertex: [200, 200, -1900],\n },\n {\n vertex: [-200, 200, -1900],\n },\n {\n vertex: [-200, -200, -350],\n },\n {\n vertex: [200, -200, -350],\n },\n {\n vertex: [200, 200, -350],\n },\n {\n vertex: [-200, 200, -350],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"Robot base\",\n },\n motion_group_uid: 1,\n },\n ],\n robot_model_geometries: [\n {\n link_index: 1,\n geometry: {\n sphere: {\n radius: 270,\n },\n init_pose: {\n position: [-70, -70, -50],\n orientation: [0, 0, 0, 1],\n },\n id: \"link1_sphere\",\n },\n },\n {\n link_index: 2,\n geometry: {\n capsule: {\n radius: 160,\n cylinder_height: 800,\n },\n init_pose: {\n position: [-450, 40, 170],\n orientation: [0, -Math.SQRT1_2, 0, Math.SQRT1_2],\n },\n id: \"link2_capsule\",\n },\n },\n {\n link_index: 3,\n geometry: {\n sphere: {\n radius: 270,\n },\n init_pose: {\n position: [-110, 10, -100],\n orientation: [0, 0, 0, 1],\n },\n id: \"link3_sphere\",\n },\n },\n {\n link_index: 4,\n geometry: {\n capsule: {\n radius: 110,\n cylinder_height: 600,\n },\n init_pose: {\n position: [0, 300, 40],\n orientation: [-Math.SQRT1_2, 0, 0, Math.SQRT1_2],\n },\n id: \"link4_capsule\",\n },\n },\n {\n link_index: 5,\n geometry: {\n sphere: {\n radius: 75,\n },\n init_pose: {\n position: [0, 0, -50],\n orientation: [0, 0, 0, 1],\n },\n id: \"link5_sphere\",\n },\n },\n ],\n tool_geometries: [],\n } // Mock safety setup\n },\n },\n {\n method: \"GET\",\n path: \"/cells/:cellId/coordinate-systems\",\n handle() {\n return {\n coordinatesystems: [\n {\n coordinate_system: \"\",\n name: \"world\",\n reference_uid: \"\",\n position: [0, 0, 0],\n rotation: {\n angles: [0, 0, 0],\n type: \"ROTATION_VECTOR\",\n },\n },\n ],\n } //satisfies CoordinateSystems\n },\n },\n {\n method: \"GET\",\n path: \"/cells/:cellId/motion-groups/:motionGroupId/tcps\",\n handle() {\n return {\n tcps: [\n {\n id: \"Flange\",\n readable_name: \"Default-Flange\",\n position: [0, 0, 0],\n rotation: {\n angles: [0, 0, 0, 0],\n type: \"ROTATION_VECTOR\",\n },\n },\n {\n id: \"complex-tcp-position\",\n readable_name: \"Complex TCP Position\",\n position: [-200, 300, 150],\n rotation: {\n angles: [\n -0.12139440409113832, -0.06356210998212003,\n -0.2023240068185639, 0,\n ],\n type: \"ROTATION_VECTOR\",\n },\n },\n ],\n }\n },\n },\n ]\n\n const method = config.method?.toUpperCase() || \"GET\"\n const path = `/cells${config.url?.split(\"/cells\")[1]?.split(\"?\")[0]}`\n\n for (const handler of apiHandlers) {\n const match = pathToRegexp.match(handler.path)(path || \"\")\n if (method === handler.method && match) {\n const json = handler.handle()\n return {\n status: 200,\n statusText: \"Success\",\n data: JSON.stringify(json),\n headers: {},\n config,\n request: {\n responseURL: config.url,\n },\n }\n }\n }\n\n throw new AxiosError(\n `No mock handler matched this request: ${method} ${path}`,\n \"404\",\n config,\n )\n\n // return {\n // status: 404,\n // statusText: \"Not Found\",\n // data: \"\",\n // headers: {},\n // config,\n // request: {\n // responseURL: config.url,\n // },\n // }\n }\n\n 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(\"/move-joint\")) {\n socket.dispatchEvent(\n new MessageEvent(\"message\", {\n data: JSON.stringify({\n result: {\n motion_group: \"0@ur\",\n state: {\n controller: \"ur\",\n operation_mode: \"OPERATION_MODE_AUTO\",\n safety_state: \"SAFETY_STATE_NORMAL\",\n timestamp: \"2024-09-18T12:48:26.096266444Z\",\n velocity_override: 100,\n motion_groups: [\n {\n motion_group: \"0@ur\",\n controller: \"ur\",\n joint_position: {\n joints: [\n 1.3492152690887451, -1.5659207105636597,\n 1.6653711795806885, -1.0991662740707397,\n -1.829018235206604, 1.264623761177063,\n ],\n },\n joint_velocity: {\n joints: [0, 0, 0, 0, 0, 0],\n },\n flange_pose: {\n position: [\n 6.437331889439328, -628.4123774830913,\n 577.0569957147832,\n ],\n orientation: {\n x: -1.683333649797158,\n y: -1.9783363827298732,\n z: -0.4928031860165713,\n },\n coordinate_system: \"\",\n },\n tcp_pose: {\n position: [\n 6.437331889439328, -628.4123774830913,\n 577.0569957147832,\n ],\n orientation: {\n x: -1.683333649797158,\n y: -1.9783363827298732,\n z: -0.4928031860165713,\n },\n coordinate_system: \"\",\n tcp: \"Flange\",\n },\n velocity: {\n linear: {\n x: 0,\n y: 0,\n z: 0,\n },\n angular: {\n x: -0,\n y: 0,\n z: 0,\n },\n coordinate_system: \"\",\n },\n force: {\n force: {\n x: 0,\n y: 0,\n z: 0,\n },\n moment: {\n x: 0,\n y: 0,\n z: 0,\n },\n coordinate_system: \"\",\n },\n joint_limit_reached: {\n limit_reached: [\n false,\n false,\n false,\n false,\n false,\n false,\n ],\n },\n joint_current: {\n joints: [0, 0, 0, 0, 0, 0],\n },\n sequence_number: \"671259\",\n },\n ],\n sequence_number: \"671259\",\n },\n movement_state: \"MOVEMENT_STATE_MOVING\",\n },\n }),\n }),\n )\n }\n\n if (socket.url.includes(\"/move-tcp\")) {\n socket.dispatchEvent(\n new MessageEvent(\"message\", {\n data: JSON.stringify({\n result: {\n motion_group: \"0@ur\",\n state: {\n controller: \"ur\",\n operation_mode: \"OPERATION_MODE_AUTO\",\n safety_state: \"SAFETY_STATE_NORMAL\",\n timestamp: \"2024-09-18T12:43:12.188335774Z\",\n velocity_override: 100,\n motion_groups: [\n {\n motion_group: \"0@ur\",\n controller: \"ur\",\n joint_position: {\n joints: [\n 1.3352527618408203, -1.5659207105636597,\n 1.6653711795806885, -1.110615611076355,\n -1.829018235206604, 1.264623761177063,\n ],\n },\n joint_velocity: {\n joints: [0, 0, 0, 0, 0, 0],\n },\n flange_pose: {\n position: [\n -2.763015284002938, -630.2151479701106,\n 577.524509114342,\n ],\n orientation: {\n x: -1.704794877102097,\n y: -1.9722372952861567,\n z: -0.4852079204210754,\n },\n coordinate_system: \"\",\n },\n tcp_pose: {\n position: [\n -2.763015284002938, -630.2151479701106,\n 577.524509114342,\n ],\n orientation: {\n x: -1.704794877102097,\n y: -1.9722372952861567,\n z: -0.4852079204210754,\n },\n coordinate_system: \"\",\n tcp: \"Flange\",\n },\n velocity: {\n linear: {\n x: 0,\n y: 0,\n z: 0,\n },\n angular: {\n x: -0,\n y: 0,\n z: 0,\n },\n coordinate_system: \"\",\n },\n force: {\n force: {\n x: 0,\n y: 0,\n z: 0,\n },\n moment: {\n x: 0,\n y: 0,\n z: 0,\n },\n coordinate_system: \"\",\n },\n joint_limit_reached: {\n limit_reached: [\n false,\n false,\n false,\n false,\n false,\n false,\n ],\n },\n joint_current: {\n joints: [0, 0, 0, 0, 0, 0],\n },\n sequence_number: \"627897\",\n },\n ],\n sequence_number: \"627897\",\n },\n movement_state: \"MOVEMENT_STATE_MOVING\",\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 joints: [\n 1.1699999570846558, -1.5700000524520874, 1.3600000143051147,\n 1.0299999713897705, 1.2899999618530273, 1.2799999713897705,\n ],\n },\n joint_limit_reached: {\n limit_reached: [false, false, false, false, false, false],\n },\n standstill: false,\n flange_pose: {\n position: [1.3300010259703043, -409.2680714682808, 531.0203477065281],\n orientation: [\n 1.7564919306270736, -1.7542521568325058, 0.7326972590614671,\n ],\n },\n tcp_pose: {\n position: [1.3300010259703043, -409.2680714682808, 531.0203477065281],\n orientation: [\n 1.7564919306270736, -1.7542521568325058, 0.7326972590614671,\n ],\n },\n } satisfies MotionGroupState,\n}\n"],"mappings":"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","names":["axios","match","axios","_a","config"]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["cellId: string","opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n }","config"],"sources":["../../../src/lib/v2/NovaCellAPIClient.ts","../../../src/lib/v2/mock/MockNovaInstance.ts","../../../src/lib/v2/NovaClient.ts"],"sourcesContent":["/** biome-ignore-all lint/suspicious/noExplicitAny: legacy code */\n/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type {\n BaseAPI,\n Configuration as BaseConfiguration,\n} from \"@wandelbots/nova-api/v2\"\nimport {\n ApplicationApi,\n BUSInputsOutputsApi,\n CellApi,\n ControllerApi,\n ControllerInputsOutputsApi,\n JoggingApi,\n KinematicsApi,\n MotionGroupApi,\n MotionGroupModelsApi,\n StoreCollisionComponentsApi,\n StoreCollisionSetupsApi,\n StoreObjectApi,\n SystemApi,\n TrajectoryCachingApi,\n TrajectoryExecutionApi,\n TrajectoryPlanningApi,\n VirtualControllerApi,\n VirtualControllerBehaviorApi,\n VirtualControllerInputsOutputsApi,\n} from \"@wandelbots/nova-api/v2\"\nimport type { AxiosInstance } from \"axios\"\nimport axios from \"axios\"\n\ntype OmitFirstArg<F> = F extends (x: any, ...args: infer P) => infer R\n ? (...args: P) => R\n : never\n\ntype UnwrapAxiosResponseReturn<T> = T extends (...a: any) => any\n ? (\n ...a: Parameters<T>\n ) => Promise<Awaited<ReturnType<T>> extends { data: infer D } ? D : never>\n : never\n\nexport type WithCellId<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<OmitFirstArg<T[P]>>\n}\n\nexport type WithUnwrappedAxiosResponse<T> = {\n [P in keyof T]: UnwrapAxiosResponseReturn<T[P]>\n}\n\n/**\n * API client providing type-safe access to all the Nova API REST endpoints\n * associated with a specific cell id.\n */\nexport class NovaCellAPIClient {\n constructor(\n readonly cellId: string,\n readonly opts: BaseConfiguration & {\n axiosInstance?: AxiosInstance\n mock?: boolean\n },\n ) {}\n\n /**\n * Some TypeScript sorcery which alters the API class methods so you don't\n * have to pass the cell id to every single one, and de-encapsulates the\n * response data\n */\n private withCellId<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n ) {\n const apiClient = new ApiConstructor(\n {\n ...this.opts,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n },\n this.opts.basePath ?? \"\",\n this.opts.axiosInstance ?? axios.create(),\n ) as {\n [key: string | symbol]: any\n }\n\n for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient)!)) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key]\n apiClient[key] = (...args: any[]) => {\n return originalFunction\n .apply(apiClient, [this.cellId, ...args])\n .then((res: any) => res.data)\n }\n }\n }\n\n return apiClient as WithCellId<T>\n }\n\n /**\n * As withCellId, but only does the response unwrapping\n */\n private withUnwrappedResponsesOnly<T extends BaseAPI>(\n ApiConstructor: new (\n config: BaseConfiguration,\n basePath: string,\n axios: AxiosInstance,\n ) => T,\n ) {\n const apiClient = new ApiConstructor(\n {\n ...this.opts,\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n },\n this.opts.basePath ?? \"\",\n this.opts.axiosInstance ?? axios.create(),\n ) as {\n [key: string | symbol]: any\n }\n\n for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient)!)) {\n if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n const originalFunction = apiClient[key]\n apiClient[key] = (...args: any[]) => {\n return originalFunction\n .apply(apiClient, args)\n .then((res: any) => res.data)\n }\n }\n }\n\n return apiClient as WithUnwrappedAxiosResponse<T>\n }\n\n readonly system = this.withUnwrappedResponsesOnly(SystemApi)\n readonly cell = this.withUnwrappedResponsesOnly(CellApi)\n\n readonly motionGroup = this.withCellId(MotionGroupApi)\n readonly motionGroupModels = this.withCellId(MotionGroupModelsApi)\n\n readonly controller = this.withCellId(ControllerApi)\n\n readonly controllerIOs = this.withCellId(ControllerInputsOutputsApi)\n\n readonly trajectoryPlanning = this.withCellId(TrajectoryPlanningApi)\n readonly trajectoryExecution = this.withCellId(TrajectoryExecutionApi)\n readonly trajectoryCaching = this.withCellId(TrajectoryCachingApi)\n\n readonly application = this.withCellId(ApplicationApi)\n readonly applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi)\n\n readonly jogging = this.withCellId(JoggingApi)\n\n readonly kinematics = this.withCellId(KinematicsApi)\n\n readonly busInputsOutputs = this.withCellId(BUSInputsOutputsApi)\n\n readonly virtualController = this.withCellId(VirtualControllerApi)\n readonly virtualControllerBehavior = this.withCellId(\n VirtualControllerBehaviorApi,\n )\n readonly virtualControllerIOs = this.withCellId(\n VirtualControllerInputsOutputsApi,\n )\n\n readonly storeObject = this.withCellId(StoreObjectApi)\n readonly storeCollisionComponents = this.withCellId(\n StoreCollisionComponentsApi,\n )\n readonly storeCollisionSetups = this.withCellId(StoreCollisionSetupsApi)\n}\n","import type { MotionGroupState, RobotController } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosResponse, InternalAxiosRequestConfig } from \"axios\"\nimport { AxiosError } from \"axios\"\nimport * as pathToRegexp from \"path-to-regexp\"\nimport type { AutoReconnectingWebsocket } from \"../../AutoReconnectingWebsocket\"\n\n/**\n * EXPERIMENTAL\n * Ultra-simplified mock Nova server for testing stuff\n */\nexport class MockNovaInstance {\n readonly connections: AutoReconnectingWebsocket[] = []\n\n async handleAPIRequest(\n config: InternalAxiosRequestConfig,\n ): Promise<AxiosResponse> {\n const apiHandlers = [\n {\n method: \"GET\",\n path: \"/cells/:cellId/controllers\",\n handle() {\n return {\n controllers: [\n {\n controller: \"mock-ur5e\",\n model_name: \"UniversalRobots::Controller\",\n host: \"mock-ur5e\",\n allow_software_install_on_controller: true,\n motion_groups: [\n {\n motion_group: \"0@mock-ur5e\",\n name_from_controller: \"UR5e\",\n active: false,\n model_from_controller: \"UniversalRobots_UR5e\",\n },\n ],\n has_error: false,\n error_details: \"\",\n },\n ],\n }\n },\n },\n {\n method: \"GET\",\n path: \"/cells/:cellId/controllers/:controllerId\",\n handle() {\n return {\n configuration: {\n kind: \"VirtualController\",\n manufacturer: \"universalrobots\",\n type: \"universalrobots-ur5e\",\n },\n name: \"mock-ur5\",\n } satisfies RobotController\n },\n },\n {\n method: \"GET\",\n path: \"/cells/:cellId/motion-groups/:motionGroupId/specification\",\n handle() {\n return {\n dh_parameters: [\n {\n alpha: 1.5707963267948966,\n theta: 0,\n a: 0,\n d: 162.25,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0,\n theta: 0,\n a: -425,\n d: 0,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0,\n theta: 0,\n a: -392.2,\n d: 0,\n reverse_rotation_direction: false,\n },\n {\n alpha: 1.5707963267948966,\n theta: 0,\n a: 0,\n d: 133.3,\n reverse_rotation_direction: false,\n },\n {\n alpha: -1.5707963267948966,\n theta: 0,\n a: 0,\n d: 99.7,\n reverse_rotation_direction: false,\n },\n {\n alpha: 0,\n theta: 0,\n a: 0,\n d: 99.6,\n reverse_rotation_direction: false,\n },\n ],\n mechanical_joint_limits: [\n {\n joint: \"JOINTNAME_AXIS_1\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_2\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_3\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_4\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_5\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_6\",\n lower_limit: -6.335545063018799,\n upper_limit: 6.335545063018799,\n unlimited: false,\n },\n ],\n } // Mock motion group specification\n },\n },\n {\n method: \"GET\",\n path: \"/cells/:cellId/motion-groups/:motionGroupId/safety-setup\",\n handle() {\n return {\n safety_settings: [\n {\n safety_state: \"SAFETY_NORMAL\",\n settings: {\n joint_position_limits: [\n {\n joint: \"JOINTNAME_AXIS_1\",\n lower_limit: -2.96705961227417,\n upper_limit: 2.96705961227417,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_2\",\n lower_limit: -1.7453292608261108,\n upper_limit: 2.7925267219543457,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_3\",\n lower_limit: -3.3161256313323975,\n upper_limit: 0.40142571926116943,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_4\",\n lower_limit: -3.4906585216522217,\n upper_limit: 3.4906585216522217,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_5\",\n lower_limit: -2.4434609413146973,\n upper_limit: 2.4434609413146973,\n unlimited: false,\n },\n {\n joint: \"JOINTNAME_AXIS_6\",\n lower_limit: -4.71238899230957,\n upper_limit: 4.71238899230957,\n unlimited: false,\n },\n ],\n joint_velocity_limits: [\n {\n joint: \"JOINTNAME_AXIS_1\",\n limit: 3.1415927410125732,\n },\n {\n joint: \"JOINTNAME_AXIS_2\",\n limit: 3.1415927410125732,\n },\n {\n joint: \"JOINTNAME_AXIS_3\",\n limit: 3.4906585216522217,\n },\n {\n joint: \"JOINTNAME_AXIS_4\",\n limit: 6.108652591705322,\n },\n {\n joint: \"JOINTNAME_AXIS_5\",\n limit: 6.108652591705322,\n },\n {\n joint: \"JOINTNAME_AXIS_6\",\n limit: 6.981317043304443,\n },\n ],\n joint_acceleration_limits: [],\n joint_torque_limits: [],\n tcp_velocity_limit: 1800,\n },\n },\n ],\n safety_zones: [\n {\n id: 1,\n priority: 0,\n geometry: {\n compound: {\n child_geometries: [\n {\n convex_hull: {\n vertices: [\n { vertex: [-800, -1330, -1820] },\n { vertex: [1650, -1330, -1820] },\n { vertex: [1650, 1330, -1820] },\n { vertex: [-800, 1330, -1820] },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n {\n convex_hull: {\n vertices: [\n {\n vertex: [-800, -1330, -1820],\n },\n {\n vertex: [1650, -1330, -1820],\n },\n {\n vertex: [1650, -1330, 1500],\n },\n {\n vertex: [-800, -1330, 1500],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n {\n convex_hull: {\n vertices: [\n {\n vertex: [-800, -1330, -1820],\n },\n {\n vertex: [-800, 1330, -1820],\n },\n {\n vertex: [-800, 1330, 1500],\n },\n {\n vertex: [-800, -1330, 1500],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, 1330, 1500],\n },\n {\n vertex: [-800, 1330, 1500],\n },\n {\n vertex: [-800, -1330, 1500],\n },\n {\n vertex: [1650, -1330, 1500],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, 1330, 1500],\n },\n {\n vertex: [-800, 1330, 1500],\n },\n {\n vertex: [-800, 1330, -1820],\n },\n {\n vertex: [1650, 1330, -1820],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, 1330, 1500],\n },\n {\n vertex: [1650, -1330, 1500],\n },\n {\n vertex: [1650, -1330, -1820],\n },\n {\n vertex: [1650, 1330, -1820],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"box\",\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"Cell workzone\",\n },\n motion_group_uid: 1,\n },\n {\n id: 2,\n priority: 0,\n geometry: {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, 1330, -1850],\n },\n {\n vertex: [865, 1330, -1850],\n },\n {\n vertex: [865, -720, -1850],\n },\n {\n vertex: [1650, -720, -1850],\n },\n {\n vertex: [1650, 1330, -920],\n },\n {\n vertex: [865, 1330, -920],\n },\n {\n vertex: [865, -720, -920],\n },\n {\n vertex: [1650, -720, -920],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"Transport\",\n },\n motion_group_uid: 1,\n },\n {\n id: 3,\n priority: 0,\n geometry: {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, 1330, -600],\n },\n {\n vertex: [865, 1330, -600],\n },\n {\n vertex: [865, 430, -600],\n },\n {\n vertex: [1650, 430, -600],\n },\n {\n vertex: [1650, 1330, -1250],\n },\n {\n vertex: [865, 1330, -1250],\n },\n {\n vertex: [865, 430, -1250],\n },\n {\n vertex: [1650, 430, -1250],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"Tunel\",\n },\n motion_group_uid: 1,\n },\n {\n id: 4,\n priority: 0,\n geometry: {\n convex_hull: {\n vertices: [\n {\n vertex: [1650, -760, -440],\n },\n {\n vertex: [900, -760, -440],\n },\n {\n vertex: [900, -1330, -440],\n },\n {\n vertex: [1650, -1330, -440],\n },\n {\n vertex: [1650, -760, -1800],\n },\n {\n vertex: [900, -760, -1800],\n },\n {\n vertex: [900, -1330, -1800],\n },\n {\n vertex: [1650, -1330, -1800],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"Fanuc controller\",\n },\n motion_group_uid: 1,\n },\n {\n id: 6,\n priority: 0,\n geometry: {\n convex_hull: {\n vertices: [\n {\n vertex: [-200, -200, -1900],\n },\n {\n vertex: [200, -200, -1900],\n },\n {\n vertex: [200, 200, -1900],\n },\n {\n vertex: [-200, 200, -1900],\n },\n {\n vertex: [-200, -200, -350],\n },\n {\n vertex: [200, -200, -350],\n },\n {\n vertex: [200, 200, -350],\n },\n {\n vertex: [-200, 200, -350],\n },\n ],\n },\n init_pose: {\n position: [0, 0, 0],\n orientation: [0, 0, 0, 1],\n },\n id: \"Robot base\",\n },\n motion_group_uid: 1,\n },\n ],\n robot_model_geometries: [\n {\n link_index: 1,\n geometry: {\n sphere: {\n radius: 270,\n },\n init_pose: {\n position: [-70, -70, -50],\n orientation: [0, 0, 0, 1],\n },\n id: \"link1_sphere\",\n },\n },\n {\n link_index: 2,\n geometry: {\n capsule: {\n radius: 160,\n cylinder_height: 800,\n },\n init_pose: {\n position: [-450, 40, 170],\n orientation: [0, -Math.SQRT1_2, 0, Math.SQRT1_2],\n },\n id: \"link2_capsule\",\n },\n },\n {\n link_index: 3,\n geometry: {\n sphere: {\n radius: 270,\n },\n init_pose: {\n position: [-110, 10, -100],\n orientation: [0, 0, 0, 1],\n },\n id: \"link3_sphere\",\n },\n },\n {\n link_index: 4,\n geometry: {\n capsule: {\n radius: 110,\n cylinder_height: 600,\n },\n init_pose: {\n position: [0, 300, 40],\n orientation: [-Math.SQRT1_2, 0, 0, Math.SQRT1_2],\n },\n id: \"link4_capsule\",\n },\n },\n {\n link_index: 5,\n geometry: {\n sphere: {\n radius: 75,\n },\n init_pose: {\n position: [0, 0, -50],\n orientation: [0, 0, 0, 1],\n },\n id: \"link5_sphere\",\n },\n },\n ],\n tool_geometries: [],\n } // Mock safety setup\n },\n },\n {\n method: \"GET\",\n path: \"/cells/:cellId/coordinate-systems\",\n handle() {\n return {\n coordinatesystems: [\n {\n coordinate_system: \"\",\n name: \"world\",\n reference_uid: \"\",\n position: [0, 0, 0],\n rotation: {\n angles: [0, 0, 0],\n type: \"ROTATION_VECTOR\",\n },\n },\n ],\n } //satisfies CoordinateSystems\n },\n },\n {\n method: \"GET\",\n path: \"/cells/:cellId/motion-groups/:motionGroupId/tcps\",\n handle() {\n return {\n tcps: [\n {\n id: \"Flange\",\n readable_name: \"Default-Flange\",\n position: [0, 0, 0],\n rotation: {\n angles: [0, 0, 0, 0],\n type: \"ROTATION_VECTOR\",\n },\n },\n {\n id: \"complex-tcp-position\",\n readable_name: \"Complex TCP Position\",\n position: [-200, 300, 150],\n rotation: {\n angles: [\n -0.12139440409113832, -0.06356210998212003,\n -0.2023240068185639, 0,\n ],\n type: \"ROTATION_VECTOR\",\n },\n },\n ],\n }\n },\n },\n ]\n\n const method = config.method?.toUpperCase() || \"GET\"\n const path = `/cells${config.url?.split(\"/cells\")[1]?.split(\"?\")[0]}`\n\n for (const handler of apiHandlers) {\n const match = pathToRegexp.match(handler.path)(path || \"\")\n if (method === handler.method && match) {\n const json = handler.handle()\n return {\n status: 200,\n statusText: \"Success\",\n data: JSON.stringify(json),\n headers: {},\n config,\n request: {\n responseURL: config.url,\n },\n }\n }\n }\n\n throw new AxiosError(\n `No mock handler matched this request: ${method} ${path}`,\n \"404\",\n config,\n )\n\n // return {\n // status: 404,\n // statusText: \"Not Found\",\n // data: \"\",\n // headers: {},\n // config,\n // request: {\n // responseURL: config.url,\n // },\n // }\n }\n\n 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(\"/move-joint\")) {\n socket.dispatchEvent(\n new MessageEvent(\"message\", {\n data: JSON.stringify({\n result: {\n motion_group: \"0@ur\",\n state: {\n controller: \"ur\",\n operation_mode: \"OPERATION_MODE_AUTO\",\n safety_state: \"SAFETY_STATE_NORMAL\",\n timestamp: \"2024-09-18T12:48:26.096266444Z\",\n velocity_override: 100,\n motion_groups: [\n {\n motion_group: \"0@ur\",\n controller: \"ur\",\n joint_position: [\n 1.3492152690887451, -1.5659207105636597,\n 1.6653711795806885, -1.0991662740707397,\n -1.829018235206604, 1.264623761177063,\n ],\n joint_velocity: {\n joints: [0, 0, 0, 0, 0, 0],\n },\n flange_pose: {\n position: [\n 6.437331889439328, -628.4123774830913,\n 577.0569957147832,\n ],\n orientation: {\n x: -1.683333649797158,\n y: -1.9783363827298732,\n z: -0.4928031860165713,\n },\n coordinate_system: \"\",\n },\n tcp_pose: {\n position: [\n 6.437331889439328, -628.4123774830913,\n 577.0569957147832,\n ],\n orientation: {\n x: -1.683333649797158,\n y: -1.9783363827298732,\n z: -0.4928031860165713,\n },\n coordinate_system: \"\",\n tcp: \"Flange\",\n },\n velocity: {\n linear: {\n x: 0,\n y: 0,\n z: 0,\n },\n angular: {\n x: -0,\n y: 0,\n z: 0,\n },\n coordinate_system: \"\",\n },\n force: {\n force: {\n x: 0,\n y: 0,\n z: 0,\n },\n moment: {\n x: 0,\n y: 0,\n z: 0,\n },\n coordinate_system: \"\",\n },\n joint_limit_reached: {\n limit_reached: [\n false,\n false,\n false,\n false,\n false,\n false,\n ],\n },\n joint_current: {\n joints: [0, 0, 0, 0, 0, 0],\n },\n sequence_number: \"671259\",\n },\n ],\n sequence_number: \"671259\",\n },\n movement_state: \"MOVEMENT_STATE_MOVING\",\n },\n }),\n }),\n )\n }\n\n if (socket.url.includes(\"/move-tcp\")) {\n socket.dispatchEvent(\n new MessageEvent(\"message\", {\n data: JSON.stringify({\n result: {\n motion_group: \"0@ur\",\n state: {\n controller: \"ur\",\n operation_mode: \"OPERATION_MODE_AUTO\",\n safety_state: \"SAFETY_STATE_NORMAL\",\n timestamp: \"2024-09-18T12:43:12.188335774Z\",\n velocity_override: 100,\n motion_groups: [\n {\n motion_group: \"0@ur\",\n controller: \"ur\",\n joint_position: {\n joints: [\n 1.3352527618408203, -1.5659207105636597,\n 1.6653711795806885, -1.110615611076355,\n -1.829018235206604, 1.264623761177063,\n ],\n },\n joint_velocity: {\n joints: [0, 0, 0, 0, 0, 0],\n },\n flange_pose: {\n position: [\n -2.763015284002938, -630.2151479701106,\n 577.524509114342,\n ],\n orientation: {\n x: -1.704794877102097,\n y: -1.9722372952861567,\n z: -0.4852079204210754,\n },\n coordinate_system: \"\",\n },\n tcp_pose: {\n position: [\n -2.763015284002938, -630.2151479701106,\n 577.524509114342,\n ],\n orientation: {\n x: -1.704794877102097,\n y: -1.9722372952861567,\n z: -0.4852079204210754,\n },\n coordinate_system: \"\",\n tcp: \"Flange\",\n },\n velocity: {\n linear: {\n x: 0,\n y: 0,\n z: 0,\n },\n angular: {\n x: -0,\n y: 0,\n z: 0,\n },\n coordinate_system: \"\",\n },\n force: {\n force: {\n x: 0,\n y: 0,\n z: 0,\n },\n moment: {\n x: 0,\n y: 0,\n z: 0,\n },\n coordinate_system: \"\",\n },\n joint_limit_reached: {\n limit_reached: [\n false,\n false,\n false,\n false,\n false,\n false,\n ],\n },\n joint_current: {\n joints: [0, 0, 0, 0, 0, 0],\n },\n sequence_number: \"627897\",\n },\n ],\n sequence_number: \"627897\",\n },\n movement_state: \"MOVEMENT_STATE_MOVING\",\n },\n }),\n }),\n )\n }\n }, 10)\n }\n\n handleWebsocketMessage(socket: AutoReconnectingWebsocket, message: string) {\n console.log(`Received message on ${socket.url}`, message)\n }\n}\n\nconst defaultMotionState = {\n result: {\n motion_group: \"0@universalrobots-ur5e\",\n controller: \"universalrobots-ur5e\",\n timestamp: new Date().toISOString(),\n sequence_number: 1,\n joint_position: [\n 1.1699999570846558, -1.5700000524520874, 1.3600000143051147,\n 1.0299999713897705, 1.2899999618530273, 1.2799999713897705,\n ],\n joint_limit_reached: {\n limit_reached: [false, false, false, false, false, false],\n },\n standstill: false,\n flange_pose: {\n position: [1.3300010259703043, -409.2680714682808, 531.0203477065281],\n orientation: [\n 1.7564919306270736, -1.7542521568325058, 0.7326972590614671,\n ],\n },\n tcp_pose: {\n position: [1.3300010259703043, -409.2680714682808, 531.0203477065281],\n orientation: [\n 1.7564919306270736, -1.7542521568325058, 0.7326972590614671,\n ],\n },\n } satisfies MotionGroupState,\n}\n","/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type { Configuration as BaseConfiguration } from \"@wandelbots/nova-api/v2\"\nimport type { AxiosRequestConfig } from \"axios\"\nimport axios, { isAxiosError } from \"axios\"\nimport urlJoin from \"url-join\"\nimport { loginWithAuth0 } from \"../../LoginWithAuth0\"\nimport { AutoReconnectingWebsocket } from \"../AutoReconnectingWebsocket\"\nimport { availableStorage } from \"../availableStorage\"\nimport { MockNovaInstance } from \"./mock/MockNovaInstance\"\nimport { NovaCellAPIClient } from \"./NovaCellAPIClient\"\n\nexport type NovaClientConfig = {\n /**\n * Url of the deployed Nova instance to connect to\n * e.g. https://saeattii.instance.wandelbots.io\n */\n instanceUrl: string | \"https://mock.example.com\"\n\n /**\n * Identifier of the cell on the Nova instance to connect this client to.\n * If omitted, the default identifier \"cell\" is used.\n **/\n cellId?: string\n\n /**\n * Username for basic auth to the Nova instance.\n * @deprecated use accessToken instead\n */\n username?: string\n\n /**\n * Password for basic auth to the Nova instance.\n * @deprecated use accessToken instead\n */\n password?: string\n\n /**\n * Access token for Bearer authentication.\n */\n accessToken?: string\n} & Omit<BaseConfiguration, \"isJsonMime\" | \"basePath\">\n\ntype NovaClientConfigWithDefaults = NovaClientConfig & { cellId: string }\n\n/**\n * EXPERIMENTAL\n *\n * This client provides a starting point to migrate NOVA api v2.\n * As v2 is still in development, this client has to be considered unstable\n *\n * Client for connecting to a Nova instance and controlling robots.\n */\nexport class NovaClient {\n readonly api: NovaCellAPIClient\n readonly config: NovaClientConfigWithDefaults\n readonly mock?: MockNovaInstance\n authPromise: Promise<string | null> | null = null\n accessToken: string | null = null\n\n constructor(config: NovaClientConfig) {\n console.warn(\"Using experimental NOVA v2 client\")\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\n // Set up Axios instance with interceptor for token fetching\n const axiosInstance = axios.create({\n baseURL: urlJoin(this.config.instanceUrl, \"/api/v2\"),\n // TODO - backend needs to set proper CORS headers for this\n headers:\n typeof window !== \"undefined\" &&\n window.location.origin.includes(\"localhost\")\n ? {}\n : {\n // Identify the client to the backend for logging purposes\n \"X-Wandelbots-Client\": \"Wandelbots-Nova-JS-SDK\",\n },\n })\n\n axiosInstance.interceptors.request.use(async (request) => {\n if (!request.headers.Authorization) {\n if (this.accessToken) {\n request.headers.Authorization = `Bearer ${this.accessToken}`\n } else if (this.config.username && this.config.password) {\n request.headers.Authorization = `Basic ${btoa(`${config.username}:${config.password}`)}`\n }\n }\n return request\n })\n\n if (typeof window !== \"undefined\") {\n axiosInstance.interceptors.response.use(\n (r) => r,\n async (error) => {\n if (isAxiosError(error)) {\n if (error.response?.status === 401) {\n // If we hit a 401, attempt to login the user and retry with\n // a new access token\n try {\n await this.renewAuthentication()\n\n if (error.config) {\n if (this.accessToken) {\n error.config.headers.Authorization = `Bearer ${this.accessToken}`\n } else {\n delete error.config.headers.Authorization\n }\n return axiosInstance.request(error.config)\n }\n } catch (err) {\n return Promise.reject(err)\n }\n } else if (error.response?.status === 503) {\n // Check if the server as a whole is down\n const res = await fetch(window.location.href)\n if (res.status === 503) {\n // Go to 503 page\n window.location.reload()\n }\n }\n }\n\n return Promise.reject(error)\n },\n )\n }\n\n this.api = new NovaCellAPIClient(cellId, {\n ...config,\n basePath: urlJoin(this.config.instanceUrl, \"/api/v1\"),\n isJsonMime: (mime: string) => {\n return mime === \"application/json\"\n },\n baseOptions: {\n ...(this.mock\n ? ({\n adapter: (config) => {\n return this.mock!.handleAPIRequest(config)\n },\n } satisfies AxiosRequestConfig)\n : {}),\n ...config.baseOptions,\n },\n axiosInstance,\n })\n }\n\n async renewAuthentication(): Promise<void> {\n if (this.authPromise) {\n // Don't double up\n return\n }\n\n this.authPromise = loginWithAuth0(this.config.instanceUrl)\n try {\n this.accessToken = await this.authPromise\n if (this.accessToken) {\n // Cache access token so we don't need to log in every refresh\n availableStorage.setString(\"wbjs.access_token\", this.accessToken)\n } else {\n availableStorage.delete(\"wbjs.access_token\")\n }\n } finally {\n this.authPromise = null\n }\n }\n\n makeWebsocketURL(path: string): string {\n const url = new URL(\n urlJoin(\n this.config.instanceUrl,\n `/api/v1/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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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wandelbots/nova-js",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "v3.2.0-pr.ci-simplify-build.137.87eeb8d",
|
|
5
5
|
"description": "Official JS client for the Wandelbots API",
|
|
6
6
|
"sideEffects": false,
|
|
7
|
-
"packageManager": "pnpm@10.15.0",
|
|
8
7
|
"exports": {
|
|
9
8
|
".": {
|
|
10
9
|
"import": "./dist/index.js",
|
|
@@ -25,15 +24,6 @@
|
|
|
25
24
|
"dist",
|
|
26
25
|
"src"
|
|
27
26
|
],
|
|
28
|
-
"scripts": {
|
|
29
|
-
"dev:pack": "nodemon -w \".\" -e ts -i *.tgz -i dist -x \"nr build && npm pack\"",
|
|
30
|
-
"tsc": "tsc --pretty --noEmit",
|
|
31
|
-
"lint": "biome check --error-on-warnings .",
|
|
32
|
-
"format": "biome format . --write",
|
|
33
|
-
"knip": "knip",
|
|
34
|
-
"build": "tsup src/index.ts src/lib/v1/index.ts src/lib/v2/index.ts --format esm,cjs --clean --sourcemap --env.NOVA_AUTH0_DEV_CLIENT_ID=$NOVA_AUTH0_DEV_CLIENT_ID --env.NOVA_AUTH0_STG_CLIENT_ID=$NOVA_AUTH0_STG_CLIENT_ID --env.NOVA_AUTH0_PROD_CLIENT_ID=$NOVA_AUTH0_PROD_CLIENT_ID && tsc --declaration --emitDeclarationOnly",
|
|
35
|
-
"test": "nr build && vitest run"
|
|
36
|
-
},
|
|
37
27
|
"repository": {
|
|
38
28
|
"type": "git",
|
|
39
29
|
"url": "git+https://github.com/wandelbotsgmbh/nova-js.git"
|
|
@@ -46,12 +36,11 @@
|
|
|
46
36
|
"author": "Wandelbots",
|
|
47
37
|
"license": "Apache-2.0",
|
|
48
38
|
"devDependencies": {
|
|
49
|
-
"@antfu/ni": "^25.0.0",
|
|
50
39
|
"@biomejs/biome": "^2.2.2",
|
|
51
40
|
"knip": "^5.63.1",
|
|
52
41
|
"nodemon": "^3.1.9",
|
|
53
42
|
"semantic-release": "^24.2.7",
|
|
54
|
-
"
|
|
43
|
+
"tsdown": "^0.15.5",
|
|
55
44
|
"typescript": "^5.8.2",
|
|
56
45
|
"vitest": "^3.2.4",
|
|
57
46
|
"ws": "^8.18.1"
|
|
@@ -59,12 +48,21 @@
|
|
|
59
48
|
"dependencies": {
|
|
60
49
|
"@auth0/auth0-spa-js": "^2.1.3",
|
|
61
50
|
"@types/three": "^0.174.0",
|
|
62
|
-
"@wandelbots/nova-api": "^25.
|
|
63
|
-
"axios": "^1.
|
|
51
|
+
"@wandelbots/nova-api": "^25.9.0-dev.13",
|
|
52
|
+
"axios": "^1.12.2",
|
|
64
53
|
"mobx": "^6.13.6",
|
|
65
54
|
"path-to-regexp": "^8.2.0",
|
|
66
55
|
"reconnecting-websocket": "^4.4.0",
|
|
67
56
|
"three": "^0.174.0",
|
|
68
57
|
"url-join": "^5.0.0"
|
|
58
|
+
},
|
|
59
|
+
"scripts": {
|
|
60
|
+
"dev:pack": "nodemon -w \".\" -e ts -i *.tgz -i dist -x \"pnpm run build && pnpm pack\"",
|
|
61
|
+
"tsc": "tsc --pretty --noEmit",
|
|
62
|
+
"lint": "biome check --error-on-warnings .",
|
|
63
|
+
"format": "biome format . --write",
|
|
64
|
+
"knip": "knip",
|
|
65
|
+
"build": "tsdown src/index.ts src/lib/v1/index.ts src/lib/v2/index.ts --format esm,cjs --clean --sourcemap",
|
|
66
|
+
"test": "pnpm run build && vitest run"
|
|
69
67
|
}
|
|
70
|
-
}
|
|
68
|
+
}
|
package/src/LoginWithAuth0.ts
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
const DOMAIN_SUFFIX = "wandelbots.io"
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Mapping of stages to Auth0 configurations.
|
|
5
|
+
* The client ids are public identifiers for a specific auth0 application
|
|
6
|
+
* and are safe to include in client-side code.
|
|
7
|
+
* https://auth0.com/docs/get-started/applications/application-settings
|
|
8
|
+
*/
|
|
9
9
|
const auth0ConfigMap = {
|
|
10
10
|
dev: {
|
|
11
11
|
domain: `https://auth.portal.dev.${DOMAIN_SUFFIX}`,
|
|
12
|
-
clientId:
|
|
12
|
+
clientId: "fLbJD0RLp5r2Dpucm5j8BjwMR6Hunfha",
|
|
13
13
|
},
|
|
14
14
|
stg: {
|
|
15
15
|
domain: `https://auth.portal.stg.${DOMAIN_SUFFIX}`,
|
|
16
|
-
clientId:
|
|
16
|
+
clientId: "joVDeD9e786WzFNSGCqoVq7HNkWt5j6s",
|
|
17
17
|
},
|
|
18
18
|
prod: {
|
|
19
19
|
domain: `https://auth.portal.${DOMAIN_SUFFIX}`,
|
|
20
|
-
clientId:
|
|
20
|
+
clientId: "J7WJUi38xVQdJAEBNRT9Xw1b0fXDb4J2",
|
|
21
21
|
},
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */
|
|
2
2
|
/** biome-ignore-all lint/suspicious/noExplicitAny: legacy code */
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
BaseAPI,
|
|
5
|
+
Configuration as BaseConfiguration,
|
|
6
|
+
} from "@wandelbots/nova-api/v1"
|
|
4
7
|
import {
|
|
5
8
|
ApplicationApi,
|
|
6
9
|
CellApi,
|
|
@@ -28,7 +31,6 @@ import {
|
|
|
28
31
|
VirtualRobotModeApi,
|
|
29
32
|
VirtualRobotSetupApi,
|
|
30
33
|
} from "@wandelbots/nova-api/v1"
|
|
31
|
-
import type { BaseAPI } from "@wandelbots/nova-api/v1/base"
|
|
32
34
|
import type { AxiosInstance } from "axios"
|
|
33
35
|
import axios from "axios"
|
|
34
36
|
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/** biome-ignore-all lint/suspicious/noExplicitAny: legacy code */
|
|
2
2
|
/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
BaseAPI,
|
|
5
|
+
Configuration as BaseConfiguration,
|
|
6
|
+
} from "@wandelbots/nova-api/v2"
|
|
4
7
|
import {
|
|
5
8
|
ApplicationApi,
|
|
6
9
|
BUSInputsOutputsApi,
|
|
@@ -22,7 +25,6 @@ import {
|
|
|
22
25
|
VirtualControllerBehaviorApi,
|
|
23
26
|
VirtualControllerInputsOutputsApi,
|
|
24
27
|
} from "@wandelbots/nova-api/v2"
|
|
25
|
-
import type { BaseAPI } from "@wandelbots/nova-api/v2/base"
|
|
26
28
|
import type { AxiosInstance } from "axios"
|
|
27
29
|
import axios from "axios"
|
|
28
30
|
|
|
@@ -728,13 +728,11 @@ export class MockNovaInstance {
|
|
|
728
728
|
{
|
|
729
729
|
motion_group: "0@ur",
|
|
730
730
|
controller: "ur",
|
|
731
|
-
joint_position:
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
],
|
|
737
|
-
},
|
|
731
|
+
joint_position: [
|
|
732
|
+
1.3492152690887451, -1.5659207105636597,
|
|
733
|
+
1.6653711795806885, -1.0991662740707397,
|
|
734
|
+
-1.829018235206604, 1.264623761177063,
|
|
735
|
+
],
|
|
738
736
|
joint_velocity: {
|
|
739
737
|
joints: [0, 0, 0, 0, 0, 0],
|
|
740
738
|
},
|
|
@@ -929,12 +927,10 @@ const defaultMotionState = {
|
|
|
929
927
|
controller: "universalrobots-ur5e",
|
|
930
928
|
timestamp: new Date().toISOString(),
|
|
931
929
|
sequence_number: 1,
|
|
932
|
-
joint_position:
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
],
|
|
937
|
-
},
|
|
930
|
+
joint_position: [
|
|
931
|
+
1.1699999570846558, -1.5700000524520874, 1.3600000143051147,
|
|
932
|
+
1.0299999713897705, 1.2899999618530273, 1.2799999713897705,
|
|
933
|
+
],
|
|
938
934
|
joint_limit_reached: {
|
|
939
935
|
limit_reached: [false, false, false, false, false, false],
|
|
940
936
|
},
|
package/dist/LoginWithAuth0.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Initializes Auth0 login process using redirect if necessary and retrieves an access token.
|
|
3
|
-
* Returns null when an access token should not be needed to authenticate (i.e. cookie auth
|
|
4
|
-
* when deployed on the instance domain)
|
|
5
|
-
*/
|
|
6
|
-
export declare const loginWithAuth0: (instanceUrl: string) => Promise<string | null>;
|
|
7
|
-
//# sourceMappingURL=LoginWithAuth0.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LoginWithAuth0.d.ts","sourceRoot":"","sources":["../src/LoginWithAuth0.ts"],"names":[],"mappings":"AAiCA;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,aAAa,MAAM,KAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAsDvB,CAAA"}
|
package/dist/chunk-B2C22PTK.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
// src/lib/converters.ts
|
|
2
|
-
function tryParseJson(json) {
|
|
3
|
-
try {
|
|
4
|
-
return JSON.parse(json);
|
|
5
|
-
} catch (e) {
|
|
6
|
-
return void 0;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
function tryStringifyJson(json) {
|
|
10
|
-
try {
|
|
11
|
-
return JSON.stringify(json);
|
|
12
|
-
} catch (e) {
|
|
13
|
-
return void 0;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
function makeUrlQueryString(obj) {
|
|
17
|
-
const str = new URLSearchParams(obj).toString();
|
|
18
|
-
return str ? `?${str}` : "";
|
|
19
|
-
}
|
|
20
|
-
function radiansToDegrees(radians) {
|
|
21
|
-
return radians * (180 / Math.PI);
|
|
22
|
-
}
|
|
23
|
-
function degreesToRadians(degrees) {
|
|
24
|
-
return degrees * (Math.PI / 180);
|
|
25
|
-
}
|
|
26
|
-
function poseToWandelscriptString(pose) {
|
|
27
|
-
var _a, _b, _c, _d, _e, _f;
|
|
28
|
-
const position = [pose.position.x, pose.position.y, pose.position.z];
|
|
29
|
-
const orientation = [
|
|
30
|
-
(_b = (_a = pose.orientation) == null ? void 0 : _a.x) != null ? _b : 0,
|
|
31
|
-
(_d = (_c = pose.orientation) == null ? void 0 : _c.y) != null ? _d : 0,
|
|
32
|
-
(_f = (_e = pose.orientation) == null ? void 0 : _e.z) != null ? _f : 0
|
|
33
|
-
];
|
|
34
|
-
const positionValues = position.map((v) => v.toFixed(1));
|
|
35
|
-
const rotationValues = orientation.map((v) => v.toFixed(4));
|
|
36
|
-
return `(${positionValues.concat(rotationValues).join(", ")})`;
|
|
37
|
-
}
|
|
38
|
-
function isSameCoordinateSystem(firstCoordSystem, secondCoordSystem) {
|
|
39
|
-
if (!firstCoordSystem) firstCoordSystem = "world";
|
|
40
|
-
if (!secondCoordSystem) secondCoordSystem = "world";
|
|
41
|
-
return firstCoordSystem === secondCoordSystem;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export {
|
|
45
|
-
tryParseJson,
|
|
46
|
-
tryStringifyJson,
|
|
47
|
-
makeUrlQueryString,
|
|
48
|
-
radiansToDegrees,
|
|
49
|
-
degreesToRadians,
|
|
50
|
-
poseToWandelscriptString,
|
|
51
|
-
isSameCoordinateSystem
|
|
52
|
-
};
|
|
53
|
-
//# sourceMappingURL=chunk-B2C22PTK.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/converters.ts"],"sourcesContent":["import type { Pose } from \"@wandelbots/nova-api/v1\"\n\n/** Try to parse something as JSON; return undefined if we can't */\n// biome-ignore lint/suspicious/noExplicitAny: it's json\nexport function tryParseJson(json: unknown): any {\n try {\n return JSON.parse(json as string)\n } catch {\n return undefined\n }\n}\n\n/** Try to turn something into JSON; return undefined if we can't */\nexport function tryStringifyJson(json: unknown): string | undefined {\n try {\n return JSON.stringify(json)\n } catch {\n return undefined\n }\n}\n\n/**\n * Converts object parameters to query string.\n * e.g. { a: \"1\", b: \"2\" } => \"?a=1&b=2\"\n * {} => \"\"\n */\nexport function makeUrlQueryString(obj: Record<string, string>): string {\n const str = new URLSearchParams(obj).toString()\n return str ? `?${str}` : \"\"\n}\n\n/** Convert radians to degrees */\nexport function radiansToDegrees(radians: number): number {\n return radians * (180 / Math.PI)\n}\n\n/** Convert degrees to radians */\nexport function degreesToRadians(degrees: number): number {\n return degrees * (Math.PI / 180)\n}\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 = [pose.position.x, pose.position.y, pose.position.z]\n const orientation = [\n pose.orientation?.x ?? 0,\n pose.orientation?.y ?? 0,\n pose.orientation?.z ?? 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\n/**\n * Check for coordinate system id equivalence, accounting for the \"world\" default\n * on empty/undefined values.\n */\nexport function isSameCoordinateSystem(\n firstCoordSystem: string | undefined,\n secondCoordSystem: string | undefined,\n) {\n if (!firstCoordSystem) firstCoordSystem = \"world\"\n if (!secondCoordSystem) secondCoordSystem = \"world\"\n\n return firstCoordSystem === secondCoordSystem\n}\n"],"mappings":";AAIO,SAAS,aAAa,MAAoB;AAC/C,MAAI;AACF,WAAO,KAAK,MAAM,IAAc;AAAA,EAClC,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,iBAAiB,MAAmC;AAClE,MAAI;AACF,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAOO,SAAS,mBAAmB,KAAqC;AACtE,QAAM,MAAM,IAAI,gBAAgB,GAAG,EAAE,SAAS;AAC9C,SAAO,MAAM,IAAI,GAAG,KAAK;AAC3B;AAGO,SAAS,iBAAiB,SAAyB;AACxD,SAAO,WAAW,MAAM,KAAK;AAC/B;AAGO,SAAS,iBAAiB,SAAyB;AACxD,SAAO,WAAW,KAAK,KAAK;AAC9B;AAMO,SAAS,yBACd,MACA;AA/CF;AAgDE,QAAM,WAAW,CAAC,KAAK,SAAS,GAAG,KAAK,SAAS,GAAG,KAAK,SAAS,CAAC;AACnE,QAAM,cAAc;AAAA,KAClB,gBAAK,gBAAL,mBAAkB,MAAlB,YAAuB;AAAA,KACvB,gBAAK,gBAAL,mBAAkB,MAAlB,YAAuB;AAAA,KACvB,gBAAK,gBAAL,mBAAkB,MAAlB,YAAuB;AAAA,EACzB;AAEA,QAAM,iBAAiB,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEvD,QAAM,iBAAiB,YAAY,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE1D,SAAO,IAAI,eAAe,OAAO,cAAc,EAAE,KAAK,IAAI,CAAC;AAC7D;AAMO,SAAS,uBACd,kBACA,mBACA;AACA,MAAI,CAAC,iBAAkB,oBAAmB;AAC1C,MAAI,CAAC,kBAAmB,qBAAoB;AAE5C,SAAO,qBAAqB;AAC9B;","names":[]}
|