@wandelbots/nova-js 3.11.0-pr.295.868a6d7 → 3.11.1-pr.302.16caadc
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-DNOF9mpz.d.cts → AutoReconnectingWebsocket-1K2J1NA4.d.cts} +5 -5
- package/dist/AutoReconnectingWebsocket-1K2J1NA4.d.cts.map +1 -0
- package/dist/{AutoReconnectingWebsocket-DNOF9mpz.d.mts → AutoReconnectingWebsocket-1K2J1NA4.d.mts} +5 -5
- package/dist/AutoReconnectingWebsocket-1K2J1NA4.d.mts.map +1 -0
- package/dist/{context-Dmy8AyY7.cjs → context-TPb5fGlK.cjs} +8 -7
- package/dist/context-TPb5fGlK.cjs.map +1 -0
- package/dist/{context-BQk3xGAI.mjs → context-kT2C20EX.mjs} +8 -7
- package/dist/context-kT2C20EX.mjs.map +1 -0
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/{lib/deprecated/v1 → v1}/index.cjs +8 -6
- package/dist/v1/index.cjs.map +1 -0
- package/dist/{lib/deprecated/v1 → v1}/index.d.cts +3 -3
- package/dist/v1/index.d.cts.map +1 -0
- package/dist/{lib/deprecated/v1 → v1}/index.d.mts +3 -3
- package/dist/v1/index.d.mts.map +1 -0
- package/dist/{lib/deprecated/v1 → v1}/index.mjs +8 -6
- package/dist/v1/index.mjs.map +1 -0
- package/dist/{lib/v2 → v2}/index.cjs +82 -20
- package/dist/v2/index.cjs.map +1 -0
- package/dist/{lib/v2 → v2}/index.d.cts +22 -22
- package/dist/v2/index.d.cts.map +1 -0
- package/dist/{lib/v2 → v2}/index.d.mts +22 -22
- package/dist/v2/index.d.mts.map +1 -0
- package/dist/{lib/v2 → v2}/index.mjs +82 -20
- package/dist/v2/index.mjs.map +1 -0
- package/dist/{wandelscriptUtils-BDdIFHPD.mjs → wandelscriptUtils-CwtdZRDs.mjs} +71 -14
- package/dist/wandelscriptUtils-CwtdZRDs.mjs.map +1 -0
- package/dist/{wandelscriptUtils-1A9uFPV_.d.cts → wandelscriptUtils-DY3WsiuB.d.cts} +37 -37
- package/dist/wandelscriptUtils-DY3WsiuB.d.cts.map +1 -0
- package/dist/{wandelscriptUtils-pySXnBlX.d.mts → wandelscriptUtils-YHTxn_p9.d.mts} +37 -37
- package/dist/wandelscriptUtils-YHTxn_p9.d.mts.map +1 -0
- package/dist/{wandelscriptUtils-BUUwGZNr.cjs → wandelscriptUtils-dUlZrOhy.cjs} +71 -14
- package/dist/wandelscriptUtils-dUlZrOhy.cjs.map +1 -0
- package/package.json +7 -7
- package/src/index.ts +7 -7
- package/src/lib/AutoReconnectingWebsocket.ts +8 -3
- package/src/lib/{v2/Nova.ts → Nova.ts} +21 -11
- package/src/lib/deprecated/v1/ConnectedMotionGroup.ts +42 -16
- package/src/lib/deprecated/v1/JoggerConnection.ts +13 -7
- package/src/lib/deprecated/v1/MotionStreamConnection.ts +21 -9
- package/src/lib/deprecated/v1/NovaCellAPIClient.ts +65 -44
- package/src/lib/deprecated/v1/NovaClient.ts +10 -10
- package/src/lib/deprecated/v1/ProgramStateConnection.ts +8 -5
- package/src/lib/deprecated/v1/getLatestTrajectories.ts +1 -1
- package/src/lib/deprecated/v1/mock/MockNovaInstance.ts +1 -1
- package/src/lib/deprecated/v2/NovaCellAPIClient.ts +72 -51
- package/src/lib/deprecated/v2/NovaClient.ts +8 -8
- package/src/lib/errorHandling.ts +1 -1
- package/src/lib/{v2/mock → mock}/MockNovaInstance.ts +8 -8
- package/src/v1/index.ts +14 -0
- package/src/v2/index.ts +7 -0
- package/dist/AutoReconnectingWebsocket-DNOF9mpz.d.cts.map +0 -1
- package/dist/AutoReconnectingWebsocket-DNOF9mpz.d.mts.map +0 -1
- package/dist/context-BQk3xGAI.mjs.map +0 -1
- package/dist/context-Dmy8AyY7.cjs.map +0 -1
- package/dist/lib/deprecated/v1/index.cjs.map +0 -1
- package/dist/lib/deprecated/v1/index.d.cts.map +0 -1
- package/dist/lib/deprecated/v1/index.d.mts.map +0 -1
- package/dist/lib/deprecated/v1/index.mjs.map +0 -1
- package/dist/lib/v2/index.cjs.map +0 -1
- package/dist/lib/v2/index.d.cts.map +0 -1
- package/dist/lib/v2/index.d.mts.map +0 -1
- package/dist/lib/v2/index.mjs.map +0 -1
- package/dist/wandelscriptUtils-1A9uFPV_.d.cts.map +0 -1
- package/dist/wandelscriptUtils-BDdIFHPD.mjs.map +0 -1
- package/dist/wandelscriptUtils-BUUwGZNr.cjs.map +0 -1
- package/dist/wandelscriptUtils-pySXnBlX.d.mts.map +0 -1
- package/src/lib/deprecated/v1/index.ts +0 -14
- package/src/lib/v2/index.ts +0 -7
- /package/src/{LoginWithAuth0.ts → lib/LoginWithAuth0.ts} +0 -0
- /package/src/lib/{v2/NovaAPIClient.ts → NovaAPIClient.ts} +0 -0
- /package/src/lib/{v2/mock → mock}/getCurrentRobotControllerState.ts +0 -0
- /package/src/lib/{v2/mock → mock}/getMotionGroupDescription.ts +0 -0
- /package/src/lib/{v2/mock → mock}/getMotionGroupKinematicModel.ts +0 -0
- /package/src/lib/{v2/mock → mock}/getRobotController.ts +0 -0
- /package/src/lib/{v2/mock → mock}/listCoordinateSystems.ts +0 -0
- /package/src/lib/{v2/mock → mock}/listRobotControllers.ts +0 -0
package/dist/{AutoReconnectingWebsocket-DNOF9mpz.d.cts → AutoReconnectingWebsocket-1K2J1NA4.d.cts}
RENAMED
|
@@ -13,7 +13,7 @@ declare class MockNovaInstance$1 {
|
|
|
13
13
|
handleWebsocketMessage(socket: AutoReconnectingWebsocket, message: string): void;
|
|
14
14
|
}
|
|
15
15
|
//#endregion
|
|
16
|
-
//#region src/lib/
|
|
16
|
+
//#region src/lib/mock/MockNovaInstance.d.ts
|
|
17
17
|
/**
|
|
18
18
|
* Ultra-simplified mock Nova server for testing stuff
|
|
19
19
|
*/
|
|
@@ -26,13 +26,13 @@ declare class MockNovaInstance {
|
|
|
26
26
|
//#endregion
|
|
27
27
|
//#region src/lib/AutoReconnectingWebsocket.d.ts
|
|
28
28
|
declare class AutoReconnectingWebsocket extends ReconnectingWebSocket {
|
|
29
|
+
receivedFirstMessage?: MessageEvent;
|
|
30
|
+
targetUrl: string;
|
|
31
|
+
disposed: boolean;
|
|
29
32
|
readonly opts: {
|
|
30
33
|
mock?: MockNovaInstance$1 | MockNovaInstance;
|
|
31
34
|
onDispose?: () => void;
|
|
32
35
|
};
|
|
33
|
-
receivedFirstMessage?: MessageEvent;
|
|
34
|
-
targetUrl: string;
|
|
35
|
-
disposed: boolean;
|
|
36
36
|
constructor(targetUrl: string, opts?: {
|
|
37
37
|
mock?: MockNovaInstance$1 | MockNovaInstance;
|
|
38
38
|
onDispose?: () => void;
|
|
@@ -66,4 +66,4 @@ declare class AutoReconnectingWebsocket extends ReconnectingWebSocket {
|
|
|
66
66
|
}
|
|
67
67
|
//#endregion
|
|
68
68
|
export { MockNovaInstance as n, MockNovaInstance$1 as r, AutoReconnectingWebsocket as t };
|
|
69
|
-
//# sourceMappingURL=AutoReconnectingWebsocket-
|
|
69
|
+
//# sourceMappingURL=AutoReconnectingWebsocket-1K2J1NA4.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoReconnectingWebsocket-1K2J1NA4.d.cts","names":[],"sources":["../src/lib/deprecated/v1/mock/MockNovaInstance.ts","../src/lib/mock/MockNovaInstance.ts","../src/lib/AutoReconnectingWebsocket.ts"],"mappings":";;;;;;AAgBA;;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;cCDa,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;EAC7C,oBAAA,GAAuB,YAAA;EACvB,SAAA;EACA,QAAA;EAAA,SACS,IAAA;IACP,IAAA,GAAO,kBAAA,GAAsB,gBAAA;IAC7B,SAAA;EAAA;cAIA,SAAA,UACA,IAAA;IACE,IAAA,GAAO,kBAAA,GAAsB,gBAAA;IAC7B,SAAA;EAAA;EA6CJ,SAAA,CAAU,SAAA;EAMV,QAAA,CAAS,IAAA;EFjDH;;;;EE6DN,OAAA;EFq4BA;;;EE13BM,MAAA,IAAM,OAAA;EF4lCmB;;;EE9kCzB,MAAA,IAAM,OAAA;EF8kC6D;;;;ACxqC3E;EC0GQ,YAAA,IAAY,OAAA,CAAA,YAAA;;;;;EA4BZ,WAAA,IAAW,OAAA,CAAA,YAAA;AAAA"}
|
package/dist/{AutoReconnectingWebsocket-DNOF9mpz.d.mts → AutoReconnectingWebsocket-1K2J1NA4.d.mts}
RENAMED
|
@@ -13,7 +13,7 @@ declare class MockNovaInstance$1 {
|
|
|
13
13
|
handleWebsocketMessage(socket: AutoReconnectingWebsocket, message: string): void;
|
|
14
14
|
}
|
|
15
15
|
//#endregion
|
|
16
|
-
//#region src/lib/
|
|
16
|
+
//#region src/lib/mock/MockNovaInstance.d.ts
|
|
17
17
|
/**
|
|
18
18
|
* Ultra-simplified mock Nova server for testing stuff
|
|
19
19
|
*/
|
|
@@ -26,13 +26,13 @@ declare class MockNovaInstance {
|
|
|
26
26
|
//#endregion
|
|
27
27
|
//#region src/lib/AutoReconnectingWebsocket.d.ts
|
|
28
28
|
declare class AutoReconnectingWebsocket extends ReconnectingWebSocket {
|
|
29
|
+
receivedFirstMessage?: MessageEvent;
|
|
30
|
+
targetUrl: string;
|
|
31
|
+
disposed: boolean;
|
|
29
32
|
readonly opts: {
|
|
30
33
|
mock?: MockNovaInstance$1 | MockNovaInstance;
|
|
31
34
|
onDispose?: () => void;
|
|
32
35
|
};
|
|
33
|
-
receivedFirstMessage?: MessageEvent;
|
|
34
|
-
targetUrl: string;
|
|
35
|
-
disposed: boolean;
|
|
36
36
|
constructor(targetUrl: string, opts?: {
|
|
37
37
|
mock?: MockNovaInstance$1 | MockNovaInstance;
|
|
38
38
|
onDispose?: () => void;
|
|
@@ -66,4 +66,4 @@ declare class AutoReconnectingWebsocket extends ReconnectingWebSocket {
|
|
|
66
66
|
}
|
|
67
67
|
//#endregion
|
|
68
68
|
export { MockNovaInstance as n, MockNovaInstance$1 as r, AutoReconnectingWebsocket as t };
|
|
69
|
-
//# sourceMappingURL=AutoReconnectingWebsocket-
|
|
69
|
+
//# sourceMappingURL=AutoReconnectingWebsocket-1K2J1NA4.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoReconnectingWebsocket-1K2J1NA4.d.mts","names":[],"sources":["../src/lib/deprecated/v1/mock/MockNovaInstance.ts","../src/lib/mock/MockNovaInstance.ts","../src/lib/AutoReconnectingWebsocket.ts"],"mappings":";;;;;;AAgBA;;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;cCDa,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;EAC7C,oBAAA,GAAuB,YAAA;EACvB,SAAA;EACA,QAAA;EAAA,SACS,IAAA;IACP,IAAA,GAAO,kBAAA,GAAsB,gBAAA;IAC7B,SAAA;EAAA;cAIA,SAAA,UACA,IAAA;IACE,IAAA,GAAO,kBAAA,GAAsB,gBAAA;IAC7B,SAAA;EAAA;EA6CJ,SAAA,CAAU,SAAA;EAMV,QAAA,CAAS,IAAA;EFjDH;;;;EE6DN,OAAA;EFq4BA;;;EE13BM,MAAA,IAAM,OAAA;EF4lCmB;;;EE9kCzB,MAAA,IAAM,OAAA;EF8kC6D;;;;ACxqC3E;EC0GQ,YAAA,IAAY,OAAA,CAAA,YAAA;;;;;EA4BZ,WAAA,IAAW,OAAA,CAAA,YAAA;AAAA"}
|
|
@@ -24,15 +24,18 @@ let reconnecting_websocket = require("reconnecting-websocket");
|
|
|
24
24
|
reconnecting_websocket = __toESM(reconnecting_websocket, 1);
|
|
25
25
|
//#region src/lib/AutoReconnectingWebsocket.ts
|
|
26
26
|
var AutoReconnectingWebsocket = class extends reconnecting_websocket.default {
|
|
27
|
+
receivedFirstMessage;
|
|
28
|
+
targetUrl;
|
|
29
|
+
disposed = false;
|
|
30
|
+
opts;
|
|
27
31
|
constructor(targetUrl, opts = {}) {
|
|
28
32
|
console.log("Opening websocket to", targetUrl);
|
|
29
33
|
super(() => this.targetUrl || targetUrl, void 0, { startClosed: true });
|
|
30
|
-
this.opts = opts;
|
|
31
|
-
this.disposed = false;
|
|
32
34
|
Object.defineProperty(this, "url", { get() {
|
|
33
35
|
return this.targetUrl;
|
|
34
36
|
} });
|
|
35
37
|
this.targetUrl = targetUrl;
|
|
38
|
+
this.opts = opts;
|
|
36
39
|
this.addEventListener("open", () => {
|
|
37
40
|
console.log(`Websocket to ${this.url} opened`);
|
|
38
41
|
});
|
|
@@ -142,9 +145,7 @@ var AutoReconnectingWebsocket = class extends reconnecting_websocket.default {
|
|
|
142
145
|
* checks and JSON parsing
|
|
143
146
|
*/
|
|
144
147
|
var AvailableStorage = class {
|
|
145
|
-
|
|
146
|
-
this.available = typeof window !== "undefined" && !!window.localStorage;
|
|
147
|
-
}
|
|
148
|
+
available = typeof window !== "undefined" && !!window.localStorage;
|
|
148
149
|
getJSON(key) {
|
|
149
150
|
if (!this.available) return null;
|
|
150
151
|
const result = window.localStorage.getItem(key);
|
|
@@ -258,7 +259,7 @@ const XYZ_TO_VECTOR = {
|
|
|
258
259
|
z: 2
|
|
259
260
|
};
|
|
260
261
|
//#endregion
|
|
261
|
-
//#region src/LoginWithAuth0.ts
|
|
262
|
+
//#region src/lib/LoginWithAuth0.ts
|
|
262
263
|
/**
|
|
263
264
|
* Mapping of stages to Auth0 configurations.
|
|
264
265
|
* The client ids are public identifiers for a specific auth0 application
|
|
@@ -422,4 +423,4 @@ Object.defineProperty(exports, "tryStringifyJson", {
|
|
|
422
423
|
}
|
|
423
424
|
});
|
|
424
425
|
|
|
425
|
-
//# sourceMappingURL=context-
|
|
426
|
+
//# sourceMappingURL=context-TPb5fGlK.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-TPb5fGlK.cjs","names":["ReconnectingWebSocket"],"sources":["../src/lib/AutoReconnectingWebsocket.ts","../src/lib/availableStorage.ts","../src/lib/converters.ts","../src/lib/LoginWithAuth0.ts","../src/lib/context.ts"],"sourcesContent":["import ReconnectingWebSocket, { type ErrorEvent } from \"reconnecting-websocket\"\nimport type * as v1 from \"./deprecated/v1/mock/MockNovaInstance.ts\"\nimport type * as v2 from \"./mock/MockNovaInstance.ts\"\n\nexport class AutoReconnectingWebsocket extends ReconnectingWebSocket {\n receivedFirstMessage?: MessageEvent\n targetUrl: string\n disposed = false\n readonly opts: {\n mock?: v1.MockNovaInstance | v2.MockNovaInstance\n onDispose?: () => void\n }\n\n constructor(\n targetUrl: string,\n opts: {\n mock?: v1.MockNovaInstance | v2.MockNovaInstance\n onDispose?: () => void\n } = {},\n ) {\n console.log(\"Opening websocket to\", targetUrl)\n\n super(() => this.targetUrl || targetUrl, undefined, {\n startClosed: true,\n })\n\n // Reconnecting websocket doesn't set this properly with startClosed\n Object.defineProperty(this, \"url\", {\n get() {\n return this.targetUrl\n },\n })\n\n this.targetUrl = targetUrl\n this.opts = opts\n\n this.addEventListener(\"open\", () => {\n console.log(`Websocket to ${this.url} opened`)\n })\n\n this.addEventListener(\"message\", (ev) => {\n if (!this.receivedFirstMessage) {\n this.receivedFirstMessage = ev\n }\n })\n\n this.addEventListener(\"close\", () => {\n console.log(`Websocket to ${this.url} closed`)\n })\n\n const origReconnect = this.reconnect\n this.reconnect = () => {\n if (this.opts.mock) {\n this.opts.mock.handleWebsocketConnection(this)\n } else {\n origReconnect.apply(this)\n }\n }\n\n this.reconnect()\n }\n\n changeUrl(targetUrl: string) {\n this.receivedFirstMessage = undefined\n this.targetUrl = targetUrl\n this.reconnect()\n }\n\n sendJson(data: unknown) {\n if (this.opts.mock) {\n this.opts.mock.handleWebsocketMessage(this, JSON.stringify(data))\n } else {\n this.send(JSON.stringify(data))\n }\n }\n\n /**\n * Permanently close this websocket and indicate that\n * this object should not be used again.\n **/\n dispose() {\n this.close()\n this.disposed = true\n if (this.opts.onDispose) {\n this.opts.onDispose()\n }\n }\n\n /**\n * Returns a promise that resolves once the websocket\n * is in the OPEN state. */\n async opened() {\n return new Promise<void>((resolve, reject) => {\n if (this.readyState === WebSocket.OPEN) {\n resolve()\n } else {\n this.addEventListener(\"open\", () => resolve())\n this.addEventListener(\"error\", reject)\n }\n })\n }\n\n /**\n * Returns a promise that resolves once the websocket\n * is in the CLOSED state. */\n async closed() {\n return new Promise<void>((resolve, reject) => {\n if (this.readyState === WebSocket.CLOSED) {\n resolve()\n } else {\n this.addEventListener(\"close\", () => resolve())\n this.addEventListener(\"error\", reject)\n }\n })\n }\n\n /**\n * Returns a promise that resolves when the first message\n * is received from the websocket. Resolves immediately if\n * the first message has already been received.\n */\n async firstMessage() {\n if (this.receivedFirstMessage) {\n return this.receivedFirstMessage\n }\n\n return new Promise<MessageEvent>((resolve, reject) => {\n const onMessage = (ev: MessageEvent) => {\n this.receivedFirstMessage = ev\n this.removeEventListener(\"message\", onMessage)\n this.removeEventListener(\"error\", onError)\n resolve(ev)\n }\n\n const onError = (ev: ErrorEvent) => {\n this.removeEventListener(\"message\", onMessage)\n this.removeEventListener(\"error\", onError)\n reject(ev)\n }\n\n this.addEventListener(\"message\", onMessage)\n this.addEventListener(\"error\", onError)\n })\n }\n\n /**\n * Returns a promise that resolves when the next message\n * is received from the websocket.\n */\n async nextMessage() {\n return new Promise<MessageEvent>((resolve, reject) => {\n const onMessage = (ev: MessageEvent) => {\n this.removeEventListener(\"message\", onMessage)\n this.removeEventListener(\"error\", onError)\n resolve(ev)\n }\n\n const onError = (ev: ErrorEvent) => {\n this.removeEventListener(\"message\", onMessage)\n this.removeEventListener(\"error\", onError)\n reject(ev)\n }\n\n this.addEventListener(\"message\", onMessage)\n this.addEventListener(\"error\", onError)\n })\n }\n}\n","/**\n * Safety wrapper around browser localStorage providing context availability\n * checks and JSON parsing\n */\nclass AvailableStorage {\n available = typeof window !== \"undefined\" && !!window.localStorage\n\n getJSON<T>(key: string): Partial<T> | null {\n if (!this.available) return null\n\n const result = window.localStorage.getItem(key)\n if (result === null) return null\n\n try {\n return JSON.parse(result)\n } catch (err) {\n return null\n }\n }\n\n setJSON(key: string, obj: unknown) {\n if (!this.available) return null\n\n window.localStorage.setItem(key, JSON.stringify(obj))\n }\n\n delete(key: string) {\n if (!this.available) return null\n\n window.localStorage.removeItem(key)\n }\n\n setString(key: string, value: string) {\n if (!this.available) return null\n\n window.localStorage.setItem(key, value)\n }\n\n getString(key: string): string | null {\n if (!this.available) return null\n\n return window.localStorage.getItem(key)\n }\n}\n\nexport const availableStorage = new AvailableStorage()\n","export type URLParseOptions = {\n /**\n * Ignore any scheme in the input string and force this scheme instead.\n */\n scheme?: \"http\" | \"https\"\n /**\n * If the input string does not include a scheme, use this as the default\n * scheme.\n */\n defaultScheme?: \"http\" | \"https\"\n}\n\n/**\n * Parse a string as a URL, with options to enforce or default the scheme.\n */\nexport function parseUrl(url: string, options: URLParseOptions = {}): URL {\n const { scheme, defaultScheme } = options\n\n const schemeRegex = /^[a-zA-Z]+:\\/\\//\n\n if (scheme) {\n // Force the scheme by removing any existing scheme and prepending the desired one\n url = url.replace(schemeRegex, \"\")\n url = `${scheme}://${url}`\n } else if (defaultScheme && !schemeRegex.test(url)) {\n // No scheme is present, add the default one\n url = `${defaultScheme}://${url}`\n }\n\n return new URL(url)\n}\n\n/**\n * Attempt to parse a string as a URL; return undefined if we can't\n */\nexport function tryParseUrl(\n url: string,\n options: URLParseOptions = {},\n): URL | undefined {\n try {\n return parseUrl(url, options)\n } catch {\n return undefined\n }\n}\n\n/**\n * Permissively parse a NOVA instance URL from a config variable.\n * If scheme is not specified, defaults to https for *.wandelbots.io hosts,\n * and http otherwise.\n * Throws an error if a valid URL could not be determined.\n */\nexport function parseNovaInstanceUrl(url: string): URL {\n const testUrl = tryParseUrl(url, { defaultScheme: \"http\" })\n if (testUrl?.host.endsWith(\".wandelbots.io\")) {\n return parseUrl(url, { defaultScheme: \"https\" })\n } else {\n return parseUrl(url, { defaultScheme: \"http\" })\n }\n}\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 * 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\n/**\n * Helpful const for converting {x, y, z} to [x, y, z] and vice versa\n */\nexport const XYZ_TO_VECTOR = { x: 0, y: 1, z: 2 }\n","/**\n * Mapping of stages to Auth0 configurations.\n * The client ids are public identifiers for a specific auth0 application\n * and are safe to include in client-side code.\n * https://auth0.com/docs/get-started/applications/application-settings\n */\nconst auth0ConfigMap = {\n dev: {\n domain: `https://auth.portal.dev.wandelbots.io`,\n clientId: \"fLbJD0RLp5r2Dpucm5j8BjwMR6Hunfha\",\n },\n stg: {\n domain: `https://auth.portal.stg.wandelbots.io`,\n clientId: \"joVDeD9e786WzFNSGCqoVq7HNkWt5j6s\",\n },\n prod: {\n domain: `https://auth.portal.wandelbots.io`,\n clientId: \"J7WJUi38xVQdJAEBNRT9Xw1b0fXDb4J2\",\n },\n}\n\n/** Determine which Auth0 configuration to use based on instance URL */\nexport const getAuth0Config = (instanceUrl: URL) => {\n if (instanceUrl.host.endsWith(\".dev.wandelbots.io\")) return auth0ConfigMap.dev\n if (instanceUrl.host.endsWith(\".stg.wandelbots.io\")) return auth0ConfigMap.stg\n if (instanceUrl.host.endsWith(\".wandelbots.io\")) return auth0ConfigMap.prod\n throw new Error(\n `Unable to authenticate with NOVA instance \"${instanceUrl}\". Auth0 login is only supported for cloud instances with hosts of the form \"**.wandelbots.io\".`,\n )\n}\n\n/**\n * Initializes Auth0 login process using redirect if necessary and retrieves an access token.\n * Returns null when an access token should not be needed to authenticate (i.e. cookie auth\n * when deployed on the instance domain)\n */\nexport const loginWithAuth0 = async (\n instanceUrl: URL,\n): Promise<string | null> => {\n if (typeof window === \"undefined\") {\n throw new Error(\n `Access token must be set to use NovaClient when not in a browser environment.`,\n )\n }\n\n if (instanceUrl.origin === window.location.origin) {\n // When deployed on the instance itself, our auth is handled by cookies\n // and no access token is needed-- just need to reload the page and it'll\n // login again / set cookie as needed\n window.location.reload()\n throw new Error(\n \"Failed to reload page to get auth details, please refresh manually\",\n )\n }\n\n // If we're on localhost or another domain, we need to do the full oauth flow\n // Note this will ONLY work for origins which are whitelisted as a redirect_uri\n // in the auth0 config, currently\n const { Auth0Client } = await import(\"@auth0/auth0-spa-js\")\n\n const auth0Config = getAuth0Config(instanceUrl)\n\n const auth0Client = new Auth0Client({\n domain: auth0Config.domain,\n clientId: auth0Config.clientId ?? \"\",\n useRefreshTokens: false,\n authorizationParams: {\n audience: \"nova-api\",\n redirect_uri: window.location.origin,\n },\n })\n\n // If the URL includes a redirect result, handle it\n if (\n window.location.search.includes(\"code=\") &&\n window.location.search.includes(\"state=\")\n ) {\n const { appState } = await auth0Client.handleRedirectCallback()\n // Return to the URL the user was originally on before the redirect\n window.history.replaceState(\n {},\n document.title,\n appState?.returnTo || window.location.pathname,\n )\n } else {\n // Initiate login with redirect\n await auth0Client.loginWithRedirect()\n }\n\n // Once logged in, retrieve the access token silently\n const accessToken = await auth0Client.getTokenSilently()\n return accessToken\n}\n","// Some general checks about the context the nova-js code is running in\n\nexport const isBrowser = typeof window !== \"undefined\"\n\nexport const isLocalhostDev =\n isBrowser &&\n window.location.hostname === \"localhost\" &&\n process.env.NODE_ENV === \"development\"\n"],"mappings":"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"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import ReconnectingWebSocket from "reconnecting-websocket";
|
|
2
2
|
//#region src/lib/AutoReconnectingWebsocket.ts
|
|
3
3
|
var AutoReconnectingWebsocket = class extends ReconnectingWebSocket {
|
|
4
|
+
receivedFirstMessage;
|
|
5
|
+
targetUrl;
|
|
6
|
+
disposed = false;
|
|
7
|
+
opts;
|
|
4
8
|
constructor(targetUrl, opts = {}) {
|
|
5
9
|
console.log("Opening websocket to", targetUrl);
|
|
6
10
|
super(() => this.targetUrl || targetUrl, void 0, { startClosed: true });
|
|
7
|
-
this.opts = opts;
|
|
8
|
-
this.disposed = false;
|
|
9
11
|
Object.defineProperty(this, "url", { get() {
|
|
10
12
|
return this.targetUrl;
|
|
11
13
|
} });
|
|
12
14
|
this.targetUrl = targetUrl;
|
|
15
|
+
this.opts = opts;
|
|
13
16
|
this.addEventListener("open", () => {
|
|
14
17
|
console.log(`Websocket to ${this.url} opened`);
|
|
15
18
|
});
|
|
@@ -119,9 +122,7 @@ var AutoReconnectingWebsocket = class extends ReconnectingWebSocket {
|
|
|
119
122
|
* checks and JSON parsing
|
|
120
123
|
*/
|
|
121
124
|
var AvailableStorage = class {
|
|
122
|
-
|
|
123
|
-
this.available = typeof window !== "undefined" && !!window.localStorage;
|
|
124
|
-
}
|
|
125
|
+
available = typeof window !== "undefined" && !!window.localStorage;
|
|
125
126
|
getJSON(key) {
|
|
126
127
|
if (!this.available) return null;
|
|
127
128
|
const result = window.localStorage.getItem(key);
|
|
@@ -235,7 +236,7 @@ const XYZ_TO_VECTOR = {
|
|
|
235
236
|
z: 2
|
|
236
237
|
};
|
|
237
238
|
//#endregion
|
|
238
|
-
//#region src/LoginWithAuth0.ts
|
|
239
|
+
//#region src/lib/LoginWithAuth0.ts
|
|
239
240
|
/**
|
|
240
241
|
* Mapping of stages to Auth0 configurations.
|
|
241
242
|
* The client ids are public identifiers for a specific auth0 application
|
|
@@ -298,4 +299,4 @@ const isLocalhostDev = isBrowser && window.location.hostname === "localhost" &&
|
|
|
298
299
|
//#endregion
|
|
299
300
|
export { XYZ_TO_VECTOR as a, makeUrlQueryString as c, radiansToDegrees as d, tryParseJson as f, AutoReconnectingWebsocket as g, availableStorage as h, loginWithAuth0 as i, parseNovaInstanceUrl as l, tryStringifyJson as m, isLocalhostDev as n, degreesToRadians as o, tryParseUrl as p, getAuth0Config as r, isSameCoordinateSystem as s, isBrowser as t, parseUrl as u };
|
|
300
301
|
|
|
301
|
-
//# sourceMappingURL=context-
|
|
302
|
+
//# sourceMappingURL=context-kT2C20EX.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-kT2C20EX.mjs","names":[],"sources":["../src/lib/AutoReconnectingWebsocket.ts","../src/lib/availableStorage.ts","../src/lib/converters.ts","../src/lib/LoginWithAuth0.ts","../src/lib/context.ts"],"sourcesContent":["import ReconnectingWebSocket, { type ErrorEvent } from \"reconnecting-websocket\"\nimport type * as v1 from \"./deprecated/v1/mock/MockNovaInstance.ts\"\nimport type * as v2 from \"./mock/MockNovaInstance.ts\"\n\nexport class AutoReconnectingWebsocket extends ReconnectingWebSocket {\n receivedFirstMessage?: MessageEvent\n targetUrl: string\n disposed = false\n readonly opts: {\n mock?: v1.MockNovaInstance | v2.MockNovaInstance\n onDispose?: () => void\n }\n\n constructor(\n targetUrl: string,\n opts: {\n mock?: v1.MockNovaInstance | v2.MockNovaInstance\n onDispose?: () => void\n } = {},\n ) {\n console.log(\"Opening websocket to\", targetUrl)\n\n super(() => this.targetUrl || targetUrl, undefined, {\n startClosed: true,\n })\n\n // Reconnecting websocket doesn't set this properly with startClosed\n Object.defineProperty(this, \"url\", {\n get() {\n return this.targetUrl\n },\n })\n\n this.targetUrl = targetUrl\n this.opts = opts\n\n this.addEventListener(\"open\", () => {\n console.log(`Websocket to ${this.url} opened`)\n })\n\n this.addEventListener(\"message\", (ev) => {\n if (!this.receivedFirstMessage) {\n this.receivedFirstMessage = ev\n }\n })\n\n this.addEventListener(\"close\", () => {\n console.log(`Websocket to ${this.url} closed`)\n })\n\n const origReconnect = this.reconnect\n this.reconnect = () => {\n if (this.opts.mock) {\n this.opts.mock.handleWebsocketConnection(this)\n } else {\n origReconnect.apply(this)\n }\n }\n\n this.reconnect()\n }\n\n changeUrl(targetUrl: string) {\n this.receivedFirstMessage = undefined\n this.targetUrl = targetUrl\n this.reconnect()\n }\n\n sendJson(data: unknown) {\n if (this.opts.mock) {\n this.opts.mock.handleWebsocketMessage(this, JSON.stringify(data))\n } else {\n this.send(JSON.stringify(data))\n }\n }\n\n /**\n * Permanently close this websocket and indicate that\n * this object should not be used again.\n **/\n dispose() {\n this.close()\n this.disposed = true\n if (this.opts.onDispose) {\n this.opts.onDispose()\n }\n }\n\n /**\n * Returns a promise that resolves once the websocket\n * is in the OPEN state. */\n async opened() {\n return new Promise<void>((resolve, reject) => {\n if (this.readyState === WebSocket.OPEN) {\n resolve()\n } else {\n this.addEventListener(\"open\", () => resolve())\n this.addEventListener(\"error\", reject)\n }\n })\n }\n\n /**\n * Returns a promise that resolves once the websocket\n * is in the CLOSED state. */\n async closed() {\n return new Promise<void>((resolve, reject) => {\n if (this.readyState === WebSocket.CLOSED) {\n resolve()\n } else {\n this.addEventListener(\"close\", () => resolve())\n this.addEventListener(\"error\", reject)\n }\n })\n }\n\n /**\n * Returns a promise that resolves when the first message\n * is received from the websocket. Resolves immediately if\n * the first message has already been received.\n */\n async firstMessage() {\n if (this.receivedFirstMessage) {\n return this.receivedFirstMessage\n }\n\n return new Promise<MessageEvent>((resolve, reject) => {\n const onMessage = (ev: MessageEvent) => {\n this.receivedFirstMessage = ev\n this.removeEventListener(\"message\", onMessage)\n this.removeEventListener(\"error\", onError)\n resolve(ev)\n }\n\n const onError = (ev: ErrorEvent) => {\n this.removeEventListener(\"message\", onMessage)\n this.removeEventListener(\"error\", onError)\n reject(ev)\n }\n\n this.addEventListener(\"message\", onMessage)\n this.addEventListener(\"error\", onError)\n })\n }\n\n /**\n * Returns a promise that resolves when the next message\n * is received from the websocket.\n */\n async nextMessage() {\n return new Promise<MessageEvent>((resolve, reject) => {\n const onMessage = (ev: MessageEvent) => {\n this.removeEventListener(\"message\", onMessage)\n this.removeEventListener(\"error\", onError)\n resolve(ev)\n }\n\n const onError = (ev: ErrorEvent) => {\n this.removeEventListener(\"message\", onMessage)\n this.removeEventListener(\"error\", onError)\n reject(ev)\n }\n\n this.addEventListener(\"message\", onMessage)\n this.addEventListener(\"error\", onError)\n })\n }\n}\n","/**\n * Safety wrapper around browser localStorage providing context availability\n * checks and JSON parsing\n */\nclass AvailableStorage {\n available = typeof window !== \"undefined\" && !!window.localStorage\n\n getJSON<T>(key: string): Partial<T> | null {\n if (!this.available) return null\n\n const result = window.localStorage.getItem(key)\n if (result === null) return null\n\n try {\n return JSON.parse(result)\n } catch (err) {\n return null\n }\n }\n\n setJSON(key: string, obj: unknown) {\n if (!this.available) return null\n\n window.localStorage.setItem(key, JSON.stringify(obj))\n }\n\n delete(key: string) {\n if (!this.available) return null\n\n window.localStorage.removeItem(key)\n }\n\n setString(key: string, value: string) {\n if (!this.available) return null\n\n window.localStorage.setItem(key, value)\n }\n\n getString(key: string): string | null {\n if (!this.available) return null\n\n return window.localStorage.getItem(key)\n }\n}\n\nexport const availableStorage = new AvailableStorage()\n","export type URLParseOptions = {\n /**\n * Ignore any scheme in the input string and force this scheme instead.\n */\n scheme?: \"http\" | \"https\"\n /**\n * If the input string does not include a scheme, use this as the default\n * scheme.\n */\n defaultScheme?: \"http\" | \"https\"\n}\n\n/**\n * Parse a string as a URL, with options to enforce or default the scheme.\n */\nexport function parseUrl(url: string, options: URLParseOptions = {}): URL {\n const { scheme, defaultScheme } = options\n\n const schemeRegex = /^[a-zA-Z]+:\\/\\//\n\n if (scheme) {\n // Force the scheme by removing any existing scheme and prepending the desired one\n url = url.replace(schemeRegex, \"\")\n url = `${scheme}://${url}`\n } else if (defaultScheme && !schemeRegex.test(url)) {\n // No scheme is present, add the default one\n url = `${defaultScheme}://${url}`\n }\n\n return new URL(url)\n}\n\n/**\n * Attempt to parse a string as a URL; return undefined if we can't\n */\nexport function tryParseUrl(\n url: string,\n options: URLParseOptions = {},\n): URL | undefined {\n try {\n return parseUrl(url, options)\n } catch {\n return undefined\n }\n}\n\n/**\n * Permissively parse a NOVA instance URL from a config variable.\n * If scheme is not specified, defaults to https for *.wandelbots.io hosts,\n * and http otherwise.\n * Throws an error if a valid URL could not be determined.\n */\nexport function parseNovaInstanceUrl(url: string): URL {\n const testUrl = tryParseUrl(url, { defaultScheme: \"http\" })\n if (testUrl?.host.endsWith(\".wandelbots.io\")) {\n return parseUrl(url, { defaultScheme: \"https\" })\n } else {\n return parseUrl(url, { defaultScheme: \"http\" })\n }\n}\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 * 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\n/**\n * Helpful const for converting {x, y, z} to [x, y, z] and vice versa\n */\nexport const XYZ_TO_VECTOR = { x: 0, y: 1, z: 2 }\n","/**\n * Mapping of stages to Auth0 configurations.\n * The client ids are public identifiers for a specific auth0 application\n * and are safe to include in client-side code.\n * https://auth0.com/docs/get-started/applications/application-settings\n */\nconst auth0ConfigMap = {\n dev: {\n domain: `https://auth.portal.dev.wandelbots.io`,\n clientId: \"fLbJD0RLp5r2Dpucm5j8BjwMR6Hunfha\",\n },\n stg: {\n domain: `https://auth.portal.stg.wandelbots.io`,\n clientId: \"joVDeD9e786WzFNSGCqoVq7HNkWt5j6s\",\n },\n prod: {\n domain: `https://auth.portal.wandelbots.io`,\n clientId: \"J7WJUi38xVQdJAEBNRT9Xw1b0fXDb4J2\",\n },\n}\n\n/** Determine which Auth0 configuration to use based on instance URL */\nexport const getAuth0Config = (instanceUrl: URL) => {\n if (instanceUrl.host.endsWith(\".dev.wandelbots.io\")) return auth0ConfigMap.dev\n if (instanceUrl.host.endsWith(\".stg.wandelbots.io\")) return auth0ConfigMap.stg\n if (instanceUrl.host.endsWith(\".wandelbots.io\")) return auth0ConfigMap.prod\n throw new Error(\n `Unable to authenticate with NOVA instance \"${instanceUrl}\". Auth0 login is only supported for cloud instances with hosts of the form \"**.wandelbots.io\".`,\n )\n}\n\n/**\n * Initializes Auth0 login process using redirect if necessary and retrieves an access token.\n * Returns null when an access token should not be needed to authenticate (i.e. cookie auth\n * when deployed on the instance domain)\n */\nexport const loginWithAuth0 = async (\n instanceUrl: URL,\n): Promise<string | null> => {\n if (typeof window === \"undefined\") {\n throw new Error(\n `Access token must be set to use NovaClient when not in a browser environment.`,\n )\n }\n\n if (instanceUrl.origin === window.location.origin) {\n // When deployed on the instance itself, our auth is handled by cookies\n // and no access token is needed-- just need to reload the page and it'll\n // login again / set cookie as needed\n window.location.reload()\n throw new Error(\n \"Failed to reload page to get auth details, please refresh manually\",\n )\n }\n\n // If we're on localhost or another domain, we need to do the full oauth flow\n // Note this will ONLY work for origins which are whitelisted as a redirect_uri\n // in the auth0 config, currently\n const { Auth0Client } = await import(\"@auth0/auth0-spa-js\")\n\n const auth0Config = getAuth0Config(instanceUrl)\n\n const auth0Client = new Auth0Client({\n domain: auth0Config.domain,\n clientId: auth0Config.clientId ?? \"\",\n useRefreshTokens: false,\n authorizationParams: {\n audience: \"nova-api\",\n redirect_uri: window.location.origin,\n },\n })\n\n // If the URL includes a redirect result, handle it\n if (\n window.location.search.includes(\"code=\") &&\n window.location.search.includes(\"state=\")\n ) {\n const { appState } = await auth0Client.handleRedirectCallback()\n // Return to the URL the user was originally on before the redirect\n window.history.replaceState(\n {},\n document.title,\n appState?.returnTo || window.location.pathname,\n )\n } else {\n // Initiate login with redirect\n await auth0Client.loginWithRedirect()\n }\n\n // Once logged in, retrieve the access token silently\n const accessToken = await auth0Client.getTokenSilently()\n return accessToken\n}\n","// Some general checks about the context the nova-js code is running in\n\nexport const isBrowser = typeof window !== \"undefined\"\n\nexport const isLocalhostDev =\n isBrowser &&\n window.location.hostname === \"localhost\" &&\n process.env.NODE_ENV === \"development\"\n"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_context = require("./context-
|
|
3
|
-
const require_wandelscriptUtils = require("./wandelscriptUtils-
|
|
2
|
+
const require_context = require("./context-TPb5fGlK.cjs");
|
|
3
|
+
const require_wandelscriptUtils = require("./wandelscriptUtils-dUlZrOhy.cjs");
|
|
4
4
|
let axios = require("axios");
|
|
5
5
|
//#region src/lib/errorHandling.ts
|
|
6
6
|
function delay(ms) {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["tryStringifyJson"],"sources":["../src/lib/errorHandling.ts"],"sourcesContent":["import { isAxiosError } from \"axios\"\nimport { tryStringifyJson } from \"./converters\"\n\nexport function delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * @deprecated Use makeErrorMessage instead and truncate the error for display as needed, or make a situation-specific localized error message based on a response code\n */\nexport function makeShortErrorMessage(err: unknown) {\n return makeErrorMessage(err)\n}\n\n/**\n * Attempts to make a helpful error message from an unknown thrown error\n * or promise rejection.\n *\n * This function is mainly to aid debugging and good bug reports. For\n * expected errors encountered by end users, it's more ideal to catch\n * the specific error code and provide a localized app-specific error message.\n */\nexport function makeErrorMessage(err: unknown): string {\n if (isAxiosError(err)) {\n if (err.response) {\n return `${err.response?.status} ${err.response?.statusText} from ${err.response?.config.method?.toUpperCase() || \"accessing\"} ${err.response?.config.url}: ${JSON.stringify(err.response?.data)}`\n } else if (err.config) {\n if (err.code === \"ERR_NETWORK\") {\n return `${err.message} from ${err.config.method?.toUpperCase() || \"accessing\"} ${err.config.url}. This error can happen because of either connection issues or server CORS policy.`\n } else {\n return `${err.message} from ${err.config.method?.toUpperCase() || \"accessing\"} ${err.config.url}`\n }\n }\n } else if (err instanceof Error) {\n return err.message\n } else if (typeof err === \"string\") {\n return err\n } else if (typeof err === \"object\") {\n return tryStringifyJson(err) || `Unserializable object ${err}`\n }\n\n return `${err}`\n}\n"],"mappings":";;;;;AAGA,SAAgB,MAAM,IAAY;CAChC,OAAO,IAAI,SAAS,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;;;;AAKA,SAAgB,sBAAsB,KAAc;CAClD,OAAO,iBAAiB,GAAG;AAC7B;;;;;;;;;AAUA,SAAgB,iBAAiB,KAAsB;CACrD,KAAA,GAAA,MAAA,cAAiB,GAAG;MACd,IAAI,UACN,OAAO,GAAG,IAAI,UAAU,OAAO,GAAG,IAAI,UAAU,WAAW,QAAQ,IAAI,UAAU,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,UAAU,OAAO,IAAI,IAAI,KAAK,UAAU,IAAI,UAAU,IAAI;OACzL,IAAI,IAAI,QACb,IAAI,IAAI,SAAS,eACf,OAAO,GAAG,IAAI,QAAQ,QAAQ,IAAI,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,OAAO,IAAI;OAEhG,OAAO,GAAG,IAAI,QAAQ,QAAQ,IAAI,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,OAAO;CAAA,OAG3F,IAAI,eAAe,OACxB,OAAO,IAAI;MACN,IAAI,OAAO,QAAQ,UACxB,OAAO;MACF,IAAI,OAAO,QAAQ,UACxB,OAAOA,gBAAAA,iBAAiB,GAAG,KAAK,yBAAyB;CAG3D,OAAO,GAAG;AACZ"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["tryStringifyJson"],"sources":["../src/lib/errorHandling.ts"],"sourcesContent":["import { isAxiosError } from \"axios\"\nimport { tryStringifyJson } from \"./converters.ts\"\n\nexport function delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * @deprecated Use makeErrorMessage instead and truncate the error for display as needed, or make a situation-specific localized error message based on a response code\n */\nexport function makeShortErrorMessage(err: unknown) {\n return makeErrorMessage(err)\n}\n\n/**\n * Attempts to make a helpful error message from an unknown thrown error\n * or promise rejection.\n *\n * This function is mainly to aid debugging and good bug reports. For\n * expected errors encountered by end users, it's more ideal to catch\n * the specific error code and provide a localized app-specific error message.\n */\nexport function makeErrorMessage(err: unknown): string {\n if (isAxiosError(err)) {\n if (err.response) {\n return `${err.response?.status} ${err.response?.statusText} from ${err.response?.config.method?.toUpperCase() || \"accessing\"} ${err.response?.config.url}: ${JSON.stringify(err.response?.data)}`\n } else if (err.config) {\n if (err.code === \"ERR_NETWORK\") {\n return `${err.message} from ${err.config.method?.toUpperCase() || \"accessing\"} ${err.config.url}. This error can happen because of either connection issues or server CORS policy.`\n } else {\n return `${err.message} from ${err.config.method?.toUpperCase() || \"accessing\"} ${err.config.url}`\n }\n }\n } else if (err instanceof Error) {\n return err.message\n } else if (typeof err === \"string\") {\n return err\n } else if (typeof err === \"object\") {\n return tryStringifyJson(err) || `Unserializable object ${err}`\n }\n\n return `${err}`\n}\n"],"mappings":";;;;;AAGA,SAAgB,MAAM,IAAY;CAChC,OAAO,IAAI,SAAS,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;;;;AAKA,SAAgB,sBAAsB,KAAc;CAClD,OAAO,iBAAiB,GAAG;AAC7B;;;;;;;;;AAUA,SAAgB,iBAAiB,KAAsB;CACrD,KAAA,GAAA,MAAA,cAAiB,GAAG;MACd,IAAI,UACN,OAAO,GAAG,IAAI,UAAU,OAAO,GAAG,IAAI,UAAU,WAAW,QAAQ,IAAI,UAAU,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,UAAU,OAAO,IAAI,IAAI,KAAK,UAAU,IAAI,UAAU,IAAI;OACzL,IAAI,IAAI,QACb,IAAI,IAAI,SAAS,eACf,OAAO,GAAG,IAAI,QAAQ,QAAQ,IAAI,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,OAAO,IAAI;OAEhG,OAAO,GAAG,IAAI,QAAQ,QAAQ,IAAI,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,OAAO;CAAA,OAG3F,IAAI,eAAe,OACxB,OAAO,IAAI;MACN,IAAI,OAAO,QAAQ,UACxB,OAAO;MACF,IAAI,OAAO,QAAQ,UACxB,OAAOA,gBAAAA,iBAAiB,GAAG,KAAK,yBAAyB;CAG3D,OAAO,GAAG;AACZ"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as AutoReconnectingWebsocket } from "./AutoReconnectingWebsocket-
|
|
2
|
-
import { n as NovaClient, r as NovaClientConfig, t as poseToWandelscriptString } from "./wandelscriptUtils-
|
|
1
|
+
import { t as AutoReconnectingWebsocket } from "./AutoReconnectingWebsocket-1K2J1NA4.cjs";
|
|
2
|
+
import { n as NovaClient, r as NovaClientConfig, t as poseToWandelscriptString } from "./wandelscriptUtils-DY3WsiuB.cjs";
|
|
3
3
|
|
|
4
4
|
//#region src/lib/availableStorage.d.ts
|
|
5
5
|
/**
|
|
@@ -87,7 +87,7 @@ declare function makeShortErrorMessage(err: unknown): string;
|
|
|
87
87
|
*/
|
|
88
88
|
declare function makeErrorMessage(err: unknown): string;
|
|
89
89
|
//#endregion
|
|
90
|
-
//#region src/LoginWithAuth0.d.ts
|
|
90
|
+
//#region src/lib/LoginWithAuth0.d.ts
|
|
91
91
|
/** Determine which Auth0 configuration to use based on instance URL */
|
|
92
92
|
declare const getAuth0Config: (instanceUrl: URL) => {
|
|
93
93
|
domain: string;
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/lib/availableStorage.ts","../src/lib/converters.ts","../src/lib/errorHandling.ts","../src/LoginWithAuth0.ts"],"mappings":";;;;;;;;cAIM,gBAAA;EACJ,SAAA;EAEA,OAAA,IAAW,GAAA,WAAc,OAAO,CAAC,CAAA;EAajC,OAAA,CAAQ,GAAA,UAAa,GAAA;EAMrB,MAAA,CAAO,GAAA;EAMP,SAAA,CAAU,GAAA,UAAa,KAAA;EAMvB,SAAA,CAAU,GAAA;AAAA;AAAA,cAOC,gBAAA,EAAgB,gBAAyB;;;KC7C1C,eAAA;;;;EAIV,MAAA;EDAoB;;;;ECKpB,aAAa;AAAA;;;;iBAMC,QAAA,CAAS,GAAA,UAAa,OAAA,GAAS,eAAA,GAAuB,GAAG;;;;iBAoBzD,WAAA,CACd,GAAA,UACA,OAAA,GAAS,eAAA,GACR,GAAG;;;;;;;iBAcU,oBAAA,CAAqB,GAAA,WAAc,GAAG;ADPtD;AAAA,iBCkBgB,YAAA,CAAa,IAAa;;iBAS1B,gBAAA,CAAiB,IAAa;AD3BQ;;;;AC7CtD;AD6CsD,iBCwCtC,kBAAA,CAAmB,GAA2B,EAAtB,MAAM;;iBAM9B,gBAAA,CAAiB,OAAe;AAlFjC;AAAA,iBAuFC,gBAAA,CAAiB,OAAe;;;;;iBAQhC,sBAAA,CACd,gBAAA,sBACA,iBAAqC;;;;cAW1B,aAAA;;;;;;;iBClHG,KAAA,CAAM,EAAA,WAAU,OAAA;;;;iBAOhB,qBAAA,CAAsB,GAAY;;;;;;;;;iBAYlC,gBAAA,CAAiB,GAAY;;;;cCAhC,cAAA,GAAkB,WAAA,EAAa,GAAG;;;;;;;;;cAclC,cAAA,GACX,WAAA,EAAa,GAAA,KACZ,OAAO"}
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/lib/availableStorage.ts","../src/lib/converters.ts","../src/lib/errorHandling.ts","../src/lib/LoginWithAuth0.ts"],"mappings":";;;;;;;;cAIM,gBAAA;EACJ,SAAA;EAEA,OAAA,IAAW,GAAA,WAAc,OAAO,CAAC,CAAA;EAajC,OAAA,CAAQ,GAAA,UAAa,GAAA;EAMrB,MAAA,CAAO,GAAA;EAMP,SAAA,CAAU,GAAA,UAAa,KAAA;EAMvB,SAAA,CAAU,GAAA;AAAA;AAAA,cAOC,gBAAA,EAAgB,gBAAyB;;;KC7C1C,eAAA;;;;EAIV,MAAA;EDAoB;;;;ECKpB,aAAa;AAAA;;;;iBAMC,QAAA,CAAS,GAAA,UAAa,OAAA,GAAS,eAAA,GAAuB,GAAG;;;;iBAoBzD,WAAA,CACd,GAAA,UACA,OAAA,GAAS,eAAA,GACR,GAAG;;;;;;;iBAcU,oBAAA,CAAqB,GAAA,WAAc,GAAG;ADPtD;AAAA,iBCkBgB,YAAA,CAAa,IAAa;;iBAS1B,gBAAA,CAAiB,IAAa;AD3BQ;;;;AC7CtD;AD6CsD,iBCwCtC,kBAAA,CAAmB,GAA2B,EAAtB,MAAM;;iBAM9B,gBAAA,CAAiB,OAAe;AAlFjC;AAAA,iBAuFC,gBAAA,CAAiB,OAAe;;;;;iBAQhC,sBAAA,CACd,gBAAA,sBACA,iBAAqC;;;;cAW1B,aAAA;;;;;;;iBClHG,KAAA,CAAM,EAAA,WAAU,OAAA;;;;iBAOhB,qBAAA,CAAsB,GAAY;;;;;;;;;iBAYlC,gBAAA,CAAiB,GAAY;;;;cCAhC,cAAA,GAAkB,WAAA,EAAa,GAAG;;;;;;;;;cAclC,cAAA,GACX,WAAA,EAAa,GAAA,KACZ,OAAO"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as AutoReconnectingWebsocket } from "./AutoReconnectingWebsocket-
|
|
2
|
-
import { n as NovaClient, r as NovaClientConfig, t as poseToWandelscriptString } from "./wandelscriptUtils-
|
|
1
|
+
import { t as AutoReconnectingWebsocket } from "./AutoReconnectingWebsocket-1K2J1NA4.mjs";
|
|
2
|
+
import { n as NovaClient, r as NovaClientConfig, t as poseToWandelscriptString } from "./wandelscriptUtils-YHTxn_p9.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/lib/availableStorage.d.ts
|
|
5
5
|
/**
|
|
@@ -87,7 +87,7 @@ declare function makeShortErrorMessage(err: unknown): string;
|
|
|
87
87
|
*/
|
|
88
88
|
declare function makeErrorMessage(err: unknown): string;
|
|
89
89
|
//#endregion
|
|
90
|
-
//#region src/LoginWithAuth0.d.ts
|
|
90
|
+
//#region src/lib/LoginWithAuth0.d.ts
|
|
91
91
|
/** Determine which Auth0 configuration to use based on instance URL */
|
|
92
92
|
declare const getAuth0Config: (instanceUrl: URL) => {
|
|
93
93
|
domain: string;
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/lib/availableStorage.ts","../src/lib/converters.ts","../src/lib/errorHandling.ts","../src/LoginWithAuth0.ts"],"mappings":";;;;;;;;cAIM,gBAAA;EACJ,SAAA;EAEA,OAAA,IAAW,GAAA,WAAc,OAAO,CAAC,CAAA;EAajC,OAAA,CAAQ,GAAA,UAAa,GAAA;EAMrB,MAAA,CAAO,GAAA;EAMP,SAAA,CAAU,GAAA,UAAa,KAAA;EAMvB,SAAA,CAAU,GAAA;AAAA;AAAA,cAOC,gBAAA,EAAgB,gBAAyB;;;KC7C1C,eAAA;;;;EAIV,MAAA;EDAoB;;;;ECKpB,aAAa;AAAA;;;;iBAMC,QAAA,CAAS,GAAA,UAAa,OAAA,GAAS,eAAA,GAAuB,GAAG;;;;iBAoBzD,WAAA,CACd,GAAA,UACA,OAAA,GAAS,eAAA,GACR,GAAG;;;;;;;iBAcU,oBAAA,CAAqB,GAAA,WAAc,GAAG;ADPtD;AAAA,iBCkBgB,YAAA,CAAa,IAAa;;iBAS1B,gBAAA,CAAiB,IAAa;AD3BQ;;;;AC7CtD;AD6CsD,iBCwCtC,kBAAA,CAAmB,GAA2B,EAAtB,MAAM;;iBAM9B,gBAAA,CAAiB,OAAe;AAlFjC;AAAA,iBAuFC,gBAAA,CAAiB,OAAe;;;;;iBAQhC,sBAAA,CACd,gBAAA,sBACA,iBAAqC;;;;cAW1B,aAAA;;;;;;;iBClHG,KAAA,CAAM,EAAA,WAAU,OAAA;;;;iBAOhB,qBAAA,CAAsB,GAAY;;;;;;;;;iBAYlC,gBAAA,CAAiB,GAAY;;;;cCAhC,cAAA,GAAkB,WAAA,EAAa,GAAG;;;;;;;;;cAclC,cAAA,GACX,WAAA,EAAa,GAAA,KACZ,OAAO"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/lib/availableStorage.ts","../src/lib/converters.ts","../src/lib/errorHandling.ts","../src/lib/LoginWithAuth0.ts"],"mappings":";;;;;;;;cAIM,gBAAA;EACJ,SAAA;EAEA,OAAA,IAAW,GAAA,WAAc,OAAO,CAAC,CAAA;EAajC,OAAA,CAAQ,GAAA,UAAa,GAAA;EAMrB,MAAA,CAAO,GAAA;EAMP,SAAA,CAAU,GAAA,UAAa,KAAA;EAMvB,SAAA,CAAU,GAAA;AAAA;AAAA,cAOC,gBAAA,EAAgB,gBAAyB;;;KC7C1C,eAAA;;;;EAIV,MAAA;EDAoB;;;;ECKpB,aAAa;AAAA;;;;iBAMC,QAAA,CAAS,GAAA,UAAa,OAAA,GAAS,eAAA,GAAuB,GAAG;;;;iBAoBzD,WAAA,CACd,GAAA,UACA,OAAA,GAAS,eAAA,GACR,GAAG;;;;;;;iBAcU,oBAAA,CAAqB,GAAA,WAAc,GAAG;ADPtD;AAAA,iBCkBgB,YAAA,CAAa,IAAa;;iBAS1B,gBAAA,CAAiB,IAAa;AD3BQ;;;;AC7CtD;AD6CsD,iBCwCtC,kBAAA,CAAmB,GAA2B,EAAtB,MAAM;;iBAM9B,gBAAA,CAAiB,OAAe;AAlFjC;AAAA,iBAuFC,gBAAA,CAAiB,OAAe;;;;;iBAQhC,sBAAA,CACd,gBAAA,sBACA,iBAAqC;;;;cAW1B,aAAA;;;;;;;iBClHG,KAAA,CAAM,EAAA,WAAU,OAAA;;;;iBAOhB,qBAAA,CAAsB,GAAY;;;;;;;;;iBAYlC,gBAAA,CAAiB,GAAY;;;;cCAhC,cAAA,GAAkB,WAAA,EAAa,GAAG;;;;;;;;;cAclC,cAAA,GACX,WAAA,EAAa,GAAA,KACZ,OAAO"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as XYZ_TO_VECTOR, c as makeUrlQueryString, d as radiansToDegrees, f as tryParseJson, g as AutoReconnectingWebsocket, h as availableStorage, i as loginWithAuth0, l as parseNovaInstanceUrl, m as tryStringifyJson, o as degreesToRadians, p as tryParseUrl, r as getAuth0Config, s as isSameCoordinateSystem, u as parseUrl } from "./context-
|
|
2
|
-
import { n as NovaClient, t as poseToWandelscriptString } from "./wandelscriptUtils-
|
|
1
|
+
import { a as XYZ_TO_VECTOR, c as makeUrlQueryString, d as radiansToDegrees, f as tryParseJson, g as AutoReconnectingWebsocket, h as availableStorage, i as loginWithAuth0, l as parseNovaInstanceUrl, m as tryStringifyJson, o as degreesToRadians, p as tryParseUrl, r as getAuth0Config, s as isSameCoordinateSystem, u as parseUrl } from "./context-kT2C20EX.mjs";
|
|
2
|
+
import { n as NovaClient, t as poseToWandelscriptString } from "./wandelscriptUtils-CwtdZRDs.mjs";
|
|
3
3
|
import { isAxiosError } from "axios";
|
|
4
4
|
//#region src/lib/errorHandling.ts
|
|
5
5
|
function delay(ms) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/lib/errorHandling.ts"],"sourcesContent":["import { isAxiosError } from \"axios\"\nimport { tryStringifyJson } from \"./converters\"\n\nexport function delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * @deprecated Use makeErrorMessage instead and truncate the error for display as needed, or make a situation-specific localized error message based on a response code\n */\nexport function makeShortErrorMessage(err: unknown) {\n return makeErrorMessage(err)\n}\n\n/**\n * Attempts to make a helpful error message from an unknown thrown error\n * or promise rejection.\n *\n * This function is mainly to aid debugging and good bug reports. For\n * expected errors encountered by end users, it's more ideal to catch\n * the specific error code and provide a localized app-specific error message.\n */\nexport function makeErrorMessage(err: unknown): string {\n if (isAxiosError(err)) {\n if (err.response) {\n return `${err.response?.status} ${err.response?.statusText} from ${err.response?.config.method?.toUpperCase() || \"accessing\"} ${err.response?.config.url}: ${JSON.stringify(err.response?.data)}`\n } else if (err.config) {\n if (err.code === \"ERR_NETWORK\") {\n return `${err.message} from ${err.config.method?.toUpperCase() || \"accessing\"} ${err.config.url}. This error can happen because of either connection issues or server CORS policy.`\n } else {\n return `${err.message} from ${err.config.method?.toUpperCase() || \"accessing\"} ${err.config.url}`\n }\n }\n } else if (err instanceof Error) {\n return err.message\n } else if (typeof err === \"string\") {\n return err\n } else if (typeof err === \"object\") {\n return tryStringifyJson(err) || `Unserializable object ${err}`\n }\n\n return `${err}`\n}\n"],"mappings":";;;;AAGA,SAAgB,MAAM,IAAY;CAChC,OAAO,IAAI,SAAS,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;;;;AAKA,SAAgB,sBAAsB,KAAc;CAClD,OAAO,iBAAiB,GAAG;AAC7B;;;;;;;;;AAUA,SAAgB,iBAAiB,KAAsB;CACrD,IAAI,aAAa,GAAG;MACd,IAAI,UACN,OAAO,GAAG,IAAI,UAAU,OAAO,GAAG,IAAI,UAAU,WAAW,QAAQ,IAAI,UAAU,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,UAAU,OAAO,IAAI,IAAI,KAAK,UAAU,IAAI,UAAU,IAAI;OACzL,IAAI,IAAI,QACb,IAAI,IAAI,SAAS,eACf,OAAO,GAAG,IAAI,QAAQ,QAAQ,IAAI,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,OAAO,IAAI;OAEhG,OAAO,GAAG,IAAI,QAAQ,QAAQ,IAAI,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,OAAO;CAAA,OAG3F,IAAI,eAAe,OACxB,OAAO,IAAI;MACN,IAAI,OAAO,QAAQ,UACxB,OAAO;MACF,IAAI,OAAO,QAAQ,UACxB,OAAO,iBAAiB,GAAG,KAAK,yBAAyB;CAG3D,OAAO,GAAG;AACZ"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/lib/errorHandling.ts"],"sourcesContent":["import { isAxiosError } from \"axios\"\nimport { tryStringifyJson } from \"./converters.ts\"\n\nexport function delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * @deprecated Use makeErrorMessage instead and truncate the error for display as needed, or make a situation-specific localized error message based on a response code\n */\nexport function makeShortErrorMessage(err: unknown) {\n return makeErrorMessage(err)\n}\n\n/**\n * Attempts to make a helpful error message from an unknown thrown error\n * or promise rejection.\n *\n * This function is mainly to aid debugging and good bug reports. For\n * expected errors encountered by end users, it's more ideal to catch\n * the specific error code and provide a localized app-specific error message.\n */\nexport function makeErrorMessage(err: unknown): string {\n if (isAxiosError(err)) {\n if (err.response) {\n return `${err.response?.status} ${err.response?.statusText} from ${err.response?.config.method?.toUpperCase() || \"accessing\"} ${err.response?.config.url}: ${JSON.stringify(err.response?.data)}`\n } else if (err.config) {\n if (err.code === \"ERR_NETWORK\") {\n return `${err.message} from ${err.config.method?.toUpperCase() || \"accessing\"} ${err.config.url}. This error can happen because of either connection issues or server CORS policy.`\n } else {\n return `${err.message} from ${err.config.method?.toUpperCase() || \"accessing\"} ${err.config.url}`\n }\n }\n } else if (err instanceof Error) {\n return err.message\n } else if (typeof err === \"string\") {\n return err\n } else if (typeof err === \"object\") {\n return tryStringifyJson(err) || `Unserializable object ${err}`\n }\n\n return `${err}`\n}\n"],"mappings":";;;;AAGA,SAAgB,MAAM,IAAY;CAChC,OAAO,IAAI,SAAS,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;;;;AAKA,SAAgB,sBAAsB,KAAc;CAClD,OAAO,iBAAiB,GAAG;AAC7B;;;;;;;;;AAUA,SAAgB,iBAAiB,KAAsB;CACrD,IAAI,aAAa,GAAG;MACd,IAAI,UACN,OAAO,GAAG,IAAI,UAAU,OAAO,GAAG,IAAI,UAAU,WAAW,QAAQ,IAAI,UAAU,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,UAAU,OAAO,IAAI,IAAI,KAAK,UAAU,IAAI,UAAU,IAAI;OACzL,IAAI,IAAI,QACb,IAAI,IAAI,SAAS,eACf,OAAO,GAAG,IAAI,QAAQ,QAAQ,IAAI,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,OAAO,IAAI;OAEhG,OAAO,GAAG,IAAI,QAAQ,QAAQ,IAAI,OAAO,QAAQ,YAAY,KAAK,YAAY,GAAG,IAAI,OAAO;CAAA,OAG3F,IAAI,eAAe,OACxB,OAAO,IAAI;MACN,IAAI,OAAO,QAAQ,UACxB,OAAO;MACF,IAAI,OAAO,QAAQ,UACxB,OAAO,iBAAiB,GAAG,KAAK,yBAAyB;CAG3D,OAAO,GAAG;AACZ"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_context = require("
|
|
3
|
-
const require_wandelscriptUtils = require("
|
|
2
|
+
const require_context = require("../context-TPb5fGlK.cjs");
|
|
3
|
+
const require_wandelscriptUtils = require("../wandelscriptUtils-dUlZrOhy.cjs");
|
|
4
4
|
let axios = require("axios");
|
|
5
5
|
let mobx = require("mobx");
|
|
6
6
|
//#region src/lib/deprecated/v1/getLatestTrajectories.ts
|
|
@@ -39,12 +39,14 @@ let ProgramState = /* @__PURE__ */ function(ProgramState) {
|
|
|
39
39
|
* @deprecated
|
|
40
40
|
*/
|
|
41
41
|
var ProgramStateConnection = class {
|
|
42
|
+
currentProgram = {};
|
|
43
|
+
logs = [];
|
|
44
|
+
executionState = "idle";
|
|
45
|
+
currentlyExecutingProgramRunnerId = null;
|
|
46
|
+
programStateSocket;
|
|
47
|
+
nova;
|
|
42
48
|
constructor(nova) {
|
|
43
49
|
this.nova = nova;
|
|
44
|
-
this.currentProgram = {};
|
|
45
|
-
this.logs = [];
|
|
46
|
-
this.executionState = "idle";
|
|
47
|
-
this.currentlyExecutingProgramRunnerId = null;
|
|
48
50
|
(0, mobx.makeAutoObservable)(this, {}, { autoBind: true });
|
|
49
51
|
this.programStateSocket = nova.openReconnectingWebsocket(`/programs/state`);
|
|
50
52
|
this.programStateSocket.addEventListener("message", (ev) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["tryParseJson","AxiosError"],"sources":["../../src/lib/deprecated/v1/getLatestTrajectories.ts","../../src/lib/deprecated/v1/ProgramStateConnection.ts"],"sourcesContent":["import type { GetTrajectoryResponse } from \"@wandelbots/nova-api/v1\"\nimport type { NovaCellAPIClient } from \"./NovaCellAPIClient.ts\"\n\nlet lastMotionIds: Set<string> = new Set()\n\n/** @deprecated */\nexport async function getLatestTrajectories(\n apiClient: NovaCellAPIClient,\n sampleTime: number = 50,\n responsesCoordinateSystem?: string,\n): Promise<GetTrajectoryResponse[]> {\n const newTrajectories: GetTrajectoryResponse[] = []\n\n try {\n const motions = await apiClient.motion.listMotions()\n const currentMotionIds = new Set(motions.motions)\n\n const newMotionIds = Array.from(currentMotionIds).filter(\n (id) => !lastMotionIds.has(id),\n )\n\n for (const motionId of newMotionIds) {\n const trajectory = await apiClient.motion.getMotionTrajectory(\n motionId,\n sampleTime,\n responsesCoordinateSystem,\n )\n newTrajectories.push(trajectory)\n }\n\n lastMotionIds = currentMotionIds\n } catch (error) {\n console.error(\"Failed to get latest trajectories:\", error)\n }\n\n return newTrajectories\n}\n","/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type { CollectionValue } from \"@wandelbots/nova-api/v1\"\nimport { AxiosError } from \"axios\"\nimport { makeAutoObservable, runInAction } from \"mobx\"\nimport type { AutoReconnectingWebsocket } from \"../../AutoReconnectingWebsocket.ts\"\nimport { tryParseJson } from \"../../converters.ts\"\nimport type { MotionStreamConnection } from \"./MotionStreamConnection.ts\"\nimport type { NovaClient } from \"./NovaClient.ts\"\n\n/** @deprecated */\nexport type ProgramRunnerLogEntry = {\n timestamp: number\n message: string\n level?: \"warn\" | \"error\"\n}\n\n/** @deprecated */\nexport enum ProgramState {\n NotStarted = \"not started\",\n Running = \"running\",\n Stopped = \"stopped\",\n Failed = \"failed\",\n Completed = \"completed\",\n}\n\n/** @deprecated */\nexport type CurrentProgram = {\n id?: string\n wandelscript?: string\n state?: ProgramState\n}\n\ntype ProgramStateMessage = {\n type: string\n runner: {\n id: string\n state: ProgramState\n start_time?: number | null\n execution_time?: number | null\n }\n}\n\n/**\n * Interface for running Wandelscript programs on the Nova instance and\n * tracking their progress and output\n * @deprecated\n */\nexport class ProgramStateConnection {\n currentProgram: CurrentProgram = {}\n logs: ProgramRunnerLogEntry[] = []\n\n executionState = \"idle\" as \"idle\" | \"starting\" | \"executing\" | \"stopping\"\n currentlyExecutingProgramRunnerId = null as string | null\n\n programStateSocket: AutoReconnectingWebsocket\n\n readonly nova: NovaClient\n\n constructor(nova: NovaClient) {\n this.nova = nova\n makeAutoObservable(this, {}, { autoBind: true })\n\n this.programStateSocket = nova.openReconnectingWebsocket(`/programs/state`)\n\n this.programStateSocket.addEventListener(\"message\", (ev) => {\n const msg = tryParseJson(ev.data)\n\n if (!msg) {\n console.error(\"Failed to parse program state message\", ev.data)\n return\n }\n if (msg.type === \"update\") {\n this.handleProgramStateMessage(msg)\n }\n })\n }\n\n /** Handle a program state update from the backend */\n async handleProgramStateMessage(msg: ProgramStateMessage) {\n const { runner } = msg\n\n // Ignoring other programs for now\n // TODO - show if execution state is busy from another source\n if (runner.id !== this.currentlyExecutingProgramRunnerId) return\n\n if (runner.state === ProgramState.Failed) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n // TODO - wandelengine should send print statements in real time over\n // websocket as well, rather than at the end\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n this.logError(\n `Program runner ${runner.id} failed with error: ${runnerState.error}\\n${runnerState.traceback}`,\n )\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.currentProgram.state = ProgramState.Failed\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Stopped) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n\n this.currentProgram.state = ProgramState.Stopped\n this.log(`Program runner ${runner.id} stopped`)\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Completed) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n this.log(\n `Program runner ${runner.id} finished successfully in ${runner.execution_time?.toFixed(2)} seconds`,\n )\n\n this.currentProgram.state = ProgramState.Completed\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Running) {\n this.currentProgram.state = ProgramState.Running\n this.log(`Program runner ${runner.id} now running`)\n } else if (runner.state !== ProgramState.NotStarted) {\n console.error(runner)\n this.logError(\n `Program runner ${runner.id} entered unexpected state: ${runner.state}`,\n )\n this.currentProgram.state = ProgramState.NotStarted\n this.gotoIdleState()\n }\n }\n\n /** Call when a program is no longer executing */\n gotoIdleState() {\n runInAction(() => {\n this.executionState = \"idle\"\n })\n this.currentlyExecutingProgramRunnerId = null\n }\n\n async executeProgram(\n wandelscript: string,\n initial_state?: { [key: string]: CollectionValue },\n activeRobot?: MotionStreamConnection,\n ) {\n this.currentProgram = {\n wandelscript: wandelscript,\n state: ProgramState.NotStarted,\n }\n\n const { currentProgram: openProgram } = this\n if (!openProgram) return\n runInAction(() => {\n this.executionState = \"starting\"\n })\n\n // Jogging can cause program execution to fail for some time after\n // So we need to explicitly stop jogging before running a program\n if (activeRobot) {\n try {\n await this.nova.api.motionGroupJogging.stopJogging(\n activeRobot.motionGroupId,\n )\n } catch (err) {\n console.error(err)\n }\n }\n\n // WOS-1539: Wandelengine parser currently breaks if there are empty lines with indentation\n const trimmedCode = openProgram.wandelscript!.replaceAll(/^\\s*$/gm, \"\")\n\n try {\n const programRunnerRef = await this.nova.api.program.createProgramRunner(\n {\n code: trimmedCode,\n initial_state: initial_state,\n // @ts-expect-error legacy code - check if param still used\n default_robot: activeRobot?.wandelscriptIdentifier,\n },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n )\n\n this.log(`Created program runner ${programRunnerRef.id}\"`)\n runInAction(() => {\n this.executionState = \"executing\"\n })\n this.currentlyExecutingProgramRunnerId = programRunnerRef.id\n } catch (error) {\n if (error instanceof AxiosError && error.response && error.request) {\n this.logError(\n `${error.response.status} ${error.response.statusText} from ${error.response.config.url} ${JSON.stringify(error.response.data)}`,\n )\n } else {\n this.logError(JSON.stringify(error))\n }\n runInAction(() => {\n this.executionState = \"idle\"\n })\n }\n }\n\n async stopProgram() {\n if (!this.currentlyExecutingProgramRunnerId) return\n runInAction(() => {\n this.executionState = \"stopping\"\n })\n\n try {\n await this.nova.api.program.stopProgramRunner(\n this.currentlyExecutingProgramRunnerId,\n )\n } catch (err) {\n // Reactivate the stop button so user can try again\n runInAction(() => {\n this.executionState = \"executing\"\n })\n throw err\n }\n }\n\n reset() {\n this.currentProgram = {}\n }\n\n log(message: string) {\n console.log(message)\n this.logs.push({\n timestamp: Date.now(),\n message,\n })\n }\n\n logError(message: string) {\n console.log(message)\n this.logs.push({\n timestamp: Date.now(),\n message,\n level: \"error\",\n })\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as AutoReconnectingWebsocket } from "
|
|
2
|
-
import { a as WithCellId, c as JoggerConnectionOpts, d as MotionGroupOption, i as NovaCellAPIClient, l as MotionStreamConnection, n as NovaClient, o as WithUnwrappedAxiosResponse, r as NovaClientConfig, s as JoggerConnection, t as poseToWandelscriptString, u as ConnectedMotionGroup } from "
|
|
1
|
+
import { t as AutoReconnectingWebsocket } from "../AutoReconnectingWebsocket-1K2J1NA4.cjs";
|
|
2
|
+
import { a as WithCellId, c as JoggerConnectionOpts, d as MotionGroupOption, i as NovaCellAPIClient, l as MotionStreamConnection, n as NovaClient, o as WithUnwrappedAxiosResponse, r as NovaClientConfig, s as JoggerConnection, t as poseToWandelscriptString, u as ConnectedMotionGroup } from "../wandelscriptUtils-DY3WsiuB.cjs";
|
|
3
3
|
import { CollectionValue, GetTrajectoryResponse } from "@wandelbots/nova-api/v1";
|
|
4
4
|
export * from "@wandelbots/nova-api/v1";
|
|
5
5
|
|
|
@@ -43,12 +43,12 @@ type ProgramStateMessage = {
|
|
|
43
43
|
* @deprecated
|
|
44
44
|
*/
|
|
45
45
|
declare class ProgramStateConnection {
|
|
46
|
-
readonly nova: NovaClient;
|
|
47
46
|
currentProgram: CurrentProgram;
|
|
48
47
|
logs: ProgramRunnerLogEntry[];
|
|
49
48
|
executionState: "idle" | "starting" | "executing" | "stopping";
|
|
50
49
|
currentlyExecutingProgramRunnerId: string | null;
|
|
51
50
|
programStateSocket: AutoReconnectingWebsocket;
|
|
51
|
+
readonly nova: NovaClient;
|
|
52
52
|
constructor(nova: NovaClient);
|
|
53
53
|
/** Handle a program state update from the backend */
|
|
54
54
|
handleProgramStateMessage(msg: ProgramStateMessage): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/lib/deprecated/v1/getLatestTrajectories.ts","../../src/lib/deprecated/v1/ProgramStateConnection.ts"],"mappings":";;;;;;;iBAMsB,qBAAA,CACpB,SAAA,EAAW,iBAAA,EACX,UAAA,WACA,yBAAA,YACC,OAAA,CAAQ,qBAAA;;;;KCAC,qBAAA;EACV,SAAA;EACA,OAAA;EACA,KAAA;AAAA;;aAIU,YAAA;EACV,UAAA;EACA,OAAA;EACA,OAAA;EACA,MAAA;EACA,SAAA;AAAA;;KAIU,cAAA;EACV,EAAA;EACA,YAAA;EACA,KAAA,GAAQ,YAAY;AAAA;AAAA,KAGjB,mBAAA;EACH,IAAA;EACA,MAAA;IACE,EAAA;IACA,KAAA,EAAO,YAAY;IACnB,UAAA;IACA,cAAA;EAAA;AAAA;AAzBG;AAIP;;;;AAJO,cAkCM,sBAAA;EACX,cAAA,EAAgB,cAAA;EAChB,IAAA,EAAM,qBAAA;EAEN,cAAA;EACA,iCAAA;EAEA,kBAAA,EAAoB,yBAAA;EAAA,SAEX,IAAA,EAAM,UAAA;cAEH,IAAA,EAAM,UAAA;EAhCM;EAoDlB,yBAAA,CAA0B,GAAA,EAAK,mBAAA,GAAmB,OAAA;EAjDpC;EAwIpB,aAAA;EAOM,cAAA,CACJ,YAAA,UACA,aAAA;IAAA,CAAmB,GAAA,WAAc,eAAA;EAAA,GACjC,WAAA,GAAc,sBAAA,GAAsB,OAAA;EA8DhC,WAAA,IAAW,OAAA;EAmBjB,KAAA;EAIA,GAAA,CAAI,OAAA;EAQJ,QAAA,CAAS,OAAA;AAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as AutoReconnectingWebsocket } from "
|
|
2
|
-
import { a as WithCellId, c as JoggerConnectionOpts, d as MotionGroupOption, i as NovaCellAPIClient, l as MotionStreamConnection, n as NovaClient, o as WithUnwrappedAxiosResponse, r as NovaClientConfig, s as JoggerConnection, t as poseToWandelscriptString, u as ConnectedMotionGroup } from "
|
|
1
|
+
import { t as AutoReconnectingWebsocket } from "../AutoReconnectingWebsocket-1K2J1NA4.mjs";
|
|
2
|
+
import { a as WithCellId, c as JoggerConnectionOpts, d as MotionGroupOption, i as NovaCellAPIClient, l as MotionStreamConnection, n as NovaClient, o as WithUnwrappedAxiosResponse, r as NovaClientConfig, s as JoggerConnection, t as poseToWandelscriptString, u as ConnectedMotionGroup } from "../wandelscriptUtils-YHTxn_p9.mjs";
|
|
3
3
|
import { CollectionValue, GetTrajectoryResponse } from "@wandelbots/nova-api/v1";
|
|
4
4
|
export * from "@wandelbots/nova-api/v1";
|
|
5
5
|
|
|
@@ -43,12 +43,12 @@ type ProgramStateMessage = {
|
|
|
43
43
|
* @deprecated
|
|
44
44
|
*/
|
|
45
45
|
declare class ProgramStateConnection {
|
|
46
|
-
readonly nova: NovaClient;
|
|
47
46
|
currentProgram: CurrentProgram;
|
|
48
47
|
logs: ProgramRunnerLogEntry[];
|
|
49
48
|
executionState: "idle" | "starting" | "executing" | "stopping";
|
|
50
49
|
currentlyExecutingProgramRunnerId: string | null;
|
|
51
50
|
programStateSocket: AutoReconnectingWebsocket;
|
|
51
|
+
readonly nova: NovaClient;
|
|
52
52
|
constructor(nova: NovaClient);
|
|
53
53
|
/** Handle a program state update from the backend */
|
|
54
54
|
handleProgramStateMessage(msg: ProgramStateMessage): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/lib/deprecated/v1/getLatestTrajectories.ts","../../src/lib/deprecated/v1/ProgramStateConnection.ts"],"mappings":";;;;;;;iBAMsB,qBAAA,CACpB,SAAA,EAAW,iBAAA,EACX,UAAA,WACA,yBAAA,YACC,OAAA,CAAQ,qBAAA;;;;KCAC,qBAAA;EACV,SAAA;EACA,OAAA;EACA,KAAA;AAAA;;aAIU,YAAA;EACV,UAAA;EACA,OAAA;EACA,OAAA;EACA,MAAA;EACA,SAAA;AAAA;;KAIU,cAAA;EACV,EAAA;EACA,YAAA;EACA,KAAA,GAAQ,YAAY;AAAA;AAAA,KAGjB,mBAAA;EACH,IAAA;EACA,MAAA;IACE,EAAA;IACA,KAAA,EAAO,YAAY;IACnB,UAAA;IACA,cAAA;EAAA;AAAA;AAzBG;AAIP;;;;AAJO,cAkCM,sBAAA;EACX,cAAA,EAAgB,cAAA;EAChB,IAAA,EAAM,qBAAA;EAEN,cAAA;EACA,iCAAA;EAEA,kBAAA,EAAoB,yBAAA;EAAA,SAEX,IAAA,EAAM,UAAA;cAEH,IAAA,EAAM,UAAA;EAhCM;EAoDlB,yBAAA,CAA0B,GAAA,EAAK,mBAAA,GAAmB,OAAA;EAjDpC;EAwIpB,aAAA;EAOM,cAAA,CACJ,YAAA,UACA,aAAA;IAAA,CAAmB,GAAA,WAAc,eAAA;EAAA,GACjC,WAAA,GAAc,sBAAA,GAAsB,OAAA;EA8DhC,WAAA,IAAW,OAAA;EAmBjB,KAAA;EAIA,GAAA,CAAI,OAAA;EAQJ,QAAA,CAAS,OAAA;AAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { f as tryParseJson } from "
|
|
2
|
-
import { a as JoggerConnection, i as MotionStreamConnection, n as NovaClient, o as ConnectedMotionGroup, r as NovaCellAPIClient, t as poseToWandelscriptString } from "
|
|
1
|
+
import { f as tryParseJson } from "../context-kT2C20EX.mjs";
|
|
2
|
+
import { a as JoggerConnection, i as MotionStreamConnection, n as NovaClient, o as ConnectedMotionGroup, r as NovaCellAPIClient, t as poseToWandelscriptString } from "../wandelscriptUtils-CwtdZRDs.mjs";
|
|
3
3
|
import { AxiosError } from "axios";
|
|
4
4
|
import { makeAutoObservable, runInAction } from "mobx";
|
|
5
5
|
export * from "@wandelbots/nova-api/v1";
|
|
@@ -39,12 +39,14 @@ let ProgramState = /* @__PURE__ */ function(ProgramState) {
|
|
|
39
39
|
* @deprecated
|
|
40
40
|
*/
|
|
41
41
|
var ProgramStateConnection = class {
|
|
42
|
+
currentProgram = {};
|
|
43
|
+
logs = [];
|
|
44
|
+
executionState = "idle";
|
|
45
|
+
currentlyExecutingProgramRunnerId = null;
|
|
46
|
+
programStateSocket;
|
|
47
|
+
nova;
|
|
42
48
|
constructor(nova) {
|
|
43
49
|
this.nova = nova;
|
|
44
|
-
this.currentProgram = {};
|
|
45
|
-
this.logs = [];
|
|
46
|
-
this.executionState = "idle";
|
|
47
|
-
this.currentlyExecutingProgramRunnerId = null;
|
|
48
50
|
makeAutoObservable(this, {}, { autoBind: true });
|
|
49
51
|
this.programStateSocket = nova.openReconnectingWebsocket(`/programs/state`);
|
|
50
52
|
this.programStateSocket.addEventListener("message", (ev) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/lib/deprecated/v1/getLatestTrajectories.ts","../../src/lib/deprecated/v1/ProgramStateConnection.ts"],"sourcesContent":["import type { GetTrajectoryResponse } from \"@wandelbots/nova-api/v1\"\nimport type { NovaCellAPIClient } from \"./NovaCellAPIClient.ts\"\n\nlet lastMotionIds: Set<string> = new Set()\n\n/** @deprecated */\nexport async function getLatestTrajectories(\n apiClient: NovaCellAPIClient,\n sampleTime: number = 50,\n responsesCoordinateSystem?: string,\n): Promise<GetTrajectoryResponse[]> {\n const newTrajectories: GetTrajectoryResponse[] = []\n\n try {\n const motions = await apiClient.motion.listMotions()\n const currentMotionIds = new Set(motions.motions)\n\n const newMotionIds = Array.from(currentMotionIds).filter(\n (id) => !lastMotionIds.has(id),\n )\n\n for (const motionId of newMotionIds) {\n const trajectory = await apiClient.motion.getMotionTrajectory(\n motionId,\n sampleTime,\n responsesCoordinateSystem,\n )\n newTrajectories.push(trajectory)\n }\n\n lastMotionIds = currentMotionIds\n } catch (error) {\n console.error(\"Failed to get latest trajectories:\", error)\n }\n\n return newTrajectories\n}\n","/** biome-ignore-all lint/style/noNonNullAssertion: legacy code */\nimport type { CollectionValue } from \"@wandelbots/nova-api/v1\"\nimport { AxiosError } from \"axios\"\nimport { makeAutoObservable, runInAction } from \"mobx\"\nimport type { AutoReconnectingWebsocket } from \"../../AutoReconnectingWebsocket.ts\"\nimport { tryParseJson } from \"../../converters.ts\"\nimport type { MotionStreamConnection } from \"./MotionStreamConnection.ts\"\nimport type { NovaClient } from \"./NovaClient.ts\"\n\n/** @deprecated */\nexport type ProgramRunnerLogEntry = {\n timestamp: number\n message: string\n level?: \"warn\" | \"error\"\n}\n\n/** @deprecated */\nexport enum ProgramState {\n NotStarted = \"not started\",\n Running = \"running\",\n Stopped = \"stopped\",\n Failed = \"failed\",\n Completed = \"completed\",\n}\n\n/** @deprecated */\nexport type CurrentProgram = {\n id?: string\n wandelscript?: string\n state?: ProgramState\n}\n\ntype ProgramStateMessage = {\n type: string\n runner: {\n id: string\n state: ProgramState\n start_time?: number | null\n execution_time?: number | null\n }\n}\n\n/**\n * Interface for running Wandelscript programs on the Nova instance and\n * tracking their progress and output\n * @deprecated\n */\nexport class ProgramStateConnection {\n currentProgram: CurrentProgram = {}\n logs: ProgramRunnerLogEntry[] = []\n\n executionState = \"idle\" as \"idle\" | \"starting\" | \"executing\" | \"stopping\"\n currentlyExecutingProgramRunnerId = null as string | null\n\n programStateSocket: AutoReconnectingWebsocket\n\n readonly nova: NovaClient\n\n constructor(nova: NovaClient) {\n this.nova = nova\n makeAutoObservable(this, {}, { autoBind: true })\n\n this.programStateSocket = nova.openReconnectingWebsocket(`/programs/state`)\n\n this.programStateSocket.addEventListener(\"message\", (ev) => {\n const msg = tryParseJson(ev.data)\n\n if (!msg) {\n console.error(\"Failed to parse program state message\", ev.data)\n return\n }\n if (msg.type === \"update\") {\n this.handleProgramStateMessage(msg)\n }\n })\n }\n\n /** Handle a program state update from the backend */\n async handleProgramStateMessage(msg: ProgramStateMessage) {\n const { runner } = msg\n\n // Ignoring other programs for now\n // TODO - show if execution state is busy from another source\n if (runner.id !== this.currentlyExecutingProgramRunnerId) return\n\n if (runner.state === ProgramState.Failed) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n // TODO - wandelengine should send print statements in real time over\n // websocket as well, rather than at the end\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n this.logError(\n `Program runner ${runner.id} failed with error: ${runnerState.error}\\n${runnerState.traceback}`,\n )\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.currentProgram.state = ProgramState.Failed\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Stopped) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n\n this.currentProgram.state = ProgramState.Stopped\n this.log(`Program runner ${runner.id} stopped`)\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Completed) {\n try {\n const runnerState = await this.nova.api.program.getProgramRunner(\n runner.id,\n )\n\n const stdout = runnerState.stdout\n if (stdout) {\n this.log(stdout)\n }\n this.log(\n `Program runner ${runner.id} finished successfully in ${runner.execution_time?.toFixed(2)} seconds`,\n )\n\n this.currentProgram.state = ProgramState.Completed\n } catch (err) {\n this.logError(\n `Failed to retrieve results for program ${runner.id}: ${err}`,\n )\n }\n\n this.gotoIdleState()\n } else if (runner.state === ProgramState.Running) {\n this.currentProgram.state = ProgramState.Running\n this.log(`Program runner ${runner.id} now running`)\n } else if (runner.state !== ProgramState.NotStarted) {\n console.error(runner)\n this.logError(\n `Program runner ${runner.id} entered unexpected state: ${runner.state}`,\n )\n this.currentProgram.state = ProgramState.NotStarted\n this.gotoIdleState()\n }\n }\n\n /** Call when a program is no longer executing */\n gotoIdleState() {\n runInAction(() => {\n this.executionState = \"idle\"\n })\n this.currentlyExecutingProgramRunnerId = null\n }\n\n async executeProgram(\n wandelscript: string,\n initial_state?: { [key: string]: CollectionValue },\n activeRobot?: MotionStreamConnection,\n ) {\n this.currentProgram = {\n wandelscript: wandelscript,\n state: ProgramState.NotStarted,\n }\n\n const { currentProgram: openProgram } = this\n if (!openProgram) return\n runInAction(() => {\n this.executionState = \"starting\"\n })\n\n // Jogging can cause program execution to fail for some time after\n // So we need to explicitly stop jogging before running a program\n if (activeRobot) {\n try {\n await this.nova.api.motionGroupJogging.stopJogging(\n activeRobot.motionGroupId,\n )\n } catch (err) {\n console.error(err)\n }\n }\n\n // WOS-1539: Wandelengine parser currently breaks if there are empty lines with indentation\n const trimmedCode = openProgram.wandelscript!.replaceAll(/^\\s*$/gm, \"\")\n\n try {\n const programRunnerRef = await this.nova.api.program.createProgramRunner(\n {\n code: trimmedCode,\n initial_state: initial_state,\n // @ts-expect-error legacy code - check if param still used\n default_robot: activeRobot?.wandelscriptIdentifier,\n },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n )\n\n this.log(`Created program runner ${programRunnerRef.id}\"`)\n runInAction(() => {\n this.executionState = \"executing\"\n })\n this.currentlyExecutingProgramRunnerId = programRunnerRef.id\n } catch (error) {\n if (error instanceof AxiosError && error.response && error.request) {\n this.logError(\n `${error.response.status} ${error.response.statusText} from ${error.response.config.url} ${JSON.stringify(error.response.data)}`,\n )\n } else {\n this.logError(JSON.stringify(error))\n }\n runInAction(() => {\n this.executionState = \"idle\"\n })\n }\n }\n\n async stopProgram() {\n if (!this.currentlyExecutingProgramRunnerId) return\n runInAction(() => {\n this.executionState = \"stopping\"\n })\n\n try {\n await this.nova.api.program.stopProgramRunner(\n this.currentlyExecutingProgramRunnerId,\n )\n } catch (err) {\n // Reactivate the stop button so user can try again\n runInAction(() => {\n this.executionState = \"executing\"\n })\n throw err\n }\n }\n\n reset() {\n this.currentProgram = {}\n }\n\n log(message: string) {\n console.log(message)\n this.logs.push({\n timestamp: Date.now(),\n message,\n })\n }\n\n logError(message: string) {\n console.log(message)\n this.logs.push({\n timestamp: Date.now(),\n message,\n level: \"error\",\n })\n }\n}\n"],"mappings":"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"}
|