sesame-kit 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/LICENSE +26 -0
- package/LICENSE.biz3 +21 -0
- package/README.ja.md +225 -0
- package/README.md +222 -0
- package/bin/sesame.js +8 -0
- package/clients/js/sesame-client.mjs +208 -0
- package/clients/python/pyproject.toml +5 -0
- package/clients/python/sesame_client.py +323 -0
- package/clients/python/setup.cfg +11 -0
- package/docs/architecture.ja.md +132 -0
- package/docs/architecture.md +105 -0
- package/docs/commands.ja.md +316 -0
- package/docs/commands.md +308 -0
- package/docs/library.ja.md +152 -0
- package/docs/library.md +152 -0
- package/docs/migration.ja.md +13 -0
- package/docs/migration.md +13 -0
- package/package.json +114 -0
- package/src/access.js +375 -0
- package/src/account.js +36 -0
- package/src/auth.js +248 -0
- package/src/ble/devicemodel.js +164 -0
- package/src/ble/index.js +185 -0
- package/src/ble/protocol.js +319 -0
- package/src/ble/session.js +235 -0
- package/src/ble/transport.js +279 -0
- package/src/cli/access.js +373 -0
- package/src/cli/company.js +104 -0
- package/src/cli/iot.js +400 -0
- package/src/cli/org.js +788 -0
- package/src/cli/presetir.js +188 -0
- package/src/cli/schedule.js +83 -0
- package/src/cli/serve.js +308 -0
- package/src/cli.js +1815 -0
- package/src/client.js +957 -0
- package/src/company.js +147 -0
- package/src/config.js +575 -0
- package/src/crypto.js +162 -0
- package/src/devices.js +228 -0
- package/src/index.js +55 -0
- package/src/iot.js +513 -0
- package/src/ir.js +341 -0
- package/src/itemcodes.js +29 -0
- package/src/lock.js +194 -0
- package/src/org.js +803 -0
- package/src/paths.js +30 -0
- package/src/presetir.js +525 -0
- package/src/prompts.js +74 -0
- package/src/schedule.js +108 -0
- package/src/serve/daemon.js +251 -0
- package/src/serve/framing/grpc.js +145 -0
- package/src/serve/framing/http.js +144 -0
- package/src/serve/framing/ndjson.js +75 -0
- package/src/serve/framing/socket.js +73 -0
- package/src/serve/framing/stdio.js +28 -0
- package/src/serve/framing/token.js +36 -0
- package/src/serve/framing/ws.js +56 -0
- package/src/serve/grpc-methods.generated.json +378 -0
- package/src/serve/jsonrpc.js +164 -0
- package/src/serve/registry.js +226 -0
- package/src/serve/rpc-params.generated.json +1746 -0
- package/src/serve/sesame.proto +470 -0
- package/src/session-ui.js +181 -0
- package/src/sharekey.js +130 -0
- package/src/tokens.js +53 -0
- package/src/transport.js +634 -0
- package/src/util.js +26 -0
- package/types/access.d.ts +193 -0
- package/types/access.d.ts.map +1 -0
- package/types/account.d.ts +13 -0
- package/types/account.d.ts.map +1 -0
- package/types/auth.d.ts +80 -0
- package/types/auth.d.ts.map +1 -0
- package/types/ble/devicemodel.d.ts +212 -0
- package/types/ble/devicemodel.d.ts.map +1 -0
- package/types/ble/index.d.ts +160 -0
- package/types/ble/index.d.ts.map +1 -0
- package/types/ble/protocol.d.ts +201 -0
- package/types/ble/protocol.d.ts.map +1 -0
- package/types/ble/session.d.ts +129 -0
- package/types/ble/session.d.ts.map +1 -0
- package/types/ble/transport.d.ts +67 -0
- package/types/ble/transport.d.ts.map +1 -0
- package/types/cli/access.d.ts +6 -0
- package/types/cli/access.d.ts.map +1 -0
- package/types/cli/company.d.ts +6 -0
- package/types/cli/company.d.ts.map +1 -0
- package/types/cli/iot.d.ts +6 -0
- package/types/cli/iot.d.ts.map +1 -0
- package/types/cli/org.d.ts +6 -0
- package/types/cli/org.d.ts.map +1 -0
- package/types/cli/presetir.d.ts +6 -0
- package/types/cli/presetir.d.ts.map +1 -0
- package/types/cli/schedule.d.ts +6 -0
- package/types/cli/schedule.d.ts.map +1 -0
- package/types/cli/serve.d.ts +2 -0
- package/types/cli/serve.d.ts.map +1 -0
- package/types/cli.d.ts +2 -0
- package/types/cli.d.ts.map +1 -0
- package/types/client.d.ts +463 -0
- package/types/client.d.ts.map +1 -0
- package/types/company.d.ts +94 -0
- package/types/company.d.ts.map +1 -0
- package/types/config.d.ts +111 -0
- package/types/config.d.ts.map +1 -0
- package/types/crypto.d.ts +61 -0
- package/types/crypto.d.ts.map +1 -0
- package/types/devices.d.ts +116 -0
- package/types/devices.d.ts.map +1 -0
- package/types/index.d.ts +23 -0
- package/types/index.d.ts.map +1 -0
- package/types/iot.d.ts +312 -0
- package/types/iot.d.ts.map +1 -0
- package/types/ir.d.ts +147 -0
- package/types/ir.d.ts.map +1 -0
- package/types/itemcodes.d.ts +21 -0
- package/types/itemcodes.d.ts.map +1 -0
- package/types/lock.d.ts +89 -0
- package/types/lock.d.ts.map +1 -0
- package/types/org.d.ts +468 -0
- package/types/org.d.ts.map +1 -0
- package/types/paths.d.ts +10 -0
- package/types/paths.d.ts.map +1 -0
- package/types/presetir.d.ts +286 -0
- package/types/presetir.d.ts.map +1 -0
- package/types/prompts.d.ts +39 -0
- package/types/prompts.d.ts.map +1 -0
- package/types/schedule.d.ts +71 -0
- package/types/schedule.d.ts.map +1 -0
- package/types/serve/daemon.d.ts +133 -0
- package/types/serve/daemon.d.ts.map +1 -0
- package/types/serve/framing/grpc.d.ts +14 -0
- package/types/serve/framing/grpc.d.ts.map +1 -0
- package/types/serve/framing/http.d.ts +14 -0
- package/types/serve/framing/http.d.ts.map +1 -0
- package/types/serve/framing/ndjson.d.ts +19 -0
- package/types/serve/framing/ndjson.d.ts.map +1 -0
- package/types/serve/framing/socket.d.ts +14 -0
- package/types/serve/framing/socket.d.ts.map +1 -0
- package/types/serve/framing/stdio.d.ts +11 -0
- package/types/serve/framing/stdio.d.ts.map +1 -0
- package/types/serve/framing/token.d.ts +11 -0
- package/types/serve/framing/token.d.ts.map +1 -0
- package/types/serve/framing/ws.d.ts +13 -0
- package/types/serve/framing/ws.d.ts.map +1 -0
- package/types/serve/jsonrpc.d.ts +118 -0
- package/types/serve/jsonrpc.d.ts.map +1 -0
- package/types/serve/registry.d.ts +41 -0
- package/types/serve/registry.d.ts.map +1 -0
- package/types/session-ui.d.ts +36 -0
- package/types/session-ui.d.ts.map +1 -0
- package/types/sharekey.d.ts +35 -0
- package/types/sharekey.d.ts.map +1 -0
- package/types/tokens.d.ts +20 -0
- package/types/tokens.d.ts.map +1 -0
- package/types/transport.d.ts +138 -0
- package/types/transport.d.ts.map +1 -0
- package/types/util.d.ts +20 -0
- package/types/util.d.ts.map +1 -0
- package/vendor/biz3/README.md +37 -0
- package/vendor/biz3/constants/cmdCode.d.ts +48 -0
- package/vendor/biz3/constants/cmdCode.d.ts.map +1 -0
- package/vendor/biz3/constants/cmdCode.js +92 -0
- package/vendor/biz3/constants/messageConstants.d.ts +28 -0
- package/vendor/biz3/constants/messageConstants.d.ts.map +1 -0
- package/vendor/biz3/constants/messageConstants.js +30 -0
- package/vendor/biz3/constants/sesameDeviceModel.d.ts +75 -0
- package/vendor/biz3/constants/sesameDeviceModel.d.ts.map +1 -0
- package/vendor/biz3/constants/sesameDeviceModel.js +77 -0
- package/vendor/biz3/package.json +5 -0
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
// 自動生成 (scripts/gen-grpc-proto.mjs)。手で編集しない (npm run build:grpc-proto)。
|
|
2
|
+
// request は scalar/string配列を protobuf 型に、object/動的な葉は JSON 文字列 (proto-loader が
|
|
3
|
+
// 生 JS を Struct に変換しないため)。response は dynamic なので JsonRpc(json) で運ぶ。
|
|
4
|
+
syntax = "proto3";
|
|
5
|
+
package sesame;
|
|
6
|
+
|
|
7
|
+
service Sesame {
|
|
8
|
+
rpc ScheduleGetScheduleList (ScheduleGetScheduleListRequest) returns (JsonRpc);
|
|
9
|
+
rpc ScheduleCancelSchedule (ScheduleCancelScheduleRequest) returns (JsonRpc);
|
|
10
|
+
rpc OrgGetEmployees (OrgGetEmployeesRequest) returns (JsonRpc);
|
|
11
|
+
rpc OrgGetCurrentUserInfo (OrgGetCurrentUserInfoRequest) returns (JsonRpc);
|
|
12
|
+
rpc OrgAddEmployees (OrgAddEmployeesRequest) returns (JsonRpc);
|
|
13
|
+
rpc OrgUpdateEmployee (OrgUpdateEmployeeRequest) returns (JsonRpc);
|
|
14
|
+
rpc OrgRemoveEmployees (OrgRemoveEmployeesRequest) returns (JsonRpc);
|
|
15
|
+
rpc OrgReorderEmployees (OrgReorderEmployeesRequest) returns (JsonRpc);
|
|
16
|
+
rpc OrgQueryByCS (OrgQueryByCSRequest) returns (JsonRpc);
|
|
17
|
+
rpc OrgConfirmQueryByCS (OrgConfirmQueryByCSRequest) returns (JsonRpc);
|
|
18
|
+
rpc OrgGetEmployeeGroups (OrgGetEmployeeGroupsRequest) returns (JsonRpc);
|
|
19
|
+
rpc OrgAddEmployeeGroup (OrgAddEmployeeGroupRequest) returns (JsonRpc);
|
|
20
|
+
rpc OrgUpdateEmployeeGroup (OrgUpdateEmployeeGroupRequest) returns (JsonRpc);
|
|
21
|
+
rpc OrgRemoveEmployeeGroups (OrgRemoveEmployeeGroupsRequest) returns (JsonRpc);
|
|
22
|
+
rpc OrgGetEmployeeGroupBindDeviceGroup (OrgGetEmployeeGroupBindDeviceGroupRequest) returns (JsonRpc);
|
|
23
|
+
rpc OrgAddEmployeeInGroup (OrgAddEmployeeInGroupRequest) returns (JsonRpc);
|
|
24
|
+
rpc OrgRemoveEmployeeInGroup (OrgRemoveEmployeeInGroupRequest) returns (JsonRpc);
|
|
25
|
+
rpc OrgRemoveEmployeeGroupBindDeviceGroup (OrgRemoveEmployeeGroupBindDeviceGroupRequest) returns (JsonRpc);
|
|
26
|
+
rpc OrgGetTags (OrgGetTagsRequest) returns (JsonRpc);
|
|
27
|
+
rpc OrgPostTag (OrgPostTagRequest) returns (JsonRpc);
|
|
28
|
+
rpc OrgRemoveTag (OrgRemoveTagRequest) returns (JsonRpc);
|
|
29
|
+
rpc OrgGetDeviceGroups (OrgGetDeviceGroupsRequest) returns (JsonRpc);
|
|
30
|
+
rpc OrgAddDeviceGroup (OrgAddDeviceGroupRequest) returns (JsonRpc);
|
|
31
|
+
rpc OrgUpdateDeviceGroup (OrgUpdateDeviceGroupRequest) returns (JsonRpc);
|
|
32
|
+
rpc OrgRemoveDeviceGroups (OrgRemoveDeviceGroupsRequest) returns (JsonRpc);
|
|
33
|
+
rpc OrgAddDeviceInGroup (OrgAddDeviceInGroupRequest) returns (JsonRpc);
|
|
34
|
+
rpc OrgRemoveDeviceInGroup (OrgRemoveDeviceInGroupRequest) returns (JsonRpc);
|
|
35
|
+
rpc OrgGetDeviceGroupBindUserGroup (OrgGetDeviceGroupBindUserGroupRequest) returns (JsonRpc);
|
|
36
|
+
rpc OrgRemoveDeviceGroupBindUserGroup (OrgRemoveDeviceGroupBindUserGroupRequest) returns (JsonRpc);
|
|
37
|
+
rpc OrgShareDeviceKeysToEmployees (OrgShareDeviceKeysToEmployeesRequest) returns (JsonRpc);
|
|
38
|
+
rpc OrgShareDeviceGroupKeysToEmployeeGroup (OrgShareDeviceGroupKeysToEmployeeGroupRequest) returns (JsonRpc);
|
|
39
|
+
rpc OrgGetEmployeeDeviceKeys (OrgGetEmployeeDeviceKeysRequest) returns (JsonRpc);
|
|
40
|
+
rpc OrgRemoveEmployeeDeviceKey (OrgRemoveEmployeeDeviceKeyRequest) returns (JsonRpc);
|
|
41
|
+
rpc OrgUpdateGuestKeyTag (OrgUpdateGuestKeyTagRequest) returns (JsonRpc);
|
|
42
|
+
rpc OrgGenerateGuestQR (OrgGenerateGuestQRRequest) returns (JsonRpc);
|
|
43
|
+
rpc OrgGetDeviceEmployeeKeys (OrgGetDeviceEmployeeKeysRequest) returns (JsonRpc);
|
|
44
|
+
rpc CompanyGetCompanies (CompanyGetCompaniesRequest) returns (JsonRpc);
|
|
45
|
+
rpc CompanyUpdateCompanyName (CompanyUpdateCompanyNameRequest) returns (JsonRpc);
|
|
46
|
+
rpc CompanyAddCompany (CompanyAddCompanyRequest) returns (JsonRpc);
|
|
47
|
+
rpc CompanyGetPaymentConfig (CompanyGetPaymentConfigRequest) returns (JsonRpc);
|
|
48
|
+
rpc AccessGetCards (AccessGetCardsRequest) returns (JsonRpc);
|
|
49
|
+
rpc AccessGetPasscodes (AccessGetPasscodesRequest) returns (JsonRpc);
|
|
50
|
+
rpc AccessPostCards (AccessPostCardsRequest) returns (JsonRpc);
|
|
51
|
+
rpc AccessPostPasscodes (AccessPostPasscodesRequest) returns (JsonRpc);
|
|
52
|
+
rpc AccessDelCards (AccessDelCardsRequest) returns (JsonRpc);
|
|
53
|
+
rpc AccessDelPasscodes (AccessDelPasscodesRequest) returns (JsonRpc);
|
|
54
|
+
rpc AccessClearCards (AccessClearCardsRequest) returns (JsonRpc);
|
|
55
|
+
rpc AccessClearPasscodes (AccessClearPasscodesRequest) returns (JsonRpc);
|
|
56
|
+
rpc AccessUpdateCardName (AccessUpdateCardNameRequest) returns (JsonRpc);
|
|
57
|
+
rpc AccessUpdatePasscodeName (AccessUpdatePasscodeNameRequest) returns (JsonRpc);
|
|
58
|
+
rpc AccessUpdateCardOwner (AccessUpdateCardOwnerRequest) returns (JsonRpc);
|
|
59
|
+
rpc IotSendIotCmd (IotSendIotCmdRequest) returns (JsonRpc);
|
|
60
|
+
rpc IotSubscribeIotResponse (IotSubscribeIotResponseRequest) returns (JsonRpc);
|
|
61
|
+
rpc IotSendIotCmdAwait (IotSendIotCmdAwaitRequest) returns (JsonRpc);
|
|
62
|
+
rpc IotSetHub3LedDuty (IotSetHub3LedDutyRequest) returns (JsonRpc);
|
|
63
|
+
rpc IotHub3RelaySwitch (IotHub3RelaySwitchRequest) returns (JsonRpc);
|
|
64
|
+
rpc IotAddSesameToHub3 (IotAddSesameToHub3Request) returns (JsonRpc);
|
|
65
|
+
rpc IotRemoveSesameFromHub3 (IotRemoveSesameFromHub3Request) returns (JsonRpc);
|
|
66
|
+
rpc IotStartFirmwareUpdate (IotStartFirmwareUpdateRequest) returns (JsonRpc);
|
|
67
|
+
rpc IotClearHub3WifiSsid (IotClearHub3WifiSsidRequest) returns (JsonRpc);
|
|
68
|
+
rpc IotGetMatterPairingCode (IotGetMatterPairingCodeRequest) returns (JsonRpc);
|
|
69
|
+
rpc IotOpenMatterPairingWindow (IotOpenMatterPairingWindowRequest) returns (JsonRpc);
|
|
70
|
+
rpc PresetirSendIR (PresetirSendIRRequest) returns (JsonRpc);
|
|
71
|
+
rpc PresetirEmitAir (PresetirEmitAirRequest) returns (JsonRpc);
|
|
72
|
+
rpc PresetirEmitButton (PresetirEmitButtonRequest) returns (JsonRpc);
|
|
73
|
+
rpc Status (StatusRequest) returns (JsonRpc);
|
|
74
|
+
rpc AccountWhoami (AccountWhoamiRequest) returns (JsonRpc);
|
|
75
|
+
rpc LockLock (LockLockRequest) returns (JsonRpc);
|
|
76
|
+
rpc LockUnlock (LockUnlockRequest) returns (JsonRpc);
|
|
77
|
+
rpc LockToggle (LockToggleRequest) returns (JsonRpc);
|
|
78
|
+
rpc LockClick (LockClickRequest) returns (JsonRpc);
|
|
79
|
+
rpc LockStatus (LockStatusRequest) returns (JsonRpc);
|
|
80
|
+
rpc DevicesList (DevicesListRequest) returns (JsonRpc);
|
|
81
|
+
rpc DeviceHistory (DeviceHistoryRequest) returns (JsonRpc);
|
|
82
|
+
rpc DeviceBattery (DeviceBatteryRequest) returns (JsonRpc);
|
|
83
|
+
rpc IrSend (IrSendRequest) returns (JsonRpc);
|
|
84
|
+
rpc IrListKeys (IrListKeysRequest) returns (JsonRpc);
|
|
85
|
+
rpc Discover (DiscoverRequest) returns (JsonRpc);
|
|
86
|
+
// イベント購読 (topics を渡し event を stream で受ける)。payload は JSON 文字列。
|
|
87
|
+
rpc Subscribe (SubReq) returns (stream Event);
|
|
88
|
+
// 後方互換: 任意の JSON-RPC を文字列で運ぶ汎用経路 (型付きに無い新 op 用)。
|
|
89
|
+
rpc Invoke (JsonRpc) returns (JsonRpc);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
message ScheduleGetScheduleListRequest {
|
|
93
|
+
string subUUID = 1;
|
|
94
|
+
double timeoutMs = 2;
|
|
95
|
+
}
|
|
96
|
+
message ScheduleCancelScheduleRequest {
|
|
97
|
+
string subUUID = 1;
|
|
98
|
+
string scheduleId = 2;
|
|
99
|
+
double timeoutMs = 3;
|
|
100
|
+
}
|
|
101
|
+
message OrgGetEmployeesRequest {
|
|
102
|
+
string companyID = 1;
|
|
103
|
+
double timeoutMs = 2;
|
|
104
|
+
}
|
|
105
|
+
message OrgGetCurrentUserInfoRequest {
|
|
106
|
+
double timeoutMs = 1;
|
|
107
|
+
}
|
|
108
|
+
message OrgAddEmployeesRequest {
|
|
109
|
+
string items = 1;
|
|
110
|
+
double timeoutMs = 2;
|
|
111
|
+
}
|
|
112
|
+
message OrgUpdateEmployeeRequest {
|
|
113
|
+
string companyID = 1;
|
|
114
|
+
string data = 2;
|
|
115
|
+
double timeoutMs = 3;
|
|
116
|
+
}
|
|
117
|
+
message OrgRemoveEmployeesRequest {
|
|
118
|
+
string items = 1;
|
|
119
|
+
double timeoutMs = 2;
|
|
120
|
+
}
|
|
121
|
+
message OrgReorderEmployeesRequest {
|
|
122
|
+
string items = 1;
|
|
123
|
+
double timeoutMs = 2;
|
|
124
|
+
}
|
|
125
|
+
message OrgQueryByCSRequest {
|
|
126
|
+
string keyword = 1;
|
|
127
|
+
double timeoutMs = 2;
|
|
128
|
+
}
|
|
129
|
+
message OrgConfirmQueryByCSRequest {
|
|
130
|
+
string email = 1;
|
|
131
|
+
double timeoutMs = 2;
|
|
132
|
+
}
|
|
133
|
+
message OrgGetEmployeeGroupsRequest {
|
|
134
|
+
string companyID = 1;
|
|
135
|
+
double timeoutMs = 2;
|
|
136
|
+
}
|
|
137
|
+
message OrgAddEmployeeGroupRequest {
|
|
138
|
+
string companyID = 1;
|
|
139
|
+
string item = 2;
|
|
140
|
+
double timeoutMs = 3;
|
|
141
|
+
}
|
|
142
|
+
message OrgUpdateEmployeeGroupRequest {
|
|
143
|
+
string companyID = 1;
|
|
144
|
+
string item = 2;
|
|
145
|
+
double timeoutMs = 3;
|
|
146
|
+
}
|
|
147
|
+
message OrgRemoveEmployeeGroupsRequest {
|
|
148
|
+
string companyID = 1;
|
|
149
|
+
string gids = 2;
|
|
150
|
+
double timeoutMs = 3;
|
|
151
|
+
}
|
|
152
|
+
message OrgGetEmployeeGroupBindDeviceGroupRequest {
|
|
153
|
+
string gid = 1;
|
|
154
|
+
double timeoutMs = 2;
|
|
155
|
+
}
|
|
156
|
+
message OrgAddEmployeeInGroupRequest {
|
|
157
|
+
string companyID = 1;
|
|
158
|
+
string gid = 2;
|
|
159
|
+
string uuids = 3;
|
|
160
|
+
string items = 4;
|
|
161
|
+
double timeoutMs = 5;
|
|
162
|
+
}
|
|
163
|
+
message OrgRemoveEmployeeInGroupRequest {
|
|
164
|
+
string companyID = 1;
|
|
165
|
+
string gid = 2;
|
|
166
|
+
string uuids = 3;
|
|
167
|
+
string items = 4;
|
|
168
|
+
double timeoutMs = 5;
|
|
169
|
+
}
|
|
170
|
+
message OrgRemoveEmployeeGroupBindDeviceGroupRequest {
|
|
171
|
+
string companyID = 1;
|
|
172
|
+
string data = 2;
|
|
173
|
+
double timeoutMs = 3;
|
|
174
|
+
}
|
|
175
|
+
message OrgGetTagsRequest {
|
|
176
|
+
string companyID = 1;
|
|
177
|
+
double timeoutMs = 2;
|
|
178
|
+
}
|
|
179
|
+
message OrgPostTagRequest {
|
|
180
|
+
string companyID = 1;
|
|
181
|
+
string data = 2;
|
|
182
|
+
double timeoutMs = 3;
|
|
183
|
+
}
|
|
184
|
+
message OrgRemoveTagRequest {
|
|
185
|
+
string companyID = 1;
|
|
186
|
+
string data = 2;
|
|
187
|
+
double timeoutMs = 3;
|
|
188
|
+
}
|
|
189
|
+
message OrgGetDeviceGroupsRequest {
|
|
190
|
+
string companyID = 1;
|
|
191
|
+
double timeoutMs = 2;
|
|
192
|
+
}
|
|
193
|
+
message OrgAddDeviceGroupRequest {
|
|
194
|
+
string companyID = 1;
|
|
195
|
+
string name = 2;
|
|
196
|
+
repeated string uuids = 3;
|
|
197
|
+
double timeoutMs = 4;
|
|
198
|
+
}
|
|
199
|
+
message OrgUpdateDeviceGroupRequest {
|
|
200
|
+
string companyID = 1;
|
|
201
|
+
string item = 2;
|
|
202
|
+
double timeoutMs = 3;
|
|
203
|
+
}
|
|
204
|
+
message OrgRemoveDeviceGroupsRequest {
|
|
205
|
+
string companyID = 1;
|
|
206
|
+
string groupIds = 2;
|
|
207
|
+
double timeoutMs = 3;
|
|
208
|
+
}
|
|
209
|
+
message OrgAddDeviceInGroupRequest {
|
|
210
|
+
string companyID = 1;
|
|
211
|
+
string gid = 2;
|
|
212
|
+
string uuids = 3;
|
|
213
|
+
string items = 4;
|
|
214
|
+
double timeoutMs = 5;
|
|
215
|
+
}
|
|
216
|
+
message OrgRemoveDeviceInGroupRequest {
|
|
217
|
+
string companyID = 1;
|
|
218
|
+
string gid = 2;
|
|
219
|
+
string uuids = 3;
|
|
220
|
+
string items = 4;
|
|
221
|
+
double timeoutMs = 5;
|
|
222
|
+
}
|
|
223
|
+
message OrgGetDeviceGroupBindUserGroupRequest {
|
|
224
|
+
string gid = 1;
|
|
225
|
+
double timeoutMs = 2;
|
|
226
|
+
}
|
|
227
|
+
message OrgRemoveDeviceGroupBindUserGroupRequest {
|
|
228
|
+
string companyID = 1;
|
|
229
|
+
string data = 2;
|
|
230
|
+
double timeoutMs = 3;
|
|
231
|
+
}
|
|
232
|
+
message OrgShareDeviceKeysToEmployeesRequest {
|
|
233
|
+
string items = 1;
|
|
234
|
+
double timeoutMs = 2;
|
|
235
|
+
}
|
|
236
|
+
message OrgShareDeviceGroupKeysToEmployeeGroupRequest {
|
|
237
|
+
string companyID = 1;
|
|
238
|
+
string item = 2;
|
|
239
|
+
double timeoutMs = 3;
|
|
240
|
+
}
|
|
241
|
+
message OrgGetEmployeeDeviceKeysRequest {
|
|
242
|
+
string subUUID = 1;
|
|
243
|
+
double timeoutMs = 2;
|
|
244
|
+
}
|
|
245
|
+
message OrgRemoveEmployeeDeviceKeyRequest {
|
|
246
|
+
string data = 1;
|
|
247
|
+
double timeoutMs = 2;
|
|
248
|
+
}
|
|
249
|
+
message OrgUpdateGuestKeyTagRequest {
|
|
250
|
+
string data = 1;
|
|
251
|
+
double timeoutMs = 2;
|
|
252
|
+
}
|
|
253
|
+
message OrgGenerateGuestQRRequest {
|
|
254
|
+
string data = 1;
|
|
255
|
+
double timeoutMs = 2;
|
|
256
|
+
}
|
|
257
|
+
message OrgGetDeviceEmployeeKeysRequest {
|
|
258
|
+
string deviceUUID = 1;
|
|
259
|
+
string companyID = 2;
|
|
260
|
+
double limit = 3;
|
|
261
|
+
double timeoutMs = 4;
|
|
262
|
+
}
|
|
263
|
+
message CompanyGetCompaniesRequest {
|
|
264
|
+
double timeoutMs = 1;
|
|
265
|
+
}
|
|
266
|
+
message CompanyUpdateCompanyNameRequest {
|
|
267
|
+
string companyID = 1;
|
|
268
|
+
string name = 2;
|
|
269
|
+
double timeoutMs = 3;
|
|
270
|
+
}
|
|
271
|
+
message CompanyAddCompanyRequest {
|
|
272
|
+
string name = 1;
|
|
273
|
+
string employeeEmail = 2;
|
|
274
|
+
string subUUID = 3;
|
|
275
|
+
double timeoutMs = 4;
|
|
276
|
+
}
|
|
277
|
+
message CompanyGetPaymentConfigRequest {
|
|
278
|
+
string companyID = 1;
|
|
279
|
+
double timeoutMs = 2;
|
|
280
|
+
}
|
|
281
|
+
message AccessGetCardsRequest {
|
|
282
|
+
repeated string deviceUUIDs = 1;
|
|
283
|
+
double timeoutMs = 2;
|
|
284
|
+
}
|
|
285
|
+
message AccessGetPasscodesRequest {
|
|
286
|
+
repeated string deviceUUIDs = 1;
|
|
287
|
+
double timeoutMs = 2;
|
|
288
|
+
}
|
|
289
|
+
message AccessPostCardsRequest {
|
|
290
|
+
string deviceUUID = 1;
|
|
291
|
+
string list = 2;
|
|
292
|
+
double timeoutMs = 3;
|
|
293
|
+
}
|
|
294
|
+
message AccessPostPasscodesRequest {
|
|
295
|
+
string deviceUUID = 1;
|
|
296
|
+
string list = 2;
|
|
297
|
+
double timeoutMs = 3;
|
|
298
|
+
}
|
|
299
|
+
message AccessDelCardsRequest {
|
|
300
|
+
string items = 1;
|
|
301
|
+
}
|
|
302
|
+
message AccessDelPasscodesRequest {
|
|
303
|
+
string items = 1;
|
|
304
|
+
}
|
|
305
|
+
message AccessClearCardsRequest {
|
|
306
|
+
string deviceUUID = 1;
|
|
307
|
+
double timeoutMs = 2;
|
|
308
|
+
}
|
|
309
|
+
message AccessClearPasscodesRequest {
|
|
310
|
+
string deviceUUID = 1;
|
|
311
|
+
double timeoutMs = 2;
|
|
312
|
+
}
|
|
313
|
+
message AccessUpdateCardNameRequest {
|
|
314
|
+
string item = 1;
|
|
315
|
+
double timeoutMs = 2;
|
|
316
|
+
}
|
|
317
|
+
message AccessUpdatePasscodeNameRequest {
|
|
318
|
+
string item = 1;
|
|
319
|
+
double timeoutMs = 2;
|
|
320
|
+
}
|
|
321
|
+
message AccessUpdateCardOwnerRequest {
|
|
322
|
+
string cardID = 1;
|
|
323
|
+
string ownerSubUUID = 2;
|
|
324
|
+
double timeoutMs = 3;
|
|
325
|
+
}
|
|
326
|
+
message IotSendIotCmdRequest {
|
|
327
|
+
string topic = 1;
|
|
328
|
+
string payload = 2;
|
|
329
|
+
string op = 3;
|
|
330
|
+
}
|
|
331
|
+
message IotSubscribeIotResponseRequest {
|
|
332
|
+
string params = 1;
|
|
333
|
+
}
|
|
334
|
+
message IotSendIotCmdAwaitRequest {
|
|
335
|
+
string topic = 1;
|
|
336
|
+
string payload = 2;
|
|
337
|
+
double cmd = 3;
|
|
338
|
+
string deviceId = 4;
|
|
339
|
+
double timeoutMs = 5;
|
|
340
|
+
}
|
|
341
|
+
message IotSetHub3LedDutyRequest {
|
|
342
|
+
string deviceId = 1;
|
|
343
|
+
string secretKey = 2;
|
|
344
|
+
string hub3Id = 3;
|
|
345
|
+
double op = 4;
|
|
346
|
+
double duty = 5;
|
|
347
|
+
double timeoutMs = 6;
|
|
348
|
+
}
|
|
349
|
+
message IotHub3RelaySwitchRequest {
|
|
350
|
+
string deviceId = 1;
|
|
351
|
+
string secretKey = 2;
|
|
352
|
+
string hub3Id = 3;
|
|
353
|
+
double op = 4;
|
|
354
|
+
}
|
|
355
|
+
message IotAddSesameToHub3Request {
|
|
356
|
+
string hub3Id = 1;
|
|
357
|
+
string secretKey = 2;
|
|
358
|
+
string sesameId = 3;
|
|
359
|
+
string ssmSecKa = 4;
|
|
360
|
+
string nickName = 5;
|
|
361
|
+
string deviceModel = 6;
|
|
362
|
+
double timeoutMs = 7;
|
|
363
|
+
}
|
|
364
|
+
message IotRemoveSesameFromHub3Request {
|
|
365
|
+
string params = 1;
|
|
366
|
+
}
|
|
367
|
+
message IotStartFirmwareUpdateRequest {
|
|
368
|
+
string deviceId = 1;
|
|
369
|
+
string hub3Id = 2;
|
|
370
|
+
string secretKey = 3;
|
|
371
|
+
}
|
|
372
|
+
message IotClearHub3WifiSsidRequest {
|
|
373
|
+
string deviceId = 1;
|
|
374
|
+
string secretKey = 2;
|
|
375
|
+
string hub3Id = 3;
|
|
376
|
+
}
|
|
377
|
+
message IotGetMatterPairingCodeRequest {
|
|
378
|
+
string deviceId = 1;
|
|
379
|
+
string secretKey = 2;
|
|
380
|
+
string hub3Id = 3;
|
|
381
|
+
double timeoutMs = 4;
|
|
382
|
+
}
|
|
383
|
+
message IotOpenMatterPairingWindowRequest {
|
|
384
|
+
string deviceId = 1;
|
|
385
|
+
string secretKey = 2;
|
|
386
|
+
string hub3Id = 3;
|
|
387
|
+
double timeoutMs = 4;
|
|
388
|
+
}
|
|
389
|
+
message PresetirSendIRRequest {
|
|
390
|
+
string deviceId = 1;
|
|
391
|
+
string command = 2;
|
|
392
|
+
double irType = 3;
|
|
393
|
+
string companyID = 4;
|
|
394
|
+
string irDeviceUUID = 5;
|
|
395
|
+
string operation = 6;
|
|
396
|
+
double timeoutMs = 7;
|
|
397
|
+
}
|
|
398
|
+
message PresetirEmitAirRequest {
|
|
399
|
+
string deviceId = 1;
|
|
400
|
+
string companyID = 2;
|
|
401
|
+
double code = 3;
|
|
402
|
+
string irDeviceUUID = 4;
|
|
403
|
+
double timeoutMs = 5;
|
|
404
|
+
bool power = 6;
|
|
405
|
+
double temperature = 7;
|
|
406
|
+
double mode = 8;
|
|
407
|
+
double fanSpeed = 9;
|
|
408
|
+
double windDirection = 10;
|
|
409
|
+
bool autoSwing = 11;
|
|
410
|
+
string keyType = 12;
|
|
411
|
+
}
|
|
412
|
+
message PresetirEmitButtonRequest {
|
|
413
|
+
string deviceId = 1;
|
|
414
|
+
string companyID = 2;
|
|
415
|
+
double code = 3;
|
|
416
|
+
double irType = 4;
|
|
417
|
+
string buttonType = 5;
|
|
418
|
+
string irDeviceUUID = 6;
|
|
419
|
+
double timeoutMs = 7;
|
|
420
|
+
}
|
|
421
|
+
message StatusRequest {
|
|
422
|
+
}
|
|
423
|
+
message AccountWhoamiRequest {
|
|
424
|
+
}
|
|
425
|
+
message LockLockRequest {
|
|
426
|
+
string name = 1;
|
|
427
|
+
string deviceUUID = 2;
|
|
428
|
+
string secretKey = 3;
|
|
429
|
+
}
|
|
430
|
+
message LockUnlockRequest {
|
|
431
|
+
string name = 1;
|
|
432
|
+
string deviceUUID = 2;
|
|
433
|
+
string secretKey = 3;
|
|
434
|
+
}
|
|
435
|
+
message LockToggleRequest {
|
|
436
|
+
string name = 1;
|
|
437
|
+
string deviceUUID = 2;
|
|
438
|
+
string secretKey = 3;
|
|
439
|
+
}
|
|
440
|
+
message LockClickRequest {
|
|
441
|
+
string name = 1;
|
|
442
|
+
string deviceUUID = 2;
|
|
443
|
+
string secretKey = 3;
|
|
444
|
+
}
|
|
445
|
+
message LockStatusRequest {
|
|
446
|
+
string deviceUUID = 1;
|
|
447
|
+
}
|
|
448
|
+
message DevicesListRequest {
|
|
449
|
+
}
|
|
450
|
+
message DeviceHistoryRequest {
|
|
451
|
+
string deviceUUID = 1;
|
|
452
|
+
double pageSize = 2;
|
|
453
|
+
}
|
|
454
|
+
message DeviceBatteryRequest {
|
|
455
|
+
string deviceUUID = 1;
|
|
456
|
+
double pageSize = 2;
|
|
457
|
+
}
|
|
458
|
+
message IrSendRequest {
|
|
459
|
+
string remote = 1;
|
|
460
|
+
string key = 2;
|
|
461
|
+
}
|
|
462
|
+
message IrListKeysRequest {
|
|
463
|
+
string remote = 1;
|
|
464
|
+
}
|
|
465
|
+
message DiscoverRequest {
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
message SubReq { string token = 1; repeated string topics = 2; }
|
|
469
|
+
message Event { string topic = 1; string json = 2; }
|
|
470
|
+
message JsonRpc { string json = 1; }
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
// SESAME セッションのライブダッシュボード (Ink / React)。
|
|
3
|
+
//
|
|
4
|
+
// inquirer の 1 問 1 答だと「入力待ちでブロック → 外部イベントで再描画できない」ため、
|
|
5
|
+
// 状態が変わった瞬間に描き直す Ink (React for CLI) で実装する。BLE の mechStatus publish や
|
|
6
|
+
// バックグラウンド接続の完了を `bus` の "update" イベントで受け、React state を更新して再描画する。
|
|
7
|
+
//
|
|
8
|
+
// JSX は使わない (本リポは src を素の ESM で実行しビルド工程が無いため)。React.createElement = h。
|
|
9
|
+
|
|
10
|
+
import React from "react";
|
|
11
|
+
import { render, Box, Text, useApp, useInput } from "ink";
|
|
12
|
+
import SelectInput from "ink-select-input";
|
|
13
|
+
import TextInput from "ink-text-input";
|
|
14
|
+
|
|
15
|
+
const h = React.createElement;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* セッション UI を起動し、ユーザーが終了するまで待つ。
|
|
19
|
+
* @param {{
|
|
20
|
+
* devices: Map<string, {entry:object, ble:object|null}>,
|
|
21
|
+
* hasCloud: boolean, // クラウド経路が使えるか (タグ表示用)
|
|
22
|
+
* bus: import("node:events").EventEmitter, // "update" で再描画
|
|
23
|
+
* exec: (op:string, device:object, seconds?:number)=>Promise<string>, // 1 操作を実行し結果文字列を返す
|
|
24
|
+
* actionsFor: (device:object)=>Array<{label:string, value:string}>, // 型の能力に応じた操作 (status 含む)
|
|
25
|
+
* fmtState: (device:object)=>string, // ヘッダの状態表示
|
|
26
|
+
* }} props
|
|
27
|
+
*/
|
|
28
|
+
export async function runSessionUI(props) {
|
|
29
|
+
const { waitUntilExit } = render(h(SessionApp, props));
|
|
30
|
+
await waitUntilExit();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function SessionApp({ devices, hasCloud, bus, exec, actionsFor, fmtState, hub3RemotesFor, listKeysFor }) {
|
|
34
|
+
const { exit } = useApp();
|
|
35
|
+
const names = [...devices.keys()];
|
|
36
|
+
const single = names.length === 1;
|
|
37
|
+
|
|
38
|
+
const [, setTick] = React.useState(0);
|
|
39
|
+
// mode: devices | actions | autolock | led | ir-remote | ir-key | busy
|
|
40
|
+
const [mode, setMode] = React.useState(single ? "actions" : "devices");
|
|
41
|
+
const [selName, setSelName] = React.useState(single ? names[0] : null);
|
|
42
|
+
const [msg, setMsg] = React.useState("");
|
|
43
|
+
const [numVal, setNumVal] = React.useState(""); // autolock 秒数 / LED duty 入力
|
|
44
|
+
const [selRemote, setSelRemote] = React.useState(null); // IR: 選択中リモコン
|
|
45
|
+
const [irKeys, setIrKeys] = React.useState(null); // IR: 取得したキー一覧 (null=未取得)
|
|
46
|
+
|
|
47
|
+
// BLE onStatus / 背景接続完了 → 再描画。
|
|
48
|
+
React.useEffect(() => {
|
|
49
|
+
const on = () => setTick((t) => (t + 1) % 1_000_000);
|
|
50
|
+
bus.on("update", on);
|
|
51
|
+
return () => bus.off("update", on);
|
|
52
|
+
}, [bus]);
|
|
53
|
+
|
|
54
|
+
const backToActions = () => { setMode("actions"); };
|
|
55
|
+
|
|
56
|
+
// q / Esc。Esc は深い階層では1つ戻る、devices(or single の actions)では終了。
|
|
57
|
+
useInput((input, key) => {
|
|
58
|
+
if (mode === "busy") return;
|
|
59
|
+
if (input === "q") { exit(); return; }
|
|
60
|
+
if (key.escape) {
|
|
61
|
+
if (mode === "actions") { if (single) exit(); else { setMode("devices"); setMsg(""); } }
|
|
62
|
+
else if (mode === "ir-key") { setMode("ir-remote"); }
|
|
63
|
+
else if (mode === "devices") exit();
|
|
64
|
+
else { backToActions(); } // autolock / led / ir-remote
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const runExec = (op, d, extra) => {
|
|
69
|
+
setMode("busy");
|
|
70
|
+
exec(op, d, extra)
|
|
71
|
+
.then((m) => setMsg(m))
|
|
72
|
+
.catch((e) => setMsg(`error: ${e?.message || e}`))
|
|
73
|
+
.finally(() => setMode(single ? "actions" : "devices"));
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// ヘッダ: 全デバイスの現在状態 (ライブ)。
|
|
77
|
+
const header = h(
|
|
78
|
+
Box,
|
|
79
|
+
{ flexDirection: "column" },
|
|
80
|
+
h(Text, { dimColor: true }, "─── SESAME セッション ───"),
|
|
81
|
+
...names.map((n) => {
|
|
82
|
+
const d = devices.get(n);
|
|
83
|
+
const tag = d.kind === "hub3" ? "hub3" : (d.ble ? "BLE" : (hasCloud ? "cloud" : "—"));
|
|
84
|
+
const label = d.kind === "hub3" ? "hub3" : (d.entry.model || "?");
|
|
85
|
+
return h(Text, { key: n, color: d.ble ? "green" : undefined },
|
|
86
|
+
` ${n} [${label}·${tag}]: ${fmtState(d)}`);
|
|
87
|
+
}),
|
|
88
|
+
msg ? h(Text, { color: "yellow" }, msg) : null,
|
|
89
|
+
);
|
|
90
|
+
const box = (...kids) => h(Box, { flexDirection: "column" }, header, ...kids);
|
|
91
|
+
|
|
92
|
+
if (mode === "busy") return box(h(Text, null, "実行中..."));
|
|
93
|
+
|
|
94
|
+
// 数値入力 (autolock 秒数 / LED duty)。
|
|
95
|
+
if (mode === "autolock" || mode === "led") {
|
|
96
|
+
const d = devices.get(selName);
|
|
97
|
+
const isLed = mode === "led";
|
|
98
|
+
const prompt = isLed ? `${selName} LED 調光 (0-255): ` : `${selName} オートロック秒数 (0=無効): `;
|
|
99
|
+
const max = isLed ? 255 : 65535;
|
|
100
|
+
return box(h(Box, null,
|
|
101
|
+
h(Text, null, prompt),
|
|
102
|
+
h(TextInput, {
|
|
103
|
+
value: numVal,
|
|
104
|
+
onChange: setNumVal,
|
|
105
|
+
onSubmit: (v) => {
|
|
106
|
+
const n = Number(v);
|
|
107
|
+
if (!Number.isInteger(n) || n < 0 || n > max) { setMsg(`⚠ 0..${max} の整数で指定してください。`); backToActions(); return; }
|
|
108
|
+
runExec(isLed ? "led" : "autolock", d, n);
|
|
109
|
+
},
|
|
110
|
+
}),
|
|
111
|
+
));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// IR: リモコン選択。
|
|
115
|
+
if (mode === "ir-remote") {
|
|
116
|
+
const d = devices.get(selName);
|
|
117
|
+
const remotes = (hub3RemotesFor ? hub3RemotesFor(d) : []);
|
|
118
|
+
if (remotes.length === 0) {
|
|
119
|
+
return box(h(Text, null, `${selName}: 登録リモコンがありません ( sesame remote add で登録 )。Esc で戻る`));
|
|
120
|
+
}
|
|
121
|
+
const items = [...remotes, { label: "← 戻る", value: "__back" }];
|
|
122
|
+
return box(h(Text, null, `${selName} の IR: リモコン選択`),
|
|
123
|
+
h(SelectInput, {
|
|
124
|
+
items,
|
|
125
|
+
onSelect: (it) => {
|
|
126
|
+
if (it.value === "__back") { backToActions(); return; }
|
|
127
|
+
setSelRemote(it.value); setIrKeys(null); setMode("ir-key");
|
|
128
|
+
Promise.resolve(listKeysFor ? listKeysFor(it.value) : []).then(setIrKeys).catch(() => setIrKeys([]));
|
|
129
|
+
},
|
|
130
|
+
}),
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// IR: キー選択 (非同期取得中はローディング表示)。
|
|
135
|
+
if (mode === "ir-key") {
|
|
136
|
+
const d = devices.get(selName);
|
|
137
|
+
if (irKeys === null) return box(h(Text, null, `${selRemote}: キー取得中...`));
|
|
138
|
+
if (irKeys.length === 0) return box(h(Text, null, `${selRemote}: キーがありません ( sesame remote sync-keys )。Esc で戻る`));
|
|
139
|
+
const items = [...irKeys, { label: "← 戻る", value: "__back" }];
|
|
140
|
+
return box(h(Text, null, `${selRemote} のキー選択 (送信)`),
|
|
141
|
+
h(SelectInput, {
|
|
142
|
+
items,
|
|
143
|
+
onSelect: (it) => {
|
|
144
|
+
if (it.value === "__back") { setMode("ir-remote"); return; }
|
|
145
|
+
runExec("ir", d, { remote: selRemote, key: it.value });
|
|
146
|
+
},
|
|
147
|
+
}),
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (mode === "actions") {
|
|
152
|
+
const d = devices.get(selName);
|
|
153
|
+
const items = [...actionsFor(d)];
|
|
154
|
+
items.push({ label: single ? "終了" : "← 戻る", value: "__back" });
|
|
155
|
+
return box(h(Text, null, `${selName} の操作:`),
|
|
156
|
+
h(SelectInput, {
|
|
157
|
+
items,
|
|
158
|
+
onSelect: (it) => {
|
|
159
|
+
if (it.value === "__back") { if (single) exit(); else { setMode("devices"); setMsg(""); } return; }
|
|
160
|
+
if (it.value === "autolock") { setNumVal(""); setMode("autolock"); return; }
|
|
161
|
+
if (it.value === "led") { setNumVal(""); setMode("led"); return; }
|
|
162
|
+
if (it.value === "ir") { setSelRemote(null); setIrKeys(null); setMode("ir-remote"); return; }
|
|
163
|
+
runExec(it.value, d);
|
|
164
|
+
},
|
|
165
|
+
}),
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// mode === "devices"
|
|
170
|
+
const items = names.map((n) => ({ label: n, value: n }));
|
|
171
|
+
items.push({ label: "終了", value: "__quit" });
|
|
172
|
+
return box(h(Text, null, "操作するデバイス:"),
|
|
173
|
+
h(SelectInput, {
|
|
174
|
+
items,
|
|
175
|
+
onSelect: (it) => {
|
|
176
|
+
if (it.value === "__quit") { exit(); return; }
|
|
177
|
+
setSelName(it.value); setMsg(""); setMode("actions");
|
|
178
|
+
},
|
|
179
|
+
}),
|
|
180
|
+
);
|
|
181
|
+
}
|