@pie-players/pie-assessment-toolkit 0.2.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 +520 -0
- package/dist/attempt/TestSession.d.ts +90 -0
- package/dist/attempt/TestSession.d.ts.map +1 -0
- package/dist/attempt/TestSession.js +174 -0
- package/dist/attempt/TestSession.js.map +1 -0
- package/dist/core/TypedEventBus.d.ts +48 -0
- package/dist/core/TypedEventBus.d.ts.map +1 -0
- package/dist/core/TypedEventBus.js +63 -0
- package/dist/core/TypedEventBus.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/item-loader.d.ts +45 -0
- package/dist/item-loader.d.ts.map +1 -0
- package/dist/item-loader.js +62 -0
- package/dist/item-loader.js.map +1 -0
- package/dist/player/AssessmentPlayer.d.ts +388 -0
- package/dist/player/AssessmentPlayer.d.ts.map +1 -0
- package/dist/player/AssessmentPlayer.js +965 -0
- package/dist/player/AssessmentPlayer.js.map +1 -0
- package/dist/player/index.d.ts +17 -0
- package/dist/player/index.d.ts.map +1 -0
- package/dist/player/index.js +15 -0
- package/dist/player/index.js.map +1 -0
- package/dist/player/navigation-types.d.ts +63 -0
- package/dist/player/navigation-types.d.ts.map +1 -0
- package/dist/player/navigation-types.js +7 -0
- package/dist/player/navigation-types.js.map +1 -0
- package/dist/player/qti-navigation.d.ts +29 -0
- package/dist/player/qti-navigation.d.ts.map +1 -0
- package/dist/player/qti-navigation.js +160 -0
- package/dist/player/qti-navigation.js.map +1 -0
- package/dist/reference-layout/index.d.ts +19 -0
- package/dist/reference-layout/index.d.ts.map +1 -0
- package/dist/reference-layout/index.js +20 -0
- package/dist/reference-layout/index.js.map +1 -0
- package/dist/services/AccessibilityCatalogResolver.d.ts +141 -0
- package/dist/services/AccessibilityCatalogResolver.d.ts.map +1 -0
- package/dist/services/AccessibilityCatalogResolver.js +249 -0
- package/dist/services/AccessibilityCatalogResolver.js.map +1 -0
- package/dist/services/AssessmentAuthoringService.d.ts +60 -0
- package/dist/services/AssessmentAuthoringService.d.ts.map +1 -0
- package/dist/services/AssessmentAuthoringService.js +183 -0
- package/dist/services/AssessmentAuthoringService.js.map +1 -0
- package/dist/services/ContextVariableStore.d.ts +114 -0
- package/dist/services/ContextVariableStore.d.ts.map +1 -0
- package/dist/services/ContextVariableStore.js +207 -0
- package/dist/services/ContextVariableStore.js.map +1 -0
- package/dist/services/ElementToolStateStore.d.ts +125 -0
- package/dist/services/ElementToolStateStore.d.ts.map +1 -0
- package/dist/services/ElementToolStateStore.js +200 -0
- package/dist/services/ElementToolStateStore.js.map +1 -0
- package/dist/services/HighlightCoordinator.d.ts +179 -0
- package/dist/services/HighlightCoordinator.d.ts.map +1 -0
- package/dist/services/HighlightCoordinator.js +446 -0
- package/dist/services/HighlightCoordinator.js.map +1 -0
- package/dist/services/I18nService.d.ts +121 -0
- package/dist/services/I18nService.d.ts.map +1 -0
- package/dist/services/I18nService.js +276 -0
- package/dist/services/I18nService.js.map +1 -0
- package/dist/services/PNPMapper.d.ts +71 -0
- package/dist/services/PNPMapper.d.ts.map +1 -0
- package/dist/services/PNPMapper.js +98 -0
- package/dist/services/PNPMapper.js.map +1 -0
- package/dist/services/PNPToolResolver.d.ts +127 -0
- package/dist/services/PNPToolResolver.d.ts.map +1 -0
- package/dist/services/PNPToolResolver.js +222 -0
- package/dist/services/PNPToolResolver.js.map +1 -0
- package/dist/services/SSMLExtractor.d.ts +61 -0
- package/dist/services/SSMLExtractor.d.ts.map +1 -0
- package/dist/services/SSMLExtractor.js +181 -0
- package/dist/services/SSMLExtractor.js.map +1 -0
- package/dist/services/TTSService.d.ts +162 -0
- package/dist/services/TTSService.d.ts.map +1 -0
- package/dist/services/TTSService.js +465 -0
- package/dist/services/TTSService.js.map +1 -0
- package/dist/services/ThemeProvider.d.ts +95 -0
- package/dist/services/ThemeProvider.d.ts.map +1 -0
- package/dist/services/ThemeProvider.js +299 -0
- package/dist/services/ThemeProvider.js.map +1 -0
- package/dist/services/ToolConfigResolver.d.ts +162 -0
- package/dist/services/ToolConfigResolver.d.ts.map +1 -0
- package/dist/services/ToolConfigResolver.js +230 -0
- package/dist/services/ToolConfigResolver.js.map +1 -0
- package/dist/services/ToolCoordinator.d.ts +137 -0
- package/dist/services/ToolCoordinator.d.ts.map +1 -0
- package/dist/services/ToolCoordinator.js +318 -0
- package/dist/services/ToolCoordinator.js.map +1 -0
- package/dist/services/ToolkitCoordinator.d.ts +188 -0
- package/dist/services/ToolkitCoordinator.d.ts.map +1 -0
- package/dist/services/ToolkitCoordinator.js +252 -0
- package/dist/services/ToolkitCoordinator.js.map +1 -0
- package/dist/services/interfaces.d.ts +391 -0
- package/dist/services/interfaces.d.ts.map +1 -0
- package/dist/services/interfaces.js +12 -0
- package/dist/services/interfaces.js.map +1 -0
- package/dist/services/tool-providers/DesmosToolProvider.d.ts +103 -0
- package/dist/services/tool-providers/DesmosToolProvider.d.ts.map +1 -0
- package/dist/services/tool-providers/DesmosToolProvider.js +127 -0
- package/dist/services/tool-providers/DesmosToolProvider.js.map +1 -0
- package/dist/services/tool-providers/IToolProvider.d.ts +137 -0
- package/dist/services/tool-providers/IToolProvider.d.ts.map +1 -0
- package/dist/services/tool-providers/IToolProvider.js +13 -0
- package/dist/services/tool-providers/IToolProvider.js.map +1 -0
- package/dist/services/tool-providers/TIToolProvider.d.ts +107 -0
- package/dist/services/tool-providers/TIToolProvider.d.ts.map +1 -0
- package/dist/services/tool-providers/TIToolProvider.js +123 -0
- package/dist/services/tool-providers/TIToolProvider.js.map +1 -0
- package/dist/services/tool-providers/TTSToolProvider.d.ts +143 -0
- package/dist/services/tool-providers/TTSToolProvider.d.ts.map +1 -0
- package/dist/services/tool-providers/TTSToolProvider.js +168 -0
- package/dist/services/tool-providers/TTSToolProvider.js.map +1 -0
- package/dist/services/tool-providers/ToolProviderRegistry.d.ts +165 -0
- package/dist/services/tool-providers/ToolProviderRegistry.d.ts.map +1 -0
- package/dist/services/tool-providers/ToolProviderRegistry.js +240 -0
- package/dist/services/tool-providers/ToolProviderRegistry.js.map +1 -0
- package/dist/services/tool-providers/index.d.ts +18 -0
- package/dist/services/tool-providers/index.d.ts.map +1 -0
- package/dist/services/tool-providers/index.js +15 -0
- package/dist/services/tool-providers/index.js.map +1 -0
- package/dist/services/tts/browser-provider.d.ts +24 -0
- package/dist/services/tts/browser-provider.d.ts.map +1 -0
- package/dist/services/tts/browser-provider.js +177 -0
- package/dist/services/tts/browser-provider.js.map +1 -0
- package/dist/services/tts/provider-interface.d.ts +131 -0
- package/dist/services/tts/provider-interface.d.ts.map +1 -0
- package/dist/services/tts/provider-interface.js +10 -0
- package/dist/services/tts/provider-interface.js.map +1 -0
- package/dist/tools/calculators/desmos-provider.d.ts +54 -0
- package/dist/tools/calculators/desmos-provider.d.ts.map +1 -0
- package/dist/tools/calculators/desmos-provider.js +384 -0
- package/dist/tools/calculators/desmos-provider.js.map +1 -0
- package/dist/tools/calculators/mathjs-provider.d.ts +50 -0
- package/dist/tools/calculators/mathjs-provider.d.ts.map +1 -0
- package/dist/tools/calculators/mathjs-provider.js +660 -0
- package/dist/tools/calculators/mathjs-provider.js.map +1 -0
- package/dist/tools/calculators/ti-provider.d.ts +122 -0
- package/dist/tools/calculators/ti-provider.d.ts.map +1 -0
- package/dist/tools/calculators/ti-provider.js +587 -0
- package/dist/tools/calculators/ti-provider.js.map +1 -0
- package/dist/tools/client.d.ts +17 -0
- package/dist/tools/client.d.ts.map +1 -0
- package/dist/tools/client.js +26 -0
- package/dist/tools/client.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +10 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/library-loader.d.ts +63 -0
- package/dist/tools/library-loader.d.ts.map +1 -0
- package/dist/tools/library-loader.js +292 -0
- package/dist/tools/library-loader.js.map +1 -0
- package/dist/tools/response-discovery.d.ts +72 -0
- package/dist/tools/response-discovery.d.ts.map +1 -0
- package/dist/tools/response-discovery.js +183 -0
- package/dist/tools/response-discovery.js.map +1 -0
- package/dist/tools/tool-coordinator.d.ts +76 -0
- package/dist/tools/tool-coordinator.d.ts.map +1 -0
- package/dist/tools/tool-coordinator.js +197 -0
- package/dist/tools/tool-coordinator.js.map +1 -0
- package/dist/tools/types.d.ts +427 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +13 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/variant-resolver.d.ts +48 -0
- package/dist/tools/variant-resolver.d.ts.map +1 -0
- package/dist/tools/variant-resolver.js +214 -0
- package/dist/tools/variant-resolver.js.map +1 -0
- package/dist/types/events.d.ts +157 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +11 -0
- package/dist/types/events.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +11 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +71 -0
- package/src/README.md +626 -0
- package/src/components/QuestionToolBar.svelte +406 -0
- package/src/player/AssessmentLayout.svelte +68 -0
- package/src/player/README.md +154 -0
- package/src/reference-layout/README.md +135 -0
- package/src/reference-layout/ReferenceLayout.svelte +209 -0
- package/src/reference-layout/components/AssessmentContent.svelte +259 -0
- package/src/reference-layout/components/AssessmentFooter.svelte +89 -0
- package/src/reference-layout/components/AssessmentHeader.svelte +250 -0
- package/src/reference-layout/components/AssessmentNavigation.svelte +134 -0
- package/src/reference-layout/components/AssessmentToolsBar.svelte +176 -0
- package/src/reference-layout/components/ItemPanel.svelte +200 -0
- package/src/reference-layout/components/NotesPanel.svelte +179 -0
- package/src/reference-layout/components/PassagePanel.svelte +76 -0
- package/src/tools/README.md +616 -0
- package/src/tools/calculators/README.md +395 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTS Tool Provider
|
|
3
|
+
*
|
|
4
|
+
* Unified provider for all TTS backends:
|
|
5
|
+
* - Browser Web Speech API (no auth)
|
|
6
|
+
* - AWS Polly (requires auth via server proxy)
|
|
7
|
+
* - Google Cloud TTS (requires auth via server proxy)
|
|
8
|
+
*
|
|
9
|
+
* Part of PIE Assessment Toolkit.
|
|
10
|
+
*/
|
|
11
|
+
import { BrowserTTSProvider } from "../../services/tts/browser-provider";
|
|
12
|
+
/**
|
|
13
|
+
* TTS Tool Provider
|
|
14
|
+
*
|
|
15
|
+
* Wraps TTS providers (Browser, Polly, Google) with the IToolProvider interface
|
|
16
|
+
* for use in the ToolProviderRegistry.
|
|
17
|
+
*
|
|
18
|
+
* @example Browser TTS (no auth)
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const provider = new TTSToolProvider();
|
|
21
|
+
* await provider.initialize({ backend: 'browser' });
|
|
22
|
+
* const ttsProvider = await provider.createInstance();
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @example Server TTS (with auth)
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const provider = new TTSToolProvider();
|
|
28
|
+
* await provider.initialize({
|
|
29
|
+
* backend: 'polly',
|
|
30
|
+
* apiEndpoint: '/api/tts/synthesize',
|
|
31
|
+
* authToken: 'bearer-token', // Fetched via authFetcher
|
|
32
|
+
* });
|
|
33
|
+
* const ttsProvider = await provider.createInstance();
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class TTSToolProvider {
|
|
37
|
+
providerId = "tts-service";
|
|
38
|
+
providerName = "Text-to-Speech";
|
|
39
|
+
category = "tts";
|
|
40
|
+
version = "1.0";
|
|
41
|
+
requiresAuth;
|
|
42
|
+
ttsProvider = null;
|
|
43
|
+
config = null;
|
|
44
|
+
/**
|
|
45
|
+
* Create TTS tool provider
|
|
46
|
+
*
|
|
47
|
+
* @param backend TTS backend to use (default: 'browser')
|
|
48
|
+
*/
|
|
49
|
+
constructor(backend = "browser") {
|
|
50
|
+
this.requiresAuth = backend !== "browser";
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Initialize TTS provider
|
|
54
|
+
*
|
|
55
|
+
* Sets up the appropriate TTS backend.
|
|
56
|
+
*
|
|
57
|
+
* @param config Configuration with backend type and credentials
|
|
58
|
+
* @throws Error if initialization fails or required config missing
|
|
59
|
+
*/
|
|
60
|
+
async initialize(config) {
|
|
61
|
+
if (this.ttsProvider) {
|
|
62
|
+
console.warn("[TTSToolProvider] Already initialized, skipping reinitialization");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
this.config = config;
|
|
66
|
+
switch (config.backend) {
|
|
67
|
+
case "browser":
|
|
68
|
+
await this._initializeBrowserTTS(config);
|
|
69
|
+
break;
|
|
70
|
+
case "polly":
|
|
71
|
+
case "google":
|
|
72
|
+
case "server":
|
|
73
|
+
await this._initializeServerTTS(config);
|
|
74
|
+
break;
|
|
75
|
+
default:
|
|
76
|
+
throw new Error(`[TTSToolProvider] Unknown backend: ${config.backend}`);
|
|
77
|
+
}
|
|
78
|
+
console.log(`[TTSToolProvider] Initialized successfully (backend: ${config.backend})`);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Initialize browser TTS (Web Speech API)
|
|
82
|
+
*/
|
|
83
|
+
async _initializeBrowserTTS(config) {
|
|
84
|
+
// Check if Web Speech API is available
|
|
85
|
+
if (typeof window === "undefined" || !("speechSynthesis" in window)) {
|
|
86
|
+
throw new Error("[TTSToolProvider] Browser TTS not supported (Web Speech API not available)");
|
|
87
|
+
}
|
|
88
|
+
this.ttsProvider = new BrowserTTSProvider();
|
|
89
|
+
console.log("[TTSToolProvider] Browser TTS initialized (Web Speech API)");
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Initialize server-based TTS (Polly, Google)
|
|
93
|
+
*/
|
|
94
|
+
async _initializeServerTTS(config) {
|
|
95
|
+
if (!config.apiEndpoint) {
|
|
96
|
+
throw new Error("[TTSToolProvider] apiEndpoint required for server-based TTS backends");
|
|
97
|
+
}
|
|
98
|
+
// Lazy-load ServerTTSProvider to avoid bundling if not needed
|
|
99
|
+
try {
|
|
100
|
+
const { ServerTTSProvider } = await import("@pie-players/tts-client-server");
|
|
101
|
+
// Create provider instance (no constructor args, will be initialized on first use)
|
|
102
|
+
this.ttsProvider = new ServerTTSProvider();
|
|
103
|
+
console.log(`[TTSToolProvider] Server TTS initialized (provider: ${config.serverProvider || config.backend})`);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.error("[TTSToolProvider] Failed to load ServerTTSProvider:", error);
|
|
107
|
+
throw new Error("Failed to load server TTS provider. Ensure @pie-players/tts-client-server is installed.");
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Create a TTS provider instance
|
|
112
|
+
*
|
|
113
|
+
* Returns the initialized TTS provider.
|
|
114
|
+
*
|
|
115
|
+
* @param config Optional instance-specific configuration (currently unused)
|
|
116
|
+
* @returns TTS provider
|
|
117
|
+
* @throws Error if provider not initialized
|
|
118
|
+
*/
|
|
119
|
+
async createInstance(config) {
|
|
120
|
+
if (!this.ttsProvider) {
|
|
121
|
+
throw new Error("[TTSToolProvider] Provider not initialized. Call initialize() first.");
|
|
122
|
+
}
|
|
123
|
+
return this.ttsProvider;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get provider capabilities
|
|
127
|
+
*
|
|
128
|
+
* @returns TTS capabilities based on backend
|
|
129
|
+
*/
|
|
130
|
+
getCapabilities() {
|
|
131
|
+
const isBrowser = this.config?.backend === "browser";
|
|
132
|
+
return {
|
|
133
|
+
supportsOffline: isBrowser,
|
|
134
|
+
requiresAuth: !isBrowser,
|
|
135
|
+
maxInstances: 1, // Single TTS instance (playback is sequential)
|
|
136
|
+
features: {
|
|
137
|
+
wordBoundary: true, // All backends support word highlighting
|
|
138
|
+
pause: true,
|
|
139
|
+
resume: true,
|
|
140
|
+
rateControl: true,
|
|
141
|
+
pitchControl: isBrowser, // Only browser supports pitch
|
|
142
|
+
voiceSelection: true,
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if provider is ready
|
|
148
|
+
*
|
|
149
|
+
* @returns true if provider is initialized
|
|
150
|
+
*/
|
|
151
|
+
isReady() {
|
|
152
|
+
return this.ttsProvider !== null;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Clean up provider resources
|
|
156
|
+
*
|
|
157
|
+
* Destroys the TTS provider and releases resources.
|
|
158
|
+
*/
|
|
159
|
+
destroy() {
|
|
160
|
+
if (this.ttsProvider) {
|
|
161
|
+
this.ttsProvider.destroy();
|
|
162
|
+
this.ttsProvider = null;
|
|
163
|
+
}
|
|
164
|
+
this.config = null;
|
|
165
|
+
console.log("[TTSToolProvider] Destroyed");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=TTSToolProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TTSToolProvider.js","sourceRoot":"","sources":["../../../src/services/tool-providers/TTSToolProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Provider Registry
|
|
3
|
+
*
|
|
4
|
+
* Centralized registry for managing tool providers.
|
|
5
|
+
* Handles initialization, authentication, and lazy loading.
|
|
6
|
+
*
|
|
7
|
+
* Part of PIE Assessment Toolkit.
|
|
8
|
+
*/
|
|
9
|
+
import type { IToolProvider, ToolCategory } from "./IToolProvider";
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for registering a tool provider
|
|
12
|
+
*/
|
|
13
|
+
export interface ToolProviderConfig<TConfig = any> {
|
|
14
|
+
/**
|
|
15
|
+
* Provider instance to register
|
|
16
|
+
*/
|
|
17
|
+
provider: IToolProvider<TConfig>;
|
|
18
|
+
/**
|
|
19
|
+
* Configuration for this provider
|
|
20
|
+
* (may include auth credentials, endpoints, etc.)
|
|
21
|
+
*/
|
|
22
|
+
config: TConfig;
|
|
23
|
+
/**
|
|
24
|
+
* Lazy initialization - don't initialize until first use
|
|
25
|
+
*
|
|
26
|
+
* @default true
|
|
27
|
+
* @note Set to false for providers that must be ready immediately
|
|
28
|
+
*/
|
|
29
|
+
lazy?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Auth fetcher - function to retrieve auth credentials from backend
|
|
32
|
+
*
|
|
33
|
+
* Called during initialization if the provider requires auth.
|
|
34
|
+
* The returned data is merged with the config before initialization.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* authFetcher: async () => {
|
|
39
|
+
* const response = await fetch('/api/desmos/token');
|
|
40
|
+
* return response.json(); // { apiKey: '...' }
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
authFetcher?: () => Promise<Partial<TConfig>>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Tool Provider Registry
|
|
48
|
+
*
|
|
49
|
+
* Manages the lifecycle of tool providers:
|
|
50
|
+
* - Registration
|
|
51
|
+
* - Lazy initialization
|
|
52
|
+
* - Auth credential fetching
|
|
53
|
+
* - Provider lookup by ID or category
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const registry = new ToolProviderRegistry();
|
|
58
|
+
*
|
|
59
|
+
* // Register a provider with auth fetcher
|
|
60
|
+
* registry.register('desmos-calculator', {
|
|
61
|
+
* provider: new DesmosToolProvider(),
|
|
62
|
+
* config: {},
|
|
63
|
+
* lazy: true,
|
|
64
|
+
* authFetcher: async () => {
|
|
65
|
+
* const response = await fetch('/api/desmos/token');
|
|
66
|
+
* return response.json();
|
|
67
|
+
* },
|
|
68
|
+
* });
|
|
69
|
+
*
|
|
70
|
+
* // Get provider (auto-initializes if lazy)
|
|
71
|
+
* const desmosProvider = await registry.getProvider('desmos-calculator');
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare class ToolProviderRegistry {
|
|
75
|
+
private providers;
|
|
76
|
+
private configs;
|
|
77
|
+
private initialized;
|
|
78
|
+
private initializationPromises;
|
|
79
|
+
/**
|
|
80
|
+
* Register a tool provider
|
|
81
|
+
*
|
|
82
|
+
* Adds a provider to the registry. If lazy is false, initializes immediately.
|
|
83
|
+
*
|
|
84
|
+
* @param providerId Unique provider identifier
|
|
85
|
+
* @param config Provider configuration
|
|
86
|
+
* @throws Error if provider with same ID already registered
|
|
87
|
+
*/
|
|
88
|
+
register(providerId: string, config: ToolProviderConfig): void;
|
|
89
|
+
/**
|
|
90
|
+
* Initialize a provider
|
|
91
|
+
*
|
|
92
|
+
* Fetches auth if needed and initializes the provider.
|
|
93
|
+
* Safe to call multiple times - subsequent calls wait for first initialization.
|
|
94
|
+
*
|
|
95
|
+
* @param providerId Provider to initialize
|
|
96
|
+
* @returns Promise that resolves when initialization complete
|
|
97
|
+
* @throws Error if provider not registered or initialization fails
|
|
98
|
+
*/
|
|
99
|
+
initialize(providerId: string): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Internal initialization logic
|
|
102
|
+
*/
|
|
103
|
+
private _doInitialize;
|
|
104
|
+
/**
|
|
105
|
+
* Get a provider instance
|
|
106
|
+
*
|
|
107
|
+
* Retrieves a registered provider. If autoInitialize is true and provider
|
|
108
|
+
* is not initialized, initializes it first.
|
|
109
|
+
*
|
|
110
|
+
* @param providerId Provider identifier
|
|
111
|
+
* @param autoInitialize Auto-initialize if not ready (default: true)
|
|
112
|
+
* @returns Provider instance
|
|
113
|
+
* @throws Error if provider not registered
|
|
114
|
+
*/
|
|
115
|
+
getProvider<T extends IToolProvider = IToolProvider>(providerId: string, autoInitialize?: boolean): Promise<T>;
|
|
116
|
+
/**
|
|
117
|
+
* Get all providers in a category
|
|
118
|
+
*
|
|
119
|
+
* @param category Tool category to filter by
|
|
120
|
+
* @returns Array of provider IDs in the category
|
|
121
|
+
*/
|
|
122
|
+
getProvidersByCategory(category: ToolCategory): string[];
|
|
123
|
+
/**
|
|
124
|
+
* Get all registered provider IDs
|
|
125
|
+
*
|
|
126
|
+
* @returns Array of all provider IDs
|
|
127
|
+
*/
|
|
128
|
+
getProviderIds(): string[];
|
|
129
|
+
/**
|
|
130
|
+
* Check if provider is registered
|
|
131
|
+
*
|
|
132
|
+
* @param providerId Provider identifier
|
|
133
|
+
* @returns true if provider is registered
|
|
134
|
+
*/
|
|
135
|
+
has(providerId: string): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* Check if provider is initialized
|
|
138
|
+
*
|
|
139
|
+
* @param providerId Provider identifier
|
|
140
|
+
* @returns true if provider is initialized
|
|
141
|
+
*/
|
|
142
|
+
isInitialized(providerId: string): boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Check if provider is currently initializing
|
|
145
|
+
*
|
|
146
|
+
* @param providerId Provider identifier
|
|
147
|
+
* @returns true if initialization in progress
|
|
148
|
+
*/
|
|
149
|
+
isInitializing(providerId: string): boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Unregister and destroy a provider
|
|
152
|
+
*
|
|
153
|
+
* Removes the provider from the registry and calls its destroy method.
|
|
154
|
+
*
|
|
155
|
+
* @param providerId Provider to unregister
|
|
156
|
+
*/
|
|
157
|
+
unregister(providerId: string): Promise<void>;
|
|
158
|
+
/**
|
|
159
|
+
* Clean up all providers
|
|
160
|
+
*
|
|
161
|
+
* Unregisters and destroys all providers in the registry.
|
|
162
|
+
*/
|
|
163
|
+
destroy(): Promise<void>;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=ToolProviderRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolProviderRegistry.d.ts","sourceRoot":"","sources":["../../../src/services/tool-providers/ToolProviderRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,OAAO,GAAG,GAAG;IAChD;;OAEG;IACH,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAEjC;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,sBAAsB,CAAoC;IAElE;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI;IA2B9D;;;;;;;;;OASG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBnD;;OAEG;YACW,aAAa;IAgD3B;;;;;;;;;;OAUG;IACG,WAAW,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,EACxD,UAAU,EAAE,MAAM,EAClB,cAAc,UAAO,GACnB,OAAO,CAAC,CAAC,CAAC;IAgBb;;;;;OAKG;IACH,sBAAsB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IAMxD;;;;OAIG;IACH,cAAc,IAAI,MAAM,EAAE;IAI1B;;;;;OAKG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIhC;;;;;OAKG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI1C;;;;;OAKG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;;;OAMG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BnD;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Provider Registry
|
|
3
|
+
*
|
|
4
|
+
* Centralized registry for managing tool providers.
|
|
5
|
+
* Handles initialization, authentication, and lazy loading.
|
|
6
|
+
*
|
|
7
|
+
* Part of PIE Assessment Toolkit.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Tool Provider Registry
|
|
11
|
+
*
|
|
12
|
+
* Manages the lifecycle of tool providers:
|
|
13
|
+
* - Registration
|
|
14
|
+
* - Lazy initialization
|
|
15
|
+
* - Auth credential fetching
|
|
16
|
+
* - Provider lookup by ID or category
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const registry = new ToolProviderRegistry();
|
|
21
|
+
*
|
|
22
|
+
* // Register a provider with auth fetcher
|
|
23
|
+
* registry.register('desmos-calculator', {
|
|
24
|
+
* provider: new DesmosToolProvider(),
|
|
25
|
+
* config: {},
|
|
26
|
+
* lazy: true,
|
|
27
|
+
* authFetcher: async () => {
|
|
28
|
+
* const response = await fetch('/api/desmos/token');
|
|
29
|
+
* return response.json();
|
|
30
|
+
* },
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* // Get provider (auto-initializes if lazy)
|
|
34
|
+
* const desmosProvider = await registry.getProvider('desmos-calculator');
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class ToolProviderRegistry {
|
|
38
|
+
providers = new Map();
|
|
39
|
+
configs = new Map();
|
|
40
|
+
initialized = new Map();
|
|
41
|
+
initializationPromises = new Map();
|
|
42
|
+
/**
|
|
43
|
+
* Register a tool provider
|
|
44
|
+
*
|
|
45
|
+
* Adds a provider to the registry. If lazy is false, initializes immediately.
|
|
46
|
+
*
|
|
47
|
+
* @param providerId Unique provider identifier
|
|
48
|
+
* @param config Provider configuration
|
|
49
|
+
* @throws Error if provider with same ID already registered
|
|
50
|
+
*/
|
|
51
|
+
register(providerId, config) {
|
|
52
|
+
if (this.providers.has(providerId)) {
|
|
53
|
+
console.warn(`[ToolProviderRegistry] Provider "${providerId}" already registered, skipping`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.providers.set(providerId, config.provider);
|
|
57
|
+
this.configs.set(providerId, config);
|
|
58
|
+
this.initialized.set(providerId, false);
|
|
59
|
+
console.log(`[ToolProviderRegistry] Registered provider "${providerId}" (${config.provider.providerName})`);
|
|
60
|
+
// Initialize immediately if not lazy
|
|
61
|
+
if (config.lazy === false) {
|
|
62
|
+
this.initialize(providerId).catch((error) => {
|
|
63
|
+
console.error(`[ToolProviderRegistry] Failed to initialize provider "${providerId}":`, error);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Initialize a provider
|
|
69
|
+
*
|
|
70
|
+
* Fetches auth if needed and initializes the provider.
|
|
71
|
+
* Safe to call multiple times - subsequent calls wait for first initialization.
|
|
72
|
+
*
|
|
73
|
+
* @param providerId Provider to initialize
|
|
74
|
+
* @returns Promise that resolves when initialization complete
|
|
75
|
+
* @throws Error if provider not registered or initialization fails
|
|
76
|
+
*/
|
|
77
|
+
async initialize(providerId) {
|
|
78
|
+
// Already initialized
|
|
79
|
+
if (this.initialized.get(providerId)) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Initialization in progress - wait for it
|
|
83
|
+
const existingPromise = this.initializationPromises.get(providerId);
|
|
84
|
+
if (existingPromise) {
|
|
85
|
+
return existingPromise;
|
|
86
|
+
}
|
|
87
|
+
// Start new initialization
|
|
88
|
+
const initPromise = this._doInitialize(providerId);
|
|
89
|
+
this.initializationPromises.set(providerId, initPromise);
|
|
90
|
+
try {
|
|
91
|
+
await initPromise;
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
this.initializationPromises.delete(providerId);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Internal initialization logic
|
|
99
|
+
*/
|
|
100
|
+
async _doInitialize(providerId) {
|
|
101
|
+
const provider = this.providers.get(providerId);
|
|
102
|
+
const config = this.configs.get(providerId);
|
|
103
|
+
if (!provider || !config) {
|
|
104
|
+
throw new Error(`[ToolProviderRegistry] Provider "${providerId}" not registered`);
|
|
105
|
+
}
|
|
106
|
+
// Start with base config
|
|
107
|
+
let providerConfig = { ...config.config };
|
|
108
|
+
// Fetch auth if needed
|
|
109
|
+
if (provider.requiresAuth && config.authFetcher) {
|
|
110
|
+
console.log(`[ToolProviderRegistry] Fetching auth for "${providerId}"...`);
|
|
111
|
+
try {
|
|
112
|
+
const authData = await config.authFetcher();
|
|
113
|
+
providerConfig = { ...providerConfig, ...authData };
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
console.error(`[ToolProviderRegistry] Auth fetch failed for "${providerId}":`, error);
|
|
117
|
+
throw new Error(`Failed to fetch auth credentials for provider "${providerId}"`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Initialize provider
|
|
121
|
+
try {
|
|
122
|
+
await provider.initialize(providerConfig);
|
|
123
|
+
this.initialized.set(providerId, true);
|
|
124
|
+
console.log(`[ToolProviderRegistry] Provider "${providerId}" initialized`);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
console.error(`[ToolProviderRegistry] Initialization failed for "${providerId}":`, error);
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get a provider instance
|
|
133
|
+
*
|
|
134
|
+
* Retrieves a registered provider. If autoInitialize is true and provider
|
|
135
|
+
* is not initialized, initializes it first.
|
|
136
|
+
*
|
|
137
|
+
* @param providerId Provider identifier
|
|
138
|
+
* @param autoInitialize Auto-initialize if not ready (default: true)
|
|
139
|
+
* @returns Provider instance
|
|
140
|
+
* @throws Error if provider not registered
|
|
141
|
+
*/
|
|
142
|
+
async getProvider(providerId, autoInitialize = true) {
|
|
143
|
+
const provider = this.providers.get(providerId);
|
|
144
|
+
if (!provider) {
|
|
145
|
+
throw new Error(`[ToolProviderRegistry] Provider "${providerId}" not registered`);
|
|
146
|
+
}
|
|
147
|
+
// Auto-initialize if needed
|
|
148
|
+
if (autoInitialize && !this.initialized.get(providerId)) {
|
|
149
|
+
await this.initialize(providerId);
|
|
150
|
+
}
|
|
151
|
+
return provider;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get all providers in a category
|
|
155
|
+
*
|
|
156
|
+
* @param category Tool category to filter by
|
|
157
|
+
* @returns Array of provider IDs in the category
|
|
158
|
+
*/
|
|
159
|
+
getProvidersByCategory(category) {
|
|
160
|
+
return Array.from(this.providers.entries())
|
|
161
|
+
.filter(([_, provider]) => provider.category === category)
|
|
162
|
+
.map(([id]) => id);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get all registered provider IDs
|
|
166
|
+
*
|
|
167
|
+
* @returns Array of all provider IDs
|
|
168
|
+
*/
|
|
169
|
+
getProviderIds() {
|
|
170
|
+
return Array.from(this.providers.keys());
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Check if provider is registered
|
|
174
|
+
*
|
|
175
|
+
* @param providerId Provider identifier
|
|
176
|
+
* @returns true if provider is registered
|
|
177
|
+
*/
|
|
178
|
+
has(providerId) {
|
|
179
|
+
return this.providers.has(providerId);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Check if provider is initialized
|
|
183
|
+
*
|
|
184
|
+
* @param providerId Provider identifier
|
|
185
|
+
* @returns true if provider is initialized
|
|
186
|
+
*/
|
|
187
|
+
isInitialized(providerId) {
|
|
188
|
+
return this.initialized.get(providerId) === true;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Check if provider is currently initializing
|
|
192
|
+
*
|
|
193
|
+
* @param providerId Provider identifier
|
|
194
|
+
* @returns true if initialization in progress
|
|
195
|
+
*/
|
|
196
|
+
isInitializing(providerId) {
|
|
197
|
+
return this.initializationPromises.has(providerId);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Unregister and destroy a provider
|
|
201
|
+
*
|
|
202
|
+
* Removes the provider from the registry and calls its destroy method.
|
|
203
|
+
*
|
|
204
|
+
* @param providerId Provider to unregister
|
|
205
|
+
*/
|
|
206
|
+
async unregister(providerId) {
|
|
207
|
+
const provider = this.providers.get(providerId);
|
|
208
|
+
if (provider) {
|
|
209
|
+
// Wait for any pending initialization
|
|
210
|
+
const initPromise = this.initializationPromises.get(providerId);
|
|
211
|
+
if (initPromise) {
|
|
212
|
+
try {
|
|
213
|
+
await initPromise;
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// Ignore initialization errors during unregister
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Destroy provider
|
|
220
|
+
provider.destroy();
|
|
221
|
+
// Remove from registry
|
|
222
|
+
this.providers.delete(providerId);
|
|
223
|
+
this.configs.delete(providerId);
|
|
224
|
+
this.initialized.delete(providerId);
|
|
225
|
+
this.initializationPromises.delete(providerId);
|
|
226
|
+
console.log(`[ToolProviderRegistry] Unregistered provider "${providerId}"`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Clean up all providers
|
|
231
|
+
*
|
|
232
|
+
* Unregisters and destroys all providers in the registry.
|
|
233
|
+
*/
|
|
234
|
+
async destroy() {
|
|
235
|
+
const providerIds = Array.from(this.providers.keys());
|
|
236
|
+
await Promise.all(providerIds.map((id) => this.unregister(id)));
|
|
237
|
+
console.log("[ToolProviderRegistry] Registry destroyed");
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=ToolProviderRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolProviderRegistry.js","sourceRoot":"","sources":["../../../src/services/tool-providers/ToolProviderRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Provider System
|
|
3
|
+
*
|
|
4
|
+
* Unified framework for managing assessment tools with authentication,
|
|
5
|
+
* configuration, and lifecycle management.
|
|
6
|
+
*
|
|
7
|
+
* Part of PIE Assessment Toolkit.
|
|
8
|
+
*/
|
|
9
|
+
export type { IToolProvider, ToolCategory, ToolProviderCapabilities, } from "./IToolProvider";
|
|
10
|
+
export { ToolProviderRegistry } from "./ToolProviderRegistry";
|
|
11
|
+
export type { ToolProviderConfig } from "./ToolProviderRegistry";
|
|
12
|
+
export { DesmosToolProvider } from "./DesmosToolProvider";
|
|
13
|
+
export type { DesmosToolProviderConfig } from "./DesmosToolProvider";
|
|
14
|
+
export { TIToolProvider } from "./TIToolProvider";
|
|
15
|
+
export type { TIToolProviderConfig } from "./TIToolProvider";
|
|
16
|
+
export { TTSToolProvider } from "./TTSToolProvider";
|
|
17
|
+
export type { TTSToolProviderConfig, TTSBackend, } from "./TTSToolProvider";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/tool-providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,YAAY,EACX,aAAa,EACb,YAAY,EACZ,wBAAwB,GACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EACX,qBAAqB,EACrB,UAAU,GACV,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Provider System
|
|
3
|
+
*
|
|
4
|
+
* Unified framework for managing assessment tools with authentication,
|
|
5
|
+
* configuration, and lifecycle management.
|
|
6
|
+
*
|
|
7
|
+
* Part of PIE Assessment Toolkit.
|
|
8
|
+
*/
|
|
9
|
+
// Registry
|
|
10
|
+
export { ToolProviderRegistry } from "./ToolProviderRegistry";
|
|
11
|
+
// Concrete providers
|
|
12
|
+
export { DesmosToolProvider } from "./DesmosToolProvider";
|
|
13
|
+
export { TIToolProvider } from "./TIToolProvider";
|
|
14
|
+
export { TTSToolProvider } from "./TTSToolProvider";
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/tool-providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,WAAW;AACX,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,qBAAqB;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser TTS Provider
|
|
3
|
+
*
|
|
4
|
+
* Text-to-speech provider using the browser's Web Speech API.
|
|
5
|
+
* Works in all modern browsers that support SpeechSynthesis.
|
|
6
|
+
*
|
|
7
|
+
* Part of PIE Assessment Toolkit.
|
|
8
|
+
*/
|
|
9
|
+
import type { ITTSProvider, ITTSProviderImplementation, TTSConfig, TTSFeature, TTSProviderCapabilities } from "@pie-players/pie-tts";
|
|
10
|
+
/**
|
|
11
|
+
* Browser TTS Provider
|
|
12
|
+
*
|
|
13
|
+
* Stateless factory for creating browser-based TTS implementations.
|
|
14
|
+
*/
|
|
15
|
+
export declare class BrowserTTSProvider implements ITTSProvider {
|
|
16
|
+
readonly providerId = "browser";
|
|
17
|
+
readonly providerName = "Browser Speech Synthesis";
|
|
18
|
+
readonly version = "1.0.0";
|
|
19
|
+
initialize(config: TTSConfig): Promise<ITTSProviderImplementation>;
|
|
20
|
+
supportsFeature(feature: TTSFeature): boolean;
|
|
21
|
+
getCapabilities(): TTSProviderCapabilities;
|
|
22
|
+
destroy(): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=browser-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-provider.d.ts","sourceRoot":"","sources":["../../../src/services/tts/browser-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACX,YAAY,EACZ,0BAA0B,EAC1B,SAAS,EACT,UAAU,EACV,uBAAuB,EACvB,MAAM,sBAAsB,CAAC;AAE9B;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACtD,QAAQ,CAAC,UAAU,aAAa;IAChC,QAAQ,CAAC,YAAY,8BAA8B;IACnD,QAAQ,CAAC,OAAO,WAAW;IAErB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAcxE,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAK7C,eAAe,IAAI,uBAAuB;IAW1C,OAAO,IAAI,IAAI;CAGf"}
|