@wandelbots/nova-js 3.13.0 → 4.0.0-pr.309.02b99fd

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/{AutoReconnectingWebsocket-1K2J1NA4.d.cts → AutoReconnectingWebsocket-BSt-vnzX.d.mts} +4 -16
  2. package/dist/AutoReconnectingWebsocket-BSt-vnzX.d.mts.map +1 -0
  3. package/dist/{context-ffr5Q2dc.mjs → LoginWithAuth0-D92HnzHq.mjs} +3 -13
  4. package/dist/LoginWithAuth0-D92HnzHq.mjs.map +1 -0
  5. package/dist/{Nova--8gozkLR.d.mts → Nova-C8nDNSCa.d.mts} +2 -2
  6. package/dist/{Nova--8gozkLR.d.mts.map → Nova-C8nDNSCa.d.mts.map} +1 -1
  7. package/dist/experimental/nats/index.d.mts +1 -1
  8. package/dist/index.d.mts +2 -7
  9. package/dist/index.d.mts.map +1 -1
  10. package/dist/index.mjs +2 -3
  11. package/dist/v2/index.d.mts +2 -130
  12. package/dist/v2/index.mjs +4 -231
  13. package/dist/v2/index.mjs.map +1 -1
  14. package/package.json +13 -17
  15. package/src/index.ts +0 -2
  16. package/src/lib/AutoReconnectingWebsocket.ts +3 -4
  17. package/src/lib/LoginWithAuth0.ts +1 -1
  18. package/src/lib/context.ts +1 -1
  19. package/src/lib/errorHandling.ts +0 -7
  20. package/src/v2/index.ts +0 -3
  21. package/dist/AutoReconnectingWebsocket-1K2J1NA4.d.cts.map +0 -1
  22. package/dist/AutoReconnectingWebsocket-1K2J1NA4.d.mts +0 -69
  23. package/dist/AutoReconnectingWebsocket-1K2J1NA4.d.mts.map +0 -1
  24. package/dist/Nova-B1o5iTQ6.d.cts +0 -85
  25. package/dist/Nova-B1o5iTQ6.d.cts.map +0 -1
  26. package/dist/context-BZELA2eh.cjs +0 -348
  27. package/dist/context-BZELA2eh.cjs.map +0 -1
  28. package/dist/context-ffr5Q2dc.mjs.map +0 -1
  29. package/dist/converters-EYS27XJE.cjs +0 -146
  30. package/dist/converters-EYS27XJE.cjs.map +0 -1
  31. package/dist/experimental/nats/index.cjs +0 -158
  32. package/dist/experimental/nats/index.cjs.map +0 -1
  33. package/dist/experimental/nats/index.d.cts +0 -3235
  34. package/dist/experimental/nats/index.d.cts.map +0 -1
  35. package/dist/index.cjs +0 -24
  36. package/dist/index.d.cts +0 -110
  37. package/dist/index.d.cts.map +0 -1
  38. package/dist/v1/index.cjs +0 -201
  39. package/dist/v1/index.cjs.map +0 -1
  40. package/dist/v1/index.d.cts +0 -67
  41. package/dist/v1/index.d.cts.map +0 -1
  42. package/dist/v1/index.d.mts +0 -67
  43. package/dist/v1/index.d.mts.map +0 -1
  44. package/dist/v1/index.mjs +0 -184
  45. package/dist/v1/index.mjs.map +0 -1
  46. package/dist/v2/index.cjs +0 -1038
  47. package/dist/v2/index.cjs.map +0 -1
  48. package/dist/v2/index.d.cts +0 -131
  49. package/dist/v2/index.d.cts.map +0 -1
  50. package/dist/v2/index.d.mts.map +0 -1
  51. package/dist/wandelscriptUtils-CpUXdLVc.mjs +0 -2062
  52. package/dist/wandelscriptUtils-CpUXdLVc.mjs.map +0 -1
  53. package/dist/wandelscriptUtils-DY3WsiuB.d.cts +0 -356
  54. package/dist/wandelscriptUtils-DY3WsiuB.d.cts.map +0 -1
  55. package/dist/wandelscriptUtils-DcY1aLWu.cjs +0 -2099
  56. package/dist/wandelscriptUtils-DcY1aLWu.cjs.map +0 -1
  57. package/dist/wandelscriptUtils-YHTxn_p9.d.mts +0 -356
  58. package/dist/wandelscriptUtils-YHTxn_p9.d.mts.map +0 -1
  59. package/src/lib/deprecated/v1/ConnectedMotionGroup.ts +0 -449
  60. package/src/lib/deprecated/v1/JoggerConnection.ts +0 -491
  61. package/src/lib/deprecated/v1/MotionStreamConnection.ts +0 -215
  62. package/src/lib/deprecated/v1/NovaCellAPIClient.ts +0 -208
  63. package/src/lib/deprecated/v1/NovaClient.ts +0 -260
  64. package/src/lib/deprecated/v1/ProgramStateConnection.ts +0 -277
  65. package/src/lib/deprecated/v1/getLatestTrajectories.ts +0 -37
  66. package/src/lib/deprecated/v1/mock/MockNovaInstance.ts +0 -1303
  67. package/src/lib/deprecated/v1/motionStateUpdate.ts +0 -58
  68. package/src/lib/deprecated/v1/wandelscriptUtils.ts +0 -23
  69. package/src/lib/deprecated/v2/NovaCellAPIClient.ts +0 -215
  70. package/src/lib/deprecated/v2/NovaClient.ts +0 -218
  71. package/src/lib/deprecated/v2/wandelscriptUtils.ts +0 -28
  72. package/src/v1/index.ts +0 -14
@@ -1,277 +0,0 @@
1
- /** biome-ignore-all lint/style/noNonNullAssertion: legacy code */
2
- import type { CollectionValue } from "@wandelbots/nova-api/v1"
3
- import { AxiosError } from "axios"
4
- import { makeAutoObservable, runInAction } from "mobx"
5
- import type { AutoReconnectingWebsocket } from "../../AutoReconnectingWebsocket.ts"
6
- import { tryParseJson } from "../../converters.ts"
7
- import type { MotionStreamConnection } from "./MotionStreamConnection.ts"
8
- import type { NovaClient } from "./NovaClient.ts"
9
-
10
- /** @deprecated */
11
- export type ProgramRunnerLogEntry = {
12
- timestamp: number
13
- message: string
14
- level?: "warn" | "error"
15
- }
16
-
17
- /** @deprecated */
18
- export enum ProgramState {
19
- NotStarted = "not started",
20
- Running = "running",
21
- Stopped = "stopped",
22
- Failed = "failed",
23
- Completed = "completed",
24
- }
25
-
26
- /** @deprecated */
27
- export type CurrentProgram = {
28
- id?: string
29
- wandelscript?: string
30
- state?: ProgramState
31
- }
32
-
33
- type ProgramStateMessage = {
34
- type: string
35
- runner: {
36
- id: string
37
- state: ProgramState
38
- start_time?: number | null
39
- execution_time?: number | null
40
- }
41
- }
42
-
43
- /**
44
- * Interface for running Wandelscript programs on the Nova instance and
45
- * tracking their progress and output
46
- * @deprecated
47
- */
48
- export class ProgramStateConnection {
49
- currentProgram: CurrentProgram = {}
50
- logs: ProgramRunnerLogEntry[] = []
51
-
52
- executionState = "idle" as "idle" | "starting" | "executing" | "stopping"
53
- currentlyExecutingProgramRunnerId = null as string | null
54
-
55
- programStateSocket: AutoReconnectingWebsocket
56
-
57
- readonly nova: NovaClient
58
-
59
- constructor(nova: NovaClient) {
60
- this.nova = nova
61
- makeAutoObservable(this, {}, { autoBind: true })
62
-
63
- this.programStateSocket = nova.openReconnectingWebsocket(`/programs/state`)
64
-
65
- this.programStateSocket.addEventListener("message", (ev) => {
66
- const msg = tryParseJson(ev.data)
67
-
68
- if (!msg) {
69
- console.error("Failed to parse program state message", ev.data)
70
- return
71
- }
72
- if (msg.type === "update") {
73
- this.handleProgramStateMessage(msg)
74
- }
75
- })
76
- }
77
-
78
- /** Handle a program state update from the backend */
79
- async handleProgramStateMessage(msg: ProgramStateMessage) {
80
- const { runner } = msg
81
-
82
- // Ignoring other programs for now
83
- // TODO - show if execution state is busy from another source
84
- if (runner.id !== this.currentlyExecutingProgramRunnerId) return
85
-
86
- if (runner.state === ProgramState.Failed) {
87
- try {
88
- const runnerState = await this.nova.api.program.getProgramRunner(
89
- runner.id,
90
- )
91
-
92
- // TODO - wandelengine should send print statements in real time over
93
- // websocket as well, rather than at the end
94
- const stdout = runnerState.stdout
95
- if (stdout) {
96
- this.log(stdout)
97
- }
98
- this.logError(
99
- `Program runner ${runner.id} failed with error: ${runnerState.error}\n${runnerState.traceback}`,
100
- )
101
- } catch (err) {
102
- this.logError(
103
- `Failed to retrieve results for program ${runner.id}: ${err}`,
104
- )
105
- }
106
-
107
- this.currentProgram.state = ProgramState.Failed
108
-
109
- this.gotoIdleState()
110
- } else if (runner.state === ProgramState.Stopped) {
111
- try {
112
- const runnerState = await this.nova.api.program.getProgramRunner(
113
- runner.id,
114
- )
115
-
116
- const stdout = runnerState.stdout
117
- if (stdout) {
118
- this.log(stdout)
119
- }
120
-
121
- this.currentProgram.state = ProgramState.Stopped
122
- this.log(`Program runner ${runner.id} stopped`)
123
- } catch (err) {
124
- this.logError(
125
- `Failed to retrieve results for program ${runner.id}: ${err}`,
126
- )
127
- }
128
-
129
- this.gotoIdleState()
130
- } else if (runner.state === ProgramState.Completed) {
131
- try {
132
- const runnerState = await this.nova.api.program.getProgramRunner(
133
- runner.id,
134
- )
135
-
136
- const stdout = runnerState.stdout
137
- if (stdout) {
138
- this.log(stdout)
139
- }
140
- this.log(
141
- `Program runner ${runner.id} finished successfully in ${runner.execution_time?.toFixed(2)} seconds`,
142
- )
143
-
144
- this.currentProgram.state = ProgramState.Completed
145
- } catch (err) {
146
- this.logError(
147
- `Failed to retrieve results for program ${runner.id}: ${err}`,
148
- )
149
- }
150
-
151
- this.gotoIdleState()
152
- } else if (runner.state === ProgramState.Running) {
153
- this.currentProgram.state = ProgramState.Running
154
- this.log(`Program runner ${runner.id} now running`)
155
- } else if (runner.state !== ProgramState.NotStarted) {
156
- console.error(runner)
157
- this.logError(
158
- `Program runner ${runner.id} entered unexpected state: ${runner.state}`,
159
- )
160
- this.currentProgram.state = ProgramState.NotStarted
161
- this.gotoIdleState()
162
- }
163
- }
164
-
165
- /** Call when a program is no longer executing */
166
- gotoIdleState() {
167
- runInAction(() => {
168
- this.executionState = "idle"
169
- })
170
- this.currentlyExecutingProgramRunnerId = null
171
- }
172
-
173
- async executeProgram(
174
- wandelscript: string,
175
- initial_state?: { [key: string]: CollectionValue },
176
- activeRobot?: MotionStreamConnection,
177
- ) {
178
- this.currentProgram = {
179
- wandelscript: wandelscript,
180
- state: ProgramState.NotStarted,
181
- }
182
-
183
- const { currentProgram: openProgram } = this
184
- if (!openProgram) return
185
- runInAction(() => {
186
- this.executionState = "starting"
187
- })
188
-
189
- // Jogging can cause program execution to fail for some time after
190
- // So we need to explicitly stop jogging before running a program
191
- if (activeRobot) {
192
- try {
193
- await this.nova.api.motionGroupJogging.stopJogging(
194
- activeRobot.motionGroupId,
195
- )
196
- } catch (err) {
197
- console.error(err)
198
- }
199
- }
200
-
201
- // WOS-1539: Wandelengine parser currently breaks if there are empty lines with indentation
202
- const trimmedCode = openProgram.wandelscript!.replaceAll(/^\s*$/gm, "")
203
-
204
- try {
205
- const programRunnerRef = await this.nova.api.program.createProgramRunner(
206
- {
207
- code: trimmedCode,
208
- initial_state: initial_state,
209
- // @ts-expect-error legacy code - check if param still used
210
- default_robot: activeRobot?.wandelscriptIdentifier,
211
- },
212
- {
213
- headers: {
214
- "Content-Type": "application/json",
215
- },
216
- },
217
- )
218
-
219
- this.log(`Created program runner ${programRunnerRef.id}"`)
220
- runInAction(() => {
221
- this.executionState = "executing"
222
- })
223
- this.currentlyExecutingProgramRunnerId = programRunnerRef.id
224
- } catch (error) {
225
- if (error instanceof AxiosError && error.response && error.request) {
226
- this.logError(
227
- `${error.response.status} ${error.response.statusText} from ${error.response.config.url} ${JSON.stringify(error.response.data)}`,
228
- )
229
- } else {
230
- this.logError(JSON.stringify(error))
231
- }
232
- runInAction(() => {
233
- this.executionState = "idle"
234
- })
235
- }
236
- }
237
-
238
- async stopProgram() {
239
- if (!this.currentlyExecutingProgramRunnerId) return
240
- runInAction(() => {
241
- this.executionState = "stopping"
242
- })
243
-
244
- try {
245
- await this.nova.api.program.stopProgramRunner(
246
- this.currentlyExecutingProgramRunnerId,
247
- )
248
- } catch (err) {
249
- // Reactivate the stop button so user can try again
250
- runInAction(() => {
251
- this.executionState = "executing"
252
- })
253
- throw err
254
- }
255
- }
256
-
257
- reset() {
258
- this.currentProgram = {}
259
- }
260
-
261
- log(message: string) {
262
- console.log(message)
263
- this.logs.push({
264
- timestamp: Date.now(),
265
- message,
266
- })
267
- }
268
-
269
- logError(message: string) {
270
- console.log(message)
271
- this.logs.push({
272
- timestamp: Date.now(),
273
- message,
274
- level: "error",
275
- })
276
- }
277
- }
@@ -1,37 +0,0 @@
1
- import type { GetTrajectoryResponse } from "@wandelbots/nova-api/v1"
2
- import type { NovaCellAPIClient } from "./NovaCellAPIClient.ts"
3
-
4
- let lastMotionIds: Set<string> = new Set()
5
-
6
- /** @deprecated */
7
- export async function getLatestTrajectories(
8
- apiClient: NovaCellAPIClient,
9
- sampleTime: number = 50,
10
- responsesCoordinateSystem?: string,
11
- ): Promise<GetTrajectoryResponse[]> {
12
- const newTrajectories: GetTrajectoryResponse[] = []
13
-
14
- try {
15
- const motions = await apiClient.motion.listMotions()
16
- const currentMotionIds = new Set(motions.motions)
17
-
18
- const newMotionIds = Array.from(currentMotionIds).filter(
19
- (id) => !lastMotionIds.has(id),
20
- )
21
-
22
- for (const motionId of newMotionIds) {
23
- const trajectory = await apiClient.motion.getMotionTrajectory(
24
- motionId,
25
- sampleTime,
26
- responsesCoordinateSystem,
27
- )
28
- newTrajectories.push(trajectory)
29
- }
30
-
31
- lastMotionIds = currentMotionIds
32
- } catch (error) {
33
- console.error("Failed to get latest trajectories:", error)
34
- }
35
-
36
- return newTrajectories
37
- }