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
package/src/company.js ADDED
@@ -0,0 +1,147 @@
1
+ // 会社管理 (biz3ManageCompany)。
2
+ //
3
+ // Ported from biz3 (CANDY-HOUSE/biz3, MIT):
4
+ // - vendor reference: references_web/src/api/useStripeInfo.js
5
+ // - vendor reference: references_web/src/components/biz/layout/index.js (add 引数の出所)
6
+ //
7
+ // 注: これは「認証」ではなく「ログイン済みセッションで自分の会社情報を引く op」。
8
+ // 認証フロー (Cognito client / refresh / DEVICE_KEY 永続化) は auth.js のまま
9
+ // アプリ寄せを維持しており、ここは一切関与しない。
10
+ //
11
+ // biz3ManageCompany の 4 op (biz3GetLoginUser は account.js 側で実装済みのため除外):
12
+ // - get : 会社一覧取得。フレーム = {action, op:'get'} (フラット)
13
+ // - updateName : 会社名変更。 フレーム = {action, obj:{companyID,name}, op}
14
+ // - add : 会社新規登録。フレーム = {action, name, employeeEmail, subUUID, op}
15
+ // - getPaymentConfig: 課金レベル設定取得。フレーム = {action, companyID, op}
16
+ //
17
+ // いずれも純 JSON の WS フレームで、バイナリ packing / checksum / UUID 大文字化等は無い
18
+ // (useStripeInfo.js は company op に対しそうした加工を一切しない)。
19
+ //
20
+ // 応答ルーティング: biz3 は handleCompaniesResponse の switch (useStripeInfo.js:156-185)
21
+ // で action='biz3ManageCompany' + op の組で受ける。get/updateName/add は switch case で
22
+ // 直接処理 (setCompanies)、getPaymentConfig は switch case が無く invokeCallbacks(message)
23
+ // で op 単位コールバックへ委譲する。いずれも応答は同 action+op で同期的に返るため、
24
+ // CLI 側では client.request({action, op, ...}) (action+op 一致応答待ち) で受ける。
25
+
26
+ import { ACTION_TYPES } from "../vendor/biz3/constants/messageConstants.js";
27
+ import { assertSuccess } from "./util.js";
28
+
29
+ // action 文字列は vendor (biz3 messageConstants) から引く (手書きしない)。
30
+ // messageConstants.js:5 BIZ3_MANAGE_COMPANY = 'biz3ManageCompany'
31
+ const ACT_COMPANY = ACTION_TYPES.BIZ3_MANAGE_COMPANY; // "biz3ManageCompany"
32
+ const DEFAULT_TIMEOUT_MS = 10_000;
33
+
34
+ /**
35
+ * ログインセッションのユーザに紐づく全 company の一覧を取得する。
36
+ *
37
+ * biz3 getCompanies (useStripeInfo.js:73-82): フレームは {action, op:'get'} のみで
38
+ * companyID も email も送らない (obj ラップ無し)。応答は handleCompaniesResponse の
39
+ * 'get' case (useStripeInfo.js:161-165) で message.success のとき message.data が
40
+ * company オブジェクトの配列。各要素の確認済みフィールド:
41
+ * companyID, name, feeLevel{subscriptionId, isRootUser:bool, level:number},
42
+ * tag (配列。tag[0]==='オーナー' で isOwner 判定), isSesameApp:bool,
43
+ * employeeEmail, subUUID (useStripeInfo.js:41-71, 277 で読み出しを確認)。
44
+ *
45
+ * 注: 応答は配列であって obj ラップではない。companyID は他 op
46
+ * (updateName/getPaymentConfig) が要求する priorityCompanyId の一次データ。
47
+ *
48
+ * @param {import("./transport.js").Hub3WsClient} client
49
+ * @param {{timeoutMs?:number}} [params]
50
+ * @returns {Promise<object[]>} company オブジェクトの配列
51
+ */
52
+ export async function getCompanies(client, { timeoutMs = DEFAULT_TIMEOUT_MS } = {}) {
53
+ const resp = await client.request({ action: ACT_COMPANY, op: "get" }, timeoutMs);
54
+ assertSuccess(resp, "getCompanies");
55
+ // setCompanies(message.data) (useStripeInfo.js:163)。data は配列。
56
+ return Array.isArray(resp?.data) ? resp.data : [];
57
+ }
58
+
59
+ /**
60
+ * 会社名を変更する。
61
+ *
62
+ * biz3 updateCompanyName (useStripeInfo.js:293-305): フレームは
63
+ * {action, obj:{companyID, name}, op:'updateName'} で、companyID/name は必ず obj の
64
+ * 内側に入れる (トップレベルに companyID を置かない)。companyID は priorityCompanyId
65
+ * (= get 応答から決まる優先会社の companyID)。
66
+ *
67
+ * 応答 (useStripeInfo.js:166-174): message.success のとき message.data === {companyID, name}
68
+ * (更新後の値。配列ではない)。biz3 はこの companyID 一致の company の name を差し替える。
69
+ *
70
+ * @param {import("./transport.js").Hub3WsClient} client
71
+ * @param {{companyID:string, name:string, timeoutMs?:number}} params
72
+ * @returns {Promise<{companyID:string, name:string}>} 更新後の {companyID, name}
73
+ */
74
+ export async function updateCompanyName(client, { companyID, name, timeoutMs = DEFAULT_TIMEOUT_MS }) {
75
+ if (!companyID) throw new Error("companyID required");
76
+ if (name == null) throw new Error("name required");
77
+ const resp = await client.request(
78
+ { action: ACT_COMPANY, obj: { companyID, name }, op: "updateName" },
79
+ timeoutMs,
80
+ );
81
+ assertSuccess(resp, "updateCompanyName");
82
+ // data は {companyID, name} (useStripeInfo.js:170)。
83
+ return resp.data ?? { companyID, name };
84
+ }
85
+
86
+ /**
87
+ * 会社を新規登録する。
88
+ *
89
+ * biz3 addCompany (useStripeInfo.js:307-320): フレームは
90
+ * {action, name, employeeEmail, subUUID, op:'add'} とフラット展開 (obj ラップ無し)。
91
+ * companyID は送らない (新規作成のため)。呼び出し元 (layout/index.js:300-309) では
92
+ * name=入力会社名, employeeEmail=customerInfo.employeeEmail, subUUID=customerInfo.subUUID
93
+ * を渡す。employeeEmail / subUUID はログインユーザの customerInfo (biz3GetLoginUser 応答)
94
+ * 由来であり、CLI では既ログインユーザ情報から補完する必要がある。
95
+ *
96
+ * 応答 (useStripeInfo.js:175-179): message.success のとき message.data が新規 company
97
+ * 1件で、biz3 は companies 配列に push する (setCompanies(prev => [...prev, message.data]))。
98
+ * data は get の配列要素と同型 (companyID, name 等) と推定されるが、add 応答 data の
99
+ * 個別フィールドは biz3 で読み出されておらず詳細は未確認 (push のみ)。
100
+ *
101
+ * @param {import("./transport.js").Hub3WsClient} client
102
+ * @param {{name:string, employeeEmail:string, subUUID:string, timeoutMs?:number}} params
103
+ * @returns {Promise<object>} 新規 company オブジェクト (応答 data)
104
+ */
105
+ export async function addCompany(client, { name, employeeEmail, subUUID, timeoutMs = DEFAULT_TIMEOUT_MS }) {
106
+ if (!name) throw new Error("name required");
107
+ if (!employeeEmail) throw new Error("employeeEmail required (login ユーザの customerInfo 由来)");
108
+ if (!subUUID) throw new Error("subUUID required (login ユーザの customerInfo 由来)");
109
+ const resp = await client.request(
110
+ { action: ACT_COMPANY, name, employeeEmail, subUUID, op: "add" },
111
+ timeoutMs,
112
+ );
113
+ assertSuccess(resp, "addCompany");
114
+ return resp.data ?? null;
115
+ }
116
+
117
+ /**
118
+ * 課金レベル設定 (料金プラン設定) を取得する。
119
+ *
120
+ * biz3 getLevelConfig (useStripeInfo.js:322-334): フレームは
121
+ * {action, companyID:<priorityCompanyId>, op:'getPaymentConfig'} で companyID は
122
+ * トップレベルに直接置く (obj ラップ無し)。companyID は priorityCompanyId
123
+ * (get 応答由来の優先会社 ID)。
124
+ *
125
+ * 応答: biz3 では handleCompaniesResponse の switch に getPaymentConfig case が無く、
126
+ * invokeCallbacks(message) (useStripeInfo.js:159) で op 単位コールバックへ委譲される。
127
+ * よって応答 data の構造はこのファイルからは未確認 (呼び出し側 cb 依存)。
128
+ * action='biz3ManageCompany' + op='getPaymentConfig' で返る点のみ確定。
129
+ *
130
+ * 未確認: 応答 data のフィールド集合 (実機検証要)。本実装は resp.data をそのまま返す。
131
+ *
132
+ * @param {import("./transport.js").Hub3WsClient} client
133
+ * @param {{companyID:string, timeoutMs?:number}} params
134
+ * @returns {Promise<*>} 課金レベル設定 (応答 data。構造未確認)
135
+ */
136
+ export async function getPaymentConfig(client, { companyID, timeoutMs = DEFAULT_TIMEOUT_MS }) {
137
+ if (!companyID) throw new Error("companyID required");
138
+ const resp = await client.request(
139
+ { action: ACT_COMPANY, companyID, op: "getPaymentConfig" },
140
+ timeoutMs,
141
+ );
142
+ assertSuccess(resp, "getPaymentConfig");
143
+ return resp?.data ?? null;
144
+ }
145
+
146
+ // 公開 op の allowlist (SesameHub3._bindNs / serve registry が参照する単一の真実)。
147
+ export const NAMESPACE_OPS = ["getCompanies", "updateCompanyName", "addCompany", "getPaymentConfig"];