@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.
- package/CHANGELOG.md +16 -1
- package/README.md +20 -13
- package/dist/{account-integration-offline-2MI94wOE.js → account-integration-offline-BMoYdiX2.js} +126 -1
- package/dist/{account-integration-offline-DKaazSyb.mjs → account-integration-offline-pv6cqOKu.mjs} +115 -2
- package/dist/{dist-DEZDBpGW.js → dist-BioIJ3NA.js} +1818 -126
- package/dist/{dist-Cbcvh8mB.mjs → dist-DBUnIovD.mjs} +1807 -127
- package/dist/home-connect/addon.js +349 -259
- package/dist/home-connect/addon.mjs +349 -259
- package/dist/homecom/addon.js +94 -12
- package/dist/homecom/addon.mjs +94 -12
- package/dist/shc/addon.js +1 -1
- package/dist/shc/addon.mjs +1 -1
- package/i18n/en.json +15 -2
- package/i18n/it.json +15 -2
- package/package.json +2 -2
package/dist/homecom/addon.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_dist = require("../dist-
|
|
3
|
-
const require_account_integration_offline = require("../account-integration-offline-
|
|
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.
|
|
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
|
-
...
|
|
2067
|
-
|
|
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) {
|
package/dist/homecom/addon.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as
|
|
2
|
-
import { a as
|
|
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.
|
|
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
|
-
...
|
|
2066
|
-
|
|
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-
|
|
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");
|
package/dist/shc/addon.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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",
|