@bodhiapp/bodhi-js-react-core 0.0.11
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/README.md +34 -0
- package/dist/bodhi-browser-ext/src/types/bodhiext.d.ts +201 -0
- package/dist/bodhi-browser-ext/src/types/common.d.ts +37 -0
- package/dist/bodhi-browser-ext/src/types/index.d.ts +6 -0
- package/dist/bodhi-browser-ext/src/types/protocol.d.ts +222 -0
- package/dist/bodhi-js-sdk/react-core/src/BodhiProvider.d.ts +35 -0
- package/dist/bodhi-js-sdk/react-core/src/SetupModalProcessor.d.ts +16 -0
- package/dist/bodhi-js-sdk/react-core/src/api/index.d.ts +7 -0
- package/dist/bodhi-js-sdk/react-core/src/build-info.d.ts +1 -0
- package/dist/bodhi-js-sdk/react-core/src/client-ctx.d.ts +26 -0
- package/dist/bodhi-js-sdk/react-core/src/index.d.ts +16 -0
- package/dist/bodhi-react-core.cjs.js +2 -0
- package/dist/bodhi-react-core.esm.d.ts +2 -0
- package/dist/bodhi-react-core.esm.js +473 -0
- package/dist/setup-modal/src/types/extension.d.ts +24 -0
- package/dist/setup-modal/src/types/index.d.ts +20 -0
- package/dist/setup-modal/src/types/lna.d.ts +56 -0
- package/dist/setup-modal/src/types/message-types.d.ts +168 -0
- package/dist/setup-modal/src/types/platform.d.ts +32 -0
- package/dist/setup-modal/src/types/protocol.d.ts +70 -0
- package/dist/setup-modal/src/types/server.d.ts +63 -0
- package/dist/setup-modal/src/types/state.d.ts +42 -0
- package/dist/setup-modal/src/types/type-guards.d.ts +26 -0
- package/package.json +67 -0
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
import { jsxs as F, jsx as H } from "react/jsx-runtime";
|
|
2
|
+
import { Logger as B, BodhiClientUserPrefsManager as G, createStoragePrefixWithBasePath as K, detectBrowser as V, detectOS as W, getServerUrl as j, isDirectServerReady as Y, isExtensionServerReady as q, OS_CONFIGS as X, BROWSER_CONFIGS as J, OnboardingModal as Z, BACKEND_SERVER_NOT_CONNECTED as P, isExtensionState as Q, INITIAL_AUTH_STATE as $, NOOP_STATE_CALLBACK as ee, isWebUIClient as te } from "@bodhiapp/bodhi-js-core";
|
|
3
|
+
import { createApiError as Ae, createOperationError as Oe, isApiResultError as Le, isApiResultOperationError as he, isApiResultSuccess as we, isAuthError as xe, isAuthLoading as Ie, isAuthenticated as _e, isClientReady as Re, isDirectState as De, isExtensionState as Me, isOperationError as Ne, isWebUIClient as Te } from "@bodhiapp/bodhi-js-core";
|
|
4
|
+
import { useMemo as _, useRef as T, useCallback as d, useEffect as b, createContext as re, useState as N, useContext as ne } from "react";
|
|
5
|
+
const m = {
|
|
6
|
+
// Modal lifecycle
|
|
7
|
+
MODAL_READY: "modal:ready",
|
|
8
|
+
MODAL_REFRESH: "modal:refresh",
|
|
9
|
+
MODAL_CLOSE: "modal:close",
|
|
10
|
+
MODAL_COMPLETE: "modal:complete",
|
|
11
|
+
// LNA actions
|
|
12
|
+
MODAL_LNA_CONNECT: "modal:lna:connect",
|
|
13
|
+
MODAL_LNA_SKIP: "modal:lna:skip",
|
|
14
|
+
// Server confirmation
|
|
15
|
+
MODAL_CONFIRM_SERVER_INSTALL: "modal:confirm-server-install",
|
|
16
|
+
// Connection selection
|
|
17
|
+
MODAL_SELECT_CONNECTION: "modal:select-connection"
|
|
18
|
+
};
|
|
19
|
+
function se({
|
|
20
|
+
client: e,
|
|
21
|
+
modalHtmlPath: o,
|
|
22
|
+
hideSetup: w,
|
|
23
|
+
onSetupReady: x,
|
|
24
|
+
setupState: R,
|
|
25
|
+
basePath: g = "/",
|
|
26
|
+
logLevel: A = "warn"
|
|
27
|
+
}) {
|
|
28
|
+
const p = R !== "ready", E = _(() => new B("SetupModalProcessor", A), [A]), u = T(null), a = _(
|
|
29
|
+
() => new G(K(g, "bodhijs:")),
|
|
30
|
+
[g]
|
|
31
|
+
), f = T(null), v = d(
|
|
32
|
+
(t) => t === "direct" ? "lna" : t === "extension" ? "extension" : null,
|
|
33
|
+
[]
|
|
34
|
+
), y = d((t) => t.extension === "ready" ? {
|
|
35
|
+
status: "ready",
|
|
36
|
+
version: "unknown",
|
|
37
|
+
// TODO: have ExtensionState also get extension version
|
|
38
|
+
id: t.extensionId
|
|
39
|
+
} : t.extension === "not-found" ? {
|
|
40
|
+
status: "not-installed",
|
|
41
|
+
error: { message: "Extension not found", code: "ext-not-installed" }
|
|
42
|
+
} : {
|
|
43
|
+
status: "unreachable",
|
|
44
|
+
error: { message: "Client not initialized", code: "ext-connection-failed" }
|
|
45
|
+
}, []), O = d((t) => {
|
|
46
|
+
if (t.server.status === "pending-extension-ready")
|
|
47
|
+
return {
|
|
48
|
+
status: "pending-extension-ready",
|
|
49
|
+
error: { message: "Extension not ready", code: "server-pending-ext-ready" }
|
|
50
|
+
};
|
|
51
|
+
const r = t.server;
|
|
52
|
+
switch (r.status) {
|
|
53
|
+
case "ready":
|
|
54
|
+
return { status: "ready", version: r.version || "unknown" };
|
|
55
|
+
case "setup":
|
|
56
|
+
return {
|
|
57
|
+
status: "setup",
|
|
58
|
+
version: r.version || "unknown",
|
|
59
|
+
error: {
|
|
60
|
+
message: r.error?.message || "Setup required",
|
|
61
|
+
code: "server-in-setup-status"
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
case "resource-admin":
|
|
65
|
+
return {
|
|
66
|
+
status: "resource-admin",
|
|
67
|
+
version: r.version || "unknown",
|
|
68
|
+
error: {
|
|
69
|
+
message: r.error?.message || "Resource admin required",
|
|
70
|
+
code: "server-in-admin-status"
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
case "error":
|
|
74
|
+
return {
|
|
75
|
+
status: "error",
|
|
76
|
+
error: {
|
|
77
|
+
message: r.error?.message || "Unknown error",
|
|
78
|
+
code: "server-unexpected-error"
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
case "not-reachable":
|
|
82
|
+
return {
|
|
83
|
+
status: "unreachable",
|
|
84
|
+
error: {
|
|
85
|
+
message: r.error?.message || "Server not reachable",
|
|
86
|
+
code: "server-conn-refused"
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
default:
|
|
90
|
+
return {
|
|
91
|
+
status: "unreachable",
|
|
92
|
+
error: {
|
|
93
|
+
message: "Unknown server status",
|
|
94
|
+
code: "server-unexpected-error"
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}, []), C = d((t) => {
|
|
99
|
+
if (t.server.status === "not-connected")
|
|
100
|
+
return { status: "pending-lna-ready" };
|
|
101
|
+
const r = t.server;
|
|
102
|
+
switch (r.status) {
|
|
103
|
+
case "ready":
|
|
104
|
+
return { status: "ready", version: r.version || "unknown" };
|
|
105
|
+
case "setup":
|
|
106
|
+
return { status: "setup", version: r.version || "unknown" };
|
|
107
|
+
case "resource-admin":
|
|
108
|
+
return { status: "resource-admin", version: r.version || "unknown" };
|
|
109
|
+
case "error":
|
|
110
|
+
case "not-reachable":
|
|
111
|
+
return {
|
|
112
|
+
status: "error",
|
|
113
|
+
error: { message: r.error?.message || "Connection error" }
|
|
114
|
+
};
|
|
115
|
+
default:
|
|
116
|
+
return {
|
|
117
|
+
status: "error",
|
|
118
|
+
error: { message: "Unknown server status" }
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}, []), L = d(
|
|
122
|
+
(t, r) => {
|
|
123
|
+
if (t.server.status !== "pending-extension-ready") {
|
|
124
|
+
const s = t.server.status;
|
|
125
|
+
if (s === "ready" || s === "setup" || s === "resource-admin")
|
|
126
|
+
return !0;
|
|
127
|
+
}
|
|
128
|
+
if (r.server.status !== "not-connected") {
|
|
129
|
+
const s = r.server.status;
|
|
130
|
+
if (s === "ready" || s === "setup" || s === "resource-admin")
|
|
131
|
+
return !0;
|
|
132
|
+
}
|
|
133
|
+
return !1;
|
|
134
|
+
},
|
|
135
|
+
[]
|
|
136
|
+
), h = d(
|
|
137
|
+
(t, r, s) => {
|
|
138
|
+
if (r === "skipped")
|
|
139
|
+
return { status: "skipped", serverUrl: s };
|
|
140
|
+
if (t.server.status !== "not-connected") {
|
|
141
|
+
const c = t.server;
|
|
142
|
+
return c.status === "ready" || c.status === "setup" || c.status === "resource-admin" ? { status: "granted", serverUrl: s } : {
|
|
143
|
+
status: "unreachable",
|
|
144
|
+
serverUrl: s,
|
|
145
|
+
error: {
|
|
146
|
+
message: c.error?.message || "Server unreachable",
|
|
147
|
+
code: "lna-unreachable"
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return r === "granted" ? { status: "granted", serverUrl: s } : { status: "prompt", serverUrl: s };
|
|
152
|
+
},
|
|
153
|
+
[]
|
|
154
|
+
), S = d(
|
|
155
|
+
async (t = !1) => {
|
|
156
|
+
const r = V().type, s = W().type;
|
|
157
|
+
let c = await e.getExtensionState();
|
|
158
|
+
(c.extension === "not-initialized" || t) && (c = await e.testExtensionConnectivity());
|
|
159
|
+
let n = await e.getDirectState();
|
|
160
|
+
const i = a.getDirectStatus();
|
|
161
|
+
i === "granted" && (n.server.status === "not-connected" || t) && (n = await e.testDirectConnectivity());
|
|
162
|
+
const M = j(n) || "http://localhost:1135", I = h(n, i, M);
|
|
163
|
+
return e.getConnectionMode() === null && (Y(n) ? await e.setConnectionMode("direct") : q(c) && await e.setConnectionMode("extension")), a.isServerInstallConfirmed() || L(c, n) && a.setServerInstallConfirmed(!0), {
|
|
164
|
+
extension: y(c),
|
|
165
|
+
server: O(c),
|
|
166
|
+
lna: I,
|
|
167
|
+
lnaServer: C(n),
|
|
168
|
+
env: { browser: r, os: s },
|
|
169
|
+
browsers: J,
|
|
170
|
+
os: X,
|
|
171
|
+
userConfirmations: { serverInstall: a.isServerInstallConfirmed() },
|
|
172
|
+
selectedConnection: v(e.getConnectionMode())
|
|
173
|
+
};
|
|
174
|
+
},
|
|
175
|
+
[
|
|
176
|
+
e,
|
|
177
|
+
a,
|
|
178
|
+
y,
|
|
179
|
+
O,
|
|
180
|
+
C,
|
|
181
|
+
v,
|
|
182
|
+
h,
|
|
183
|
+
L
|
|
184
|
+
]
|
|
185
|
+
), l = d(() => {
|
|
186
|
+
if (!f.current)
|
|
187
|
+
throw new Error("Cannot get state: currentStateRef is null");
|
|
188
|
+
return {
|
|
189
|
+
...f.current,
|
|
190
|
+
// Override userConfirmations from storage (in case updated outside buildSetupState)
|
|
191
|
+
userConfirmations: {
|
|
192
|
+
serverInstall: a.isServerInstallConfirmed()
|
|
193
|
+
},
|
|
194
|
+
// Override selectedConnection from client (in case changed via handler)
|
|
195
|
+
selectedConnection: v(e.getConnectionMode())
|
|
196
|
+
};
|
|
197
|
+
}, [a, e, v]), D = _(
|
|
198
|
+
() => ({
|
|
199
|
+
[m.MODAL_READY]: async () => (E.info("MODAL_READY: building initial state"), { setupState: l() }),
|
|
200
|
+
[m.MODAL_REFRESH]: async () => {
|
|
201
|
+
E.info("MODAL_REFRESH: refreshing state");
|
|
202
|
+
const t = await S(!0);
|
|
203
|
+
f.current = t;
|
|
204
|
+
const r = l();
|
|
205
|
+
return E.info(`MODAL_REFRESH: state refreshed
|
|
206
|
+
`, JSON.stringify(r, null, 2)), u.current?.updateState(l()), { setupState: r };
|
|
207
|
+
},
|
|
208
|
+
[m.MODAL_LNA_CONNECT]: async (t) => {
|
|
209
|
+
const r = t.payload.serverUrl;
|
|
210
|
+
console.log("[SetupModalProcessor] LNA connect:", r);
|
|
211
|
+
const s = await e.testDirectConnectivity(r);
|
|
212
|
+
if (s.server.status !== "not-connected") {
|
|
213
|
+
const n = s.server.status;
|
|
214
|
+
if (n === "ready" || n === "setup" || n === "resource-admin") {
|
|
215
|
+
a.setDirectStatus("granted"), e.getConnectionMode() === null && await e.setConnectionMode("direct");
|
|
216
|
+
const i = await S();
|
|
217
|
+
return f.current = i, u.current?.updateState(l()), { success: !0 };
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const c = await S();
|
|
221
|
+
return f.current = c, u.current?.updateState(l()), { success: !1 };
|
|
222
|
+
},
|
|
223
|
+
[m.MODAL_LNA_SKIP]: async () => {
|
|
224
|
+
a.setDirectStatus("skipped");
|
|
225
|
+
const t = await S();
|
|
226
|
+
return f.current = t, u.current?.updateState(l()), { success: !0 };
|
|
227
|
+
},
|
|
228
|
+
[m.MODAL_CLOSE]: () => {
|
|
229
|
+
w();
|
|
230
|
+
},
|
|
231
|
+
[m.MODAL_COMPLETE]: () => {
|
|
232
|
+
w();
|
|
233
|
+
},
|
|
234
|
+
[m.MODAL_CONFIRM_SERVER_INSTALL]: (t) => (a.setServerInstallConfirmed(t.payload.confirmed), u.current?.updateState(l()), { success: !0 }),
|
|
235
|
+
[m.MODAL_SELECT_CONNECTION]: async (t) => {
|
|
236
|
+
const s = t.payload.connection === "lna" ? "direct" : "extension";
|
|
237
|
+
return await e.setConnectionMode(s), u.current?.updateState(l()), { success: !0 };
|
|
238
|
+
}
|
|
239
|
+
}),
|
|
240
|
+
[E, e, a, S, l, C, w]
|
|
241
|
+
);
|
|
242
|
+
return b(() => (u.current = new Z({ modalHtmlPath: o, handlers: D }), () => {
|
|
243
|
+
u.current?.destroy(), u.current = null;
|
|
244
|
+
}), [o, D]), b(() => {
|
|
245
|
+
p && u.current ? S(!0).then((t) => {
|
|
246
|
+
f.current = t, u.current?.show(t), x?.();
|
|
247
|
+
}).catch((t) => {
|
|
248
|
+
console.error("[SetupModalProcessor] buildSetupState failed:", t);
|
|
249
|
+
}) : !p && u.current && u.current.destroy();
|
|
250
|
+
}, [p, S, x]), null;
|
|
251
|
+
}
|
|
252
|
+
const oe = {
|
|
253
|
+
status: "not-initialized",
|
|
254
|
+
mode: null,
|
|
255
|
+
extensionId: null,
|
|
256
|
+
url: null,
|
|
257
|
+
server: P,
|
|
258
|
+
error: null
|
|
259
|
+
}, ae = {
|
|
260
|
+
status: "initializing",
|
|
261
|
+
mode: null,
|
|
262
|
+
extensionId: null,
|
|
263
|
+
url: null,
|
|
264
|
+
server: P,
|
|
265
|
+
error: null
|
|
266
|
+
};
|
|
267
|
+
function ie(e) {
|
|
268
|
+
return e.status === "not-initialized";
|
|
269
|
+
}
|
|
270
|
+
function ue(e) {
|
|
271
|
+
return e.status === "initializing";
|
|
272
|
+
}
|
|
273
|
+
function ce(e) {
|
|
274
|
+
return e.status !== "not-initialized" && e.status !== "initializing";
|
|
275
|
+
}
|
|
276
|
+
function U(e) {
|
|
277
|
+
return e.status === "ready";
|
|
278
|
+
}
|
|
279
|
+
function de(e) {
|
|
280
|
+
return U(e) && e.server.status === "ready";
|
|
281
|
+
}
|
|
282
|
+
function le(e) {
|
|
283
|
+
return Q(e) ? {
|
|
284
|
+
status: e.extension === "not-initialized" ? "initializing" : e.extension === "not-found" ? "extension-not-found" : "ready",
|
|
285
|
+
mode: "extension",
|
|
286
|
+
extensionId: e.extensionId,
|
|
287
|
+
url: null,
|
|
288
|
+
server: e.server,
|
|
289
|
+
error: e.server.error
|
|
290
|
+
} : {
|
|
291
|
+
status: e.url === null ? "direct-not-connected" : "ready",
|
|
292
|
+
mode: "direct",
|
|
293
|
+
extensionId: null,
|
|
294
|
+
url: e.url,
|
|
295
|
+
server: e.server,
|
|
296
|
+
error: e.server.error
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
const ve = {
|
|
300
|
+
isNotInitialized: ie,
|
|
301
|
+
isInitializing: ue,
|
|
302
|
+
isInitialized: ce,
|
|
303
|
+
isReady: U,
|
|
304
|
+
isOverallReady: de
|
|
305
|
+
}, z = re(null);
|
|
306
|
+
z.displayName = "BodhiContext";
|
|
307
|
+
function me({
|
|
308
|
+
children: e,
|
|
309
|
+
client: o,
|
|
310
|
+
modalHtmlPath: w,
|
|
311
|
+
handleCallback: x = !0,
|
|
312
|
+
callbackPath: R = "/callback",
|
|
313
|
+
basePath: g = "/",
|
|
314
|
+
logLevel: A = "warn"
|
|
315
|
+
}) {
|
|
316
|
+
const p = _(() => new B("BodhiProvider", A), [A]), E = T(!1), u = T(!1), [a, f] = N(oe), [v, y] = N($), [O, C] = N(!1), [L, h] = N("ready");
|
|
317
|
+
b(() => {
|
|
318
|
+
const n = (i) => {
|
|
319
|
+
switch (i.type) {
|
|
320
|
+
case "client-state":
|
|
321
|
+
f(le(i.state));
|
|
322
|
+
break;
|
|
323
|
+
case "auth-state":
|
|
324
|
+
y(i.state), C(!1);
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
return o.setStateCallback(n), () => {
|
|
329
|
+
o.setStateCallback(ee);
|
|
330
|
+
};
|
|
331
|
+
}, [o]);
|
|
332
|
+
const S = d(async () => {
|
|
333
|
+
h("loading");
|
|
334
|
+
}, []), l = d(() => {
|
|
335
|
+
h("ready");
|
|
336
|
+
}, []), D = d(() => {
|
|
337
|
+
h("loaded");
|
|
338
|
+
}, []), t = d(
|
|
339
|
+
async (n) => {
|
|
340
|
+
f(ae);
|
|
341
|
+
try {
|
|
342
|
+
await o.init(n || {});
|
|
343
|
+
} catch (i) {
|
|
344
|
+
p.error("Init failed:", i);
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
[o, p]
|
|
348
|
+
);
|
|
349
|
+
b(() => {
|
|
350
|
+
if (u.current) return;
|
|
351
|
+
u.current = !0, (async () => {
|
|
352
|
+
if (await t(), !x) return;
|
|
353
|
+
const i = new URL(window.location.href);
|
|
354
|
+
if (i.pathname !== R) return;
|
|
355
|
+
const k = i.searchParams.get("code"), M = i.searchParams.get("state");
|
|
356
|
+
!k || !M || E.current || (E.current = !0, te(o) && (C(!0), o.handleOAuthCallback(k, M).then(() => {
|
|
357
|
+
window.history.replaceState({}, "", g);
|
|
358
|
+
}).catch((I) => {
|
|
359
|
+
p.error("OAuth callback failed:", I), y({
|
|
360
|
+
status: "error",
|
|
361
|
+
user: null,
|
|
362
|
+
accessToken: null,
|
|
363
|
+
error: {
|
|
364
|
+
message: I instanceof Error ? I.message : "OAuth callback failed",
|
|
365
|
+
code: "OAUTH_CALLBACK_FAILED"
|
|
366
|
+
}
|
|
367
|
+
}), C(!1), window.history.replaceState({}, "", g);
|
|
368
|
+
})));
|
|
369
|
+
})();
|
|
370
|
+
}, [t, o, x, R, g]);
|
|
371
|
+
const r = d(async () => {
|
|
372
|
+
C(!0);
|
|
373
|
+
try {
|
|
374
|
+
await o.login();
|
|
375
|
+
} catch (n) {
|
|
376
|
+
y({
|
|
377
|
+
status: "error",
|
|
378
|
+
user: null,
|
|
379
|
+
accessToken: null,
|
|
380
|
+
error: {
|
|
381
|
+
message: n instanceof Error ? n.message : "Login failed",
|
|
382
|
+
code: "LOGIN_FAILED"
|
|
383
|
+
}
|
|
384
|
+
}), C(!1);
|
|
385
|
+
}
|
|
386
|
+
}, [o]), s = d(async () => {
|
|
387
|
+
try {
|
|
388
|
+
await o.logout();
|
|
389
|
+
} catch (n) {
|
|
390
|
+
y({
|
|
391
|
+
status: "error",
|
|
392
|
+
user: null,
|
|
393
|
+
accessToken: null,
|
|
394
|
+
error: {
|
|
395
|
+
message: n instanceof Error ? n.message : "Logout failed",
|
|
396
|
+
code: "LOGOUT_FAILED"
|
|
397
|
+
}
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
}, [o]), c = _(() => {
|
|
401
|
+
const n = a.status === "ready", i = a.server.status === "ready";
|
|
402
|
+
return {
|
|
403
|
+
client: o,
|
|
404
|
+
clientState: a,
|
|
405
|
+
auth: v,
|
|
406
|
+
isAuthLoading: O,
|
|
407
|
+
login: r,
|
|
408
|
+
logout: s,
|
|
409
|
+
showSetup: S,
|
|
410
|
+
hideSetup: l,
|
|
411
|
+
setupState: L,
|
|
412
|
+
// Computed auth properties
|
|
413
|
+
isAuthenticated: v.status === "authenticated",
|
|
414
|
+
canLogin: n && !O,
|
|
415
|
+
// Computed connection properties
|
|
416
|
+
isReady: n,
|
|
417
|
+
isServerReady: i,
|
|
418
|
+
isOverallReady: n && i,
|
|
419
|
+
isInitializing: a.status === "initializing",
|
|
420
|
+
isExtension: a.mode === "extension",
|
|
421
|
+
isDirect: a.mode === "direct"
|
|
422
|
+
};
|
|
423
|
+
}, [o, a, v, O, L, r, s, S, l]);
|
|
424
|
+
return /* @__PURE__ */ F(z.Provider, { value: c, children: [
|
|
425
|
+
/* @__PURE__ */ H(
|
|
426
|
+
se,
|
|
427
|
+
{
|
|
428
|
+
client: o,
|
|
429
|
+
modalHtmlPath: w,
|
|
430
|
+
hideSetup: l,
|
|
431
|
+
onSetupReady: D,
|
|
432
|
+
setupState: L,
|
|
433
|
+
basePath: g,
|
|
434
|
+
logLevel: A
|
|
435
|
+
}
|
|
436
|
+
),
|
|
437
|
+
e
|
|
438
|
+
] });
|
|
439
|
+
}
|
|
440
|
+
function ge() {
|
|
441
|
+
const e = ne(z);
|
|
442
|
+
if (!e) throw new Error("useBodhi must be used within BodhiProvider");
|
|
443
|
+
return e;
|
|
444
|
+
}
|
|
445
|
+
const pe = "production";
|
|
446
|
+
export {
|
|
447
|
+
me as BodhiProvider,
|
|
448
|
+
z as BodhiReactContext,
|
|
449
|
+
ve as ClientCtxState,
|
|
450
|
+
ae as INITIALIZING_CLIENT_CONTEXT_STATE,
|
|
451
|
+
oe as INITIAL_CLIENT_CONTEXT_STATE,
|
|
452
|
+
pe as REACT_CORE_BUILD_MODE,
|
|
453
|
+
le as clientStateToContextState,
|
|
454
|
+
Ae as createApiError,
|
|
455
|
+
Oe as createOperationError,
|
|
456
|
+
Le as isApiResultError,
|
|
457
|
+
he as isApiResultOperationError,
|
|
458
|
+
we as isApiResultSuccess,
|
|
459
|
+
xe as isAuthError,
|
|
460
|
+
Ie as isAuthLoading,
|
|
461
|
+
_e as isAuthenticated,
|
|
462
|
+
ce as isClientCtxInitialized,
|
|
463
|
+
ue as isClientCtxInitializing,
|
|
464
|
+
ie as isClientCtxNotInitialized,
|
|
465
|
+
U as isClientCtxReady,
|
|
466
|
+
Re as isClientReady,
|
|
467
|
+
De as isDirectState,
|
|
468
|
+
Me as isExtensionState,
|
|
469
|
+
Ne as isOperationError,
|
|
470
|
+
de as isOverallReady,
|
|
471
|
+
Te as isWebUIClient,
|
|
472
|
+
ge as useBodhi
|
|
473
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type ExtensionErrorCode = 'ext-not-installed' | 'ext-connection-failed' | 'ext-unsupported-version';
|
|
2
|
+
export declare const EXT_NOT_INSTALLED: ExtensionErrorCode;
|
|
3
|
+
export declare const EXT_CONNECTION_FAILED: ExtensionErrorCode;
|
|
4
|
+
export declare const EXT_UNSUPPORTED_VERSION: ExtensionErrorCode;
|
|
5
|
+
export interface ExtensionStateReady {
|
|
6
|
+
/** Current extension status */
|
|
7
|
+
status: 'ready';
|
|
8
|
+
/** Extension version */
|
|
9
|
+
version: string;
|
|
10
|
+
/** Extension ID (always present when ready) */
|
|
11
|
+
id: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ExtensionStateNotReady {
|
|
14
|
+
/** Current extension status */
|
|
15
|
+
status: 'unreachable' | 'not-installed' | 'unsupported';
|
|
16
|
+
/** Error details */
|
|
17
|
+
error: {
|
|
18
|
+
/** Error message */
|
|
19
|
+
message: string;
|
|
20
|
+
/** Error code */
|
|
21
|
+
code: ExtensionErrorCode;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export type ExtensionState = ExtensionStateReady | ExtensionStateNotReady;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consolidated types for setup-modal
|
|
3
|
+
*
|
|
4
|
+
* This folder contains all domain and protocol types organized by domain.
|
|
5
|
+
* It is designed to be independent and copyable to other packages.
|
|
6
|
+
*/
|
|
7
|
+
export type { BrowserType, OSType, EnvState, SupportedBrowser, NotSupportedBrowser, Browser, SupportedOS, NotSupportedOS, OS } from './platform';
|
|
8
|
+
export type { ExtensionErrorCode, ExtensionStateReady, ExtensionStateNotReady, ExtensionState } from './extension';
|
|
9
|
+
export { EXT_NOT_INSTALLED, EXT_CONNECTION_FAILED, EXT_UNSUPPORTED_VERSION } from './extension';
|
|
10
|
+
export type { ServerErrorCode, ServerStateReady, ServerStateReachable, ServerStatePending, ServerStateUnreachable, ServerStateError, ServerState } from './server';
|
|
11
|
+
export { SERVER_PENDING_EXT_READY, SERVER_CONN_REFUSED, SERVER_CONN_TIMEOUT, SERVER_NOT_FOUND, SERVER_NETWORK_UNREACHABLE, SERVER_SERVICE_UNAVAILABLE, SERVER_UNEXPECTED_ERROR, SERVER_IN_SETUP_STATUS, SERVER_IN_ADMIN_STATUS, } from './server';
|
|
12
|
+
export type { LnaErrorCode, LnaStatePrompt, LnaStateSkipped, LnaStateGranted, LnaStateUnreachable, LnaStateDenied, LnaStateUnsupported, LnaState, LnaServerStatePending, LnaServerStateReady, LnaServerStateSetup, LnaServerStateResourceAdmin, LnaServerStateError, LnaServerState, } from './lna';
|
|
13
|
+
export { LNA_UNREACHABLE, LNA_PERMISSION_DENIED } from './lna';
|
|
14
|
+
export { SetupStep, DEFAULT_USER_CONFIRMATIONS, DEFAULT_SETUP_STATE } from './state';
|
|
15
|
+
export type { SelectedConnection, UserConfirmations, SetupState } from './state';
|
|
16
|
+
export type { RequestId, MessageKind, RequestMessage, ResponseMessage, ErrorMessage, EventMessage, ProtocolMessage } from './protocol';
|
|
17
|
+
export { isRequestMessage, isResponseMessage, isErrorMessage, isEventMessage } from './protocol';
|
|
18
|
+
export type { MessageTypeRegistry, MessageType, RequestPayload, ResponsePayload, RequestHandlers } from './message-types';
|
|
19
|
+
export { MSG, isMessageType } from './message-types';
|
|
20
|
+
export { isExtensionStateReady, isExtensionStateNotReady, isServerStateReady, isServerStateReachable, isServerStatePending, isServerStateUnreachable, isServerStateError, isLnaStatePrompt, isLnaStateSkipped, isLnaStateGranted, isLnaStateUnreachable, isLnaStateDenied, isLnaStateUnsupported, isLnaServerStatePending, isLnaServerStateReady, isLnaServerStateSetup, isLnaServerStateResourceAdmin, isLnaServerStateError, isSupportedBrowser, isNotSupportedBrowser, isSupportedOS, isNotSupportedOS, } from './type-guards';
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export type LnaErrorCode = 'lna-unreachable' | 'lna-permission-denied';
|
|
2
|
+
export declare const LNA_UNREACHABLE: LnaErrorCode;
|
|
3
|
+
export declare const LNA_PERMISSION_DENIED: LnaErrorCode;
|
|
4
|
+
export interface LnaStatePrompt {
|
|
5
|
+
status: 'prompt';
|
|
6
|
+
serverUrl?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface LnaStateSkipped {
|
|
9
|
+
status: 'skipped';
|
|
10
|
+
serverUrl?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface LnaStateGranted {
|
|
13
|
+
status: 'granted';
|
|
14
|
+
serverUrl: string;
|
|
15
|
+
}
|
|
16
|
+
export interface LnaStateUnreachable {
|
|
17
|
+
status: 'unreachable';
|
|
18
|
+
serverUrl: string;
|
|
19
|
+
error: {
|
|
20
|
+
message: string;
|
|
21
|
+
code: LnaErrorCode;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface LnaStateDenied {
|
|
25
|
+
status: 'denied';
|
|
26
|
+
error: {
|
|
27
|
+
message: string;
|
|
28
|
+
code: LnaErrorCode;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface LnaStateUnsupported {
|
|
32
|
+
status: 'unsupported';
|
|
33
|
+
}
|
|
34
|
+
export type LnaState = LnaStatePrompt | LnaStateSkipped | LnaStateGranted | LnaStateUnreachable | LnaStateDenied | LnaStateUnsupported;
|
|
35
|
+
export interface LnaServerStatePending {
|
|
36
|
+
status: 'pending-lna-ready';
|
|
37
|
+
}
|
|
38
|
+
export interface LnaServerStateReady {
|
|
39
|
+
status: 'ready';
|
|
40
|
+
version: string;
|
|
41
|
+
}
|
|
42
|
+
export interface LnaServerStateSetup {
|
|
43
|
+
status: 'setup';
|
|
44
|
+
version: string;
|
|
45
|
+
}
|
|
46
|
+
export interface LnaServerStateResourceAdmin {
|
|
47
|
+
status: 'resource-admin';
|
|
48
|
+
version: string;
|
|
49
|
+
}
|
|
50
|
+
export interface LnaServerStateError {
|
|
51
|
+
status: 'error';
|
|
52
|
+
error: {
|
|
53
|
+
message: string;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export type LnaServerState = LnaServerStatePending | LnaServerStateReady | LnaServerStateSetup | LnaServerStateResourceAdmin | LnaServerStateError;
|