@wandelbots/nova-js 3.8.0 → 3.9.0-pr.280.0f09579
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-9Of5_BJe.d.cts → AutoReconnectingWebsocket-DEs8wlLZ.d.cts} +2 -2
- package/dist/AutoReconnectingWebsocket-DEs8wlLZ.d.cts.map +1 -0
- package/dist/{AutoReconnectingWebsocket-9Of5_BJe.d.mts → AutoReconnectingWebsocket-DEs8wlLZ.d.mts} +2 -2
- package/dist/AutoReconnectingWebsocket-DEs8wlLZ.d.mts.map +1 -0
- package/dist/LoginWithAuth0-DeirP_w9.mjs.map +1 -1
- package/dist/LoginWithAuth0-oZFpwe7m.cjs.map +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/lib/{v1 → deprecated/v1}/index.cjs +10 -10
- package/dist/lib/deprecated/v1/index.cjs.map +1 -0
- package/dist/lib/{v1 → deprecated/v1}/index.d.cts +4 -4
- package/dist/lib/deprecated/v1/index.d.cts.map +1 -0
- package/dist/lib/{v1 → deprecated/v1}/index.d.mts +4 -4
- package/dist/lib/deprecated/v1/index.d.mts.map +1 -0
- package/dist/lib/{v1 → deprecated/v1}/index.mjs +4 -4
- package/dist/lib/deprecated/v1/index.mjs.map +1 -0
- package/dist/lib/v2/index.cjs +134 -3
- package/dist/lib/v2/index.cjs.map +1 -1
- package/dist/lib/v2/index.d.cts +86 -11
- package/dist/lib/v2/index.d.cts.map +1 -1
- package/dist/lib/v2/index.d.mts +86 -11
- package/dist/lib/v2/index.d.mts.map +1 -1
- package/dist/lib/v2/index.mjs +133 -4
- package/dist/lib/v2/index.mjs.map +1 -1
- package/dist/{NovaClient-B-QdK0HR.cjs → wandelscriptUtils-BvZ8hcul.cjs} +29 -29
- package/dist/wandelscriptUtils-BvZ8hcul.cjs.map +1 -0
- package/dist/{NovaClient-DLElEQzc.mjs → wandelscriptUtils-CsQAUu_9.mjs} +30 -30
- package/dist/wandelscriptUtils-CsQAUu_9.mjs.map +1 -0
- package/dist/{NovaClient-4PG1cMau.d.cts → wandelscriptUtils-Cz-yQ2eJ.d.mts} +16 -16
- package/dist/wandelscriptUtils-Cz-yQ2eJ.d.mts.map +1 -0
- package/dist/{NovaClient-TJ7Bua4l.d.mts → wandelscriptUtils-_Si3ueEd.d.cts} +16 -16
- package/dist/wandelscriptUtils-_Si3ueEd.d.cts.map +1 -0
- package/package.json +7 -5
- package/src/index.ts +2 -2
- package/src/lib/AutoReconnectingWebsocket.ts +1 -1
- package/src/lib/{v1 → deprecated/v1}/ConnectedMotionGroup.ts +2 -2
- package/src/lib/{v1 → deprecated/v1}/JoggerConnection.ts +2 -2
- package/src/lib/{v1 → deprecated/v1}/MotionStreamConnection.ts +2 -2
- package/src/lib/{v1 → deprecated/v1}/NovaClient.ts +4 -4
- package/src/lib/{v1 → deprecated/v1}/ProgramStateConnection.ts +2 -2
- package/src/lib/{v1 → deprecated/v1}/mock/MockNovaInstance.ts +1 -1
- package/src/lib/{v2 → deprecated/v2}/NovaClient.ts +5 -5
- package/src/lib/v2/Nova.ts +190 -0
- package/src/lib/v2/NovaAPIClient.ts +157 -0
- package/src/lib/v2/index.ts +6 -3
- package/dist/AutoReconnectingWebsocket-9Of5_BJe.d.cts.map +0 -1
- package/dist/AutoReconnectingWebsocket-9Of5_BJe.d.mts.map +0 -1
- package/dist/NovaClient-4PG1cMau.d.cts.map +0 -1
- package/dist/NovaClient-B-QdK0HR.cjs.map +0 -1
- package/dist/NovaClient-DLElEQzc.mjs.map +0 -1
- package/dist/NovaClient-TJ7Bua4l.d.mts.map +0 -1
- package/dist/lib/v1/index.cjs.map +0 -1
- package/dist/lib/v1/index.d.cts.map +0 -1
- package/dist/lib/v1/index.d.mts.map +0 -1
- package/dist/lib/v1/index.mjs.map +0 -1
- /package/src/lib/{v1 → deprecated/v1}/NovaCellAPIClient.ts +0 -0
- /package/src/lib/{v1 → deprecated/v1}/getLatestTrajectories.ts +0 -0
- /package/src/lib/{v1 → deprecated/v1}/index.ts +0 -0
- /package/src/lib/{v1 → deprecated/v1}/motionStateUpdate.ts +0 -0
- /package/src/lib/{v1 → deprecated/v1}/wandelscriptUtils.ts +0 -0
- /package/src/lib/{v2 → deprecated/v2}/NovaCellAPIClient.ts +0 -0
- /package/src/lib/{v2 → deprecated/v2}/wandelscriptUtils.ts +0 -0
|
@@ -3,11 +3,11 @@ import type { Configuration as BaseConfiguration } from "@wandelbots/nova-api/v2
|
|
|
3
3
|
import type { AxiosRequestConfig } from "axios"
|
|
4
4
|
import axios, { isAxiosError } from "axios"
|
|
5
5
|
import urlJoin from "url-join"
|
|
6
|
-
import { loginWithAuth0 } from "
|
|
7
|
-
import { AutoReconnectingWebsocket } from "
|
|
8
|
-
import { availableStorage } from "
|
|
9
|
-
import { parseNovaInstanceUrl } from "
|
|
10
|
-
import { MockNovaInstance } from "
|
|
6
|
+
import { loginWithAuth0 } from "../../../LoginWithAuth0"
|
|
7
|
+
import { AutoReconnectingWebsocket } from "../../AutoReconnectingWebsocket"
|
|
8
|
+
import { availableStorage } from "../../availableStorage"
|
|
9
|
+
import { parseNovaInstanceUrl } from "../../converters"
|
|
10
|
+
import { MockNovaInstance } from "../../v2/mock/MockNovaInstance"
|
|
11
11
|
import { NovaCellAPIClient } from "./NovaCellAPIClient"
|
|
12
12
|
|
|
13
13
|
export type NovaClientConfig = {
|
|
@@ -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,157 @@
|
|
|
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
|
+
// biome-ignore lint/suspicious/noExplicitAny: metamagic
|
|
10
|
+
type UnwrapAxiosResponseReturn<T> = T extends (...a: any[]) => any
|
|
11
|
+
? (
|
|
12
|
+
...a: Parameters<T>
|
|
13
|
+
) => Promise<Awaited<ReturnType<T>> extends { data: infer D } ? D : never>
|
|
14
|
+
: never
|
|
15
|
+
|
|
16
|
+
type WithUnwrappedAxiosResponse<T> = {
|
|
17
|
+
[P in keyof T]: UnwrapAxiosResponseReturn<T[P]>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Filters nova-api/v2 exports to just the API class constructors,
|
|
22
|
+
* excluding helper factories and param creators.
|
|
23
|
+
*/
|
|
24
|
+
type ApiConstructors = {
|
|
25
|
+
[K in keyof typeof novaApiV2 as K extends `${string}Api`
|
|
26
|
+
? K extends
|
|
27
|
+
| `${string}Factory${string}`
|
|
28
|
+
| `${string}Fp${string}`
|
|
29
|
+
| `${string}ParamCreator${string}`
|
|
30
|
+
? never
|
|
31
|
+
: K
|
|
32
|
+
: never]: (typeof novaApiV2)[K]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Lowercases leading uppercase characters to produce a camelCase property name.
|
|
37
|
+
* e.g. "BUSInputsOutputs" -> "busInputsOutputs", "NOVACloud" -> "novaCloud",
|
|
38
|
+
* "Application" -> "application"
|
|
39
|
+
*/
|
|
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
|
+
type ApiProperties = {
|
|
52
|
+
readonly [K in keyof ApiConstructors as K extends `${infer P}Api`
|
|
53
|
+
? CamelCase<P>
|
|
54
|
+
: never]: ApiConstructors[K] extends new (
|
|
55
|
+
// biome-ignore lint/suspicious/noExplicitAny: needed for contravariant parameter matching
|
|
56
|
+
...args: any[]
|
|
57
|
+
) => infer I
|
|
58
|
+
? WithUnwrappedAxiosResponse<I>
|
|
59
|
+
: never
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
type NovaAPIClientOpts = BaseConfiguration & {
|
|
63
|
+
axiosInstance?: AxiosInstance
|
|
64
|
+
mock?: boolean
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function isApiClass(
|
|
68
|
+
name: string,
|
|
69
|
+
value: unknown,
|
|
70
|
+
): value is new (
|
|
71
|
+
config: BaseConfiguration,
|
|
72
|
+
basePath: string,
|
|
73
|
+
axios: AxiosInstance,
|
|
74
|
+
) => BaseAPI {
|
|
75
|
+
return (
|
|
76
|
+
name.endsWith("Api") &&
|
|
77
|
+
typeof value === "function" &&
|
|
78
|
+
!name.includes("Factory") &&
|
|
79
|
+
!name.includes("Fp") &&
|
|
80
|
+
!name.includes("ParamCreator")
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function wrapApi<T extends BaseAPI>(
|
|
85
|
+
ApiConstructor: new (
|
|
86
|
+
config: BaseConfiguration,
|
|
87
|
+
basePath: string,
|
|
88
|
+
axios: AxiosInstance,
|
|
89
|
+
) => T,
|
|
90
|
+
opts: NovaAPIClientOpts,
|
|
91
|
+
): WithUnwrappedAxiosResponse<T> {
|
|
92
|
+
const apiClient = new ApiConstructor(
|
|
93
|
+
{
|
|
94
|
+
...opts,
|
|
95
|
+
isJsonMime: (mime: string) => mime === "application/json",
|
|
96
|
+
},
|
|
97
|
+
opts.basePath ?? "",
|
|
98
|
+
opts.axiosInstance ?? axios.create(),
|
|
99
|
+
) as Record<string | symbol, unknown>
|
|
100
|
+
|
|
101
|
+
for (const key of Reflect.ownKeys(
|
|
102
|
+
Reflect.getPrototypeOf(apiClient) as object,
|
|
103
|
+
)) {
|
|
104
|
+
if (key !== "constructor" && typeof apiClient[key] === "function") {
|
|
105
|
+
const originalFunction = apiClient[key] as (
|
|
106
|
+
...args: unknown[]
|
|
107
|
+
) => Promise<{ data: unknown }>
|
|
108
|
+
apiClient[key] = (...args: unknown[]) =>
|
|
109
|
+
originalFunction.apply(apiClient, args).then((res) => res.data)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return apiClient as WithUnwrappedAxiosResponse<T>
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* API client providing type-safe access to all the endpoints of a NOVA
|
|
118
|
+
* instance. API sections are auto-discovered from @wandelbots/nova-api/v2
|
|
119
|
+
* at runtime, so new sections added upstream are exposed automatically.
|
|
120
|
+
*/
|
|
121
|
+
export const NovaAPIClient = class NovaAPIClient {
|
|
122
|
+
readonly opts: NovaAPIClientOpts
|
|
123
|
+
|
|
124
|
+
constructor(opts: NovaAPIClientOpts) {
|
|
125
|
+
this.opts = opts
|
|
126
|
+
|
|
127
|
+
for (const [name, value] of Object.entries(novaApiV2)) {
|
|
128
|
+
if (isApiClass(name, value)) {
|
|
129
|
+
const stripped = name.slice(0, -3)
|
|
130
|
+
// Lowercase leading acronym run: "BUSInputsOutputs" -> "busInputsOutputs"
|
|
131
|
+
let i = 0
|
|
132
|
+
while (
|
|
133
|
+
i < stripped.length &&
|
|
134
|
+
stripped[i] === stripped[i].toUpperCase() &&
|
|
135
|
+
stripped[i] !== stripped[i].toLowerCase()
|
|
136
|
+
) {
|
|
137
|
+
i++
|
|
138
|
+
}
|
|
139
|
+
// If multiple uppercase chars, keep the last one uppercase (it starts the next word)
|
|
140
|
+
const boundary = i > 1 ? i - 1 : i
|
|
141
|
+
const propName =
|
|
142
|
+
stripped.slice(0, boundary).toLowerCase() + stripped.slice(boundary)
|
|
143
|
+
// biome-ignore lint/suspicious/noExplicitAny: dynamically assigning discovered API properties
|
|
144
|
+
;(this as any)[propName] = wrapApi(value, opts)
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
} as {
|
|
149
|
+
new (
|
|
150
|
+
opts: NovaAPIClientOpts,
|
|
151
|
+
): ApiProperties & {
|
|
152
|
+
readonly cellId: string
|
|
153
|
+
readonly opts: NovaAPIClientOpts
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export type NovaAPIClient = InstanceType<typeof NovaAPIClient>
|
package/src/lib/v2/index.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export * from "@wandelbots/nova-api/v2"
|
|
2
|
-
export * from "
|
|
3
|
-
export * from "
|
|
4
|
-
export * from "
|
|
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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"}
|