@contractspec/example.voice-providers 1.57.0 → 1.59.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 (59) hide show
  1. package/.turbo/turbo-build.log +43 -46
  2. package/.turbo/turbo-prebuild.log +1 -0
  3. package/CHANGELOG.md +25 -0
  4. package/dist/browser/connection.sample.js +55 -0
  5. package/dist/browser/docs/index.js +36 -0
  6. package/dist/browser/docs/voice-providers.docblock.js +36 -0
  7. package/dist/browser/example.js +33 -0
  8. package/dist/browser/handlers/create-provider.js +35 -0
  9. package/dist/browser/handlers/list-voices.js +41 -0
  10. package/dist/browser/handlers/synthesize.js +41 -0
  11. package/dist/browser/index.js +171 -0
  12. package/dist/browser/run.js +179 -0
  13. package/dist/connection.sample.d.ts +4 -8
  14. package/dist/connection.sample.d.ts.map +1 -1
  15. package/dist/connection.sample.js +54 -49
  16. package/dist/docs/index.d.ts +2 -1
  17. package/dist/docs/index.d.ts.map +1 -0
  18. package/dist/docs/index.js +37 -1
  19. package/dist/docs/voice-providers.docblock.d.ts +2 -1
  20. package/dist/docs/voice-providers.docblock.d.ts.map +1 -0
  21. package/dist/docs/voice-providers.docblock.js +35 -29
  22. package/dist/example.d.ts +2 -6
  23. package/dist/example.d.ts.map +1 -1
  24. package/dist/example.js +32 -44
  25. package/dist/handlers/create-provider.d.ts +21 -25
  26. package/dist/handlers/create-provider.d.ts.map +1 -1
  27. package/dist/handlers/create-provider.js +32 -28
  28. package/dist/handlers/list-voices.d.ts +3 -7
  29. package/dist/handlers/list-voices.d.ts.map +1 -1
  30. package/dist/handlers/list-voices.js +39 -7
  31. package/dist/handlers/synthesize.d.ts +5 -9
  32. package/dist/handlers/synthesize.d.ts.map +1 -1
  33. package/dist/handlers/synthesize.js +39 -7
  34. package/dist/index.d.ts +7 -6
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +172 -8
  37. package/dist/node/connection.sample.js +55 -0
  38. package/dist/node/docs/index.js +36 -0
  39. package/dist/node/docs/voice-providers.docblock.js +36 -0
  40. package/dist/node/example.js +33 -0
  41. package/dist/node/handlers/create-provider.js +35 -0
  42. package/dist/node/handlers/list-voices.js +41 -0
  43. package/dist/node/handlers/synthesize.js +41 -0
  44. package/dist/node/index.js +171 -0
  45. package/dist/node/run.js +179 -0
  46. package/dist/run.d.ts +1 -4
  47. package/dist/run.d.ts.map +1 -1
  48. package/dist/run.js +160 -98
  49. package/package.json +93 -32
  50. package/tsdown.config.js +1 -2
  51. package/.turbo/turbo-build$colon$bundle.log +0 -46
  52. package/dist/connection.sample.js.map +0 -1
  53. package/dist/docs/voice-providers.docblock.js.map +0 -1
  54. package/dist/example.js.map +0 -1
  55. package/dist/handlers/create-provider.js.map +0 -1
  56. package/dist/handlers/list-voices.js.map +0 -1
  57. package/dist/handlers/synthesize.js.map +0 -1
  58. package/dist/run.js.map +0 -1
  59. package/tsconfig.tsbuildinfo +0 -1
package/package.json CHANGED
@@ -1,57 +1,118 @@
1
1
  {
2
2
  "name": "@contractspec/example.voice-providers",
3
- "version": "1.57.0",
3
+ "version": "1.59.0",
4
4
  "description": "Voice provider example: Gradium and Fal text-to-speech integration patterns.",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
7
7
  "exports": {
8
- ".": "./dist/index.js",
9
- "./connection.sample": "./dist/connection.sample.js",
10
- "./docs": "./dist/docs/index.js",
11
- "./docs/voice-providers.docblock": "./dist/docs/voice-providers.docblock.js",
12
- "./example": "./dist/example.js",
13
- "./handlers/create-provider": "./dist/handlers/create-provider.js",
14
- "./handlers/list-voices": "./dist/handlers/list-voices.js",
15
- "./handlers/synthesize": "./dist/handlers/synthesize.js",
16
- "./run": "./dist/run.js",
17
- "./*": "./*"
8
+ ".": "./src/index.ts",
9
+ "./connection.sample": "./src/connection.sample.ts",
10
+ "./docs": "./src/docs/index.ts",
11
+ "./docs/index": "./src/docs/index.ts",
12
+ "./docs/voice-providers.docblock": "./src/docs/voice-providers.docblock.ts",
13
+ "./example": "./src/example.ts",
14
+ "./handlers/create-provider": "./src/handlers/create-provider.ts",
15
+ "./handlers/list-voices": "./src/handlers/list-voices.ts",
16
+ "./handlers/synthesize": "./src/handlers/synthesize.ts",
17
+ "./run": "./src/run.ts"
18
18
  },
19
19
  "scripts": {
20
20
  "publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
21
21
  "publish:pkg:canary": "bun publish:pkg --tag canary",
22
- "build": "bun build:types && bun build:bundle",
23
- "build:bundle": "tsdown",
24
- "build:types": "tsc --noEmit",
25
- "dev": "bun build:bundle --watch",
22
+ "build": "bun run prebuild && bun run build:bundle && bun run build:types",
23
+ "build:bundle": "contractspec-bun-build transpile",
24
+ "build:types": "contractspec-bun-build types",
25
+ "dev": "contractspec-bun-build dev",
26
26
  "clean": "rimraf dist .turbo",
27
27
  "lint": "bun lint:fix",
28
28
  "lint:fix": "eslint src --fix",
29
29
  "lint:check": "eslint src",
30
- "test": "bun test"
30
+ "test": "bun test",
31
+ "prebuild": "contractspec-bun-build prebuild",
32
+ "typecheck": "tsc --noEmit"
31
33
  },
32
34
  "dependencies": {
33
- "@contractspec/integration.providers-impls": "1.57.0",
34
- "@contractspec/lib.contracts": "1.57.0"
35
+ "@contractspec/integration.providers-impls": "1.59.0",
36
+ "@contractspec/lib.contracts": "1.59.0"
35
37
  },
36
38
  "devDependencies": {
37
- "@contractspec/tool.tsdown": "1.57.0",
38
- "@contractspec/tool.typescript": "1.57.0",
39
- "tsdown": "^0.20.3",
40
- "typescript": "^5.9.3"
39
+ "@contractspec/tool.typescript": "1.59.0",
40
+ "typescript": "^5.9.3",
41
+ "@contractspec/tool.bun": "1.58.0"
41
42
  },
42
43
  "publishConfig": {
43
44
  "access": "public",
44
45
  "exports": {
45
- ".": "./dist/index.js",
46
- "./docs": "./dist/docs/index.js",
47
- "./docs/voice-providers.docblock": "./dist/docs/voice-providers.docblock.js",
48
- "./example": "./dist/example.js",
49
- "./connection.sample": "./dist/connection.sample.js",
50
- "./handlers/create-provider": "./dist/handlers/create-provider.js",
51
- "./handlers/list-voices": "./dist/handlers/list-voices.js",
52
- "./handlers/synthesize": "./dist/handlers/synthesize.js",
53
- "./run": "./dist/run.js",
54
- "./*": "./*"
46
+ ".": {
47
+ "types": "./dist/index.d.ts",
48
+ "bun": "./dist/index.js",
49
+ "node": "./dist/node/index.mjs",
50
+ "browser": "./dist/browser/index.js",
51
+ "default": "./dist/index.js"
52
+ },
53
+ "./connection.sample": {
54
+ "types": "./dist/connection.sample.d.ts",
55
+ "bun": "./dist/connection.sample.js",
56
+ "node": "./dist/node/connection.sample.mjs",
57
+ "browser": "./dist/browser/connection.sample.js",
58
+ "default": "./dist/connection.sample.js"
59
+ },
60
+ "./docs": {
61
+ "types": "./dist/docs/index.d.ts",
62
+ "bun": "./dist/docs/index.js",
63
+ "node": "./dist/node/docs/index.mjs",
64
+ "browser": "./dist/browser/docs/index.js",
65
+ "default": "./dist/docs/index.js"
66
+ },
67
+ "./docs/index": {
68
+ "types": "./dist/docs/index.d.ts",
69
+ "bun": "./dist/docs/index.js",
70
+ "node": "./dist/node/docs/index.mjs",
71
+ "browser": "./dist/browser/docs/index.js",
72
+ "default": "./dist/docs/index.js"
73
+ },
74
+ "./docs/voice-providers.docblock": {
75
+ "types": "./dist/docs/voice-providers.docblock.d.ts",
76
+ "bun": "./dist/docs/voice-providers.docblock.js",
77
+ "node": "./dist/node/docs/voice-providers.docblock.mjs",
78
+ "browser": "./dist/browser/docs/voice-providers.docblock.js",
79
+ "default": "./dist/docs/voice-providers.docblock.js"
80
+ },
81
+ "./example": {
82
+ "types": "./dist/example.d.ts",
83
+ "bun": "./dist/example.js",
84
+ "node": "./dist/node/example.mjs",
85
+ "browser": "./dist/browser/example.js",
86
+ "default": "./dist/example.js"
87
+ },
88
+ "./handlers/create-provider": {
89
+ "types": "./dist/handlers/create-provider.d.ts",
90
+ "bun": "./dist/handlers/create-provider.js",
91
+ "node": "./dist/node/handlers/create-provider.mjs",
92
+ "browser": "./dist/browser/handlers/create-provider.js",
93
+ "default": "./dist/handlers/create-provider.js"
94
+ },
95
+ "./handlers/list-voices": {
96
+ "types": "./dist/handlers/list-voices.d.ts",
97
+ "bun": "./dist/handlers/list-voices.js",
98
+ "node": "./dist/node/handlers/list-voices.mjs",
99
+ "browser": "./dist/browser/handlers/list-voices.js",
100
+ "default": "./dist/handlers/list-voices.js"
101
+ },
102
+ "./handlers/synthesize": {
103
+ "types": "./dist/handlers/synthesize.d.ts",
104
+ "bun": "./dist/handlers/synthesize.js",
105
+ "node": "./dist/node/handlers/synthesize.mjs",
106
+ "browser": "./dist/browser/handlers/synthesize.js",
107
+ "default": "./dist/handlers/synthesize.js"
108
+ },
109
+ "./run": {
110
+ "types": "./dist/run.d.ts",
111
+ "bun": "./dist/run.js",
112
+ "node": "./dist/node/run.mjs",
113
+ "browser": "./dist/browser/run.js",
114
+ "default": "./dist/run.js"
115
+ }
55
116
  },
56
117
  "registry": "https://registry.npmjs.org/"
57
118
  },
package/tsdown.config.js CHANGED
@@ -1,5 +1,4 @@
1
- import { defineConfig } from 'tsdown';
2
- import { moduleLibrary } from '@contractspec/tool.tsdown';
1
+ import { defineConfig, moduleLibrary } from '@contractspec/tool.bun';
3
2
 
4
3
  export default defineConfig(() => ({
5
4
  ...moduleLibrary,
@@ -1,46 +0,0 @@
1
- $ tsdown
2
- ℹ tsdown v0.20.3 powered by rolldown v1.0.0-rc.3
3
- ℹ config file: /home/runner/work/contractspec/contractspec/packages/examples/voice-providers/tsdown.config.js
4
- ℹ entry: src/connection.sample.ts, src/example.ts, src/index.ts, src/run.ts, src/docs/index.ts, src/docs/voice-providers.docblock.ts, src/handlers/create-provider.ts, src/handlers/list-voices.ts, src/handlers/synthesize.ts
5
- ℹ target: esnext
6
- ℹ tsconfig: tsconfig.json
7
- ℹ Build start
8
- ℹ Cleaning 33 files
9
- ℹ dist/run.js 3.90 kB │ gzip: 1.33 kB
10
- ℹ dist/docs/voice-providers.docblock.js 1.85 kB │ gzip: 0.87 kB
11
- ℹ dist/connection.sample.js 1.48 kB │ gzip: 0.58 kB
12
- ℹ dist/handlers/create-provider.js 1.21 kB │ gzip: 0.49 kB
13
- ℹ dist/example.js 0.99 kB │ gzip: 0.51 kB
14
- ℹ dist/index.js 0.49 kB │ gzip: 0.20 kB
15
- ℹ dist/handlers/synthesize.js 0.28 kB │ gzip: 0.19 kB
16
- ℹ dist/handlers/list-voices.js 0.26 kB │ gzip: 0.18 kB
17
- ℹ dist/docs/index.js 0.04 kB │ gzip: 0.06 kB
18
- ℹ dist/run.js.map 7.18 kB │ gzip: 2.33 kB
19
- ℹ dist/handlers/create-provider.js.map 2.73 kB │ gzip: 0.96 kB
20
- ℹ dist/docs/voice-providers.docblock.js.map 2.57 kB │ gzip: 1.08 kB
21
- ℹ dist/connection.sample.js.map 2.28 kB │ gzip: 0.83 kB
22
- ℹ dist/example.js.map 1.46 kB │ gzip: 0.70 kB
23
- ℹ dist/handlers/synthesize.js.map 0.76 kB │ gzip: 0.40 kB
24
- ℹ dist/handlers/list-voices.js.map 0.56 kB │ gzip: 0.34 kB
25
- ℹ dist/handlers/create-provider.d.ts.map 0.43 kB │ gzip: 0.24 kB
26
- ℹ dist/handlers/synthesize.d.ts.map 0.22 kB │ gzip: 0.18 kB
27
- ℹ dist/connection.sample.d.ts.map 0.20 kB │ gzip: 0.14 kB
28
- ℹ dist/handlers/list-voices.d.ts.map 0.17 kB │ gzip: 0.15 kB
29
- ℹ dist/example.d.ts.map 0.13 kB │ gzip: 0.13 kB
30
- ℹ dist/run.d.ts.map 0.12 kB │ gzip: 0.13 kB
31
- ℹ dist/handlers/create-provider.d.ts 1.05 kB │ gzip: 0.45 kB
32
- ℹ dist/index.d.ts 0.69 kB │ gzip: 0.24 kB
33
- ℹ dist/handlers/synthesize.d.ts 0.52 kB │ gzip: 0.27 kB
34
- ℹ dist/connection.sample.d.ts 0.45 kB │ gzip: 0.21 kB
35
- ℹ dist/handlers/list-voices.d.ts 0.35 kB │ gzip: 0.23 kB
36
- ℹ dist/example.d.ts 0.25 kB │ gzip: 0.17 kB
37
- ℹ dist/run.d.ts 0.20 kB │ gzip: 0.16 kB
38
- ℹ dist/docs/index.d.ts 0.01 kB │ gzip: 0.03 kB
39
- ℹ dist/docs/voice-providers.docblock.d.ts 0.01 kB │ gzip: 0.03 kB
40
- ℹ 31 files, total: 32.86 kB
41
- [PLUGIN_TIMINGS] Warning: Your build spent significant time in plugins. Here is a breakdown:
42
- - rolldown-plugin-dts:generate (49%)
43
- - tsdown:external (48%)
44
- See https://rolldown.rs/options/checks#plugintimings for more details.
45
-
46
- ✔ Build complete in 21405ms
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection.sample.js","names":[],"sources":["../src/connection.sample.ts"],"sourcesContent":["import type { IntegrationConnection } from '@contractspec/lib.contracts/integrations/connection';\n\nexport const gradiumVoiceConnection: IntegrationConnection = {\n meta: {\n id: 'conn-gradium-voice-demo',\n tenantId: 'acme-inc',\n integrationKey: 'ai-voice.gradium',\n integrationVersion: '1.0.0',\n label: 'Gradium Voice',\n environment: 'production',\n createdAt: '2026-01-01T00:00:00.000Z',\n updatedAt: '2026-01-01T00:00:00.000Z',\n },\n ownershipMode: 'byok',\n config: {\n defaultVoiceId: 'YTpq7expH9539ERJ',\n region: 'eu',\n outputFormat: 'wav',\n },\n secretProvider: 'vault',\n secretRef: 'vault://integrations/acme-inc/conn-gradium-voice-demo',\n status: 'connected',\n};\n\nexport const falVoiceConnection: IntegrationConnection = {\n meta: {\n id: 'conn-fal-voice-demo',\n tenantId: 'acme-inc',\n integrationKey: 'ai-voice.fal',\n integrationVersion: '1.0.0',\n label: 'Fal Voice',\n environment: 'production',\n createdAt: '2026-01-01T00:00:00.000Z',\n updatedAt: '2026-01-01T00:00:00.000Z',\n },\n ownershipMode: 'byok',\n config: {\n modelId: 'fal-ai/chatterbox/text-to-speech',\n defaultVoiceUrl:\n 'https://storage.googleapis.com/chatterbox-demo-samples/prompts/male_rickmorty.mp3',\n defaultExaggeration: 0.25,\n defaultTemperature: 0.7,\n defaultCfg: 0.5,\n pollIntervalMs: 1000,\n },\n secretProvider: 'vault',\n secretRef: 'vault://integrations/acme-inc/conn-fal-voice-demo',\n status: 'connected',\n};\n\nexport const voiceSampleConnections: IntegrationConnection[] = [\n gradiumVoiceConnection,\n falVoiceConnection,\n];\n"],"mappings":";AAEA,MAAa,yBAAgD;CAC3D,MAAM;EACJ,IAAI;EACJ,UAAU;EACV,gBAAgB;EAChB,oBAAoB;EACpB,OAAO;EACP,aAAa;EACb,WAAW;EACX,WAAW;EACZ;CACD,eAAe;CACf,QAAQ;EACN,gBAAgB;EAChB,QAAQ;EACR,cAAc;EACf;CACD,gBAAgB;CAChB,WAAW;CACX,QAAQ;CACT;AAED,MAAa,qBAA4C;CACvD,MAAM;EACJ,IAAI;EACJ,UAAU;EACV,gBAAgB;EAChB,oBAAoB;EACpB,OAAO;EACP,aAAa;EACb,WAAW;EACX,WAAW;EACZ;CACD,eAAe;CACf,QAAQ;EACN,SAAS;EACT,iBACE;EACF,qBAAqB;EACrB,oBAAoB;EACpB,YAAY;EACZ,gBAAgB;EACjB;CACD,gBAAgB;CAChB,WAAW;CACX,QAAQ;CACT;AAED,MAAa,yBAAkD,CAC7D,wBACA,mBACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"voice-providers.docblock.js","names":[],"sources":["../../src/docs/voice-providers.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@contractspec/lib.contracts/docs';\nimport { registerDocBlocks } from '@contractspec/lib.contracts/docs';\n\nconst blocks: DocBlock[] = [\n {\n id: 'docs.examples.voice-providers',\n title: 'Voice Providers (example)',\n summary:\n 'Multi-provider voice integration example covering Gradium and Fal text-to-speech flows.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/examples/voice-providers',\n tags: ['voice', 'tts', 'gradium', 'fal', 'example'],\n body:\n '## What this example shows\\n' +\n '- Provider selection for `ai-voice.gradium` and `ai-voice.fal`.\\n' +\n '- Listing voice catalogs and synthesizing text into audio bytes.\\n' +\n '- Connection metadata patterns for BYOK secret references.\\n\\n' +\n '## Secrets and config\\n' +\n '- `apiKey` for each provider.\\n' +\n '- Gradium config: `defaultVoiceId`, `region`, `outputFormat`.\\n' +\n '- Fal config: `modelId`, `defaultVoiceUrl`, synthesis tuning fields.\\n\\n' +\n '## Guardrails\\n' +\n '- Keep API keys in secret providers only.\\n' +\n '- Prefer declarative provider config over hardcoded runtime options.\\n' +\n '- Keep synthesis side effects explicit for deterministic workflows.',\n },\n {\n id: 'docs.examples.voice-providers.usage',\n title: 'Voice Providers - Usage',\n summary:\n 'How to wire provider factory and synthesis helpers in runtime code.',\n kind: 'usage',\n visibility: 'public',\n route: '/docs/examples/voice-providers/usage',\n tags: ['voice', 'usage'],\n body:\n '## Usage\\n' +\n '- Call `createVoiceProvider` with integration key, secrets, and config.\\n' +\n '- Use `listVoices` to expose voice choices in admin/config screens.\\n' +\n '- Use `synthesizeVoice` for message generation or workflow steps.\\n\\n' +\n '## Notes\\n' +\n '- Fal uses an audio URL output; this example downloads bytes for a canonical result shape.\\n' +\n '- Gradium maps provider output formats into ContractSpec voice result conventions.',\n },\n];\n\nregisterDocBlocks(blocks);\n"],"mappings":";;;AA+CA,kBA5C2B,CACzB;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM;EAAC;EAAS;EAAO;EAAW;EAAO;EAAU;CACnD,MACE;CAYH,EACD;CACE,IAAI;CACJ,OAAO;CACP,SACE;CACF,MAAM;CACN,YAAY;CACZ,OAAO;CACP,MAAM,CAAC,SAAS,QAAQ;CACxB,MACE;CAOH,CACF,CAEwB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"example.js","names":[],"sources":["../src/example.ts"],"sourcesContent":["import { defineExample } from '@contractspec/lib.contracts';\n\nconst example = defineExample({\n meta: {\n key: 'voice-providers',\n version: '1.0.0',\n title: 'Voice Providers (Gradium and Fal)',\n description:\n 'Multi-provider voice integration example for Gradium and Fal text-to-speech adapters.',\n kind: 'integration',\n visibility: 'public',\n stability: 'experimental',\n owners: ['@platform.integrations'],\n tags: ['voice', 'tts', 'gradium', 'fal', 'integrations'],\n },\n docs: {\n rootDocId: 'docs.examples.voice-providers',\n usageDocId: 'docs.examples.voice-providers.usage',\n },\n entrypoints: {\n packageName: '@contractspec/example.voice-providers',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: { enabled: true, modes: ['markdown', 'specs'] },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n});\n\nexport default example;\n"],"mappings":";;;AAEA,MAAM,UAAU,cAAc;CAC5B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,MAAM;EACN,YAAY;EACZ,WAAW;EACX,QAAQ,CAAC,yBAAyB;EAClC,MAAM;GAAC;GAAS;GAAO;GAAW;GAAO;GAAe;EACzD;CACD,MAAM;EACJ,WAAW;EACX,YAAY;EACb;CACD,aAAa;EACX,aAAa;EACb,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GAAE,SAAS;GAAM,OAAO,CAAC,YAAY,QAAQ;GAAE;EACxD,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-provider.js","names":[],"sources":["../../src/handlers/create-provider.ts"],"sourcesContent":["import { FalVoiceProvider } from '@contractspec/integration.providers-impls/impls/fal-voice';\nimport { GradiumVoiceProvider } from '@contractspec/integration.providers-impls/impls/gradium-voice';\nimport type { VoiceProvider } from '@contractspec/lib.contracts/integrations/providers/voice';\n\nexport type VoiceIntegrationKey = 'ai-voice.gradium' | 'ai-voice.fal';\n\nexport interface VoiceProviderSecrets {\n apiKey: string;\n}\n\nexport interface VoiceProviderConfig {\n defaultVoiceId?: string;\n region?: 'eu' | 'us';\n baseUrl?: string;\n timeoutMs?: number;\n outputFormat?:\n | 'wav'\n | 'pcm'\n | 'opus'\n | 'ulaw_8000'\n | 'alaw_8000'\n | 'pcm_16000'\n | 'pcm_24000';\n modelId?: string;\n defaultVoiceUrl?: string;\n defaultExaggeration?: number;\n defaultTemperature?: number;\n defaultCfg?: number;\n pollIntervalMs?: number;\n}\n\nexport interface VoiceProviderFactoryInput {\n integrationKey: VoiceIntegrationKey;\n secrets: VoiceProviderSecrets;\n config?: VoiceProviderConfig;\n}\n\nexport function createVoiceProvider(\n input: VoiceProviderFactoryInput\n): VoiceProvider {\n const { integrationKey, secrets, config } = input;\n\n if (!secrets.apiKey) {\n throw new Error('Voice provider apiKey is required.');\n }\n\n switch (integrationKey) {\n case 'ai-voice.gradium':\n return new GradiumVoiceProvider({\n apiKey: secrets.apiKey,\n defaultVoiceId: config?.defaultVoiceId,\n region: config?.region,\n baseUrl: config?.baseUrl,\n timeoutMs: config?.timeoutMs,\n outputFormat: config?.outputFormat,\n });\n case 'ai-voice.fal':\n return new FalVoiceProvider({\n apiKey: secrets.apiKey,\n modelId: config?.modelId,\n defaultVoiceUrl: config?.defaultVoiceUrl,\n defaultExaggeration: config?.defaultExaggeration,\n defaultTemperature: config?.defaultTemperature,\n defaultCfg: config?.defaultCfg,\n pollIntervalMs: config?.pollIntervalMs,\n });\n default:\n throw new Error(`Unsupported voice provider: ${integrationKey}`);\n }\n}\n"],"mappings":";;;;AAqCA,SAAgB,oBACd,OACe;CACf,MAAM,EAAE,gBAAgB,SAAS,WAAW;AAE5C,KAAI,CAAC,QAAQ,OACX,OAAM,IAAI,MAAM,qCAAqC;AAGvD,SAAQ,gBAAR;EACE,KAAK,mBACH,QAAO,IAAI,qBAAqB;GAC9B,QAAQ,QAAQ;GAChB,gBAAgB,QAAQ;GACxB,QAAQ,QAAQ;GAChB,SAAS,QAAQ;GACjB,WAAW,QAAQ;GACnB,cAAc,QAAQ;GACvB,CAAC;EACJ,KAAK,eACH,QAAO,IAAI,iBAAiB;GAC1B,QAAQ,QAAQ;GAChB,SAAS,QAAQ;GACjB,iBAAiB,QAAQ;GACzB,qBAAqB,QAAQ;GAC7B,oBAAoB,QAAQ;GAC5B,YAAY,QAAQ;GACpB,gBAAgB,QAAQ;GACzB,CAAC;EACJ,QACE,OAAM,IAAI,MAAM,+BAA+B,iBAAiB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-voices.js","names":[],"sources":["../../src/handlers/list-voices.ts"],"sourcesContent":["import type { Voice } from '@contractspec/lib.contracts/integrations/providers/voice';\n\nimport {\n createVoiceProvider,\n type VoiceProviderFactoryInput,\n} from './create-provider';\n\nexport async function listVoices(\n input: VoiceProviderFactoryInput\n): Promise<Voice[]> {\n const provider = createVoiceProvider(input);\n return provider.listVoices();\n}\n"],"mappings":";;;AAOA,eAAsB,WACpB,OACkB;AAElB,QADiB,oBAAoB,MAAM,CAC3B,YAAY"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"synthesize.js","names":[],"sources":["../../src/handlers/synthesize.ts"],"sourcesContent":["import type {\n VoiceSynthesisInput,\n VoiceSynthesisResult,\n} from '@contractspec/lib.contracts/integrations/providers/voice';\n\nimport {\n createVoiceProvider,\n type VoiceProviderFactoryInput,\n} from './create-provider';\n\nexport interface SynthesizeVoiceInput extends VoiceProviderFactoryInput {\n synthesis: VoiceSynthesisInput;\n}\n\nexport async function synthesizeVoice(\n input: SynthesizeVoiceInput\n): Promise<VoiceSynthesisResult> {\n const provider = createVoiceProvider(input);\n return provider.synthesize(input.synthesis);\n}\n"],"mappings":";;;AAcA,eAAsB,gBACpB,OAC+B;AAE/B,QADiB,oBAAoB,MAAM,CAC3B,WAAW,MAAM,UAAU"}
package/dist/run.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.js","names":[],"sources":["../src/run.ts"],"sourcesContent":["import { listVoices } from './handlers/list-voices';\nimport { synthesizeVoice } from './handlers/synthesize';\nimport type {\n VoiceIntegrationKey,\n VoiceProviderConfig,\n VoiceProviderFactoryInput,\n} from './handlers/create-provider';\n\ntype VoiceMode = 'list' | 'synthesize' | 'both';\n\nexport async function runVoiceProvidersExampleFromEnv() {\n const integrationKey = resolveIntegrationKey();\n const mode = resolveMode();\n const dryRun = process.env.CONTRACTSPEC_VOICE_DRY_RUN === 'true';\n const config = resolveConfig(integrationKey);\n const text =\n process.env.CONTRACTSPEC_VOICE_TEXT ??\n 'Hello from ContractSpec voice providers example.';\n const voiceId = process.env.CONTRACTSPEC_VOICE_ID;\n\n if (dryRun) {\n return {\n integrationKey,\n mode,\n dryRun,\n text,\n voiceId,\n config,\n };\n }\n\n const input: VoiceProviderFactoryInput = {\n integrationKey,\n secrets: {\n apiKey: resolveApiKey(integrationKey),\n },\n config,\n };\n\n const output: Record<string, unknown> = {\n integrationKey,\n mode,\n dryRun,\n };\n\n if (mode === 'list' || mode === 'both') {\n const voices = await listVoices(input);\n output.voices = voices;\n }\n\n if (mode === 'synthesize' || mode === 'both') {\n const result = await synthesizeVoice({\n ...input,\n synthesis: {\n text,\n voiceId,\n },\n });\n output.synthesis = {\n format: result.format,\n sampleRateHz: result.sampleRateHz,\n bytes: result.audio.length,\n url: result.url,\n };\n }\n\n return output;\n}\n\nfunction resolveMode(): VoiceMode {\n const raw = (process.env.CONTRACTSPEC_VOICE_MODE ?? 'both').toLowerCase();\n if (raw === 'list' || raw === 'synthesize' || raw === 'both') {\n return raw;\n }\n throw new Error(\n `Unsupported CONTRACTSPEC_VOICE_MODE: ${raw}. Use list, synthesize, or both.`\n );\n}\n\nfunction resolveIntegrationKey(): VoiceIntegrationKey {\n const raw = (\n process.env.CONTRACTSPEC_VOICE_PROVIDER ?? 'gradium'\n ).toLowerCase();\n if (raw === 'gradium') return 'ai-voice.gradium';\n if (raw === 'fal') return 'ai-voice.fal';\n throw new Error(\n `Unsupported CONTRACTSPEC_VOICE_PROVIDER: ${raw}. Use gradium or fal.`\n );\n}\n\nfunction resolveApiKey(integrationKey: VoiceIntegrationKey): string {\n const shared = process.env.CONTRACTSPEC_VOICE_API_KEY;\n if (shared) return shared;\n\n const specific =\n integrationKey === 'ai-voice.gradium'\n ? process.env.GRADIUM_API_KEY\n : process.env.FAL_KEY;\n\n if (!specific) {\n const envName =\n integrationKey === 'ai-voice.gradium' ? 'GRADIUM_API_KEY' : 'FAL_KEY';\n throw new Error(\n `Missing API key. Set CONTRACTSPEC_VOICE_API_KEY or ${envName}.`\n );\n }\n\n return specific;\n}\n\nfunction resolveConfig(\n integrationKey: VoiceIntegrationKey\n): VoiceProviderConfig {\n if (integrationKey === 'ai-voice.gradium') {\n const config: VoiceProviderConfig = {\n defaultVoiceId: process.env.GRADIUM_DEFAULT_VOICE_ID,\n region:\n process.env.GRADIUM_REGION === 'eu' ||\n process.env.GRADIUM_REGION === 'us'\n ? process.env.GRADIUM_REGION\n : undefined,\n baseUrl: process.env.GRADIUM_BASE_URL,\n timeoutMs: parseOptionalInt(process.env.GRADIUM_TIMEOUT_MS),\n outputFormat: parseGradiumOutputFormat(process.env.GRADIUM_OUTPUT_FORMAT),\n };\n return config;\n }\n\n return {\n modelId: process.env.FAL_MODEL_ID,\n defaultVoiceUrl: process.env.FAL_DEFAULT_VOICE_URL,\n defaultExaggeration: parseOptionalNumber(\n process.env.FAL_DEFAULT_EXAGGERATION\n ),\n defaultTemperature: parseOptionalNumber(\n process.env.FAL_DEFAULT_TEMPERATURE\n ),\n defaultCfg: parseOptionalNumber(process.env.FAL_DEFAULT_CFG),\n pollIntervalMs: parseOptionalInt(process.env.FAL_POLL_INTERVAL_MS),\n };\n}\n\nfunction parseOptionalInt(value: string | undefined): number | undefined {\n if (!value) return undefined;\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction parseOptionalNumber(value: string | undefined): number | undefined {\n if (!value) return undefined;\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction parseGradiumOutputFormat(\n value: string | undefined\n): VoiceProviderConfig['outputFormat'] {\n if (!value) return undefined;\n switch (value) {\n case 'wav':\n case 'pcm':\n case 'opus':\n case 'ulaw_8000':\n case 'alaw_8000':\n case 'pcm_16000':\n case 'pcm_24000':\n return value;\n default:\n return undefined;\n }\n}\n\nrunVoiceProvidersExampleFromEnv()\n .then((result) => {\n console.log(JSON.stringify(result, null, 2));\n })\n .catch((error) => {\n console.error(error);\n process.exitCode = 1;\n });\n"],"mappings":"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"}