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.
Files changed (170) hide show
  1. package/LICENSE +26 -0
  2. package/LICENSE.biz3 +21 -0
  3. package/README.ja.md +225 -0
  4. package/README.md +222 -0
  5. package/bin/sesame.js +8 -0
  6. package/clients/js/sesame-client.mjs +208 -0
  7. package/clients/python/pyproject.toml +5 -0
  8. package/clients/python/sesame_client.py +323 -0
  9. package/clients/python/setup.cfg +11 -0
  10. package/docs/architecture.ja.md +132 -0
  11. package/docs/architecture.md +105 -0
  12. package/docs/commands.ja.md +316 -0
  13. package/docs/commands.md +308 -0
  14. package/docs/library.ja.md +152 -0
  15. package/docs/library.md +152 -0
  16. package/docs/migration.ja.md +13 -0
  17. package/docs/migration.md +13 -0
  18. package/package.json +114 -0
  19. package/src/access.js +375 -0
  20. package/src/account.js +36 -0
  21. package/src/auth.js +248 -0
  22. package/src/ble/devicemodel.js +164 -0
  23. package/src/ble/index.js +185 -0
  24. package/src/ble/protocol.js +319 -0
  25. package/src/ble/session.js +235 -0
  26. package/src/ble/transport.js +279 -0
  27. package/src/cli/access.js +373 -0
  28. package/src/cli/company.js +104 -0
  29. package/src/cli/iot.js +400 -0
  30. package/src/cli/org.js +788 -0
  31. package/src/cli/presetir.js +188 -0
  32. package/src/cli/schedule.js +83 -0
  33. package/src/cli/serve.js +308 -0
  34. package/src/cli.js +1815 -0
  35. package/src/client.js +957 -0
  36. package/src/company.js +147 -0
  37. package/src/config.js +575 -0
  38. package/src/crypto.js +162 -0
  39. package/src/devices.js +228 -0
  40. package/src/index.js +55 -0
  41. package/src/iot.js +513 -0
  42. package/src/ir.js +341 -0
  43. package/src/itemcodes.js +29 -0
  44. package/src/lock.js +194 -0
  45. package/src/org.js +803 -0
  46. package/src/paths.js +30 -0
  47. package/src/presetir.js +525 -0
  48. package/src/prompts.js +74 -0
  49. package/src/schedule.js +108 -0
  50. package/src/serve/daemon.js +251 -0
  51. package/src/serve/framing/grpc.js +145 -0
  52. package/src/serve/framing/http.js +144 -0
  53. package/src/serve/framing/ndjson.js +75 -0
  54. package/src/serve/framing/socket.js +73 -0
  55. package/src/serve/framing/stdio.js +28 -0
  56. package/src/serve/framing/token.js +36 -0
  57. package/src/serve/framing/ws.js +56 -0
  58. package/src/serve/grpc-methods.generated.json +378 -0
  59. package/src/serve/jsonrpc.js +164 -0
  60. package/src/serve/registry.js +226 -0
  61. package/src/serve/rpc-params.generated.json +1746 -0
  62. package/src/serve/sesame.proto +470 -0
  63. package/src/session-ui.js +181 -0
  64. package/src/sharekey.js +130 -0
  65. package/src/tokens.js +53 -0
  66. package/src/transport.js +634 -0
  67. package/src/util.js +26 -0
  68. package/types/access.d.ts +193 -0
  69. package/types/access.d.ts.map +1 -0
  70. package/types/account.d.ts +13 -0
  71. package/types/account.d.ts.map +1 -0
  72. package/types/auth.d.ts +80 -0
  73. package/types/auth.d.ts.map +1 -0
  74. package/types/ble/devicemodel.d.ts +212 -0
  75. package/types/ble/devicemodel.d.ts.map +1 -0
  76. package/types/ble/index.d.ts +160 -0
  77. package/types/ble/index.d.ts.map +1 -0
  78. package/types/ble/protocol.d.ts +201 -0
  79. package/types/ble/protocol.d.ts.map +1 -0
  80. package/types/ble/session.d.ts +129 -0
  81. package/types/ble/session.d.ts.map +1 -0
  82. package/types/ble/transport.d.ts +67 -0
  83. package/types/ble/transport.d.ts.map +1 -0
  84. package/types/cli/access.d.ts +6 -0
  85. package/types/cli/access.d.ts.map +1 -0
  86. package/types/cli/company.d.ts +6 -0
  87. package/types/cli/company.d.ts.map +1 -0
  88. package/types/cli/iot.d.ts +6 -0
  89. package/types/cli/iot.d.ts.map +1 -0
  90. package/types/cli/org.d.ts +6 -0
  91. package/types/cli/org.d.ts.map +1 -0
  92. package/types/cli/presetir.d.ts +6 -0
  93. package/types/cli/presetir.d.ts.map +1 -0
  94. package/types/cli/schedule.d.ts +6 -0
  95. package/types/cli/schedule.d.ts.map +1 -0
  96. package/types/cli/serve.d.ts +2 -0
  97. package/types/cli/serve.d.ts.map +1 -0
  98. package/types/cli.d.ts +2 -0
  99. package/types/cli.d.ts.map +1 -0
  100. package/types/client.d.ts +463 -0
  101. package/types/client.d.ts.map +1 -0
  102. package/types/company.d.ts +94 -0
  103. package/types/company.d.ts.map +1 -0
  104. package/types/config.d.ts +111 -0
  105. package/types/config.d.ts.map +1 -0
  106. package/types/crypto.d.ts +61 -0
  107. package/types/crypto.d.ts.map +1 -0
  108. package/types/devices.d.ts +116 -0
  109. package/types/devices.d.ts.map +1 -0
  110. package/types/index.d.ts +23 -0
  111. package/types/index.d.ts.map +1 -0
  112. package/types/iot.d.ts +312 -0
  113. package/types/iot.d.ts.map +1 -0
  114. package/types/ir.d.ts +147 -0
  115. package/types/ir.d.ts.map +1 -0
  116. package/types/itemcodes.d.ts +21 -0
  117. package/types/itemcodes.d.ts.map +1 -0
  118. package/types/lock.d.ts +89 -0
  119. package/types/lock.d.ts.map +1 -0
  120. package/types/org.d.ts +468 -0
  121. package/types/org.d.ts.map +1 -0
  122. package/types/paths.d.ts +10 -0
  123. package/types/paths.d.ts.map +1 -0
  124. package/types/presetir.d.ts +286 -0
  125. package/types/presetir.d.ts.map +1 -0
  126. package/types/prompts.d.ts +39 -0
  127. package/types/prompts.d.ts.map +1 -0
  128. package/types/schedule.d.ts +71 -0
  129. package/types/schedule.d.ts.map +1 -0
  130. package/types/serve/daemon.d.ts +133 -0
  131. package/types/serve/daemon.d.ts.map +1 -0
  132. package/types/serve/framing/grpc.d.ts +14 -0
  133. package/types/serve/framing/grpc.d.ts.map +1 -0
  134. package/types/serve/framing/http.d.ts +14 -0
  135. package/types/serve/framing/http.d.ts.map +1 -0
  136. package/types/serve/framing/ndjson.d.ts +19 -0
  137. package/types/serve/framing/ndjson.d.ts.map +1 -0
  138. package/types/serve/framing/socket.d.ts +14 -0
  139. package/types/serve/framing/socket.d.ts.map +1 -0
  140. package/types/serve/framing/stdio.d.ts +11 -0
  141. package/types/serve/framing/stdio.d.ts.map +1 -0
  142. package/types/serve/framing/token.d.ts +11 -0
  143. package/types/serve/framing/token.d.ts.map +1 -0
  144. package/types/serve/framing/ws.d.ts +13 -0
  145. package/types/serve/framing/ws.d.ts.map +1 -0
  146. package/types/serve/jsonrpc.d.ts +118 -0
  147. package/types/serve/jsonrpc.d.ts.map +1 -0
  148. package/types/serve/registry.d.ts +41 -0
  149. package/types/serve/registry.d.ts.map +1 -0
  150. package/types/session-ui.d.ts +36 -0
  151. package/types/session-ui.d.ts.map +1 -0
  152. package/types/sharekey.d.ts +35 -0
  153. package/types/sharekey.d.ts.map +1 -0
  154. package/types/tokens.d.ts +20 -0
  155. package/types/tokens.d.ts.map +1 -0
  156. package/types/transport.d.ts +138 -0
  157. package/types/transport.d.ts.map +1 -0
  158. package/types/util.d.ts +20 -0
  159. package/types/util.d.ts.map +1 -0
  160. package/vendor/biz3/README.md +37 -0
  161. package/vendor/biz3/constants/cmdCode.d.ts +48 -0
  162. package/vendor/biz3/constants/cmdCode.d.ts.map +1 -0
  163. package/vendor/biz3/constants/cmdCode.js +92 -0
  164. package/vendor/biz3/constants/messageConstants.d.ts +28 -0
  165. package/vendor/biz3/constants/messageConstants.d.ts.map +1 -0
  166. package/vendor/biz3/constants/messageConstants.js +30 -0
  167. package/vendor/biz3/constants/sesameDeviceModel.d.ts +75 -0
  168. package/vendor/biz3/constants/sesameDeviceModel.d.ts.map +1 -0
  169. package/vendor/biz3/constants/sesameDeviceModel.js +77 -0
  170. package/vendor/biz3/package.json +5 -0
@@ -0,0 +1,193 @@
1
+ /**
2
+ * 対象デバイスの NFC カード一覧を取得する。
3
+ * 応答は op='pubCardLinkedIDs' の async push で deviceUUID/page ごとに届くため、
4
+ * 内部で集約してから完了通知 or timeout で確定する (useManageAuthData.js:50-191)。
5
+ *
6
+ * @param {import("./transport.js").Hub3WsClient} client
7
+ * @param {{deviceUUIDs:string[], timeoutMs?:number}} params
8
+ * @returns {Promise<{byDevice: Record<string, object[]>, items: object[]}>}
9
+ * items の各要素: { cardID, nameUUID, name, cardType, subUUID, ..., uuids:string[] }
10
+ */
11
+ export function getCards(client: import("./transport.js").Hub3WsClient, { deviceUUIDs, timeoutMs }: {
12
+ deviceUUIDs: string[];
13
+ timeoutMs?: number;
14
+ }): Promise<{
15
+ byDevice: Record<string, object[]>;
16
+ items: object[];
17
+ }>;
18
+ /**
19
+ * 対象デバイスの暗証番号 (passcode) 一覧を取得する。getCards と同型。
20
+ * 応答データ本体は op='pubPasscodeLinkedIDs' で届く (useManageAuthData.js:189-191)。
21
+ *
22
+ * @param {import("./transport.js").Hub3WsClient} client
23
+ * @param {{deviceUUIDs:string[], timeoutMs?:number}} params
24
+ * @returns {Promise<{byDevice: Record<string, object[]>, items: object[]}>}
25
+ * items の各要素: { passwordID, keyBoardPassCode, keyBoardPassCodeNameUUID, name, nameUUID, subUUID, ..., uuids:string[] }
26
+ */
27
+ export function getPasscodes(client: import("./transport.js").Hub3WsClient, { deviceUUIDs, timeoutMs }: {
28
+ deviceUUIDs: string[];
29
+ timeoutMs?: number;
30
+ }): Promise<{
31
+ byDevice: Record<string, object[]>;
32
+ items: object[];
33
+ }>;
34
+ /**
35
+ * カードをサーバ DB に登録する (postCards)。
36
+ *
37
+ * ⚠️ getCards/clearCards と異なり obj でラップせず、deviceUUID と list を
38
+ * トップレベルに置く非対称構造 (useManageAuthData.js:379-394)。混同しないこと。
39
+ * ⚠️ これは「DB への登録」のみ。実ファームウェア書き込みは別途 BLE(iotCmd) で行う 2 段構造。
40
+ * list.length < 1 なら何もしない (biz3:381)。
41
+ *
42
+ * @param {import("./transport.js").Hub3WsClient} client
43
+ * @param {{deviceUUID:string, list:object[], timeoutMs?:number}} params
44
+ * list 要素: { cardID, nameUUID, name, cardType, memberID? } 等 (cards/index.js:268-286)
45
+ * @returns {Promise<object|null>} 応答メッセージ。list 空のときは null。
46
+ */
47
+ export function postCards(client: import("./transport.js").Hub3WsClient, { deviceUUID, list, timeoutMs }: {
48
+ deviceUUID: string;
49
+ list: object[];
50
+ timeoutMs?: number;
51
+ }): Promise<object | null>;
52
+ /**
53
+ * パスコードをサーバ DB に登録する (postPasscodes)。postCards と同型 (useManageAuthData.js:396-411)。
54
+ * obj ラップ無し、deviceUUID と list をトップレベルに置く。list.length < 1 なら何もしない。
55
+ *
56
+ * @param {import("./transport.js").Hub3WsClient} client
57
+ * @param {{deviceUUID:string, list:object[], timeoutMs?:number}} params
58
+ * list 要素の正確なフィールドは biz3 のこのファイル内では未確認 (UI 由来)。getPasscodes 応答 item
59
+ * (passwordID 等) と対応すると推測される。**未確認: 実機検証要**。
60
+ * @returns {Promise<object|null>}
61
+ */
62
+ export function postPasscodes(client: import("./transport.js").Hub3WsClient, { deviceUUID, list, timeoutMs }: {
63
+ deviceUUID: string;
64
+ list: object[];
65
+ timeoutMs?: number;
66
+ }): Promise<object | null>;
67
+ /**
68
+ * カードをサーバ DB から削除する (delCards)。
69
+ *
70
+ * ⚠️ obj/deviceUUID ラップ無し、items 配列をトップレベルに置く (useManageAuthData.js:355-365)。
71
+ * items 要素は { deviceID, cardID } (deviceUUID ではなく deviceID)。
72
+ * ⚠️ これは「BLE 削除 ack 後の DB 後始末」。実削除は BLE iotCmd 経由で行う 2 段構造。
73
+ * !items.length なら何もしない (biz3:356)。
74
+ * ⚠️ biz3 では delCards に応答ハンドラもコールバック登録も無い (useManageAuthData.js:265-267)。
75
+ * サーバは応答 op を返さないため、request で待つと必ず timeout する。biz3 と同じく
76
+ * **fire-and-forget (send)** にする。!items.length なら何もしない。
77
+ *
78
+ * @param {import("./transport.js").Hub3WsClient} client
79
+ * @param {{items:Array<{deviceID:string, cardID:string}>}} params
80
+ * @returns {boolean} 送信したら true、items 空で何もしなければ false
81
+ */
82
+ export function delCards(client: import("./transport.js").Hub3WsClient, { items }: {
83
+ items: Array<{
84
+ deviceID: string;
85
+ cardID: string;
86
+ }>;
87
+ }): boolean;
88
+ /**
89
+ * パスコードをサーバ DB から削除する (delPasscodes)。delCards と同型 (useManageAuthData.js:367-377)。
90
+ * items 要素は { deviceID, passwordID }。!items.length なら何もしない。
91
+ *
92
+ * ⚠️ biz3 では delPasscodes の応答ハンドラに専用 case が無く default に落ちる (272-273)。
93
+ * = 専用応答を期待していない。delCards と同様 **fire-and-forget (send)** にする
94
+ * (request で待つと応答 op が来ず timeout する)。!items.length なら何もしない。
95
+ *
96
+ * @param {import("./transport.js").Hub3WsClient} client
97
+ * @param {{items:Array<{deviceID:string, passwordID:string}>}} params
98
+ * @returns {boolean} 送信したら true、items 空で何もしなければ false
99
+ */
100
+ export function delPasscodes(client: import("./transport.js").Hub3WsClient, { items }: {
101
+ items: Array<{
102
+ deviceID: string;
103
+ passwordID: string;
104
+ }>;
105
+ }): boolean;
106
+ /**
107
+ * 指定デバイスのカードを全削除する (clearCards)。
108
+ *
109
+ * ⚠️ obj.devices は **単一 deviceUUID 文字列** (getCards のようなカンマ連結ではない:
110
+ * useManageAuthData.js:295-311)。!deviceUUID なら何もしない。
111
+ *
112
+ * @param {import("./transport.js").Hub3WsClient} client
113
+ * @param {{deviceUUID:string, timeoutMs?:number}} params
114
+ * @returns {Promise<object|null>}
115
+ */
116
+ export function clearCards(client: import("./transport.js").Hub3WsClient, { deviceUUID, timeoutMs }: {
117
+ deviceUUID: string;
118
+ timeoutMs?: number;
119
+ }): Promise<object | null>;
120
+ /**
121
+ * 指定デバイスのパスコードを全削除する (clearPasscodes)。clearCards と同型。
122
+ * obj.devices は単一 deviceUUID 文字列 (useManageAuthData.js:313-329)。
123
+ * 注: biz3 の関数名は clearPasswords だが op は 'clearPasscodes'。
124
+ *
125
+ * @param {import("./transport.js").Hub3WsClient} client
126
+ * @param {{deviceUUID:string, timeoutMs?:number}} params
127
+ * @returns {Promise<object|null>}
128
+ */
129
+ export function clearPasscodes(client: import("./transport.js").Hub3WsClient, { deviceUUID, timeoutMs }: {
130
+ deviceUUID: string;
131
+ timeoutMs?: number;
132
+ }): Promise<object | null>;
133
+ /**
134
+ * カード名 (と nameUUID) を更新する (updateCardName)。
135
+ *
136
+ * biz3 handlePutCardName (useManageAuthData.js:331-344) は { action, obj:{...item}, op } を送る。
137
+ * item には { cardID, name, cardNameUUID, timestamp, cardType, stpDeviceUUID } を入れる
138
+ * (carddetails.js:79-87,177-184)。応答は reqContext に送ったフィールドが echo back される
139
+ * (useManageAuthData.js:192-234)。
140
+ *
141
+ * ⚠️ biz3 の updateItemName (438-471) は **cardNameUUID が UUIDv4 形式でない場合**、
142
+ * WS を直接投げず先に BLE (SSM_OS3_CARD_CHANGE=107) で nameUUID を v4 化する分岐がある。
143
+ * その BLE payload 構築は別モジュール (iotCmd) の責務。
144
+ * 本関数は **WS の updateCardName 送信のみ** を行う。CLI で BLE 前段を回避するには、
145
+ * 呼び出し側が cardNameUUID に v4 UUID を渡すこと (crypto.generateUUID() で生成可)。
146
+ *
147
+ * @param {import("./transport.js").Hub3WsClient} client
148
+ * @param {{item:object, timeoutMs?:number}} params
149
+ * item: { cardID, name, cardNameUUID, timestamp?, cardType?, stpDeviceUUID }
150
+ * @returns {Promise<object>} 応答メッセージ (reqContext 含む)
151
+ */
152
+ export function updateCardName(client: import("./transport.js").Hub3WsClient, { item, timeoutMs }: {
153
+ item: object;
154
+ timeoutMs?: number;
155
+ }): Promise<object>;
156
+ /**
157
+ * パスコード名 (と nameUUID) を更新する (updatePasscodeName)。updateCardName と同型。
158
+ * item には { stpDeviceUUID, keyBoardPassCode, keyBoardPassCodeNameUUID, name } を入れる
159
+ * (useManageAuthData.js:201-210,331-344)。
160
+ *
161
+ * ⚠️ keyBoardPassCodeNameUUID が UUIDv4 形式でない場合、biz3 は先に BLE
162
+ * (SSM_OS3_PASSCODE_CHANGE=123) で v4 化する分岐がある (別モジュール責務)。
163
+ * 本関数は WS 送信のみ。v4 UUID を渡せば BLE 前段を回避できる。
164
+ *
165
+ * @param {import("./transport.js").Hub3WsClient} client
166
+ * @param {{item:object, timeoutMs?:number}} params
167
+ * item: { stpDeviceUUID, keyBoardPassCode, keyBoardPassCodeNameUUID, name }
168
+ * @returns {Promise<object>}
169
+ */
170
+ export function updatePasscodeName(client: import("./transport.js").Hub3WsClient, { item, timeoutMs }: {
171
+ item: object;
172
+ timeoutMs?: number;
173
+ }): Promise<object>;
174
+ /**
175
+ * カードの所有者 (メンバー) を割り当てる (updateCardOwner)。これは WS のみで完結 (BLE 不要)。
176
+ *
177
+ * biz3 (useManageAuthData.js:346-353) は 'ownerSubUUID' in item の時だけ送る。
178
+ * ownerSubUUID は割り当てるメンバーの subUUID。空文字 '' でも送信 = 未割当解除。
179
+ * frame は { action, obj:{ cardID, ownerSubUUID }, op:'updateCardOwner' }。
180
+ * 応答は reqContext:{ cardID, ownerSubUUID } を echo back (235-259)。
181
+ *
182
+ * @param {import("./transport.js").Hub3WsClient} client
183
+ * @param {{cardID:string, ownerSubUUID:string, timeoutMs?:number}} params
184
+ * ownerSubUUID は省略 (undefined) すると送信しない (null 相当)。'' は送信して未割当解除。
185
+ * @returns {Promise<object|null>} ownerSubUUID 未指定なら null。
186
+ */
187
+ export function updateCardOwner(client: import("./transport.js").Hub3WsClient, { cardID, ownerSubUUID, timeoutMs }: {
188
+ cardID: string;
189
+ ownerSubUUID: string;
190
+ timeoutMs?: number;
191
+ }): Promise<object | null>;
192
+ export const NAMESPACE_OPS: string[];
193
+ //# sourceMappingURL=access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../src/access.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * ログインユーザの customerInfo / quotas を取得する。
3
+ * @param {import("./transport.js").Hub3WsClient} client
4
+ * @param {{email:string}} params login に使った email (tokenStore の username)
5
+ * @returns {Promise<{customerInfo: object|null, quotas: object|null}>}
6
+ */
7
+ export function getLoginUser(client: import("./transport.js").Hub3WsClient, { email }: {
8
+ email: string;
9
+ }): Promise<{
10
+ customerInfo: object | null;
11
+ quotas: object | null;
12
+ }>;
13
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.js"],"names":[],"mappings":"AAmBA;;;;;GAKG;AACH,qCAJW,OAAO,gBAAgB,EAAE,YAAY,aACrC;IAAC,KAAK,EAAC,MAAM,CAAA;CAAC,GACZ,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAC,IAAI,CAAA;CAAC,CAAC,CAYrE"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * idToken の `sub` claim (= Cognito user UUID) を返す。
3
+ * biz3 が `gStripe.customerInfo.subUUID` として使っている値と同じで、
4
+ * `biz3TriggerLocker` の `history` フィールドに乗せる必要がある。
5
+ */
6
+ export function jwtSub(token: any): any;
7
+ /**
8
+ * 失効していない idToken を返す。必要なら refresh する。
9
+ * 失効まで `marginSec` 以下なら早期 refresh する (デフォルト 60秒)。
10
+ *
11
+ * @param {{load:Function, save:Function}} store
12
+ */
13
+ export function getValidIdToken(store: {
14
+ load: Function;
15
+ save: Function;
16
+ }, { marginSec }?: {
17
+ marginSec?: number;
18
+ }): Promise<any>;
19
+ /**
20
+ * Step 1: CUSTOM_AUTH を開始。Cognito が email に確認コードを送る。
21
+ * 新規ユーザーの場合は SignUp してから retry。
22
+ *
23
+ * @param {{savePending:Function}} store
24
+ */
25
+ export function loginInitiate(store: {
26
+ savePending: Function;
27
+ }, username: any, { clientId }?: {
28
+ clientId?: string;
29
+ }): Promise<{
30
+ challenge: "CUSTOM_CHALLENGE";
31
+ params: Record<string, string>;
32
+ }>;
33
+ /**
34
+ * Step 2: email で受け取ったコードで CUSTOM_CHALLENGE を回答。
35
+ * 成功するとトークンを保存し、pending 状態を消す。
36
+ *
37
+ * @param {{loadPending:Function, save:Function, clearPending:Function}} store
38
+ */
39
+ export function loginVerify(store: {
40
+ loadPending: Function;
41
+ save: Function;
42
+ clearPending: Function;
43
+ }, code: any): Promise<{
44
+ clientId: any;
45
+ idToken: string;
46
+ refreshToken: string;
47
+ accessToken: string;
48
+ deviceKey: string;
49
+ deviceGroupKey: string;
50
+ username: any;
51
+ lastRefresh: string;
52
+ }>;
53
+ /**
54
+ * 既存の localStorage ダンプから bootstrap (互換用)。
55
+ *
56
+ * @param {{save:Function}} store
57
+ */
58
+ export function bootstrap(store: {
59
+ save: Function;
60
+ }, values: any): {
61
+ clientId: any;
62
+ idToken: any;
63
+ refreshToken: any;
64
+ accessToken: any;
65
+ deviceKey: any;
66
+ username: any;
67
+ lastRefresh: string;
68
+ };
69
+ export const CONSUMER_CLIENT_ID: "6ialca0p8u0lsgvbmvsljfm305";
70
+ export const BIZ_CLIENT_ID: "21u50hboia4s5q0sbk6pbdfmss";
71
+ export namespace CONFIG_META {
72
+ export { COGNITO_REGION as region };
73
+ export { USER_POOL_ID as userPoolId };
74
+ export { CONSUMER_CLIENT_ID as consumerClientId };
75
+ export { BIZ_CLIENT_ID as bizClientId };
76
+ }
77
+ declare const COGNITO_REGION: "ap-northeast-1";
78
+ declare const USER_POOL_ID: "ap-northeast-1_bY2byhlCa";
79
+ export {};
80
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.js"],"names":[],"mappings":"AAiEA;;;;GAIG;AACH,wCAQC;AAED;;;;;GAKG;AACH,uCAFW;IAAC,IAAI,WAAU;IAAC,IAAI,WAAS;CAAC;;iBAyCxC;AAED;;;;;GAKG;AACH,qCAFW;IAAC,WAAW,WAAS;CAAC;;;;;GAyChC;AAED;;;;;GAKG;AACH,mCAFW;IAAC,WAAW,WAAU;IAAC,IAAI,WAAU;IAAC,YAAY,WAAS;CAAC;;;;;;;;;GAwCtE;AAED;;;;GAIG;AACH,iCAFW;IAAC,IAAI,WAAS;CAAC;;;;;;;;EAiBzB;AAjND,iCAAkC,4BAA4B,CAAC;AAI/D,4BAA6B,4BAA4B,CAAC;;;;;;;AAR1D,8BAAuB,gBAAgB,CAAC;AACxC,4BAAqB,0BAA0B,CAAC"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * model 文字列から kind を返す。
3
+ * - model 未指定 (null/空) → lock5 (SesameBle の config-less 利用 & 既存ロック config の後方互換。
4
+ * config.locks は同期時にロック機種のみ whitelist + model 保存なので、ここに来るのは実質ロック)。
5
+ * - model 文字列がテーブルに無い → **UNKNOWN (操作なし)**。未知機種を勝手にロック扱いして解錠等を
6
+ * 捏造しない (Hub3 が解錠を出していた類のバグを構造的に防ぐ)。
7
+ * @param {string|null|undefined} model
8
+ * @returns {string} KIND
9
+ */
10
+ export function kindForModel(model: string | null | undefined): string;
11
+ /**
12
+ * model 文字列から能力定義を返す。
13
+ * - cloud / ble : 各経路で操作可能な op
14
+ * - ops : 和集合 (UI で見せる操作・提示順)
15
+ * - bleSupported: BLE 制御を実装しているか (= ble.length>0)
16
+ * @param {string|null|undefined} model
17
+ * @returns {{kind:string, os:number, cloud:string[], ble:string[], ops:string[], mechKind:string|null, bleSupported:boolean, label:string}}
18
+ */
19
+ export function capabilitiesForModel(model: string | null | undefined): {
20
+ kind: string;
21
+ os: number;
22
+ cloud: string[];
23
+ ble: string[];
24
+ ops: string[];
25
+ mechKind: string | null;
26
+ bleSupported: boolean;
27
+ label: string;
28
+ };
29
+ /** その model が op を (いずれかの経路で) 操作できるか。 */
30
+ export function supportsOp(model: any, op: any): boolean;
31
+ /** その model が (いずれかの経路で) 何か操作できるか。session の対象判定に使う。 */
32
+ export function isOperable(model: any): boolean;
33
+ /**
34
+ * その model の op を運べる transport 一覧 (型×経路の能力テーブルから導出)。
35
+ * 例: lock5 の autolock は ["ble"]、lock は ["ble","cloud"]、hub3 の ir は ["cloud"]。
36
+ * @param {string|null|undefined} model
37
+ * @param {string} op
38
+ * @returns {string[]} ("ble" / "cloud" の部分集合)
39
+ */
40
+ export function transportsForOp(model: string | null | undefined, op: string): string[];
41
+ /**
42
+ * BLE 上の「デバイス種別 (kind)」。productType→実装クラスの多対一を、能力の単位でまとめたもの。
43
+ * - lock5 : Sesame5/5Pro/6/6Pro/US/miwa, BLE Connector (OS3 ロック)
44
+ * - bot2 : SESAME Bot2/Bot3 (OS3) — click のみ
45
+ * - bike2 : SESAME Bike2/Bike3 (OS3) — unlock のみ
46
+ * - sesame2 : Sesame2/3/4 (OS2 ロック) — BLE は別プロトコル (未実装)
47
+ * - botOs2 : SESAME Bot1 (OS2) — BLE 未実装
48
+ * - bikeOs2 : Bike1 (OS2) — BLE 未実装
49
+ * - biometric : Touch/Face/OpenSensor/Remote (鍵束デバイス。施錠操作なし)
50
+ * - hub3 : Hub3/Hub3 LTE (IoT 中継。BLE 施錠操作なし)
51
+ * - wifi : WifiModule2
52
+ */
53
+ export const KIND: Readonly<{
54
+ LOCK5: "lock5";
55
+ BOT2: "bot2";
56
+ BIKE2: "bike2";
57
+ SESAME2: "sesame2";
58
+ BOT_OS2: "botOs2";
59
+ BIKE_OS2: "bikeOs2";
60
+ BIOMETRIC: "biometric";
61
+ HUB3: "hub3";
62
+ WIFI: "wifi";
63
+ UNKNOWN: "unknown";
64
+ }>;
65
+ /**
66
+ * productType (整数) → { model, kind }。
67
+ * 値は CHProductModel enum (CHDeivceProtocols.kt:28-252) と deviceFactory() の生成クラスに準拠。
68
+ * pType 12 は SDK でも欠番。
69
+ */
70
+ export const PRODUCT_TYPES: Readonly<{
71
+ 0: {
72
+ model: string;
73
+ kind: "sesame2";
74
+ };
75
+ 1: {
76
+ model: string;
77
+ kind: "wifi";
78
+ };
79
+ 2: {
80
+ model: string;
81
+ kind: "botOs2";
82
+ };
83
+ 3: {
84
+ model: string;
85
+ kind: "bikeOs2";
86
+ };
87
+ 4: {
88
+ model: string;
89
+ kind: "sesame2";
90
+ };
91
+ 5: {
92
+ model: string;
93
+ kind: "lock5";
94
+ };
95
+ 6: {
96
+ model: string;
97
+ kind: "bike2";
98
+ };
99
+ 7: {
100
+ model: string;
101
+ kind: "lock5";
102
+ };
103
+ 8: {
104
+ model: string;
105
+ kind: "biometric";
106
+ };
107
+ 9: {
108
+ model: string;
109
+ kind: "biometric";
110
+ };
111
+ 10: {
112
+ model: string;
113
+ kind: "biometric";
114
+ };
115
+ 11: {
116
+ model: string;
117
+ kind: "lock5";
118
+ };
119
+ 13: {
120
+ model: string;
121
+ kind: "hub3";
122
+ };
123
+ 14: {
124
+ model: string;
125
+ kind: "biometric";
126
+ };
127
+ 15: {
128
+ model: string;
129
+ kind: "biometric";
130
+ };
131
+ 16: {
132
+ model: string;
133
+ kind: "lock5";
134
+ };
135
+ 17: {
136
+ model: string;
137
+ kind: "bot2";
138
+ };
139
+ 18: {
140
+ model: string;
141
+ kind: "biometric";
142
+ };
143
+ 19: {
144
+ model: string;
145
+ kind: "biometric";
146
+ };
147
+ 20: {
148
+ model: string;
149
+ kind: "lock5";
150
+ };
151
+ 21: {
152
+ model: string;
153
+ kind: "lock5";
154
+ };
155
+ 22: {
156
+ model: string;
157
+ kind: "biometric";
158
+ };
159
+ 23: {
160
+ model: string;
161
+ kind: "biometric";
162
+ };
163
+ 24: {
164
+ model: string;
165
+ kind: "biometric";
166
+ };
167
+ 25: {
168
+ model: string;
169
+ kind: "biometric";
170
+ };
171
+ 26: {
172
+ model: string;
173
+ kind: "biometric";
174
+ };
175
+ 27: {
176
+ model: string;
177
+ kind: "biometric";
178
+ };
179
+ 28: {
180
+ model: string;
181
+ kind: "biometric";
182
+ };
183
+ 29: {
184
+ model: string;
185
+ kind: "lock5";
186
+ };
187
+ 30: {
188
+ model: string;
189
+ kind: "biometric";
190
+ };
191
+ 31: {
192
+ model: string;
193
+ kind: "biometric";
194
+ };
195
+ 32: {
196
+ model: string;
197
+ kind: "lock5";
198
+ };
199
+ 33: {
200
+ model: string;
201
+ kind: "bike2";
202
+ };
203
+ 35: {
204
+ model: string;
205
+ kind: "bot2";
206
+ };
207
+ 36: {
208
+ model: string;
209
+ kind: "hub3";
210
+ };
211
+ }>;
212
+ //# sourceMappingURL=devicemodel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devicemodel.d.ts","sourceRoot":"","sources":["../../src/ble/devicemodel.js"],"names":[],"mappings":"AAgHA;;;;;;;;GAQG;AACH,oCAHW,MAAM,GAAC,IAAI,GAAC,SAAS,GACnB,MAAM,CAKlB;AAED;;;;;;;GAOG;AACH,4CAHW,MAAM,GAAC,IAAI,GAAC,SAAS,GACnB;IAAC,IAAI,EAAC,MAAM,CAAC;IAAC,EAAE,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,MAAM,EAAE,CAAC;IAAC,GAAG,EAAC,MAAM,EAAE,CAAC;IAAC,GAAG,EAAC,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAC,MAAM,GAAC,IAAI,CAAC;IAAC,YAAY,EAAC,OAAO,CAAC;IAAC,KAAK,EAAC,MAAM,CAAA;CAAC,CAM1I;AAED,yCAAyC;AACzC,yDAEC;AAED,uDAAuD;AACvD,gDAEC;AAED;;;;;;GAMG;AACH,uCAJW,MAAM,GAAC,IAAI,GAAC,SAAS,MACrB,MAAM,GACJ,MAAM,EAAE,CAQpB;AAzJD;;;;;;;;;;;GAWG;AACH;;;;;;;;;;;GAKG;AAqCH;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG"}
@@ -0,0 +1,160 @@
1
+ export * as protocol from "./protocol.js";
2
+ export * as devicemodel from "./devicemodel.js";
3
+ /**
4
+ * 登録済み SESAME を BLE で直接操作する高レベルファサード。
5
+ */
6
+ export class SesameBle {
7
+ /**
8
+ * connect → fn → close を自動で行うヘルパー。
9
+ * @param {object} opts コンストラクタ opts
10
+ * @param {(lock:SesameBle)=>Promise<any>} fn
11
+ */
12
+ static use(opts: object, fn: (lock: SesameBle) => Promise<any>): Promise<any>;
13
+ /**
14
+ * 複数ロックに**1 回のスキャン**で同時接続する (逐次スキャンを避ける正攻法)。
15
+ * 近接していないロックは結果に現れず即スキップ (per-device の scan timeout を払わない)。
16
+ * 見つかったロックへは**並行接続** (login まで)。
17
+ *
18
+ * @param {Array<{name:string, deviceUUID:string, secretKey:string, model?:string}>} entries
19
+ * @param {{debug?:boolean, scanTimeoutMs?:number}} [opts]
20
+ * @returns {Promise<{connected: Map<string, SesameBle>, unreachable: string[], failed: Array<{name:string, error:Error}>}>}
21
+ */
22
+ static connectMany(entries: Array<{
23
+ name: string;
24
+ deviceUUID: string;
25
+ secretKey: string;
26
+ model?: string;
27
+ }>, { debug, scanTimeoutMs }?: {
28
+ debug?: boolean;
29
+ scanTimeoutMs?: number;
30
+ }): Promise<{
31
+ connected: Map<string, SesameBle>;
32
+ unreachable: string[];
33
+ failed: Array<{
34
+ name: string;
35
+ error: Error;
36
+ }>;
37
+ }>;
38
+ /**
39
+ * @param {{
40
+ * secretKey: string|Buffer, // 32hex のロック共通鍵 (cloud の `sesame devices` で取得済み)
41
+ * deviceUUID?: string, // 対象識別 (advertise 照合)。複数 SESAME が近接する環境で必須
42
+ * address?: string, // BLE アドレスで識別する代替
43
+ * debug?: boolean,
44
+ * transport?: object, // 独自トランスポート (省略時 noble)
45
+ * }} opts
46
+ */
47
+ constructor({ secretKey, deviceUUID, address, model, debug, scanTimeoutMs, transport }?: {
48
+ secretKey: string | Buffer;
49
+ deviceUUID?: string;
50
+ address?: string;
51
+ debug?: boolean;
52
+ transport?: object;
53
+ });
54
+ _transport: any;
55
+ _session: SesameBleSession;
56
+ _model: any;
57
+ _caps: {
58
+ kind: string;
59
+ os: number;
60
+ cloud: string[];
61
+ ble: string[];
62
+ ops: string[];
63
+ mechKind: string | null;
64
+ bleSupported: boolean;
65
+ label: string;
66
+ };
67
+ /** デバイスの model 文字列 (例 "sesame_5" / "bot_2")。未指定なら null。 */
68
+ get model(): any;
69
+ /** 型ごとの能力 { kind, os, ops, mechKind, bleSupported, label }。 */
70
+ get capabilities(): {
71
+ kind: string;
72
+ os: number;
73
+ cloud: string[];
74
+ ble: string[];
75
+ ops: string[];
76
+ mechKind: string | null;
77
+ bleSupported: boolean;
78
+ label: string;
79
+ };
80
+ /** この操作を BLE で送れるか (このファサードは BLE 専用なので ble 能力で判定)。 */
81
+ supports(op: any): boolean;
82
+ /** BLE で送れない操作を弾く。SDK では型ごとに能力が非対称 (Bot は click のみ等)。 */
83
+ _assertOp(op: any): void;
84
+ /** mechStatus publish を購読 (戻り値 unsubscribe)。 */
85
+ onStatus(fn: any): () => boolean;
86
+ /** 最後に受信した mechStatus。 */
87
+ get lastStatus(): {
88
+ state: string;
89
+ isInLockRange: boolean;
90
+ target: number | null;
91
+ position: number | null;
92
+ isStop: boolean;
93
+ isCritical: boolean;
94
+ isBatteryCritical: boolean;
95
+ batteryRaw: number;
96
+ flags: number;
97
+ };
98
+ get isConnected(): boolean;
99
+ /** 接続 + login。 */
100
+ connect(): Promise<this>;
101
+ /** 切断。 */
102
+ close(): Promise<void>;
103
+ /**
104
+ * 施錠 (BLE item=82)。tag は履歴に残す任意ラベル。
105
+ * @returns {Promise<{resultCode:number, payload:Buffer}>}
106
+ */
107
+ lock(tag: any): Promise<{
108
+ resultCode: number;
109
+ payload: Buffer;
110
+ }>;
111
+ /** 解錠 (BLE item=83)。Sesame5/6 ロックと Bike2 が対応。 */
112
+ unlock(tag: any): Promise<{
113
+ resultCode: number;
114
+ payload: Buffer;
115
+ }>;
116
+ /**
117
+ * SESAME Bot のクリック (BLE item=89)。Bot2/Bot3 のみ。
118
+ * @param {Buffer} [tag] 履歴タグ (UUID バイト列)
119
+ */
120
+ click(tag?: Buffer): Promise<{
121
+ resultCode: number;
122
+ payload: Buffer;
123
+ }>;
124
+ /**
125
+ * トグル (Sesame5/6 ロックのみ)。直近の mechStatus が無ければ status() を取得してから判定。
126
+ * locked → unlock、それ以外 → lock (CHSesame5Device.kt:128-145 準拠)。
127
+ */
128
+ toggle(tag: any): Promise<{
129
+ resultCode: number;
130
+ payload: Buffer;
131
+ }>;
132
+ /**
133
+ * オートロック設定 (BLE item=11、2byte LE 秒数。0=無効)。Sesame5/6 ロックのみ。
134
+ * **BLE 経由なら実機に反映される** (クラウドの biz3TriggerLocker では ack のみで未反映だった機能)。
135
+ * @param {number} seconds 0..65535
136
+ */
137
+ autolock(seconds: number): Promise<{
138
+ resultCode: number;
139
+ payload: Buffer;
140
+ }>;
141
+ /**
142
+ * 現在の mechStatus を返す。未受信なら publish を待つ (timeout 付き)。
143
+ * @param {{timeoutMs?:number}} [opts]
144
+ * @returns {Promise<object>} parseMechStatus の結果
145
+ */
146
+ status({ timeoutMs }?: {
147
+ timeoutMs?: number;
148
+ }): Promise<object>;
149
+ /**
150
+ * 履歴を 1 バッチ取得 (BLE item=4)。payload の解析は呼び出し側 (生バイト返し)。
151
+ * @returns {Promise<Buffer>}
152
+ */
153
+ history(): Promise<Buffer>;
154
+ }
155
+ import { Buffer } from "node:buffer";
156
+ export { SesameBleSession, BleResultError } from "./session.js";
157
+ export { RESULT as SESAME_RESULT_CODES, resultName } from "./protocol.js";
158
+ export { NobleTransport, createBleTransport, advToDeviceUUID, scanSesames } from "./transport.js";
159
+ export { capabilitiesForModel, kindForModel, supportsOp, isOperable, transportsForOp, KIND, PRODUCT_TYPES } from "./devicemodel.js";
160
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ble/index.js"],"names":[],"mappings":";;AAuCA;;GAEG;AACH;IAoGE;;;;OAIG;IACH,iBAHW,MAAM,MACN,CAAC,IAAI,EAAC,SAAS,KAAG,OAAO,CAAC,GAAG,CAAC,gBAOxC;IAED;;;;;;;;OAQG;IACH,4BAJW,KAAK,CAAC;QAAC,IAAI,EAAC,MAAM,CAAC;QAAC,UAAU,EAAC,MAAM,CAAC;QAAC,SAAS,EAAC,MAAM,CAAC;QAAC,KAAK,CAAC,EAAC,MAAM,CAAA;KAAC,CAAC,6BACxE;QAAC,KAAK,CAAC,EAAC,OAAO,CAAC;QAAC,aAAa,CAAC,EAAC,MAAM,CAAA;KAAC,GACrC,OAAO,CAAC;QAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;YAAC,IAAI,EAAC,MAAM,CAAC;YAAC,KAAK,EAAC,KAAK,CAAA;SAAC,CAAC,CAAA;KAAC,CAAC,CAsB1H;IA5ID;;;;;;;;OAQG;IACH,yFARW;QACN,SAAS,EAAE,MAAM,GAAC,MAAM,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,EAQH;IAJC,gBAAgG;IAChG,2BAAsF;IACtF,YAAmB;IACnB;;;;;;;;;MAAwC;IAG1C,2DAA2D;IAC3D,iBAAmC;IACnC,+DAA+D;IAC/D;;;;;;;;;MAAyC;IACzC,sDAAsD;IACtD,2BAAoD;IAEpD,yDAAyD;IACzD,yBAKC;IAED,gDAAgD;IAChD,iCAAmD;IACnD,0BAA0B;IAC1B;;;;;;;;;;MAAqD;IACrD,2BAAsD;IAEtD,kBAAkB;IAClB,yBAA+D;IAC/D,UAAU;IACV,uBAAmD;IAEnD;;;OAGG;IACH,gBAFa,OAAO,CAAC;QAAC,UAAU,EAAC,MAAM,CAAC;QAAC,OAAO,EAAC,MAAM,CAAA;KAAC,CAAC,CAEyC;IAElG,iDAAiD;IACjD;;;OAAwG;IAExG;;;OAGG;IACH,YAFW,MAAM;;;OAEoF;IAErG;;;OAGG;IACH;;;OAMC;IAED;;;;OAIG;IACH,kBAFW,MAAM;;;OAEoG;IAErH;;;;OAIG;IACH,uBAHW;QAAC,SAAS,CAAC,EAAC,MAAM,CAAA;KAAC,GACjB,OAAO,CAAC,MAAM,CAAC,CAQ3B;IAED;;;OAGG;IACH,WAFa,OAAO,CAAC,MAAM,CAAC,CAK3B;CA4CF;uBAxKsB,aAAa"}