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,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {import("../daemon.js").Daemon} daemon
|
|
3
|
+
* @param {{ bind?:string, port:number, token:string }} opts
|
|
4
|
+
* @returns {Promise<{ stop:()=>Promise<void> }>}
|
|
5
|
+
*/
|
|
6
|
+
export function startWsFraming(daemon: import("../daemon.js").Daemon, { bind, port, token }: {
|
|
7
|
+
bind?: string;
|
|
8
|
+
port: number;
|
|
9
|
+
token: string;
|
|
10
|
+
}): Promise<{
|
|
11
|
+
stop: () => Promise<void>;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=ws.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/serve/framing/ws.js"],"names":[],"mappings":"AASA;;;;GAIG;AACH,uCAJW,OAAO,cAAc,EAAE,MAAM,yBAC7B;IAAE,IAAI,CAAC,EAAC,MAAM,CAAC;IAAC,IAAI,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC;IAAE,IAAI,EAAC,MAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CA2C/C"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/** 成功応答を組み立てる。 */
|
|
2
|
+
export function makeResult(id: any, result: any): {
|
|
3
|
+
jsonrpc: string;
|
|
4
|
+
id: any;
|
|
5
|
+
result: any;
|
|
6
|
+
};
|
|
7
|
+
/** エラー応答を組み立てる。data は kind 等のみ。inbound params は決して入れない。 */
|
|
8
|
+
export function makeError(id: any, code: any, message: any, kind: any, data?: any): {
|
|
9
|
+
jsonrpc: string;
|
|
10
|
+
id: any;
|
|
11
|
+
error: {
|
|
12
|
+
code: any;
|
|
13
|
+
message: any;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
/** 任意の throw を JSON-RPC error オブジェクトへ正規化 (params は echo しない)。 */
|
|
17
|
+
export function errorFromThrow(id: any, err: any): {
|
|
18
|
+
jsonrpc: string;
|
|
19
|
+
id: any;
|
|
20
|
+
error: {
|
|
21
|
+
code: any;
|
|
22
|
+
message: any;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* 1 行 (1 メッセージ) を parse して分類する。
|
|
27
|
+
* @param {string} raw
|
|
28
|
+
* @returns {{type:"parse-error"}
|
|
29
|
+
* | {type:"batch"}
|
|
30
|
+
* | {type:"invalid", id:(string|number|null)}
|
|
31
|
+
* | {type:"request", id:(string|number), method:string, params:any}
|
|
32
|
+
* | {type:"notification", method:string, params:any}}
|
|
33
|
+
*/
|
|
34
|
+
export function classify(raw: string): {
|
|
35
|
+
type: "parse-error";
|
|
36
|
+
} | {
|
|
37
|
+
type: "batch";
|
|
38
|
+
} | {
|
|
39
|
+
type: "invalid";
|
|
40
|
+
id: (string | number | null);
|
|
41
|
+
} | {
|
|
42
|
+
type: "request";
|
|
43
|
+
id: (string | number);
|
|
44
|
+
method: string;
|
|
45
|
+
params: any;
|
|
46
|
+
} | {
|
|
47
|
+
type: "notification";
|
|
48
|
+
method: string;
|
|
49
|
+
params: any;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* 1 メッセージを処理して応答オブジェクト (通知なら null) を返す。
|
|
53
|
+
* メソッド実行は `invoke(method, params)` に委譲 (Daemon が registry 解決 + 直列化 + 認可を仕込む)。
|
|
54
|
+
* この関数は throw しない。
|
|
55
|
+
*
|
|
56
|
+
* @param {string} raw 1 行の生メッセージ
|
|
57
|
+
* @param {(method:string, params:any) => Promise<any>} invoke
|
|
58
|
+
* @returns {Promise<object|null>} 応答 (通知なら null)
|
|
59
|
+
*/
|
|
60
|
+
export function handleMessage(raw: string, invoke: (method: string, params: any) => Promise<any>): Promise<object | null>;
|
|
61
|
+
/** サーバ発のイベント通知フレームを作る (予約名 `event.<topic>`)。 */
|
|
62
|
+
export function makeEvent(topic: any, payload: any): {
|
|
63
|
+
jsonrpc: string;
|
|
64
|
+
method: string;
|
|
65
|
+
params: any;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* 機械向け契約 (RPC メソッド名/params 形/結果形/event 名/error.kind) の SemVer。
|
|
69
|
+
* **破壊的変更でだけ major を上げる** (パッケージ version とは独立。pkg は無害な変更でも上がる)。
|
|
70
|
+
* 消費者はこれを `status.contractVersion` か discover の `info["x-contractVersion"]` で読み、
|
|
71
|
+
* major 不一致なら fail-fast できる。後方互換な追加は minor、説明のみは patch。
|
|
72
|
+
* 1.0.0: 初版 (5 framing / 79 method / event.lockState・deviceUpdate / 6 kind)
|
|
73
|
+
*/
|
|
74
|
+
export const CONTRACT_VERSION: "1.0.0";
|
|
75
|
+
/** JSON-RPC 2.0 標準エラーコード + アプリ域 (-32000)。 */
|
|
76
|
+
export const RPC: Readonly<{
|
|
77
|
+
PARSE_ERROR: -32700;
|
|
78
|
+
INVALID_REQUEST: -32600;
|
|
79
|
+
METHOD_NOT_FOUND: -32601;
|
|
80
|
+
INVALID_PARAMS: -32602;
|
|
81
|
+
INTERNAL_ERROR: -32603;
|
|
82
|
+
APP_ERROR: -32000;
|
|
83
|
+
}>;
|
|
84
|
+
/**
|
|
85
|
+
* ドメイン/プロトコルエラー。handler はこれを throw するとそのまま JSON-RPC error になる。
|
|
86
|
+
* `kind` は機械可読な分類で、`error.data.kind` に載る (クライアントが分岐できる)。
|
|
87
|
+
* @param {string} message
|
|
88
|
+
* @param {{ code?: number, kind?: string, data?: object }} [opts]
|
|
89
|
+
*/
|
|
90
|
+
export class RpcError extends Error {
|
|
91
|
+
constructor(message: any, { code, kind, data }?: {
|
|
92
|
+
code?: -32000;
|
|
93
|
+
kind?: string;
|
|
94
|
+
data?: any;
|
|
95
|
+
});
|
|
96
|
+
code: -32000;
|
|
97
|
+
kind: string;
|
|
98
|
+
data: any;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* error.data.kind の enum。**実際に emit される値だけ**を載せる (利用者が switch できるよう、
|
|
102
|
+
* 出ないものは定義しない — 出さない値を契約に書かない)。
|
|
103
|
+
* not_authenticated : 未ログイン/トークン失効 (CLI で sesame login)
|
|
104
|
+
* connection_lost : クラウド WS 未接続/切断
|
|
105
|
+
* timeout : op がタイムアウト (transport の request timeout 由来)
|
|
106
|
+
* bad_params : 引数不正/parse 不能
|
|
107
|
+
* not_implemented : 未知メソッド
|
|
108
|
+
* internal : 上記以外 (ライブラリ/サーバ由来の想定外エラー。message に詳細)
|
|
109
|
+
*/
|
|
110
|
+
export const KIND: Readonly<{
|
|
111
|
+
NOT_AUTHENTICATED: "not_authenticated";
|
|
112
|
+
BAD_PARAMS: "bad_params";
|
|
113
|
+
TIMEOUT: "timeout";
|
|
114
|
+
CONNECTION_LOST: "connection_lost";
|
|
115
|
+
INTERNAL: "internal";
|
|
116
|
+
NOT_IMPLEMENTED: "not_implemented";
|
|
117
|
+
}>;
|
|
118
|
+
//# sourceMappingURL=jsonrpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonrpc.d.ts","sourceRoot":"","sources":["../../src/serve/jsonrpc.js"],"names":[],"mappings":"AAmEA,kBAAkB;AAClB;;;;EAEC;AAED,2DAA2D;AAC3D;;;;;;;EAOC;AAED,iEAAiE;AACjE;;;;;;;EAOC;AAED;;;;;;;;GAQG;AACH,8BAPW,MAAM,GACJ;IAAC,IAAI,EAAC,aAAa,CAAA;CAAC,GACnB;IAAC,IAAI,EAAC,OAAO,CAAA;CAAC,GACd;IAAC,IAAI,EAAC,SAAS,CAAC;IAAC,EAAE,EAAC,CAAC,MAAM,GAAC,MAAM,GAAC,IAAI,CAAC,CAAA;CAAC,GACzC;IAAC,IAAI,EAAC,SAAS,CAAC;IAAC,EAAE,EAAC,CAAC,MAAM,GAAC,MAAM,CAAC,CAAC;IAAC,MAAM,EAAC,MAAM,CAAC;IAAC,MAAM,EAAC,GAAG,CAAA;CAAC,GAC/D;IAAC,IAAI,EAAC,cAAc,CAAC;IAAC,MAAM,EAAC,MAAM,CAAC;IAAC,MAAM,EAAC,GAAG,CAAA;CAAC,CAmB7D;AAOD;;;;;;;;GAQG;AACH,mCAJW,MAAM,UACN,CAAC,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GACzC,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC,CA0BhC;AAED,gDAAgD;AAChD;;;;EAEC;AAtJD;;;;;;GAMG;AACH,+BAAgC,OAAO,CAAC;AAExC,6CAA6C;AAC7C;;;;;;;GAOG;AAEH;;;;;GAKG;AACH;IACE;;;;OAMC;IAHC,aAAgB;IAChB,aAAgB;IAChB,UAAgB;CAEnB;AAED;;;;;;;;;GASG;AACH;;;;;;;GAOG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 全エントリを {name → entry} で構築する。
|
|
3
|
+
* @returns {Map<string, {summary:string, params:any[], result:string, handler:Function, namespace?:string}>}
|
|
4
|
+
*/
|
|
5
|
+
export function buildRegistry(): Map<string, {
|
|
6
|
+
summary: string;
|
|
7
|
+
params: any[];
|
|
8
|
+
result: string;
|
|
9
|
+
handler: Function;
|
|
10
|
+
namespace?: string;
|
|
11
|
+
}>;
|
|
12
|
+
/**
|
|
13
|
+
* OpenRPC 文書を組み立てる (rpc.discover 応答)。param スキーマは初期は粗いが
|
|
14
|
+
* 「何の op が在るか」は完全網羅する。secretKey 等の実値 example は載せない。
|
|
15
|
+
*/
|
|
16
|
+
export function buildOpenRpcDoc(reg: any, version: any): {
|
|
17
|
+
openrpc: string;
|
|
18
|
+
info: {
|
|
19
|
+
title: string;
|
|
20
|
+
version: any;
|
|
21
|
+
"x-contractVersion": string;
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
methods: {
|
|
25
|
+
name: any;
|
|
26
|
+
summary: any;
|
|
27
|
+
params: any;
|
|
28
|
+
result: {
|
|
29
|
+
name: string;
|
|
30
|
+
schema: {
|
|
31
|
+
description: any;
|
|
32
|
+
type: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
}[];
|
|
36
|
+
"x-events": {
|
|
37
|
+
name: string;
|
|
38
|
+
description: string;
|
|
39
|
+
}[];
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/serve/registry.js"],"names":[],"mappings":"AA2JA;;;GAGG;AACH,iCAFa,GAAG,CAAC,MAAM,EAAE;IAAC,OAAO,EAAC,MAAM,CAAC;IAAC,MAAM,EAAC,GAAG,EAAE,CAAC;IAAC,MAAM,EAAC,MAAM,CAAC;IAAC,OAAO,WAAU;IAAC,SAAS,CAAC,EAAC,MAAM,CAAA;CAAC,CAAC,CA+B3G;AAED;;;GAGG;AACH;;;;;;;;;;;;;;;;;;;;;;;;EA+BC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* セッション UI を起動し、ユーザーが終了するまで待つ。
|
|
3
|
+
* @param {{
|
|
4
|
+
* devices: Map<string, {entry:object, ble:object|null}>,
|
|
5
|
+
* hasCloud: boolean, // クラウド経路が使えるか (タグ表示用)
|
|
6
|
+
* bus: import("node:events").EventEmitter, // "update" で再描画
|
|
7
|
+
* exec: (op:string, device:object, seconds?:number)=>Promise<string>, // 1 操作を実行し結果文字列を返す
|
|
8
|
+
* actionsFor: (device:object)=>Array<{label:string, value:string}>, // 型の能力に応じた操作 (status 含む)
|
|
9
|
+
* fmtState: (device:object)=>string, // ヘッダの状態表示
|
|
10
|
+
* }} props
|
|
11
|
+
*/
|
|
12
|
+
export function runSessionUI(props: {
|
|
13
|
+
devices: Map<string, {
|
|
14
|
+
entry: object;
|
|
15
|
+
ble: object | null;
|
|
16
|
+
}>;
|
|
17
|
+
hasCloud: boolean;
|
|
18
|
+
bus: import("node:events").EventEmitter;
|
|
19
|
+
exec: (op: string, device: object, seconds?: number) => Promise<string>;
|
|
20
|
+
actionsFor: (device: object) => Array<{
|
|
21
|
+
label: string;
|
|
22
|
+
value: string;
|
|
23
|
+
}>;
|
|
24
|
+
fmtState: (device: object) => string;
|
|
25
|
+
}): Promise<void>;
|
|
26
|
+
export function SessionApp({ devices, hasCloud, bus, exec, actionsFor, fmtState, hub3RemotesFor, listKeysFor }: {
|
|
27
|
+
devices: any;
|
|
28
|
+
hasCloud: any;
|
|
29
|
+
bus: any;
|
|
30
|
+
exec: any;
|
|
31
|
+
actionsFor: any;
|
|
32
|
+
fmtState: any;
|
|
33
|
+
hub3RemotesFor: any;
|
|
34
|
+
listKeysFor: any;
|
|
35
|
+
}): any;
|
|
36
|
+
//# sourceMappingURL=session-ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-ui.d.ts","sourceRoot":"","sources":["../src/session-ui.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;GAUG;AACH,oCATW;IACN,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;QAAC,KAAK,EAAC,MAAM,CAAC;QAAC,GAAG,EAAC,MAAM,GAAC,IAAI,CAAA;KAAC,CAAC,CAAC;IACtD,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,aAAa,EAAE,YAAY,CAAC;IACxC,IAAI,EAAE,CAAC,EAAE,EAAC,MAAM,EAAE,MAAM,EAAC,MAAM,EAAE,OAAO,CAAC,EAAC,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,UAAU,EAAE,CAAC,MAAM,EAAC,MAAM,KAAG,KAAK,CAAC;QAAC,KAAK,EAAC,MAAM,CAAC;QAAC,KAAK,EAAC,MAAM,CAAA;KAAC,CAAC,CAAC;IACjE,QAAQ,EAAE,CAAC,MAAM,EAAC,MAAM,KAAG,MAAM,CAAC;CACnC,iBAKH;AAED;;;;;;;;;QAoJC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* デバイス鍵から共有 URL (`ssm://UI?...`) を組み立てる。biz3 generateInviteGuestQRCodeByInfo の 1:1 移植。
|
|
3
|
+
*
|
|
4
|
+
* @param {object} deviceKey デバイス鍵。devices 一覧 (listDevices) の 1 要素や getDeviceStatus 応答。
|
|
5
|
+
* 必須: deviceModel, sesame2PublicKey(hex), keyIndex(hex), deviceUUID。
|
|
6
|
+
* secretKey は guestKeyId 未指定時に必須。
|
|
7
|
+
* @param {object} opts
|
|
8
|
+
* @param {number|string} opts.keyLevel 0=owner / 1=manager / 2=guest (URL の l=)
|
|
9
|
+
* @param {string} [opts.guestKeyId] ゲスト共有時に secretKey 位置へ差し込む値 (generateGuestQR 応答)
|
|
10
|
+
* @param {string} [opts.name] 表示名 (URL の n=)。省略時 deviceKey.deviceName。
|
|
11
|
+
* @returns {string} `ssm://UI?t=sk&sk=<base64>&l=<lv>&n=<urlenc>`
|
|
12
|
+
*/
|
|
13
|
+
export function buildShareKeyUrl(deviceKey: object, { keyLevel, guestKeyId, name }?: {
|
|
14
|
+
keyLevel: number | string;
|
|
15
|
+
guestKeyId?: string;
|
|
16
|
+
name?: string;
|
|
17
|
+
}): string;
|
|
18
|
+
/**
|
|
19
|
+
* 共有 URL (`ssm://UI?...` 文字列) を解析して鍵情報に戻す。biz3 readQrcode の URL 解析部の移植
|
|
20
|
+
* (画像スキャン部 = Decoder/DOM 依存は除外。URL 文字列を直接受ける)。
|
|
21
|
+
*
|
|
22
|
+
* @param {string} url `ssm://UI?t=sk&sk=...&l=...&n=...`
|
|
23
|
+
* @returns {{secretKey:string, keyIndex:string, sesame2PublicKey:string, keyLevel:number|null,
|
|
24
|
+
* deviceModel:string|null, deviceName:string|null, deviceUUID:string}}
|
|
25
|
+
*/
|
|
26
|
+
export function parseShareKeyUrl(url: string): {
|
|
27
|
+
secretKey: string;
|
|
28
|
+
keyIndex: string;
|
|
29
|
+
sesame2PublicKey: string;
|
|
30
|
+
keyLevel: number | null;
|
|
31
|
+
deviceModel: string | null;
|
|
32
|
+
deviceName: string | null;
|
|
33
|
+
deviceUUID: string;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=sharekey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharekey.d.ts","sourceRoot":"","sources":["../src/sharekey.js"],"names":[],"mappings":"AA0BA;;;;;;;;;;;GAWG;AACH,4CATW,MAAM,mCAId;IAA4B,QAAQ,EAA5B,MAAM,GAAC,MAAM;IACC,UAAU,GAAxB,MAAM;IACQ,IAAI,GAAlB,MAAM;CACd,GAAU,MAAM,CA2ClB;AAED;;;;;;;GAOG;AACH,sCAJW,MAAM,GACJ;IAAC,SAAS,EAAC,MAAM,CAAC;IAAC,QAAQ,EAAC,MAAM,CAAC;IAAC,gBAAgB,EAAC,MAAM,CAAC;IAAC,QAAQ,EAAC,MAAM,GAAC,IAAI,CAAC;IAClF,WAAW,EAAC,MAAM,GAAC,IAAI,CAAC;IAAC,UAAU,EAAC,MAAM,GAAC,IAAI,CAAC;IAAC,UAAU,EAAC,MAAM,CAAA;CAAC,CA0C/E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class FileTokenStore {
|
|
2
|
+
/** 既定の設定ディレクトリから組み立てる。CLI 内部はこれを使う。 */
|
|
3
|
+
static fromConfigDir(configDir: any): FileTokenStore;
|
|
4
|
+
/**
|
|
5
|
+
* @param {{ tokensPath: string, loginStatePath: string }} paths
|
|
6
|
+
*/
|
|
7
|
+
constructor({ tokensPath, loginStatePath }: {
|
|
8
|
+
tokensPath: string;
|
|
9
|
+
loginStatePath: string;
|
|
10
|
+
});
|
|
11
|
+
tokensPath: string;
|
|
12
|
+
loginStatePath: string;
|
|
13
|
+
load(): any;
|
|
14
|
+
save(t: any): void;
|
|
15
|
+
clear(): void;
|
|
16
|
+
loadPending(): any;
|
|
17
|
+
savePending(s: any): void;
|
|
18
|
+
clearPending(): void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.js"],"names":[],"mappings":"AA4BA;IAWE,uCAAuC;IACvC,qDAGC;IAdD;;OAEG;IACH,4CAFW;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,EAOxD;IAFC,mBAA4B;IAC5B,uBAAoC;IAStC,YAAkD;IAClD,mBAA0C;IAC1C,cAA4C;IAE5C,mBAA6D;IAC7D,0BAAqD;IACrD,qBAAuD;CACxD"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SESAME Hub3 から IR を発射する。
|
|
3
|
+
*
|
|
4
|
+
* @param {Hub3WsClient} client
|
|
5
|
+
* @param {{
|
|
6
|
+
* deviceId: string, // Hub3 UUID (大文字)
|
|
7
|
+
* irDeviceUUID: string, // remote.uuid
|
|
8
|
+
* irType: number, // remote.type (例: 49152)
|
|
9
|
+
* command: string, // 自己学習なら keyUUID、プリセットなら 16byte hex
|
|
10
|
+
* operation: "learnEmit"|"remoteEmit",
|
|
11
|
+
* companyID: string,
|
|
12
|
+
* }} params
|
|
13
|
+
*/
|
|
14
|
+
export function sendIR(client: Hub3WsClient, params: {
|
|
15
|
+
deviceId: string;
|
|
16
|
+
irDeviceUUID: string;
|
|
17
|
+
irType: number;
|
|
18
|
+
command: string;
|
|
19
|
+
operation: "learnEmit" | "remoteEmit";
|
|
20
|
+
companyID: string;
|
|
21
|
+
}): Promise<any>;
|
|
22
|
+
/**
|
|
23
|
+
* 指定 IR デバイス (リモコン) の登録キー一覧を取得。
|
|
24
|
+
*
|
|
25
|
+
* 注: このエンドポイントだけ Hub3 UUID のフィールド名が `deviceId` ではなく
|
|
26
|
+
* `hub3DeviceId`。これは公式 biz3 の意図的な命名差 (useRemoteCtrl.js:820-826)。
|
|
27
|
+
*
|
|
28
|
+
* @param {Hub3WsClient} client
|
|
29
|
+
* @param {{deviceId:string, irDeviceUUID:string, companyID:string}} params
|
|
30
|
+
*/
|
|
31
|
+
export function getIRCodes(client: Hub3WsClient, params: {
|
|
32
|
+
deviceId: string;
|
|
33
|
+
irDeviceUUID: string;
|
|
34
|
+
companyID: string;
|
|
35
|
+
}): Promise<any>;
|
|
36
|
+
export const TRANSPORT_ERR: Readonly<{
|
|
37
|
+
TIMEOUT: "TRANSPORT_TIMEOUT";
|
|
38
|
+
CLOSED: "TRANSPORT_CLOSED";
|
|
39
|
+
}>;
|
|
40
|
+
export class Hub3WsClient {
|
|
41
|
+
/**
|
|
42
|
+
* @param {{
|
|
43
|
+
* wsUrl: string,
|
|
44
|
+
* idToken: string,
|
|
45
|
+
* lang?: string,
|
|
46
|
+
* debug?: boolean,
|
|
47
|
+
* autoReconnect?: boolean, // default true
|
|
48
|
+
* onTokenRefreshNeeded?: (oldToken: string) => Promise<string|null>,
|
|
49
|
+
* // retry が MAX_RETRIES_BEFORE_TOKEN_CHECK に達した時に呼ばれる。
|
|
50
|
+
* // 新 token を返すと idToken を差し替えて retryCount をリセットして再接続継続。
|
|
51
|
+
* // null を返すと諦めず exponential backoff を続行 (token は古いまま)。
|
|
52
|
+
* }} cfg
|
|
53
|
+
*/
|
|
54
|
+
constructor(cfg: any);
|
|
55
|
+
cfg: any;
|
|
56
|
+
idToken: any;
|
|
57
|
+
onTokenRefreshNeeded: any;
|
|
58
|
+
onReopen: any;
|
|
59
|
+
_everConnected: boolean;
|
|
60
|
+
/** @type {import("ws").WebSocket | null} */
|
|
61
|
+
ws: any | null;
|
|
62
|
+
status: "disconnected";
|
|
63
|
+
/** @type {Map<string, ((msg:any|Error)=>void)[]>} action+op → FIFO の resolver 配列 */
|
|
64
|
+
pending: Map<string, ((msg: any | Error) => void)[]>;
|
|
65
|
+
/** @type {((msg:any)=>void)[]} 任意メッセージのリスナ */
|
|
66
|
+
listeners: ((msg: any) => void)[];
|
|
67
|
+
/** @type {Map<string, Set<(msg:any)=>void>>} action+op → 永続購読 fn 集合 (biz3 の pub* 系イベント受信用) */
|
|
68
|
+
subscribers: Map<string, Set<(msg: any) => void>>;
|
|
69
|
+
/** @type {any[]} 未接続中の送信をバッファ */
|
|
70
|
+
messageQueue: any[];
|
|
71
|
+
retryCount: number;
|
|
72
|
+
closedByUser: boolean;
|
|
73
|
+
lastActiveTime: number;
|
|
74
|
+
lastTickTime: number;
|
|
75
|
+
_refreshedThisCycle: boolean;
|
|
76
|
+
keepaliveTimer: NodeJS.Timeout;
|
|
77
|
+
pongTimer: NodeJS.Timeout;
|
|
78
|
+
connectTimer: any;
|
|
79
|
+
reconnectTimer: any;
|
|
80
|
+
sleepDetectorTimer: NodeJS.Timeout;
|
|
81
|
+
_connectPromise: Promise<any>;
|
|
82
|
+
_initialConnectResolve: (value: any) => void;
|
|
83
|
+
_initialConnectReject: (reason?: any) => void;
|
|
84
|
+
log(...args: any[]): void;
|
|
85
|
+
/**
|
|
86
|
+
* WS 接続を確立。失敗時は reject。成功後の切断は auto-reconnect される。
|
|
87
|
+
*/
|
|
88
|
+
connect(): Promise<any>;
|
|
89
|
+
/** 明示的にクローズ。auto-reconnect は抑止される。 */
|
|
90
|
+
close(): void;
|
|
91
|
+
/**
|
|
92
|
+
* リクエスト送信。応答 (action+op 一致) を1個待つ。FIFO。
|
|
93
|
+
* 未接続中は messageQueue に積まれ、接続復帰後 flush される。
|
|
94
|
+
*/
|
|
95
|
+
request(payload: any, timeoutMs?: number): Promise<any>;
|
|
96
|
+
/** 応答を期待しない fire-and-forget 送信。 */
|
|
97
|
+
send(payload: any): void;
|
|
98
|
+
onMessage(fn: any): () => void;
|
|
99
|
+
/**
|
|
100
|
+
* 特定 action+op の永続購読。biz3 の `pubDeviceStateChange` などの async push を受ける。
|
|
101
|
+
*
|
|
102
|
+
* @param {string} key `"<action>:<op>"` 形式。op が無い場合は `"<action>:"`
|
|
103
|
+
* @param {(msg:any)=>void} fn
|
|
104
|
+
* @returns {()=>void} unsubscribe
|
|
105
|
+
*/
|
|
106
|
+
subscribe(key: string, fn: (msg: any) => void): () => void;
|
|
107
|
+
/**
|
|
108
|
+
* keepalive 1往復で接続を実検証する。timeout で reject。
|
|
109
|
+
* 注: biz3 の keepalive ack は `success` ではなく `connectionId` を返す
|
|
110
|
+
* (WebSocketManager.ts:72-83)。なので応答が**届いたこと自体**を生存判定とし、
|
|
111
|
+
* success フィールドの有無には依存しない (旧実装は !!resp.success で常に false の恐れ)。
|
|
112
|
+
*/
|
|
113
|
+
ping(timeoutMs?: number): Promise<boolean>;
|
|
114
|
+
/** 接続状態 (デバッグ・テスト用)。 */
|
|
115
|
+
getStatus(): "disconnected";
|
|
116
|
+
_initWebSocket(): void;
|
|
117
|
+
_onOpen(): void;
|
|
118
|
+
_onClose(code: any, reason: any): void;
|
|
119
|
+
_onError(err: any): void;
|
|
120
|
+
/** 受動的再接続 (close を契機)。exponential backoff。 */
|
|
121
|
+
_handleReconnect(): void;
|
|
122
|
+
/** 能動的再接続 (pong timeout / sleep wake / idle 検知)。delay なし。 */
|
|
123
|
+
_reconnect(): void;
|
|
124
|
+
_onMessage(raw: any): void;
|
|
125
|
+
_registerPending(key: any, resolver: any): void;
|
|
126
|
+
_unregisterPending(key: any, resolver: any): void;
|
|
127
|
+
_rejectAllPending(err: any): void;
|
|
128
|
+
_sendOrQueue(payload: any): void;
|
|
129
|
+
_flushMessageQueue(): void;
|
|
130
|
+
_startKeepalive(): void;
|
|
131
|
+
_triggerHeartbeatCheck(): void;
|
|
132
|
+
_clearKeepalive(): void;
|
|
133
|
+
_startSleepDetector(): void;
|
|
134
|
+
_stopSleepDetector(): void;
|
|
135
|
+
_wakeUpConnection(): void;
|
|
136
|
+
_clearAllTimers(): void;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.js"],"names":[],"mappings":"AAokBA;;;;;;;;;;;;GAYG;AACH,+BAVW,YAAY,UACZ;IACN,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,WAAW,GAAC,YAAY,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB,gBAkBH;AAED;;;;;;;;GAQG;AACH,mCAHW,YAAY,UACZ;IAAC,QAAQ,EAAC,MAAM,CAAC;IAAC,YAAY,EAAC,MAAM,CAAC;IAAC,SAAS,EAAC,MAAM,CAAA;CAAC,gBAelE;AAzkBD;;;GAAyG;AAIzG;IACE;;;;;;;;;;;;OAYG;IACH,sBAyCC;IAtCC,SAAoE;IACpE,aAA0B;IAC1B,0BAA4D;IAG5D,cAAoC;IACpC,wBAA2B;IAE3B,4CAA4C;IAC5C,IADW,GAAsB,GAAG,IAAI,CAC1B;IACd,uBAAiC;IAEjC,oFAAoF;IACpF,SADW,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAC,GAAG,GAAC,KAAK,KAAG,IAAI,CAAC,EAAE,CAAC,CACzB;IACxB,8CAA8C;IAC9C,WADW,CAAC,CAAC,GAAG,EAAC,GAAG,KAAG,IAAI,CAAC,EAAE,CACX;IACnB,8FAA8F;IAC9F,aADW,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAC,GAAG,KAAG,IAAI,CAAC,CAAC,CAChB;IAC5B,iCAAiC;IACjC,cADW,GAAG,EAAE,CACM;IAEtB,mBAAmB;IACnB,sBAAyB;IACzB,uBAAgC;IAChC,qBAA8B;IAC9B,6BAAgC;IAGhC,+BAA0B;IAC1B,0BAAqB;IACrB,kBAAwB;IACxB,oBAA0B;IAC1B,mCAA8B;IAG9B,8BAA2B;IAC3B,6CAAkC;IAClC,8CAAiC;IAGnC,0BAEC;IAID;;OAEG;IACH,wBAoBC;IAED,sCAAsC;IACtC,cA2BC;IAED;;;OAGG;IACH,wDAeC;IAED,mCAAmC;IACnC,yBAEC;IAED,+BAOC;IAED;;;;;;OAMG;IACH,eAJW,MAAM,MACN,CAAC,GAAG,EAAC,GAAG,KAAG,IAAI,GACb,MAAI,IAAI,CAYpB;IAED;;;;;OAKG;IACH,2CAGC;IAED,wBAAwB;IACxB,4BAEC;IAID,uBA2BC;IAED,gBAuBC;IAED,uCA4BC;IAED,yBAGC;IAID,8CAA8C;IAC9C,yBAoCC;IAED,6DAA6D;IAC7D,mBAgBC;IAID,2BAsCC;IAED,gDAIC;IAED,kDAMC;IAED,kCAOC;IAID,iCAaC;IAED,2BAqBC;IAID,wBAiBC;IAED,+BAYC;IAED,wBAGC;IAID,4BAaC;IAED,2BAEC;IAED,0BAQC;IAID,wBAIC;CACF"}
|
package/types/util.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WS op の応答 `resp` を検査し、失敗していれば例外を投げる。成功なら resp を返す。
|
|
3
|
+
*
|
|
4
|
+
* biz3 の応答には 2 系統あり、本ライブラリも両方を扱う:
|
|
5
|
+
* - lenient (既定): `success` フィールドが**明示的に false** の時だけ失敗扱い。
|
|
6
|
+
* `success` を持たない応答 (data だけ返る op、push 集約の完了通知など) は成功とみなす。
|
|
7
|
+
* - strict: `success === true` を要求し、欠落していても失敗扱い
|
|
8
|
+
* (常に success を返すと分かっている op 用)。
|
|
9
|
+
*
|
|
10
|
+
* @template T
|
|
11
|
+
* @param {T} resp WS 応答メッセージ
|
|
12
|
+
* @param {string} op 失敗時メッセージに使う op ラベル
|
|
13
|
+
* @param {{strict?:boolean}} [opts]
|
|
14
|
+
* @returns {T} 成功時はそのまま resp を返す (呼び出し側で resp.data 等を取り出せる)
|
|
15
|
+
* @throws {Error} 失敗時 (`<op> failed: <message|JSON>`)
|
|
16
|
+
*/
|
|
17
|
+
export function assertSuccess<T>(resp: T, op: string, { strict }?: {
|
|
18
|
+
strict?: boolean;
|
|
19
|
+
}): T;
|
|
20
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AACH,8BAPa,CAAC,QACH,CAAC,MACD,MAAM,eACN;IAAC,MAAM,CAAC,EAAC,OAAO,CAAA;CAAC,GACf,CAAC,CASb"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# vendor/biz3 — 公式 biz3 由来の純定数 (原文ママ)
|
|
2
|
+
|
|
3
|
+
CANDY-HOUSE/biz.candyhouse.co (通称 "biz3", MIT) の **React 非依存・import ゼロの純定数ファイル**を原文のまま
|
|
4
|
+
コピーしたもの。当実装はこれらを **直接 import** して single source of truth とする
|
|
5
|
+
(手書きで写すと推測ミス=定数のズレが入るため。実際 irType/productType 等で過去に発生)。
|
|
6
|
+
|
|
7
|
+
| ファイル | biz3 の元パス | 当実装での用途 |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `constants/sesameDeviceModel.js` | `src/constants/sesameDeviceModel.js` | `crypto.js` の PRODUCT_TYPE / model 名 |
|
|
10
|
+
| `constants/messageConstants.js` | `src/constants/messageConstants.js` | ACTION 文字列 / WS_HEARTBEAT_INTERVAL_MS |
|
|
11
|
+
| `constants/cmdCode.js` | `src/constants/cmdCode.js` | item code 参照 |
|
|
12
|
+
|
|
13
|
+
## 更新方法
|
|
14
|
+
|
|
15
|
+
biz3 が定数を変えたら、元リポ (references) から再コピーするだけ:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
cp <biz3>/src/constants/{sesameDeviceModel,messageConstants,cmdCode}.js vendor/biz3/constants/
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`package.json` の `{"type":"module"}` は Node が ESM として解釈するために置いている
|
|
22
|
+
(biz3 本体は CRA で type 未指定のため、ここだけ補う)。
|
|
23
|
+
|
|
24
|
+
## 取り込んでいないもの (構造的に直接 import 不可)
|
|
25
|
+
|
|
26
|
+
- **irType** (`src/pages/personal/devices/wifi-module/ir/ir-type-list/index.js`): MUI/JSX
|
|
27
|
+
コンポーネントのため import 不可。ただし中身は **5 種のみ** (air 0xc000 / tv 0x2000 /
|
|
28
|
+
light 0xe000 / fan 0x8000 / learn) で、`src/crypto.js` の `IR_TYPE` に出所コメント付きで全て保持済み。
|
|
29
|
+
**重要**: `learn` は ir-type-list の UI 値 `0xfeff` ではなく **実 type `0xfe00`** が正
|
|
30
|
+
(`.../ir/learn/index.js:142` で保存時 `type: 0xfe00` を確認)。JSX をそのまま写すと learn が
|
|
31
|
+
バグるため、手書き保持が結果的に正しい。
|
|
32
|
+
- **lockModelDevices** (`gUtils.js`): gConfig 等に依存するため import 不可。
|
|
33
|
+
`src/config.js` の `LOCK_MODELS` に biz3 の14機種をコメント付きで手書き保持。
|
|
34
|
+
- **wsUrl** (`env_config.js`): biz3 は `/public` だが元実装が実機で疎通したのは
|
|
35
|
+
`/production`。対立があり直接採用しないため取り込まない (config.js のコメント参照)。
|
|
36
|
+
|
|
37
|
+
ライセンスは CANDY HOUSE MIT (リポルートの `LICENSE.biz3`)。
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export namespace cmdCode {
|
|
2
|
+
let ssmOSUpdate: number;
|
|
3
|
+
let cardPut: number;
|
|
4
|
+
let cardDelete: number;
|
|
5
|
+
let cardSet: number;
|
|
6
|
+
let cardSetFinish: number;
|
|
7
|
+
let fingerPut: number;
|
|
8
|
+
let fingerDelete: number;
|
|
9
|
+
let fingerSet: number;
|
|
10
|
+
let fingerSetFinish: number;
|
|
11
|
+
let passwordPut: number;
|
|
12
|
+
let passwordDelete: number;
|
|
13
|
+
let passwordSet: number;
|
|
14
|
+
let passwordSetFinish: number;
|
|
15
|
+
let SSM2_ITEM_CODE_MECH_STATUS: number;
|
|
16
|
+
let HUB3_ITEM_CODE_LED_DUTY: number;
|
|
17
|
+
let SSM3_ITEM_ADD_SESAME: number;
|
|
18
|
+
let SSM3_ITEM_PUB_KEY_SESAME: number;
|
|
19
|
+
let SSM3_ITEM_REMOVE_SESAME: number;
|
|
20
|
+
let SSM_OS3_CARD_CHANGE: number;
|
|
21
|
+
let SSM_OS3_CARD_DELETE: number;
|
|
22
|
+
let SSM_OS3_CARD_GET: number;
|
|
23
|
+
let SSM_OS3_CARD_NOTIFY: number;
|
|
24
|
+
let SSM_OS3_CARD_LAST: number;
|
|
25
|
+
let SSM_OS3_CARD_FIRST: number;
|
|
26
|
+
let SSM_OS3_CARD_MODE_GET: number;
|
|
27
|
+
let SSM_OS3_CARD_MODE_SET: number;
|
|
28
|
+
let HUB3_MATTER_PAIRING_CODE: number;
|
|
29
|
+
let SSM_OS3_CARD_ADD: number;
|
|
30
|
+
let HUB3_MATTER_PAIRING_WINDOW: number;
|
|
31
|
+
let STP_ITEM_CODE_CARDS_ADD: number;
|
|
32
|
+
let STP_ITEM_CODE_CARDS_DELETE: number;
|
|
33
|
+
let STP_ITEM_CODE_PASSCODES_ADD: number;
|
|
34
|
+
let STP_ITEM_CODE_PASSCODES_DELETE: number;
|
|
35
|
+
let STP_ITEM_CODE_PASSCODE_CHANGE_VALUE: number;
|
|
36
|
+
let SSM_OS3_PASSCODE_CHANGE: number;
|
|
37
|
+
let SSM_OS3_PASSCODE_DELETE: number;
|
|
38
|
+
let SSM_OS3_PASSCODE_GET: number;
|
|
39
|
+
let SSM_OS3_PASSCODE_NOTIFY: number;
|
|
40
|
+
let SSM_OS3_PASSCODE_LAST: number;
|
|
41
|
+
let SSM_OS3_PASSCODE_FIRST: number;
|
|
42
|
+
let SSM_OS3_PASSCODE_MODE_GET: number;
|
|
43
|
+
let SSM_OS3_PASSCODE_MODE_SET: number;
|
|
44
|
+
let SSM_OS3_PASSCODE_ADD: number;
|
|
45
|
+
let HUB3_ITEM_CODE_RELAY_SWITCH: number;
|
|
46
|
+
let HUB3_ITEM_CODE_CLEAR_WIFI_SSID: number;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=cmdCode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmdCode.d.ts","sourceRoot":"","sources":["cmdCode.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/* 旧版 biz 的部分代码:
|
|
2
|
+
- Sesame5 操作
|
|
3
|
+
- 01 添加sesame设备 - 從STP發送到IoT
|
|
4
|
+
- 02 删除sesame设备 - 從STP發送到IoT
|
|
5
|
+
- 03 stp login sesame - 從STP發送到IoT
|
|
6
|
+
{ "op": "01", "s": "UUID( 36 bytes )" }
|
|
7
|
+
- 卡片操作
|
|
8
|
+
- 11: 上報卡片 - 從刷卡機添加(from STP to IoT)
|
|
9
|
+
- 12: 上報刪除卡片 - 從刷卡機刪除(from STP to IoT)
|
|
10
|
+
- 13: 修改卡片 - 從IoT發送到STP
|
|
11
|
+
- 14: 插入卡片 - 從IoT發送到STP
|
|
12
|
+
- 15: 刪除卡片 - 從IoT發送到STP
|
|
13
|
+
- 18: 進入卡片錄入模式
|
|
14
|
+
- 19: 進入卡片驗證模式
|
|
15
|
+
- 6D: get cards list (from IoT to STP) SSM_OS3_CARD_GET = 109, // 0x6D
|
|
16
|
+
- B6: put cards list (from IoT to STP) STP_ITEM_CODE_CARDS_ADD = 182, // 0xB6
|
|
17
|
+
|
|
18
|
+
- 指纹
|
|
19
|
+
- 21 上报指纹 (刷卡机添加 from STP to IoT)
|
|
20
|
+
- 22 删除指纹 (from STP to IoT)
|
|
21
|
+
// - 23 修改指纹name (only for name)
|
|
22
|
+
// - 24 插入指纹 (from IoT to STP) do not support
|
|
23
|
+
- 25 删除指纹 (from IoT to STP)
|
|
24
|
+
- 28 進入指纹錄入模式 (from IoT to STP)
|
|
25
|
+
- 29 進入指纹驗證模式 (from IoT to STP)
|
|
26
|
+
|
|
27
|
+
- 密碼操作
|
|
28
|
+
- 31: 上報密碼 - 從STP發送到IoT V
|
|
29
|
+
- 32: 上報刪除密碼 - 從STP發送到IoT V
|
|
30
|
+
- 33: 修改密碼 - 從IoT發送到STP
|
|
31
|
+
- 34: 插入密碼 - 從IoT發送到STP V
|
|
32
|
+
- 35: 刪除密碼 - 從IoT發送到STP V
|
|
33
|
+
- 38: 進入密碼錄入模式 - 從IoT發送到STP V
|
|
34
|
+
- 39: 進入密碼驗證模式 - 從IoT發送到STP V
|
|
35
|
+
- 7D: get cards list (from IoT to STP) SSM_OS3_PASSCODE_GET = 125, // 0x7D
|
|
36
|
+
|
|
37
|
+
- 機械狀態
|
|
38
|
+
- m: 上報機械狀態 - 從STP發送到IoT
|
|
39
|
+
{"m":"c70c"}
|
|
40
|
+
c70c: 3271 mV
|
|
41
|
+
- Sesame Touch Pro Status
|
|
42
|
+
- 183: 上報STP狀態 - 從STP發送到IoT
|
|
43
|
+
|
|
44
|
+
Biz3: 尽量靠拢刷卡机的 BLE 代码 https://github.com/CANDY-HOUSE/SesameOS3_OM6621_2933/blob/master/external/candy/candy.h#L85
|
|
45
|
+
*/
|
|
46
|
+
export const cmdCode = {
|
|
47
|
+
ssmOSUpdate: 0x03,
|
|
48
|
+
cardPut: 14,
|
|
49
|
+
cardDelete: 15,
|
|
50
|
+
cardSet: 18,
|
|
51
|
+
cardSetFinish: 19,
|
|
52
|
+
fingerPut: 24,
|
|
53
|
+
fingerDelete: 25,
|
|
54
|
+
fingerSet: 28,
|
|
55
|
+
fingerSetFinish: 29,
|
|
56
|
+
passwordPut: 34,
|
|
57
|
+
passwordDelete: 35,
|
|
58
|
+
passwordSet: 38,
|
|
59
|
+
passwordSetFinish: 39,
|
|
60
|
+
SSM2_ITEM_CODE_MECH_STATUS: 81,
|
|
61
|
+
HUB3_ITEM_CODE_LED_DUTY: 92,
|
|
62
|
+
SSM3_ITEM_ADD_SESAME: 101,
|
|
63
|
+
SSM3_ITEM_PUB_KEY_SESAME: 102,
|
|
64
|
+
SSM3_ITEM_REMOVE_SESAME: 103,
|
|
65
|
+
SSM_OS3_CARD_CHANGE: 107,
|
|
66
|
+
SSM_OS3_CARD_DELETE: 108,
|
|
67
|
+
SSM_OS3_CARD_GET: 109,
|
|
68
|
+
SSM_OS3_CARD_NOTIFY: 110,
|
|
69
|
+
SSM_OS3_CARD_LAST: 111,
|
|
70
|
+
SSM_OS3_CARD_FIRST: 112,
|
|
71
|
+
SSM_OS3_CARD_MODE_GET: 113,
|
|
72
|
+
SSM_OS3_CARD_MODE_SET: 114,
|
|
73
|
+
HUB3_MATTER_PAIRING_CODE: 137,
|
|
74
|
+
SSM_OS3_CARD_ADD: 140,
|
|
75
|
+
HUB3_MATTER_PAIRING_WINDOW: 153,
|
|
76
|
+
STP_ITEM_CODE_CARDS_ADD: 182, // 0xB6
|
|
77
|
+
STP_ITEM_CODE_CARDS_DELETE: 183, // 0xB7
|
|
78
|
+
STP_ITEM_CODE_PASSCODES_ADD: 184,
|
|
79
|
+
STP_ITEM_CODE_PASSCODES_DELETE: 185,
|
|
80
|
+
STP_ITEM_CODE_PASSCODE_CHANGE_VALUE: 137,
|
|
81
|
+
SSM_OS3_PASSCODE_CHANGE: 123,
|
|
82
|
+
SSM_OS3_PASSCODE_DELETE: 124,
|
|
83
|
+
SSM_OS3_PASSCODE_GET: 125,
|
|
84
|
+
SSM_OS3_PASSCODE_NOTIFY: 126,
|
|
85
|
+
SSM_OS3_PASSCODE_LAST: 127,
|
|
86
|
+
SSM_OS3_PASSCODE_FIRST: 128,
|
|
87
|
+
SSM_OS3_PASSCODE_MODE_GET: 129,
|
|
88
|
+
SSM_OS3_PASSCODE_MODE_SET: 130,
|
|
89
|
+
SSM_OS3_PASSCODE_ADD: 138,
|
|
90
|
+
HUB3_ITEM_CODE_RELAY_SWITCH: 208,
|
|
91
|
+
HUB3_ITEM_CODE_CLEAR_WIFI_SSID: 210,
|
|
92
|
+
};
|