@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.
Files changed (194) hide show
  1. package/README.md +520 -0
  2. package/dist/attempt/TestSession.d.ts +90 -0
  3. package/dist/attempt/TestSession.d.ts.map +1 -0
  4. package/dist/attempt/TestSession.js +174 -0
  5. package/dist/attempt/TestSession.js.map +1 -0
  6. package/dist/core/TypedEventBus.d.ts +48 -0
  7. package/dist/core/TypedEventBus.d.ts.map +1 -0
  8. package/dist/core/TypedEventBus.js +63 -0
  9. package/dist/core/TypedEventBus.js.map +1 -0
  10. package/dist/index.d.ts +37 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +44 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/item-loader.d.ts +45 -0
  15. package/dist/item-loader.d.ts.map +1 -0
  16. package/dist/item-loader.js +62 -0
  17. package/dist/item-loader.js.map +1 -0
  18. package/dist/player/AssessmentPlayer.d.ts +388 -0
  19. package/dist/player/AssessmentPlayer.d.ts.map +1 -0
  20. package/dist/player/AssessmentPlayer.js +965 -0
  21. package/dist/player/AssessmentPlayer.js.map +1 -0
  22. package/dist/player/index.d.ts +17 -0
  23. package/dist/player/index.d.ts.map +1 -0
  24. package/dist/player/index.js +15 -0
  25. package/dist/player/index.js.map +1 -0
  26. package/dist/player/navigation-types.d.ts +63 -0
  27. package/dist/player/navigation-types.d.ts.map +1 -0
  28. package/dist/player/navigation-types.js +7 -0
  29. package/dist/player/navigation-types.js.map +1 -0
  30. package/dist/player/qti-navigation.d.ts +29 -0
  31. package/dist/player/qti-navigation.d.ts.map +1 -0
  32. package/dist/player/qti-navigation.js +160 -0
  33. package/dist/player/qti-navigation.js.map +1 -0
  34. package/dist/reference-layout/index.d.ts +19 -0
  35. package/dist/reference-layout/index.d.ts.map +1 -0
  36. package/dist/reference-layout/index.js +20 -0
  37. package/dist/reference-layout/index.js.map +1 -0
  38. package/dist/services/AccessibilityCatalogResolver.d.ts +141 -0
  39. package/dist/services/AccessibilityCatalogResolver.d.ts.map +1 -0
  40. package/dist/services/AccessibilityCatalogResolver.js +249 -0
  41. package/dist/services/AccessibilityCatalogResolver.js.map +1 -0
  42. package/dist/services/AssessmentAuthoringService.d.ts +60 -0
  43. package/dist/services/AssessmentAuthoringService.d.ts.map +1 -0
  44. package/dist/services/AssessmentAuthoringService.js +183 -0
  45. package/dist/services/AssessmentAuthoringService.js.map +1 -0
  46. package/dist/services/ContextVariableStore.d.ts +114 -0
  47. package/dist/services/ContextVariableStore.d.ts.map +1 -0
  48. package/dist/services/ContextVariableStore.js +207 -0
  49. package/dist/services/ContextVariableStore.js.map +1 -0
  50. package/dist/services/ElementToolStateStore.d.ts +125 -0
  51. package/dist/services/ElementToolStateStore.d.ts.map +1 -0
  52. package/dist/services/ElementToolStateStore.js +200 -0
  53. package/dist/services/ElementToolStateStore.js.map +1 -0
  54. package/dist/services/HighlightCoordinator.d.ts +179 -0
  55. package/dist/services/HighlightCoordinator.d.ts.map +1 -0
  56. package/dist/services/HighlightCoordinator.js +446 -0
  57. package/dist/services/HighlightCoordinator.js.map +1 -0
  58. package/dist/services/I18nService.d.ts +121 -0
  59. package/dist/services/I18nService.d.ts.map +1 -0
  60. package/dist/services/I18nService.js +276 -0
  61. package/dist/services/I18nService.js.map +1 -0
  62. package/dist/services/PNPMapper.d.ts +71 -0
  63. package/dist/services/PNPMapper.d.ts.map +1 -0
  64. package/dist/services/PNPMapper.js +98 -0
  65. package/dist/services/PNPMapper.js.map +1 -0
  66. package/dist/services/PNPToolResolver.d.ts +127 -0
  67. package/dist/services/PNPToolResolver.d.ts.map +1 -0
  68. package/dist/services/PNPToolResolver.js +222 -0
  69. package/dist/services/PNPToolResolver.js.map +1 -0
  70. package/dist/services/SSMLExtractor.d.ts +61 -0
  71. package/dist/services/SSMLExtractor.d.ts.map +1 -0
  72. package/dist/services/SSMLExtractor.js +181 -0
  73. package/dist/services/SSMLExtractor.js.map +1 -0
  74. package/dist/services/TTSService.d.ts +162 -0
  75. package/dist/services/TTSService.d.ts.map +1 -0
  76. package/dist/services/TTSService.js +465 -0
  77. package/dist/services/TTSService.js.map +1 -0
  78. package/dist/services/ThemeProvider.d.ts +95 -0
  79. package/dist/services/ThemeProvider.d.ts.map +1 -0
  80. package/dist/services/ThemeProvider.js +299 -0
  81. package/dist/services/ThemeProvider.js.map +1 -0
  82. package/dist/services/ToolConfigResolver.d.ts +162 -0
  83. package/dist/services/ToolConfigResolver.d.ts.map +1 -0
  84. package/dist/services/ToolConfigResolver.js +230 -0
  85. package/dist/services/ToolConfigResolver.js.map +1 -0
  86. package/dist/services/ToolCoordinator.d.ts +137 -0
  87. package/dist/services/ToolCoordinator.d.ts.map +1 -0
  88. package/dist/services/ToolCoordinator.js +318 -0
  89. package/dist/services/ToolCoordinator.js.map +1 -0
  90. package/dist/services/ToolkitCoordinator.d.ts +188 -0
  91. package/dist/services/ToolkitCoordinator.d.ts.map +1 -0
  92. package/dist/services/ToolkitCoordinator.js +252 -0
  93. package/dist/services/ToolkitCoordinator.js.map +1 -0
  94. package/dist/services/interfaces.d.ts +391 -0
  95. package/dist/services/interfaces.d.ts.map +1 -0
  96. package/dist/services/interfaces.js +12 -0
  97. package/dist/services/interfaces.js.map +1 -0
  98. package/dist/services/tool-providers/DesmosToolProvider.d.ts +103 -0
  99. package/dist/services/tool-providers/DesmosToolProvider.d.ts.map +1 -0
  100. package/dist/services/tool-providers/DesmosToolProvider.js +127 -0
  101. package/dist/services/tool-providers/DesmosToolProvider.js.map +1 -0
  102. package/dist/services/tool-providers/IToolProvider.d.ts +137 -0
  103. package/dist/services/tool-providers/IToolProvider.d.ts.map +1 -0
  104. package/dist/services/tool-providers/IToolProvider.js +13 -0
  105. package/dist/services/tool-providers/IToolProvider.js.map +1 -0
  106. package/dist/services/tool-providers/TIToolProvider.d.ts +107 -0
  107. package/dist/services/tool-providers/TIToolProvider.d.ts.map +1 -0
  108. package/dist/services/tool-providers/TIToolProvider.js +123 -0
  109. package/dist/services/tool-providers/TIToolProvider.js.map +1 -0
  110. package/dist/services/tool-providers/TTSToolProvider.d.ts +143 -0
  111. package/dist/services/tool-providers/TTSToolProvider.d.ts.map +1 -0
  112. package/dist/services/tool-providers/TTSToolProvider.js +168 -0
  113. package/dist/services/tool-providers/TTSToolProvider.js.map +1 -0
  114. package/dist/services/tool-providers/ToolProviderRegistry.d.ts +165 -0
  115. package/dist/services/tool-providers/ToolProviderRegistry.d.ts.map +1 -0
  116. package/dist/services/tool-providers/ToolProviderRegistry.js +240 -0
  117. package/dist/services/tool-providers/ToolProviderRegistry.js.map +1 -0
  118. package/dist/services/tool-providers/index.d.ts +18 -0
  119. package/dist/services/tool-providers/index.d.ts.map +1 -0
  120. package/dist/services/tool-providers/index.js +15 -0
  121. package/dist/services/tool-providers/index.js.map +1 -0
  122. package/dist/services/tts/browser-provider.d.ts +24 -0
  123. package/dist/services/tts/browser-provider.d.ts.map +1 -0
  124. package/dist/services/tts/browser-provider.js +177 -0
  125. package/dist/services/tts/browser-provider.js.map +1 -0
  126. package/dist/services/tts/provider-interface.d.ts +131 -0
  127. package/dist/services/tts/provider-interface.d.ts.map +1 -0
  128. package/dist/services/tts/provider-interface.js +10 -0
  129. package/dist/services/tts/provider-interface.js.map +1 -0
  130. package/dist/tools/calculators/desmos-provider.d.ts +54 -0
  131. package/dist/tools/calculators/desmos-provider.d.ts.map +1 -0
  132. package/dist/tools/calculators/desmos-provider.js +384 -0
  133. package/dist/tools/calculators/desmos-provider.js.map +1 -0
  134. package/dist/tools/calculators/mathjs-provider.d.ts +50 -0
  135. package/dist/tools/calculators/mathjs-provider.d.ts.map +1 -0
  136. package/dist/tools/calculators/mathjs-provider.js +660 -0
  137. package/dist/tools/calculators/mathjs-provider.js.map +1 -0
  138. package/dist/tools/calculators/ti-provider.d.ts +122 -0
  139. package/dist/tools/calculators/ti-provider.d.ts.map +1 -0
  140. package/dist/tools/calculators/ti-provider.js +587 -0
  141. package/dist/tools/calculators/ti-provider.js.map +1 -0
  142. package/dist/tools/client.d.ts +17 -0
  143. package/dist/tools/client.d.ts.map +1 -0
  144. package/dist/tools/client.js +26 -0
  145. package/dist/tools/client.js.map +1 -0
  146. package/dist/tools/index.d.ts +8 -0
  147. package/dist/tools/index.d.ts.map +1 -0
  148. package/dist/tools/index.js +10 -0
  149. package/dist/tools/index.js.map +1 -0
  150. package/dist/tools/library-loader.d.ts +63 -0
  151. package/dist/tools/library-loader.d.ts.map +1 -0
  152. package/dist/tools/library-loader.js +292 -0
  153. package/dist/tools/library-loader.js.map +1 -0
  154. package/dist/tools/response-discovery.d.ts +72 -0
  155. package/dist/tools/response-discovery.d.ts.map +1 -0
  156. package/dist/tools/response-discovery.js +183 -0
  157. package/dist/tools/response-discovery.js.map +1 -0
  158. package/dist/tools/tool-coordinator.d.ts +76 -0
  159. package/dist/tools/tool-coordinator.d.ts.map +1 -0
  160. package/dist/tools/tool-coordinator.js +197 -0
  161. package/dist/tools/tool-coordinator.js.map +1 -0
  162. package/dist/tools/types.d.ts +427 -0
  163. package/dist/tools/types.d.ts.map +1 -0
  164. package/dist/tools/types.js +13 -0
  165. package/dist/tools/types.js.map +1 -0
  166. package/dist/tools/variant-resolver.d.ts +48 -0
  167. package/dist/tools/variant-resolver.d.ts.map +1 -0
  168. package/dist/tools/variant-resolver.js +214 -0
  169. package/dist/tools/variant-resolver.js.map +1 -0
  170. package/dist/types/events.d.ts +157 -0
  171. package/dist/types/events.d.ts.map +1 -0
  172. package/dist/types/events.js +11 -0
  173. package/dist/types/events.js.map +1 -0
  174. package/dist/utils/logger.d.ts +7 -0
  175. package/dist/utils/logger.d.ts.map +1 -0
  176. package/dist/utils/logger.js +11 -0
  177. package/dist/utils/logger.js.map +1 -0
  178. package/package.json +71 -0
  179. package/src/README.md +626 -0
  180. package/src/components/QuestionToolBar.svelte +406 -0
  181. package/src/player/AssessmentLayout.svelte +68 -0
  182. package/src/player/README.md +154 -0
  183. package/src/reference-layout/README.md +135 -0
  184. package/src/reference-layout/ReferenceLayout.svelte +209 -0
  185. package/src/reference-layout/components/AssessmentContent.svelte +259 -0
  186. package/src/reference-layout/components/AssessmentFooter.svelte +89 -0
  187. package/src/reference-layout/components/AssessmentHeader.svelte +250 -0
  188. package/src/reference-layout/components/AssessmentNavigation.svelte +134 -0
  189. package/src/reference-layout/components/AssessmentToolsBar.svelte +176 -0
  190. package/src/reference-layout/components/ItemPanel.svelte +200 -0
  191. package/src/reference-layout/components/NotesPanel.svelte +179 -0
  192. package/src/reference-layout/components/PassagePanel.svelte +76 -0
  193. package/src/tools/README.md +616 -0
  194. 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"}