diff --git a/package-lock.json b/package-lock.json index a6953f8..97f709c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -76,8 +76,8 @@ "eslint-config-prettier": "^9.0.0", "eslint-plugin-import": "^2.27.5", "eslint-plugin-jsdoc": "41.1.2", - "eslint-plugin-prefer-arrow": "latest", - "eslint-plugin-react": "latest", + "eslint-plugin-prefer-arrow": "*", + "eslint-plugin-react": "*", "express": "^4.16.4", "husky": "^4.2.1", "jasmine-core": ">=3.8", @@ -113,7 +113,7 @@ "zone.js": "0.11.8" }, "engines": { - "node": ">=10.13.0" + "node": ">=10.13.0 <20" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -18154,9 +18154,9 @@ } }, "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", "dev": true, "engines": { "node": ">= 6.13.0" @@ -40094,9 +40094,9 @@ } }, "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", "dev": true }, "node-gyp": { diff --git a/projects/every-voice/package.json b/projects/every-voice/package.json index e2917d9..3572144 100644 --- a/projects/every-voice/package.json +++ b/projects/every-voice/package.json @@ -1,6 +1,6 @@ { "name": "@everyvoice/every-voice", - "version": "0.0.5", + "version": "0.0.6", "peerDependencies": { "@angular/common": "^14.2.0", "@angular/core": "^14.2.0", diff --git a/projects/every-voice/src/lib/every-voice.config.ts b/projects/every-voice/src/lib/every-voice.config.ts index 13b6e3b..ee37b8f 100644 --- a/projects/every-voice/src/lib/every-voice.config.ts +++ b/projects/every-voice/src/lib/every-voice.config.ts @@ -1,9 +1,15 @@ +export interface Speaker { + display: string; + slug: string; +} + export interface EveryVoiceConfig { enableTTS: boolean; requiresAuth: boolean; apiUrl?: string; developmentBearerToken?: string; // Optional: Token for authentication - speakerID?: string; // Optional: Speaker ID for TTS + availableSpeakers?: Speaker[]; // Optional: Available Speaker IDs for TTS + defaultSpeaker?: Speaker; // Optional: Speaker ID for TTS diffusionSteps?: number; // Optional: Number of steps for TTS domain?: string; // Optional: Auth0 Domain clientId?: string; // Optional: Auth0 ClientId diff --git a/projects/every-voice/src/lib/every-voice.service.ts b/projects/every-voice/src/lib/every-voice.service.ts index c168701..4db1e04 100644 --- a/projects/every-voice/src/lib/every-voice.service.ts +++ b/projects/every-voice/src/lib/every-voice.service.ts @@ -6,15 +6,9 @@ import { EveryVoiceConfig, EveryVoiceServiceStatus, EveryVoiceServiceMiddlewareInfoResponse, + Speaker, } from "./every-voice.config"; -import { - BehaviorSubject, - from, - Subject, - Observable, - throwError, - of, -} from "rxjs"; +import { BehaviorSubject, from, Subject, Observable, throwError } from "rxjs"; import { catchError, finalize, map, switchMap, tap } from "rxjs/operators"; import { AuthService } from "@auth0/auth0-angular"; @@ -23,8 +17,8 @@ export class EveryVoiceService { public status$: Subject<{ id: string; status: EveryVoiceServiceStatus }>; public ttsEnabledAndAuthenticated$ = new BehaviorSubject(false); public loading$ = new BehaviorSubject(false); - public speakers$ = new BehaviorSubject([]); - public speakerID: string | undefined; + public speakers$ = new BehaviorSubject([]); + public speakerID: Speaker | undefined; public diffusionSteps: number | undefined; private enableTTS: boolean; private requiresAuth: boolean; @@ -52,36 +46,12 @@ export class EveryVoiceService { ? config.enableTTS : config?.apiUrl?.length > 0; // Only enable TTS by default if apiUrl is defined this.bearerToken = config?.developmentBearerToken; - this.speakerID = config?.speakerID; + this.speakers$.next(config?.availableSpeakers); + this.speakerID = config?.defaultSpeaker; this.diffusionSteps = config?.diffusionSteps; this.requiresAuth = config?.requiresAuth; // If authentication is not required, then we set the default to true this.ttsEnabledAndAuthenticated$.next(this.enableTTS && !this.requiresAuth); - // If tts enabled and authenticated, then look for fetch and set the tts options - this.ttsEnabledAndAuthenticated$ - .pipe( - switchMap((isAuthenticated) => { - if (isAuthenticated && this.requiresAuth) { - return this.setTTSOptions().pipe( - tap((response) => { - this.speakers$.next(response.speakers || []); - - this.speakerID = this.speakerID || response.defaultSpeaker; - - this.diffusionSteps = - this.diffusionSteps || response.defaultDiffusionSteps; - }) - ); - } else { - return of(isAuthenticated); - } - }), - catchError((err) => { - console.error("[ERROR] Failed to set TTS options:", err); - return throwError(err); - }) - ) - .subscribe(); console.log("[DEBUG] initialized EveryVoiceService with config:", config); this.status$.next({ id: "all", status: "READY" }); } @@ -514,7 +484,7 @@ export class EveryVoiceService { const options: EveryVoiceServiceMiddlewareInfoResponse = { speakers: [], defaultDiffusionSteps: this.diffusionSteps, - defaultSpeaker: this.speakerID, + defaultSpeaker: this.speakerID.slug, }; if (infoResponse["named_endpoints"]) { const namedEndpoints = infoResponse["named_endpoints"];