homebridge-sonos-scenes 0.1.2 → 0.1.4

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 CHANGED
@@ -39,6 +39,11 @@ homebridge-ui/
39
39
  examples/
40
40
  config.example.json
41
41
  sample-topology.json
42
+ docs/
43
+ cloud-broker.md
44
+ broker/
45
+ README.md
46
+ src/server.mjs
42
47
  test/
43
48
  ```
44
49
 
@@ -84,6 +89,19 @@ The Homebridge project’s verified-plugin guidance also expects the plugin to b
84
89
  - `tv` source loading is disabled by default and remains transport-gated.
85
90
  - Favorites rely on URIs exposed through the local transport; some complex favorite types may need more transport-specific handling later.
86
91
 
92
+ ## Local Only Vs Local + Cloud
93
+
94
+ The intended product shape is now:
95
+
96
+ - `local_only`: today’s supported mode. It keeps discovery, grouping, line-in, TV, and directly playable favorites on the local Sonos path.
97
+ - `local_plus_cloud`: a future mode for users who choose to run their own Sonos cloud broker for favorites and playlists that are not reliable over the local path.
98
+
99
+ This project does not host that broker for users. The goal is an optional self-hosted companion service, not a shared multi-tenant cloud run by the plugin maintainer.
100
+
101
+ The config model already reserves a `cloud` section so advanced users and future versions do not need a breaking config redesign later. The broker contract is documented in [docs/cloud-broker.md](docs/cloud-broker.md).
102
+
103
+ There is also an early self-hosted broker scaffold in [broker/README.md](broker/README.md). It is not wired into scene execution yet, but it gives self-hosters a concrete service shape and a live `/v1/status` endpoint to target.
104
+
87
105
  ## Official Sonos References
88
106
 
89
107
  These docs informed the product boundaries and future cloud-adapter shape:
@@ -99,5 +117,6 @@ These docs informed the product boundaries and future cloud-adapter shape:
99
117
  ## Current Gaps
100
118
 
101
119
  - The local transport is MVP-level and best-effort for advanced favorites and TV input handling.
120
+ - The `local_plus_cloud` mode is a planned architecture boundary only; the self-hosted broker contract is documented, but broker-backed playback is not wired into the runtime yet.
102
121
  - Subscription-driven refresh is still represented by the transport abstraction, but not yet fully wired for live event propagation.
103
122
  - `npm audit` currently reports a high-severity advisory in the transitive `ip` dependency pulled in by `sonos`.
@@ -0,0 +1,5 @@
1
+ BROKER_PORT=8787
2
+ BROKER_HOST=127.0.0.1
3
+ BROKER_NAME=sonos-scenes-broker
4
+ BROKER_API_KEY=replace-me
5
+ BROKER_DOCS_URL=https://github.com/applemanj/homebridge-sonos-scenes/blob/main/docs/cloud-broker.md
@@ -0,0 +1,41 @@
1
+ # sonos-scenes-broker
2
+
3
+ This is the first self-hosted broker scaffold for `homebridge-sonos-scenes`.
4
+
5
+ It is intentionally small:
6
+
7
+ - it starts a local HTTP server
8
+ - it exposes `GET /healthz`
9
+ - it exposes `GET /v1/status`
10
+ - it reserves the future Sonos broker routes with `501 Not Implemented` responses
11
+
12
+ It does **not** implement Sonos OAuth or Sonos cloud playback yet. The point of this scaffold is to give self-hosters a concrete package and endpoint shape to build from.
13
+
14
+ ## Run It
15
+
16
+ ```bash
17
+ cd broker
18
+ node src/server.mjs
19
+ ```
20
+
21
+ With environment variables:
22
+
23
+ ```bash
24
+ BROKER_PORT=8787
25
+ BROKER_HOST=127.0.0.1
26
+ BROKER_API_KEY=replace-me
27
+ node src/server.mjs
28
+ ```
29
+
30
+ ## Current Endpoints
31
+
32
+ - `GET /healthz`
33
+ - `GET /v1/status`
34
+ - `GET /v1/households`
35
+ - `GET /v1/households/:householdId/groups`
36
+ - `GET /v1/households/:householdId/favorites`
37
+ - `GET /v1/households/:householdId/playlists`
38
+ - `POST /v1/groups/:groupId/favorites/load`
39
+ - `POST /v1/groups/:groupId/playlists/load`
40
+
41
+ The `status` endpoint is meant to be usable by the Homebridge plugin right away for configuration checks. The other endpoints are placeholders for the future Sonos OAuth and cloud-control work.
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "sonos-scenes-broker",
3
+ "version": "0.0.1",
4
+ "private": true,
5
+ "description": "Self-hosted Sonos cloud broker scaffold for homebridge-sonos-scenes.",
6
+ "type": "module",
7
+ "scripts": {
8
+ "start": "node src/server.mjs",
9
+ "dev": "node --watch src/server.mjs"
10
+ },
11
+ "engines": {
12
+ "node": ">=18.20.0"
13
+ },
14
+ "license": "MIT"
15
+ }
@@ -0,0 +1,151 @@
1
+ import { createServer } from "node:http";
2
+
3
+ const port = Number(process.env.BROKER_PORT || 8787);
4
+ const host = process.env.BROKER_HOST || "127.0.0.1";
5
+ const brokerName = process.env.BROKER_NAME || "sonos-scenes-broker";
6
+ const apiKey = (process.env.BROKER_API_KEY || "").trim();
7
+ const docsUrl = process.env.BROKER_DOCS_URL || "https://github.com/applemanj/homebridge-sonos-scenes/blob/main/docs/cloud-broker.md";
8
+
9
+ function writeJson(response, statusCode, payload) {
10
+ response.writeHead(statusCode, {
11
+ "content-type": "application/json; charset=utf-8",
12
+ "cache-control": "no-store",
13
+ });
14
+ response.end(JSON.stringify(payload, null, 2));
15
+ }
16
+
17
+ function bearerToken(request) {
18
+ const header = request.headers.authorization || "";
19
+ const match = /^Bearer\s+(.+)$/i.exec(header);
20
+ return match?.[1]?.trim() || "";
21
+ }
22
+
23
+ function isAuthorized(request) {
24
+ if (!apiKey) {
25
+ return true;
26
+ }
27
+
28
+ return bearerToken(request) === apiKey;
29
+ }
30
+
31
+ async function readJsonBody(request) {
32
+ const chunks = [];
33
+ for await (const chunk of request) {
34
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
35
+ }
36
+
37
+ if (chunks.length === 0) {
38
+ return {};
39
+ }
40
+
41
+ const raw = Buffer.concat(chunks).toString("utf8");
42
+ return raw.trim().length > 0 ? JSON.parse(raw) : {};
43
+ }
44
+
45
+ function notImplemented(response, route, extra = {}) {
46
+ writeJson(response, 501, {
47
+ ok: false,
48
+ route,
49
+ mode: "scaffold",
50
+ message: "This broker scaffold reserves the route, but Sonos OAuth and cloud playback are not implemented yet.",
51
+ ...extra,
52
+ });
53
+ }
54
+
55
+ const server = createServer(async (request, response) => {
56
+ const url = new URL(request.url || "/", `http://${request.headers.host || `${host}:${port}`}`);
57
+ const pathname = url.pathname;
58
+ const method = request.method || "GET";
59
+
60
+ if (method === "GET" && pathname === "/healthz") {
61
+ writeJson(response, 200, {
62
+ ok: true,
63
+ name: brokerName,
64
+ mode: "scaffold",
65
+ });
66
+ return;
67
+ }
68
+
69
+ if (method === "GET" && pathname === "/v1/status") {
70
+ writeJson(response, 200, {
71
+ ok: true,
72
+ name: brokerName,
73
+ version: "0.0.1",
74
+ mode: "scaffold",
75
+ oauthConfigured: false,
76
+ features: ["favorites", "playlists"],
77
+ docsUrl,
78
+ message: "Broker scaffold is running. Sonos OAuth is not configured yet.",
79
+ });
80
+ return;
81
+ }
82
+
83
+ if (!isAuthorized(request)) {
84
+ writeJson(response, 401, {
85
+ ok: false,
86
+ message: "Unauthorized. Supply the configured broker bearer token.",
87
+ });
88
+ return;
89
+ }
90
+
91
+ try {
92
+ if (method === "GET" && pathname === "/v1/households") {
93
+ notImplemented(response, pathname, {
94
+ households: [],
95
+ });
96
+ return;
97
+ }
98
+
99
+ if (method === "GET" && /^\/v1\/households\/[^/]+\/groups$/.test(pathname)) {
100
+ notImplemented(response, pathname, {
101
+ groups: [],
102
+ players: [],
103
+ });
104
+ return;
105
+ }
106
+
107
+ if (method === "GET" && /^\/v1\/households\/[^/]+\/favorites$/.test(pathname)) {
108
+ notImplemented(response, pathname, {
109
+ favorites: [],
110
+ });
111
+ return;
112
+ }
113
+
114
+ if (method === "GET" && /^\/v1\/households\/[^/]+\/playlists$/.test(pathname)) {
115
+ notImplemented(response, pathname, {
116
+ playlists: [],
117
+ });
118
+ return;
119
+ }
120
+
121
+ if (method === "POST" && /^\/v1\/groups\/[^/]+\/favorites\/load$/.test(pathname)) {
122
+ const body = await readJsonBody(request);
123
+ notImplemented(response, pathname, {
124
+ received: body,
125
+ });
126
+ return;
127
+ }
128
+
129
+ if (method === "POST" && /^\/v1\/groups\/[^/]+\/playlists\/load$/.test(pathname)) {
130
+ const body = await readJsonBody(request);
131
+ notImplemented(response, pathname, {
132
+ received: body,
133
+ });
134
+ return;
135
+ }
136
+
137
+ writeJson(response, 404, {
138
+ ok: false,
139
+ message: `No route matched ${method} ${pathname}.`,
140
+ });
141
+ } catch (error) {
142
+ writeJson(response, 500, {
143
+ ok: false,
144
+ message: error instanceof Error ? error.message : String(error),
145
+ });
146
+ }
147
+ });
148
+
149
+ server.listen(port, host, () => {
150
+ console.log(`${brokerName} listening on http://${host}:${port}`);
151
+ });
@@ -73,6 +73,50 @@
73
73
  }
74
74
  }
75
75
  },
76
+ "cloud": {
77
+ "title": "Cloud",
78
+ "type": "object",
79
+ "properties": {
80
+ "mode": {
81
+ "title": "Control Mode",
82
+ "type": "string",
83
+ "default": "local_only",
84
+ "oneOf": [
85
+ "local_only",
86
+ "local_plus_cloud"
87
+ ]
88
+ },
89
+ "broker": {
90
+ "title": "Broker",
91
+ "type": "object",
92
+ "properties": {
93
+ "url": {
94
+ "title": "Broker URL",
95
+ "type": "string"
96
+ },
97
+ "apiKey": {
98
+ "title": "Broker API Key",
99
+ "type": "string"
100
+ },
101
+ "timeoutMs": {
102
+ "title": "Broker Timeout (ms)",
103
+ "type": "integer",
104
+ "default": 8000
105
+ },
106
+ "routeFavorites": {
107
+ "title": "Route Favorites Through Broker",
108
+ "type": "boolean",
109
+ "default": true
110
+ },
111
+ "routePlaylists": {
112
+ "title": "Route Playlists Through Broker",
113
+ "type": "boolean",
114
+ "default": true
115
+ }
116
+ }
117
+ }
118
+ }
119
+ },
76
120
  "scenes": {
77
121
  "title": "Scenes",
78
122
  "type": "array",
@@ -0,0 +1,20 @@
1
+ import type { CloudBrokerConfig } from "../types";
2
+ export type CloudBrokerFeature = "favorites" | "playlists";
3
+ export interface CloudBrokerStatus {
4
+ ok: boolean;
5
+ name?: string;
6
+ version?: string;
7
+ features: CloudBrokerFeature[];
8
+ docsUrl?: string;
9
+ mode?: "scaffold" | "live";
10
+ oauthConfigured?: boolean;
11
+ message?: string;
12
+ }
13
+ export declare class CloudBrokerClient {
14
+ private readonly config;
15
+ constructor(config: CloudBrokerConfig);
16
+ get configured(): boolean;
17
+ get baseUrl(): string | undefined;
18
+ getStatus(): Promise<CloudBrokerStatus>;
19
+ private request;
20
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CloudBrokerClient = void 0;
4
+ function trimTrailingSlash(value) {
5
+ return value.replace(/\/+$/g, "");
6
+ }
7
+ class CloudBrokerClient {
8
+ config;
9
+ constructor(config) {
10
+ this.config = config;
11
+ }
12
+ get configured() {
13
+ return typeof this.config.url === "string" && this.config.url.trim().length > 0;
14
+ }
15
+ get baseUrl() {
16
+ if (!this.configured) {
17
+ return undefined;
18
+ }
19
+ return trimTrailingSlash(this.config.url.trim());
20
+ }
21
+ async getStatus() {
22
+ return this.request("/v1/status", {
23
+ method: "GET",
24
+ });
25
+ }
26
+ async request(path, init) {
27
+ if (!this.baseUrl) {
28
+ throw new Error("No cloud broker URL is configured.");
29
+ }
30
+ const controller = new AbortController();
31
+ const timeout = setTimeout(() => controller.abort(), this.config.timeoutMs);
32
+ try {
33
+ const response = await fetch(`${this.baseUrl}${path}`, {
34
+ ...init,
35
+ headers: {
36
+ Accept: "application/json",
37
+ ...(this.config.apiKey
38
+ ? {
39
+ Authorization: `Bearer ${this.config.apiKey}`,
40
+ }
41
+ : {}),
42
+ ...init.headers,
43
+ },
44
+ signal: controller.signal,
45
+ });
46
+ if (!response.ok) {
47
+ throw new Error(`Cloud broker request failed: ${response.status} ${response.statusText}`);
48
+ }
49
+ return await response.json();
50
+ }
51
+ finally {
52
+ clearTimeout(timeout);
53
+ }
54
+ }
55
+ }
56
+ exports.CloudBrokerClient = CloudBrokerClient;
57
+ //# sourceMappingURL=brokerClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brokerClient.js","sourceRoot":"","sources":["../../../src/cloud/brokerClient.ts"],"names":[],"mappings":";;;AAeA,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,MAAa,iBAAiB;IACC;IAA7B,YAA6B,MAAyB;QAAzB,WAAM,GAAN,MAAM,CAAmB;IAAG,CAAC;IAE1D,IAAI,UAAU;QACZ,OAAO,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,OAAO,CAAoB,YAAY,EAAE;YACnD,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,IAAiB;QACtD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;gBACrD,GAAG,IAAI;gBACP,OAAO,EAAE;oBACP,MAAM,EAAE,kBAAkB;oBAC1B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;wBACpB,CAAC,CAAC;4BACE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;yBAC9C;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,IAAI,CAAC,OAAO;iBAChB;gBACD,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC5F,CAAC;YAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAO,CAAC;QACpC,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;CACF;AArDD,8CAqDC"}
@@ -15,12 +15,25 @@ const DEFAULT_TRANSPORT = {
15
15
  requestTimeoutMs: 5000,
16
16
  allowTvSource: false,
17
17
  };
18
+ const DEFAULT_CLOUD_BROKER = {
19
+ timeoutMs: 8000,
20
+ routeFavorites: true,
21
+ routePlaylists: true,
22
+ };
23
+ const DEFAULT_CLOUD = {
24
+ mode: "local_only",
25
+ broker: { ...DEFAULT_CLOUD_BROKER },
26
+ };
18
27
  function createDefaultPlatformConfig() {
19
28
  return {
20
29
  platform: types_1.PLATFORM_NAME,
21
30
  name: "Sonos Scenes",
22
31
  logLevel: "info",
23
32
  transport: { ...DEFAULT_TRANSPORT },
33
+ cloud: {
34
+ mode: DEFAULT_CLOUD.mode,
35
+ broker: { ...DEFAULT_CLOUD.broker },
36
+ },
24
37
  scenes: [],
25
38
  };
26
39
  }
@@ -134,6 +147,22 @@ function normalizePlatformConfig(config) {
134
147
  ...(config?.transport ?? {}),
135
148
  kind: "local",
136
149
  };
150
+ const cloud = {
151
+ mode: config?.cloud?.mode === "local_plus_cloud" ? "local_plus_cloud" : "local_only",
152
+ broker: {
153
+ ...DEFAULT_CLOUD_BROKER,
154
+ ...(config?.cloud?.broker ?? {}),
155
+ url: typeof config?.cloud?.broker?.url === "string" ? config.cloud.broker.url.trim() : undefined,
156
+ apiKey: typeof config?.cloud?.broker?.apiKey === "string" ? config.cloud.broker.apiKey.trim() : undefined,
157
+ timeoutMs: Math.max(1000, asNumber(config?.cloud?.broker?.timeoutMs, DEFAULT_CLOUD_BROKER.timeoutMs)),
158
+ routeFavorites: typeof config?.cloud?.broker?.routeFavorites === "boolean"
159
+ ? config.cloud.broker.routeFavorites
160
+ : DEFAULT_CLOUD_BROKER.routeFavorites,
161
+ routePlaylists: typeof config?.cloud?.broker?.routePlaylists === "boolean"
162
+ ? config.cloud.broker.routePlaylists
163
+ : DEFAULT_CLOUD_BROKER.routePlaylists,
164
+ },
165
+ };
137
166
  return {
138
167
  ...defaults,
139
168
  ...config,
@@ -147,6 +176,7 @@ function normalizePlatformConfig(config) {
147
176
  : defaults.logLevel,
148
177
  defaultHouseholdId: typeof config?.defaultHouseholdId === "string" ? config.defaultHouseholdId : undefined,
149
178
  transport,
179
+ cloud,
150
180
  scenes: Array.isArray(config?.scenes) ? config.scenes.map((scene) => normalizeScene(scene)) : [],
151
181
  };
152
182
  }
@@ -187,7 +217,7 @@ function validateSource(scene, household, transport, result) {
187
217
  }
188
218
  if (favorite.playable === false) {
189
219
  result.errors.push(favorite.unsupportedReason
190
- ?? `Favorite "${favorite.name}" is not playable through the active local transport.`);
220
+ ?? `Favorite "${favorite.name}" is not playable through the active local transport. Use Local Only scenes for line-in and directly playable favorites, or add a Sonos cloud broker in a future Local + Cloud setup.`);
191
221
  }
192
222
  return;
193
223
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export declare const PLATFORM_NAME = "SonosScenes";
4
4
  export type LogLevel = "debug" | "info" | "warn" | "error";
5
5
  export type SceneSourceKind = "favorite" | "line_in" | "tv";
6
6
  export type SceneTrigger = "on" | "off" | "test";
7
+ export type CloudControlMode = "local_only" | "local_plus_cloud";
7
8
  export interface FavoriteSource {
8
9
  kind: "favorite";
9
10
  favoriteId: string;
@@ -56,12 +57,24 @@ export interface LocalTransportConfig {
56
57
  requestTimeoutMs: number;
57
58
  allowTvSource: boolean;
58
59
  }
60
+ export interface CloudBrokerConfig {
61
+ url?: string;
62
+ apiKey?: string;
63
+ timeoutMs: number;
64
+ routeFavorites: boolean;
65
+ routePlaylists: boolean;
66
+ }
67
+ export interface SonosCloudConfig {
68
+ mode: CloudControlMode;
69
+ broker: CloudBrokerConfig;
70
+ }
59
71
  export interface ScenesPlatformConfig extends PlatformConfig {
60
72
  platform: typeof PLATFORM_NAME;
61
73
  name: string;
62
74
  logLevel: LogLevel;
63
75
  defaultHouseholdId?: string;
64
76
  transport: LocalTransportConfig;
77
+ cloud: SonosCloudConfig;
65
78
  scenes: SceneDefinition[];
66
79
  }
67
80
  export interface SonosHouseholdSummary {
@@ -1,3 +1,4 @@
1
+ import { CloudBrokerClient } from "../cloud/brokerClient";
1
2
  import type { SceneDefinition, SceneRunResult, ScenesPlatformConfig, TopologySnapshot, ValidationResult } from "../types";
2
3
  export declare function createDefaultUiConfig(): ScenesPlatformConfig;
3
4
  export declare function discoverForUi(configInput: Partial<ScenesPlatformConfig> | undefined): Promise<{
@@ -9,3 +10,9 @@ export declare function validateSceneForUi(configInput: Partial<ScenesPlatformCo
9
10
  snapshot: TopologySnapshot;
10
11
  }>;
11
12
  export declare function runTestForUi(configInput: Partial<ScenesPlatformConfig> | undefined, sceneInput: Partial<SceneDefinition>): Promise<SceneRunResult>;
13
+ export declare function checkBrokerForUi(configInput: Partial<ScenesPlatformConfig> | undefined): Promise<{
14
+ configured: boolean;
15
+ url?: string;
16
+ status?: Awaited<ReturnType<CloudBrokerClient["getStatus"]>>;
17
+ error?: string;
18
+ }>;
@@ -4,7 +4,9 @@ exports.createDefaultUiConfig = createDefaultUiConfig;
4
4
  exports.discoverForUi = discoverForUi;
5
5
  exports.validateSceneForUi = validateSceneForUi;
6
6
  exports.runTestForUi = runTestForUi;
7
+ exports.checkBrokerForUi = checkBrokerForUi;
7
8
  const config_1 = require("../config");
9
+ const brokerClient_1 = require("../cloud/brokerClient");
8
10
  const discoveryService_1 = require("../discoveryService");
9
11
  const logger_1 = require("../logger");
10
12
  const sceneRunner_1 = require("../sceneRunner");
@@ -49,4 +51,28 @@ async function runTestForUi(configInput, sceneInput) {
49
51
  const scene = (0, config_1.normalizeScene)(sceneInput);
50
52
  return services.sceneRunner.runTest(scene);
51
53
  }
54
+ async function checkBrokerForUi(configInput) {
55
+ const config = (0, config_1.normalizePlatformConfig)(configInput);
56
+ const client = new brokerClient_1.CloudBrokerClient(config.cloud.broker);
57
+ if (!client.configured) {
58
+ return {
59
+ configured: false,
60
+ };
61
+ }
62
+ try {
63
+ const status = await client.getStatus();
64
+ return {
65
+ configured: true,
66
+ url: client.baseUrl,
67
+ status,
68
+ };
69
+ }
70
+ catch (error) {
71
+ return {
72
+ configured: true,
73
+ url: client.baseUrl,
74
+ error: error instanceof Error ? error.message : String(error),
75
+ };
76
+ }
77
+ }
52
78
  //# sourceMappingURL=serverApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serverApi.js","sourceRoot":"","sources":["../../../src/ui/serverApi.ts"],"names":[],"mappings":";;AAOA,sDAEC;AAmBD,sCAOC;AAED,gDAcC;AAED,oCAOC;AA5DD,sCAA6F;AAC7F,0DAAuD;AACvD,sCAAiE;AACjE,gDAA6C;AAC7C,8CAAgD;AAGhD,SAAgB,qBAAqB;IACnC,OAAO,IAAA,gCAAuB,EAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,WAAsD;IACjF,MAAM,MAAM,GAAG,IAAA,gCAAuB,EAAC,WAAW,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,2BAAkB,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,yBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,IAAA,4BAAe,EAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,gBAAgB,GAAG,IAAI,mCAAgB,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,gBAAgB,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAEzE,OAAO;QACL,MAAM;QACN,SAAS;QACT,gBAAgB;QAChB,WAAW;QACX,SAAS;KACV,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,WAAsD;IAEtD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO;QACL,QAAQ,EAAE,MAAM,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE;KACpD,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACtC,WAAsD,EACtD,UAAoC;IAEpC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAC3D,MAAM,eAAe,GAAG,IAAA,uBAAc,EAAC,UAAU,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,IAAA,gCAAuB,EAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE1F,OAAO;QACL,UAAU;QACV,eAAe;QACf,QAAQ;KACT,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,WAAsD,EACtD,UAAoC;IAEpC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAA,uBAAc,EAAC,UAAU,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"serverApi.js","sourceRoot":"","sources":["../../../src/ui/serverApi.ts"],"names":[],"mappings":"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"}