@repo-prism/dispatch-hub 1.8.1 → 1.10.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.
@@ -5,10 +5,10 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <title>Prism Dispatch</title>
7
7
  <link rel="icon" href="/assets/prism-mark.png" />
8
- <link rel="stylesheet" href="/assets/hub.css?v=mtrcgh8x" />
8
+ <link rel="stylesheet" href="/assets/hub.css?v=mtv2ab9j" />
9
9
  </head>
10
10
  <body class="prism-theme">
11
11
  <div id="root"></div>
12
- <script type="module" src="/assets/app.js?v=mtrcgh8x"></script>
12
+ <script type="module" src="/assets/app.js?v=mtv2ab9j"></script>
13
13
  </body>
14
14
  </html>
package/dist/ensure.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { hubPort, type HubEnv } from "./paths.js";
2
+ import { type PlaygroundHandle } from "./playground.js";
2
3
  export type HubHandle = {
3
4
  readonly enabled: boolean;
4
5
  readonly detail: string;
@@ -23,5 +24,15 @@ export type EnsureHubInput = {
23
24
  */
24
25
  export declare function ensureHub(input: EnsureHubInput): Promise<HubHandle>;
25
26
  export declare function peekHub(env?: HubEnv, fetchImpl?: typeof fetch): Promise<HubHandle>;
27
+ export declare function ensurePlayground(input: {
28
+ readonly workspaceRoot: string;
29
+ readonly env?: HubEnv;
30
+ readonly fetchImpl?: typeof fetch;
31
+ }): Promise<PlaygroundHandle>;
32
+ export declare function parkPlayground(input: {
33
+ readonly workspaceRoot: string;
34
+ readonly env?: HubEnv;
35
+ readonly fetchImpl?: typeof fetch;
36
+ }): Promise<PlaygroundHandle>;
26
37
  export { hubPort };
27
38
  //# sourceMappingURL=ensure.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ensure.d.ts","sourceRoot":"","sources":["../src/ensure.ts"],"names":[],"mappings":"AAGA,OAAO,EAA4B,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAI5E,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAKF,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AA2CD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA8CzE;AAED,wBAAsB,OAAO,CAC3B,GAAG,GAAE,MAAoB,EACzB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,SAAS,CAAC,CAYpB;AAkBD,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"ensure.d.ts","sourceRoot":"","sources":["../src/ensure.ts"],"names":[],"mappings":"AAGA,OAAO,EAA4B,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAG5E,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAKF,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AA2CD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA8CzE;AAED,wBAAsB,OAAO,CAC3B,GAAG,GAAE,MAAoB,EACzB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,SAAS,CAAC,CAYpB;AAyED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAE5B;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAE5B;AAkBD,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/dist/ensure.js CHANGED
@@ -3,6 +3,7 @@ import { dirname, join } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { dashboardUrl, hubEnabled, hubPort } from "./paths.js";
5
5
  import { isHubRecordLive, readHubRecord } from "./hub-record.js";
6
+ import { PLAYGROUND_PORT, playgroundUrl, } from "./playground.js";
6
7
  const WAIT_MS = 3_000;
7
8
  const STEP_MS = 100;
8
9
  export function resolveHubBin() {
@@ -99,6 +100,66 @@ export async function peekHub(env = process.env, fetchImpl = fetch) {
99
100
  }
100
101
  return handleFrom(record, "Jobs board is up.");
101
102
  }
103
+ async function postPlayground(input, action) {
104
+ const env = input.env ?? process.env;
105
+ const fetchImpl = input.fetchImpl ?? fetch;
106
+ const fallbackUrl = playgroundUrl(PLAYGROUND_PORT);
107
+ const record = await readHubRecord(env);
108
+ if (!record) {
109
+ return {
110
+ enabled: false,
111
+ detail: "Jobs board is not running.",
112
+ url: fallbackUrl,
113
+ };
114
+ }
115
+ try {
116
+ const response = await fetchImpl(`http://127.0.0.1:${record.port}/api/playground`, {
117
+ method: "POST",
118
+ headers: {
119
+ Authorization: `Bearer ${record.token}`,
120
+ "Content-Type": "application/json",
121
+ },
122
+ body: JSON.stringify({
123
+ action,
124
+ workspace: input.workspaceRoot,
125
+ }),
126
+ signal: AbortSignal.timeout(action === "wake" ? 25_000 : 5_000),
127
+ });
128
+ const body = (await response.json());
129
+ const url = typeof body.url === "string"
130
+ ? body.url
131
+ : typeof body.port === "number"
132
+ ? playgroundUrl(body.port)
133
+ : fallbackUrl;
134
+ if (response.ok && body.ok !== false) {
135
+ return {
136
+ enabled: true,
137
+ detail: body.detail ??
138
+ (action === "wake" ? "Playground is up." : "Playground is down."),
139
+ url,
140
+ port: typeof body.port === "number" ? body.port : PLAYGROUND_PORT,
141
+ };
142
+ }
143
+ return {
144
+ enabled: false,
145
+ detail: body.detail ?? "Playground did not start.",
146
+ url,
147
+ };
148
+ }
149
+ catch {
150
+ return {
151
+ enabled: false,
152
+ detail: "Playground did not start.",
153
+ url: fallbackUrl,
154
+ };
155
+ }
156
+ }
157
+ export async function ensurePlayground(input) {
158
+ return postPlayground(input, "wake");
159
+ }
160
+ export async function parkPlayground(input) {
161
+ return postPlayground(input, "sleep");
162
+ }
102
163
  function spawnDetached(bin, env) {
103
164
  const child = spawn(process.execPath, [bin], {
104
165
  detached: true,
@@ -1 +1 @@
1
- {"version":3,"file":"ensure.js","sourceRoot":"","sources":["../src/ensure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAcjE,MAAM,OAAO,GAAG,KAAK,CAAC;AACtB,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,IAAY,EACZ,SAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,oBAAoB,IAAI,cAAc,EAAE;YACvE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC;SACjC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,MAAiB,EACjB,aAAqB,EACrB,SAAuB;IAEvB,MAAM,SAAS,CAAC,oBAAoB,MAAM,CAAC,IAAI,iBAAiB,EAAE;QAChE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;YACvC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;KACnC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,MAAiB,EAAE,MAAc;IACnD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM;QACN,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;KACtD,CAAC;AACJ,CAAC;AAUD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAqB;IACnD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC1D,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,QAAQ,IAAI,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IACnD,CAAC;IAED,IACE,QAAQ;QACR,eAAe,CAAC,QAAQ,CAAC;QACzB,CAAC,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAC1C,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,0CAA0C;SACnD,CAAC;IACJ,CAAC;IAED,CACE,KAAK,CAAC,QAAQ;QACd,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,IAAI,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC,CAC9D,EAAE,CAAC;IAEJ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,MAAM,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YACzD,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;YACD,OAAO,UAAU,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAAc,OAAO,CAAC,GAAG,EACzB,YAA0B,KAAK;IAE/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC1D,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IAClE,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,GAAW;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE;QAC3C,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAuB;QACpD,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"ensure.js","sourceRoot":"","sources":["../src/ensure.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export declare const PACKAGE_NAME: "@repo-prism/dispatch-hub";
2
2
  export { CONSOLE_ALIAS_HOST, CONSOLE_HOST, HUB_PORT, dashboardUrl, hubEnabled, hubHome, hubPort, } from "./paths.js";
3
- export { ensureHub, peekHub, resolveHubBin, type HubHandle } from "./ensure.js";
3
+ export { ensureHub, peekHub, resolveHubBin, ensurePlayground, parkPlayground, type HubHandle, } from "./ensure.js";
4
+ export { PLAYGROUND_PORT, playgroundUrl, type PlaygroundHandle, } from "./playground.js";
4
5
  export { startHub, type HubOptions, type StartedHub } from "./server.js";
5
6
  export { formatJobFinishedNotice, type JobNoticeCopy } from "./notice.js";
6
7
  export { originAllowed, tokenFromRequest, tokensMatch } from "./auth.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,EAAG,0BAAmC,CAAC;AAEhE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,OAAO,EACP,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,cAAc,GACf,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,EAAG,0BAAmC,CAAC;AAEhE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,OAAO,EACP,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,SAAS,EACT,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,KAAK,SAAS,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,aAAa,EACb,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,cAAc,GACf,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export const PACKAGE_NAME = "@repo-prism/dispatch-hub";
2
2
  export { CONSOLE_ALIAS_HOST, CONSOLE_HOST, HUB_PORT, dashboardUrl, hubEnabled, hubHome, hubPort, } from "./paths.js";
3
- export { ensureHub, peekHub, resolveHubBin } from "./ensure.js";
3
+ export { ensureHub, peekHub, resolveHubBin, ensurePlayground, parkPlayground, } from "./ensure.js";
4
+ export { PLAYGROUND_PORT, playgroundUrl, } from "./playground.js";
4
5
  export { startHub } from "./server.js";
5
6
  export { formatJobFinishedNotice } from "./notice.js";
6
7
  export { originAllowed, tokenFromRequest, tokensMatch } from "./auth.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,0BAAmC,CAAC;AAEhE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,OAAO,EACP,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAkB,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAoC,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAsB,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,0EAA0E;AAC1E,iEAAiE;AACjE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,0BAAmC,CAAC;AAEhE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,OAAO,EACP,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,SAAS,EACT,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,cAAc,GAEf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,aAAa,GAEd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAoC,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAsB,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,0EAA0E;AAC1E,iEAAiE;AACjE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Playground Vite on :17331 (next to the Console on :17330), parked with the
3
+ * same down page as the Console. 5173 is Vite’s default and collides with
4
+ * other local apps; override with `PRISM_PLAYGROUND_PORT` when needed.
5
+ *
6
+ * Sleep frees the port (kills whatever is listening) and the hub serves
7
+ * “Prism is down”. Wake starts `apps/playground` again when this repo has one.
8
+ */
9
+ import { type HubEnv } from "./paths.js";
10
+ export declare const PLAYGROUND_PORT = 17331;
11
+ export type PlaygroundMode = "vite" | "asleep";
12
+ export type PlaygroundRecord = {
13
+ readonly port: number;
14
+ readonly mode: PlaygroundMode;
15
+ readonly pid?: number;
16
+ };
17
+ export type PlaygroundHandle = {
18
+ readonly enabled: boolean;
19
+ readonly detail: string;
20
+ readonly url?: string;
21
+ readonly port?: number;
22
+ };
23
+ export declare function playgroundPort(env?: HubEnv): number;
24
+ /** Tests must not steal the user's playground port. */
25
+ export declare function effectivePlaygroundPort(env?: HubEnv): number;
26
+ export declare function playgroundViteEnabled(env?: HubEnv): boolean;
27
+ export declare function playgroundRecordPath(env?: HubEnv): string;
28
+ export declare function playgroundUrl(port: number, env?: HubEnv): string;
29
+ /** Bind/health checks stay on loopback — the daemon listens on 127.0.0.1. */
30
+ export declare function playgroundBindUrl(port: number): string;
31
+ export declare function findPlaygroundApp(workspaceRoot: string, extraRoots?: readonly string[]): Promise<string | undefined>;
32
+ /**
33
+ * Where Vite actually lives: the requested repo, other registered
34
+ * workspaces, `PRISM_PLAYGROUND_ROOT`, then this Prism checkout. Tests stay
35
+ * isolated — they only see the workspace unless they opt in.
36
+ */
37
+ export declare function resolvePlaygroundApp(workspaceRoot: string, extraRoots?: readonly string[], env?: HubEnv): Promise<string | undefined>;
38
+ export declare function readPlaygroundRecord(env?: HubEnv): Promise<PlaygroundRecord | undefined>;
39
+ export declare function writePlaygroundRecord(env: HubEnv, record: PlaygroundRecord): Promise<void>;
40
+ export declare function pidsOnPort(port: number): Promise<number[]>;
41
+ export declare function stopPlaygroundListeners(port: number, extraPid?: number): Promise<void>;
42
+ export declare function spawnPlaygroundVite(input: {
43
+ readonly workspaceRoot: string;
44
+ readonly extraRoots?: readonly string[];
45
+ readonly env?: HubEnv;
46
+ readonly port?: number;
47
+ }): Promise<{
48
+ pid: number;
49
+ } | undefined>;
50
+ export declare function playgroundIsLive(port: number, fetchImpl?: typeof fetch): Promise<boolean>;
51
+ export declare function playgroundIsDownPage(port: number, fetchImpl?: typeof fetch): Promise<boolean>;
52
+ export declare function waitForPlaygroundLive(port: number, fetchImpl?: typeof fetch, waitMs?: number): Promise<boolean>;
53
+ //# sourceMappingURL=playground.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Playground Vite on :17331 (next to the Console on :17330), parked with the
3
+ * same down page as the Console. 5173 is Vite’s default and collides with
4
+ * other local apps; override with `PRISM_PLAYGROUND_PORT` when needed.
5
+ *
6
+ * Sleep frees the port (kills whatever is listening) and the hub serves
7
+ * “Prism is down”. Wake starts `apps/playground` again when this repo has one.
8
+ */
9
+ import { execFile, spawn } from "node:child_process";
10
+ import { promisify } from "node:util";
11
+ import { access } from "node:fs/promises";
12
+ import { join } from "node:path";
13
+ import { fileURLToPath } from "node:url";
14
+ import { consoleHost, hubHome } from "./paths.js";
15
+ import { readJsonFile, writeJsonFile } from "./json-file.js";
16
+ const execFileAsync = promisify(execFile);
17
+ export const PLAYGROUND_PORT = 17331;
18
+ export function playgroundPort(env = process.env) {
19
+ const raw = env.PRISM_PLAYGROUND_PORT?.trim();
20
+ if (raw === "0")
21
+ return 0;
22
+ const parsed = raw ? Number.parseInt(raw, 10) : PLAYGROUND_PORT;
23
+ return Number.isInteger(parsed) && parsed >= 0 ? parsed : PLAYGROUND_PORT;
24
+ }
25
+ /** Tests must not steal the user's playground port. */
26
+ export function effectivePlaygroundPort(env = process.env) {
27
+ if (env.PRISM_PLAYGROUND_PORT?.trim())
28
+ return playgroundPort(env);
29
+ if (process.env.VITEST === "true")
30
+ return 0;
31
+ return PLAYGROUND_PORT;
32
+ }
33
+ export function playgroundViteEnabled(env = process.env) {
34
+ if (env.PRISM_PLAYGROUND === "0")
35
+ return false;
36
+ if ((env.VITEST === "true" || process.env.VITEST === "true") &&
37
+ env.PRISM_PLAYGROUND !== "1") {
38
+ return false;
39
+ }
40
+ return true;
41
+ }
42
+ export function playgroundRecordPath(env = process.env) {
43
+ return join(hubHome(env), "playground.json");
44
+ }
45
+ export function playgroundUrl(port, env = process.env) {
46
+ return `http://${consoleHost(env)}:${port}/`;
47
+ }
48
+ /** Bind/health checks stay on loopback — the daemon listens on 127.0.0.1. */
49
+ export function playgroundBindUrl(port) {
50
+ return `http://127.0.0.1:${port}/`;
51
+ }
52
+ async function playgroundPackageAt(dir) {
53
+ try {
54
+ await access(join(dir, "package.json"));
55
+ return dir;
56
+ }
57
+ catch {
58
+ return undefined;
59
+ }
60
+ }
61
+ export async function findPlaygroundApp(workspaceRoot, extraRoots = []) {
62
+ const roots = [workspaceRoot, ...extraRoots].filter((root) => root.trim());
63
+ const seen = new Set();
64
+ for (const root of roots) {
65
+ const candidate = join(root, "apps", "playground");
66
+ if (seen.has(candidate))
67
+ continue;
68
+ seen.add(candidate);
69
+ const found = await playgroundPackageAt(candidate);
70
+ if (found)
71
+ return found;
72
+ }
73
+ return undefined;
74
+ }
75
+ /**
76
+ * Where Vite actually lives: the requested repo, other registered
77
+ * workspaces, `PRISM_PLAYGROUND_ROOT`, then this Prism checkout. Tests stay
78
+ * isolated — they only see the workspace unless they opt in.
79
+ */
80
+ export async function resolvePlaygroundApp(workspaceRoot, extraRoots = [], env = process.env) {
81
+ const found = await findPlaygroundApp(workspaceRoot, extraRoots);
82
+ if (found)
83
+ return found;
84
+ const override = env.PRISM_PLAYGROUND_ROOT?.trim();
85
+ if (override) {
86
+ const fromOverride = (await playgroundPackageAt(override)) ??
87
+ (await findPlaygroundApp(override));
88
+ if (fromOverride)
89
+ return fromOverride;
90
+ }
91
+ if (env.VITEST === "true" || process.env.VITEST === "true")
92
+ return undefined;
93
+ const hubRepo = fileURLToPath(new URL("../../..", import.meta.url));
94
+ return findPlaygroundApp(hubRepo);
95
+ }
96
+ export async function readPlaygroundRecord(env = process.env) {
97
+ const file = await readJsonFile(playgroundRecordPath(env), null);
98
+ if (!file || typeof file.port !== "number")
99
+ return undefined;
100
+ if (file.mode !== "vite" && file.mode !== "asleep")
101
+ return undefined;
102
+ return {
103
+ port: file.port,
104
+ mode: file.mode,
105
+ ...(typeof file.pid === "number" ? { pid: file.pid } : {}),
106
+ };
107
+ }
108
+ export async function writePlaygroundRecord(env, record) {
109
+ await writeJsonFile(playgroundRecordPath(env), record);
110
+ }
111
+ export async function pidsOnPort(port) {
112
+ if (port <= 0)
113
+ return [];
114
+ try {
115
+ const { stdout } = await execFileAsync("lsof", ["-nP", `-iTCP:${port}`, "-sTCP:LISTEN", "-t"], { timeout: 1500 });
116
+ return stdout
117
+ .split(/\s+/)
118
+ .map((row) => Number.parseInt(row, 10))
119
+ .filter((pid) => Number.isInteger(pid) && pid > 0 && pid !== process.pid);
120
+ }
121
+ catch {
122
+ return [];
123
+ }
124
+ }
125
+ export async function stopPlaygroundListeners(port, extraPid) {
126
+ const pids = new Set(await pidsOnPort(port));
127
+ if (typeof extraPid === "number")
128
+ pids.add(extraPid);
129
+ for (const pid of pids)
130
+ stopPid(pid);
131
+ }
132
+ function stopPid(pid) {
133
+ if (!Number.isInteger(pid) || pid <= 0 || pid === process.pid)
134
+ return;
135
+ try {
136
+ process.kill(-pid, "SIGTERM");
137
+ }
138
+ catch {
139
+ /* not a group leader */
140
+ }
141
+ try {
142
+ process.kill(pid, "SIGTERM");
143
+ }
144
+ catch {
145
+ /* already gone */
146
+ }
147
+ }
148
+ export async function spawnPlaygroundVite(input) {
149
+ const env = input.env ?? process.env;
150
+ const port = input.port ?? playgroundPort(env);
151
+ if (port <= 0)
152
+ return undefined;
153
+ const app = await resolvePlaygroundApp(input.workspaceRoot, input.extraRoots ?? [], env);
154
+ if (!app)
155
+ return undefined;
156
+ const child = spawn("bun", [
157
+ "run",
158
+ "dev",
159
+ "--",
160
+ "--port",
161
+ String(port),
162
+ "--strictPort",
163
+ "--host",
164
+ "127.0.0.1",
165
+ ], {
166
+ cwd: app,
167
+ detached: true,
168
+ stdio: "ignore",
169
+ env: {
170
+ ...process.env,
171
+ ...input.env,
172
+ PRISM_PLAYGROUND_ROOT: input.workspaceRoot,
173
+ PRISM_PLAYGROUND_PORT: String(port),
174
+ },
175
+ windowsHide: true,
176
+ });
177
+ child.unref();
178
+ if (typeof child.pid !== "number")
179
+ return undefined;
180
+ return { pid: child.pid };
181
+ }
182
+ export async function playgroundIsLive(port, fetchImpl = fetch) {
183
+ if (port <= 0)
184
+ return false;
185
+ try {
186
+ const response = await fetchImpl(playgroundBindUrl(port), {
187
+ signal: AbortSignal.timeout(800),
188
+ });
189
+ if (!response.ok)
190
+ return false;
191
+ const text = await response.text();
192
+ return !/Prism is down/i.test(text);
193
+ }
194
+ catch {
195
+ return false;
196
+ }
197
+ }
198
+ export async function playgroundIsDownPage(port, fetchImpl = fetch) {
199
+ if (port <= 0)
200
+ return false;
201
+ try {
202
+ const response = await fetchImpl(playgroundBindUrl(port), {
203
+ signal: AbortSignal.timeout(800),
204
+ });
205
+ if (!response.ok)
206
+ return false;
207
+ const text = await response.text();
208
+ return /Prism is down/i.test(text);
209
+ }
210
+ catch {
211
+ return false;
212
+ }
213
+ }
214
+ export async function waitForPlaygroundLive(port, fetchImpl = fetch, waitMs = 20_000) {
215
+ const deadline = Date.now() + waitMs;
216
+ while (Date.now() < deadline) {
217
+ if (await playgroundIsLive(port, fetchImpl))
218
+ return true;
219
+ await new Promise((resolve) => {
220
+ setTimeout(resolve, 200).unref?.();
221
+ });
222
+ }
223
+ return false;
224
+ }
225
+ //# sourceMappingURL=playground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground.js","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -27,6 +27,10 @@ export type HubOptions = {
27
27
  readonly listWorkerModels?: (input: {
28
28
  readonly backend: WorkerBackend;
29
29
  }) => Promise<readonly WorkerModelOption[]>;
30
+ /** Injected in tests. Production starts `apps/playground` with bun. */
31
+ readonly spawnPlayground?: (workspaceRoot: string) => Promise<{
32
+ pid: number;
33
+ } | undefined>;
30
34
  };
31
35
  export type StartedHub = {
32
36
  readonly record: HubRecord;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAUA,OAAO,EAiBL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAShE,OAAO,KAAK,EAEV,SAAS,EAIV,MAAM,YAAY,CAAC;AAiBpB,MAAM,MAAM,YAAY,GAAG,CACzB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KAC1D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,MAAM,UAAU,GAAG,CACvB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,oEAAoE;IACpE,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAC1C,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QAClC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;KACjC,KAAK,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AAkEF,wBAAsB,QAAQ,CAC5B,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,UAAU,GAAG;IAAE,cAAc,EAAE,IAAI,CAAA;CAAE,CAAC,CAkoBhD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAUA,OAAO,EAwBL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAuBhE,OAAO,KAAK,EAEV,SAAS,EAIV,MAAM,YAAY,CAAC;AAiBpB,MAAM,MAAM,YAAY,GAAG,CACzB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KAC1D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,MAAM,UAAU,GAAG,CACvB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,oEAAoE;IACpE,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAC1C,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QAClC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;KACjC,KAAK,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAC;IAC5C,uEAAuE;IACvE,QAAQ,CAAC,eAAe,CAAC,EAAE,CACzB,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AAsEF,wBAAsB,QAAQ,CAC5B,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,UAAU,GAAG;IAAE,cAAc,EAAE,IAAI,CAAA;CAAE,CAAC,CAi+BhD"}