@tencent-rtc/trtc-agent-skills 0.1.0 → 0.1.3
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/.cursor/rules/ui-mode.mdc +99 -0
- package/AGENTS.md +111 -0
- package/CLAUDE.md +133 -0
- package/CODEBUDDY.md +131 -0
- package/README.md +28 -42
- package/README.zh.md +24 -42
- package/ai-instructions/base.md +13 -0
- package/ai-instructions/ui-mode.md +93 -0
- package/bin/cli.js +428 -13
- package/hooks/cursor-adapter.py +315 -0
- package/hooks/hooks-cursor.json +39 -0
- package/hooks/hooks.json +67 -0
- package/knowledge-base/index.yaml +8 -0
- package/knowledge-base/scenarios/conference/base/general-conference.md +6 -3
- package/knowledge-base/slices/conference/web/integration-audit.md +155 -0
- package/knowledge-base/slices/conference/web/login-auth.md +2 -1
- package/knowledge-base/slices/conference/web/official-roomkit-login-ui.md +41 -13
- package/knowledge-base/slices/conference/web/prejoin-check.md +8 -5
- package/package.json +7 -1
- package/skills/trtc/SKILL.md +7 -6
- package/skills/trtc/room-builder/SKILL.md +4 -9
- package/skills/trtc/room-builder/assets/local-usersig/basic-info-config.ts +39 -0
- package/skills/trtc/room-builder/assets/local-usersig/lib-generate-test-usersig-es.min.d.ts +4 -0
- package/skills/trtc/room-builder/assets/local-usersig/lib-generate-test-usersig-es.min.js +2 -0
- package/skills/trtc-onboarding/SKILL.md +35 -33
- package/skills/trtc-onboarding/reference/path-a2-integrate.md +101 -57
- package/skills/trtc-onboarding/reference/path-b-troubleshoot.md +139 -68
- package/skills/trtc-onboarding/reference/reporting-protocol.md +2 -0
- package/skills/trtc-onboarding/reference/usersig-handling.md +98 -104
- package/skills/trtc-search/SKILL.md +7 -0
- package/skills/trtc-topic/SKILL.md +26 -42
- package/skills/trtc-apply/guardrails/apply_lib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/skills/trtc-apply/guardrails/apply_lib/__pycache__/rule_parser.cpython-313.pyc +0 -0
- package/skills/trtc-topic/guardrails/__pycache__/gate_slice_read.cpython-313.pyc +0 -0
- package/skills/trtc-topic/guardrails/__pycache__/gate_slice_write.cpython-313.pyc +0 -0
- package/skills/trtc-topic/guardrails/__pycache__/stop_require_apply_evidence.cpython-313.pyc +0 -0
- package/skills/trtc-topic/scripts/__pycache__/apply.cpython-313.pyc +0 -0
- package/skills/trtc-topic/scripts/lib/__pycache__/state_machine.cpython-313.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/conftest.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/conftest.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_apply_cli.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_apply_cli.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_end_to_end.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_end_to_end.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_finalize_session.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_finalize_session.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_gates.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_gates.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_session_resolver.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_session_resolver.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_state_machine.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_state_machine.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_stop_require_apply.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_stop_require_apply.cpython-313-pytest-9.0.3.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_topic_skill_invariants.cpython-313-pytest-9.0.2.pyc +0 -0
- package/skills/trtc-topic/tests/__pycache__/test_topic_skill_invariants.cpython-313-pytest-9.0.3.pyc +0 -0
|
@@ -57,39 +57,67 @@ platform: web
|
|
|
57
57
|
| 1 | 标题 `<h1>加入会议</h1>` | 32px |
|
|
58
58
|
| 2 | 输入框:用户 ID | 16px |
|
|
59
59
|
| 3 | 输入框:会议 ID(placeholder: "输入会议 ID(创建时可留空)") | 16px |
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
|
64
|
-
|
|
65
|
-
|
|
|
60
|
+
|
|
61
|
+
**按 `usersig_source` 分支追加字段(二选一,勿混用):**
|
|
62
|
+
|
|
63
|
+
| `usersig_source` | 追加字段(顺序接在会议 ID 之后) |
|
|
64
|
+
|---|---|
|
|
65
|
+
| `local-dev` | 仅凭证说明区(见 §3.1 local-dev)— **无** SDKAppID / UserSig 输入框 |
|
|
66
|
+
| `console` | 输入框 SDKAppID → 输入框 UserSig → 凭证说明区(见 §3.1 console) |
|
|
67
|
+
|
|
68
|
+
| # | 元素 | 与下一项的间距 |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| … | 主按钮「创建并加入」 | 24px |
|
|
71
|
+
| … | 分割提示行 + 「或」 | 16px |
|
|
72
|
+
| … | 次级按钮「加入已有会议」 | — |
|
|
73
|
+
|
|
74
|
+
> **`local-dev`**:凭证在 `src/config/basic-info-config.ts`,登录调用 `getBasicInfo(userId)`。
|
|
75
|
+
> **`console`**:保留 SDKAppID + UserSig 平铺输入框,UserSig 从控制台粘贴(见 `usersig-handling.md` Path B)。
|
|
66
76
|
|
|
67
77
|
### 3.1 凭证说明区规范
|
|
68
78
|
|
|
69
|
-
|
|
79
|
+
在凭证相关输入框下方(或 `local-dev` 时在会议 ID 下方),以信息提示卡片展示:
|
|
70
80
|
|
|
71
81
|
- 容器:背景 `#F0F6FF`,圆角 8px,内边距 12px 16px
|
|
72
82
|
- 图标:左侧 ℹ️ 信息图标,颜色 `#0D6BDE`
|
|
73
83
|
- 文字:12px,颜色 `#444`,行高 1.6
|
|
74
84
|
|
|
75
|
-
|
|
85
|
+
**`local-dev` 文案:**
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
本地调试:在 src/config/basic-info-config.ts 填入 SDKAppID 和 SecretKey
|
|
89
|
+
(控制台 → 应用管理 → 应用信息):
|
|
90
|
+
• 国际站:https://console.trtc.io
|
|
91
|
+
• 国内站:https://console.cloud.tencent.com
|
|
92
|
+
|
|
93
|
+
登录时只需输入 UserID —— userSig 会按 UserID 自动生成,两者必须匹配。
|
|
94
|
+
⚠️ SecretKey 仅用于本地调试;生产环境请由服务端签发 UserSig。
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**`console` 文案(固定,不可省略):**
|
|
76
98
|
|
|
77
99
|
```
|
|
78
100
|
SDKAppID 和 UserSig 可从控制台获取:
|
|
79
101
|
• 国际站:https://console.trtc.io
|
|
80
102
|
• 国内站:https://console.cloud.tencent.com
|
|
81
103
|
|
|
82
|
-
|
|
83
|
-
|
|
104
|
+
在「UserSig 生成&校验」中输入与登录页相同的 UserID 再生成 UserSig —— 两者必须匹配。
|
|
105
|
+
⚠️ 测试 UserSig 约 24h 后失效;生产环境请由服务端签发。
|
|
106
|
+
「服务端签发」:https://trtc.io/document/34385
|
|
84
107
|
```
|
|
85
108
|
|
|
86
109
|
链接使用主色 `#0D6BDE`,hover 加下划线,`target="_blank"`。
|
|
87
110
|
|
|
88
111
|
### 3.2 输入框要求
|
|
89
112
|
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
- UserSig
|
|
113
|
+
**`local-dev`:**
|
|
114
|
+
- 仅用户 ID、会议 ID;SDKAppID / SecretKey 在 `basic-info-config.ts`。
|
|
115
|
+
- 禁止 UserSig 手填框。
|
|
116
|
+
|
|
117
|
+
**`console`:**
|
|
118
|
+
- 用户 ID、会议 ID、SDKAppID、UserSig 四个输入框均平铺展示。
|
|
119
|
+
- UserSig 使用 `type="password"`。
|
|
120
|
+
- 凭证说明必须强调 **控制台生成 UserSig 时 UserID 与登录页一致**。
|
|
93
121
|
|
|
94
122
|
约束要点:
|
|
95
123
|
- 卡片内每个表单元素**宽度 100%**(撑满卡片内边距宽度)。
|
|
@@ -82,12 +82,12 @@ camera-testing / microphone-testing / speaker-testing
|
|
|
82
82
|
|
|
83
83
|
1. **把入会前完整检查流程与真实入会控制拆成两段主链路** —— 用户先完成会前自检,再进入房间主链路;会中如需局部检查,应由会中设备能力单独承接。
|
|
84
84
|
2. **把用户选定的设备延续到会中** —— 会前选好的摄像头、麦克风和扬声器应直接复用于会中控制。
|
|
85
|
-
3.
|
|
85
|
+
3. **在页面卸载、路由离开或进入会议前停止全部测试** —— 必须调用 `stopCameraTest()` 与 `stopSpeakerTest()`(若 SDK 暴露),避免会前测试与会中真实采集冲突,以及扬声器测试音贯穿整场会议。
|
|
86
86
|
4. **把权限拒绝和设备缺失写成可执行提示** —— 告诉用户下一步该切浏览器权限、换设备,还是直接降级进入。
|
|
87
87
|
|
|
88
88
|
### ❌ NEVER
|
|
89
89
|
|
|
90
|
-
1. **不要把会前测试残留到会中流程里** ——
|
|
90
|
+
1. **不要把会前测试残留到会中流程里** —— 测试流和真实采集流应在入会时完成切换;`startSpeakerTest` 后未 `stopSpeakerTest` 会导致测试音循环播放至会议结束。
|
|
91
91
|
2. **不要只测试摄像头而忽略麦克风和扬声器** —— 用户真实会议体验依赖完整的音视频链路。
|
|
92
92
|
3. **不要在测试失败时静默继续入会** —— 如果关键设备不可用,应给出明确风险提示或修复建议。
|
|
93
93
|
|
|
@@ -103,6 +103,7 @@ const {
|
|
|
103
103
|
stopCameraTest,
|
|
104
104
|
startMicrophoneTest,
|
|
105
105
|
startSpeakerTest,
|
|
106
|
+
stopSpeakerTest,
|
|
106
107
|
currentMicVolume,
|
|
107
108
|
} = useDeviceState();
|
|
108
109
|
|
|
@@ -130,7 +131,8 @@ async function toggleCameraPreview(view: HTMLElement) {
|
|
|
130
131
|
}
|
|
131
132
|
}
|
|
132
133
|
|
|
133
|
-
//
|
|
134
|
+
// 入会前停止测试释放设备资源(扬声器测试音必须停止,否则会贯穿整场会议)
|
|
135
|
+
await stopSpeakerTest?.();
|
|
134
136
|
await stopCameraTest();
|
|
135
137
|
```
|
|
136
138
|
|
|
@@ -163,6 +165,7 @@ onMounted(async () => {
|
|
|
163
165
|
});
|
|
164
166
|
|
|
165
167
|
onUnmounted(async () => {
|
|
168
|
+
await stopSpeakerTest?.();
|
|
166
169
|
await stopCameraTest();
|
|
167
170
|
});
|
|
168
171
|
|
|
@@ -239,8 +242,8 @@ export function useConferenceDevice() {
|
|
|
239
242
|
|
|
240
243
|
1. **在预览容器准备好后再调用 `startCameraTest()`** — 否则本地预览无法正常渲染。
|
|
241
244
|
**Verify**: 检查是否为 `view` 传入真实 DOM 节点。
|
|
242
|
-
2.
|
|
243
|
-
**Verify**:
|
|
245
|
+
2. **在页面离开或流程结束时停止全部测试** — 必须配对 `stopCameraTest()` 与 `stopSpeakerTest()`(入会按钮点击、路由离开、`onUnmounted` 三处至少覆盖入会路径)。
|
|
246
|
+
**Verify**: 搜索 `stopCameraTest` 与 `stopSpeakerTest`(或 SDK 等价 API)。
|
|
244
247
|
|
|
245
248
|
#### MUST NOT(生成时绝不能出现)
|
|
246
249
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tencent-rtc/trtc-agent-skills",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Installer for the TRTC Agent Skills suite (Chat, Call, RTC Engine, Live, Conference) + knowledge base, with one-command MCP setup for Claude Code / Cursor / CodeBuddy / Codex.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"trtc-agent-skills": "bin/cli.js"
|
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
"bin/",
|
|
10
10
|
"skills/",
|
|
11
11
|
"knowledge-base/",
|
|
12
|
+
"hooks/",
|
|
13
|
+
"ai-instructions/",
|
|
14
|
+
".cursor/rules/",
|
|
15
|
+
"CLAUDE.md",
|
|
16
|
+
"AGENTS.md",
|
|
17
|
+
"CODEBUDDY.md",
|
|
12
18
|
"README.md"
|
|
13
19
|
],
|
|
14
20
|
"engines": {
|
package/skills/trtc/SKILL.md
CHANGED
|
@@ -143,15 +143,16 @@ Route to `../trtc-onboarding/SKILL.md` when ANY of these are true:
|
|
|
143
143
|
- User asks for specific API details ("what are the parameters for applyForSeat?") → `docs` skill (follows slice-first fallback chain)
|
|
144
144
|
- User asks a fact / decision question (pricing, quotas, product comparison, migration) → `docs` skill (reads llms.txt directly)
|
|
145
145
|
|
|
146
|
-
**Review-request handling (hard rule — triage, do NOT refuse):** When the user uses review / audit / cross-check / validate / 帮我看看 / 是否正确 / check my X wording, do NOT perform a code-style review AND do NOT refuse outright. Instead **triage to the underlying intent** and route accordingly. The authoritative A/B/C/D/E triage logic (including the Decline template for option E) lives in `../trtc-onboarding/reference/path-b-troubleshoot.md` → **B-Q0**. On a review-worded turn, route to onboarding Path B so it can run B-Q0; for quick lookup from the root:
|
|
146
|
+
**Review-request handling (hard rule — triage, do NOT refuse):** When the user uses review / audit / cross-check / validate / 帮我看看 / 是否正确 / check my X wording, do NOT perform a code-style review AND do NOT refuse outright. Instead **triage to the underlying intent** and route accordingly. The authoritative A/B/C/D/E/F triage logic (including the Decline template for option E) lives in `../trtc-onboarding/reference/path-b-troubleshoot.md` → **B-Q0**. On a review-worded turn, route to onboarding Path B so it can run B-Q0; for quick lookup from the root:
|
|
147
147
|
|
|
148
|
-
- A.
|
|
148
|
+
- A. Runtime symptom ("doesn't work", crash, black screen, login fails, 进房失败) → onboarding Path B → B-Q1 symptom tree (Conference Web menu when applicable)
|
|
149
149
|
- B/C/D. Error code / official pattern / API comparison → `docs` skill (slice-first fallback chain)
|
|
150
|
+
- F. Integration audit (检查遗漏 / 业务流程 / 对照官方 / 在线课堂流程) → Path B → **B-Audit** (`conference/integration-audit` slice)
|
|
150
151
|
- E. Pure style/quality review with no concrete question → Decline (apply is internal quality gate, not user-facing review)
|
|
151
152
|
|
|
152
|
-
See B-Q0 in path-b-troubleshoot.md for signals, option E decline template, and the full self-check list. If the intent is ambiguous, B-Q0 will ask ONE triage question. Never just say "I don't do code review" and stop — land the user on A–
|
|
153
|
+
See B-Q0 in path-b-troubleshoot.md for signals, option E decline template, and the full self-check list. If the intent is ambiguous, B-Q0 will ask ONE triage question. Never just say "I don't do code review" and stop — land the user on A–F if any signal is there.
|
|
153
154
|
|
|
154
|
-
**Answer-shape constraint (applies on every turn):** even when routing to A–
|
|
155
|
+
**Answer-shape constraint (applies on every turn):** even when routing to A–F, your reply MUST NOT take review shapes — no "Critical Review Checklist", no "✅ Correct pattern vs ❌ Incorrect pattern" contrast as the main structure, no "Improvements you should make" list, no "Fixed version of your code" as a finished artifact. These shapes, produced after a review-worded request, constitute review behaviour even without the words "apply skill" / "verify" / "review your code". Use documentation / factual-lookup shapes instead (cite slice X, quote official pattern, link the error-code doc). Intent **F** (integration audit) may use the `conference/integration-audit` checklist shape.
|
|
155
156
|
|
|
156
157
|
**The key distinction:** "I want to ADD/BUILD/IMPLEMENT X" → onboarding Path A2. "I want to UNDERSTAND/LEARN about X" → `docs` skill.
|
|
157
158
|
|
|
@@ -316,8 +317,8 @@ These rules are checked on **every turn**. If anything above conflicts with a ru
|
|
|
316
317
|
**NEVER call any other MCP tool**, regardless of prefix
|
|
317
318
|
(`mcp__tencentcloud-sdk-mcp__` / `mcp__tencent-rtc__` or any other). This
|
|
318
319
|
explicitly includes:
|
|
319
|
-
- `get_usersig` —
|
|
320
|
-
|
|
320
|
+
- `get_usersig` — use bundled local signing per
|
|
321
|
+
`../trtc-onboarding/reference/usersig-handling.md` (medical-template config pattern)
|
|
321
322
|
- `get_callkit_api`, `get_faq`, `get_native_*`, `get_web_*`,
|
|
322
323
|
`present_framework_choice` — these doc tools bypass the skill's knowledge
|
|
323
324
|
base; answer from slices / llms.txt via `../trtc-docs/SKILL.md` instead
|
|
@@ -57,12 +57,7 @@ RoomKit** 时,走官方 RoomKit 集成模式。
|
|
|
57
57
|
4. 房间号 `roomId` 必须来自业务系统或由业务系统保证唯一;在线问诊、1v1 客服等
|
|
58
58
|
双方不确定谁先建房的场景,可统一用业务单据号作为 `roomId` 并调用
|
|
59
59
|
`conference.createAndJoinRoom()`。
|
|
60
|
-
5. UserSig
|
|
61
|
-
的规则:生成占位符 `userSig` + 引导用户去 TRTC 控制台获取测试 UserSig 填入
|
|
62
|
-
(skill 不自动签发),正式环境由业务后端签发;前端只保留
|
|
63
|
-
`SDKAppID / userId / userSig` 输入项或占位。
|
|
64
|
-
不要生成 `src/utils/usersig.ts`,不要在前端依赖 `SecretKey`,不要用 `crypto-js`、
|
|
65
|
-
`pako`、`HmacSHA256` 或 `tls-sig-api-v2` 在浏览器端签名。
|
|
60
|
+
5. UserSig:`usersig-handling.md` 三路径 — `local-dev`(bundled lib)、`console`(控制台粘贴,保留)、`backend`(生产)。
|
|
66
61
|
6. 按钮、工具栏、内置按钮点击前拦截只使用官方界面微调 API:
|
|
67
62
|
`conference.setWidgetVisible()` 隐藏/恢复内置按钮,
|
|
68
63
|
`conference.registerWidget()` 添加自定义业务按钮或侧边面板,
|
|
@@ -83,9 +78,9 @@ RoomKit** 时,走官方 RoomKit 集成模式。
|
|
|
83
78
|
`ui-*` class 数量规则。
|
|
84
79
|
- 不要手写一套替代 RoomKit 主界面的会议 SFC;官方组件承担会议主界面,业务侧只
|
|
85
80
|
负责外层路由、登录、房间号、事件监听和官方 UI 微调 API。
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
81
|
+
- 本地开发可使用 bundled signing lib(`src/config/basic-info-config.ts` + `lib-generate-test-usersig-es.min.js`),
|
|
82
|
+
与医疗模板同源;生产环境禁止把 SecretKey 放进客户端。
|
|
83
|
+
- 不要手写 `src/utils/usersig.ts`,不要新增 `crypto-js` / `pako` / `tls-sig-api-v2`。
|
|
89
84
|
- 不要用 CSS 选择器或 DOM hack 修改 RoomKit 内部按钮显隐、点击前权限和工具栏
|
|
90
85
|
扩展;这些需求必须使用 `setWidgetVisible()`、`registerWidget()`、`onWill()`。
|
|
91
86
|
- 不要在进房前写死 `setFeatureConfig({ shareLink })`;分享链接依赖最终 `roomId`,
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local development credentials — Conference Web integration.
|
|
3
|
+
*
|
|
4
|
+
* ⚠️ SDKSECRETKEY is for local debugging ONLY. Do NOT ship to production.
|
|
5
|
+
* Production UserSig MUST be issued by your backend.
|
|
6
|
+
*
|
|
7
|
+
* Source bundle (copy all 3 files into the target project's src/config/):
|
|
8
|
+
* skills/trtc/room-builder/assets/local-usersig/
|
|
9
|
+
* Same signing lib as the medical-consultation template config.
|
|
10
|
+
*/
|
|
11
|
+
import LibGenerateTestUserSig from './lib-generate-test-usersig-es.min';
|
|
12
|
+
|
|
13
|
+
export const SDKAPPID = 0;
|
|
14
|
+
export const SDKSECRETKEY = '';
|
|
15
|
+
export const EXPIRETIME = 604800;
|
|
16
|
+
|
|
17
|
+
export function assertBasicInfoConfigured() {
|
|
18
|
+
if (!Number(SDKAPPID) || !String(SDKSECRETKEY).trim()) {
|
|
19
|
+
throw new Error(
|
|
20
|
+
'请先在 src/config/basic-info-config.ts 中配置 SDKAPPID 和 SDKSECRETKEY'
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Generate login params for the given userId. userSig always matches userId. */
|
|
26
|
+
export function getBasicInfo(userId: string) {
|
|
27
|
+
assertBasicInfoConfigured();
|
|
28
|
+
const generator = new LibGenerateTestUserSig(
|
|
29
|
+
SDKAPPID,
|
|
30
|
+
SDKSECRETKEY,
|
|
31
|
+
EXPIRETIME
|
|
32
|
+
);
|
|
33
|
+
return {
|
|
34
|
+
sdkAppId: SDKAPPID,
|
|
35
|
+
userId,
|
|
36
|
+
userSig: generator.genTestUserSig(userId),
|
|
37
|
+
scene: 5001 as const,
|
|
38
|
+
};
|
|
39
|
+
}
|