keepwork-sdk 1.0.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/README.md +21 -0
- package/dist-npm/keepwork-sdk.js +37514 -0
- package/dist-npm/keepwork-sdk.js.map +1 -0
- package/dist-npm/md5-CZ0vz1_S.js +240 -0
- package/dist-npm/md5-CZ0vz1_S.js.map +1 -0
- package/dist-npm/types/index.d.ts +42 -0
- package/dist-npm/types/index.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.core.d.ts +218 -0
- package/dist-npm/types/src/ai-chat/AIChat.core.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.d.ts +18 -0
- package/dist-npm/types/src/ai-chat/AIChat.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.session.d.ts +201 -0
- package/dist-npm/types/src/ai-chat/AIChat.session.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.base.d.ts +297 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.base.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.d.ts +15 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.media.d.ts +208 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.media.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/ChildSessionMixin.d.ts +153 -0
- package/dist-npm/types/src/ai-chat/ChildSessionMixin.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/CopilotTools.d.ts +150 -0
- package/dist-npm/types/src/ai-chat/CopilotTools.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/MqttManager.d.ts +123 -0
- package/dist-npm/types/src/ai-chat/MqttManager.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/SandboxToolEnv.d.ts +210 -0
- package/dist-npm/types/src/ai-chat/SandboxToolEnv.d.ts.map +1 -0
- package/dist-npm/types/src/audio/AudioEngine.d.ts +272 -0
- package/dist-npm/types/src/audio/AudioEngine.d.ts.map +1 -0
- package/dist-npm/types/src/audio/AudioEngine.utils.d.ts +72 -0
- package/dist-npm/types/src/audio/AudioEngine.utils.d.ts.map +1 -0
- package/dist-npm/types/src/audio/Speech.d.ts +247 -0
- package/dist-npm/types/src/audio/Speech.d.ts.map +1 -0
- package/dist-npm/types/src/core/AgentConfig.d.ts +104 -0
- package/dist-npm/types/src/core/AgentConfig.d.ts.map +1 -0
- package/dist-npm/types/src/core/AgentRouter.d.ts +342 -0
- package/dist-npm/types/src/core/AgentRouter.d.ts.map +1 -0
- package/dist-npm/types/src/core/NPL.d.ts +251 -0
- package/dist-npm/types/src/core/NPL.d.ts.map +1 -0
- package/dist-npm/types/src/core/RemoteLog.d.ts +132 -0
- package/dist-npm/types/src/core/RemoteLog.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.core.d.ts +84 -0
- package/dist-npm/types/src/core/keepworkSDK.core.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.d.ts +129 -0
- package/dist-npm/types/src/core/keepworkSDK.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.pages.d.ts +101 -0
- package/dist-npm/types/src/core/keepworkSDK.pages.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.utils.d.ts +40 -0
- package/dist-npm/types/src/core/keepworkSDK.utils.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHuman.d.ts +1316 -0
- package/dist-npm/types/src/digital-human/DigitalHuman.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanBridge.d.ts +54 -0
- package/dist-npm/types/src/digital-human/DigitalHumanBridge.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanConfig.d.ts +104 -0
- package/dist-npm/types/src/digital-human/DigitalHumanConfig.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrame.d.ts +390 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrame.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrameMessages.d.ts +59 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrameMessages.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanSubtitleOverlay.d.ts +114 -0
- package/dist-npm/types/src/digital-human/DigitalHumanSubtitleOverlay.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanUtils.d.ts +53 -0
- package/dist-npm/types/src/digital-human/DigitalHumanUtils.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.constants.d.ts +65 -0
- package/dist-npm/types/src/rtc/AIChatRTC.constants.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.d.ts +91 -0
- package/dist-npm/types/src/rtc/AIChatRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.session.d.ts +268 -0
- package/dist-npm/types/src/rtc/AIChatRTC.session.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.backends.d.ts +232 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.backends.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.core.d.ts +92 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.core.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.d.ts +15 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.session.d.ts +127 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.session.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/LocalRTC.d.ts +91 -0
- package/dist-npm/types/src/rtc/LocalRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/SpeechRTC.d.ts +156 -0
- package/dist-npm/types/src/rtc/SpeechRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/SpeechRTC.transport.d.ts +191 -0
- package/dist-npm/types/src/rtc/SpeechRTC.transport.d.ts.map +1 -0
- package/dist-npm/types/src/store/CloudDrive.d.ts +140 -0
- package/dist-npm/types/src/store/CloudDrive.d.ts.map +1 -0
- package/dist-npm/types/src/store/LocalStorageUtil.d.ts +136 -0
- package/dist-npm/types/src/store/LocalStorageUtil.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.base.d.ts +267 -0
- package/dist-npm/types/src/store/PersonalPageStore.base.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.d.ts +13 -0
- package/dist-npm/types/src/store/PersonalPageStore.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.data.d.ts +198 -0
- package/dist-npm/types/src/store/PersonalPageStore.data.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.sync.d.ts +171 -0
- package/dist-npm/types/src/store/PersonalPageStore.sync.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.types.d.ts +92 -0
- package/dist-npm/types/src/store/PersonalPageStore.types.d.ts.map +1 -0
- package/dist-npm/types/src/store/YMLParser.d.ts +96 -0
- package/dist-npm/types/src/store/YMLParser.d.ts.map +1 -0
- package/dist-npm/types/src/tools/AgentTool.d.ts +110 -0
- package/dist-npm/types/src/tools/AgentTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/AppTools.d.ts +122 -0
- package/dist-npm/types/src/tools/AppTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/ExecuteTool.d.ts +96 -0
- package/dist-npm/types/src/tools/ExecuteTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/FileTools.d.ts +77 -0
- package/dist-npm/types/src/tools/FileTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/MinigameTools.d.ts +234 -0
- package/dist-npm/types/src/tools/MinigameTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/MqttTool.d.ts +53 -0
- package/dist-npm/types/src/tools/MqttTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/PersonalPageTool.d.ts +57 -0
- package/dist-npm/types/src/tools/PersonalPageTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/SummarizeTool.d.ts +279 -0
- package/dist-npm/types/src/tools/SummarizeTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/WebTool.d.ts +106 -0
- package/dist-npm/types/src/tools/WebTool.d.ts.map +1 -0
- package/dist-npm/types/src/types/common.d.ts +164 -0
- package/dist-npm/types/src/types/common.d.ts.map +1 -0
- package/dist-npm/types/src/ui/LocalAPIKeySettings.d.ts +229 -0
- package/dist-npm/types/src/ui/LocalAPIKeySettings.d.ts.map +1 -0
- package/dist-npm/types/src/ui/LoginWindow.d.ts +163 -0
- package/dist-npm/types/src/ui/LoginWindow.d.ts.map +1 -0
- package/dist-npm/types/src/ui/ProfileWindow.d.ts +75 -0
- package/dist-npm/types/src/ui/ProfileWindow.d.ts.map +1 -0
- package/dist-npm/types/src/ui/VerifyHuman.d.ts +23 -0
- package/dist-npm/types/src/ui/VerifyHuman.d.ts.map +1 -0
- package/dist-npm/types/src/ui/WorkspaceViewer.d.ts +184 -0
- package/dist-npm/types/src/ui/WorkspaceViewer.d.ts.map +1 -0
- package/dist-npm/types/src/user/SocialFriends.d.ts +173 -0
- package/dist-npm/types/src/user/SocialFriends.d.ts.map +1 -0
- package/dist-npm/types/src/user/UserWorks.d.ts +187 -0
- package/dist-npm/types/src/user/UserWorks.d.ts.map +1 -0
- package/dist-npm/types/src/utils/ImageUtils.d.ts +107 -0
- package/dist-npm/types/src/utils/ImageUtils.d.ts.map +1 -0
- package/dist-npm/types/src/utils/SDKLogger.d.ts +111 -0
- package/dist-npm/types/src/utils/SDKLogger.d.ts.map +1 -0
- package/dist-npm/types/src/utils/translation.d.ts +95 -0
- package/dist-npm/types/src/utils/translation.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxAuth.d.ts +126 -0
- package/dist-npm/types/src/wechat/WxAuth.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxLaunchApp.d.ts +96 -0
- package/dist-npm/types/src/wechat/WxLaunchApp.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxUtils.d.ts +145 -0
- package/dist-npm/types/src/wechat/WxUtils.d.ts.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpeechRTC — VolcEngine bidirectional TTS client with managed session reuse.
|
|
3
|
+
*
|
|
4
|
+
* 协议层(constants, helpers, SpeechRTCTransport)已拆分至 SpeechRTC.transport.js。
|
|
5
|
+
*/
|
|
6
|
+
import { EVENT, SESSION_STATE } from './SpeechRTC.transport';
|
|
7
|
+
/** _waitForEvent 等待者 */
|
|
8
|
+
interface SpeechRTCWaiter {
|
|
9
|
+
values: unknown[];
|
|
10
|
+
resolve: (payload: unknown) => void;
|
|
11
|
+
reject: (error: unknown) => void;
|
|
12
|
+
}
|
|
13
|
+
/** 会话池条目 */
|
|
14
|
+
interface SpeechRTCPoolEntry {
|
|
15
|
+
key: string;
|
|
16
|
+
session: SpeechRTCSession;
|
|
17
|
+
lastUsedAt: number;
|
|
18
|
+
}
|
|
19
|
+
/** SpeechRTCTransport 的结构化调用表面(供 Session 使用) */
|
|
20
|
+
interface ITransport {
|
|
21
|
+
connectId: string;
|
|
22
|
+
prepareSession(session: unknown): Promise<void>;
|
|
23
|
+
releaseSession(session: unknown): void;
|
|
24
|
+
sendEvent(eventCode: number, payload: unknown, sessionId?: string): Promise<void>;
|
|
25
|
+
shutdown(options?: unknown): Promise<void>;
|
|
26
|
+
_closeSocket(options?: unknown): void;
|
|
27
|
+
_tryCancelStaleSession(sessionId: string): void;
|
|
28
|
+
[key: string]: unknown;
|
|
29
|
+
}
|
|
30
|
+
declare class SpeechRTC {
|
|
31
|
+
static EVENT: {
|
|
32
|
+
NONE: number;
|
|
33
|
+
START_CONNECTION: number;
|
|
34
|
+
FINISH_CONNECTION: number;
|
|
35
|
+
CONNECTION_STARTED: number;
|
|
36
|
+
CONNECTION_FAILED: number;
|
|
37
|
+
CONNECTION_FINISHED: number;
|
|
38
|
+
START_SESSION: number;
|
|
39
|
+
CANCEL_SESSION: number;
|
|
40
|
+
FINISH_SESSION: number;
|
|
41
|
+
SESSION_STARTED: number;
|
|
42
|
+
SESSION_CANCELED: number;
|
|
43
|
+
SESSION_FINISHED: number;
|
|
44
|
+
SESSION_FAILED: number;
|
|
45
|
+
USAGE_RESPONSE: number;
|
|
46
|
+
TASK_REQUEST: number;
|
|
47
|
+
UPDATE_CONFIG: number;
|
|
48
|
+
AUDIO_MUTED: number;
|
|
49
|
+
TTS_SENTENCE_START: number;
|
|
50
|
+
TTS_SENTENCE_END: number;
|
|
51
|
+
TTS_RESPONSE: number;
|
|
52
|
+
TTS_ENDED: number;
|
|
53
|
+
PODCAST_ROUND_START: number;
|
|
54
|
+
PODCAST_ROUND_RESPONSE: number;
|
|
55
|
+
PODCAST_ROUND_END: number;
|
|
56
|
+
SOURCE_SUBTITLE_START: number;
|
|
57
|
+
SOURCE_SUBTITLE_RESPONSE: number;
|
|
58
|
+
SOURCE_SUBTITLE_END: number;
|
|
59
|
+
TRANSLATION_SUBTITLE_START: number;
|
|
60
|
+
TRANSLATION_SUBTITLE_RESPONSE: number;
|
|
61
|
+
TRANSLATION_SUBTITLE_END: number;
|
|
62
|
+
};
|
|
63
|
+
static SESSION_STATE: {
|
|
64
|
+
IDLE: string;
|
|
65
|
+
CONNECTING: string;
|
|
66
|
+
CONNECTED: string;
|
|
67
|
+
STARTING: string;
|
|
68
|
+
ACTIVE: string;
|
|
69
|
+
FINISHING: string;
|
|
70
|
+
FINISHED: string;
|
|
71
|
+
CANCELED: string;
|
|
72
|
+
CLOSED: string;
|
|
73
|
+
FAILED: string;
|
|
74
|
+
};
|
|
75
|
+
sdk: unknown;
|
|
76
|
+
options: Record<string, unknown>;
|
|
77
|
+
maxParallelSessions: number;
|
|
78
|
+
_sessionPool: SpeechRTCPoolEntry[];
|
|
79
|
+
_transports: Set<Record<string, unknown>>;
|
|
80
|
+
[key: string]: unknown;
|
|
81
|
+
constructor(sdk: unknown, options?: Record<string, unknown>);
|
|
82
|
+
createSession(config?: Record<string, unknown>): SpeechRTCSession;
|
|
83
|
+
createTextStream(config?: Record<string, unknown>): SpeechRTCSession;
|
|
84
|
+
synthesize(text: string, config?: Record<string, unknown>): Promise<unknown>;
|
|
85
|
+
synthesizeChunks(chunks: unknown, config?: Record<string, unknown>): Promise<unknown>;
|
|
86
|
+
shutdown(options?: Record<string, unknown>): Promise<void>;
|
|
87
|
+
_createSessionInstance(config?: Record<string, unknown>, metadata?: Record<string, unknown>): SpeechRTCSession;
|
|
88
|
+
_buildTextStreamPoolKey(config?: Record<string, unknown>): string;
|
|
89
|
+
_findPooledSession(poolKey: string): SpeechRTCPoolEntry | null;
|
|
90
|
+
_touchPooledSession(entry: SpeechRTCPoolEntry): void;
|
|
91
|
+
_evictLeastRecentlyUsedInactiveSession(): SpeechRTCPoolEntry | null;
|
|
92
|
+
}
|
|
93
|
+
declare class SpeechRTCSession {
|
|
94
|
+
speechRTC: Record<string, unknown>;
|
|
95
|
+
transport: ITransport;
|
|
96
|
+
sdk: unknown;
|
|
97
|
+
options: Record<string, unknown>;
|
|
98
|
+
isPooledStream: boolean;
|
|
99
|
+
poolKey: string;
|
|
100
|
+
_onStateChange: ((state?: unknown, session?: unknown) => void) | null;
|
|
101
|
+
state: unknown;
|
|
102
|
+
isConnected: boolean;
|
|
103
|
+
isSessionActive: boolean;
|
|
104
|
+
_listeners: Record<string, Array<(payload?: unknown) => void>>;
|
|
105
|
+
_waiters: Map<unknown, SpeechRTCWaiter[]>;
|
|
106
|
+
_audioContext: AudioContext | null;
|
|
107
|
+
_audioTime: number;
|
|
108
|
+
_activeSources: Set<unknown>;
|
|
109
|
+
_encodedChunks: unknown[];
|
|
110
|
+
_sessionResult: Record<string, unknown> | null;
|
|
111
|
+
_usage: unknown;
|
|
112
|
+
_sentenceText: string;
|
|
113
|
+
_sessionIdleTimer: ReturnType<typeof setTimeout> | null;
|
|
114
|
+
_audioUrl: string | null;
|
|
115
|
+
[key: string]: unknown;
|
|
116
|
+
constructor(speechRTC: Record<string, unknown>, config?: Record<string, unknown>, runtime?: Record<string, unknown>);
|
|
117
|
+
on(event: string, callback: (payload?: unknown) => void): this;
|
|
118
|
+
off(event: string, callback: (payload?: unknown) => void): this;
|
|
119
|
+
emit(event: string, payload?: unknown): void;
|
|
120
|
+
start(): Promise<this>;
|
|
121
|
+
sendText(text: string, options?: Record<string, unknown>): Promise<void>;
|
|
122
|
+
sendTextChunks(chunks: unknown, options?: Record<string, unknown>): Promise<unknown>;
|
|
123
|
+
streamText(chunks: unknown, options?: Record<string, unknown>): Promise<unknown>;
|
|
124
|
+
appendText(text: string, options?: Record<string, unknown>): Promise<void>;
|
|
125
|
+
interrupt(options?: Record<string, unknown>): Promise<this>;
|
|
126
|
+
beginText(text?: string, options?: Record<string, unknown>): Promise<this>;
|
|
127
|
+
finish(options?: Record<string, unknown>): Promise<unknown>;
|
|
128
|
+
cancel(options?: Record<string, unknown>): Promise<void>;
|
|
129
|
+
stop(options?: Record<string, unknown>): Promise<unknown>;
|
|
130
|
+
close(options?: Record<string, unknown>): Promise<unknown>;
|
|
131
|
+
synthesize(text: string, options?: Record<string, unknown>): Promise<unknown>;
|
|
132
|
+
synthesizeChunks(chunks: unknown, options?: Record<string, unknown>): Promise<unknown>;
|
|
133
|
+
_sendSessionStart(): Promise<void>;
|
|
134
|
+
_buildSessionStartPayload(): Record<string, unknown>;
|
|
135
|
+
_handleFrame(frame: Record<string, unknown>): Promise<void>;
|
|
136
|
+
_handleAudioFrame(frame: Record<string, unknown>): Promise<void>;
|
|
137
|
+
_ensureAudioContext(): Promise<AudioContext | null>;
|
|
138
|
+
_playPCMChunk(bytes: Uint8Array): Promise<void>;
|
|
139
|
+
_buildAudioUrl(): string | null;
|
|
140
|
+
_armSessionIdleTimer(): void;
|
|
141
|
+
_clearSessionIdleTimer(): void;
|
|
142
|
+
_handleSessionIdleTimeout(): Promise<void>;
|
|
143
|
+
_waitForEvent(eventCodes: unknown, timeout?: number): Promise<unknown>;
|
|
144
|
+
_resolveWaiters(key: unknown, payload: unknown): void;
|
|
145
|
+
_resolveAllWaiters(error: unknown): void;
|
|
146
|
+
_removeWaiter(waiter: SpeechRTCWaiter, skipKey?: unknown): void;
|
|
147
|
+
_setState(state: unknown): void;
|
|
148
|
+
_createProtocolError(frame: Record<string, unknown>, message: string): Error;
|
|
149
|
+
_fail(error: unknown, source: string): void;
|
|
150
|
+
_resetForReuse(): void;
|
|
151
|
+
getRemainingPlaybackTime(): number;
|
|
152
|
+
_closeAudio(): Promise<void>;
|
|
153
|
+
}
|
|
154
|
+
export { SpeechRTCSession, EVENT as SPEECH_RTC_EVENT, SESSION_STATE as SPEECH_RTC_SESSION_STATE };
|
|
155
|
+
export default SpeechRTC;
|
|
156
|
+
//# sourceMappingURL=SpeechRTC.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpeechRTC.d.ts","sourceRoot":"","sources":["../../../../src/rtc/SpeechRTC.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpeechRTC — VolcEngine bidirectional TTS client with managed session reuse.
|
|
3
|
+
*
|
|
4
|
+
* https://www.volcengine.com/docs/6561/1329505?lang=zh
|
|
5
|
+
*
|
|
6
|
+
* Browser callers work with text streams rather than raw WebSocket lifecycle.
|
|
7
|
+
* The SDK opens connections lazily, reuses pooled stream objects created via
|
|
8
|
+
* createTextStream(), auto-finishes an idle session after 10 seconds by
|
|
9
|
+
* default, and closes an underlying connection after 60 seconds of silence by
|
|
10
|
+
* default. Repeated createTextStream() calls with matching voice/connection
|
|
11
|
+
* settings will reuse an existing pooled stream instead of allocating a fresh
|
|
12
|
+
* one, up to maxParallelSessions pooled streams per SpeechRTC instance.
|
|
13
|
+
*
|
|
14
|
+
* Example usage:
|
|
15
|
+
* const speechRTC = new SpeechRTC(window.keepwork, {
|
|
16
|
+
* // appId and accessToken are optional when the proxy provides defaults.
|
|
17
|
+
* proxyUrl: 'wss://tts.keepwork.com/ws/tts/',
|
|
18
|
+
* voiceType: 'zh_female_tianmeiyueyue_moon_bigtts',
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* const stream = speechRTC.createTextStream();
|
|
22
|
+
* stream.on('audioChunk', ({ bytes }) => console.log('audio chunk', bytes?.byteLength));
|
|
23
|
+
* stream.on('sentenceEnd', ({ text }) => console.log('sentence end', text));
|
|
24
|
+
*
|
|
25
|
+
* await stream.beginText('你好,欢迎使用 SpeechRTC。');
|
|
26
|
+
* await stream.appendText('这一段会继续发送到同一个会话。');
|
|
27
|
+
* const result = await stream.finish();
|
|
28
|
+
*
|
|
29
|
+
* // Or forward model output incrementally:
|
|
30
|
+
* await speechRTC.synthesizeChunks(asyncChunkSource);
|
|
31
|
+
*/
|
|
32
|
+
declare const DEFAULT_WS_URL = "wss://openspeech.bytedance.com/api/v3/tts/bidirection";
|
|
33
|
+
declare const DEFAULT_PROXY_URL = "wss://speechrtc.keepwork.com/tts";
|
|
34
|
+
declare const DEFAULT_RESOURCE_ID = "volc.service_type.10029";
|
|
35
|
+
declare const DEFAULT_NAMESPACE = "BidirectionalTTS";
|
|
36
|
+
declare const DEFAULT_FORMAT = "pcm";
|
|
37
|
+
declare const DEFAULT_SAMPLE_RATE = 24000;
|
|
38
|
+
declare const DEFAULT_SPEAKER = "zh_female_tianmeiyueyue_moon_bigtts";
|
|
39
|
+
declare const EVENT: {
|
|
40
|
+
NONE: number;
|
|
41
|
+
START_CONNECTION: number;
|
|
42
|
+
FINISH_CONNECTION: number;
|
|
43
|
+
CONNECTION_STARTED: number;
|
|
44
|
+
CONNECTION_FAILED: number;
|
|
45
|
+
CONNECTION_FINISHED: number;
|
|
46
|
+
START_SESSION: number;
|
|
47
|
+
CANCEL_SESSION: number;
|
|
48
|
+
FINISH_SESSION: number;
|
|
49
|
+
SESSION_STARTED: number;
|
|
50
|
+
SESSION_CANCELED: number;
|
|
51
|
+
SESSION_FINISHED: number;
|
|
52
|
+
SESSION_FAILED: number;
|
|
53
|
+
USAGE_RESPONSE: number;
|
|
54
|
+
TASK_REQUEST: number;
|
|
55
|
+
UPDATE_CONFIG: number;
|
|
56
|
+
AUDIO_MUTED: number;
|
|
57
|
+
TTS_SENTENCE_START: number;
|
|
58
|
+
TTS_SENTENCE_END: number;
|
|
59
|
+
TTS_RESPONSE: number;
|
|
60
|
+
TTS_ENDED: number;
|
|
61
|
+
PODCAST_ROUND_START: number;
|
|
62
|
+
PODCAST_ROUND_RESPONSE: number;
|
|
63
|
+
PODCAST_ROUND_END: number;
|
|
64
|
+
SOURCE_SUBTITLE_START: number;
|
|
65
|
+
SOURCE_SUBTITLE_RESPONSE: number;
|
|
66
|
+
SOURCE_SUBTITLE_END: number;
|
|
67
|
+
TRANSLATION_SUBTITLE_START: number;
|
|
68
|
+
TRANSLATION_SUBTITLE_RESPONSE: number;
|
|
69
|
+
TRANSLATION_SUBTITLE_END: number;
|
|
70
|
+
};
|
|
71
|
+
declare const SESSION_STATE: {
|
|
72
|
+
IDLE: string;
|
|
73
|
+
CONNECTING: string;
|
|
74
|
+
CONNECTED: string;
|
|
75
|
+
STARTING: string;
|
|
76
|
+
ACTIVE: string;
|
|
77
|
+
FINISHING: string;
|
|
78
|
+
FINISHED: string;
|
|
79
|
+
CANCELED: string;
|
|
80
|
+
CLOSED: string;
|
|
81
|
+
FAILED: string;
|
|
82
|
+
};
|
|
83
|
+
declare const MESSAGE_TYPE: {
|
|
84
|
+
INVALID: number;
|
|
85
|
+
FULL_CLIENT_REQUEST: number;
|
|
86
|
+
AUDIO_ONLY_REQUEST: number;
|
|
87
|
+
FULL_SERVER_RESPONSE: number;
|
|
88
|
+
AUDIO_ONLY_RESPONSE: number;
|
|
89
|
+
FRONT_END_RESULT_RESPONSE: number;
|
|
90
|
+
ERROR_INFORMATION: number;
|
|
91
|
+
};
|
|
92
|
+
declare const MESSAGE_FLAG: {
|
|
93
|
+
NO_SEQUENCE: number;
|
|
94
|
+
POSITIVE_SEQUENCE: number;
|
|
95
|
+
LAST_NO_SEQUENCE: number;
|
|
96
|
+
NEGATIVE_SEQUENCE: number;
|
|
97
|
+
WITH_EVENT: number;
|
|
98
|
+
};
|
|
99
|
+
declare const VERSION_BITS: {
|
|
100
|
+
VERSION_1: number;
|
|
101
|
+
};
|
|
102
|
+
declare const HEADER_SIZE_BITS: {
|
|
103
|
+
HEADER_SIZE_4: number;
|
|
104
|
+
};
|
|
105
|
+
declare const SERIALIZATION: {
|
|
106
|
+
RAW: number;
|
|
107
|
+
JSON: number;
|
|
108
|
+
};
|
|
109
|
+
declare const COMPRESSION: {
|
|
110
|
+
NONE: number;
|
|
111
|
+
GZIP: number;
|
|
112
|
+
};
|
|
113
|
+
declare const CONNECTION_EVENTS: Set<number>;
|
|
114
|
+
declare const CONNECT_ID_EVENTS: Set<number>;
|
|
115
|
+
/** _waitForEvent 等待者 */
|
|
116
|
+
interface SpeechRTCWaiter {
|
|
117
|
+
values: unknown[];
|
|
118
|
+
resolve: (payload: unknown) => void;
|
|
119
|
+
reject: (error: unknown) => void;
|
|
120
|
+
}
|
|
121
|
+
declare function randomId(prefix?: string, length?: number): string;
|
|
122
|
+
declare function clamp(value: unknown, min: number, max: number, fallback: number): number;
|
|
123
|
+
declare function ensureObject(value: unknown): Record<string, unknown>;
|
|
124
|
+
declare function mergeDeep(base: unknown, extra: unknown): Record<string, unknown>;
|
|
125
|
+
declare function concatUint8Arrays(chunks: Uint8Array[]): Uint8Array;
|
|
126
|
+
declare function shouldIncludeSessionId(eventCode: number): boolean;
|
|
127
|
+
declare function shouldIncludeConnectId(eventCode: number): boolean;
|
|
128
|
+
declare function inferResourceId(voiceType: unknown): string;
|
|
129
|
+
declare function pcm16ToFloat32(bytes: Uint8Array): Float32Array;
|
|
130
|
+
declare function isSessionTerminalState(state: unknown): boolean;
|
|
131
|
+
declare function positiveNumberOr(value: unknown, fallback: number): number;
|
|
132
|
+
declare function stableJson(value: unknown): string;
|
|
133
|
+
declare function iterateTextChunks(input: unknown): AsyncGenerator<string>;
|
|
134
|
+
declare const DEFAULT_SESSION_IDLE_TIMEOUT_MS = 10000;
|
|
135
|
+
declare const DEFAULT_CONNECTION_IDLE_TIMEOUT_MS = 60000;
|
|
136
|
+
declare const DEFAULT_CONNECTION_MAX_LIFETIME_MS: number;
|
|
137
|
+
declare class SpeechRTCTransport {
|
|
138
|
+
speechRTC: Record<string, unknown>;
|
|
139
|
+
sdk: unknown;
|
|
140
|
+
ws: WebSocket | null;
|
|
141
|
+
isConnected: boolean;
|
|
142
|
+
connectId: string;
|
|
143
|
+
_connectionPromise: Promise<unknown> | null;
|
|
144
|
+
_waiters: Map<unknown, SpeechRTCWaiter[]>;
|
|
145
|
+
_activeSession: Record<string, unknown> | null;
|
|
146
|
+
_connectionOptions: Record<string, unknown> | null;
|
|
147
|
+
_connectionSignature: string;
|
|
148
|
+
_restartPending: boolean;
|
|
149
|
+
_socketOpenedAt: number;
|
|
150
|
+
_lastActivityAt: number;
|
|
151
|
+
_connectionIdleTimer: ReturnType<typeof setTimeout> | null;
|
|
152
|
+
baseOptions: Record<string, unknown>;
|
|
153
|
+
[key: string]: unknown;
|
|
154
|
+
constructor(speechRTC: Record<string, unknown>, options?: Record<string, unknown>);
|
|
155
|
+
updateBaseOptions(options?: Record<string, unknown>): void;
|
|
156
|
+
prepareSession(session: Record<string, unknown>): Promise<void>;
|
|
157
|
+
releaseSession(session: Record<string, unknown>): void;
|
|
158
|
+
/**
|
|
159
|
+
* Fire-and-forget CANCEL_SESSION for a session that failed locally but may
|
|
160
|
+
* still be alive on the Volcengine server. Silently ignored if the socket
|
|
161
|
+
* is not open.
|
|
162
|
+
*/
|
|
163
|
+
_tryCancelStaleSession(sessionId: string): void;
|
|
164
|
+
sendEvent(eventCode: number, payload: unknown, sessionId?: string): Promise<void>;
|
|
165
|
+
shutdown(options?: {
|
|
166
|
+
graceful?: boolean;
|
|
167
|
+
timeout?: number;
|
|
168
|
+
}): Promise<void>;
|
|
169
|
+
_applyConnectionOptions(options?: Record<string, unknown>): void;
|
|
170
|
+
_shouldRestartConnection(): boolean;
|
|
171
|
+
_ensureConnected(): Promise<WebSocket | null | unknown>;
|
|
172
|
+
_createWebSocket(): unknown;
|
|
173
|
+
_buildHandshakeHeaders(): Record<string, unknown>;
|
|
174
|
+
_sendConnectionStart(): Promise<void>;
|
|
175
|
+
_handleMessage(data: unknown): Promise<void>;
|
|
176
|
+
_handleTransportFailure(error: unknown, source: string): void;
|
|
177
|
+
_sendBinary(buffer: ArrayBufferLike | ArrayBufferView): void;
|
|
178
|
+
_touchActivity(): void;
|
|
179
|
+
_scheduleConnectionIdleTimer(): void;
|
|
180
|
+
_clearConnectionIdleTimer(): void;
|
|
181
|
+
_waitForEvent(eventCodes: unknown, timeout?: number): Promise<unknown>;
|
|
182
|
+
_resolveWaiters(key: unknown, payload: unknown): void;
|
|
183
|
+
_resolveAllWaiters(error: unknown): void;
|
|
184
|
+
_removeWaiter(waiter: SpeechRTCWaiter, skipKey?: unknown): void;
|
|
185
|
+
_createProtocolError(frame: Record<string, unknown>, message: string): Error;
|
|
186
|
+
_closeSocket(options?: {
|
|
187
|
+
preserveWaiters?: boolean;
|
|
188
|
+
}): void;
|
|
189
|
+
}
|
|
190
|
+
export { SpeechRTCTransport, DEFAULT_WS_URL, DEFAULT_PROXY_URL, DEFAULT_RESOURCE_ID, DEFAULT_NAMESPACE, DEFAULT_FORMAT, DEFAULT_SAMPLE_RATE, DEFAULT_SPEAKER, DEFAULT_SESSION_IDLE_TIMEOUT_MS, DEFAULT_CONNECTION_IDLE_TIMEOUT_MS, DEFAULT_CONNECTION_MAX_LIFETIME_MS, EVENT, SESSION_STATE, MESSAGE_TYPE, MESSAGE_FLAG, VERSION_BITS, HEADER_SIZE_BITS, SERIALIZATION, COMPRESSION, CONNECTION_EVENTS, CONNECT_ID_EVENTS, randomId, clamp, ensureObject, mergeDeep, concatUint8Arrays, shouldIncludeSessionId, shouldIncludeConnectId, inferResourceId, positiveNumberOr, stableJson, pcm16ToFloat32, isSessionTerminalState, iterateTextChunks, };
|
|
191
|
+
//# sourceMappingURL=SpeechRTC.transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpeechRTC.transport.d.ts","sourceRoot":"","sources":["../../../../src/rtc/SpeechRTC.transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CloudDrive.ts — 个人文件上传/管理(经七牛 CDN,完整 TypeScript 实现)
|
|
3
|
+
*
|
|
4
|
+
* 提供上传、列表、删除、重命名、原始 URL 等能力:与 Keepwork 存储网关
|
|
5
|
+
* (`/ts-storage`)通信,并把文件直传到七牛 `z2` 区域。
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const drive = window.keepwork.cloudDrive;
|
|
9
|
+
* const file = (document.querySelector('input[type=file]') as HTMLInputElement).files![0];
|
|
10
|
+
* const result = await drive.upload(file, { onProgress: p => console.log(p) });
|
|
11
|
+
* const list = await drive.list();
|
|
12
|
+
* await drive.rename(result.key, 'newName.png');
|
|
13
|
+
* const url = await drive.getRawUrl(result.key);
|
|
14
|
+
* await drive.remove(result.key);
|
|
15
|
+
*/
|
|
16
|
+
/** 上传进度信息 */
|
|
17
|
+
export interface UploadProgress {
|
|
18
|
+
percent: number;
|
|
19
|
+
loaded: number;
|
|
20
|
+
total: number;
|
|
21
|
+
}
|
|
22
|
+
/** 上传进度回调 */
|
|
23
|
+
export type UploadProgressCallback = (progress: UploadProgress) => void;
|
|
24
|
+
/** upload() 选项 */
|
|
25
|
+
export interface CloudDriveUploadOptions {
|
|
26
|
+
/** 显示名(默认 file.name) */
|
|
27
|
+
filename?: string;
|
|
28
|
+
/** 显式七牛 key(省略则自动生成) */
|
|
29
|
+
key?: string;
|
|
30
|
+
/** 进度回调 */
|
|
31
|
+
onProgress?: UploadProgressCallback;
|
|
32
|
+
}
|
|
33
|
+
/** uploadTempFile() 选项 */
|
|
34
|
+
export interface CloudDriveTempUploadOptions extends CloudDriveUploadOptions {
|
|
35
|
+
/** 生命周期(自动删除时间),见类内文档 */
|
|
36
|
+
expire?: string | number | null;
|
|
37
|
+
}
|
|
38
|
+
/** upload() 返回结果 */
|
|
39
|
+
export interface CloudDriveUploadResult {
|
|
40
|
+
key: string;
|
|
41
|
+
fileId: string | number | undefined;
|
|
42
|
+
filename: string;
|
|
43
|
+
size: number;
|
|
44
|
+
}
|
|
45
|
+
/** uploadTempFile() 返回结果 */
|
|
46
|
+
export interface CloudDriveTempUploadResult extends CloudDriveUploadResult {
|
|
47
|
+
url: string;
|
|
48
|
+
}
|
|
49
|
+
/** list() 选项 */
|
|
50
|
+
export interface CloudDriveListOptions {
|
|
51
|
+
/** 页码(1-based) */
|
|
52
|
+
page?: number;
|
|
53
|
+
/** 每页条数 */
|
|
54
|
+
perPage?: number;
|
|
55
|
+
/** 按文件名子串过滤 */
|
|
56
|
+
filename?: string;
|
|
57
|
+
}
|
|
58
|
+
/** sdk 需提供的最小接口 */
|
|
59
|
+
interface CloudDriveSdk {
|
|
60
|
+
baseURL?: string;
|
|
61
|
+
user?: {
|
|
62
|
+
id?: string | number;
|
|
63
|
+
};
|
|
64
|
+
getAuthHeaders(): Record<string, string>;
|
|
65
|
+
}
|
|
66
|
+
export default class CloudDrive {
|
|
67
|
+
sdk: CloudDriveSdk;
|
|
68
|
+
constructor(sdk: unknown);
|
|
69
|
+
/**
|
|
70
|
+
* 从 SDK 的核心 API 基地址推导存储网关基地址。
|
|
71
|
+
* api.keepwork.com/core/v0 → api.keepwork.com/ts-storage
|
|
72
|
+
*/
|
|
73
|
+
private _getStorageBase;
|
|
74
|
+
/**
|
|
75
|
+
* 向存储网关发起带认证的请求。
|
|
76
|
+
*/
|
|
77
|
+
private _storageRequest;
|
|
78
|
+
/**
|
|
79
|
+
* 为给定文件生成唯一七牛 object key。格式:`{userId}-{uuid}.{ext}`
|
|
80
|
+
*/
|
|
81
|
+
private _generateKey;
|
|
82
|
+
/**
|
|
83
|
+
* 上传 File/Blob 到个人 CDN 文件夹。
|
|
84
|
+
*/
|
|
85
|
+
upload(file: File | Blob, opts?: CloudDriveUploadOptions): Promise<CloudDriveUploadResult>;
|
|
86
|
+
/**
|
|
87
|
+
* 底层七牛上传(XMLHttpRequest,支持进度)。
|
|
88
|
+
* 七牛 z2 区上传端点:https://upload-z2.qiniup.com
|
|
89
|
+
*/
|
|
90
|
+
private _qiniuUpload;
|
|
91
|
+
/**
|
|
92
|
+
* 把 `opts.expire`(string | number | null)解析为控制
|
|
93
|
+
* `keepwork-public-temporary` 桶生命周期的桶前缀。
|
|
94
|
+
*
|
|
95
|
+
* 生命周期规则:
|
|
96
|
+
* - (无前缀)→ 服务端默认过期时间
|
|
97
|
+
* - `tmpImg` → 7 天
|
|
98
|
+
* - `temp_90` → 90 天
|
|
99
|
+
* - `temp_180` → 180 天
|
|
100
|
+
* - `temp_360` → 360 天
|
|
101
|
+
*
|
|
102
|
+
* 接受:null/undefined/'' → '';精确前缀字符串原样用;number(天数)→最小满足的前缀;
|
|
103
|
+
* 形如 '91days'/'180 d'/'7' 的字符串→解析为天数。
|
|
104
|
+
*/
|
|
105
|
+
private _resolveTempPrefix;
|
|
106
|
+
/**
|
|
107
|
+
* 为临时桶生成七牛 object key。镜像 `_generateKey()` 但可选地前置生命周期前缀
|
|
108
|
+
* 并保留原始文件名。格式:`{prefix}_{userId}-{originalFilename}`(无前缀时省略 prefix_)
|
|
109
|
+
*/
|
|
110
|
+
private _generateTempKey;
|
|
111
|
+
/**
|
|
112
|
+
* 上传 File/Blob 到公共临时 CDN 桶。生命周期(自动删除时间)由 `opts.expire` 控制
|
|
113
|
+
* (映射为桶 key 前缀,见 _resolveTempPrefix)。
|
|
114
|
+
*
|
|
115
|
+
* 结果 URL:`https://qiniu-public-temporary.keepwork.com/{key}`
|
|
116
|
+
*/
|
|
117
|
+
uploadTempFile(file: File | Blob, opts?: CloudDriveTempUploadOptions): Promise<CloudDriveTempUploadResult>;
|
|
118
|
+
/**
|
|
119
|
+
* 列出用户个人 CDN 文件夹中的文件。返回 `{ data: [...], total, page, ... }`。
|
|
120
|
+
*/
|
|
121
|
+
list(opts?: CloudDriveListOptions): Promise<unknown>;
|
|
122
|
+
/**
|
|
123
|
+
* 获取存储用量统计。
|
|
124
|
+
*/
|
|
125
|
+
info(): Promise<unknown>;
|
|
126
|
+
/**
|
|
127
|
+
* 重命名文件的显示名(七牛 key 保持不变)。
|
|
128
|
+
*/
|
|
129
|
+
rename(key: string, filename: string): Promise<unknown>;
|
|
130
|
+
/**
|
|
131
|
+
* 按 id(或当作 id 的 key)删除文件。
|
|
132
|
+
*/
|
|
133
|
+
remove(id: string | number): Promise<unknown>;
|
|
134
|
+
/**
|
|
135
|
+
* 获取文件的公共 CDN URL。
|
|
136
|
+
*/
|
|
137
|
+
getRawUrl(fileId: string | number): Promise<string>;
|
|
138
|
+
}
|
|
139
|
+
export {};
|
|
140
|
+
//# sourceMappingURL=CloudDrive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudDrive.d.ts","sourceRoot":"","sources":["../../../../src/store/CloudDrive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,aAAa;AACb,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,aAAa;AACb,MAAM,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;AAExE,kBAAkB;AAClB,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW;IACX,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAED,0BAA0B;AAC1B,MAAM,WAAW,2BAA4B,SAAQ,uBAAuB;IAC1E,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,oBAAoB;AACpB,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4BAA4B;AAC5B,MAAM,WAAW,0BAA2B,SAAQ,sBAAsB;IACxE,GAAG,EAAE,MAAM,CAAC;CACb;AAED,gBAAgB;AAChB,MAAM,WAAW,qBAAqB;IACpC,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AASD,mBAAmB;AACnB,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAChC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAUD,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,GAAG,EAAE,aAAa,CAAC;gBAEP,GAAG,EAAE,OAAO;IAMxB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;YACW,eAAe;IA8B7B;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAE,uBAA4B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAwBpG;;;OAGG;IACH,OAAO,CAAC,YAAY;IAgCpB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;;;;OAKG;IACG,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAE,2BAAgC,GAAG,OAAO,CAAC,0BAA0B,CAAC;IA8BpH;;OAEG;IACG,IAAI,CAAC,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,OAAO,CAAC;IAa9D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAM9B;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS7D;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQnD;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAI1D"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocalStorageUtil — 基于 IndexedDB 的持久化存储工具,配备内存 LRU 缓存
|
|
3
|
+
*
|
|
4
|
+
* 数据流向:
|
|
5
|
+
* - 写入:立即更新内存缓存(L1),然后异步写入 IndexedDB(L2)
|
|
6
|
+
* - 读取:内存缓存命中直接返回;未命中时触发后台异步预热
|
|
7
|
+
* - 旧版 localStorage 数据在首次读取时自动迁移到 IndexedDB
|
|
8
|
+
*
|
|
9
|
+
* 超大项(默认 > 2MB)跳过内存缓存,直接操作 IndexedDB,
|
|
10
|
+
* 防止单个巨型对象挤出整个缓存。
|
|
11
|
+
*/
|
|
12
|
+
/** getStorageStats 返回的存储使用情况统计 */
|
|
13
|
+
export interface StorageStats {
|
|
14
|
+
/** IndexedDB 中所有 key/value 的估算字节数 */
|
|
15
|
+
indexedDB: number;
|
|
16
|
+
/** 当前内存缓存的 key 数量 */
|
|
17
|
+
memoryCache: number;
|
|
18
|
+
/** 当前内存缓存的估算字节数 */
|
|
19
|
+
memoryCacheSize: number;
|
|
20
|
+
/** 内存缓存的最大字节限制 */
|
|
21
|
+
memoryCacheMaxSize: number;
|
|
22
|
+
}
|
|
23
|
+
declare class LocalStorageUtil {
|
|
24
|
+
static readonly DB_NAME = "keepwork-personal-store";
|
|
25
|
+
static readonly STORE_NAME = "keyval";
|
|
26
|
+
/** IndexedDB 连接 Promise(单例,全生命周期共享) */
|
|
27
|
+
private static _dbPromise;
|
|
28
|
+
/** 内存 LRU 缓存(L1),key → 任意值 */
|
|
29
|
+
private static _memoryCache;
|
|
30
|
+
/** 当前内存缓存的估算字节数 */
|
|
31
|
+
private static _memoryCacheSize;
|
|
32
|
+
/** 各 key 的最近访问时间戳(用于 LRU 淘汰) */
|
|
33
|
+
private static _memoryCacheAccess;
|
|
34
|
+
/** 内存缓存最大字节限制(10 MB) */
|
|
35
|
+
static MAX_CACHE_SIZE: number;
|
|
36
|
+
/** 单项占内存缓存最大比例(20%),超过此比例的项跳过内存缓存 */
|
|
37
|
+
static MAX_ITEM_SIZE_RATIO: number;
|
|
38
|
+
/** 触发 LRU 淘汰的缓存使用率阈值(80%) */
|
|
39
|
+
static CACHE_EVICTION_THRESHOLD: number;
|
|
40
|
+
static get MAX_ITEM_SIZE_FOR_CACHE(): number;
|
|
41
|
+
/**
|
|
42
|
+
* 估算值在内存中的字节占用(近似值,UTF-16 计算)。
|
|
43
|
+
* @internal
|
|
44
|
+
*/
|
|
45
|
+
private static _estimateSize;
|
|
46
|
+
/**
|
|
47
|
+
* 将项写入内存缓存。
|
|
48
|
+
* 超大项跳过缓存;若缓存接近阈值则先触发 LRU 淘汰。
|
|
49
|
+
*
|
|
50
|
+
* @returns 是否成功写入内存缓存
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
private static _setCacheItem;
|
|
54
|
+
/** 从内存缓存读取项,并更新 LRU 访问时间。@internal */
|
|
55
|
+
private static _getCacheItem;
|
|
56
|
+
/** 从内存缓存中移除项。@internal */
|
|
57
|
+
private static _removeCacheItem;
|
|
58
|
+
/**
|
|
59
|
+
* LRU 淘汰:按最近访问时间升序逐项删除,直到腾出足够空间。
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
62
|
+
private static _evictLRUItems;
|
|
63
|
+
/**
|
|
64
|
+
* 获取(或初始化)IndexedDB 连接,返回单例 Promise。
|
|
65
|
+
* @internal
|
|
66
|
+
*/
|
|
67
|
+
private static _getDB;
|
|
68
|
+
/**
|
|
69
|
+
* 在 IndexedDB 事务中执行回调。
|
|
70
|
+
* `callback` 接收 store、resolve、reject 三个参数,
|
|
71
|
+
* 可在其中调用 store 方法并决定 Promise 结果。
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
private static _withStore;
|
|
75
|
+
/**
|
|
76
|
+
* 同步写入(立即更新内存缓存,异步写入 IndexedDB)。
|
|
77
|
+
* 适用于写入频繁、读取延迟不敏感的场景。
|
|
78
|
+
*
|
|
79
|
+
* @param key - 存储键
|
|
80
|
+
* @param value - 要存储的值(任意可序列化对象)
|
|
81
|
+
* @returns 始终返回 true(写入操作已调度)
|
|
82
|
+
*/
|
|
83
|
+
static setItem(key: string, value: unknown): boolean;
|
|
84
|
+
/** @internal */
|
|
85
|
+
private static _setItemAsync;
|
|
86
|
+
/**
|
|
87
|
+
* 同步读取(从内存缓存取值,并在后台异步预热缓存)。
|
|
88
|
+
* 若内存缓存未命中,立即返回 `defaultValue` 并在后台加载 IndexedDB 数据。
|
|
89
|
+
*
|
|
90
|
+
* @param key - 存储键
|
|
91
|
+
* @param defaultValue - 缓存未命中时的默认值(默认 null)
|
|
92
|
+
*/
|
|
93
|
+
static getItem<T = unknown>(key: string, defaultValue?: T | null): T | null;
|
|
94
|
+
/** @internal */
|
|
95
|
+
private static _getItemAsync;
|
|
96
|
+
/**
|
|
97
|
+
* 异步读取,保证获得持久化数据。
|
|
98
|
+
* 优先级:内存缓存 → IndexedDB → localStorage 旧版迁移。
|
|
99
|
+
*
|
|
100
|
+
* @param key - 存储键
|
|
101
|
+
* @param defaultValue - 未找到时的默认值
|
|
102
|
+
*/
|
|
103
|
+
static getItemAsync<T = unknown>(key: string, defaultValue?: T | null): Promise<T | null>;
|
|
104
|
+
/**
|
|
105
|
+
* 直接从 IndexedDB 读取(绕过内存缓存,适合需要强一致性的场景)。
|
|
106
|
+
*/
|
|
107
|
+
static getFromIndexedDB<T = unknown>(key: string, defaultValue?: T | null): Promise<T | null>;
|
|
108
|
+
/** 直接写入 IndexedDB(绕过内存缓存)。 */
|
|
109
|
+
static setToIndexedDB(key: string, value: unknown): Promise<boolean>;
|
|
110
|
+
/**
|
|
111
|
+
* 获取 IndexedDB 中所有 key 的列表。
|
|
112
|
+
*/
|
|
113
|
+
static getAllKeys(): Promise<IDBValidKey[]>;
|
|
114
|
+
/**
|
|
115
|
+
* 同步删除(立即清理内存缓存,异步删除 IndexedDB)。
|
|
116
|
+
*/
|
|
117
|
+
static removeItem(key: string): boolean;
|
|
118
|
+
/** @internal */
|
|
119
|
+
private static _removeItemAsync;
|
|
120
|
+
/**
|
|
121
|
+
* 清空所有数据(内存缓存 + IndexedDB)。
|
|
122
|
+
*/
|
|
123
|
+
static clear(): boolean;
|
|
124
|
+
/** @internal */
|
|
125
|
+
private static _clearAsync;
|
|
126
|
+
/**
|
|
127
|
+
* 获取存储使用情况统计(内存缓存 + IndexedDB 估算大小)。
|
|
128
|
+
* 用于调试和容量监控。
|
|
129
|
+
*/
|
|
130
|
+
static getStorageStats(): Promise<StorageStats>;
|
|
131
|
+
}
|
|
132
|
+
/** StorageUtil 是 LocalStorageUtil 的别名,保持向后兼容 */
|
|
133
|
+
declare const StorageUtil: typeof LocalStorageUtil;
|
|
134
|
+
export default LocalStorageUtil;
|
|
135
|
+
export { LocalStorageUtil, StorageUtil };
|
|
136
|
+
//# sourceMappingURL=LocalStorageUtil.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalStorageUtil.d.ts","sourceRoot":"","sources":["../../../../src/store/LocalStorageUtil.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB;IAClB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,cAAM,gBAAgB;IACpB,MAAM,CAAC,QAAQ,CAAC,OAAO,6BAA6B;IACpD,MAAM,CAAC,QAAQ,CAAC,UAAU,YAAY;IAEtC,uCAAuC;IACvC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAqC;IAE9D,8BAA8B;IAC9B,OAAO,CAAC,MAAM,CAAC,YAAY,CAA+B;IAC1D,mBAAmB;IACnB,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAK;IACpC,gCAAgC;IAChC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA8B;IAE/D,wBAAwB;IACxB,MAAM,CAAC,cAAc,SAAoB;IACzC,qCAAqC;IACrC,MAAM,CAAC,mBAAmB,SAAO;IACjC,6BAA6B;IAC7B,MAAM,CAAC,wBAAwB,SAAO;IAEtC,MAAM,KAAK,uBAAuB,IAAI,MAAM,CAE3C;IAID;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAa5B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IA6B5B,sCAAsC;IACtC,OAAO,CAAC,MAAM,CAAC,aAAa;IAQ5B,0BAA0B;IAC1B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAS/B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAwB7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,MAAM;IA8BrB;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAyBzB;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAQpD,gBAAgB;mBACK,aAAa;IAYlC;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,CAAC,GAAG,IAAW,GAAG,CAAC,GAAG,IAAI;IAcjF,gBAAgB;mBACK,aAAa;IAiBlC;;;;;;OAMG;WACU,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAgCrG;;OAEG;WACU,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAKzG,8BAA8B;WACjB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1E;;OAEG;WACU,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAgBjD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQvC,gBAAgB;mBACK,gBAAgB;IAYrC;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,OAAO;IAUvB,gBAAgB;mBACK,WAAW;IAYhC;;;OAGG;WACU,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;CAsEtD;AAED,gDAAgD;AAChD,QAAA,MAAM,WAAW,yBAAmB,CAAC;AAErC,eAAe,gBAAgB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC"}
|