@wandelbots/nova-js 3.8.0 → 3.9.0-pr.280.1601c70

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 (64) hide show
  1. package/dist/{AutoReconnectingWebsocket-9Of5_BJe.d.cts → AutoReconnectingWebsocket-DEs8wlLZ.d.cts} +2 -2
  2. package/dist/AutoReconnectingWebsocket-DEs8wlLZ.d.cts.map +1 -0
  3. package/dist/{AutoReconnectingWebsocket-9Of5_BJe.d.mts → AutoReconnectingWebsocket-DEs8wlLZ.d.mts} +2 -2
  4. package/dist/AutoReconnectingWebsocket-DEs8wlLZ.d.mts.map +1 -0
  5. package/dist/LoginWithAuth0-DeirP_w9.mjs.map +1 -1
  6. package/dist/LoginWithAuth0-oZFpwe7m.cjs.map +1 -1
  7. package/dist/index.cjs +3 -3
  8. package/dist/index.d.cts +2 -2
  9. package/dist/index.d.mts +2 -2
  10. package/dist/index.mjs +1 -1
  11. package/dist/lib/{v1 → deprecated/v1}/index.cjs +10 -10
  12. package/dist/lib/deprecated/v1/index.cjs.map +1 -0
  13. package/dist/lib/{v1 → deprecated/v1}/index.d.cts +4 -4
  14. package/dist/lib/deprecated/v1/index.d.cts.map +1 -0
  15. package/dist/lib/{v1 → deprecated/v1}/index.d.mts +4 -4
  16. package/dist/lib/deprecated/v1/index.d.mts.map +1 -0
  17. package/dist/lib/{v1 → deprecated/v1}/index.mjs +4 -4
  18. package/dist/lib/deprecated/v1/index.mjs.map +1 -0
  19. package/dist/lib/v2/index.cjs +134 -3
  20. package/dist/lib/v2/index.cjs.map +1 -1
  21. package/dist/lib/v2/index.d.cts +89 -11
  22. package/dist/lib/v2/index.d.cts.map +1 -1
  23. package/dist/lib/v2/index.d.mts +89 -11
  24. package/dist/lib/v2/index.d.mts.map +1 -1
  25. package/dist/lib/v2/index.mjs +133 -4
  26. package/dist/lib/v2/index.mjs.map +1 -1
  27. package/dist/{NovaClient-B-QdK0HR.cjs → wandelscriptUtils-BvZ8hcul.cjs} +29 -29
  28. package/dist/wandelscriptUtils-BvZ8hcul.cjs.map +1 -0
  29. package/dist/{NovaClient-DLElEQzc.mjs → wandelscriptUtils-CsQAUu_9.mjs} +30 -30
  30. package/dist/wandelscriptUtils-CsQAUu_9.mjs.map +1 -0
  31. package/dist/{NovaClient-4PG1cMau.d.cts → wandelscriptUtils-Cz-yQ2eJ.d.mts} +16 -16
  32. package/dist/wandelscriptUtils-Cz-yQ2eJ.d.mts.map +1 -0
  33. package/dist/{NovaClient-TJ7Bua4l.d.mts → wandelscriptUtils-_Si3ueEd.d.cts} +16 -16
  34. package/dist/wandelscriptUtils-_Si3ueEd.d.cts.map +1 -0
  35. package/package.json +4 -4
  36. package/src/index.ts +2 -2
  37. package/src/lib/AutoReconnectingWebsocket.ts +1 -1
  38. package/src/lib/{v1 → deprecated/v1}/ConnectedMotionGroup.ts +2 -2
  39. package/src/lib/{v1 → deprecated/v1}/JoggerConnection.ts +2 -2
  40. package/src/lib/{v1 → deprecated/v1}/MotionStreamConnection.ts +2 -2
  41. package/src/lib/{v1 → deprecated/v1}/NovaClient.ts +4 -4
  42. package/src/lib/{v1 → deprecated/v1}/ProgramStateConnection.ts +2 -2
  43. package/src/lib/{v1 → deprecated/v1}/mock/MockNovaInstance.ts +1 -1
  44. package/src/lib/{v2 → deprecated/v2}/NovaClient.ts +5 -5
  45. package/src/lib/v2/Nova.ts +190 -0
  46. package/src/lib/v2/NovaAPIClient.ts +159 -0
  47. package/src/lib/v2/index.ts +6 -3
  48. package/dist/AutoReconnectingWebsocket-9Of5_BJe.d.cts.map +0 -1
  49. package/dist/AutoReconnectingWebsocket-9Of5_BJe.d.mts.map +0 -1
  50. package/dist/NovaClient-4PG1cMau.d.cts.map +0 -1
  51. package/dist/NovaClient-B-QdK0HR.cjs.map +0 -1
  52. package/dist/NovaClient-DLElEQzc.mjs.map +0 -1
  53. package/dist/NovaClient-TJ7Bua4l.d.mts.map +0 -1
  54. package/dist/lib/v1/index.cjs.map +0 -1
  55. package/dist/lib/v1/index.d.cts.map +0 -1
  56. package/dist/lib/v1/index.d.mts.map +0 -1
  57. package/dist/lib/v1/index.mjs.map +0 -1
  58. /package/src/lib/{v1 → deprecated/v1}/NovaCellAPIClient.ts +0 -0
  59. /package/src/lib/{v1 → deprecated/v1}/getLatestTrajectories.ts +0 -0
  60. /package/src/lib/{v1 → deprecated/v1}/index.ts +0 -0
  61. /package/src/lib/{v1 → deprecated/v1}/motionStateUpdate.ts +0 -0
  62. /package/src/lib/{v1 → deprecated/v1}/wandelscriptUtils.ts +0 -0
  63. /package/src/lib/{v2 → deprecated/v2}/NovaCellAPIClient.ts +0 -0
  64. /package/src/lib/{v2 → deprecated/v2}/wandelscriptUtils.ts +0 -0
@@ -0,0 +1,190 @@
1
+ import type { Configuration as BaseConfiguration } from "@wandelbots/nova-api/v2"
2
+ import type { AxiosRequestConfig } from "axios"
3
+ import axios, { isAxiosError } from "axios"
4
+ import urlJoin from "url-join"
5
+ import { loginWithAuth0 } from "../../LoginWithAuth0"
6
+ import { AutoReconnectingWebsocket } from "../AutoReconnectingWebsocket"
7
+ import { availableStorage } from "../availableStorage"
8
+ import { parseNovaInstanceUrl } from "../converters"
9
+ import { NovaAPIClient } from "./NovaAPIClient"
10
+ import { MockNovaInstance } from "./mock/MockNovaInstance"
11
+
12
+ export type NovaClientConfig = {
13
+ /**
14
+ * Url of the deployed NOVA instance to connect to
15
+ * e.g. https://saeattii.instance.wandelbots.io
16
+ */
17
+ instanceUrl: string
18
+
19
+ /**
20
+ * Access token for Bearer authentication.
21
+ * If running on a NOVA instance, this can be automatically retrieved from
22
+ * the current session when omitted.
23
+ */
24
+ accessToken?: string
25
+ } & Omit<BaseConfiguration, "isJsonMime" | "basePath">
26
+
27
+ /**
28
+ *
29
+ * Client for connecting to a NOVA instance and controlling robots.
30
+ */
31
+ export class Nova {
32
+ readonly api: NovaAPIClient
33
+ readonly config: NovaClientConfig
34
+ readonly mock?: MockNovaInstance
35
+ readonly instanceUrl: URL
36
+ authPromise: Promise<string | null> | null = null
37
+ accessToken: string | null = null
38
+
39
+ constructor(config: NovaClientConfig) {
40
+ this.config = config
41
+ this.accessToken =
42
+ config.accessToken ||
43
+ availableStorage.getString("wbjs.access_token") ||
44
+ null
45
+
46
+ if (this.config.instanceUrl === "https://mock.example.com") {
47
+ this.mock = new MockNovaInstance()
48
+ }
49
+ this.instanceUrl = parseNovaInstanceUrl(this.config.instanceUrl)
50
+
51
+ // Set up Axios instance with interceptor for token fetching
52
+ const axiosInstance = axios.create({
53
+ baseURL: urlJoin(this.instanceUrl.href, "/api/v2"),
54
+ // TODO - backend needs to set proper CORS headers for this
55
+ headers:
56
+ typeof window !== "undefined" &&
57
+ window.location.origin.includes("localhost")
58
+ ? {}
59
+ : {
60
+ // Identify the client to the backend for logging purposes
61
+ "X-Wandelbots-Client": "Wandelbots-Nova-JS-SDK",
62
+ },
63
+ })
64
+
65
+ axiosInstance.interceptors.request.use(async (request) => {
66
+ if (!request.headers.Authorization) {
67
+ if (this.accessToken) {
68
+ request.headers.Authorization = `Bearer ${this.accessToken}`
69
+ } else if (this.config.username && this.config.password) {
70
+ request.headers.Authorization = `Basic ${btoa(`${config.username}:${config.password}`)}`
71
+ }
72
+ }
73
+ return request
74
+ })
75
+
76
+ if (typeof window !== "undefined") {
77
+ axiosInstance.interceptors.response.use(
78
+ (r) => r,
79
+ async (error) => {
80
+ if (isAxiosError(error)) {
81
+ if (error.response?.status === 401) {
82
+ // If we hit a 401, attempt to login the user and retry with
83
+ // a new access token
84
+ try {
85
+ await this.renewAuthentication()
86
+
87
+ if (error.config) {
88
+ if (this.accessToken) {
89
+ error.config.headers.Authorization = `Bearer ${this.accessToken}`
90
+ } else {
91
+ delete error.config.headers.Authorization
92
+ }
93
+ return axiosInstance.request(error.config)
94
+ }
95
+ } catch (err) {
96
+ return Promise.reject(err)
97
+ }
98
+ } else if (error.response?.status === 503) {
99
+ // Check if the server as a whole is down
100
+ const res = await fetch(window.location.href)
101
+ if (res.status === 503) {
102
+ // Go to 503 page
103
+ window.location.reload()
104
+ }
105
+ }
106
+ }
107
+
108
+ return Promise.reject(error)
109
+ },
110
+ )
111
+ }
112
+
113
+ this.api = new NovaAPIClient({
114
+ ...config,
115
+ basePath: urlJoin(this.instanceUrl.href, "/api/v2"),
116
+ isJsonMime: (mime: string) => {
117
+ return mime === "application/json"
118
+ },
119
+ baseOptions: {
120
+ ...(this.mock
121
+ ? ({
122
+ adapter: (config) => {
123
+ // biome-ignore lint/style/noNonNullAssertion: guarded by ternary condition
124
+ return this.mock!.handleAPIRequest(config)
125
+ },
126
+ } satisfies AxiosRequestConfig)
127
+ : {}),
128
+ ...config.baseOptions,
129
+ },
130
+ axiosInstance,
131
+ })
132
+ }
133
+
134
+ async renewAuthentication(): Promise<void> {
135
+ if (this.authPromise) {
136
+ // Don't double up
137
+ return
138
+ }
139
+
140
+ const storedToken = availableStorage.getString("wbjs.access_token")
141
+ if (storedToken && this.accessToken !== storedToken) {
142
+ // Might be newer than the one we have
143
+ this.accessToken = storedToken
144
+ return
145
+ }
146
+
147
+ // Otherwise, perform login flow
148
+ this.authPromise = loginWithAuth0(this.instanceUrl)
149
+ try {
150
+ this.accessToken = await this.authPromise
151
+ if (this.accessToken) {
152
+ // Cache access token so we don't need to log in every refresh
153
+ availableStorage.setString("wbjs.access_token", this.accessToken)
154
+ } else {
155
+ availableStorage.delete("wbjs.access_token")
156
+ }
157
+ } finally {
158
+ this.authPromise = null
159
+ }
160
+ }
161
+
162
+ makeWebsocketURL(path: string): string {
163
+ const url = new URL(urlJoin(this.instanceUrl.href, `/api/v2`, path))
164
+ url.protocol = url.protocol.replace("http", "ws")
165
+ url.protocol = url.protocol.replace("https", "wss")
166
+
167
+ // If provided, add basic auth credentials to the URL
168
+ // NOTE - basic auth is deprecated on websockets and doesn't work in Safari
169
+ // use tokens instead
170
+ if (this.accessToken) {
171
+ url.searchParams.append("token", this.accessToken)
172
+ } else if (this.config.username && this.config.password) {
173
+ url.username = this.config.username
174
+ url.password = this.config.password
175
+ }
176
+
177
+ return url.toString()
178
+ }
179
+
180
+ /**
181
+ * Retrieve an AutoReconnectingWebsocket to the given path on the Nova instance.
182
+ * If you explicitly want to reconnect an existing websocket, call `reconnect`
183
+ * on the returned object.
184
+ */
185
+ openReconnectingWebsocket(path: string) {
186
+ return new AutoReconnectingWebsocket(this.makeWebsocketURL(path), {
187
+ mock: this.mock,
188
+ })
189
+ }
190
+ }
@@ -0,0 +1,159 @@
1
+ import type {
2
+ BaseAPI,
3
+ Configuration as BaseConfiguration,
4
+ } from "@wandelbots/nova-api/v2"
5
+ import * as novaApiV2 from "@wandelbots/nova-api/v2"
6
+ import type { AxiosInstance } from "axios"
7
+ import axios from "axios"
8
+
9
+ type UnwrapAxiosResponseReturn<T> = T extends (...a: unknown[]) => unknown[]
10
+ ? (
11
+ ...a: Parameters<T>
12
+ ) => Promise<Awaited<ReturnType<T>> extends { data: infer D } ? D : never>
13
+ : never
14
+
15
+ type WithUnwrappedAxiosResponse<T> = {
16
+ [P in keyof T]: UnwrapAxiosResponseReturn<T[P]>
17
+ }
18
+
19
+ /**
20
+ * Filters nova-api/v2 exports to just the API class constructors,
21
+ * excluding helper factories and param creators.
22
+ */
23
+ type ApiConstructors = {
24
+ [K in keyof typeof novaApiV2 as K extends `${string}Api`
25
+ ? K extends
26
+ | `${string}Factory${string}`
27
+ | `${string}Fp${string}`
28
+ | `${string}ParamCreator${string}`
29
+ ? never
30
+ : K
31
+ : never]: (typeof novaApiV2)[K]
32
+ }
33
+
34
+ /**
35
+ * Lowercases leading uppercase characters to produce a camelCase property name.
36
+ * e.g. "BUSInputsOutputs" -> "busInputsOutputs", "NOVACloud" -> "novaCloud",
37
+ * "Application" -> "application"
38
+ */
39
+ // prettier-ignore
40
+ type CamelCase<S extends string> =
41
+ S extends `${Uppercase<infer A>}${Uppercase<infer B>}${infer Rest}`
42
+ ? Rest extends `${Lowercase<string>}${string}`
43
+ ? `${Lowercase<A>}${CamelCase<`${Uppercase<B>}${Rest}`>}`
44
+ : `${Lowercase<A>}${CamelCase<`${Uppercase<B>}${Rest}`>}`
45
+ : Uncapitalize<S>
46
+
47
+ /**
48
+ * Maps API class names to property names by stripping "Api" and converting
49
+ * the leading acronym to lowercase camelCase.
50
+ *
51
+ * Properties are auto-discovered from the upstream package at runtime,
52
+ * so new API sections are available immediately without code changes.
53
+ */
54
+ type ApiProperties = {
55
+ readonly [K in keyof ApiConstructors as K extends `${infer P}Api`
56
+ ? CamelCase<P>
57
+ : never]: ApiConstructors[K] extends new (
58
+ ...args: unknown[]
59
+ ) => infer I
60
+ ? WithUnwrappedAxiosResponse<I>
61
+ : never
62
+ }
63
+
64
+ type NovaAPIClientOpts = BaseConfiguration & {
65
+ axiosInstance?: AxiosInstance
66
+ mock?: boolean
67
+ }
68
+
69
+ function isApiClass(
70
+ name: string,
71
+ value: unknown,
72
+ ): value is new (
73
+ config: BaseConfiguration,
74
+ basePath: string,
75
+ axios: AxiosInstance,
76
+ ) => BaseAPI {
77
+ return (
78
+ name.endsWith("Api") &&
79
+ typeof value === "function" &&
80
+ !name.includes("Factory") &&
81
+ !name.includes("Fp") &&
82
+ !name.includes("ParamCreator")
83
+ )
84
+ }
85
+
86
+ function wrapApi<T extends BaseAPI>(
87
+ ApiConstructor: new (
88
+ config: BaseConfiguration,
89
+ basePath: string,
90
+ axios: AxiosInstance,
91
+ ) => T,
92
+ opts: NovaAPIClientOpts,
93
+ ): WithUnwrappedAxiosResponse<T> {
94
+ const apiClient = new ApiConstructor(
95
+ {
96
+ ...opts,
97
+ isJsonMime: (mime: string) => mime === "application/json",
98
+ },
99
+ opts.basePath ?? "",
100
+ opts.axiosInstance ?? axios.create(),
101
+ ) as Record<string | symbol, unknown>
102
+
103
+ for (const key of Reflect.ownKeys(
104
+ Reflect.getPrototypeOf(apiClient) as object,
105
+ )) {
106
+ if (key !== "constructor" && typeof apiClient[key] === "function") {
107
+ const originalFunction = apiClient[key] as (
108
+ ...args: unknown[]
109
+ ) => Promise<{ data: unknown }>
110
+ apiClient[key] = (...args: unknown[]) =>
111
+ originalFunction.apply(apiClient, args).then((res) => res.data)
112
+ }
113
+ }
114
+
115
+ return apiClient as WithUnwrappedAxiosResponse<T>
116
+ }
117
+
118
+ /**
119
+ * API client providing type-safe access to all the endpoints of a NOVA
120
+ * instance. API sections are auto-discovered from @wandelbots/nova-api/v2
121
+ * at runtime, so new sections added upstream are exposed automatically.
122
+ */
123
+ export const NovaAPIClient = class NovaAPIClient {
124
+ readonly opts: NovaAPIClientOpts
125
+
126
+ constructor(opts: NovaAPIClientOpts) {
127
+ this.opts = opts
128
+
129
+ for (const [name, value] of Object.entries(novaApiV2)) {
130
+ if (isApiClass(name, value)) {
131
+ const stripped = name.slice(0, -3)
132
+ // Lowercase leading acronym run: "BUSInputsOutputs" -> "busInputsOutputs"
133
+ let i = 0
134
+ while (
135
+ i < stripped.length &&
136
+ stripped[i] === stripped[i].toUpperCase() &&
137
+ stripped[i] !== stripped[i].toLowerCase()
138
+ ) {
139
+ i++
140
+ }
141
+ // If multiple uppercase chars, keep the last one uppercase (it starts the next word)
142
+ const boundary = i > 1 ? i - 1 : i
143
+ const propName =
144
+ stripped.slice(0, boundary).toLowerCase() + stripped.slice(boundary)
145
+ // biome-ignore lint/suspicious/noExplicitAny: dynamically assigning discovered API properties
146
+ ;(this as any)[propName] = wrapApi(value, opts)
147
+ }
148
+ }
149
+ }
150
+ } as {
151
+ new (
152
+ opts: NovaAPIClientOpts,
153
+ ): ApiProperties & {
154
+ readonly cellId: string
155
+ readonly opts: NovaAPIClientOpts
156
+ }
157
+ }
158
+
159
+ export type NovaAPIClient = InstanceType<typeof NovaAPIClient>
@@ -1,4 +1,7 @@
1
1
  export * from "@wandelbots/nova-api/v2"
2
- export * from "./NovaCellAPIClient"
3
- export * from "./NovaClient"
4
- export * from "./wandelscriptUtils"
2
+ export * from "../deprecated/v2/NovaCellAPIClient"
3
+ export * from "../deprecated/v2/NovaClient"
4
+ export * from "../deprecated/v2/wandelscriptUtils"
5
+ export { Nova } from "./Nova"
6
+ export type { NovaClientConfig } from "./Nova"
7
+ export { NovaAPIClient } from "./NovaAPIClient"
@@ -1 +0,0 @@
1
- {"version":3,"file":"AutoReconnectingWebsocket-9Of5_BJe.d.cts","names":[],"sources":["../src/lib/v1/mock/MockNovaInstance.ts","../src/lib/v2/mock/MockNovaInstance.ts","../src/lib/AutoReconnectingWebsocket.ts"],"mappings":";;;;;;AAeA;cAAa,kBAAA;EAAA,SACF,WAAA,EAAa,yBAAA;EAEhB,gBAAA,CACJ,MAAA,EAAQ,0BAAA,GACP,OAAA,CAAQ,aAAA;EAg8BX,yBAAA,CAA0B,MAAA,EAAQ,yBAAA;EAkOlC,sBAAA,CAAuB,MAAA,EAAQ,yBAAA,EAA2B,OAAA;AAAA;;;;;AAvqC5D;cCAa,gBAAA;EAAA,SACF,WAAA,EAAa,yBAAA;EAEhB,gBAAA,CACJ,MAAA,EAAQ,0BAAA,GACP,OAAA,CAAQ,aAAA;EAyCX,yBAAA,CAA0B,MAAA,EAAQ,yBAAA;EA+BlC,sBAAA,CAAuB,MAAA,EAAQ,yBAAA,EAA2B,OAAA;AAAA;;;cCxF/C,yBAAA,SAAkC,qBAAA;EAAA,SAOlC,IAAA;IACP,IAAA,GAAO,kBAAA,GAAsB,gBAAA;IAC7B,SAAA;EAAA;EARJ,oBAAA,GAAuB,YAAA;EACvB,SAAA;EACA,QAAA;cAGE,SAAA,UACS,IAAA;IACP,IAAA,GAAO,kBAAA,GAAsB,gBAAA;IAC7B,SAAA;EAAA;EA4CJ,SAAA,CAAU,SAAA;EAMV,QAAA,CAAS,IAAA;EF7CH;;;;EEyDN,OAAA,CAAA;EFy4BA;;;EE93BM,MAAA,CAAA,GAAM,OAAA;EFgmCmB;;;EEllCzB,MAAA,CAAA,GAAM,OAAA;EFklC6D;;;;ACvqC3E;ECqGQ,YAAA,CAAA,GAAY,OAAA,CAAA,YAAA;;;;;EA4BZ,WAAA,CAAA,GAAW,OAAA,CAAA,YAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AutoReconnectingWebsocket-9Of5_BJe.d.mts","names":[],"sources":["../src/lib/v1/mock/MockNovaInstance.ts","../src/lib/v2/mock/MockNovaInstance.ts","../src/lib/AutoReconnectingWebsocket.ts"],"mappings":";;;;;;AAeA;cAAa,kBAAA;EAAA,SACF,WAAA,EAAa,yBAAA;EAEhB,gBAAA,CACJ,MAAA,EAAQ,0BAAA,GACP,OAAA,CAAQ,aAAA;EAg8BX,yBAAA,CAA0B,MAAA,EAAQ,yBAAA;EAkOlC,sBAAA,CAAuB,MAAA,EAAQ,yBAAA,EAA2B,OAAA;AAAA;;;;;AAvqC5D;cCAa,gBAAA;EAAA,SACF,WAAA,EAAa,yBAAA;EAEhB,gBAAA,CACJ,MAAA,EAAQ,0BAAA,GACP,OAAA,CAAQ,aAAA;EAyCX,yBAAA,CAA0B,MAAA,EAAQ,yBAAA;EA+BlC,sBAAA,CAAuB,MAAA,EAAQ,yBAAA,EAA2B,OAAA;AAAA;;;cCxF/C,yBAAA,SAAkC,qBAAA;EAAA,SAOlC,IAAA;IACP,IAAA,GAAO,kBAAA,GAAsB,gBAAA;IAC7B,SAAA;EAAA;EARJ,oBAAA,GAAuB,YAAA;EACvB,SAAA;EACA,QAAA;cAGE,SAAA,UACS,IAAA;IACP,IAAA,GAAO,kBAAA,GAAsB,gBAAA;IAC7B,SAAA;EAAA;EA4CJ,SAAA,CAAU,SAAA;EAMV,QAAA,CAAS,IAAA;EF7CH;;;;EEyDN,OAAA,CAAA;EFy4BA;;;EE93BM,MAAA,CAAA,GAAM,OAAA;EFgmCmB;;;EEllCzB,MAAA,CAAA,GAAM,OAAA;EFklC6D;;;;ACvqC3E;ECqGQ,YAAA,CAAA,GAAY,OAAA,CAAA,YAAA;;;;;EA4BZ,WAAA,CAAA,GAAW,OAAA,CAAA,YAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NovaClient-4PG1cMau.d.cts","names":[],"sources":["../src/lib/v1/wandelscriptUtils.ts","../src/lib/v1/ConnectedMotionGroup.ts","../src/lib/v1/MotionStreamConnection.ts","../src/lib/v1/JoggerConnection.ts","../src/lib/v1/NovaCellAPIClient.ts","../src/lib/v1/NovaClient.ts"],"mappings":"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"}