@zhin.js/client 1.0.18 → 1.1.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/client/bootstrap/loadConsoleEntries.test.ts +32 -0
- package/client/bootstrap/loadConsoleEntries.ts +149 -0
- package/client/console-utils/cn.ts +6 -0
- package/client/console-utils/remoteApi.ts +48 -0
- package/client/index.ts +24 -5
- package/client/persistence/idb-store.ts +76 -0
- package/client/runtime/index.ts +12 -0
- package/client/store/createRegistryStore.ts +46 -0
- package/client/websocket/manager.ts +136 -3
- package/client/websocket/remote-settings.ts +25 -0
- package/dist/bootstrap/loadConsoleEntries.d.ts +26 -0
- package/dist/bootstrap/loadConsoleEntries.d.ts.map +1 -0
- package/dist/bootstrap/loadConsoleEntries.js +111 -0
- package/dist/bootstrap/loadConsoleEntries.js.map +1 -0
- package/dist/bootstrap/loadConsoleEntries.test.d.ts +2 -0
- package/dist/bootstrap/loadConsoleEntries.test.d.ts.map +1 -0
- package/dist/bootstrap/loadConsoleEntries.test.js +27 -0
- package/dist/bootstrap/loadConsoleEntries.test.js.map +1 -0
- package/dist/console-utils/cn.d.ts +3 -0
- package/dist/console-utils/cn.d.ts.map +1 -0
- package/dist/console-utils/cn.js +6 -0
- package/dist/console-utils/cn.js.map +1 -0
- package/dist/console-utils/remoteApi.d.ts +7 -0
- package/dist/console-utils/remoteApi.d.ts.map +1 -0
- package/dist/console-utils/remoteApi.js +41 -0
- package/dist/console-utils/remoteApi.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/persistence/idb-store.d.ts +15 -0
- package/dist/persistence/idb-store.d.ts.map +1 -0
- package/dist/persistence/idb-store.js +61 -0
- package/dist/persistence/idb-store.js.map +1 -0
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +10 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/store/createRegistryStore.d.ts +9 -0
- package/dist/store/createRegistryStore.d.ts.map +1 -0
- package/dist/store/createRegistryStore.js +38 -0
- package/dist/store/createRegistryStore.js.map +1 -0
- package/dist/websocket/manager.d.ts +5 -0
- package/dist/websocket/manager.d.ts.map +1 -1
- package/dist/websocket/manager.js +134 -2
- package/dist/websocket/manager.js.map +1 -1
- package/dist/websocket/remote-settings.d.ts +5 -0
- package/dist/websocket/remote-settings.d.ts.map +1 -0
- package/dist/websocket/remote-settings.js +23 -0
- package/dist/websocket/remote-settings.js.map +1 -0
- package/package.json +6 -5
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { DEFAULT_CONSOLE_BASE_PATH } from "@zhin.js/console-types";
|
|
2
|
+
export function createPluginRegisterHostApi(options) {
|
|
3
|
+
const addRoute = options.addRoute;
|
|
4
|
+
return {
|
|
5
|
+
React: options.React,
|
|
6
|
+
addRoute,
|
|
7
|
+
addPage: addRoute,
|
|
8
|
+
addTool: options.addTool,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
const CONSOLE_API_BASE_STORAGE_KEY = "zhin_api_base";
|
|
12
|
+
function resolveStoredApiBase() {
|
|
13
|
+
if (typeof window === "undefined")
|
|
14
|
+
return "";
|
|
15
|
+
const stored = localStorage.getItem(CONSOLE_API_BASE_STORAGE_KEY)?.trim();
|
|
16
|
+
return stored ? stored.replace(/\/$/, "") : "";
|
|
17
|
+
}
|
|
18
|
+
function defaultEntriesUrl() {
|
|
19
|
+
const apiBase = resolveStoredApiBase();
|
|
20
|
+
if (apiBase)
|
|
21
|
+
return `${apiBase}/entries`;
|
|
22
|
+
const root = DEFAULT_CONSOLE_BASE_PATH.replace(/\/$/, "");
|
|
23
|
+
return `${root ? `${root}/entries` : "/entries"}`;
|
|
24
|
+
}
|
|
25
|
+
function resolveRequestUrl(pathOrUrl) {
|
|
26
|
+
if (pathOrUrl.startsWith("http://") || pathOrUrl.startsWith("https://"))
|
|
27
|
+
return pathOrUrl;
|
|
28
|
+
if (typeof window === "undefined")
|
|
29
|
+
return pathOrUrl;
|
|
30
|
+
const apiBase = resolveStoredApiBase();
|
|
31
|
+
const origin = apiBase || window.location.origin;
|
|
32
|
+
return new URL(pathOrUrl, `${origin}/`).href;
|
|
33
|
+
}
|
|
34
|
+
function resolvePluginImportUrl(resolvedModule, assetOrigin) {
|
|
35
|
+
if (resolvedModule.startsWith("http://") || resolvedModule.startsWith("https://"))
|
|
36
|
+
return resolvedModule;
|
|
37
|
+
if (typeof window === "undefined")
|
|
38
|
+
return resolvedModule;
|
|
39
|
+
const origin = assetOrigin?.replace(/\/$/, "") || window.location.origin;
|
|
40
|
+
return new URL(resolvedModule, `${origin}/`).href;
|
|
41
|
+
}
|
|
42
|
+
function resolveFetchInit(init) {
|
|
43
|
+
return typeof init === "function" ? init() : (init ?? {});
|
|
44
|
+
}
|
|
45
|
+
export async function fetchConsoleEntries(options) {
|
|
46
|
+
const pathOrUrl = options?.entriesUrl ?? defaultEntriesUrl();
|
|
47
|
+
const url = resolveRequestUrl(pathOrUrl);
|
|
48
|
+
const init = resolveFetchInit(options?.fetchInit);
|
|
49
|
+
const res = await fetch(url, {
|
|
50
|
+
...init,
|
|
51
|
+
signal: options?.signal ?? init.signal,
|
|
52
|
+
});
|
|
53
|
+
if (!res.ok)
|
|
54
|
+
throw Object.assign(new Error(`load entries failed: ${res.status}`), { status: res.status });
|
|
55
|
+
return (await res.json());
|
|
56
|
+
}
|
|
57
|
+
export function getRegisterFn(mod) {
|
|
58
|
+
if (!mod)
|
|
59
|
+
return null;
|
|
60
|
+
const r = mod["register"];
|
|
61
|
+
if (typeof r === "function")
|
|
62
|
+
return r;
|
|
63
|
+
const d = mod["default"];
|
|
64
|
+
if (d && typeof d["register"] === "function")
|
|
65
|
+
return d["register"];
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
export async function registerConsolePluginsFromEntries(entries, hostApi, onEntryError, assetOrigin) {
|
|
69
|
+
if (!entries.length)
|
|
70
|
+
return;
|
|
71
|
+
await Promise.all(entries.map(async (entry) => {
|
|
72
|
+
try {
|
|
73
|
+
const specifier = resolvePluginImportUrl(entry.resolvedModule, assetOrigin);
|
|
74
|
+
const mod = (await import(/* @vite-ignore */ specifier));
|
|
75
|
+
const register = getRegisterFn(mod);
|
|
76
|
+
if (register)
|
|
77
|
+
await register(hostApi);
|
|
78
|
+
else
|
|
79
|
+
throw new Error(`entry "${entry.id}" has no register export`);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (onEntryError)
|
|
83
|
+
onEntryError(entry, error);
|
|
84
|
+
else
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
export async function loadConsoleEntries(options) {
|
|
90
|
+
options.beforeLoad?.();
|
|
91
|
+
let data;
|
|
92
|
+
try {
|
|
93
|
+
data = await fetchConsoleEntries(options);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
const status = typeof error.status === "number"
|
|
97
|
+
? error.status
|
|
98
|
+
: 0;
|
|
99
|
+
if (options.onFetchError) {
|
|
100
|
+
options.onFetchError(status);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
if (!data.entries?.length) {
|
|
106
|
+
options.onEmpty?.();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
await registerConsolePluginsFromEntries(data.entries, options.hostApi, options.onEntryError, options.assetOrigin);
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=loadConsoleEntries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadConsoleEntries.js","sourceRoot":"","sources":["../../client/bootstrap/loadConsoleEntries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadConsoleEntries.test.d.ts","sourceRoot":"","sources":["../../client/bootstrap/loadConsoleEntries.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { createPluginRegisterHostApi, getRegisterFn } from "./loadConsoleEntries.js";
|
|
3
|
+
describe("console entries bootstrap", () => {
|
|
4
|
+
it("resolves named register export", () => {
|
|
5
|
+
const register = () => { };
|
|
6
|
+
expect(getRegisterFn({ register })).toBe(register);
|
|
7
|
+
});
|
|
8
|
+
it("resolves default register export", () => {
|
|
9
|
+
const register = () => { };
|
|
10
|
+
expect(getRegisterFn({ default: { register } })).toBe(register);
|
|
11
|
+
});
|
|
12
|
+
it("returns null when no register export exists", () => {
|
|
13
|
+
expect(getRegisterFn({ default: {} })).toBeNull();
|
|
14
|
+
});
|
|
15
|
+
it("creates a host API with addPage aliased to addRoute", () => {
|
|
16
|
+
const React = {};
|
|
17
|
+
const addRoute = vi.fn();
|
|
18
|
+
const addTool = vi.fn(() => "tool-id");
|
|
19
|
+
const api = createPluginRegisterHostApi({ React, addRoute, addTool });
|
|
20
|
+
api.addPage({ path: "/x", name: "x", element: "page" });
|
|
21
|
+
api.addRoute({ path: "/y", name: "y", element: "route" });
|
|
22
|
+
expect(api.React).toBe(React);
|
|
23
|
+
expect(addRoute).toHaveBeenCalledTimes(2);
|
|
24
|
+
expect(api.addTool({ id: "t", name: "T" })).toBe("tool-id");
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=loadConsoleEntries.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadConsoleEntries.test.js","sourceRoot":"","sources":["../../client/bootstrap/loadConsoleEntries.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAErF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,KAAK,GAAG,EAAS,CAAC;QACxB,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,2BAA2B,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAEtE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAa,EAAE,CAAC,CAAC;QAC/D,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAc,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../client/console-utils/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cn.js","sourceRoot":"","sources":["../../client/console-utils/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function getApiBase(): string;
|
|
2
|
+
export declare function getToken(): string | null;
|
|
3
|
+
export declare function resolveApiUrl(path: string): string;
|
|
4
|
+
export declare function resolveWebSocketUrl(path: string): string;
|
|
5
|
+
/** fetch with Bearer token; relative paths resolve against {@link getApiBase}. */
|
|
6
|
+
export declare function apiFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
|
|
7
|
+
//# sourceMappingURL=remoteApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteApi.d.ts","sourceRoot":"","sources":["../../client/console-utils/remoteApi.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,CAKnC;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAExC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,kFAAkF;AAClF,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC,CAgBnB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const TOKEN_KEY = "zhin_api_token";
|
|
2
|
+
const API_BASE_KEY = "zhin_api_base";
|
|
3
|
+
export function getApiBase() {
|
|
4
|
+
const stored = localStorage.getItem(API_BASE_KEY)?.trim();
|
|
5
|
+
if (stored)
|
|
6
|
+
return stored.replace(/\/$/, "");
|
|
7
|
+
if (typeof window !== "undefined")
|
|
8
|
+
return window.location.origin;
|
|
9
|
+
return "";
|
|
10
|
+
}
|
|
11
|
+
export function getToken() {
|
|
12
|
+
return localStorage.getItem(TOKEN_KEY);
|
|
13
|
+
}
|
|
14
|
+
export function resolveApiUrl(path) {
|
|
15
|
+
const base = getApiBase();
|
|
16
|
+
const p = path.startsWith("/") ? path : `/${path}`;
|
|
17
|
+
return `${base}${p}`;
|
|
18
|
+
}
|
|
19
|
+
export function resolveWebSocketUrl(path) {
|
|
20
|
+
const httpUrl = resolveApiUrl(path);
|
|
21
|
+
const url = new URL(httpUrl);
|
|
22
|
+
url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
|
|
23
|
+
return url.href;
|
|
24
|
+
}
|
|
25
|
+
/** fetch with Bearer token; relative paths resolve against {@link getApiBase}. */
|
|
26
|
+
export async function apiFetch(input, init) {
|
|
27
|
+
const token = getToken();
|
|
28
|
+
const headers = new Headers(init?.headers);
|
|
29
|
+
if (token)
|
|
30
|
+
headers.set("Authorization", `Bearer ${token}`);
|
|
31
|
+
const url = typeof input === "string" && input.startsWith("/")
|
|
32
|
+
? resolveApiUrl(input)
|
|
33
|
+
: input;
|
|
34
|
+
const res = await fetch(url, { ...init, headers });
|
|
35
|
+
if (res.status === 401) {
|
|
36
|
+
localStorage.removeItem(TOKEN_KEY);
|
|
37
|
+
window.dispatchEvent(new CustomEvent("zhin:auth-required"));
|
|
38
|
+
}
|
|
39
|
+
return res;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=remoteApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteApi.js","sourceRoot":"","sources":["../../client/console-utils/remoteApi.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACnC,MAAM,YAAY,GAAG,eAAe,CAAC;AAErC,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IACjE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACnD,OAAO,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1D,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,KAAwB,EACxB,IAAkB;IAElB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;IAE3D,MAAM,GAAG,GACP,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAChD,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;QACtB,CAAC,CAAC,KAAK,CAAC;IAEZ,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,5 +4,9 @@ export { app, type ConsoleApp, type AddRouteInput, type AddToolInput, type Conso
|
|
|
4
4
|
export * from "./websocket";
|
|
5
5
|
export type { PluginRegisterHostApi, PluginAddRouteInput, PluginAddToolInput, ConsolePluginRegister, ConsoleClientEntry, ConsoleEntriesResponse, ConsoleEntry, ConsoleFileAddEntryInput, RuntimeEnv, } from "@zhin.js/console-types";
|
|
6
6
|
export { DEFAULT_CONSOLE_BASE_PATH, CONSOLE_HOST_REACT_NAMESPACE_KEY, } from "@zhin.js/console-types";
|
|
7
|
-
export {
|
|
7
|
+
export { configureConsole, getRuntimeEnv } from "./runtime/index.js";
|
|
8
|
+
export { createRegistryStore, useRegistry, type RegistryStore, } from "./store/createRegistryStore.js";
|
|
9
|
+
export { cn } from "./console-utils/cn.js";
|
|
10
|
+
export { apiFetch, getApiBase, getToken, resolveApiUrl, resolveWebSocketUrl, } from "./console-utils/remoteApi.js";
|
|
11
|
+
export { fetchConsoleEntries, createPluginRegisterHostApi, getRegisterFn, loadConsoleEntries, registerConsolePluginsFromEntries, type CreatePluginRegisterHostApiOptions, type FetchConsoleEntriesOptions, type LoadConsoleEntriesOptions, } from "./bootstrap/loadConsoleEntries.js";
|
|
8
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAG9E,OAAO,EACL,GAAG,EACH,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,oBAAoB,GAC1B,MAAM,OAAO,CAAC;AAGf,cAAc,aAAa,CAAC;AAG5B,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,wBAAwB,EACxB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAG9E,OAAO,EACL,GAAG,EACH,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,oBAAoB,GAC1B,MAAM,OAAO,CAAC;AAGf,cAAc,aAAa,CAAC;AAG5B,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,wBAAwB,EACxB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,KAAK,aAAa,GACnB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAE3C,OAAO,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,aAAa,EACb,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,aAAa,EACb,kBAAkB,EAClB,iCAAiC,EACjC,KAAK,kCAAkC,EACvC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,mCAAmC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,9 @@ export { app, } from "./app";
|
|
|
7
7
|
// WebSocket (business data only)
|
|
8
8
|
export * from "./websocket";
|
|
9
9
|
export { DEFAULT_CONSOLE_BASE_PATH, CONSOLE_HOST_REACT_NAMESPACE_KEY, } from "@zhin.js/console-types";
|
|
10
|
-
|
|
11
|
-
export { createRegistryStore, useRegistry,
|
|
10
|
+
export { configureConsole, getRuntimeEnv } from "./runtime/index.js";
|
|
11
|
+
export { createRegistryStore, useRegistry, } from "./store/createRegistryStore.js";
|
|
12
|
+
export { cn } from "./console-utils/cn.js";
|
|
13
|
+
export { apiFetch, getApiBase, getToken, resolveApiUrl, resolveWebSocketUrl, } from "./console-utils/remoteApi.js";
|
|
14
|
+
export { fetchConsoleEntries, createPluginRegisterHostApi, getRegisterFn, loadConsoleEntries, registerConsolePluginsFromEntries, } from "./bootstrap/loadConsoleEntries.js";
|
|
12
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,SAAS,CAAC;AAExB,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAE9E,6CAA6C;AAC7C,OAAO,EACL,GAAG,GAQJ,MAAM,OAAO,CAAC;AAEf,iCAAiC;AACjC,cAAc,aAAa,CAAC;AAe5B,OAAO,EACL,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;AAEhC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,SAAS,CAAC;AAExB,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAE9E,6CAA6C;AAC7C,OAAO,EACL,GAAG,GAQJ,MAAM,OAAO,CAAC;AAEf,iCAAiC;AACjC,cAAc,aAAa,CAAC;AAe5B,OAAO,EACL,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EACL,mBAAmB,EACnB,WAAW,GAEZ,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAE3C,OAAO,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,aAAa,EACb,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,aAAa,EACb,kBAAkB,EAClB,iCAAiC,GAIlC,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type InboxRecord = {
|
|
2
|
+
id: string;
|
|
3
|
+
adapter: string;
|
|
4
|
+
botId: string;
|
|
5
|
+
kind: "message" | "request" | "notice";
|
|
6
|
+
payload: unknown;
|
|
7
|
+
updatedAt: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function idbPutInbox(record: InboxRecord): Promise<void>;
|
|
10
|
+
export declare function idbListInbox(adapter: string, botId: string, kind: InboxRecord["kind"]): Promise<InboxRecord[]>;
|
|
11
|
+
export declare function applyConsoleEvent(event: {
|
|
12
|
+
type: string;
|
|
13
|
+
data?: unknown;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=idb-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idb-store.d.ts","sourceRoot":"","sources":["../../client/persistence/idb-store.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAmBF,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CASpE;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GACxB,OAAO,CAAC,WAAW,EAAE,CAAC,CAUxB;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9F"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const DB_NAME = "zhin-console";
|
|
2
|
+
const DB_VERSION = 1;
|
|
3
|
+
const STORE_INBOX = "inbox";
|
|
4
|
+
const STORE_PENDING = "pending";
|
|
5
|
+
function openDb() {
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
const req = indexedDB.open(DB_NAME, DB_VERSION);
|
|
8
|
+
req.onerror = () => reject(req.error);
|
|
9
|
+
req.onsuccess = () => resolve(req.result);
|
|
10
|
+
req.onupgradeneeded = () => {
|
|
11
|
+
const db = req.result;
|
|
12
|
+
if (!db.objectStoreNames.contains(STORE_INBOX)) {
|
|
13
|
+
db.createObjectStore(STORE_INBOX, { keyPath: "id" });
|
|
14
|
+
}
|
|
15
|
+
if (!db.objectStoreNames.contains(STORE_PENDING)) {
|
|
16
|
+
db.createObjectStore(STORE_PENDING, { keyPath: "id" });
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export async function idbPutInbox(record) {
|
|
22
|
+
const db = await openDb();
|
|
23
|
+
await new Promise((resolve, reject) => {
|
|
24
|
+
const tx = db.transaction(STORE_INBOX, "readwrite");
|
|
25
|
+
tx.objectStore(STORE_INBOX).put(record);
|
|
26
|
+
tx.oncomplete = () => resolve();
|
|
27
|
+
tx.onerror = () => reject(tx.error);
|
|
28
|
+
});
|
|
29
|
+
db.close();
|
|
30
|
+
}
|
|
31
|
+
export async function idbListInbox(adapter, botId, kind) {
|
|
32
|
+
const db = await openDb();
|
|
33
|
+
const all = await new Promise((resolve, reject) => {
|
|
34
|
+
const tx = db.transaction(STORE_INBOX, "readonly");
|
|
35
|
+
const req = tx.objectStore(STORE_INBOX).getAll();
|
|
36
|
+
req.onsuccess = () => resolve(req.result ?? []);
|
|
37
|
+
req.onerror = () => reject(req.error);
|
|
38
|
+
});
|
|
39
|
+
db.close();
|
|
40
|
+
return all.filter((r) => r.adapter === adapter && r.botId === botId && r.kind === kind);
|
|
41
|
+
}
|
|
42
|
+
export async function applyConsoleEvent(event) {
|
|
43
|
+
const t = event.type;
|
|
44
|
+
if (t === "bot:message" || t === "bot:request" || t === "bot:notice") {
|
|
45
|
+
const data = event.data;
|
|
46
|
+
if (!data)
|
|
47
|
+
return;
|
|
48
|
+
const adapter = String(data.adapter ?? "");
|
|
49
|
+
const botId = String(data.botId ?? data.bot ?? "");
|
|
50
|
+
const id = `${adapter}:${botId}:${t}:${Date.now()}`;
|
|
51
|
+
await idbPutInbox({
|
|
52
|
+
id,
|
|
53
|
+
adapter,
|
|
54
|
+
botId,
|
|
55
|
+
kind: t === "bot:message" ? "message" : t === "bot:request" ? "request" : "notice",
|
|
56
|
+
payload: data,
|
|
57
|
+
updatedAt: Date.now(),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=idb-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idb-store.js","sourceRoot":"","sources":["../../client/persistence/idb-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIzD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,UAAU,CAAA;CAAE,QAE5E;AAED,wBAAgB,aAAa,IAAI,UAAU,CAG1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../client/runtime/index.ts"],"names":[],"mappings":"AAEA,IAAI,YAAY,GAA8B,IAAI,CAAC;AAEnD,MAAM,UAAU,gBAAgB,CAAC,OAA4C;IAC3E,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,YAAY;QAAE,OAAO,YAAY,EAAE,CAAC;IACxC,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type RegistryStore<T> = {
|
|
2
|
+
add(item: T): void;
|
|
3
|
+
remove(predicate: (item: T) => boolean): void;
|
|
4
|
+
getSnapshot(): readonly T[];
|
|
5
|
+
subscribe(listener: () => void): () => void;
|
|
6
|
+
};
|
|
7
|
+
export declare function createRegistryStore<T>(dedupeKey?: (item: T) => string): RegistryStore<T>;
|
|
8
|
+
export declare function useRegistry<T>(store: RegistryStore<T>): readonly T[];
|
|
9
|
+
//# sourceMappingURL=createRegistryStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRegistryStore.d.ts","sourceRoot":"","sources":["../../client/store/createRegistryStore.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAC7B,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACnB,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC;IAC9C,WAAW,IAAI,SAAS,CAAC,EAAE,CAAC;IAC5B,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7C,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAgCxF;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAEpE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export function createRegistryStore(dedupeKey) {
|
|
3
|
+
let items = [];
|
|
4
|
+
const listeners = new Set();
|
|
5
|
+
const emit = () => {
|
|
6
|
+
for (const l of listeners)
|
|
7
|
+
l();
|
|
8
|
+
};
|
|
9
|
+
return {
|
|
10
|
+
add(item) {
|
|
11
|
+
if (dedupeKey) {
|
|
12
|
+
const key = dedupeKey(item);
|
|
13
|
+
if (items.some((i) => dedupeKey(i) === key))
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
items = [...items, item];
|
|
17
|
+
emit();
|
|
18
|
+
},
|
|
19
|
+
remove(predicate) {
|
|
20
|
+
const next = items.filter((i) => !predicate(i));
|
|
21
|
+
if (next.length !== items.length) {
|
|
22
|
+
items = next;
|
|
23
|
+
emit();
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
getSnapshot() {
|
|
27
|
+
return items;
|
|
28
|
+
},
|
|
29
|
+
subscribe(listener) {
|
|
30
|
+
listeners.add(listener);
|
|
31
|
+
return () => listeners.delete(listener);
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function useRegistry(store) {
|
|
36
|
+
return React.useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=createRegistryStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRegistryStore.js","sourceRoot":"","sources":["../../client/store/createRegistryStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,MAAM,UAAU,mBAAmB,CAAI,SAA+B;IACpE,IAAI,KAAK,GAAQ,EAAE,CAAC;IACpB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAExC,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,KAAK,MAAM,CAAC,IAAI,SAAS;YAAE,CAAC,EAAE,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,CAAC,IAAI;YACN,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;oBAAE,OAAO;YACtD,CAAC;YACD,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;YACzB,IAAI,EAAE,CAAC;QACT,CAAC;QACD,MAAM,CAAC,SAAS;YACd,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,KAAK,GAAG,IAAI,CAAC;gBACb,IAAI,EAAE,CAAC;YACT,CAAC;QACH,CAAC;QACD,WAAW;YACT,OAAO,KAAK,CAAC;QACf,CAAC;QACD,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,KAAuB;IACpD,OAAO,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;AAC3F,CAAC"}
|
|
@@ -10,13 +10,18 @@ export declare class WebSocketManager {
|
|
|
10
10
|
private requestId;
|
|
11
11
|
private pendingRequests;
|
|
12
12
|
private connectedListeners;
|
|
13
|
+
private sseAbort;
|
|
14
|
+
private useRestTransport;
|
|
13
15
|
constructor(config?: WebSocketConfig, callbacks?: WebSocketCallbacks);
|
|
14
16
|
onConnectionChange(listener: (connected: boolean) => void): () => void;
|
|
15
17
|
private notifyConnection;
|
|
16
18
|
connect(): void;
|
|
19
|
+
private connectRestSse;
|
|
20
|
+
private pumpSse;
|
|
17
21
|
disconnect(): void;
|
|
18
22
|
send(message: unknown): void;
|
|
19
23
|
sendRequest<T = unknown>(message: unknown): Promise<T>;
|
|
24
|
+
private sendRestRequest;
|
|
20
25
|
isConnected(): boolean;
|
|
21
26
|
getState(): ConnectionState;
|
|
22
27
|
getConfig(pluginName: string): Promise<unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../client/websocket/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,kBAAkB,EACnB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,eAAe,EAKhB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../client/websocket/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,kBAAkB,EACnB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,eAAe,EAKhB,MAAM,SAAS,CAAC;AAIjB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,eAAe,CAGnB;IACJ,OAAO,CAAC,kBAAkB,CAA2C;IACrE,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,gBAAgB,CAAQ;gBAEpB,MAAM,GAAE,eAAoB,EAAE,SAAS,GAAE,kBAAuB;IAU5E,kBAAkB,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAKtE,OAAO,CAAC,gBAAgB;IAIxB,OAAO,IAAI,IAAI;YAeD,cAAc;YAmCd,OAAO;IAoCrB,UAAU,IAAI,IAAI;IAalB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAatB,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;YAuB9C,eAAe;IAoC7B,WAAW,IAAI,OAAO;IAOtB,QAAQ,IAAI,eAAe;IAIrB,SAAS,CAAC,UAAU,EAAE,MAAM;IAG5B,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;kBACb,OAAO;mBAAa,OAAO;kBAAY,MAAM;;IAM7E,SAAS,CAAC,UAAU,EAAE,MAAM;IAG5B,aAAa;IAGb,aAAa;IAGb,aAAa;cACe,MAAM;oBAAc,MAAM,EAAE;;IAExD,cAAc,CAAC,IAAI,EAAE,MAAM;iBACI,OAAO;kBAAY,MAAM;;IAExD,UAAU;eACmB,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,OAAO,CAAA;SAAE,CAAC;;IAErE,UAAU,CAAC,QAAQ,EAAE,MAAM;iBACI,MAAM;;IAErC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;iBACd,OAAO;kBAAY,MAAM;;IAExD,WAAW;cACiB,OAAO,SAAS,EAAE,YAAY,EAAE;;IAE5D,QAAQ,CAAC,QAAQ,EAAE,MAAM;iBACM,MAAM;cAAQ,MAAM;;IAEnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;iBACX,OAAO;kBAAY,MAAM;;IAExD,SAAS;IAGT,WAAW;gBACmB,OAAO,SAAS,EAAE,SAAS,EAAE;;IAE3D,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;IAGzE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;iBACL,OAAO;;IAEtC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;iBACrB,OAAO;kBAAY,MAAM;;IAExD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;iBACP,OAAO;iBAAW,MAAM;;IAEvD,WAAW,CAAC,KAAK,EAAE,MAAM;iBACM,OAAO;;IAEtC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;aACL,MAAM;eAAS,OAAO;;IAEjD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM;iBAC/B,OAAO;;IAEtC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;iBACJ,OAAO;;IAEtC,YAAY,CAAC,KAAK,EAAE,MAAM;iBACK,OAAO,SAAS,EAAE,OAAO,EAAE;;IAGhE,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,oBAAoB;CAO7B"}
|