@burdenoff/fe-libs 2026.914.1 → 2026.914.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/dist/shared/assistant/index.d.ts +1 -0
- package/dist/shared/assistant/index.d.ts.map +1 -1
- package/dist/shared/assistant/speech/browserSpeechEngine.d.ts.map +1 -1
- package/dist/shared/assistant/speech/browserSpeechEngine.js +53 -26
- package/dist/shared/assistant/speech/createSpeechEngine.d.ts +25 -2
- package/dist/shared/assistant/speech/createSpeechEngine.d.ts.map +1 -1
- package/dist/shared/assistant/speech/createSpeechEngine.js +36 -13
- package/dist/shared/assistant/speech/hostedTtsProtocol.d.ts +25 -1
- package/dist/shared/assistant/speech/hostedTtsProtocol.d.ts.map +1 -1
- package/dist/shared/assistant/speech/hostedTtsProtocol.js +15 -8
- package/dist/shared/assistant/speech/hostedTtsSpeechEngine.d.ts +16 -1
- package/dist/shared/assistant/speech/hostedTtsSpeechEngine.d.ts.map +1 -1
- package/dist/shared/assistant/speech/hostedTtsSpeechEngine.js +84 -52
- package/dist/shared/assistant/speech/hostedVoiceCatalogue.d.ts.map +1 -1
- package/dist/shared/assistant/speech/hostedVoiceCatalogue.js +2 -1
- package/dist/shared/assistant/speech/index.d.ts +1 -1
- package/dist/shared/assistant/speech/index.d.ts.map +1 -1
- package/dist/shared/assistant/speech/routingSpeechEngine.d.ts.map +1 -1
- package/dist/shared/assistant/speech/routingSpeechEngine.js +41 -20
- package/dist/shared/assistant/speech/types.d.ts +10 -0
- package/dist/shared/assistant/speech/types.d.ts.map +1 -1
- package/dist/shared/assistant/turnActivity.d.ts +5 -1
- package/dist/shared/assistant/turnActivity.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMessageList.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMessageList.js +28 -27
- package/dist/shared/assistant/ui/AssistantSpeechProvider.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantSpeechProvider.js +209 -190
- package/dist/shared/assistant/ui/AssistantTurnActivity.d.ts +6 -3
- package/dist/shared/assistant/ui/AssistantTurnActivity.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantTurnActivity.js +8 -8
- package/dist/shared/assistant/ui/usePrefersReducedMotion.d.ts +55 -0
- package/dist/shared/assistant/ui/usePrefersReducedMotion.d.ts.map +1 -0
- package/dist/shared/assistant/ui/usePrefersReducedMotion.js +28 -0
- package/dist/shared/assistant/ui/voice/VoiceMiniController.d.ts +4 -2
- package/dist/shared/assistant/ui/voice/VoiceMiniController.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/VoiceStage.d.ts +4 -2
- package/dist/shared/assistant/ui/voice/VoiceStage.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/VoiceStatusText.d.ts +12 -1
- package/dist/shared/assistant/ui/voice/VoiceStatusText.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/VoiceStatusText.js +19 -18
- package/dist/shared/assistant/voice/speechVoices.d.ts +15 -0
- package/dist/shared/assistant/voice/speechVoices.d.ts.map +1 -1
- package/dist/shared/assistant/voice/speechVoices.js +31 -26
- package/dist/shared/assistant/voice/voiceStatus.d.ts +8 -2
- package/dist/shared/assistant/voice/voiceStatus.d.ts.map +1 -1
- package/dist/shared-assistant.js +100 -99
- package/package.json +1 -1
|
@@ -111,6 +111,7 @@ export * from './preview/entity/AssistantEntityPreview';
|
|
|
111
111
|
export * from './ui/panelOverlays';
|
|
112
112
|
export * from './ui/useDropdownEscape';
|
|
113
113
|
export * from './ui/useOverlayFocus';
|
|
114
|
+
export * from './ui/usePrefersReducedMotion';
|
|
114
115
|
export * from './preview/useAssistantPreviewBridge';
|
|
115
116
|
export * from './preview/AssistantPreviewOverlay';
|
|
116
117
|
export * from './ui/composer/AssistantLanguageSelector';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AAGxB,cAAc,wBAAwB,CAAC;AAKvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAG9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAK/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAG3C,cAAc,QAAQ,CAAC;AAEvB,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,wCAAwC,CAAC;AACvD,cAAc,0CAA0C,CAAC;AACzD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AAGzC,cAAc,WAAW,CAAC;AAE1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AAErC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,kCAAkC,CAAC;AAEjD,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAElC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAE1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAE1C,cAAc,iCAAiC,CAAC;AAGhD,cAAc,OAAO,CAAC;AACtB,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserSpeechEngine.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/browserSpeechEngine.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"browserSpeechEngine.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/browserSpeechEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,SAAS,CAAC;AAqEjB,eAAO,MAAM,mBAAmB,EAAE,YA6HjC,CAAC"}
|
|
@@ -22,7 +22,17 @@ function n(e) {
|
|
|
22
22
|
default: return "unknown";
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
function r(e, t) {
|
|
26
|
+
if (!t) return null;
|
|
27
|
+
let n;
|
|
28
|
+
try {
|
|
29
|
+
n = e.getVoices();
|
|
30
|
+
} catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return n.find((e) => e === t) ?? n.find((e) => e.name === t.name && e.lang === t.lang) ?? null;
|
|
34
|
+
}
|
|
35
|
+
var i = 0, a = {
|
|
26
36
|
id: "browser-speech-synthesis",
|
|
27
37
|
isSupported() {
|
|
28
38
|
return e() !== null && t();
|
|
@@ -40,50 +50,67 @@ var r = 0, i = {
|
|
|
40
50
|
let r = () => t();
|
|
41
51
|
return n.addEventListener("voiceschanged", r), () => n.removeEventListener("voiceschanged", r);
|
|
42
52
|
},
|
|
43
|
-
speak(
|
|
44
|
-
let
|
|
45
|
-
if (!
|
|
46
|
-
|
|
53
|
+
speak(a, o, s = {}) {
|
|
54
|
+
let c = e();
|
|
55
|
+
if (!c || !t()) {
|
|
56
|
+
s.onError?.("unsupported");
|
|
47
57
|
return;
|
|
48
58
|
}
|
|
49
|
-
let
|
|
50
|
-
if (
|
|
51
|
-
|
|
59
|
+
let l = a.filter((e) => e.trim().length > 0);
|
|
60
|
+
if (l.length === 0) {
|
|
61
|
+
s.onEnd?.();
|
|
52
62
|
return;
|
|
53
63
|
}
|
|
54
|
-
|
|
55
|
-
let
|
|
64
|
+
i += 1;
|
|
65
|
+
let u = i;
|
|
56
66
|
try {
|
|
57
|
-
|
|
67
|
+
c.cancel();
|
|
58
68
|
} catch {}
|
|
59
|
-
c
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
69
|
+
let d = r(c, o.voice);
|
|
70
|
+
l.forEach((e, t) => {
|
|
71
|
+
if (u !== i) return;
|
|
72
|
+
let r;
|
|
73
|
+
try {
|
|
74
|
+
r = new window.SpeechSynthesisUtterance(e), r.lang = o.lang, d && (r.voice = d), o.rate !== void 0 && (r.rate = o.rate);
|
|
75
|
+
} catch {
|
|
76
|
+
i += 1;
|
|
77
|
+
try {
|
|
78
|
+
c.cancel();
|
|
79
|
+
} catch {}
|
|
80
|
+
s.onError?.("unknown");
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
r.onstart = () => {
|
|
84
|
+
u === i && s.onChunkStart?.(t);
|
|
85
|
+
}, r.onerror = (e) => {
|
|
86
|
+
if (u === i) {
|
|
87
|
+
i += 1;
|
|
66
88
|
try {
|
|
67
|
-
|
|
89
|
+
c.cancel();
|
|
68
90
|
} catch {}
|
|
69
|
-
|
|
91
|
+
s.onError?.(n(e.error));
|
|
70
92
|
}
|
|
71
|
-
}, t ===
|
|
72
|
-
|
|
93
|
+
}, t === l.length - 1 && (r.onend = () => {
|
|
94
|
+
u === i && s.onEnd?.();
|
|
73
95
|
});
|
|
74
96
|
try {
|
|
75
|
-
|
|
97
|
+
c.speak(r);
|
|
76
98
|
} catch {
|
|
77
|
-
|
|
99
|
+
if (u !== i) return;
|
|
100
|
+
i += 1;
|
|
101
|
+
try {
|
|
102
|
+
c.cancel();
|
|
103
|
+
} catch {}
|
|
104
|
+
s.onError?.("unknown");
|
|
78
105
|
}
|
|
79
106
|
});
|
|
80
107
|
},
|
|
81
108
|
cancel() {
|
|
82
|
-
|
|
109
|
+
i += 1;
|
|
83
110
|
try {
|
|
84
111
|
e()?.cancel();
|
|
85
112
|
} catch {}
|
|
86
113
|
}
|
|
87
114
|
};
|
|
88
115
|
//#endregion
|
|
89
|
-
export {
|
|
116
|
+
export { a as browserSpeechEngine };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { HostedSpeechEngine } from './hostedTtsSpeechEngine';
|
|
1
2
|
import { SpeechEngine } from './types';
|
|
2
3
|
export interface SpeechEngineConfig {
|
|
3
4
|
/** Our proxy's URL. Empty/undefined keeps the device engine. */
|
|
@@ -21,6 +22,11 @@ export interface SpeechEngineConfig {
|
|
|
21
22
|
* access tokens expire and the engine outlives any one of them — reading a
|
|
22
23
|
* token once at configure time would work until it rotated and then fail
|
|
23
24
|
* exactly where it is hardest to notice, mid-reply.
|
|
25
|
+
*
|
|
26
|
+
* ★ Several callers may configure, and the LAST `getHeaders` given wins, without
|
|
27
|
+
* rebuilding the engine. Only a change of ENDPOINT rebuilds it. A call that
|
|
28
|
+
* repeats the endpoint without `getHeaders` keeps the existing source rather
|
|
29
|
+
* than silently making every later request anonymous (and refused).
|
|
24
30
|
*/
|
|
25
31
|
export declare function configureSpeechEngine(options: {
|
|
26
32
|
ttsEndpoint?: string | null;
|
|
@@ -42,9 +48,26 @@ export declare function readSpeechEngineConfig(): SpeechEngineConfig;
|
|
|
42
48
|
*/
|
|
43
49
|
export declare function createSpeechEngines(config?: SpeechEngineConfig): {
|
|
44
50
|
device: SpeechEngine;
|
|
45
|
-
hosted:
|
|
51
|
+
hosted: HostedSpeechEngine | null;
|
|
46
52
|
};
|
|
47
53
|
export declare function getSpeechEngine(): SpeechEngine;
|
|
48
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Be told when `getSpeechEngine()` would return a different engine.
|
|
56
|
+
*
|
|
57
|
+
* ★★ Without this a panel mounted BEFORE the host configured hosted speech kept
|
|
58
|
+
* the device engine it read at mount (BOFF-7283): `AssistantSpeechProvider`
|
|
59
|
+
* read the engine as a default prop, so it only noticed the change if something
|
|
60
|
+
* else happened to re-render it — and until then spoke with the device voice.
|
|
61
|
+
* The provider subscribes through `useSyncExternalStore`.
|
|
62
|
+
*/
|
|
63
|
+
export declare function subscribeSpeechEngine(listener: () => void): () => void;
|
|
64
|
+
/**
|
|
65
|
+
* Drop the singleton so the next call re-reads the config, and tell subscribers.
|
|
66
|
+
*
|
|
67
|
+
* ★ The notification is DEFERRED to a microtask. `configureSpeechEngine` is
|
|
68
|
+
* called during render by the product providers, and a synchronous notify would
|
|
69
|
+
* update another component while this one is rendering — which React rejects.
|
|
70
|
+
* Coalesced, so a burst of resets notifies once.
|
|
71
|
+
*/
|
|
49
72
|
export declare function resetSpeechEngine(): void;
|
|
50
73
|
//# sourceMappingURL=createSpeechEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSpeechEngine.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/createSpeechEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"createSpeechEngine.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/createSpeechEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAqBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C,GAAG,IAAI,CA2BP;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,kBAAkB,CAY3D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,kBAA6C,GAAG;IAC1F,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACnC,CASA;AAiBD,wBAAgB,eAAe,IAAI,YAAY,CAO9C;AAqBD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAKtE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CASxC"}
|
|
@@ -2,26 +2,30 @@ import { browserSpeechEngine as e } from "./browserSpeechEngine.js";
|
|
|
2
2
|
import { createHostedTtsEngine as t } from "./hostedTtsSpeechEngine.js";
|
|
3
3
|
import { createRoutingSpeechEngine as n } from "./routingSpeechEngine.js";
|
|
4
4
|
//#region src/shared/assistant/speech/createSpeechEngine.ts
|
|
5
|
-
var r, i;
|
|
6
|
-
function
|
|
5
|
+
var r, i, a = () => i?.() ?? {};
|
|
6
|
+
function o(e) {
|
|
7
7
|
let t = e.ttsEndpoint?.trim() || void 0;
|
|
8
|
-
t === r
|
|
8
|
+
if (t === r) {
|
|
9
|
+
e.getHeaders && (i = e.getHeaders), t && p();
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
r = t, i = e.getHeaders, _();
|
|
9
13
|
}
|
|
10
|
-
function
|
|
14
|
+
function s() {
|
|
11
15
|
if (r) return {
|
|
12
16
|
endpoint: r,
|
|
13
|
-
getHeaders:
|
|
17
|
+
getHeaders: a
|
|
14
18
|
};
|
|
15
19
|
if (typeof window < "u") {
|
|
16
20
|
let e = window.__HB_TTS_ENDPOINT__;
|
|
17
21
|
if (e) return {
|
|
18
22
|
endpoint: e,
|
|
19
|
-
getHeaders:
|
|
23
|
+
getHeaders: a
|
|
20
24
|
};
|
|
21
25
|
}
|
|
22
26
|
return { endpoint: (void 0)?.trim() || null };
|
|
23
27
|
}
|
|
24
|
-
function
|
|
28
|
+
function c(n = s()) {
|
|
25
29
|
return {
|
|
26
30
|
device: e,
|
|
27
31
|
hosted: n.endpoint ? t({
|
|
@@ -31,12 +35,31 @@ function s(n = o()) {
|
|
|
31
35
|
}) : null
|
|
32
36
|
};
|
|
33
37
|
}
|
|
34
|
-
var
|
|
35
|
-
function
|
|
36
|
-
|
|
38
|
+
var l = null, u = null;
|
|
39
|
+
function d() {
|
|
40
|
+
if (!l) {
|
|
41
|
+
let e = c();
|
|
42
|
+
u = e.hosted, l = n(e);
|
|
43
|
+
}
|
|
44
|
+
return l;
|
|
45
|
+
}
|
|
46
|
+
var f = !1;
|
|
47
|
+
function p() {
|
|
48
|
+
f || (f = !0, queueMicrotask(() => {
|
|
49
|
+
f = !1, u?.headersChanged();
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
var m = /* @__PURE__ */ new Set(), h = !1;
|
|
53
|
+
function g(e) {
|
|
54
|
+
return m.add(e), () => {
|
|
55
|
+
m.delete(e);
|
|
56
|
+
};
|
|
37
57
|
}
|
|
38
|
-
function
|
|
39
|
-
|
|
58
|
+
function _() {
|
|
59
|
+
l = null, u = null, !h && (h = !0, queueMicrotask(() => {
|
|
60
|
+
h = !1;
|
|
61
|
+
for (let e of [...m]) e();
|
|
62
|
+
}));
|
|
40
63
|
}
|
|
41
64
|
//#endregion
|
|
42
|
-
export {
|
|
65
|
+
export { o as configureSpeechEngine, c as createSpeechEngines, d as getSpeechEngine, s as readSpeechEngineConfig, _ as resetSpeechEngine, g as subscribeSpeechEngine };
|
|
@@ -61,7 +61,8 @@ export declare const SPEAKING_RATE_MAX_SYNC = 4;
|
|
|
61
61
|
export declare const SPEAKING_RATE_MAX_STREAMING = 2;
|
|
62
62
|
export declare const SPEAKING_RATE_MAX = 4;
|
|
63
63
|
/**
|
|
64
|
-
* Should a failure stop the engine claiming support for
|
|
64
|
+
* Should a failure stop the engine claiming support — for `disableDurationMs`,
|
|
65
|
+
* not for the rest of the page?
|
|
65
66
|
*
|
|
66
67
|
* ★ `not-allowed` has TWO producers and only one of them is terminal:
|
|
67
68
|
*
|
|
@@ -83,6 +84,29 @@ export declare const SPEAKING_RATE_MAX = 4;
|
|
|
83
84
|
* DOM, no Audio), so the decision is kept where it CAN be.
|
|
84
85
|
*/
|
|
85
86
|
export declare function shouldDisableEngine(reason: string | undefined, transient: boolean): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* How long a disabled hosted engine stays off before it is tried again.
|
|
89
|
+
*
|
|
90
|
+
* ★★ Bounded, not for the rest of the page (BOFF-7283). "Every later request
|
|
91
|
+
* will be refused identically" is true of a genuinely wrong credential and false
|
|
92
|
+
* of everything else that surfaces as the same status:
|
|
93
|
+
*
|
|
94
|
+
* - the proxy answers 401 when ITS auth check cannot reach the gateway and gets
|
|
95
|
+
* a JSON error back (a gateway 503 included) — an outage, not a refusal;
|
|
96
|
+
* - a token that was stale at the moment of the request is fresh a minute
|
|
97
|
+
* later, because `getHeaders` is read per request;
|
|
98
|
+
* - a proxy redeploy that briefly 404s comes back on its own.
|
|
99
|
+
*
|
|
100
|
+
* A page-lifetime latch turned any of those into device voices (or, before the
|
|
101
|
+
* fallback was fixed, silence) until the user happened to reload — with nothing
|
|
102
|
+
* on screen explaining why. The cost of a bound is one failed request per
|
|
103
|
+
* window while a refusal is real, which is negligible.
|
|
104
|
+
*
|
|
105
|
+
* `unsupported` (404/501: no such route) is held longer than `not-allowed`,
|
|
106
|
+
* because it only recovers on a deploy.
|
|
107
|
+
*/
|
|
108
|
+
export declare const HOSTED_DISABLE_MS: Readonly<Record<'not-allowed' | 'unsupported', number>>;
|
|
109
|
+
export declare function disableDurationMs(reason: string | undefined): number;
|
|
86
110
|
/** Vendor limit is 5000 bytes per request; stay well inside it. */
|
|
87
111
|
export declare const HOSTED_TTS_MAX_CHARS = 2000;
|
|
88
112
|
export declare function buildRequest(text: string, languageCode: string, tier: string, voiceName?: string | null, speakingRate?: number): HostedTtsRequest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostedTtsProtocol.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/hostedTtsProtocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,sBAAsB,IAAM,CAAC;AAC1C,eAAO,MAAM,2BAA2B,IAAM,CAAC;AAC/C,eAAO,MAAM,iBAAiB,IAAyB,CAAC;AAExD
|
|
1
|
+
{"version":3,"file":"hostedTtsProtocol.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/hostedTtsProtocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,sBAAsB,IAAM,CAAC;AAC1C,eAAO,MAAM,2BAA2B,IAAM,CAAC;AAC/C,eAAO,MAAM,iBAAiB,IAAyB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAG3F;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,GAAG,aAAa,EAAE,MAAM,CAAC,CAGrF,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEpE;AAED,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,YAAY,CAAC,EAAE,MAAM,GACpB,gBAAgB,CAUlB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAOrE;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAaxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,IAAI,EAAE,WAAW,GAAG,qBAAqB,GACxC,UAAU,GAAG,IAAI,CAWnB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAuB,GAAG,MAAM,EAAE,CAenF"}
|
|
@@ -3,8 +3,15 @@ var e = .25, t = 4, n = 2, r = 4;
|
|
|
3
3
|
function i(e, t) {
|
|
4
4
|
return t ? !1 : e === "not-allowed" || e === "unsupported";
|
|
5
5
|
}
|
|
6
|
-
var a =
|
|
7
|
-
|
|
6
|
+
var a = {
|
|
7
|
+
"not-allowed": 6e4,
|
|
8
|
+
unsupported: 10 * 6e4
|
|
9
|
+
};
|
|
10
|
+
function o(e) {
|
|
11
|
+
return e === "unsupported" ? a.unsupported : a["not-allowed"];
|
|
12
|
+
}
|
|
13
|
+
var s = 2e3;
|
|
14
|
+
function c(e, t, n, r, i) {
|
|
8
15
|
let a = {
|
|
9
16
|
text: e,
|
|
10
17
|
languageCode: t,
|
|
@@ -12,25 +19,25 @@ function o(e, t, n, r, i) {
|
|
|
12
19
|
};
|
|
13
20
|
return r && r.toLowerCase().startsWith(t.toLowerCase()) && (a.voiceName = r), i !== void 0 && (a.speakingRate = i), a;
|
|
14
21
|
}
|
|
15
|
-
function
|
|
22
|
+
function l(e) {
|
|
16
23
|
return e === 401 || e === 403 ? "not-allowed" : e === 404 || e === 501 ? "unsupported" : "unknown";
|
|
17
24
|
}
|
|
18
|
-
function
|
|
25
|
+
function u(e) {
|
|
19
26
|
let t = globalThis.Buffer, n = typeof atob == "function" ? atob(e) : t?.from(e, "base64").toString("binary") ?? "", r = new Uint8Array(n.length);
|
|
20
27
|
for (let e = 0; e < n.length; e += 1) r[e] = n.charCodeAt(e);
|
|
21
28
|
return r;
|
|
22
29
|
}
|
|
23
|
-
function
|
|
30
|
+
function d(e, t) {
|
|
24
31
|
if (t instanceof ArrayBuffer) return t.byteLength > 0 ? new Uint8Array(t) : null;
|
|
25
32
|
if (e?.includes("json") || typeof t == "object") {
|
|
26
33
|
let e = t.audioContent;
|
|
27
34
|
if (!e) return null;
|
|
28
|
-
let n =
|
|
35
|
+
let n = u(e);
|
|
29
36
|
return n.length > 0 ? n : null;
|
|
30
37
|
}
|
|
31
38
|
return null;
|
|
32
39
|
}
|
|
33
|
-
function
|
|
40
|
+
function f(e, t = s) {
|
|
34
41
|
if (e.length <= t) return [e];
|
|
35
42
|
let n = [], r = e;
|
|
36
43
|
for (; r.length > t;) {
|
|
@@ -40,4 +47,4 @@ function u(e, t = a) {
|
|
|
40
47
|
return r && n.push(r), n.filter((e) => e.length > 0);
|
|
41
48
|
}
|
|
42
49
|
//#endregion
|
|
43
|
-
export { a as HOSTED_TTS_MAX_CHARS, r as SPEAKING_RATE_MAX, n as SPEAKING_RATE_MAX_STREAMING, t as SPEAKING_RATE_MAX_SYNC, e as SPEAKING_RATE_MIN,
|
|
50
|
+
export { a as HOSTED_DISABLE_MS, s as HOSTED_TTS_MAX_CHARS, r as SPEAKING_RATE_MAX, n as SPEAKING_RATE_MAX_STREAMING, t as SPEAKING_RATE_MAX_SYNC, e as SPEAKING_RATE_MIN, u as base64ToBytes, c as buildRequest, l as classifyHttpFailure, d as decodeAudioResponse, o as disableDurationMs, i as shouldDisableEngine, f as splitForVendor };
|
|
@@ -5,6 +5,21 @@ export interface HostedTtsOptions {
|
|
|
5
5
|
/** Extra headers per request (auth). Called fresh each time so a rotated token is picked up. */
|
|
6
6
|
getHeaders?: () => Record<string, string>;
|
|
7
7
|
fetchImpl?: typeof fetch;
|
|
8
|
+
/** Test seam: the clock the disable window is measured against. */
|
|
9
|
+
now?: () => number;
|
|
8
10
|
}
|
|
9
|
-
|
|
11
|
+
/**
|
|
12
|
+
* The hosted engine, plus the one hook its owner needs beyond `SpeechEngine`.
|
|
13
|
+
*/
|
|
14
|
+
export interface HostedSpeechEngine extends SpeechEngine {
|
|
15
|
+
/**
|
|
16
|
+
* The configured header source may now yield different headers.
|
|
17
|
+
*
|
|
18
|
+
* Lifts a refusal (401/403) that was earned with DIFFERENT headers — a stale
|
|
19
|
+
* or missing token that the host has since corrected — instead of keeping
|
|
20
|
+
* hosted speech off for the rest of the window. A no-op otherwise.
|
|
21
|
+
*/
|
|
22
|
+
headersChanged(): void;
|
|
23
|
+
}
|
|
24
|
+
export declare function createHostedTtsEngine(options: HostedTtsOptions): HostedSpeechEngine;
|
|
10
25
|
//# sourceMappingURL=hostedTtsSpeechEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostedTtsSpeechEngine.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/hostedTtsSpeechEngine.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hostedTtsSpeechEngine.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/hostedTtsSpeechEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAWH,OAAO,KAAK,EAAE,YAAY,EAA4D,MAAM,SAAS,CAAC;AAEtG,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,gGAAgG;IAChG,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD;;;;;;OAMG;IACH,cAAc,IAAI,IAAI,CAAC;CACxB;AAgBD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,kBAAkB,CA6UnF"}
|
|
@@ -1,62 +1,89 @@
|
|
|
1
1
|
import { HOSTED_TTS_TIER as e, HOSTED_VOICES as t, hostedLocaleFor as n } from "./hostedVoiceCatalogue.js";
|
|
2
|
-
import { buildRequest as r, classifyHttpFailure as i, decodeAudioResponse as a,
|
|
2
|
+
import { buildRequest as r, classifyHttpFailure as i, decodeAudioResponse as a, disableDurationMs as o, shouldDisableEngine as s, splitForVendor as c } from "./hostedTtsProtocol.js";
|
|
3
3
|
//#region src/shared/assistant/speech/hostedTtsSpeechEngine.ts
|
|
4
|
-
function
|
|
5
|
-
let
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
function l(e) {
|
|
5
|
+
let t = Object.entries(e).map(([e, t]) => `${e.toLowerCase()}:${t}`).sort().join("\n"), n = 5381;
|
|
6
|
+
for (let e = 0; e < t.length; e += 1) n = (n << 5) + n + t.charCodeAt(e) | 0;
|
|
7
|
+
return `${t.length}:${n >>> 0}`;
|
|
8
|
+
}
|
|
9
|
+
function u(u) {
|
|
10
|
+
let d = u.fetchImpl ?? ((...e) => fetch(...e)), f = u.now ?? (() => Date.now()), p = null, m = null, h = 0, g = null, _ = 0, v = null, y = null, b = () => {
|
|
11
|
+
try {
|
|
12
|
+
return u.getHeaders?.() ?? {};
|
|
13
|
+
} catch {
|
|
14
|
+
return {};
|
|
15
|
+
}
|
|
16
|
+
}, x = () => f() >= _ ? !1 : y === null ? !0 : l(b()) === y, S = /* @__PURE__ */ new Set(), C = () => {
|
|
17
|
+
for (let e of [...S]) e();
|
|
18
|
+
}, w = () => {
|
|
19
|
+
v !== null && clearTimeout(v), v = null;
|
|
20
|
+
}, T = (e) => {
|
|
21
|
+
w(), v = setTimeout(() => {
|
|
22
|
+
v = null;
|
|
23
|
+
let e = _ - f();
|
|
24
|
+
if (e > 0) {
|
|
25
|
+
T(e);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
C();
|
|
29
|
+
}, e);
|
|
30
|
+
}, E = (e, t) => {
|
|
31
|
+
_ = f() + e, y = t, T(e), C();
|
|
32
|
+
}, D = () => {
|
|
33
|
+
m &&= (URL.revokeObjectURL(m), null);
|
|
34
|
+
}, O = () => {
|
|
35
|
+
if (p) {
|
|
36
|
+
p.onended = null, p.onerror = null;
|
|
10
37
|
try {
|
|
11
|
-
|
|
38
|
+
p.pause();
|
|
12
39
|
} catch {}
|
|
13
|
-
|
|
40
|
+
p = null;
|
|
14
41
|
}
|
|
15
|
-
|
|
42
|
+
D();
|
|
16
43
|
};
|
|
17
|
-
async function
|
|
18
|
-
let
|
|
44
|
+
async function k(t, o, s) {
|
|
45
|
+
let c = r(t, n(o.lang) ?? o.lang, e, o.voice?.name ?? null, o.rate), f = u.getHeaders?.() ?? {}, p = await d(u.endpoint, {
|
|
19
46
|
method: "POST",
|
|
20
47
|
signal: s,
|
|
21
48
|
headers: {
|
|
22
49
|
"content-type": "application/json",
|
|
23
|
-
...
|
|
50
|
+
...f
|
|
24
51
|
},
|
|
25
|
-
body: JSON.stringify(
|
|
52
|
+
body: JSON.stringify(c)
|
|
26
53
|
});
|
|
27
|
-
if (!
|
|
28
|
-
let e = /* @__PURE__ */ Error(`hosted tts ${
|
|
29
|
-
throw e.reason = i(
|
|
54
|
+
if (!p.ok) {
|
|
55
|
+
let e = /* @__PURE__ */ Error(`hosted tts ${p.status}`);
|
|
56
|
+
throw e.reason = i(p.status), e.headers = l(f), e;
|
|
30
57
|
}
|
|
31
|
-
let
|
|
32
|
-
if (!
|
|
58
|
+
let m = p.headers.get("content-type"), h = a(m, m?.includes("json") ? await p.json() : await p.arrayBuffer());
|
|
59
|
+
if (!h) {
|
|
33
60
|
let e = /* @__PURE__ */ Error("hosted tts returned no audio");
|
|
34
61
|
throw e.reason = "unknown", e;
|
|
35
62
|
}
|
|
36
|
-
return
|
|
63
|
+
return h;
|
|
37
64
|
}
|
|
38
|
-
function
|
|
65
|
+
function A(e, t, n) {
|
|
39
66
|
return new Promise((r, i) => {
|
|
40
|
-
if (t !==
|
|
67
|
+
if (t !== h) {
|
|
41
68
|
r();
|
|
42
69
|
return;
|
|
43
70
|
}
|
|
44
71
|
let a = new Blob([e.slice().buffer], { type: "audio/mpeg" });
|
|
45
|
-
|
|
46
|
-
let o = new Audio(
|
|
47
|
-
|
|
48
|
-
t ===
|
|
72
|
+
D(), m = URL.createObjectURL(a);
|
|
73
|
+
let o = new Audio(m);
|
|
74
|
+
p = o, o.onended = () => {
|
|
75
|
+
t === h && r();
|
|
49
76
|
}, o.onerror = () => {
|
|
50
|
-
if (t !==
|
|
77
|
+
if (t !== h) {
|
|
51
78
|
r();
|
|
52
79
|
return;
|
|
53
80
|
}
|
|
54
81
|
let e = /* @__PURE__ */ Error("audio playback failed");
|
|
55
82
|
e.reason = "unknown", i(e);
|
|
56
83
|
}, o.play().then(() => {
|
|
57
|
-
t ===
|
|
84
|
+
t === h && n?.();
|
|
58
85
|
}, (e) => {
|
|
59
|
-
if (t !==
|
|
86
|
+
if (t !== h) {
|
|
60
87
|
r();
|
|
61
88
|
return;
|
|
62
89
|
}
|
|
@@ -68,54 +95,59 @@ function c(c) {
|
|
|
68
95
|
return {
|
|
69
96
|
id: "hosted-tts",
|
|
70
97
|
isSupported() {
|
|
71
|
-
return
|
|
98
|
+
return x() ? !1 : typeof window < "u" && typeof window.Audio == "function" && typeof fetch == "function";
|
|
72
99
|
},
|
|
73
100
|
listVoices() {
|
|
74
|
-
return [...t];
|
|
101
|
+
return x() ? [] : [...t];
|
|
75
102
|
},
|
|
76
|
-
subscribeVoices() {
|
|
77
|
-
return () => {
|
|
103
|
+
subscribeVoices(e) {
|
|
104
|
+
return S.add(e), () => {
|
|
105
|
+
S.delete(e);
|
|
106
|
+
};
|
|
78
107
|
},
|
|
79
108
|
speak(e, t, n = {}) {
|
|
80
|
-
let r = e.filter((e) => e.trim().length > 0).flatMap((e) =>
|
|
109
|
+
let r = e.filter((e) => e.trim().length > 0).flatMap((e) => c(e));
|
|
81
110
|
if (r.length === 0) {
|
|
82
111
|
n.onEnd?.();
|
|
83
112
|
return;
|
|
84
113
|
}
|
|
85
|
-
|
|
86
|
-
let i =
|
|
87
|
-
|
|
114
|
+
h += 1;
|
|
115
|
+
let i = h;
|
|
116
|
+
O();
|
|
88
117
|
let a = new AbortController();
|
|
89
|
-
|
|
90
|
-
let
|
|
91
|
-
|
|
92
|
-
},
|
|
93
|
-
let n =
|
|
118
|
+
g = a;
|
|
119
|
+
let l = !1, u = () => {
|
|
120
|
+
l || (l = !0, n.onStart?.());
|
|
121
|
+
}, d = (e) => {
|
|
122
|
+
let n = k(e, t, a.signal);
|
|
94
123
|
return n.catch(() => {}), n;
|
|
95
124
|
};
|
|
96
125
|
(async () => {
|
|
97
126
|
try {
|
|
98
|
-
let e =
|
|
127
|
+
let e = d(r[0]);
|
|
99
128
|
for (let t = 0; t < r.length; t += 1) {
|
|
100
|
-
if (i !==
|
|
129
|
+
if (i !== h) return;
|
|
101
130
|
let a = await e;
|
|
102
|
-
if (i !==
|
|
131
|
+
if (i !== h) return;
|
|
103
132
|
let o = r[t + 1];
|
|
104
|
-
o !== void 0 && (e =
|
|
133
|
+
o !== void 0 && (e = d(o)), n.onChunkStart?.(t), await A(a, i, u);
|
|
105
134
|
}
|
|
106
|
-
i ===
|
|
135
|
+
i === h && n.onEnd?.();
|
|
107
136
|
} catch (e) {
|
|
108
|
-
if (a.abort(), i !==
|
|
109
|
-
|
|
137
|
+
if (a.abort(), i !== h) return;
|
|
138
|
+
h += 1, O();
|
|
110
139
|
let t = e?.reason;
|
|
111
|
-
|
|
140
|
+
s(t, e?.transient === !0) && E(o(t), t === "not-allowed" ? e.headers ?? null : null), n.onError?.(t === "not-allowed" || t === "unsupported" || t === "cancelled" ? t : "unknown");
|
|
112
141
|
}
|
|
113
142
|
})();
|
|
114
143
|
},
|
|
144
|
+
headersChanged() {
|
|
145
|
+
f() >= _ || y === null || x() || (_ = 0, y = null, w(), C());
|
|
146
|
+
},
|
|
115
147
|
cancel() {
|
|
116
|
-
|
|
148
|
+
h += 1, g?.abort(), g = null, O();
|
|
117
149
|
}
|
|
118
150
|
};
|
|
119
151
|
}
|
|
120
152
|
//#endregion
|
|
121
|
-
export {
|
|
153
|
+
export { u as createHostedTtsEngine };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostedVoiceCatalogue.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/hostedVoiceCatalogue.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hostedVoiceCatalogue.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/hostedVoiceCatalogue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,mFAAmF;AACnF,eAAO,MAAM,eAAe,cAAc,CAAC;AA4E3C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,eAAe,EASnD,CAAC;AAiCF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO1D;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3D"}
|
|
@@ -33,7 +33,8 @@ function i(e) {
|
|
|
33
33
|
var a = n.flatMap((e) => t.map((t) => ({
|
|
34
34
|
name: `${e}-Chirp3-HD-${t}`,
|
|
35
35
|
lang: i(e),
|
|
36
|
-
localService: !1
|
|
36
|
+
localService: !1,
|
|
37
|
+
source: "hosted"
|
|
37
38
|
}))), o = /* @__PURE__ */ new Map();
|
|
38
39
|
for (let e of n) for (let t of new Set([i(e), e])) {
|
|
39
40
|
let n = t.toLowerCase().split("-")[0];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { browserSpeechEngine } from './browserSpeechEngine';
|
|
2
2
|
export { createHostedTtsEngine } from './hostedTtsSpeechEngine';
|
|
3
|
-
export { configureSpeechEngine, createSpeechEngines, getSpeechEngine, readSpeechEngineConfig, resetSpeechEngine, } from './createSpeechEngine';
|
|
3
|
+
export { configureSpeechEngine, createSpeechEngines, getSpeechEngine, readSpeechEngineConfig, resetSpeechEngine, subscribeSpeechEngine, } from './createSpeechEngine';
|
|
4
4
|
export { createRoutingSpeechEngine } from './routingSpeechEngine';
|
|
5
5
|
export type { SpeechEngineConfig } from './createSpeechEngine';
|
|
6
6
|
export { HOSTED_VOICES, HOSTED_TTS_TIER, hostedSupportsLanguage } from './hostedVoiceCatalogue';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChG,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routingSpeechEngine.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/routingSpeechEngine.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"routingSpeechEngine.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/speech/routingSpeechEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,KAAK,EAAE,YAAY,EAA4D,MAAM,SAAS,CAAC;AAEtG,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,4EAA4E;IAC5E,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,cAAc,GAAG,YAAY,CAyJ1F"}
|