@tuya-sat/sdf-main-sdk 6.2.40-alpha.1 → 6.2.42
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/README.md +24 -7
- package/dist/{364.952e420f.chunk.js → 364.977a9eee.chunk.js} +1 -1
- package/dist/{364.952e420f.chunk.js.map → 364.977a9eee.chunk.js.map} +1 -1
- package/dist/api/urls.d.ts +1 -0
- package/dist/components/Auth/AuthLogoutPage/index.d.ts +5 -0
- package/dist/components/Auth/authInfoCookie.d.ts +118 -0
- package/dist/components/Auth/hooks/useSaasAuthInfoCookie.d.ts +8 -1
- package/dist/components/Auth/index.d.ts +4 -1
- package/dist/components/Auth/types/index.d.ts +9 -1
- package/dist/components/Layout/antd/components/HomeSelect/useHomeInfo.d.ts +3 -0
- package/dist/components/Layout/antd/components/HomeSelect/useTagColors.d.ts +17 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/main.bundle.js +1 -1
- package/dist/main.bundle.js.map +1 -1
- package/dist/manifest.json +2 -2
- package/dist/mqtt/index.d.ts +1 -1
- package/dist/utils/common.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -70,15 +70,17 @@ SDK 默认导出 V6 版本 MQTT 能力,可用于订阅、发布消息,也可
|
|
|
70
70
|
|
|
71
71
|
#### 监听连接状态
|
|
72
72
|
|
|
73
|
-
`onStatusChange` 用于监听 MQTT
|
|
73
|
+
`onStatusChange` 用于监听 MQTT 连接状态变化。断连后主应用会自动尝试恢复:先用旧凭证重连最多 5 次,仍失败则刷新凭证重新建连(最多 2 轮,第 2 轮起冷却 30s)。**只有当凭证恢复也彻底失败时才触发 `reconnect_failed`**,业务侧应仅在该状态下执行兜底逻辑。
|
|
74
74
|
|
|
75
75
|
```ts
|
|
76
76
|
import { mqtt } from '@tuya-sat/sdf-main-sdk';
|
|
77
77
|
|
|
78
78
|
const offMqttStatus = mqtt.onStatusChange((event) => {
|
|
79
79
|
if (event.status === 'reconnect_failed') {
|
|
80
|
-
//
|
|
80
|
+
// 凭证恢复也彻底失败,执行业务兜底
|
|
81
81
|
}
|
|
82
|
+
// 若希望感知「正在恢复」,可监听 recovering:
|
|
83
|
+
// if (event.status === 'recovering') { /* 主应用正在自行恢复,无需兜底 */ }
|
|
82
84
|
});
|
|
83
85
|
|
|
84
86
|
// 不再需要监听时清理
|
|
@@ -90,7 +92,7 @@ offMqttStatus();
|
|
|
90
92
|
```ts
|
|
91
93
|
const offMqttStatus = props.mqtt.onStatusChange((event) => {
|
|
92
94
|
if (event.status === 'reconnect_failed') {
|
|
93
|
-
//
|
|
95
|
+
// 凭证恢复彻底失败,子应用业务兜底
|
|
94
96
|
}
|
|
95
97
|
});
|
|
96
98
|
|
|
@@ -106,6 +108,7 @@ offMqttStatus();
|
|
|
106
108
|
type MqttStatus =
|
|
107
109
|
| 'connected'
|
|
108
110
|
| 'reconnecting'
|
|
111
|
+
| 'recovering'
|
|
109
112
|
| 'reconnect_failed'
|
|
110
113
|
| 'offline'
|
|
111
114
|
| 'close'
|
|
@@ -119,11 +122,25 @@ interface MqttStatusEvent {
|
|
|
119
122
|
}
|
|
120
123
|
```
|
|
121
124
|
|
|
122
|
-
|
|
125
|
+
#### 可监听状态一览
|
|
123
126
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
+
`onStatusChange` 可监听到以下 7 种状态,按连接生命周期梳理:
|
|
128
|
+
|
|
129
|
+
| status | 含义 | `remainingRetries` / `maxRetries` | 业务建议 |
|
|
130
|
+
|---|---|---|---|
|
|
131
|
+
| `connected` | 连接成功 | 5 / 5 | 恢复订阅、刷新业务数据。**重试与恢复轮数都会重置为默认值**。 |
|
|
132
|
+
| `reconnecting` | 用旧凭证重连中 | 剩余次数 / 5 | 可选:展示弱网提示。无需兜底。 |
|
|
133
|
+
| `recovering` | 旧凭证重连耗尽,主应用已刷新凭证重新建连(最多 2 轮,第 2 轮起冷却 30s) | 0 / 5 | 过渡态,通常无需处理。可做轻度提示。 |
|
|
134
|
+
| `offline` | 底层连接离线 | 剩余次数 / 5 | 通常是 `reconnecting`/`close` 的伴随事件。 |
|
|
135
|
+
| `close` | 底层连接关闭 | 剩余次数 / 5 | 通常是断连的伴随事件。 |
|
|
136
|
+
| `error` | 底层错误(CONNACK 拒绝)或拉配置失败,`event.error` 携带原始错误 | 剩余次数 / 5(底层);剩余恢复轮数 / 2(拉配置失败) | 可选:记录日志。主应用可能据此自动恢复,无需兜底。 |
|
|
137
|
+
| `reconnect_failed` | **凭证恢复也彻底失败,主应用已停止自动重连** | 0 / 2 | **业务兜底的唯一时机**(如本地降级、提示用户检查网络)。 |
|
|
138
|
+
|
|
139
|
+
字段说明:
|
|
140
|
+
|
|
141
|
+
- `remainingRetries`:当前剩余次数。`connected` 时为最大值;`reconnecting` 时逐次递减;`recovering`/`reconnect_failed` 时为 0。
|
|
142
|
+
- `maxRetries`:区分两类上限——旧凭证重连上限 `5`(`connected`/`reconnecting`/`recovering`/`offline`/`close` 及底层 `error`),凭证恢复轮数上限 `2`(拉配置失败的 `error`、`reconnect_failed`)。可用此值区分事件来源。
|
|
143
|
+
- `error`:仅 `error` 状态携带原始错误对象。
|
|
127
144
|
|
|
128
145
|
### Hooks
|
|
129
146
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_SDF=self.webpackChunk_SDF||[]).push([[364],{364:function(e,t,n){n.d(t,{getCLS:function(){return v},getFCP:function(){return g},getFID:function(){return F},getLCP:function(){return k},getTTFB:function(){return C}});var i,a,r,o,u=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v1-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver(function(e){return e.getEntries().map(t)});return n.observe({type:e,buffered:!0}),n}}catch(e){}},f=function(e,t){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(e){addEventListener("pageshow",function(t){t.persisted&&e(t)},!0)},m="function"==typeof WeakSet?new WeakSet:new Set,p=function(e,t,n){var i;return function(){t.value>=0&&(n||m.has(t)||"hidden"===document.visibilityState)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},v=function(e,t){var n,i=u("CLS",0),a=function(e){e.hadRecentInput||(i.value+=e.value,i.entries.push(e),n())},r=c("layout-shift",a);r&&(n=p(e,i,t),f(function(){r.takeRecords().map(a),n()}),s(function(){i=u("CLS",0),n=p(e,i,t)}))},d=-1,l=function(){return"hidden"===document.visibilityState?0:1/0},h=function(){f(function(e){var t=e.timeStamp;d=t},!0)},S=function(){return d<0&&(d=l(),h(),s(function(){setTimeout(function(){d=l(),h()},0)})),{get timeStamp(){return d}}},g=function(e,t){var n,i=S(),a=u("FCP"),r=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime<i.timeStamp&&(a.value=e.startTime,a.entries.push(e),m.add(a),n()))},o=performance.getEntriesByName("first-contentful-paint")[0],f=o?null:c("paint",r);(o||f)&&(n=p(e,a,t),o&&r(o),s(function(i){a=u("FCP"),n=p(e,a,t),requestAnimationFrame(function(){requestAnimationFrame(function(){a.value=performance.now()-i.timeStamp,m.add(a),n()})})}))},y={passive:!0,capture:!0},E=new Date,w=function(e,t){i||(i=t,a=e,r=new Date,b(removeEventListener),L())},L=function(){if(a>=0&&a<r-E){var e={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+a};o.forEach(function(t){t(e)}),o=[]}},T=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){w(e,t),a()},i=function(){a()},a=function(){removeEventListener("pointerup",n,y),removeEventListener("pointercancel",i,y)};addEventListener("pointerup",n,y),addEventListener("pointercancel",i,y)}(t,e):w(t,e)}},b=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach(function(t){return e(t,T,y)})},F=function(e,t){var n,r=S(),v=u("FID"),d=function(e){e.startTime<r.timeStamp&&(v.value=e.processingStart-e.startTime,v.entries.push(e),m.add(v),n())},l=c("first-input",d);n=p(e,v,t),l&&f(function(){l.takeRecords().map(d),l.disconnect()},!0),l&&s(function(){var r;v=u("FID"),n=p(e,v,t),o=[],a=-1,i=null,b(addEventListener),r=d,o.push(r),L()})},k=function(e,t){var n,i=S(),a=u("LCP"),r=function(e){var t=e.startTime;t<i.timeStamp&&(a.value=t,a.entries.push(e)),n()},o=c("largest-contentful-paint",r);if(o){n=p(e,a,t);var v=function(){m.has(a)||(o.takeRecords().map(r),o.disconnect(),m.add(a),n())};["keydown","click"].forEach(function(e){addEventListener(e,v,{once:!0,capture:!0})}),f(v,!0),s(function(i){a=u("LCP"),n=p(e,a,t),requestAnimationFrame(function(){requestAnimationFrame(function(){a.value=performance.now()-i.timeStamp,m.add(a),n()})})})}},C=function(e){var t,n=u("TTFB");t=function(){try{var t=performance.getEntriesByType("navigation")[0]||function(){var e=performance.timing,t={entryType:"navigation",startTime:0};for(var n in e)"navigationStart"!==n&&"toJSON"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0)return;n.entries=[t],e(n)}catch(e){}},"complete"===document.readyState?setTimeout(t,0):addEventListener("pageshow",t)}}}]);
|
|
2
|
-
//# sourceMappingURL=364.
|
|
2
|
+
//# sourceMappingURL=364.977a9eee.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"364.
|
|
1
|
+
{"version":3,"file":"364.977a9eee.chunk.js","mappings":"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","sources":["webpack://_SDF/./node_modules/web-vitals/dist/web-vitals.js"],"sourcesContent":["var e,t,n,i,a=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:\"v1-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12)}},r=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if(\"first-input\"===e&&!(\"PerformanceEventTiming\"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},o=function(e,t){var n=function n(i){\"pagehide\"!==i.type&&\"hidden\"!==document.visibilityState||(e(i),t&&(removeEventListener(\"visibilitychange\",n,!0),removeEventListener(\"pagehide\",n,!0)))};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},c=function(e){addEventListener(\"pageshow\",(function(t){t.persisted&&e(t)}),!0)},u=\"function\"==typeof WeakSet?new WeakSet:new Set,f=function(e,t,n){var i;return function(){t.value>=0&&(n||u.has(t)||\"hidden\"===document.visibilityState)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},s=function(e,t){var n,i=a(\"CLS\",0),u=function(e){e.hadRecentInput||(i.value+=e.value,i.entries.push(e),n())},s=r(\"layout-shift\",u);s&&(n=f(e,i,t),o((function(){s.takeRecords().map(u),n()})),c((function(){i=a(\"CLS\",0),n=f(e,i,t)})))},m=-1,p=function(){return\"hidden\"===document.visibilityState?0:1/0},v=function(){o((function(e){var t=e.timeStamp;m=t}),!0)},d=function(){return m<0&&(m=p(),v(),c((function(){setTimeout((function(){m=p(),v()}),0)}))),{get timeStamp(){return m}}},l=function(e,t){var n,i=d(),o=a(\"FCP\"),s=function(e){\"first-contentful-paint\"===e.name&&(p&&p.disconnect(),e.startTime<i.timeStamp&&(o.value=e.startTime,o.entries.push(e),u.add(o),n()))},m=performance.getEntriesByName(\"first-contentful-paint\")[0],p=m?null:r(\"paint\",s);(m||p)&&(n=f(e,o,t),m&&s(m),c((function(i){o=a(\"FCP\"),n=f(e,o,t),requestAnimationFrame((function(){requestAnimationFrame((function(){o.value=performance.now()-i.timeStamp,u.add(o),n()}))}))})))},h={passive:!0,capture:!0},S=new Date,y=function(i,a){e||(e=a,t=i,n=new Date,w(removeEventListener),g())},g=function(){if(t>=0&&t<n-S){var a={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+t};i.forEach((function(e){e(a)})),i=[]}},E=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,t){var n=function(){y(e,t),a()},i=function(){a()},a=function(){removeEventListener(\"pointerup\",n,h),removeEventListener(\"pointercancel\",i,h)};addEventListener(\"pointerup\",n,h),addEventListener(\"pointercancel\",i,h)}(t,e):y(t,e)}},w=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(t){return e(t,E,h)}))},L=function(n,s){var m,p=d(),v=a(\"FID\"),l=function(e){e.startTime<p.timeStamp&&(v.value=e.processingStart-e.startTime,v.entries.push(e),u.add(v),m())},h=r(\"first-input\",l);m=f(n,v,s),h&&o((function(){h.takeRecords().map(l),h.disconnect()}),!0),h&&c((function(){var r;v=a(\"FID\"),m=f(n,v,s),i=[],t=-1,e=null,w(addEventListener),r=l,i.push(r),g()}))},T=function(e,t){var n,i=d(),s=a(\"LCP\"),m=function(e){var t=e.startTime;t<i.timeStamp&&(s.value=t,s.entries.push(e)),n()},p=r(\"largest-contentful-paint\",m);if(p){n=f(e,s,t);var v=function(){u.has(s)||(p.takeRecords().map(m),p.disconnect(),u.add(s),n())};[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,v,{once:!0,capture:!0})})),o(v,!0),c((function(i){s=a(\"LCP\"),n=f(e,s,t),requestAnimationFrame((function(){requestAnimationFrame((function(){s.value=performance.now()-i.timeStamp,u.add(s),n()}))}))}))}},b=function(e){var t,n=a(\"TTFB\");t=function(){try{var t=performance.getEntriesByType(\"navigation\")[0]||function(){var e=performance.timing,t={entryType:\"navigation\",startTime:0};for(var n in e)\"navigationStart\"!==n&&\"toJSON\"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0)return;n.entries=[t],e(n)}catch(e){}},\"complete\"===document.readyState?setTimeout(t,0):addEventListener(\"pageshow\",t)};export{s as getCLS,l as getFCP,L as getFID,T as getLCP,b as getTTFB};\n"],"names":["e","t","n","i","a","name","value","delta","entries","id","concat","Date","now","Math","floor","random","r","PerformanceObserver","supportedEntryTypes","includes","self","getEntries","map","observe","type","buffered","o","document","visibilityState","removeEventListener","addEventListener","c","persisted","u","WeakSet","Set","f","has","s","hadRecentInput","push","takeRecords","m","p","v","timeStamp","d","setTimeout","l","disconnect","startTime","add","performance","getEntriesByName","requestAnimationFrame","h","passive","capture","S","y","w","g","entryType","target","cancelable","processingStart","forEach","E","L","T","once","b","getEntriesByType","timing","max","navigationStart","responseStart","readyState"],"sourceRoot":""}
|
package/dist/api/urls.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
2
|
export type AuthLogoutPageProps = {
|
|
3
3
|
debug?: boolean;
|
|
4
|
+
/**
|
|
5
|
+
* 当前站点的游客 cookie key,默认 heytuya 的 SAAS_GUEST_INFO_KEY;
|
|
6
|
+
* web_device 传 SAAS_GUEST_INFO_WEB_DEVICE_KEY。
|
|
7
|
+
*/
|
|
8
|
+
guestCookieKey?: string;
|
|
4
9
|
};
|
|
5
10
|
declare const AuthLogoutPage: FC<AuthLogoutPageProps>;
|
|
6
11
|
export default AuthLogoutPage;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Region } from './types';
|
|
2
|
+
export type SdfUser = {
|
|
3
|
+
user_id?: string | number;
|
|
4
|
+
user_nick_name?: string;
|
|
5
|
+
user_name?: string;
|
|
6
|
+
nickname?: string;
|
|
7
|
+
username?: string;
|
|
8
|
+
email?: string;
|
|
9
|
+
head_pic?: string;
|
|
10
|
+
user_type?: number | string;
|
|
11
|
+
userType?: number | string;
|
|
12
|
+
reg_from?: number | string;
|
|
13
|
+
regFrom?: number | string;
|
|
14
|
+
};
|
|
15
|
+
type SdfGlobal = {
|
|
16
|
+
user?: SdfUser;
|
|
17
|
+
region?: Region;
|
|
18
|
+
};
|
|
19
|
+
export declare const getSdf: () => {
|
|
20
|
+
region: string;
|
|
21
|
+
runtime: string;
|
|
22
|
+
env: "pre" | "daily" | "prod";
|
|
23
|
+
isOpenCode?: boolean;
|
|
24
|
+
saas: {
|
|
25
|
+
[key: string]: any;
|
|
26
|
+
is_support_mobile: boolean;
|
|
27
|
+
charge_status: string;
|
|
28
|
+
expire_time: number;
|
|
29
|
+
logo: string;
|
|
30
|
+
title: string;
|
|
31
|
+
background_image: string;
|
|
32
|
+
custom_configs: {
|
|
33
|
+
config_key: "dynamic_theme" | "is_support_theme_change" | "dynamic_header_menu";
|
|
34
|
+
config_group: string;
|
|
35
|
+
platform: string;
|
|
36
|
+
config_id: string;
|
|
37
|
+
config_value_json: string;
|
|
38
|
+
config_name_zh: string;
|
|
39
|
+
config_name_en: string;
|
|
40
|
+
config_value: {
|
|
41
|
+
[key: string]: any;
|
|
42
|
+
};
|
|
43
|
+
}[];
|
|
44
|
+
entries: {
|
|
45
|
+
entry_mode: "normal" | "group" | "mix";
|
|
46
|
+
};
|
|
47
|
+
saas_locales?: Record<string, Record<string, Record<LangKey, string>>>;
|
|
48
|
+
main_app_config?: string;
|
|
49
|
+
multi_org_project?: boolean;
|
|
50
|
+
project_type: string;
|
|
51
|
+
data_model?: "basic" | "smart_space" | "smart_home";
|
|
52
|
+
industry_type?: string;
|
|
53
|
+
};
|
|
54
|
+
base: string;
|
|
55
|
+
saasInfo: {
|
|
56
|
+
entry_info: {
|
|
57
|
+
entry_mode: "normal" | "group" | "mix";
|
|
58
|
+
entries: SaasEntry[];
|
|
59
|
+
};
|
|
60
|
+
apps: MicroApp[];
|
|
61
|
+
apis: Record<string, {
|
|
62
|
+
method: string;
|
|
63
|
+
path: string;
|
|
64
|
+
permission_code: string;
|
|
65
|
+
oem_micro_app_id: string;
|
|
66
|
+
}[]>;
|
|
67
|
+
permissions: Record<string, {
|
|
68
|
+
permission_group: string;
|
|
69
|
+
permission_code: string;
|
|
70
|
+
oem_micro_app_id: string;
|
|
71
|
+
}[]>;
|
|
72
|
+
saas_id_info_list: {
|
|
73
|
+
oem_micro_app_id: string;
|
|
74
|
+
universal_id: string;
|
|
75
|
+
microAppCode: string;
|
|
76
|
+
}[];
|
|
77
|
+
};
|
|
78
|
+
user: {
|
|
79
|
+
user_nick_name: string;
|
|
80
|
+
user_name: string;
|
|
81
|
+
roles: {
|
|
82
|
+
role_code: string;
|
|
83
|
+
role_name: string;
|
|
84
|
+
}[];
|
|
85
|
+
mobile?: string;
|
|
86
|
+
email?: string;
|
|
87
|
+
country_code?: string;
|
|
88
|
+
user_id?: string;
|
|
89
|
+
root_namespace?: string;
|
|
90
|
+
current_namespace?: string;
|
|
91
|
+
current_namespace_name?: string;
|
|
92
|
+
head_pic?: string;
|
|
93
|
+
username?: string;
|
|
94
|
+
nickname?: string;
|
|
95
|
+
timezone_display_name?: string;
|
|
96
|
+
};
|
|
97
|
+
__THIS_IS_LOCAL_DEVELOPMENT_MODE__?: boolean;
|
|
98
|
+
} & SdfGlobal;
|
|
99
|
+
export declare const isGuestUser: (userInfo?: SdfUser) => boolean;
|
|
100
|
+
/**
|
|
101
|
+
* 声明当前站点的游客 cookie key,写入与登出清理共用这一个值。
|
|
102
|
+
* 传 useSaasAuthInfoCookie 的 guestCookieKey 选项会自动登记,无需重复调用。
|
|
103
|
+
*/
|
|
104
|
+
export declare const setGuestCookieKey: (key?: string) => void;
|
|
105
|
+
export declare const getGuestCookieKey: () => string;
|
|
106
|
+
export type ClearAuthInfoCookieOptions = {
|
|
107
|
+
/** 当前登录态是否为游客,默认按 window._SDF.user 判定 */
|
|
108
|
+
isGuest?: boolean;
|
|
109
|
+
/** 当前站点的游客 cookie key,默认取已登记的值 */
|
|
110
|
+
guestCookieKey?: string;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* 登出时清理免登 cookie,按登录态区分清理范围:
|
|
114
|
+
* - 游客登出:只清当前站点的游客 key。SAAS_AUTH_INFO 可能是其他 SaaS 写入的正式账号免登态,不能连带清掉。
|
|
115
|
+
* - 正式账号登出:清 SAAS_AUTH_INFO + 当前站点的游客 key;其他站点的游客 key 不动。
|
|
116
|
+
*/
|
|
117
|
+
export declare const clearAuthInfoCookie: (options?: ClearAuthInfoCookieOptions) => void;
|
|
118
|
+
export {};
|
|
@@ -1 +1,8 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type UseSaasAuthInfoCookieOptions = {
|
|
2
|
+
/**
|
|
3
|
+
* 当前站点的游客 cookie key,默认 heytuya 的 SAAS_GUEST_INFO_KEY;
|
|
4
|
+
* web_device 传 SAAS_GUEST_INFO_WEB_DEVICE_KEY。登出清理会复用这个值。
|
|
5
|
+
*/
|
|
6
|
+
guestCookieKey?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const useSaasAuthInfoCookie: (ready: boolean, options?: UseSaasAuthInfoCookieOptions) => void;
|
|
@@ -7,6 +7,9 @@ export type { AuthLogoutPageProps } from './AuthLogoutPage';
|
|
|
7
7
|
export { useIframeLoginStatus } from './hooks/useIframeLoginStatus';
|
|
8
8
|
export { useIframeLoginPcTicket, sendLoginPcTicketToParent } from './hooks/useIframeLoginPcTicket';
|
|
9
9
|
export { useSaasAuthInfoCookie } from './hooks/useSaasAuthInfoCookie';
|
|
10
|
+
export type { UseSaasAuthInfoCookieOptions } from './hooks/useSaasAuthInfoCookie';
|
|
11
|
+
export { clearAuthInfoCookie, isGuestUser, setGuestCookieKey } from './authInfoCookie';
|
|
12
|
+
export type { ClearAuthInfoCookieOptions } from './authInfoCookie';
|
|
10
13
|
export { buildThirdPartyRedirectUrl, getRegion, getSecondLevelDomain, getThirdPartyLoginParams, getThirdPartyLoginParamsFromUrl, isInIframe, normalizeOfficialLoginUrl, resolveParentOrigin, sanitizeFromValue, } from './utils';
|
|
11
|
-
export { IFRAME_MESSAGE_TYPE, SAAS_AUTH_INFO_KEY, SAAS_GUEST_INFO_KEY, ThirdPartyRegion } from './types';
|
|
14
|
+
export { IFRAME_MESSAGE_TYPE, SAAS_AUTH_INFO_KEY, SAAS_GUEST_INFO_KEY, SAAS_GUEST_INFO_WEB_DEVICE_KEY, ThirdPartyRegion, } from './types';
|
|
12
15
|
export type { AuthIframeMessage, LoginPcMessage, LoginStatusMessage, LogoutTargetSaasMessage, Region, Slug, ThirdPartyLoginParams, } from './types';
|
|
@@ -61,5 +61,13 @@ export type LogoutTargetSaasMessage = {
|
|
|
61
61
|
};
|
|
62
62
|
export type AuthIframeMessage = LoginPcMessage | LoginStatusMessage | LogoutTargetSaasMessage;
|
|
63
63
|
export declare const SAAS_AUTH_INFO_KEY = "SAAS_AUTH_INFO";
|
|
64
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* 游客模式登录态 cookie key(heytuya 游客账号),结构与 SAAS_AUTH_INFO 一致。
|
|
66
|
+
* 游客账号不支持免登其他 SaaS,所以不写 SAAS_AUTH_INFO,只用于免登 heytuya 自己。
|
|
67
|
+
*/
|
|
65
68
|
export declare const SAAS_GUEST_INFO_KEY = "SAAS_GUEST_INFO";
|
|
69
|
+
/**
|
|
70
|
+
* 游客模式登录态 cookie key(web_device 游客账号),结构同上。
|
|
71
|
+
* 与 heytuya 游客分开存放,避免两个 SaaS 的游客态在一级域名下互相免登。
|
|
72
|
+
*/
|
|
73
|
+
export declare const SAAS_GUEST_INFO_WEB_DEVICE_KEY = "SAAS_GUEST_INFO_WEB_DEVICE";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TagColorMap } from "./useTagColors";
|
|
1
2
|
export type SmartHomeIsolationType = "projectId" | "homeId";
|
|
2
3
|
export interface SmartHomeHomeRow {
|
|
3
4
|
home_id: string;
|
|
@@ -38,6 +39,8 @@ export type SmartHomeInfoState = {
|
|
|
38
39
|
projects?: SmartHomeProjectRow[];
|
|
39
40
|
/** 当前作用域 id:优先 last_chosen 的项目,否则家庭(与 qiankun 注入的 projectId 同源,存 SMART_HOME_ID) */
|
|
40
41
|
currentId?: string;
|
|
42
|
+
/** 标签 -> 背景色映射(含内置兜底色) */
|
|
43
|
+
tagColors: TagColorMap;
|
|
41
44
|
};
|
|
42
45
|
export declare const getHomeId: () => string;
|
|
43
46
|
/** 当前作用域隔离类型,与 `project-id` 头对应;无则 null */
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** 标签 -> 背景色(#xxx / #xxxxxx 16 进制)映射,key 统一大写 */
|
|
2
|
+
export type TagColorMap = Record<string, string>;
|
|
3
|
+
/** 接口未返回或颜色非法时的内置兜底色 */
|
|
4
|
+
export declare const DEFAULT_TAG_COLORS: TagColorMap;
|
|
5
|
+
/**
|
|
6
|
+
* 获取标签背景色:
|
|
7
|
+
* 1. tag 转大写后匹配接口返回的颜色;
|
|
8
|
+
* 2. 接口有对应 key 但无颜色值 / 格式校验失败时,用内置默认色(EMS/SMB)兜底;
|
|
9
|
+
* 3. 都命中不到则返回 undefined,交由 antd <Tag> 默认样式渲染。
|
|
10
|
+
*/
|
|
11
|
+
export declare const getTagColor: (tag: string, colors: TagColorMap) => string | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* 请求标签颜色配置:等待 saas-info 上下文就绪后再发起,避免因 React
|
|
14
|
+
* 「子组件 effect 先于父组件」导致该请求早于 /api/saas-info 而无上下文失败。
|
|
15
|
+
* 请求失败静默降级为空对象,最终由 DEFAULT_TAG_COLORS 兜底。
|
|
16
|
+
*/
|
|
17
|
+
export declare const loadTagColors: () => Promise<TagColorMap>;
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export declare let micApps: any;
|
|
|
2
2
|
export declare let permissions: any;
|
|
3
3
|
export declare const universalIds: any[];
|
|
4
4
|
export declare let apis: {};
|
|
5
|
+
export declare const whenSaasInfoReady: () => Promise<void>;
|
|
5
6
|
type TEntryInfo = Partial<Window["_SDF"]["saasInfo"]["entry_info"]>;
|
|
6
7
|
export declare const useSaasInfo: () => {
|
|
7
8
|
entryInfo: TEntryInfo;
|
package/dist/index.d.ts
CHANGED
|
@@ -65,8 +65,8 @@ export interface IHooks {
|
|
|
65
65
|
}
|
|
66
66
|
export type { LoginProps } from './pages/login';
|
|
67
67
|
export { default as LoginPage } from './pages/login';
|
|
68
|
-
export { AuthLoginPage, AuthTicketPage, AuthLogoutPage, useIframeLoginStatus, useIframeLoginPcTicket, useSaasAuthInfoCookie, isInIframe, IFRAME_MESSAGE_TYPE, SAAS_AUTH_INFO_KEY, ThirdPartyRegion, } from './components/Auth';
|
|
69
|
-
export type { AuthLoginPageProps, AuthTicketPageProps, AuthLogoutPageProps, AuthIframeMessage, LoginPcMessage, LoginStatusMessage, LogoutTargetSaasMessage, Region, Slug, ThirdPartyLoginParams, } from './components/Auth';
|
|
68
|
+
export { AuthLoginPage, AuthTicketPage, AuthLogoutPage, useIframeLoginStatus, useIframeLoginPcTicket, useSaasAuthInfoCookie, setGuestCookieKey, clearAuthInfoCookie, isGuestUser, isInIframe, IFRAME_MESSAGE_TYPE, SAAS_AUTH_INFO_KEY, SAAS_GUEST_INFO_KEY, SAAS_GUEST_INFO_WEB_DEVICE_KEY, ThirdPartyRegion, } from './components/Auth';
|
|
69
|
+
export type { AuthLoginPageProps, AuthTicketPageProps, AuthLogoutPageProps, UseSaasAuthInfoCookieOptions, ClearAuthInfoCookieOptions, AuthIframeMessage, LoginPcMessage, LoginStatusMessage, LogoutTargetSaasMessage, Region, Slug, ThirdPartyLoginParams, } from './components/Auth';
|
|
70
70
|
export type { QrLoginProps } from './components/SmartHomeLogin/component/qrLogin';
|
|
71
71
|
export { default as QrLogin } from './components/SmartHomeLogin/component/qrLogin';
|
|
72
72
|
export { default as LoginForm } from './components/BLogin';
|