@mastra/voice-playai 0.0.0-share-agent-metadata-with-cloud-20250718110128 → 0.0.0-sidebar-window-undefined-fix-20251029233656

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/index.cjs CHANGED
@@ -173,34 +173,32 @@ var PlayAIVoice = class extends voice.MastraVoice {
173
173
  }
174
174
  async speak(input, options) {
175
175
  const text = typeof input === "string" ? input : await this.streamToString(input);
176
- return this.traced(async () => {
177
- const payload = {
178
- text,
179
- voice: options?.speaker || this.speaker,
180
- model: this.speechModel?.name
181
- };
182
- const response = await this.makeRequest("/tts/stream", payload);
183
- if (!response.body) {
184
- throw new Error("No response body received");
185
- }
186
- const stream$1 = new stream.PassThrough();
187
- const reader = response.body.getReader();
188
- void (async () => {
189
- try {
190
- while (true) {
191
- const { done, value } = await reader.read();
192
- if (done) {
193
- stream$1.end();
194
- break;
195
- }
196
- stream$1.write(value);
176
+ const payload = {
177
+ text,
178
+ voice: options?.speaker || this.speaker,
179
+ model: this.speechModel?.name
180
+ };
181
+ const response = await this.makeRequest("/tts/stream", payload);
182
+ if (!response.body) {
183
+ throw new Error("No response body received");
184
+ }
185
+ const stream$1 = new stream.PassThrough();
186
+ const reader = response.body.getReader();
187
+ void (async () => {
188
+ try {
189
+ while (true) {
190
+ const { done, value } = await reader.read();
191
+ if (done) {
192
+ stream$1.end();
193
+ break;
197
194
  }
198
- } catch (error) {
199
- stream$1.destroy(error);
195
+ stream$1.write(value);
200
196
  }
201
- })();
202
- return stream$1;
203
- }, "voice.playai.speak")();
197
+ } catch (error) {
198
+ stream$1.destroy(error);
199
+ }
200
+ })();
201
+ return stream$1;
204
202
  }
205
203
  /**
206
204
  * Checks if listening capabilities are enabled.
@@ -214,21 +212,20 @@ var PlayAIVoice = class extends voice.MastraVoice {
214
212
  throw new Error("PlayAI does not support speech recognition");
215
213
  }
216
214
  async getSpeakers() {
217
- return this.traced(
218
- () => Promise.resolve(
219
- PLAYAI_VOICES.map((voice) => ({
220
- voiceId: voice.id,
221
- name: voice.name,
222
- accent: voice.accent,
223
- gender: voice.gender,
224
- age: voice.age,
225
- style: voice.style
226
- }))
227
- ),
228
- "voice.playai.voices"
229
- )();
215
+ return Promise.resolve(
216
+ PLAYAI_VOICES.map((voice) => ({
217
+ voiceId: voice.id,
218
+ name: voice.name,
219
+ accent: voice.accent,
220
+ gender: voice.gender,
221
+ age: voice.age,
222
+ style: voice.style
223
+ }))
224
+ );
230
225
  }
231
226
  };
232
227
 
233
228
  exports.PLAYAI_VOICES = PLAYAI_VOICES;
234
229
  exports.PlayAIVoice = PlayAIVoice;
230
+ //# sourceMappingURL=index.cjs.map
231
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"names":["MastraVoice","stream","PassThrough"],"mappings":"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","file":"index.cjs","sourcesContent":["import { PassThrough } from 'stream';\n\nimport { MastraVoice } from '@mastra/core/voice';\n\ninterface PlayAIVoiceInfo {\n name: string;\n accent: string;\n gender: 'M' | 'F';\n age: 'Young' | 'Middle' | 'Old';\n style: 'Conversational' | 'Narrative';\n id: string;\n}\n\nexport const PLAYAI_VOICES: PlayAIVoiceInfo[] = [\n {\n name: 'Angelo',\n accent: 'US',\n gender: 'M',\n age: 'Young',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/baf1ef41-36b6-428c-9bdf-50ba54682bd8/original/manifest.json',\n },\n {\n name: 'Arsenio',\n accent: 'US African American',\n gender: 'M',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/65977f5e-a22a-4b36-861b-ecede19bdd65/original/manifest.json',\n },\n {\n name: 'Cillian',\n accent: 'Irish',\n gender: 'M',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/1591b954-8760-41a9-bc58-9176a68c5726/original/manifest.json',\n },\n {\n name: 'Timo',\n accent: 'US',\n gender: 'M',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/677a4ae3-252f-476e-85ce-eeed68e85951/original/manifest.json',\n },\n {\n name: 'Dexter',\n accent: 'US',\n gender: 'M',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/b27bc13e-996f-4841-b584-4d35801aea98/original/manifest.json',\n },\n {\n name: 'Miles',\n accent: 'US African American',\n gender: 'M',\n age: 'Young',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/29dd9a52-bd32-4a6e-bff1-bbb98dcc286a/original/manifest.json',\n },\n {\n name: 'Briggs',\n accent: 'US Southern (Oklahoma)',\n gender: 'M',\n age: 'Old',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/71cdb799-1e03-41c6-8a05-f7cd55134b0b/original/manifest.json',\n },\n {\n name: 'Deedee',\n accent: 'US African American',\n gender: 'F',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/e040bd1b-f190-4bdb-83f0-75ef85b18f84/original/manifest.json',\n },\n {\n name: 'Nia',\n accent: 'US',\n gender: 'F',\n age: 'Young',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/831bd330-85c6-4333-b2b4-10c476ea3491/original/manifest.json',\n },\n {\n name: 'Inara',\n accent: 'US African American',\n gender: 'F',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/adb83b67-8d75-48ff-ad4d-a0840d231ef1/original/manifest.json',\n },\n {\n name: 'Constanza',\n accent: 'US Latin American',\n gender: 'F',\n age: 'Young',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/b0aca4d7-1738-4848-a80b-307ac44a7298/original/manifest.json',\n },\n {\n name: 'Gideon',\n accent: 'British',\n gender: 'M',\n age: 'Old',\n style: 'Narrative',\n id: 's3://voice-cloning-zero-shot/5a3a1168-7793-4b2c-8f90-aff2b5232131/original/manifest.json',\n },\n {\n name: 'Casper',\n accent: 'US',\n gender: 'M',\n age: 'Middle',\n style: 'Narrative',\n id: 's3://voice-cloning-zero-shot/1bbc6986-fadf-4bd8-98aa-b86fed0476e9/original/manifest.json',\n },\n {\n name: 'Mitch',\n accent: 'Australian',\n gender: 'M',\n age: 'Middle',\n style: 'Narrative',\n id: 's3://voice-cloning-zero-shot/c14e50f2-c5e3-47d1-8c45-fa4b67803d19/original/manifest.json',\n },\n {\n name: 'Ava',\n accent: 'Australian',\n gender: 'F',\n age: 'Middle',\n style: 'Narrative',\n id: 's3://voice-cloning-zero-shot/50381567-ff7b-46d2-bfdc-a9584a85e08d/original/manifest.json',\n },\n];\n\ninterface PlayAIConfig {\n name?: 'PlayDialog' | 'Play3.0-mini';\n apiKey?: string;\n userId?: string;\n}\n\nexport class PlayAIVoice extends MastraVoice {\n private baseUrl = 'https://api.play.ai/api/v1';\n private userId: string;\n\n constructor({ speechModel, speaker }: { speechModel?: PlayAIConfig; speaker?: string } = {}) {\n super({\n speechModel: {\n name: speechModel?.name ?? 'PlayDialog',\n apiKey: speechModel?.apiKey ?? process.env.PLAYAI_API_KEY,\n },\n speaker: speaker ?? PLAYAI_VOICES[0]?.id,\n });\n const userId = speechModel?.userId ?? process.env.PLAYAI_USER_ID;\n if (!userId) {\n throw new Error('userId is required');\n }\n\n this.userId = userId;\n }\n\n private async makeRequest(endpoint: string, payload?: any, method: 'GET' | 'POST' = 'POST') {\n const headers = new Headers({\n Authorization: `Bearer ${this.speechModel?.apiKey}`,\n 'Content-Type': 'application/json',\n 'X-USER-ID': this.userId,\n });\n\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method,\n headers,\n body: payload ? JSON.stringify(payload) : undefined,\n });\n\n if (!response.ok) {\n const error = (await response.json()) as { message: string };\n\n throw new Error(`PlayAI API Error: ${error.message || response.statusText}`);\n }\n\n return response;\n }\n\n private async streamToString(stream: NodeJS.ReadableStream): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n if (typeof chunk === 'string') {\n chunks.push(Buffer.from(chunk));\n } else {\n chunks.push(chunk);\n }\n }\n return Buffer.concat(chunks).toString('utf-8');\n }\n\n async speak(input: string | NodeJS.ReadableStream, options?: { speaker?: string }): Promise<NodeJS.ReadableStream> {\n const text = typeof input === 'string' ? input : await this.streamToString(input);\n\n const payload = {\n text,\n voice: options?.speaker || this.speaker,\n model: this.speechModel?.name,\n };\n\n const response = await this.makeRequest('/tts/stream', payload);\n if (!response.body) {\n throw new Error('No response body received');\n }\n\n // Create a PassThrough stream for the audio\n const stream = new PassThrough();\n\n // Process the stream\n const reader = response.body.getReader();\n void (async () => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n stream.end();\n break;\n }\n stream.write(value);\n }\n } catch (error) {\n stream.destroy(error as Error);\n }\n })();\n\n return stream;\n }\n\n /**\n * Checks if listening capabilities are enabled.\n *\n * @returns {Promise<{ enabled: boolean }>}\n */\n async getListener() {\n return { enabled: false };\n }\n\n async listen(\n _input: NodeJS.ReadableStream,\n _options?: Record<string, unknown>,\n ): Promise<string | NodeJS.ReadableStream> {\n throw new Error('PlayAI does not support speech recognition');\n }\n\n async getSpeakers() {\n return Promise.resolve(\n PLAYAI_VOICES.map(voice => ({\n voiceId: voice.id,\n name: voice.name,\n accent: voice.accent,\n gender: voice.gender,\n age: voice.age,\n style: voice.style,\n })),\n );\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,47 @@
1
- export { PLAYAI_VOICES } from './_tsup-dts-rollup.js';
2
- export { PlayAIVoice } from './_tsup-dts-rollup.js';
1
+ import { MastraVoice } from '@mastra/core/voice';
2
+ interface PlayAIVoiceInfo {
3
+ name: string;
4
+ accent: string;
5
+ gender: 'M' | 'F';
6
+ age: 'Young' | 'Middle' | 'Old';
7
+ style: 'Conversational' | 'Narrative';
8
+ id: string;
9
+ }
10
+ export declare const PLAYAI_VOICES: PlayAIVoiceInfo[];
11
+ interface PlayAIConfig {
12
+ name?: 'PlayDialog' | 'Play3.0-mini';
13
+ apiKey?: string;
14
+ userId?: string;
15
+ }
16
+ export declare class PlayAIVoice extends MastraVoice {
17
+ private baseUrl;
18
+ private userId;
19
+ constructor({ speechModel, speaker }?: {
20
+ speechModel?: PlayAIConfig;
21
+ speaker?: string;
22
+ });
23
+ private makeRequest;
24
+ private streamToString;
25
+ speak(input: string | NodeJS.ReadableStream, options?: {
26
+ speaker?: string;
27
+ }): Promise<NodeJS.ReadableStream>;
28
+ /**
29
+ * Checks if listening capabilities are enabled.
30
+ *
31
+ * @returns {Promise<{ enabled: boolean }>}
32
+ */
33
+ getListener(): Promise<{
34
+ enabled: boolean;
35
+ }>;
36
+ listen(_input: NodeJS.ReadableStream, _options?: Record<string, unknown>): Promise<string | NodeJS.ReadableStream>;
37
+ getSpeakers(): Promise<{
38
+ voiceId: string;
39
+ name: string;
40
+ accent: string;
41
+ gender: "M" | "F";
42
+ age: "Young" | "Middle" | "Old";
43
+ style: "Conversational" | "Narrative";
44
+ }[]>;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAClB,GAAG,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAChC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,aAAa,EAAE,eAAe,EAyH1C,CAAC;AAEF,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAY,SAAQ,WAAW;IAC1C,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,MAAM,CAAS;gBAEX,EAAE,WAAW,EAAE,OAAO,EAAE,GAAE;QAAE,WAAW,CAAC,EAAE,YAAY,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;YAgB7E,WAAW;YAsBX,cAAc;IAYtB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;IAqClH;;;;OAIG;IACG,WAAW;;;IAIX,MAAM,CACV,MAAM,EAAE,MAAM,CAAC,cAAc,EAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;IAIpC,WAAW;;;;;;;;CAYlB"}
package/dist/index.js CHANGED
@@ -171,34 +171,32 @@ var PlayAIVoice = class extends MastraVoice {
171
171
  }
172
172
  async speak(input, options) {
173
173
  const text = typeof input === "string" ? input : await this.streamToString(input);
174
- return this.traced(async () => {
175
- const payload = {
176
- text,
177
- voice: options?.speaker || this.speaker,
178
- model: this.speechModel?.name
179
- };
180
- const response = await this.makeRequest("/tts/stream", payload);
181
- if (!response.body) {
182
- throw new Error("No response body received");
183
- }
184
- const stream = new PassThrough();
185
- const reader = response.body.getReader();
186
- void (async () => {
187
- try {
188
- while (true) {
189
- const { done, value } = await reader.read();
190
- if (done) {
191
- stream.end();
192
- break;
193
- }
194
- stream.write(value);
174
+ const payload = {
175
+ text,
176
+ voice: options?.speaker || this.speaker,
177
+ model: this.speechModel?.name
178
+ };
179
+ const response = await this.makeRequest("/tts/stream", payload);
180
+ if (!response.body) {
181
+ throw new Error("No response body received");
182
+ }
183
+ const stream = new PassThrough();
184
+ const reader = response.body.getReader();
185
+ void (async () => {
186
+ try {
187
+ while (true) {
188
+ const { done, value } = await reader.read();
189
+ if (done) {
190
+ stream.end();
191
+ break;
195
192
  }
196
- } catch (error) {
197
- stream.destroy(error);
193
+ stream.write(value);
198
194
  }
199
- })();
200
- return stream;
201
- }, "voice.playai.speak")();
195
+ } catch (error) {
196
+ stream.destroy(error);
197
+ }
198
+ })();
199
+ return stream;
202
200
  }
203
201
  /**
204
202
  * Checks if listening capabilities are enabled.
@@ -212,20 +210,19 @@ var PlayAIVoice = class extends MastraVoice {
212
210
  throw new Error("PlayAI does not support speech recognition");
213
211
  }
214
212
  async getSpeakers() {
215
- return this.traced(
216
- () => Promise.resolve(
217
- PLAYAI_VOICES.map((voice) => ({
218
- voiceId: voice.id,
219
- name: voice.name,
220
- accent: voice.accent,
221
- gender: voice.gender,
222
- age: voice.age,
223
- style: voice.style
224
- }))
225
- ),
226
- "voice.playai.voices"
227
- )();
213
+ return Promise.resolve(
214
+ PLAYAI_VOICES.map((voice) => ({
215
+ voiceId: voice.id,
216
+ name: voice.name,
217
+ accent: voice.accent,
218
+ gender: voice.gender,
219
+ age: voice.age,
220
+ style: voice.style
221
+ }))
222
+ );
228
223
  }
229
224
  };
230
225
 
231
226
  export { PLAYAI_VOICES, PlayAIVoice };
227
+ //# sourceMappingURL=index.js.map
228
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { PassThrough } from 'stream';\n\nimport { MastraVoice } from '@mastra/core/voice';\n\ninterface PlayAIVoiceInfo {\n name: string;\n accent: string;\n gender: 'M' | 'F';\n age: 'Young' | 'Middle' | 'Old';\n style: 'Conversational' | 'Narrative';\n id: string;\n}\n\nexport const PLAYAI_VOICES: PlayAIVoiceInfo[] = [\n {\n name: 'Angelo',\n accent: 'US',\n gender: 'M',\n age: 'Young',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/baf1ef41-36b6-428c-9bdf-50ba54682bd8/original/manifest.json',\n },\n {\n name: 'Arsenio',\n accent: 'US African American',\n gender: 'M',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/65977f5e-a22a-4b36-861b-ecede19bdd65/original/manifest.json',\n },\n {\n name: 'Cillian',\n accent: 'Irish',\n gender: 'M',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/1591b954-8760-41a9-bc58-9176a68c5726/original/manifest.json',\n },\n {\n name: 'Timo',\n accent: 'US',\n gender: 'M',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/677a4ae3-252f-476e-85ce-eeed68e85951/original/manifest.json',\n },\n {\n name: 'Dexter',\n accent: 'US',\n gender: 'M',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/b27bc13e-996f-4841-b584-4d35801aea98/original/manifest.json',\n },\n {\n name: 'Miles',\n accent: 'US African American',\n gender: 'M',\n age: 'Young',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/29dd9a52-bd32-4a6e-bff1-bbb98dcc286a/original/manifest.json',\n },\n {\n name: 'Briggs',\n accent: 'US Southern (Oklahoma)',\n gender: 'M',\n age: 'Old',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/71cdb799-1e03-41c6-8a05-f7cd55134b0b/original/manifest.json',\n },\n {\n name: 'Deedee',\n accent: 'US African American',\n gender: 'F',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/e040bd1b-f190-4bdb-83f0-75ef85b18f84/original/manifest.json',\n },\n {\n name: 'Nia',\n accent: 'US',\n gender: 'F',\n age: 'Young',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/831bd330-85c6-4333-b2b4-10c476ea3491/original/manifest.json',\n },\n {\n name: 'Inara',\n accent: 'US African American',\n gender: 'F',\n age: 'Middle',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/adb83b67-8d75-48ff-ad4d-a0840d231ef1/original/manifest.json',\n },\n {\n name: 'Constanza',\n accent: 'US Latin American',\n gender: 'F',\n age: 'Young',\n style: 'Conversational',\n id: 's3://voice-cloning-zero-shot/b0aca4d7-1738-4848-a80b-307ac44a7298/original/manifest.json',\n },\n {\n name: 'Gideon',\n accent: 'British',\n gender: 'M',\n age: 'Old',\n style: 'Narrative',\n id: 's3://voice-cloning-zero-shot/5a3a1168-7793-4b2c-8f90-aff2b5232131/original/manifest.json',\n },\n {\n name: 'Casper',\n accent: 'US',\n gender: 'M',\n age: 'Middle',\n style: 'Narrative',\n id: 's3://voice-cloning-zero-shot/1bbc6986-fadf-4bd8-98aa-b86fed0476e9/original/manifest.json',\n },\n {\n name: 'Mitch',\n accent: 'Australian',\n gender: 'M',\n age: 'Middle',\n style: 'Narrative',\n id: 's3://voice-cloning-zero-shot/c14e50f2-c5e3-47d1-8c45-fa4b67803d19/original/manifest.json',\n },\n {\n name: 'Ava',\n accent: 'Australian',\n gender: 'F',\n age: 'Middle',\n style: 'Narrative',\n id: 's3://voice-cloning-zero-shot/50381567-ff7b-46d2-bfdc-a9584a85e08d/original/manifest.json',\n },\n];\n\ninterface PlayAIConfig {\n name?: 'PlayDialog' | 'Play3.0-mini';\n apiKey?: string;\n userId?: string;\n}\n\nexport class PlayAIVoice extends MastraVoice {\n private baseUrl = 'https://api.play.ai/api/v1';\n private userId: string;\n\n constructor({ speechModel, speaker }: { speechModel?: PlayAIConfig; speaker?: string } = {}) {\n super({\n speechModel: {\n name: speechModel?.name ?? 'PlayDialog',\n apiKey: speechModel?.apiKey ?? process.env.PLAYAI_API_KEY,\n },\n speaker: speaker ?? PLAYAI_VOICES[0]?.id,\n });\n const userId = speechModel?.userId ?? process.env.PLAYAI_USER_ID;\n if (!userId) {\n throw new Error('userId is required');\n }\n\n this.userId = userId;\n }\n\n private async makeRequest(endpoint: string, payload?: any, method: 'GET' | 'POST' = 'POST') {\n const headers = new Headers({\n Authorization: `Bearer ${this.speechModel?.apiKey}`,\n 'Content-Type': 'application/json',\n 'X-USER-ID': this.userId,\n });\n\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method,\n headers,\n body: payload ? JSON.stringify(payload) : undefined,\n });\n\n if (!response.ok) {\n const error = (await response.json()) as { message: string };\n\n throw new Error(`PlayAI API Error: ${error.message || response.statusText}`);\n }\n\n return response;\n }\n\n private async streamToString(stream: NodeJS.ReadableStream): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n if (typeof chunk === 'string') {\n chunks.push(Buffer.from(chunk));\n } else {\n chunks.push(chunk);\n }\n }\n return Buffer.concat(chunks).toString('utf-8');\n }\n\n async speak(input: string | NodeJS.ReadableStream, options?: { speaker?: string }): Promise<NodeJS.ReadableStream> {\n const text = typeof input === 'string' ? input : await this.streamToString(input);\n\n const payload = {\n text,\n voice: options?.speaker || this.speaker,\n model: this.speechModel?.name,\n };\n\n const response = await this.makeRequest('/tts/stream', payload);\n if (!response.body) {\n throw new Error('No response body received');\n }\n\n // Create a PassThrough stream for the audio\n const stream = new PassThrough();\n\n // Process the stream\n const reader = response.body.getReader();\n void (async () => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n stream.end();\n break;\n }\n stream.write(value);\n }\n } catch (error) {\n stream.destroy(error as Error);\n }\n })();\n\n return stream;\n }\n\n /**\n * Checks if listening capabilities are enabled.\n *\n * @returns {Promise<{ enabled: boolean }>}\n */\n async getListener() {\n return { enabled: false };\n }\n\n async listen(\n _input: NodeJS.ReadableStream,\n _options?: Record<string, unknown>,\n ): Promise<string | NodeJS.ReadableStream> {\n throw new Error('PlayAI does not support speech recognition');\n }\n\n async getSpeakers() {\n return Promise.resolve(\n PLAYAI_VOICES.map(voice => ({\n voiceId: voice.id,\n name: voice.name,\n accent: voice.accent,\n gender: voice.gender,\n age: voice.age,\n style: voice.style,\n })),\n );\n }\n}\n"]}
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@mastra/voice-playai",
3
- "version": "0.0.0-share-agent-metadata-with-cloud-20250718110128",
3
+ "version": "0.0.0-sidebar-window-undefined-fix-20251029233656",
4
4
  "description": "Mastra PlayAI voice integration",
5
5
  "type": "module",
6
6
  "files": [
7
- "dist"
7
+ "dist",
8
+ "CHANGELOG.md"
8
9
  ],
9
10
  "main": "dist/index.js",
10
11
  "types": "dist/index.d.ts",
@@ -15,32 +16,41 @@
15
16
  "default": "./dist/index.js"
16
17
  },
17
18
  "require": {
18
- "types": "./dist/index.d.cts",
19
+ "types": "./dist/index.d.ts",
19
20
  "default": "./dist/index.cjs"
20
21
  }
21
22
  },
22
23
  "./package.json": "./package.json"
23
24
  },
24
25
  "license": "Apache-2.0",
25
- "dependencies": {
26
- "zod": "^3.25.67"
27
- },
26
+ "dependencies": {},
28
27
  "devDependencies": {
29
28
  "@microsoft/api-extractor": "^7.52.8",
30
29
  "@types/node": "^20.19.0",
31
- "eslint": "^9.30.1",
30
+ "eslint": "^9.37.0",
32
31
  "tsup": "^8.5.0",
33
32
  "typescript": "^5.8.3",
34
33
  "vitest": "^3.2.4",
35
- "@internal/lint": "0.0.0-share-agent-metadata-with-cloud-20250718110128",
36
- "@mastra/core": "0.0.0-share-agent-metadata-with-cloud-20250718110128"
34
+ "@internal/lint": "0.0.0-sidebar-window-undefined-fix-20251029233656",
35
+ "@mastra/core": "0.0.0-sidebar-window-undefined-fix-20251029233656",
36
+ "@internal/types-builder": "0.0.0-sidebar-window-undefined-fix-20251029233656"
37
37
  },
38
38
  "peerDependencies": {
39
- "@mastra/core": "0.0.0-share-agent-metadata-with-cloud-20250718110128"
39
+ "zod": "^3.25.0 || ^4.0.0",
40
+ "@mastra/core": "0.0.0-sidebar-window-undefined-fix-20251029233656"
41
+ },
42
+ "homepage": "https://mastra.ai",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/mastra-ai/mastra.git",
46
+ "directory": "voice/playai"
47
+ },
48
+ "bugs": {
49
+ "url": "https://github.com/mastra-ai/mastra/issues"
40
50
  },
41
51
  "scripts": {
42
- "build": "tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake=smallest --splitting",
43
- "build:watch": "pnpm build --watch",
52
+ "build": "tsup --silent --config tsup.config.ts",
53
+ "build:watch": "tsup --watch --silent --config tsup.config.ts",
44
54
  "test": "vitest run",
45
55
  "lint": "eslint ."
46
56
  }
@@ -1,51 +0,0 @@
1
- import { MastraVoice } from '@mastra/core/voice';
2
-
3
- export declare const PLAYAI_VOICES: PlayAIVoiceInfo[];
4
-
5
- declare interface PlayAIConfig {
6
- name?: 'PlayDialog' | 'Play3.0-mini';
7
- apiKey?: string;
8
- userId?: string;
9
- }
10
-
11
- export declare class PlayAIVoice extends MastraVoice {
12
- private baseUrl;
13
- private userId;
14
- constructor({ speechModel, speaker }?: {
15
- speechModel?: PlayAIConfig;
16
- speaker?: string;
17
- });
18
- private makeRequest;
19
- private streamToString;
20
- speak(input: string | NodeJS.ReadableStream, options?: {
21
- speaker?: string;
22
- }): Promise<NodeJS.ReadableStream>;
23
- /**
24
- * Checks if listening capabilities are enabled.
25
- *
26
- * @returns {Promise<{ enabled: boolean }>}
27
- */
28
- getListener(): Promise<{
29
- enabled: boolean;
30
- }>;
31
- listen(_input: NodeJS.ReadableStream, _options?: Record<string, unknown>): Promise<string | NodeJS.ReadableStream>;
32
- getSpeakers(): Promise<{
33
- voiceId: string;
34
- name: string;
35
- accent: string;
36
- gender: "M" | "F";
37
- age: "Young" | "Middle" | "Old";
38
- style: "Conversational" | "Narrative";
39
- }[]>;
40
- }
41
-
42
- declare interface PlayAIVoiceInfo {
43
- name: string;
44
- accent: string;
45
- gender: 'M' | 'F';
46
- age: 'Young' | 'Middle' | 'Old';
47
- style: 'Conversational' | 'Narrative';
48
- id: string;
49
- }
50
-
51
- export { }
@@ -1,51 +0,0 @@
1
- import { MastraVoice } from '@mastra/core/voice';
2
-
3
- export declare const PLAYAI_VOICES: PlayAIVoiceInfo[];
4
-
5
- declare interface PlayAIConfig {
6
- name?: 'PlayDialog' | 'Play3.0-mini';
7
- apiKey?: string;
8
- userId?: string;
9
- }
10
-
11
- export declare class PlayAIVoice extends MastraVoice {
12
- private baseUrl;
13
- private userId;
14
- constructor({ speechModel, speaker }?: {
15
- speechModel?: PlayAIConfig;
16
- speaker?: string;
17
- });
18
- private makeRequest;
19
- private streamToString;
20
- speak(input: string | NodeJS.ReadableStream, options?: {
21
- speaker?: string;
22
- }): Promise<NodeJS.ReadableStream>;
23
- /**
24
- * Checks if listening capabilities are enabled.
25
- *
26
- * @returns {Promise<{ enabled: boolean }>}
27
- */
28
- getListener(): Promise<{
29
- enabled: boolean;
30
- }>;
31
- listen(_input: NodeJS.ReadableStream, _options?: Record<string, unknown>): Promise<string | NodeJS.ReadableStream>;
32
- getSpeakers(): Promise<{
33
- voiceId: string;
34
- name: string;
35
- accent: string;
36
- gender: "M" | "F";
37
- age: "Young" | "Middle" | "Old";
38
- style: "Conversational" | "Narrative";
39
- }[]>;
40
- }
41
-
42
- declare interface PlayAIVoiceInfo {
43
- name: string;
44
- accent: string;
45
- gender: 'M' | 'F';
46
- age: 'Young' | 'Middle' | 'Old';
47
- style: 'Conversational' | 'Narrative';
48
- id: string;
49
- }
50
-
51
- export { }
package/dist/index.d.cts DELETED
@@ -1,2 +0,0 @@
1
- export { PLAYAI_VOICES } from './_tsup-dts-rollup.cjs';
2
- export { PlayAIVoice } from './_tsup-dts-rollup.cjs';