@stigmer/react 0.1.1 → 0.2.0
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/package.json +4 -4
- package/runner/__tests__/useLaunchLocalRunner.test.js +18 -0
- package/runner/__tests__/useLaunchLocalRunner.test.js.map +1 -1
- package/runner/useLaunchLocalRunner.d.ts +10 -1
- package/runner/useLaunchLocalRunner.d.ts.map +1 -1
- package/runner/useLaunchLocalRunner.js +10 -3
- package/runner/useLaunchLocalRunner.js.map +1 -1
- package/src/runner/__tests__/useLaunchLocalRunner.test.tsx +25 -0
- package/src/runner/useLaunchLocalRunner.ts +21 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stigmer/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "React provider and client hook for the Stigmer platform SDK",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@stigmer/theme": "0.
|
|
38
|
+
"@stigmer/theme": "0.2.0",
|
|
39
39
|
"react-markdown": "^10.1.0",
|
|
40
40
|
"remark-gfm": "^4.0.1",
|
|
41
41
|
"yaml": "^2.8.2"
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@base-ui/react": "^1.0.0",
|
|
45
45
|
"@bufbuild/protobuf": "^2.0.0",
|
|
46
|
-
"@stigmer/protos": "0.
|
|
47
|
-
"@stigmer/sdk": "0.
|
|
46
|
+
"@stigmer/protos": "0.2.0",
|
|
47
|
+
"@stigmer/sdk": "0.2.0",
|
|
48
48
|
"lucide-react": ">=0.400.0",
|
|
49
49
|
"react": "^19.0.0",
|
|
50
50
|
"react-dom": "^19.0.0"
|
|
@@ -34,6 +34,7 @@ describe("useLaunchLocalRunner", () => {
|
|
|
34
34
|
const { result } = renderHook(() => useLaunchLocalRunner({ openUrl }), { wrapper: makeWrapper(client) });
|
|
35
35
|
expect(result.current.isLaunching).toBe(false);
|
|
36
36
|
expect(result.current.error).toBeNull();
|
|
37
|
+
expect(result.current.lastLaunchResult).toBeNull();
|
|
37
38
|
let launchResult;
|
|
38
39
|
await act(async () => {
|
|
39
40
|
launchResult = await result.current.launch({ org: ORG });
|
|
@@ -45,6 +46,7 @@ describe("useLaunchLocalRunner", () => {
|
|
|
45
46
|
expect(launchResult.expiresAt).toBeInstanceOf(Date);
|
|
46
47
|
expect(result.current.isLaunching).toBe(false);
|
|
47
48
|
expect(result.current.error).toBeNull();
|
|
49
|
+
expect(result.current.lastLaunchResult).toEqual(launchResult);
|
|
48
50
|
});
|
|
49
51
|
it("URL-encodes tokens with special characters", async () => {
|
|
50
52
|
const response = create(CreateLaunchTokenResponseSchema, {
|
|
@@ -122,6 +124,22 @@ describe("useLaunchLocalRunner", () => {
|
|
|
122
124
|
});
|
|
123
125
|
expect(result.current.error).toBeNull();
|
|
124
126
|
});
|
|
127
|
+
it("clearError also resets lastLaunchResult", async () => {
|
|
128
|
+
const response = create(CreateLaunchTokenResponseSchema, {
|
|
129
|
+
token: "tok_clear",
|
|
130
|
+
});
|
|
131
|
+
createLaunchToken.mockResolvedValueOnce(response);
|
|
132
|
+
const openUrl = vi.fn();
|
|
133
|
+
const { result } = renderHook(() => useLaunchLocalRunner({ openUrl }), { wrapper: makeWrapper(client) });
|
|
134
|
+
await act(async () => {
|
|
135
|
+
await result.current.launch({ org: ORG });
|
|
136
|
+
});
|
|
137
|
+
expect(result.current.lastLaunchResult).not.toBeNull();
|
|
138
|
+
act(() => {
|
|
139
|
+
result.current.clearError();
|
|
140
|
+
});
|
|
141
|
+
expect(result.current.lastLaunchResult).toBeNull();
|
|
142
|
+
});
|
|
125
143
|
it("resets previous error on a new successful launch", async () => {
|
|
126
144
|
createLaunchToken.mockRejectedValueOnce(new Error("first fail"));
|
|
127
145
|
const openUrl = vi.fn();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLaunchLocalRunner.test.js","sourceRoot":"","sources":["../../../src/runner/__tests__/useLaunchLocalRunner.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,+BAA+B,EAAE,MAAM,oDAAoD,CAAC;AAErG,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,SAAS,eAAe,CAAC,YAErB,EAAE;IACJ,OAAO;QACL,MAAM,EAAE;YACN,iBAAiB,EACf,SAAS,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAAE,EAAE;SACzC;KACoB,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,MAAe;IAClC,OAAO,CAAC,EAAE,QAAQ,EAA2B,EAAE,EAAE,CAAC,CAChD,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YACnC,QAAQ,GACe,CAC3B,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,MAAM,GAAG,GAAG,UAAU,CAAC;IAEvB,IAAI,iBAA2C,CAAC;IAChD,IAAI,MAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,iBAAiB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,GAAG,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,+BAA+B,EAAE;YACvD,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,iBAAiB,CAAC,IAAI,IAAI,EAAE,CAAC;SACzC,CAAC,CAAC;QACH,iBAAiB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAElD,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAC3B,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,EACvC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CACjC,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"useLaunchLocalRunner.test.js","sourceRoot":"","sources":["../../../src/runner/__tests__/useLaunchLocalRunner.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -40,9 +40,18 @@ export interface UseLaunchLocalRunnerReturn {
|
|
|
40
40
|
}) => Promise<LaunchLocalRunnerResult>;
|
|
41
41
|
/** `true` while the token creation and URL dispatch are in flight. */
|
|
42
42
|
readonly isLaunching: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Result from the most recent successful launch dispatch, or `null`
|
|
45
|
+
* when no launch has been dispatched (or after {@link clearError}).
|
|
46
|
+
*
|
|
47
|
+
* Consumers can use `lastLaunchResult.expiresAt` to implement
|
|
48
|
+
* timeout-based detection: if no runner appears before the token
|
|
49
|
+
* expires, the desktop app likely did not receive the deep link.
|
|
50
|
+
*/
|
|
51
|
+
readonly lastLaunchResult: LaunchLocalRunnerResult | null;
|
|
43
52
|
/** Error from the last failed launch attempt, or `null` when healthy. */
|
|
44
53
|
readonly error: Error | null;
|
|
45
|
-
/** Reset `error` to `null`. */
|
|
54
|
+
/** Reset `error` and `lastLaunchResult` to `null`. */
|
|
46
55
|
readonly clearError: () => void;
|
|
47
56
|
}
|
|
48
57
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLaunchLocalRunner.d.ts","sourceRoot":"","sources":["../../src/runner/useLaunchLocalRunner.ts"],"names":[],"mappings":"AAeA,gDAAgD;AAChD,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,sFAAsF;AACtF,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,IAAI,GAAG,SAAS,CAAC;CACtC;AAED,oDAAoD;AACpD,MAAM,WAAW,0BAA0B;IACzC;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC9E,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B
|
|
1
|
+
{"version":3,"file":"useLaunchLocalRunner.d.ts","sourceRoot":"","sources":["../../src/runner/useLaunchLocalRunner.ts"],"names":[],"mappings":"AAeA,gDAAgD;AAChD,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,sFAAsF;AACtF,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,IAAI,GAAG,SAAS,CAAC;CACtC;AAED,oDAAoD;AACpD,MAAM,WAAW,0BAA0B;IACzC;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC9E,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,gBAAgB,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC1D,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,CAAC,EAAE,2BAA2B,GACpC,0BAA0B,CA8C5B"}
|
|
@@ -48,11 +48,16 @@ export function useLaunchLocalRunner(options) {
|
|
|
48
48
|
const stigmer = useStigmer();
|
|
49
49
|
const [isLaunching, setIsLaunching] = useState(false);
|
|
50
50
|
const [error, setError] = useState(null);
|
|
51
|
+
const [lastLaunchResult, setLastLaunchResult] = useState(null);
|
|
51
52
|
const openUrl = options?.openUrl ?? defaultOpenUrl;
|
|
52
|
-
const clearError = useCallback(() =>
|
|
53
|
+
const clearError = useCallback(() => {
|
|
54
|
+
setError(null);
|
|
55
|
+
setLastLaunchResult(null);
|
|
56
|
+
}, []);
|
|
53
57
|
const launch = useCallback(async (input) => {
|
|
54
58
|
setIsLaunching(true);
|
|
55
59
|
setError(null);
|
|
60
|
+
setLastLaunchResult(null);
|
|
56
61
|
try {
|
|
57
62
|
const response = await stigmer.runner.createLaunchToken(create(CreateLaunchTokenRequestSchema, { org: input.org }));
|
|
58
63
|
const url = `${LAUNCH_RUNNER_SCHEME}?token=${encodeURIComponent(response.token)}`;
|
|
@@ -60,7 +65,9 @@ export function useLaunchLocalRunner(options) {
|
|
|
60
65
|
? timestampDate(response.expiresAt)
|
|
61
66
|
: undefined;
|
|
62
67
|
openUrl(url);
|
|
63
|
-
|
|
68
|
+
const result = { url, expiresAt };
|
|
69
|
+
setLastLaunchResult(result);
|
|
70
|
+
return result;
|
|
64
71
|
}
|
|
65
72
|
catch (err) {
|
|
66
73
|
setError(toError(err));
|
|
@@ -70,6 +77,6 @@ export function useLaunchLocalRunner(options) {
|
|
|
70
77
|
setIsLaunching(false);
|
|
71
78
|
}
|
|
72
79
|
}, [stigmer, openUrl]);
|
|
73
|
-
return { launch, isLaunching, error, clearError };
|
|
80
|
+
return { launch, isLaunching, lastLaunchResult, error, clearError };
|
|
74
81
|
}
|
|
75
82
|
//# sourceMappingURL=useLaunchLocalRunner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLaunchLocalRunner.js","sourceRoot":"","sources":["../../src/runner/useLaunchLocalRunner.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AACpG,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AAEvD,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;AAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"useLaunchLocalRunner.js","sourceRoot":"","sources":["../../src/runner/useLaunchLocalRunner.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AACpG,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AAEvD,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;AAC7B,CAAC;AA2DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAqC;IAErC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAC3C,QAAQ,CAAiC,IAAI,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,cAAc,CAAC;IAEnD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EAAE,KAAsB,EAAoC,EAAE;QACjE,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,iBAAiB,CACrD,MAAM,CAAC,8BAA8B,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAC3D,CAAC;YAEF,MAAM,GAAG,GAAG,GAAG,oBAAoB,UAAU,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClF,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS;gBAClC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACnC,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO,CAAC,GAAG,CAAC,CAAC;YAEb,MAAM,MAAM,GAA4B,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;YAC3D,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC5B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EACD,CAAC,OAAO,EAAE,OAAO,CAAC,CACnB,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACtE,CAAC"}
|
|
@@ -53,6 +53,7 @@ describe("useLaunchLocalRunner", () => {
|
|
|
53
53
|
|
|
54
54
|
expect(result.current.isLaunching).toBe(false);
|
|
55
55
|
expect(result.current.error).toBeNull();
|
|
56
|
+
expect(result.current.lastLaunchResult).toBeNull();
|
|
56
57
|
|
|
57
58
|
let launchResult: Awaited<ReturnType<typeof result.current.launch>>;
|
|
58
59
|
await act(async () => {
|
|
@@ -72,6 +73,7 @@ describe("useLaunchLocalRunner", () => {
|
|
|
72
73
|
|
|
73
74
|
expect(result.current.isLaunching).toBe(false);
|
|
74
75
|
expect(result.current.error).toBeNull();
|
|
76
|
+
expect(result.current.lastLaunchResult).toEqual(launchResult!);
|
|
75
77
|
});
|
|
76
78
|
|
|
77
79
|
it("URL-encodes tokens with special characters", async () => {
|
|
@@ -196,6 +198,29 @@ describe("useLaunchLocalRunner", () => {
|
|
|
196
198
|
expect(result.current.error).toBeNull();
|
|
197
199
|
});
|
|
198
200
|
|
|
201
|
+
it("clearError also resets lastLaunchResult", async () => {
|
|
202
|
+
const response = create(CreateLaunchTokenResponseSchema, {
|
|
203
|
+
token: "tok_clear",
|
|
204
|
+
});
|
|
205
|
+
createLaunchToken.mockResolvedValueOnce(response);
|
|
206
|
+
|
|
207
|
+
const openUrl = vi.fn();
|
|
208
|
+
const { result } = renderHook(
|
|
209
|
+
() => useLaunchLocalRunner({ openUrl }),
|
|
210
|
+
{ wrapper: makeWrapper(client) },
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
await act(async () => {
|
|
214
|
+
await result.current.launch({ org: ORG });
|
|
215
|
+
});
|
|
216
|
+
expect(result.current.lastLaunchResult).not.toBeNull();
|
|
217
|
+
|
|
218
|
+
act(() => {
|
|
219
|
+
result.current.clearError();
|
|
220
|
+
});
|
|
221
|
+
expect(result.current.lastLaunchResult).toBeNull();
|
|
222
|
+
});
|
|
223
|
+
|
|
199
224
|
it("resets previous error on a new successful launch", async () => {
|
|
200
225
|
createLaunchToken.mockRejectedValueOnce(new Error("first fail"));
|
|
201
226
|
|
|
@@ -55,9 +55,18 @@ export interface UseLaunchLocalRunnerReturn {
|
|
|
55
55
|
readonly launch: (input: { org: string }) => Promise<LaunchLocalRunnerResult>;
|
|
56
56
|
/** `true` while the token creation and URL dispatch are in flight. */
|
|
57
57
|
readonly isLaunching: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Result from the most recent successful launch dispatch, or `null`
|
|
60
|
+
* when no launch has been dispatched (or after {@link clearError}).
|
|
61
|
+
*
|
|
62
|
+
* Consumers can use `lastLaunchResult.expiresAt` to implement
|
|
63
|
+
* timeout-based detection: if no runner appears before the token
|
|
64
|
+
* expires, the desktop app likely did not receive the deep link.
|
|
65
|
+
*/
|
|
66
|
+
readonly lastLaunchResult: LaunchLocalRunnerResult | null;
|
|
58
67
|
/** Error from the last failed launch attempt, or `null` when healthy. */
|
|
59
68
|
readonly error: Error | null;
|
|
60
|
-
/** Reset `error` to `null`. */
|
|
69
|
+
/** Reset `error` and `lastLaunchResult` to `null`. */
|
|
61
70
|
readonly clearError: () => void;
|
|
62
71
|
}
|
|
63
72
|
|
|
@@ -102,15 +111,21 @@ export function useLaunchLocalRunner(
|
|
|
102
111
|
const stigmer = useStigmer();
|
|
103
112
|
const [isLaunching, setIsLaunching] = useState(false);
|
|
104
113
|
const [error, setError] = useState<Error | null>(null);
|
|
114
|
+
const [lastLaunchResult, setLastLaunchResult] =
|
|
115
|
+
useState<LaunchLocalRunnerResult | null>(null);
|
|
105
116
|
|
|
106
117
|
const openUrl = options?.openUrl ?? defaultOpenUrl;
|
|
107
118
|
|
|
108
|
-
const clearError = useCallback(() =>
|
|
119
|
+
const clearError = useCallback(() => {
|
|
120
|
+
setError(null);
|
|
121
|
+
setLastLaunchResult(null);
|
|
122
|
+
}, []);
|
|
109
123
|
|
|
110
124
|
const launch = useCallback(
|
|
111
125
|
async (input: { org: string }): Promise<LaunchLocalRunnerResult> => {
|
|
112
126
|
setIsLaunching(true);
|
|
113
127
|
setError(null);
|
|
128
|
+
setLastLaunchResult(null);
|
|
114
129
|
|
|
115
130
|
try {
|
|
116
131
|
const response = await stigmer.runner.createLaunchToken(
|
|
@@ -124,7 +139,9 @@ export function useLaunchLocalRunner(
|
|
|
124
139
|
|
|
125
140
|
openUrl(url);
|
|
126
141
|
|
|
127
|
-
|
|
142
|
+
const result: LaunchLocalRunnerResult = { url, expiresAt };
|
|
143
|
+
setLastLaunchResult(result);
|
|
144
|
+
return result;
|
|
128
145
|
} catch (err) {
|
|
129
146
|
setError(toError(err));
|
|
130
147
|
throw err;
|
|
@@ -135,5 +152,5 @@ export function useLaunchLocalRunner(
|
|
|
135
152
|
[stigmer, openUrl],
|
|
136
153
|
);
|
|
137
154
|
|
|
138
|
-
return { launch, isLaunching, error, clearError };
|
|
155
|
+
return { launch, isLaunching, lastLaunchResult, error, clearError };
|
|
139
156
|
}
|