homebridge-intratone 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/README.md +29 -4
- package/config.schema.json +51 -13
- package/dist/accessAccessory.js +9 -2
- package/dist/accessAccessory.js.map +1 -1
- package/dist/config.js +21 -2
- package/dist/config.js.map +1 -1
- package/dist/matterDoors.js +1 -1
- package/dist/matterDoors.js.map +1 -1
- package/dist/platform.js +61 -2
- package/dist/platform.js.map +1 -1
- package/dist/storage.js +16 -0
- package/dist/storage.js.map +1 -1
- package/homebridge-ui/public/index.html +150 -0
- package/homebridge-ui/server.js +78 -0
- package/package.json +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `homebridge-intratone`. Versions follow [semver](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## [0.4.0] - 2026-11-11
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Custom settings screen in the Homebridge UI: it lists the detected doors with an inline field to
|
|
10
|
+
rename each one in the Home app, and a read-only **Connection** panel showing the values the
|
|
11
|
+
plugin negotiated with the API (device id, session expiry, smartphone id, mobipass flags).
|
|
12
|
+
Renames are also stored as an `access_names` list in the config for anyone editing it by hand.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- The HomeKit service now defaults to **Garage door** (was Lock), and the "recommended" hint on
|
|
17
|
+
Lock is gone — it is the user's choice.
|
|
18
|
+
- Pulse duration now defaults to **30 s** (was 2 s), which suits an exterior condominium gate;
|
|
19
|
+
range is 1–60 s.
|
|
20
|
+
- The settings form keeps only the phone number and the HomeKit service at the top; everything
|
|
21
|
+
technical (`app_id`, `app_token`, pulse duration, `device_id`, refresh interval, identity, app
|
|
22
|
+
version, debug) moved under **Advanced**.
|
|
23
|
+
|
|
24
|
+
### Note
|
|
25
|
+
|
|
26
|
+
- Installs that never set `service` or `pulse_seconds` switch to Garage door and a 30 s pulse on
|
|
27
|
+
upgrade; set them explicitly to keep the old behaviour.
|
|
28
|
+
|
|
29
|
+
## [0.3.0] - 2026-11-11
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- Claim the mobipass door key from the plugin settings, without the terminal. A new **Claim the
|
|
34
|
+
4G door key** option (Advanced) requests the SMS, and an **SMS code** field completes it; the
|
|
35
|
+
plugin saves the claimed session itself. The SMS is requested at most once per 15 minutes
|
|
36
|
+
across restarts, and the plugin reports when this device already holds the key. Claiming is
|
|
37
|
+
single-owner, so it still revokes whichever device held the key.
|
|
38
|
+
|
|
39
|
+
### Note
|
|
40
|
+
|
|
41
|
+
- Moving the key *off another device* (e.g. your phone) may be refused by the server with
|
|
42
|
+
`MOBIPASS_ALREADY_ACTIVATE` on some accounts; the log says so. Sharing that device's
|
|
43
|
+
`device_id` (Advanced → Device ID) is the reliable way to open the doors without revoking it.
|
|
44
|
+
|
|
5
45
|
## [0.2.2] - 2026-11-11
|
|
6
46
|
|
|
7
47
|
### Changed
|
|
@@ -88,6 +128,8 @@ two-way audio are out of scope.
|
|
|
88
128
|
masked.
|
|
89
129
|
- MIT license.
|
|
90
130
|
|
|
131
|
+
[0.4.0]: https://github.com/jtoucas-DIMO/Homebridge-Intratone/releases/tag/v0.4.0
|
|
132
|
+
[0.3.0]: https://github.com/jtoucas-DIMO/Homebridge-Intratone/releases/tag/v0.3.0
|
|
91
133
|
[0.2.2]: https://github.com/jtoucas-DIMO/Homebridge-Intratone/releases/tag/v0.2.2
|
|
92
134
|
[0.2.1]: https://github.com/jtoucas-DIMO/Homebridge-Intratone/releases/tag/v0.2.1
|
|
93
135
|
[0.2.0]: https://github.com/jtoucas-DIMO/Homebridge-Intratone/releases/tag/v0.2.0
|
package/README.md
CHANGED
|
@@ -67,13 +67,23 @@ take the main bridge down. Everything else has a sensible default (see below).
|
|
|
67
67
|
| `app_id` | built in | Names the official app, not your account (`app_apisip_ios`), shipped with the plugin. Set it only with `user_agent: android`. |
|
|
68
68
|
| `indicatif` | `33` | Country code. |
|
|
69
69
|
| `device_id` | generated | Leave empty to generate a UUID that is stored and reused forever. Set it to reuse an existing phone's registration (`device_id` claim of that phone's JWT). |
|
|
70
|
-
| `service` | `
|
|
71
|
-
| `pulse_seconds` | `
|
|
70
|
+
| `service` | `garage` | `garage` (GarageDoorOpener, default) or `lock` (LockMechanism). HomeKit only; over Matter every door is a lock. |
|
|
71
|
+
| `pulse_seconds` | `30` | How long a door shows as unlocked/open after a successful open. 30 s suits an exterior gate; 1–60. |
|
|
72
|
+
| `access_names` | – | Rename doors: a list of `{ "access_id": "…", "name": "…" }`. Easier from the settings page (below). Unnamed doors keep their detected names. |
|
|
72
73
|
| `access_refresh_minutes` | `60` | How often the door list is re-fetched. |
|
|
73
74
|
| `user_agent` | `ios` | `ios` or `android` client identity. |
|
|
74
75
|
| `app_version` | `4.6.4` | `appversion` sent at login. |
|
|
75
76
|
| `debug` | `false` | Logs every request and response at info level, plus the raw door list once at startup. Tokens, app credentials and your phone number are masked. |
|
|
76
77
|
|
|
78
|
+
### Settings page
|
|
79
|
+
|
|
80
|
+
In the Homebridge UI, the top of the settings shows only what you normally set — country code,
|
|
81
|
+
phone number and the HomeKit service. Everything technical (`app_id`, `app_token`, pulse duration,
|
|
82
|
+
`device_id`, refresh interval, identity, app version, debug) is under **Advanced**. The screen
|
|
83
|
+
also lists the doors it detected, each with a field to rename it in the Home app, and a read-only
|
|
84
|
+
**Connection** panel with the values the plugin negotiated with the API (device id, session
|
|
85
|
+
expiry, smartphone id and the mobipass flags).
|
|
86
|
+
|
|
77
87
|
The plugin keeps `device_id` and the current JWT in
|
|
78
88
|
`<homebridge storage>/intratone/<hash>.json` (mode 0600). Delete that file only if you want to
|
|
79
89
|
register as a new device.
|
|
@@ -129,8 +139,23 @@ Mobipass is single-owner: the key that opens `data` doors lives on one device at
|
|
|
129
139
|
another phone holds it, `GET /api/access` returns nothing. The log then says
|
|
130
140
|
*"The mobipass key for this account is active on another device"* and no door is exposed.
|
|
131
141
|
|
|
132
|
-
|
|
133
|
-
|
|
142
|
+
### From the plugin settings (no terminal)
|
|
143
|
+
|
|
144
|
+
Open **Claim the 4G door key (optional)** in the settings, tick **Claim the door key on this
|
|
145
|
+
device**, and **Save**. On the next start the plugin asks Intratone to text a code to your
|
|
146
|
+
account number and logs that it did. Put that code in the **SMS code** field and **Save** again:
|
|
147
|
+
the plugin claims the key and the doors appear. Then untick the option and clear the code.
|
|
148
|
+
|
|
149
|
+
This **revokes** whichever device held the key — your phone can no longer open the 4G doors
|
|
150
|
+
(mobipass is single-owner). To keep the phone working instead, set **Device ID** (above) so
|
|
151
|
+
Homebridge shares the phone's key, and leave this off. If the log says the key is *already
|
|
152
|
+
active* and the request is refused, moving it off another device isn't available through this
|
|
153
|
+
flow on your account — use the Device ID method.
|
|
154
|
+
|
|
155
|
+
### From the command line
|
|
156
|
+
|
|
157
|
+
You can also transfer it with the bundled CLI. Run it as the user Homebridge runs as, so it uses
|
|
158
|
+
the same device_id and JWT:
|
|
134
159
|
|
|
135
160
|
```bash
|
|
136
161
|
sudo -u homebridge homebridge-intratone activate -U /var/lib/homebridge
|
package/config.schema.json
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
"pluginAlias": "Intratone",
|
|
3
3
|
"pluginType": "platform",
|
|
4
4
|
"singular": true,
|
|
5
|
+
"customUi": true,
|
|
5
6
|
"strictValidation": false,
|
|
6
|
-
"headerDisplay": "
|
|
7
|
+
"headerDisplay": "**Unofficial.** This plugin re-implements the REST side of the Intratone / Cogelec app so you can open your doors and gates from HomeKit, Matter and home automation — for people who want to stop using the app.\n\n⚠️ **For normal use on a phone, the official Intratone app remains the best option.** It keeps every feature of your accesses — video door entry, calls, visitor codes, history — which this plugin does not: it only does remote opening.\n\nRun it as a **child bridge** and set your account **phone number** below; `app_id` / `app_token` are built in. 4G (mobipass) doors open from one device at a time: if your phone holds the key, set **Device ID** to your phone's, or use **Claim the 4G door key** (which revokes the phone).",
|
|
7
8
|
"schema": {
|
|
8
9
|
"type": "object",
|
|
9
10
|
"properties": {
|
|
@@ -44,21 +45,21 @@
|
|
|
44
45
|
},
|
|
45
46
|
"service": {
|
|
46
47
|
"title": "HomeKit service",
|
|
47
|
-
"description": "HomeKit
|
|
48
|
+
"description": "How each door appears in HomeKit. Over Matter every door is a door lock.",
|
|
48
49
|
"type": "string",
|
|
49
|
-
"default": "
|
|
50
|
+
"default": "garage",
|
|
50
51
|
"oneOf": [
|
|
51
|
-
{ "title": "
|
|
52
|
-
{ "title": "
|
|
52
|
+
{ "title": "Garage door", "enum": ["garage"] },
|
|
53
|
+
{ "title": "Lock", "enum": ["lock"] }
|
|
53
54
|
]
|
|
54
55
|
},
|
|
55
56
|
"pulse_seconds": {
|
|
56
57
|
"title": "Pulse duration (s)",
|
|
57
|
-
"description": "How long the door shows as unlocked/open after a successful command.",
|
|
58
|
+
"description": "How long the door shows as unlocked/open after a successful command. 30 s suits an exterior gate.",
|
|
58
59
|
"type": "number",
|
|
59
|
-
"default":
|
|
60
|
+
"default": 30,
|
|
60
61
|
"minimum": 1,
|
|
61
|
-
"maximum":
|
|
62
|
+
"maximum": 60
|
|
62
63
|
},
|
|
63
64
|
"access_refresh_minutes": {
|
|
64
65
|
"title": "Access list refresh (min)",
|
|
@@ -87,21 +88,58 @@
|
|
|
87
88
|
"description": "Logs request/response bodies (tokens masked) at info level.",
|
|
88
89
|
"type": "boolean",
|
|
89
90
|
"default": false
|
|
91
|
+
},
|
|
92
|
+
"claim_door_key": {
|
|
93
|
+
"title": "Claim the 4G door key on this device",
|
|
94
|
+
"description": "4G (mobipass) doors can be opened by one device at a time. Turn this on to move the key to Homebridge by SMS: save, enter the code Intratone texts you in the field below, and save again. This REVOKES the device that holds the key now — your phone can no longer open those doors. Turn it back off when done. Not needed if you set Device ID to a device that already holds the key.",
|
|
95
|
+
"type": "boolean",
|
|
96
|
+
"default": false
|
|
97
|
+
},
|
|
98
|
+
"sms_code": {
|
|
99
|
+
"title": "SMS code",
|
|
100
|
+
"description": "The code Intratone texts after you enable the option above and save. Enter it and save to finish claiming, then clear it.",
|
|
101
|
+
"type": "string"
|
|
102
|
+
},
|
|
103
|
+
"access_names": {
|
|
104
|
+
"title": "Rename doors",
|
|
105
|
+
"description": "Give a door your own HomeKit name. Match it by access id — the log prints one per door (\"Adding … access <id> …\"), and the settings screen lists the detected doors here. Leave a name blank to keep the detected one.",
|
|
106
|
+
"type": "array",
|
|
107
|
+
"items": {
|
|
108
|
+
"type": "object",
|
|
109
|
+
"properties": {
|
|
110
|
+
"access_id": { "title": "Access ID", "type": "string", "placeholder": "1196062" },
|
|
111
|
+
"name": { "title": "Name in HomeKit", "type": "string", "placeholder": "detected name" }
|
|
112
|
+
}
|
|
113
|
+
}
|
|
90
114
|
}
|
|
91
115
|
}
|
|
92
116
|
},
|
|
93
117
|
"layout": [
|
|
94
|
-
"name",
|
|
95
|
-
"app_id",
|
|
96
|
-
{ "key": "app_token", "type": "password" },
|
|
97
118
|
{ "type": "flex", "flex-flow": "row wrap", "items": ["indicatif", "tel"] },
|
|
98
119
|
"service",
|
|
99
|
-
"pulse_seconds",
|
|
100
120
|
{
|
|
101
121
|
"type": "fieldset",
|
|
102
122
|
"title": "Advanced",
|
|
103
123
|
"expandable": true,
|
|
104
|
-
"
|
|
124
|
+
"expanded": false,
|
|
125
|
+
"items": [
|
|
126
|
+
"name",
|
|
127
|
+
"pulse_seconds",
|
|
128
|
+
"app_id",
|
|
129
|
+
{ "key": "app_token", "type": "password" },
|
|
130
|
+
"device_id",
|
|
131
|
+
"access_refresh_minutes",
|
|
132
|
+
"user_agent",
|
|
133
|
+
"app_version",
|
|
134
|
+
"debug"
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"type": "fieldset",
|
|
139
|
+
"title": "Claim the 4G door key (optional)",
|
|
140
|
+
"expandable": true,
|
|
141
|
+
"expanded": false,
|
|
142
|
+
"items": ["claim_door_key", "sms_code"]
|
|
105
143
|
}
|
|
106
144
|
]
|
|
107
145
|
}
|
package/dist/accessAccessory.js
CHANGED
|
@@ -7,8 +7,15 @@ export function homeKitName(name) {
|
|
|
7
7
|
.replace(/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/gu, '');
|
|
8
8
|
return cleaned || 'Intratone door';
|
|
9
9
|
}
|
|
10
|
-
/**
|
|
11
|
-
|
|
10
|
+
/**
|
|
11
|
+
* The HomeKit name for an access. A non-empty `override` (from the config) wins; otherwise the
|
|
12
|
+
* detected name, prefixed with the residence only when several residences would be ambiguous.
|
|
13
|
+
*/
|
|
14
|
+
export function accessDisplayName(access, withResidence, override) {
|
|
15
|
+
const chosen = override?.trim();
|
|
16
|
+
if (chosen) {
|
|
17
|
+
return homeKitName(chosen);
|
|
18
|
+
}
|
|
12
19
|
return homeKitName(withResidence && access.residence ? `${access.residence} ${access.name}` : access.name);
|
|
13
20
|
}
|
|
14
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessAccessory.js","sourceRoot":"","sources":["../src/accessAccessory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAc1C,0FAA0F;AAC1F,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,OAAO,GAAG,IAAI;SACjB,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC;SACrC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;IACpD,OAAO,OAAO,IAAI,gBAAgB,CAAC;AACrC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"accessAccessory.js","sourceRoot":"","sources":["../src/accessAccessory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAc1C,0FAA0F;AAC1F,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,OAAO,GAAG,IAAI;SACjB,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC;SACrC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;IACpD,OAAO,OAAO,IAAI,gBAAgB,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,aAAsB,EAAE,QAAiB;IACzF,MAAM,MAAM,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,WAAW,CAAC,aAAa,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7G,CAAC;AAID;;;GAGG;AACH,MAAM,OAAO,eAAe;IAOP;IAGA;IATF,OAAO,CAAU;IAC1B,MAAM,CAAS;IACf,KAAK,GAAU,QAAQ,CAAC;IACxB,UAAU,CAAkB;IAEpC,YACmB,SAA2C,EAC5D,MAAc,EACd,WAAmB,EACF,IAAyB;QAHzB,cAAS,GAAT,SAAS,CAAkC;QAG3C,SAAI,GAAJ,IAAI,CAAqB;QAE1C,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC/C,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,aAAa,CAAC;YACnD,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,KAAK,EAAE,CAAC;YACV,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAEzF,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACjG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,eAAe,CAAC;iBAC3D,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;iBAC/B,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACjG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,eAAe,CAAC;iBAC3D,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;iBAC/B,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,MAAM,CAAC,MAAc,EAAE,WAAmB;QACxC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC;YACrD,EAAE,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC;aAC5D,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC;aACvF,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;QACL,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAEO,WAAW,CAAC,KAA0B;QAC5C,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC3C,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,eAAe,CAAC,IAAI;YAC/C,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC;QAEvD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YACjC,iFAAiF;YACjF,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,yFAAyF;IACjF,OAAO;QACb,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,iEAAiE;QAC3E,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAC9B,GAAG,EAAE;YACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjF,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,kBAAkB,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC,CACF,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,KAAY;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,IAAI;QACV,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACxF,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,gBAAgB,CAAC;YAClE,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACpF,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,gBAAgB,CAAC;QAC/D,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACrD,CAAC;IAEO,WAAW;QACjB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,eAAe,CAAC;YACxD,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,eAAe,CAAC;QAC9D,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,CAAC;CACF"}
|
package/dist/config.js
CHANGED
|
@@ -2,6 +2,22 @@ import { randomUUID } from 'node:crypto';
|
|
|
2
2
|
import { DEFAULT_APP_IDS, DEFAULT_APP_TOKENS, IntratoneClient } from './intratoneClient.js';
|
|
3
3
|
import { StateStore, accountKey } from './storage.js';
|
|
4
4
|
import { isRecord, str } from './util.js';
|
|
5
|
+
/** Builds the access id → custom name map from the `access_names` config array. */
|
|
6
|
+
function parseNameOverrides(raw) {
|
|
7
|
+
const map = new Map();
|
|
8
|
+
if (Array.isArray(raw)) {
|
|
9
|
+
for (const entry of raw) {
|
|
10
|
+
if (isRecord(entry)) {
|
|
11
|
+
const id = str(entry.access_id) || str(entry.id);
|
|
12
|
+
const name = str(entry.name).trim();
|
|
13
|
+
if (id && name) {
|
|
14
|
+
map.set(id, name);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return map;
|
|
20
|
+
}
|
|
5
21
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
6
22
|
function clamp(value, fallback, min, max) {
|
|
7
23
|
const n = typeof value === 'number' ? value : Number(value);
|
|
@@ -44,12 +60,15 @@ export function parseSettings(raw) {
|
|
|
44
60
|
tel,
|
|
45
61
|
indicatif,
|
|
46
62
|
deviceId,
|
|
47
|
-
service: config.service === '
|
|
48
|
-
pulseMs: clamp(config.pulse_seconds,
|
|
63
|
+
service: config.service === 'lock' ? 'lock' : 'garage',
|
|
64
|
+
pulseMs: clamp(config.pulse_seconds, 30, 1, 60) * 1000,
|
|
49
65
|
accessRefreshMs: clamp(config.access_refresh_minutes, 60, 15, 1440) * 60_000,
|
|
50
66
|
identity,
|
|
51
67
|
appVersion: str(config.app_version) || '4.6.4',
|
|
52
68
|
debug: config.debug === true,
|
|
69
|
+
claimDoorKey: config.claim_door_key === true,
|
|
70
|
+
smsCode: str(config.sms_code).replace(/\s+/g, ''),
|
|
71
|
+
nameOverrides: parseNameOverrides(config.access_names),
|
|
53
72
|
},
|
|
54
73
|
};
|
|
55
74
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,eAAe,EAAqC,MAAM,sBAAsB,CAAC;AAC/H,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/matterDoors.js
CHANGED
|
@@ -130,7 +130,7 @@ export class MatterDoors {
|
|
|
130
130
|
for (const access of accesses) {
|
|
131
131
|
const uuid = matter.uuid.generate(`intratone:matter:${access.id}`);
|
|
132
132
|
seen.add(uuid);
|
|
133
|
-
const displayName = matterLabel(accessDisplayName(access, multiResidence));
|
|
133
|
+
const displayName = matterLabel(accessDisplayName(access, multiResidence, this.deps.nameOverrides.get(access.id)));
|
|
134
134
|
const door = this.doors.get(uuid);
|
|
135
135
|
if (!door) {
|
|
136
136
|
if (!this.cached.has(uuid)) {
|
package/dist/matterDoors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matterDoors.js","sourceRoot":"","sources":["../src/matterDoors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAsB,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"matterDoors.js","sourceRoot":"","sources":["../src/matterDoors.ts"],"names":[],"mappings":"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"}
|
package/dist/platform.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AccessAccessory, accessDisplayName } from './accessAccessory.js';
|
|
2
2
|
import { openAccount, parseSettings } from './config.js';
|
|
3
|
-
import { IntratoneRateLimitError, } from './intratoneClient.js';
|
|
3
|
+
import { IntratoneRateLimitError, MobipassError, } from './intratoneClient.js';
|
|
4
4
|
import { MatterDoors } from './matterDoors.js';
|
|
5
5
|
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
|
|
6
6
|
import { describeError, redactJson } from './util.js';
|
|
@@ -10,6 +10,8 @@ const TOKEN_MIN_REMAINING_MS = 24 * 3600_000;
|
|
|
10
10
|
/** Lower bound between syncs triggered by the server or by a failed open. */
|
|
11
11
|
const MIN_SYNC_GAP_MS = 5 * 60_000;
|
|
12
12
|
const RETRY_BASE_MS = 2 * 60_000;
|
|
13
|
+
/** Don't re-text the mobipass claim code more than once per this window across restarts. */
|
|
14
|
+
const CLAIM_RESEND_GAP_MS = 15 * 60_000;
|
|
13
15
|
export class IntratonePlatform {
|
|
14
16
|
log;
|
|
15
17
|
api;
|
|
@@ -20,6 +22,7 @@ export class IntratonePlatform {
|
|
|
20
22
|
/** Set only when this bridge has Matter enabled (Homebridge 2 with a `matter` block). */
|
|
21
23
|
matterDoors;
|
|
22
24
|
client;
|
|
25
|
+
store;
|
|
23
26
|
syncTimer;
|
|
24
27
|
tokenTimer;
|
|
25
28
|
syncing;
|
|
@@ -43,6 +46,7 @@ export class IntratonePlatform {
|
|
|
43
46
|
matter: api.matter,
|
|
44
47
|
log,
|
|
45
48
|
pulseMs: settings.pulseMs,
|
|
49
|
+
nameOverrides: settings.nameOverrides,
|
|
46
50
|
open: (access) => this.openAccess(access),
|
|
47
51
|
});
|
|
48
52
|
}
|
|
@@ -64,6 +68,7 @@ export class IntratonePlatform {
|
|
|
64
68
|
onSession: (session) => this.onSession(session),
|
|
65
69
|
});
|
|
66
70
|
this.client = account.client;
|
|
71
|
+
this.store = account.store;
|
|
67
72
|
if (account.generatedDeviceId) {
|
|
68
73
|
this.log.info(`Generated device_id ${account.deviceId}, stored in ${account.store.file} and reused from now on.`);
|
|
69
74
|
}
|
|
@@ -87,8 +92,62 @@ export class IntratonePlatform {
|
|
|
87
92
|
await this.matterDoors.restore();
|
|
88
93
|
}
|
|
89
94
|
this.tokenTimer = setInterval(() => void this.keepTokenFresh(), TOKEN_CHECK_MS);
|
|
95
|
+
await this.maybeClaimKey();
|
|
90
96
|
await this.sync();
|
|
91
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Terminal-free mobipass claim. With "Claim the door key" on, this texts a code once, then
|
|
100
|
+
* completes with the code the user pastes into the settings. Claiming moves the single-owner
|
|
101
|
+
* key to this device and revokes whichever device held it (e.g. the phone).
|
|
102
|
+
*/
|
|
103
|
+
async maybeClaimKey() {
|
|
104
|
+
const settings = this.settings;
|
|
105
|
+
const client = this.client;
|
|
106
|
+
const store = this.store;
|
|
107
|
+
if (!settings?.claimDoorKey || !client || !store) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Fresh flags: on a cold start there is no session yet, and only a login tells us whether
|
|
111
|
+
// this device already holds the key (so we don't text an SMS for nothing).
|
|
112
|
+
let session;
|
|
113
|
+
try {
|
|
114
|
+
session = await client.refresh();
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
this.log.error(`Door key: could not sign in to check the key: ${describeError(error)}`);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (session.flags.mobipass) {
|
|
121
|
+
this.log.info('Door key: this device already holds the mobipass key — you can turn off "Claim the door key".');
|
|
122
|
+
store.clearClaimRequested();
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
if (settings.smsCode) {
|
|
127
|
+
await client.mobipassVerify(settings.smsCode);
|
|
128
|
+
store.clearClaimRequested();
|
|
129
|
+
await client.refresh();
|
|
130
|
+
this.log.warn('Door key claimed on Homebridge. Turn off "Claim the door key" and clear the SMS code, then save. The device that held the key can no longer open the 4G doors.');
|
|
131
|
+
}
|
|
132
|
+
else if (store.claimRequestedAt && Date.now() - store.claimRequestedAt < CLAIM_RESEND_GAP_MS) {
|
|
133
|
+
this.log.info('Door key: a code was already sent by SMS. Enter it in the "SMS code" field (Advanced) and save. A new code can be requested 15 min after the last one.');
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
await client.mobipassActivate();
|
|
137
|
+
store.markClaimRequested();
|
|
138
|
+
this.log.warn('Door key: a code was sent by SMS to your Intratone number. Enter it in the "SMS code" field (Advanced) and save to finish claiming the key.');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
const code = error instanceof MobipassError ? error.code : undefined;
|
|
143
|
+
if (code === 'MOBIPASS_ALREADY_ACTIVATE') {
|
|
144
|
+
this.log.warn('Door key: the server reports mobipass already active elsewhere and refused the request. Moving the key off another device may need a step this plugin does not have yet; sharing that device\'s device_id is the reliable alternative.');
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.log.error(`Door key claim failed: ${describeError(error)}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
92
151
|
stop() {
|
|
93
152
|
this.stopped = true;
|
|
94
153
|
clearTimeout(this.syncTimer);
|
|
@@ -227,7 +286,7 @@ export class IntratonePlatform {
|
|
|
227
286
|
for (const access of accesses) {
|
|
228
287
|
const id = uuid.generate(`intratone:${access.id}`);
|
|
229
288
|
seen.add(id);
|
|
230
|
-
const displayName = accessDisplayName(access, multiResidence);
|
|
289
|
+
const displayName = accessDisplayName(access, multiResidence, settings.nameOverrides.get(access.id));
|
|
231
290
|
const existing = this.cached.get(id);
|
|
232
291
|
if (existing) {
|
|
233
292
|
const changed = JSON.stringify(existing.context.access) !== JSON.stringify(access);
|
package/dist/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAsB,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,aAAa,EAA0B,MAAM,aAAa,CAAC;AACjF,OAAO,EACL,uBAAuB,EACvB,aAAa,GAKd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEtD,0FAA0F;AAC1F,MAAM,cAAc,GAAG,EAAE,GAAG,QAAQ,CAAC;AACrC,MAAM,sBAAsB,GAAG,EAAE,GAAG,QAAQ,CAAC;AAC7C,6EAA6E;AAC7E,MAAM,eAAe,GAAG,CAAC,GAAG,MAAM,CAAC;AACnC,MAAM,aAAa,GAAG,CAAC,GAAG,MAAM,CAAC;AACjC,4FAA4F;AAC5F,MAAM,mBAAmB,GAAG,EAAE,GAAG,MAAM,CAAC;AAExC,MAAM,OAAO,iBAAiB;IAmBjB;IAEA;IApBM,QAAQ,CAAqB;IAC7B,MAAM,GAAG,IAAI,GAAG,EAA4C,CAAC;IAC7D,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC9C,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACnD,yFAAyF;IACxE,WAAW,CAAe;IACnC,MAAM,CAAmB;IACzB,KAAK,CAAc;IACnB,SAAS,CAAkB;IAC3B,UAAU,CAAkB;IAC5B,OAAO,CAAiB;IACxB,UAAU,GAAG,CAAC,CAAC;IACf,QAAQ,GAAG,CAAC,CAAC;IACb,aAAa,GAAG,KAAK,CAAC;IACtB,gBAAgB,CAAU;IAC1B,OAAO,GAAG,KAAK,CAAC;IAExB,YACW,GAAY,EACrB,MAAsB,EACb,GAAQ;QAFR,QAAG,GAAH,GAAG,CAAS;QAEZ,QAAG,GAAH,GAAG,CAAK;QAEjB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,0FAA0F;YAC1F,GAAG,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;gBACjC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG;gBACH,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC;QACD,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAChC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,kBAAkB,CAAC,SAA4B;QAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAA6C,CAAC,CAAC;IACjF,CAAC;IAED,wBAAwB,CAAC,SAA0B;QACjD,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,QAA2B;QAC7C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;gBACjE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBACvC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAChD,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC3B,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,QAAQ,eAAe,OAAO,CAAC,KAAK,CAAC,IAAI,0BAA0B,CAAC,CAAC;YACpH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,QAAQ,cAAc,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,+FAA+F;QAC/F,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;YACxC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;YAChG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,cAAc,EAAE,EAAE,cAAc,CAAC,CAAC;QAChF,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,aAAa;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACjD,OAAO;QACT,CAAC;QACD,0FAA0F;QAC1F,2EAA2E;QAC3E,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iDAAiD,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxF,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAC;YAC/G,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC9C,KAAK,CAAC,mBAAmB,EAAE,CAAC;gBAC5B,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gKAAgK,CAAC,CAAC;YAClL,CAAC;iBAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;gBAC/F,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wJAAwJ,CAAC,CAAC;YAC1K,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAChC,KAAK,CAAC,kBAAkB,EAAE,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6IAA6I,CAAC,CAAC;YAC/J,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,KAAK,YAAY,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YACrE,IAAI,IAAI,KAAK,2BAA2B,EAAE,CAAC;gBACzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wOAAwO,CAAC,CAAC;YAC1P,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAEO,SAAS,CAAC,OAAgB;QAChC,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,2FAA2F;IACnF,WAAW;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,eAAe,EAAE,CAAC;YACpE,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACxE,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mDAAmD,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC5C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC;QAErC,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,yBAAyB,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAClC,MAAM,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,KAAK,GAAG,KAAK,YAAY,uBAAuB;gBAC9C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC;gBACtC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,aAAa,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7H,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,QAAoB;QACxC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9C,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,SAAS;YACX,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACvF,IAAI,OAAO,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;gBACzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,2DAA2D,CAAC,CAAC;YAC9F,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,KAAK,OAAO,CAAC,MAAM,WAAW,OAAO,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAuB,EAAE,QAAoB;QACtE,sFAAsF;QACtF,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC;QACzC,IAAI,CAAC;YACH,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,qCAAqC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,OAAe,CAAC;QACpB,IAAI,KAAK,EAAE,kBAAkB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjD,OAAO,GAAG,qGAAqG;gBAC7G,oHAAoH;gBACpH,kDAAkD,CAAC;QACvD,CAAC;aAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,OAAO,GAAG,eAAe,QAAQ,CAAC,OAAO,CAAC,MAAM,4CAA4C,CAAC;QAC/F,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,mCAAmC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,OAAO,IAAI,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,4CAA4C,CAAC;QACtF,CAAC;QACD,IAAI,OAAO,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,QAAkB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,uCAA+B,CAAC,6BAAqB,CAAC;QACtG,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,KAAK,GAAwB,EAAE,CAAC;QACtC,MAAM,OAAO,GAAwB,EAAE,CAAC;QAExC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACrG,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACnF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;gBAC3C,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;gBACD,SAAS;YACX,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAgB,WAAW,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC3F,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,WAAW,MAAM,MAAM,CAAC,SAAS,IAAI,cAAc,YAAY,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;QAC/H,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QAED,uFAAuF;QACvF,4EAA4E;QAC5E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACzF,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,WAAW,iCAAiC,CAAC,CAAC;YACnF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,SAA2C,EAAE,MAAc,EAAE,WAAmB;QAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE;YACpF,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,QAAQ,CAAC,OAAO;YACtB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;SAC1C,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,MAAc;QACrC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kFAAkF;YAClF,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAe;QAC3B,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF"}
|
package/dist/storage.js
CHANGED
|
@@ -49,6 +49,21 @@ export class StateStore {
|
|
|
49
49
|
this.state = { ...this.state, session };
|
|
50
50
|
this.write();
|
|
51
51
|
}
|
|
52
|
+
/** Timestamp of the last mobipass claim SMS request, if any. */
|
|
53
|
+
get claimRequestedAt() {
|
|
54
|
+
return this.state.claimRequestedAt;
|
|
55
|
+
}
|
|
56
|
+
markClaimRequested() {
|
|
57
|
+
this.state = { ...this.state, claimRequestedAt: Date.now() };
|
|
58
|
+
this.write();
|
|
59
|
+
}
|
|
60
|
+
clearClaimRequested() {
|
|
61
|
+
if (this.state.claimRequestedAt === undefined) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
this.state = { version: 1, deviceId: this.state.deviceId, session: this.state.session };
|
|
65
|
+
this.write();
|
|
66
|
+
}
|
|
52
67
|
read() {
|
|
53
68
|
let text;
|
|
54
69
|
try {
|
|
@@ -75,6 +90,7 @@ export class StateStore {
|
|
|
75
90
|
version: 1,
|
|
76
91
|
deviceId: typeof parsed.deviceId === 'string' ? parsed.deviceId : undefined,
|
|
77
92
|
session: isSession(parsed.session) ? parsed.session : undefined,
|
|
93
|
+
claimRequestedAt: typeof parsed.claimRequestedAt === 'number' ? parsed.claimRequestedAt : undefined,
|
|
78
94
|
};
|
|
79
95
|
}
|
|
80
96
|
write() {
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
<!-- Custom settings page for homebridge-config-ui-x.
|
|
2
|
+
Shows the live connection values and the detected doors (with inline rename) above the form.
|
|
3
|
+
The standard form is always rendered first, so the page is never blank if a request fails. -->
|
|
4
|
+
<div id="intratone-info" class="mb-3"></div>
|
|
5
|
+
<div id="intratone-doors" class="mb-3"></div>
|
|
6
|
+
|
|
7
|
+
<script>
|
|
8
|
+
(async () => {
|
|
9
|
+
// Base form first — if anything below throws, the normal settings still render.
|
|
10
|
+
try {
|
|
11
|
+
homebridge.showSchemaForm();
|
|
12
|
+
} catch (error) {
|
|
13
|
+
console.error('showSchemaForm failed', error);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const info = document.getElementById('intratone-info');
|
|
17
|
+
const doors = document.getElementById('intratone-doors');
|
|
18
|
+
|
|
19
|
+
let block;
|
|
20
|
+
try {
|
|
21
|
+
const configs = await homebridge.getPluginConfig();
|
|
22
|
+
block = configs[0] || { platform: 'Intratone', name: 'Intratone' };
|
|
23
|
+
} catch (error) {
|
|
24
|
+
return; // No config access: just leave the standard form.
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
homebridge.showSpinner();
|
|
28
|
+
const [status, accesses] = await Promise.allSettled([
|
|
29
|
+
homebridge.request('/status', { config: block }),
|
|
30
|
+
homebridge.request('/accesses', { config: block }),
|
|
31
|
+
]);
|
|
32
|
+
homebridge.hideSpinner();
|
|
33
|
+
|
|
34
|
+
renderInfo(info, status);
|
|
35
|
+
renderDoors(doors, block, accesses);
|
|
36
|
+
})();
|
|
37
|
+
|
|
38
|
+
function note(parent, text) {
|
|
39
|
+
parent.innerHTML = '<p class="help-block text-muted">' + text + '</p>';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function renderInfo(container, settled) {
|
|
43
|
+
const title = document.createElement('h5');
|
|
44
|
+
title.textContent = 'Connection';
|
|
45
|
+
container.appendChild(title);
|
|
46
|
+
|
|
47
|
+
if (settled.status !== 'fulfilled') {
|
|
48
|
+
const reason = settled.reason && settled.reason.message ? settled.reason.message : 'not connected yet';
|
|
49
|
+
const p = document.createElement('p');
|
|
50
|
+
p.className = 'help-block text-muted';
|
|
51
|
+
p.textContent = 'Not connected (' + reason + '). Fill in the phone number and save, then reopen.';
|
|
52
|
+
container.appendChild(p);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const s = settled.value;
|
|
56
|
+
const rows = [
|
|
57
|
+
['Device ID', s.deviceId + (s.generatedDeviceId ? ' (generated)' : '')],
|
|
58
|
+
['App ID', s.appId],
|
|
59
|
+
['App version', s.appVersion],
|
|
60
|
+
['Client', s.identity],
|
|
61
|
+
['Session valid until', s.session && s.session.validUntil],
|
|
62
|
+
['Smartphone ID', s.session && s.session.smartphoneId],
|
|
63
|
+
['Mobipass key held here', s.flags ? (s.flags.mobipass ? 'yes' : 'no') : '?'],
|
|
64
|
+
['Mobipass account', s.flags ? (s.flags.mobipassCompatible ? 'yes' : 'no') : '?'],
|
|
65
|
+
['State file', s.stateFile],
|
|
66
|
+
];
|
|
67
|
+
const dl = document.createElement('dl');
|
|
68
|
+
dl.className = 'row';
|
|
69
|
+
for (const [key, value] of rows) {
|
|
70
|
+
const dt = document.createElement('dt');
|
|
71
|
+
dt.className = 'col-sm-4 text-truncate';
|
|
72
|
+
dt.textContent = key;
|
|
73
|
+
const dd = document.createElement('dd');
|
|
74
|
+
dd.className = 'col-sm-8 text-break';
|
|
75
|
+
dd.textContent = value == null || value === '' ? '—' : String(value);
|
|
76
|
+
dl.appendChild(dt);
|
|
77
|
+
dl.appendChild(dd);
|
|
78
|
+
}
|
|
79
|
+
container.appendChild(dl);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function overridesFromConfig(block) {
|
|
83
|
+
const map = {};
|
|
84
|
+
for (const entry of (block.access_names || [])) {
|
|
85
|
+
if (entry && entry.access_id) {
|
|
86
|
+
map[entry.access_id] = entry.name || '';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return map;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function saveOverrides(block, map) {
|
|
93
|
+
const list = Object.keys(map)
|
|
94
|
+
.filter((id) => (map[id] || '').trim())
|
|
95
|
+
.map((id) => ({ access_id: id, name: map[id].trim() }));
|
|
96
|
+
if (list.length) {
|
|
97
|
+
block.access_names = list;
|
|
98
|
+
} else {
|
|
99
|
+
delete block.access_names;
|
|
100
|
+
}
|
|
101
|
+
homebridge.updatePluginConfig([block]);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function renderDoors(container, block, settled) {
|
|
105
|
+
const title = document.createElement('h5');
|
|
106
|
+
title.textContent = 'Your doors';
|
|
107
|
+
container.appendChild(title);
|
|
108
|
+
|
|
109
|
+
if (settled.status !== 'fulfilled') {
|
|
110
|
+
const reason = settled.reason && settled.reason.message ? settled.reason.message : 'unavailable';
|
|
111
|
+
const p = document.createElement('p');
|
|
112
|
+
p.className = 'help-block text-muted';
|
|
113
|
+
p.textContent = 'Could not list your doors (' + reason + '). You can still rename them by editing config.json (access_names); unnamed doors keep their detected names in the Home app.';
|
|
114
|
+
container.appendChild(p);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const list = (settled.value && settled.value.openable) || [];
|
|
119
|
+
const map = overridesFromConfig(block);
|
|
120
|
+
|
|
121
|
+
const hint = document.createElement('p');
|
|
122
|
+
hint.className = 'help-block text-muted';
|
|
123
|
+
hint.textContent = list.length
|
|
124
|
+
? 'Type a name to show it in the Home app. Leave blank to keep the detected name. Press Save below to apply.'
|
|
125
|
+
: 'No openable doors detected yet. Once they appear, you can rename them here.';
|
|
126
|
+
container.appendChild(hint);
|
|
127
|
+
|
|
128
|
+
for (const door of list) {
|
|
129
|
+
const group = document.createElement('div');
|
|
130
|
+
group.className = 'form-group';
|
|
131
|
+
|
|
132
|
+
const label = document.createElement('label');
|
|
133
|
+
const where = door.residence ? door.residence + ' / ' : '';
|
|
134
|
+
label.textContent = where + door.name + ' (id ' + door.id + ')';
|
|
135
|
+
group.appendChild(label);
|
|
136
|
+
|
|
137
|
+
const input = document.createElement('input');
|
|
138
|
+
input.type = 'text';
|
|
139
|
+
input.className = 'form-control';
|
|
140
|
+
input.placeholder = door.name;
|
|
141
|
+
input.value = map[door.id] || '';
|
|
142
|
+
input.addEventListener('input', () => {
|
|
143
|
+
map[door.id] = input.value;
|
|
144
|
+
saveOverrides(block, map);
|
|
145
|
+
});
|
|
146
|
+
group.appendChild(input);
|
|
147
|
+
container.appendChild(group);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
</script>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Custom settings UI backend for homebridge-config-ui-x.
|
|
2
|
+
// Lists the account's accesses so the settings page can show detected names for renaming.
|
|
3
|
+
// Loaded by the UI only (never by Homebridge itself); reuses the plugin's own account code.
|
|
4
|
+
import { HomebridgePluginUiServer, RequestError } from '@homebridge/plugin-ui-utils';
|
|
5
|
+
|
|
6
|
+
import { openAccount, parseSettings } from '../dist/config.js';
|
|
7
|
+
import { decodeJwtPayload } from '../dist/intratoneClient.js';
|
|
8
|
+
|
|
9
|
+
class IntratoneUiServer extends HomebridgePluginUiServer {
|
|
10
|
+
constructor() {
|
|
11
|
+
super();
|
|
12
|
+
this.onRequest('/accesses', (payload) => this.listAccesses(payload));
|
|
13
|
+
this.onRequest('/status', (payload) => this.status(payload));
|
|
14
|
+
this.ready();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Parses the posted config and opens the account against the real storage path, so the UI acts
|
|
19
|
+
* as the same device as the running plugin.
|
|
20
|
+
*
|
|
21
|
+
* @param {{ config?: unknown }} payload the current platform config block from the form
|
|
22
|
+
*/
|
|
23
|
+
account(payload) {
|
|
24
|
+
const { settings, errors } = parseSettings(payload?.config ?? {});
|
|
25
|
+
if (!settings) {
|
|
26
|
+
throw new RequestError('Fill in the phone number first.', { errors });
|
|
27
|
+
}
|
|
28
|
+
return { ...openAccount(settings, this.homebridgeStoragePath), settings };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The values the plugin negotiates to talk to the API — device id, the current session and the
|
|
33
|
+
* mobipass flags — so they can be shown read-only in the settings. Read-only: it signs in but
|
|
34
|
+
* changes nothing. No secret (app_token) is returned.
|
|
35
|
+
*
|
|
36
|
+
* @param {{ config?: unknown }} payload the current platform config block from the form
|
|
37
|
+
*/
|
|
38
|
+
async status(payload) {
|
|
39
|
+
const account = this.account(payload);
|
|
40
|
+
try {
|
|
41
|
+
const session = await account.client.refresh();
|
|
42
|
+
const claims = decodeJwtPayload(session.jwt) ?? {};
|
|
43
|
+
return {
|
|
44
|
+
deviceId: account.deviceId,
|
|
45
|
+
generatedDeviceId: account.generatedDeviceId,
|
|
46
|
+
stateFile: account.store.file,
|
|
47
|
+
appId: account.settings.appId,
|
|
48
|
+
appVersion: account.settings.appVersion,
|
|
49
|
+
identity: account.settings.identity,
|
|
50
|
+
session: {
|
|
51
|
+
validUntil: new Date(session.expiresAt).toISOString(),
|
|
52
|
+
smartphoneId: session.smartphoneId ?? String(claims.id ?? ''),
|
|
53
|
+
jwtDevice: String(claims.device ?? ''),
|
|
54
|
+
},
|
|
55
|
+
flags: session.flags,
|
|
56
|
+
};
|
|
57
|
+
} catch (error) {
|
|
58
|
+
throw new RequestError(error instanceof Error ? error.message : String(error), {});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @param {{ config?: unknown }} payload the current platform config block from the form
|
|
64
|
+
* @returns {Promise<{ openable: Array<{id:string,residence:string,name:string}>, skipped: Array<{id:string,residence:string,name:string}> }>}
|
|
65
|
+
*/
|
|
66
|
+
async listAccesses(payload) {
|
|
67
|
+
const account = this.account(payload);
|
|
68
|
+
try {
|
|
69
|
+
const { accesses } = await account.client.listAccesses();
|
|
70
|
+
const pick = (list) => list.map((access) => ({ id: access.id, residence: access.residence, name: access.name }));
|
|
71
|
+
return { openable: pick(accesses.openable), skipped: pick(accesses.skipped) };
|
|
72
|
+
} catch (error) {
|
|
73
|
+
throw new RequestError(error instanceof Error ? error.message : String(error), {});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
(() => new IntratoneUiServer())();
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-intratone",
|
|
3
3
|
"displayName": "Intratone",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"description": "Unofficial Homebridge plugin to open Intratone / Cogelec doors and gates from HomeKit and Matter (remote open, no doorbell).",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "jtoucas-DIMO",
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
"config.schema.json",
|
|
24
24
|
"README.md",
|
|
25
25
|
"CHANGELOG.md",
|
|
26
|
-
"docs"
|
|
26
|
+
"docs",
|
|
27
|
+
"homebridge-ui"
|
|
27
28
|
],
|
|
28
29
|
"engines": {
|
|
29
30
|
"homebridge": "^1.8.0 || ^2.0.0-beta.0",
|
|
@@ -58,5 +59,8 @@
|
|
|
58
59
|
"typescript": "^6.0.3",
|
|
59
60
|
"typescript-eslint": "^8.72.1",
|
|
60
61
|
"vitest": "^5.0.5"
|
|
62
|
+
},
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"@homebridge/plugin-ui-utils": "^2.3.0"
|
|
61
65
|
}
|
|
62
66
|
}
|