sf-builder-agent 0.7.0 → 0.7.1
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/heartbeat.d.ts +2 -1
- package/dist/heartbeat.js +3 -3
- package/dist/heartbeat.js.map +1 -1
- package/dist/pairing.d.ts +1 -0
- package/dist/pairing.js +3 -2
- package/dist/pairing.js.map +1 -1
- package/dist/reporter.d.ts +2 -1
- package/dist/reporter.js +3 -2
- package/dist/reporter.js.map +1 -1
- package/dist/sse-client.d.ts +2 -1
- package/dist/sse-client.js +3 -4
- package/dist/sse-client.js.map +1 -1
- package/package.json +1 -1
- package/src/heartbeat.ts +3 -4
- package/src/pairing.ts +3 -2
- package/src/reporter.ts +3 -2
- package/src/sse-client.ts +3 -4
package/dist/heartbeat.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Heartbeat — periodically pings the server so it knows we're alive.
|
|
3
|
+
* Uses /api/agent/heartbeat (flat route, not behind Easy Auth).
|
|
3
4
|
*/
|
|
4
|
-
export declare function startHeartbeat(baseUrl: string,
|
|
5
|
+
export declare function startHeartbeat(baseUrl: string, _sessionId: string, token: string, intervalMs?: number): {
|
|
5
6
|
stop: () => void;
|
|
6
7
|
};
|
package/dist/heartbeat.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Heartbeat — periodically pings the server so it knows we're alive.
|
|
3
|
+
* Uses /api/agent/heartbeat (flat route, not behind Easy Auth).
|
|
3
4
|
*/
|
|
4
|
-
export function startHeartbeat(baseUrl,
|
|
5
|
+
export function startHeartbeat(baseUrl, _sessionId, token, intervalMs = 10_000) {
|
|
5
6
|
let timer = null;
|
|
6
7
|
const tick = async () => {
|
|
7
8
|
try {
|
|
8
|
-
const res = await fetch(`${baseUrl}/api/
|
|
9
|
+
const res = await fetch(`${baseUrl}/api/agent/heartbeat`, {
|
|
9
10
|
method: "POST",
|
|
10
11
|
headers: { Authorization: `Bearer ${token}` },
|
|
11
12
|
});
|
|
@@ -21,7 +22,6 @@ export function startHeartbeat(baseUrl, sessionId, token, intervalMs = 10_000) {
|
|
|
21
22
|
}
|
|
22
23
|
};
|
|
23
24
|
timer = setInterval(tick, intervalMs);
|
|
24
|
-
// Send an initial heartbeat immediately
|
|
25
25
|
tick();
|
|
26
26
|
return {
|
|
27
27
|
stop() {
|
package/dist/heartbeat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,UAAkB,EAClB,KAAa,EACb,UAAU,GAAG,MAAM;IAEnB,IAAI,KAAK,GAA0C,IAAI,CAAC;IAExD,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,OAAO,sBAAsB,EAChC;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;aAC9C,CACF,CAAC;YACF,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,yBAAyB,EACzB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtC,IAAI,EAAE,CAAC;IAEP,OAAO;QACL,IAAI;YACF,IAAI,KAAK,EAAE,CAAC;gBACV,aAAa,CAAC,KAAK,CAAC,CAAC;gBACrB,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/pairing.d.ts
CHANGED
package/dist/pairing.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pairing — exchange a one-time code for a persistent auth token.
|
|
3
|
+
* Uses /api/agent/pair (flat route, not behind Easy Auth).
|
|
3
4
|
*/
|
|
4
5
|
export async function pair(baseUrl, sessionId, code) {
|
|
5
|
-
const url = `${baseUrl}/api/
|
|
6
|
+
const url = `${baseUrl}/api/agent/pair`;
|
|
6
7
|
const res = await fetch(url, {
|
|
7
8
|
method: "POST",
|
|
8
9
|
headers: { "Content-Type": "application/json" },
|
|
9
|
-
body: JSON.stringify({ code }),
|
|
10
|
+
body: JSON.stringify({ sessionId, code }),
|
|
10
11
|
});
|
|
11
12
|
if (!res.ok) {
|
|
12
13
|
const body = await res.text().catch(() => "");
|
package/dist/pairing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pairing.js","sourceRoot":"","sources":["../src/pairing.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pairing.js","sourceRoot":"","sources":["../src/pairing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,OAAe,EACf,SAAiB,EACjB,IAAY;IAEZ,MAAM,GAAG,GAAG,GAAG,OAAO,iBAAiB,CAAC;IAExC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KAC1C,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,mBAAmB,GAAG,CAAC,MAAM,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAC5D,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA2C,CAAC;IAE1E,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;AACvE,CAAC"}
|
package/dist/reporter.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Reporter — POST command results back to the web app.
|
|
3
|
+
* Uses /api/agent/result (flat route, not behind Easy Auth).
|
|
3
4
|
*/
|
|
4
|
-
export declare function reportResult(baseUrl: string,
|
|
5
|
+
export declare function reportResult(baseUrl: string, _sessionId: string, token: string, commandId: string, status: "success" | "error", result?: Record<string, unknown>): Promise<void>;
|
package/dist/reporter.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Reporter — POST command results back to the web app.
|
|
3
|
+
* Uses /api/agent/result (flat route, not behind Easy Auth).
|
|
3
4
|
*/
|
|
4
|
-
export async function reportResult(baseUrl,
|
|
5
|
-
const url = `${baseUrl}/api/
|
|
5
|
+
export async function reportResult(baseUrl, _sessionId, token, commandId, status, result) {
|
|
6
|
+
const url = `${baseUrl}/api/agent/result`;
|
|
6
7
|
try {
|
|
7
8
|
const res = await fetch(url, {
|
|
8
9
|
method: "POST",
|
package/dist/reporter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,UAAkB,EAClB,KAAa,EACb,SAAiB,EACjB,MAA2B,EAC3B,MAAgC;IAEhC,MAAM,GAAG,GAAG,GAAG,OAAO,mBAAmB,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;SACpD,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,sBAAsB,EACtB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/sse-client.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SSE client — listens for browser-automation commands from the server.
|
|
3
|
+
* Uses /api/agent/commands (flat route, not behind Easy Auth).
|
|
3
4
|
*/
|
|
4
5
|
interface IncomingCommand {
|
|
5
6
|
id: string;
|
|
@@ -7,7 +8,7 @@ interface IncomingCommand {
|
|
|
7
8
|
stepKey: string | null;
|
|
8
9
|
payload: Record<string, unknown>;
|
|
9
10
|
}
|
|
10
|
-
export declare function connectSSE(baseUrl: string,
|
|
11
|
+
export declare function connectSSE(baseUrl: string, _sessionId: string, token: string, onCommand: (command: IncomingCommand) => void, onError: (error: Error) => void): {
|
|
11
12
|
close: () => void;
|
|
12
13
|
};
|
|
13
14
|
export {};
|
package/dist/sse-client.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SSE client — listens for browser-automation commands from the server.
|
|
3
|
+
* Uses /api/agent/commands (flat route, not behind Easy Auth).
|
|
3
4
|
*/
|
|
4
5
|
import { EventSource } from "eventsource";
|
|
5
|
-
export function connectSSE(baseUrl,
|
|
6
|
-
const url = `${baseUrl}/api/
|
|
6
|
+
export function connectSSE(baseUrl, _sessionId, token, onCommand, onError) {
|
|
7
|
+
const url = `${baseUrl}/api/agent/commands?token=${encodeURIComponent(token)}`;
|
|
7
8
|
let es = null;
|
|
8
9
|
let closed = false;
|
|
9
10
|
let retryDelay = 1_000;
|
|
@@ -16,7 +17,6 @@ export function connectSSE(baseUrl, sessionId, token, onCommand, onError) {
|
|
|
16
17
|
try {
|
|
17
18
|
const data = JSON.parse(evt.data);
|
|
18
19
|
onCommand(data);
|
|
19
|
-
// Reset backoff on successful message
|
|
20
20
|
retryDelay = 1_000;
|
|
21
21
|
}
|
|
22
22
|
catch (err) {
|
|
@@ -38,7 +38,6 @@ export function connectSSE(baseUrl, sessionId, token, onCommand, onError) {
|
|
|
38
38
|
: "SSE connection error";
|
|
39
39
|
console.error(`\u274C SSE error: ${message} — reconnecting in ${retryDelay / 1_000}s`);
|
|
40
40
|
onError(new Error(message));
|
|
41
|
-
// Close the broken connection and schedule reconnect
|
|
42
41
|
es?.close();
|
|
43
42
|
es = null;
|
|
44
43
|
setTimeout(() => {
|
package/dist/sse-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse-client.js","sourceRoot":"","sources":["../src/sse-client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sse-client.js","sourceRoot":"","sources":["../src/sse-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS1C,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,UAAkB,EAClB,KAAa,EACb,SAA6C,EAC7C,OAA+B;IAE/B,MAAM,GAAG,GAAG,GAAG,OAAO,6BAA6B,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;IAE/E,IAAI,EAAE,GAAuB,IAAI,CAAC;IAClC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,MAAM,SAAS,GAAG,MAAM,CAAC;IAEzB,SAAS,OAAO;QACd,IAAI,MAAM;YAAE,OAAO;QAEnB,EAAE,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;QAE1B,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,GAAiB,EAAE,EAAE;YACnD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAoB,CAAC;gBACrD,SAAS,CAAC,IAAI,CAAC,CAAC;gBAChB,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CACX,iCAAiC,EACjC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YAC/B,6BAA6B;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;YAC1B,IAAI,MAAM;gBAAE,OAAO;YAEnB,MAAM,OAAO,GACX,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG;gBAChD,CAAC,CAAE,GAAsC,CAAC,OAAO;gBACjD,CAAC,CAAC,sBAAsB,CAAC;YAE7B,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,uBAAuB,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAE5B,EAAE,EAAE,KAAK,EAAE,CAAC;YACZ,EAAE,GAAG,IAAI,CAAC;YAEV,UAAU,CAAC,GAAG,EAAE;gBACd,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;gBACjD,OAAO,EAAE,CAAC;YACZ,CAAC,EAAE,UAAU,CAAC,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;IAEV,OAAO;QACL,KAAK;YACH,MAAM,GAAG,IAAI,CAAC;YACd,EAAE,EAAE,KAAK,EAAE,CAAC;YACZ,EAAE,GAAG,IAAI,CAAC;QACZ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
package/src/heartbeat.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Heartbeat — periodically pings the server so it knows we're alive.
|
|
3
|
+
* Uses /api/agent/heartbeat (flat route, not behind Easy Auth).
|
|
3
4
|
*/
|
|
4
5
|
|
|
5
6
|
export function startHeartbeat(
|
|
6
7
|
baseUrl: string,
|
|
7
|
-
|
|
8
|
+
_sessionId: string,
|
|
8
9
|
token: string,
|
|
9
10
|
intervalMs = 10_000
|
|
10
11
|
): { stop: () => void } {
|
|
@@ -13,7 +14,7 @@ export function startHeartbeat(
|
|
|
13
14
|
const tick = async () => {
|
|
14
15
|
try {
|
|
15
16
|
const res = await fetch(
|
|
16
|
-
`${baseUrl}/api/
|
|
17
|
+
`${baseUrl}/api/agent/heartbeat`,
|
|
17
18
|
{
|
|
18
19
|
method: "POST",
|
|
19
20
|
headers: { Authorization: `Bearer ${token}` },
|
|
@@ -33,8 +34,6 @@ export function startHeartbeat(
|
|
|
33
34
|
};
|
|
34
35
|
|
|
35
36
|
timer = setInterval(tick, intervalMs);
|
|
36
|
-
|
|
37
|
-
// Send an initial heartbeat immediately
|
|
38
37
|
tick();
|
|
39
38
|
|
|
40
39
|
return {
|
package/src/pairing.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pairing — exchange a one-time code for a persistent auth token.
|
|
3
|
+
* Uses /api/agent/pair (flat route, not behind Easy Auth).
|
|
3
4
|
*/
|
|
4
5
|
|
|
5
6
|
export async function pair(
|
|
@@ -7,12 +8,12 @@ export async function pair(
|
|
|
7
8
|
sessionId: string,
|
|
8
9
|
code: string
|
|
9
10
|
): Promise<{ token: string; sessionId: string }> {
|
|
10
|
-
const url = `${baseUrl}/api/
|
|
11
|
+
const url = `${baseUrl}/api/agent/pair`;
|
|
11
12
|
|
|
12
13
|
const res = await fetch(url, {
|
|
13
14
|
method: "POST",
|
|
14
15
|
headers: { "Content-Type": "application/json" },
|
|
15
|
-
body: JSON.stringify({ code }),
|
|
16
|
+
body: JSON.stringify({ sessionId, code }),
|
|
16
17
|
});
|
|
17
18
|
|
|
18
19
|
if (!res.ok) {
|
package/src/reporter.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Reporter — POST command results back to the web app.
|
|
3
|
+
* Uses /api/agent/result (flat route, not behind Easy Auth).
|
|
3
4
|
*/
|
|
4
5
|
|
|
5
6
|
export async function reportResult(
|
|
6
7
|
baseUrl: string,
|
|
7
|
-
|
|
8
|
+
_sessionId: string,
|
|
8
9
|
token: string,
|
|
9
10
|
commandId: string,
|
|
10
11
|
status: "success" | "error",
|
|
11
12
|
result?: Record<string, unknown>
|
|
12
13
|
): Promise<void> {
|
|
13
|
-
const url = `${baseUrl}/api/
|
|
14
|
+
const url = `${baseUrl}/api/agent/result`;
|
|
14
15
|
|
|
15
16
|
try {
|
|
16
17
|
const res = await fetch(url, {
|
package/src/sse-client.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SSE client — listens for browser-automation commands from the server.
|
|
3
|
+
* Uses /api/agent/commands (flat route, not behind Easy Auth).
|
|
3
4
|
*/
|
|
4
5
|
|
|
5
6
|
import { EventSource } from "eventsource";
|
|
@@ -13,12 +14,12 @@ interface IncomingCommand {
|
|
|
13
14
|
|
|
14
15
|
export function connectSSE(
|
|
15
16
|
baseUrl: string,
|
|
16
|
-
|
|
17
|
+
_sessionId: string,
|
|
17
18
|
token: string,
|
|
18
19
|
onCommand: (command: IncomingCommand) => void,
|
|
19
20
|
onError: (error: Error) => void
|
|
20
21
|
): { close: () => void } {
|
|
21
|
-
const url = `${baseUrl}/api/
|
|
22
|
+
const url = `${baseUrl}/api/agent/commands?token=${encodeURIComponent(token)}`;
|
|
22
23
|
|
|
23
24
|
let es: EventSource | null = null;
|
|
24
25
|
let closed = false;
|
|
@@ -34,7 +35,6 @@ export function connectSSE(
|
|
|
34
35
|
try {
|
|
35
36
|
const data = JSON.parse(evt.data) as IncomingCommand;
|
|
36
37
|
onCommand(data);
|
|
37
|
-
// Reset backoff on successful message
|
|
38
38
|
retryDelay = 1_000;
|
|
39
39
|
} catch (err) {
|
|
40
40
|
console.error(
|
|
@@ -64,7 +64,6 @@ export function connectSSE(
|
|
|
64
64
|
console.error(`\u274C SSE error: ${message} — reconnecting in ${retryDelay / 1_000}s`);
|
|
65
65
|
onError(new Error(message));
|
|
66
66
|
|
|
67
|
-
// Close the broken connection and schedule reconnect
|
|
68
67
|
es?.close();
|
|
69
68
|
es = null;
|
|
70
69
|
|