@camstack/addon-provider-bosch 0.1.28 → 0.1.30

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.
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_dist = require("../dist-DEZDBpGW.js");
3
- const require_account_integration_offline = require("../account-integration-offline-2MI94wOE.js");
2
+ const require_dist = require("../dist-BioIJ3NA.js");
3
+ const require_account_integration_offline = require("../account-integration-offline-BMoYdiX2.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  //#region src/homecom/config.ts
6
6
  var HOMECOM_BRANDS = ["bosch", "buderus"];
@@ -51,19 +51,13 @@ var HIDDEN_UNTIL_ADVANCED = {
51
51
  field: "__hidden__",
52
52
  equals: "yes"
53
53
  };
54
- var HOMECOM_CODE_HELP = [
55
- "Before you sign in, open the browser's developer tools, choose the Network tab, and turn on Preserve log.",
56
- "Sign in with SingleKey. The page will say it has network problems. Ignore that: the browser tried to open the Bosch app and could not.",
57
- "In the Network list, filter by code= and open the request whose address starts with com.bosch.tt.dashtt.pointt://app/login?code=",
58
- "Copy that whole address, or only the code, and paste it in the box under the sign-in button.",
59
- "On a phone the same redirect fails unless the Bosch app is installed. Use a desktop browser to copy the code."
60
- ].join("\n\n");
54
+ var HOMECOM_CODE_HELP = "If the page does not finish, copy the address it stops on (it starts with com.bosch.tt.dashtt.pointt://app/login?code=) or only the code, and paste it in the box under the sign-in button.";
61
55
  function buildHomeComFormSchema() {
62
56
  return { sections: [{
63
57
  id: "account",
64
58
  title: "HomeCom account",
65
59
  titleKey: "provider-bosch:homecom.s_account.title",
66
- description: "Sign in with your SingleKey ID. Copy the code as described below, then paste it here.",
60
+ description: "Sign in with your SingleKey ID. A new tab opens the sign-in page through this hub and finishes on its own.",
67
61
  descriptionKey: "provider-bosch:homecom.s_account.description",
68
62
  columns: 1,
69
63
  fields: [
@@ -83,6 +77,7 @@ function buildHomeComFormSchema() {
83
77
  providerLabel: "SingleKey ID",
84
78
  beginAction: "beginSignIn",
85
79
  completeAction: "finishSignIn",
80
+ claimAction: "claimSignIn",
86
81
  signOutAction: "signOut",
87
82
  accountKey: "accountLabel",
88
83
  countKey: "gatewayCount",
@@ -225,6 +220,27 @@ var homeComActions = require_dist.defineCustomActions({
225
220
  kind: "mutation",
226
221
  auth: "admin"
227
222
  }),
223
+ /**
224
+ * The form asks while the proxied login page is open: `pending` until the hub captured the
225
+ * app-scheme redirect and finished the exchange, then the same fields `finishSignIn` returns.
226
+ * Claimed once. A failed exchange answers with its operator-facing message as an error.
227
+ */
228
+ claimSignIn: require_dist.customAction(require_dist.object({ attemptId: require_dist.string().min(1) }), require_dist.object({
229
+ pending: require_dist.boolean(),
230
+ token: require_dist.string().optional().meta({ secret: true }),
231
+ refresh: require_dist.string().optional().meta({ secret: true }),
232
+ username: require_dist.string().optional().meta({ secret: true }),
233
+ accountLabel: require_dist.string().optional(),
234
+ gatewayCount: require_dist.number().optional(),
235
+ summary: require_dist.string().optional(),
236
+ gatewayId: require_dist.string().optional(),
237
+ brand: HomeComBrandSchema.optional(),
238
+ region: HomeComRegionSchema.optional(),
239
+ choices: require_dist.array(gatewayChoice).optional()
240
+ }), {
241
+ kind: "mutation",
242
+ auth: "admin"
243
+ }),
228
244
  signOut: require_dist.customAction(require_dist.object({}), require_dist.object({
229
245
  signedOut: require_dist.literal(true),
230
246
  summary: require_dist.string()
@@ -1215,6 +1231,38 @@ function finishedFromGateways(tokens, resolved, listFailure) {
1215
1231
  }
1216
1232
  var homeComSignInAttempts = require_account_integration_offline.createSignInAttemptStore();
1217
1233
  //#endregion
1234
+ //#region src/homecom/homecom-sign-in-proxy.ts
1235
+ /** SingleKey ID serves the whole HomeCom login. (Not verified against the live pages: no vendor credentials.) */
1236
+ var HOMECOM_LOGIN_HOSTS = ["singlekey-id.com"];
1237
+ var HOMECOM_PROXY_PREFIX = "login";
1238
+ var HOMECOM_APP_SCHEME = HOMECOM_REDIRECT_URI.slice(0, HOMECOM_REDIRECT_URI.indexOf("://") + 3);
1239
+ var homeComSignInClaims = require_account_integration_offline.createSignInClaims();
1240
+ /** Start an attempt whose `authorizeUrl` is the hub-relative proxied login page. */
1241
+ function beginHomeComProxiedSignIn(deps) {
1242
+ const nowMs = deps.nowMs ?? (() => Date.now());
1243
+ const published = publishHomeComSignIn(homeComSignInAttempts, nowMs());
1244
+ if (deps.proxy === null) return published;
1245
+ const entry = require_account_integration_offline.openSignInProxy({
1246
+ proxy: deps.proxy,
1247
+ claims: homeComSignInClaims,
1248
+ addonId: deps.addonId,
1249
+ attemptId: published.attemptId,
1250
+ authorizeUrl: published.authorizeUrl,
1251
+ hosts: HOMECOM_LOGIN_HOSTS,
1252
+ appScheme: HOMECOM_APP_SCHEME,
1253
+ finish: (callback) => finishHomeComSignIn({
1254
+ attemptId: published.attemptId,
1255
+ callback,
1256
+ nowMs: nowMs()
1257
+ }, homeComSignInAttempts, deps.fetchFn !== void 0 ? { fetchFn: deps.fetchFn } : {}),
1258
+ nowMs
1259
+ });
1260
+ return {
1261
+ attemptId: published.attemptId,
1262
+ authorizeUrl: entry
1263
+ };
1264
+ }
1265
+ //#endregion
1218
1266
  //#region src/homecom/homecom-token-persist.ts
1219
1267
  function unreadable(value) {
1220
1268
  return require_dist.isSecretMarker(value) || require_dist.isSecretMarkerLike(value);
@@ -2024,11 +2072,14 @@ var BoschHomeComProviderAddon = class extends require_dist.BaseDeviceProvider {
2024
2072
  [require_dist.DeviceType.WaterHeater]: HomeComWaterHeaterDevice
2025
2073
  };
2026
2074
  clients = null;
2075
+ loginProxy = null;
2076
+ loginPlane = null;
2027
2077
  constructor() {
2028
2078
  super({});
2029
2079
  }
2030
2080
  async onInitialize() {
2031
2081
  const regs = this.providerRegistrationsFromSuper(await super.onInitialize());
2082
+ await this.serveLoginProxy();
2032
2083
  const persistDeps = {
2033
2084
  getSettings: (id) => this.ctx.api.integrations.getSettings.query({ id }),
2034
2085
  setSettings: (input) => this.ctx.api.integrations.setSettings.mutate(input),
@@ -2063,9 +2114,19 @@ var BoschHomeComProviderAddon = class extends require_dist.BaseDeviceProvider {
2063
2114
  customActions: homeComActions,
2064
2115
  actionHandlers: {
2065
2116
  beginSignIn: async () => ({
2066
- ...publishHomeComSignIn(homeComSignInAttempts, Date.now()),
2067
- summary: "Open the link in a browser and sign in."
2117
+ ...beginHomeComProxiedSignIn({
2118
+ proxy: this.loginProxy,
2119
+ addonId: this.ctx.id
2120
+ }),
2121
+ summary: "Open the sign-in page and sign in."
2068
2122
  }),
2123
+ claimSignIn: async (input) => {
2124
+ const claim = homeComSignInClaims.claim(input.attemptId, Date.now());
2125
+ return claim.state === "pending" ? { pending: true } : {
2126
+ pending: false,
2127
+ ...claim.result
2128
+ };
2129
+ },
2069
2130
  finishSignIn: async (input) => finishHomeComSignIn({
2070
2131
  attemptId: input.attemptId,
2071
2132
  callback: input.callback,
@@ -2078,7 +2139,28 @@ var BoschHomeComProviderAddon = class extends require_dist.BaseDeviceProvider {
2078
2139
  }
2079
2140
  };
2080
2141
  }
2142
+ /** The hub's HTTPS face for the vendor's login pages (D955): admin session only. */
2143
+ async serveLoginProxy() {
2144
+ const proxy = new require_dist.VendorLoginProxy({
2145
+ addonId: this.ctx.id,
2146
+ prefix: HOMECOM_PROXY_PREFIX,
2147
+ logger: this.ctx.logger
2148
+ });
2149
+ try {
2150
+ this.loginPlane = await this.ctx.dataPlane?.serve({
2151
+ prefix: "login",
2152
+ access: "admin",
2153
+ handler: proxy.handler
2154
+ }) ?? null;
2155
+ if (this.loginPlane !== null) this.loginProxy = proxy;
2156
+ } catch (err) {
2157
+ this.ctx.logger.warn("HomeCom login proxy failed to serve — sign-in falls back to paste", { meta: { error: require_dist.errMsg(err) } });
2158
+ }
2159
+ }
2081
2160
  async onShutdown() {
2161
+ await this.loginPlane?.dispose().catch(() => void 0);
2162
+ this.loginPlane = null;
2163
+ this.loginProxy = null;
2082
2164
  try {
2083
2165
  await this.clients?.shutdown();
2084
2166
  } catch (err) {
@@ -1,5 +1,5 @@
1
- import { A as isSecretMarker, C as waterHeaterCapability, E as errMsg, F as number, I as object, M as _enum, N as array, O as customAction, P as literal, R as string, T as DeviceType, V as EventCategory, c as connectionTestCapability, j as isSecretMarkerLike, k as defineCustomActions, n as BaseDeviceProvider, s as climateControlCapability, t as BaseDevice, u as deviceAdoptionCapability } from "../dist-Cbcvh8mB.mjs";
2
- import { a as parseOAuthCallback, i as loginFailureForAttempt, n as cascadeRemoveDevicesForIntegration, r as createSignInAttemptStore, t as setIntegrationDevicesOnline } from "../account-integration-offline-DKaazSyb.mjs";
1
+ import { A as defineCustomActions, B as string, D as errMsg, E as DeviceType, F as boolean, I as literal, L as number, M as isSecretMarkerLike, N as _enum, P as array, R as object, U as EventCategory, a as VendorLoginProxy, c as climateControlCapability, d as deviceAdoptionCapability, j as isSecretMarker, k as customAction, l as connectionTestCapability, n as BaseDeviceProvider, t as BaseDevice, w as waterHeaterCapability } from "../dist-DBUnIovD.mjs";
2
+ import { a as createSignInAttemptStore, i as openSignInProxy, n as cascadeRemoveDevicesForIntegration, o as loginFailureForAttempt, r as createSignInClaims, s as parseOAuthCallback, t as setIntegrationDevicesOnline } from "../account-integration-offline-pv6cqOKu.mjs";
3
3
  import { createHash, randomBytes } from "node:crypto";
4
4
  //#region src/homecom/config.ts
5
5
  var HOMECOM_BRANDS = ["bosch", "buderus"];
@@ -50,19 +50,13 @@ var HIDDEN_UNTIL_ADVANCED = {
50
50
  field: "__hidden__",
51
51
  equals: "yes"
52
52
  };
53
- var HOMECOM_CODE_HELP = [
54
- "Before you sign in, open the browser's developer tools, choose the Network tab, and turn on Preserve log.",
55
- "Sign in with SingleKey. The page will say it has network problems. Ignore that: the browser tried to open the Bosch app and could not.",
56
- "In the Network list, filter by code= and open the request whose address starts with com.bosch.tt.dashtt.pointt://app/login?code=",
57
- "Copy that whole address, or only the code, and paste it in the box under the sign-in button.",
58
- "On a phone the same redirect fails unless the Bosch app is installed. Use a desktop browser to copy the code."
59
- ].join("\n\n");
53
+ var HOMECOM_CODE_HELP = "If the page does not finish, copy the address it stops on (it starts with com.bosch.tt.dashtt.pointt://app/login?code=) or only the code, and paste it in the box under the sign-in button.";
60
54
  function buildHomeComFormSchema() {
61
55
  return { sections: [{
62
56
  id: "account",
63
57
  title: "HomeCom account",
64
58
  titleKey: "provider-bosch:homecom.s_account.title",
65
- description: "Sign in with your SingleKey ID. Copy the code as described below, then paste it here.",
59
+ description: "Sign in with your SingleKey ID. A new tab opens the sign-in page through this hub and finishes on its own.",
66
60
  descriptionKey: "provider-bosch:homecom.s_account.description",
67
61
  columns: 1,
68
62
  fields: [
@@ -82,6 +76,7 @@ function buildHomeComFormSchema() {
82
76
  providerLabel: "SingleKey ID",
83
77
  beginAction: "beginSignIn",
84
78
  completeAction: "finishSignIn",
79
+ claimAction: "claimSignIn",
85
80
  signOutAction: "signOut",
86
81
  accountKey: "accountLabel",
87
82
  countKey: "gatewayCount",
@@ -224,6 +219,27 @@ var homeComActions = defineCustomActions({
224
219
  kind: "mutation",
225
220
  auth: "admin"
226
221
  }),
222
+ /**
223
+ * The form asks while the proxied login page is open: `pending` until the hub captured the
224
+ * app-scheme redirect and finished the exchange, then the same fields `finishSignIn` returns.
225
+ * Claimed once. A failed exchange answers with its operator-facing message as an error.
226
+ */
227
+ claimSignIn: customAction(object({ attemptId: string().min(1) }), object({
228
+ pending: boolean(),
229
+ token: string().optional().meta({ secret: true }),
230
+ refresh: string().optional().meta({ secret: true }),
231
+ username: string().optional().meta({ secret: true }),
232
+ accountLabel: string().optional(),
233
+ gatewayCount: number().optional(),
234
+ summary: string().optional(),
235
+ gatewayId: string().optional(),
236
+ brand: HomeComBrandSchema.optional(),
237
+ region: HomeComRegionSchema.optional(),
238
+ choices: array(gatewayChoice).optional()
239
+ }), {
240
+ kind: "mutation",
241
+ auth: "admin"
242
+ }),
227
243
  signOut: customAction(object({}), object({
228
244
  signedOut: literal(true),
229
245
  summary: string()
@@ -1214,6 +1230,38 @@ function finishedFromGateways(tokens, resolved, listFailure) {
1214
1230
  }
1215
1231
  var homeComSignInAttempts = createSignInAttemptStore();
1216
1232
  //#endregion
1233
+ //#region src/homecom/homecom-sign-in-proxy.ts
1234
+ /** SingleKey ID serves the whole HomeCom login. (Not verified against the live pages: no vendor credentials.) */
1235
+ var HOMECOM_LOGIN_HOSTS = ["singlekey-id.com"];
1236
+ var HOMECOM_PROXY_PREFIX = "login";
1237
+ var HOMECOM_APP_SCHEME = HOMECOM_REDIRECT_URI.slice(0, HOMECOM_REDIRECT_URI.indexOf("://") + 3);
1238
+ var homeComSignInClaims = createSignInClaims();
1239
+ /** Start an attempt whose `authorizeUrl` is the hub-relative proxied login page. */
1240
+ function beginHomeComProxiedSignIn(deps) {
1241
+ const nowMs = deps.nowMs ?? (() => Date.now());
1242
+ const published = publishHomeComSignIn(homeComSignInAttempts, nowMs());
1243
+ if (deps.proxy === null) return published;
1244
+ const entry = openSignInProxy({
1245
+ proxy: deps.proxy,
1246
+ claims: homeComSignInClaims,
1247
+ addonId: deps.addonId,
1248
+ attemptId: published.attemptId,
1249
+ authorizeUrl: published.authorizeUrl,
1250
+ hosts: HOMECOM_LOGIN_HOSTS,
1251
+ appScheme: HOMECOM_APP_SCHEME,
1252
+ finish: (callback) => finishHomeComSignIn({
1253
+ attemptId: published.attemptId,
1254
+ callback,
1255
+ nowMs: nowMs()
1256
+ }, homeComSignInAttempts, deps.fetchFn !== void 0 ? { fetchFn: deps.fetchFn } : {}),
1257
+ nowMs
1258
+ });
1259
+ return {
1260
+ attemptId: published.attemptId,
1261
+ authorizeUrl: entry
1262
+ };
1263
+ }
1264
+ //#endregion
1217
1265
  //#region src/homecom/homecom-token-persist.ts
1218
1266
  function unreadable(value) {
1219
1267
  return isSecretMarker(value) || isSecretMarkerLike(value);
@@ -2023,11 +2071,14 @@ var BoschHomeComProviderAddon = class extends BaseDeviceProvider {
2023
2071
  [DeviceType.WaterHeater]: HomeComWaterHeaterDevice
2024
2072
  };
2025
2073
  clients = null;
2074
+ loginProxy = null;
2075
+ loginPlane = null;
2026
2076
  constructor() {
2027
2077
  super({});
2028
2078
  }
2029
2079
  async onInitialize() {
2030
2080
  const regs = this.providerRegistrationsFromSuper(await super.onInitialize());
2081
+ await this.serveLoginProxy();
2031
2082
  const persistDeps = {
2032
2083
  getSettings: (id) => this.ctx.api.integrations.getSettings.query({ id }),
2033
2084
  setSettings: (input) => this.ctx.api.integrations.setSettings.mutate(input),
@@ -2062,9 +2113,19 @@ var BoschHomeComProviderAddon = class extends BaseDeviceProvider {
2062
2113
  customActions: homeComActions,
2063
2114
  actionHandlers: {
2064
2115
  beginSignIn: async () => ({
2065
- ...publishHomeComSignIn(homeComSignInAttempts, Date.now()),
2066
- summary: "Open the link in a browser and sign in."
2116
+ ...beginHomeComProxiedSignIn({
2117
+ proxy: this.loginProxy,
2118
+ addonId: this.ctx.id
2119
+ }),
2120
+ summary: "Open the sign-in page and sign in."
2067
2121
  }),
2122
+ claimSignIn: async (input) => {
2123
+ const claim = homeComSignInClaims.claim(input.attemptId, Date.now());
2124
+ return claim.state === "pending" ? { pending: true } : {
2125
+ pending: false,
2126
+ ...claim.result
2127
+ };
2128
+ },
2068
2129
  finishSignIn: async (input) => finishHomeComSignIn({
2069
2130
  attemptId: input.attemptId,
2070
2131
  callback: input.callback,
@@ -2077,7 +2138,28 @@ var BoschHomeComProviderAddon = class extends BaseDeviceProvider {
2077
2138
  }
2078
2139
  };
2079
2140
  }
2141
+ /** The hub's HTTPS face for the vendor's login pages (D955): admin session only. */
2142
+ async serveLoginProxy() {
2143
+ const proxy = new VendorLoginProxy({
2144
+ addonId: this.ctx.id,
2145
+ prefix: HOMECOM_PROXY_PREFIX,
2146
+ logger: this.ctx.logger
2147
+ });
2148
+ try {
2149
+ this.loginPlane = await this.ctx.dataPlane?.serve({
2150
+ prefix: "login",
2151
+ access: "admin",
2152
+ handler: proxy.handler
2153
+ }) ?? null;
2154
+ if (this.loginPlane !== null) this.loginProxy = proxy;
2155
+ } catch (err) {
2156
+ this.ctx.logger.warn("HomeCom login proxy failed to serve — sign-in falls back to paste", { meta: { error: errMsg(err) } });
2157
+ }
2158
+ }
2080
2159
  async onShutdown() {
2160
+ await this.loginPlane?.dispose().catch(() => void 0);
2161
+ this.loginPlane = null;
2162
+ this.loginProxy = null;
2081
2163
  try {
2082
2164
  await this.clients?.shutdown();
2083
2165
  } catch (err) {
package/dist/shc/addon.js CHANGED
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  //#region \0rolldown/runtime.js
3
3
  var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
4
4
  //#endregion
5
- const require_dist = require("../dist-DEZDBpGW.js");
5
+ const require_dist = require("../dist-BioIJ3NA.js");
6
6
  let node_crypto = require("node:crypto");
7
7
  let node_https = require("node:https");
8
8
  let node_child_process = require("node:child_process");
@@ -1,4 +1,4 @@
1
- import { E as errMsg, F as number, I as object, M as _enum, N as array, O as customAction, P as literal, R as string, S as temperatureSensorCapability, T as DeviceType, V as EventCategory, a as batteryCapability, c as connectionTestCapability, k as defineCustomActions, m as heatingValveCapability, n as BaseDeviceProvider, s as climateControlCapability, t as BaseDevice, u as deviceAdoptionCapability, x as switchCapability } from "../dist-Cbcvh8mB.mjs";
1
+ import { A as defineCustomActions, B as string, C as temperatureSensorCapability, D as errMsg, E as DeviceType, I as literal, L as number, N as _enum, P as array, R as object, S as switchCapability, U as EventCategory, c as climateControlCapability, d as deviceAdoptionCapability, h as heatingValveCapability, k as customAction, l as connectionTestCapability, n as BaseDeviceProvider, o as batteryCapability, t as BaseDevice } from "../dist-DBUnIovD.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { request } from "node:https";
package/i18n/en.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "bosch-shc.name": "Bosch SHC",
2
+ "bosch-shc.name": "Bosch Smart Home",
3
3
  "bosch-home-connect.name": "Bosch Home Connect",
4
4
  "bosch-homecom.name": "Bosch HomeCom",
5
5
  "homecom.s_account.title": "HomeCom account",
@@ -33,5 +33,18 @@
33
33
  "shc.s_connection.sslCertificate.label": "Client certificate (PEM)",
34
34
  "shc.s_connection.sslKey.label": "Client private key (PEM)",
35
35
  "homecom.s_account.__homecom-code-help.label": "Before you sign in, open the browser's developer tools, choose the Network tab, and turn on Preserve log.\n\nSign in with SingleKey. The page will say it has network problems. Ignore that: the browser tried to open the Bosch app and could not.\n\nIn the Network list, filter by code= and open the request whose address starts with com.bosch.tt.dashtt.pointt://app/login?code=\n\nCopy that whole address, or only the code, and paste it in the box under the sign-in button.\n\nOn a phone the same redirect fails unless the Bosch app is installed. Use a desktop browser to copy the code.",
36
- "homecom.s_account.gatewayId.description": "Filled from the account. Type one only when you need to override the choice."
36
+ "homecom.s_account.gatewayId.description": "Filled from the account. Type one only when you need to override the choice.",
37
+ "homecom": {
38
+ "s_account": {
39
+ "description": "Sign in with your SingleKey ID. A new tab opens the sign-in page through this hub and finishes on its own.",
40
+ "__homecom-code-help": {
41
+ "label": "If the page does not finish, copy the address it stops on (it starts with com.bosch.tt.dashtt.pointt://app/login?code=) or only the code, and paste it in the box under the sign-in button."
42
+ }
43
+ }
44
+ },
45
+ "home-connect": {
46
+ "s_gateway": {
47
+ "description": "Sign in with your Home Connect account. A new tab opens the sign-in page through this hub and finishes on its own."
48
+ }
49
+ }
37
50
  }
package/i18n/it.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "bosch-shc.name": "Bosch SHC",
2
+ "bosch-shc.name": "Bosch Smart Home",
3
3
  "bosch-home-connect.name": "Bosch Home Connect",
4
4
  "bosch-homecom.name": "Bosch HomeCom",
5
5
  "homecom.s_account.title": "Account HomeCom",
@@ -33,5 +33,18 @@
33
33
  "shc.s_connection.sslCertificate.label": "Certificato client (PEM)",
34
34
  "shc.s_connection.sslKey.label": "Chiave privata client (PEM)",
35
35
  "homecom.s_account.__homecom-code-help.label": "Prima di accedere, apri gli strumenti per sviluppatori del browser, scegli la scheda Rete (Network) e attiva \"Conserva registro\" (Preserve log).\n\nAccedi con SingleKey. La pagina dirà che ci sono problemi di rete. Ignoralo: il browser ha provato ad aprire l'app Bosch e non c'è riuscito.\n\nNell'elenco Rete filtra per code= e apri la richiesta il cui indirizzo inizia con com.bosch.tt.dashtt.pointt://app/login?code=\n\nCopia l'indirizzo intero, oppure solo il codice, e incollalo nella casella sotto il pulsante di accesso.\n\nSu un telefono lo stesso reindirizzamento fallisce se l'app Bosch non è installata. Per copiare il codice usa un browser da computer.",
36
- "homecom.s_account.gatewayId.description": "Compilato dall'account. Scrivilo solo se devi sostituire la scelta."
36
+ "homecom.s_account.gatewayId.description": "Compilato dall'account. Scrivilo solo se devi sostituire la scelta.",
37
+ "homecom": {
38
+ "s_account": {
39
+ "description": "Accedi con il tuo SingleKey ID. Si apre una nuova scheda con la pagina di accesso tramite questo hub e si conclude da sola.",
40
+ "__homecom-code-help": {
41
+ "label": "Se la pagina non si conclude, copia l indirizzo su cui si ferma (inizia con com.bosch.tt.dashtt.pointt://app/login?code=) oppure solo il codice, e incollalo nel riquadro sotto il pulsante di accesso."
42
+ }
43
+ }
44
+ },
45
+ "home-connect": {
46
+ "s_gateway": {
47
+ "description": "Accedi con il tuo account Home Connect. Si apre una nuova scheda con la pagina di accesso tramite questo hub e si conclude da sola."
48
+ }
49
+ }
37
50
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-bosch",
3
- "version": "0.1.28",
3
+ "version": "0.1.30",
4
4
  "description": "Bosch smart-home device-provider addons for CamStack — SHC, Home Connect, and HomeCom cloud integrations (scaffold)",
5
5
  "keywords": [
6
6
  "camstack",
@@ -37,7 +37,7 @@
37
37
  {
38
38
  "id": "bosch-shc",
39
39
  "category": "providers",
40
- "name": "Bosch SHC",
40
+ "name": "Bosch Smart Home",
41
41
  "version": "0.1.0",
42
42
  "description": "Adopt Bosch Smart Home Controller (SHC) devices via account onboarding — scaffold",
43
43
  "entry": "./dist/shc/addon.js",