@dotdo/do 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +400 -0
- package/dist/ai/embeddings.d.ts +129 -0
- package/dist/ai/embeddings.d.ts.map +1 -0
- package/dist/ai/embeddings.js +217 -0
- package/dist/ai/embeddings.js.map +1 -0
- package/dist/ai/gateway.d.ts +139 -0
- package/dist/ai/gateway.d.ts.map +1 -0
- package/dist/ai/gateway.js +179 -0
- package/dist/ai/gateway.js.map +1 -0
- package/dist/ai/image.d.ts +140 -0
- package/dist/ai/image.d.ts.map +1 -0
- package/dist/ai/image.js +199 -0
- package/dist/ai/image.js.map +1 -0
- package/dist/ai/index.d.ts +98 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +223 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/models.d.ts +81 -0
- package/dist/ai/models.d.ts.map +1 -0
- package/dist/ai/models.js +537 -0
- package/dist/ai/models.js.map +1 -0
- package/dist/ai/text.d.ts +176 -0
- package/dist/ai/text.d.ts.map +1 -0
- package/dist/ai/text.js +253 -0
- package/dist/ai/text.js.map +1 -0
- package/dist/ai/voice/agents.d.ts +224 -0
- package/dist/ai/voice/agents.d.ts.map +1 -0
- package/dist/ai/voice/agents.js +375 -0
- package/dist/ai/voice/agents.js.map +1 -0
- package/dist/ai/voice/campaigns.d.ts +307 -0
- package/dist/ai/voice/campaigns.d.ts.map +1 -0
- package/dist/ai/voice/campaigns.js +739 -0
- package/dist/ai/voice/campaigns.js.map +1 -0
- package/dist/ai/voice/index.d.ts +21 -0
- package/dist/ai/voice/index.d.ts.map +1 -0
- package/dist/ai/voice/index.js +42 -0
- package/dist/ai/voice/index.js.map +1 -0
- package/dist/ai/voice/providers.d.ts +283 -0
- package/dist/ai/voice/providers.d.ts.map +1 -0
- package/dist/ai/voice/providers.js +286 -0
- package/dist/ai/voice/providers.js.map +1 -0
- package/dist/ai/voice/sessions.d.ts +294 -0
- package/dist/ai/voice/sessions.d.ts.map +1 -0
- package/dist/ai/voice/sessions.js +531 -0
- package/dist/ai/voice/sessions.js.map +1 -0
- package/dist/ai/voice/tools.d.ts +242 -0
- package/dist/ai/voice/tools.d.ts.map +1 -0
- package/dist/ai/voice/tools.js +370 -0
- package/dist/ai/voice/tools.js.map +1 -0
- package/dist/ai/voice/tts.d.ts +173 -0
- package/dist/ai/voice/tts.d.ts.map +1 -0
- package/dist/ai/voice/tts.js +252 -0
- package/dist/ai/voice/tts.js.map +1 -0
- package/dist/ai/voice/webrtc.d.ts +228 -0
- package/dist/ai/voice/webrtc.d.ts.map +1 -0
- package/dist/ai/voice/webrtc.js +372 -0
- package/dist/ai/voice/webrtc.js.map +1 -0
- package/dist/api/index.d.ts +103 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +191 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/mcp/handlers.d.ts +25 -0
- package/dist/api/mcp/handlers.d.ts.map +1 -0
- package/dist/api/mcp/handlers.js +422 -0
- package/dist/api/mcp/handlers.js.map +1 -0
- package/dist/api/mcp/index.d.ts +113 -0
- package/dist/api/mcp/index.d.ts.map +1 -0
- package/dist/api/mcp/index.js +141 -0
- package/dist/api/mcp/index.js.map +1 -0
- package/dist/api/middleware/auth.d.ts +65 -0
- package/dist/api/middleware/auth.d.ts.map +1 -0
- package/dist/api/middleware/auth.js +271 -0
- package/dist/api/middleware/auth.js.map +1 -0
- package/dist/api/middleware/cors.d.ts +62 -0
- package/dist/api/middleware/cors.d.ts.map +1 -0
- package/dist/api/middleware/cors.js +225 -0
- package/dist/api/middleware/cors.js.map +1 -0
- package/dist/api/middleware/index.d.ts +60 -0
- package/dist/api/middleware/index.d.ts.map +1 -0
- package/dist/api/middleware/index.js +175 -0
- package/dist/api/middleware/index.js.map +1 -0
- package/dist/api/middleware/rateLimit.d.ts +84 -0
- package/dist/api/middleware/rateLimit.d.ts.map +1 -0
- package/dist/api/middleware/rateLimit.js +321 -0
- package/dist/api/middleware/rateLimit.js.map +1 -0
- package/dist/api/routes/ai.d.ts +17 -0
- package/dist/api/routes/ai.d.ts.map +1 -0
- package/dist/api/routes/ai.js +430 -0
- package/dist/api/routes/ai.js.map +1 -0
- package/dist/api/routes/do.d.ts +17 -0
- package/dist/api/routes/do.d.ts.map +1 -0
- package/dist/api/routes/do.js +458 -0
- package/dist/api/routes/do.js.map +1 -0
- package/dist/api/routes/functions.d.ts +111 -0
- package/dist/api/routes/functions.d.ts.map +1 -0
- package/dist/api/routes/functions.js +548 -0
- package/dist/api/routes/functions.js.map +1 -0
- package/dist/api/routes/health.d.ts +16 -0
- package/dist/api/routes/health.d.ts.map +1 -0
- package/dist/api/routes/health.js +163 -0
- package/dist/api/routes/health.js.map +1 -0
- package/dist/api/routes/index.d.ts +41 -0
- package/dist/api/routes/index.d.ts.map +1 -0
- package/dist/api/routes/index.js +275 -0
- package/dist/api/routes/index.js.map +1 -0
- package/dist/api/routes/nouns.d.ts +26 -0
- package/dist/api/routes/nouns.d.ts.map +1 -0
- package/dist/api/routes/nouns.js +456 -0
- package/dist/api/routes/nouns.js.map +1 -0
- package/dist/api/routes/orgs.d.ts +17 -0
- package/dist/api/routes/orgs.d.ts.map +1 -0
- package/dist/api/routes/orgs.js +560 -0
- package/dist/api/routes/orgs.js.map +1 -0
- package/dist/api/routes/relationships.d.ts +30 -0
- package/dist/api/routes/relationships.d.ts.map +1 -0
- package/dist/api/routes/relationships.js +360 -0
- package/dist/api/routes/relationships.js.map +1 -0
- package/dist/api/routes/roles.d.ts +17 -0
- package/dist/api/routes/roles.d.ts.map +1 -0
- package/dist/api/routes/roles.js +721 -0
- package/dist/api/routes/roles.js.map +1 -0
- package/dist/api/routes/things.d.ts +27 -0
- package/dist/api/routes/things.d.ts.map +1 -0
- package/dist/api/routes/things.js +568 -0
- package/dist/api/routes/things.js.map +1 -0
- package/dist/api/routes/users.d.ts +17 -0
- package/dist/api/routes/users.d.ts.map +1 -0
- package/dist/api/routes/users.js +401 -0
- package/dist/api/routes/users.js.map +1 -0
- package/dist/api/routes/verbs.d.ts +31 -0
- package/dist/api/routes/verbs.d.ts.map +1 -0
- package/dist/api/routes/verbs.js +505 -0
- package/dist/api/routes/verbs.js.map +1 -0
- package/dist/api/routes/workflows.d.ts +44 -0
- package/dist/api/routes/workflows.d.ts.map +1 -0
- package/dist/api/routes/workflows.js +521 -0
- package/dist/api/routes/workflows.js.map +1 -0
- package/dist/api/types.d.ts +370 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +11 -0
- package/dist/api/types.js.map +1 -0
- package/dist/db/cdc/events.d.ts +201 -0
- package/dist/db/cdc/events.d.ts.map +1 -0
- package/dist/db/cdc/events.js +271 -0
- package/dist/db/cdc/events.js.map +1 -0
- package/dist/db/cdc/index.d.ts +13 -0
- package/dist/db/cdc/index.d.ts.map +1 -0
- package/dist/db/cdc/index.js +16 -0
- package/dist/db/cdc/index.js.map +1 -0
- package/dist/db/cdc/replay.d.ts +388 -0
- package/dist/db/cdc/replay.d.ts.map +1 -0
- package/dist/db/cdc/replay.js +469 -0
- package/dist/db/cdc/replay.js.map +1 -0
- package/dist/db/cdc/storage.d.ts +567 -0
- package/dist/db/cdc/storage.d.ts.map +1 -0
- package/dist/db/cdc/storage.js +856 -0
- package/dist/db/cdc/storage.js.map +1 -0
- package/dist/db/cdc/streaming.d.ts +459 -0
- package/dist/db/cdc/streaming.d.ts.map +1 -0
- package/dist/db/cdc/streaming.js +636 -0
- package/dist/db/cdc/streaming.js.map +1 -0
- package/dist/db/collections/actions.d.ts +440 -0
- package/dist/db/collections/actions.d.ts.map +1 -0
- package/dist/db/collections/actions.js +631 -0
- package/dist/db/collections/actions.js.map +1 -0
- package/dist/db/collections/base.d.ts +342 -0
- package/dist/db/collections/base.d.ts.map +1 -0
- package/dist/db/collections/base.js +510 -0
- package/dist/db/collections/base.js.map +1 -0
- package/dist/db/collections/index.d.ts +50 -0
- package/dist/db/collections/index.d.ts.map +1 -0
- package/dist/db/collections/index.js +48 -0
- package/dist/db/collections/index.js.map +1 -0
- package/dist/db/collections/nouns.d.ts +260 -0
- package/dist/db/collections/nouns.d.ts.map +1 -0
- package/dist/db/collections/nouns.js +273 -0
- package/dist/db/collections/nouns.js.map +1 -0
- package/dist/db/collections/relationships.d.ts +484 -0
- package/dist/db/collections/relationships.d.ts.map +1 -0
- package/dist/db/collections/relationships.js +815 -0
- package/dist/db/collections/relationships.js.map +1 -0
- package/dist/db/collections/things.d.ts +439 -0
- package/dist/db/collections/things.d.ts.map +1 -0
- package/dist/db/collections/things.js +603 -0
- package/dist/db/collections/things.js.map +1 -0
- package/dist/db/collections/verbs.d.ts +308 -0
- package/dist/db/collections/verbs.d.ts.map +1 -0
- package/dist/db/collections/verbs.js +480 -0
- package/dist/db/collections/verbs.js.map +1 -0
- package/dist/db/index.d.ts +14 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +23 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/storage/cold.d.ts +313 -0
- package/dist/db/storage/cold.d.ts.map +1 -0
- package/dist/db/storage/cold.js +319 -0
- package/dist/db/storage/cold.js.map +1 -0
- package/dist/db/storage/hot.d.ts +340 -0
- package/dist/db/storage/hot.d.ts.map +1 -0
- package/dist/db/storage/hot.js +333 -0
- package/dist/db/storage/hot.js.map +1 -0
- package/dist/db/storage/index.d.ts +242 -0
- package/dist/db/storage/index.d.ts.map +1 -0
- package/dist/db/storage/index.js +109 -0
- package/dist/db/storage/index.js.map +1 -0
- package/dist/db/storage/snapshots.d.ts +342 -0
- package/dist/db/storage/snapshots.d.ts.map +1 -0
- package/dist/db/storage/snapshots.js +298 -0
- package/dist/db/storage/snapshots.js.map +1 -0
- package/dist/db/storage/vortex.d.ts +324 -0
- package/dist/db/storage/vortex.d.ts.map +1 -0
- package/dist/db/storage/vortex.js +365 -0
- package/dist/db/storage/vortex.js.map +1 -0
- package/dist/db/storage/warm.d.ts +306 -0
- package/dist/db/storage/warm.d.ts.map +1 -0
- package/dist/db/storage/warm.js +339 -0
- package/dist/db/storage/warm.js.map +1 -0
- package/dist/do/DigitalObject.d.ts +595 -0
- package/dist/do/DigitalObject.d.ts.map +1 -0
- package/dist/do/DigitalObject.js +971 -0
- package/dist/do/DigitalObject.js.map +1 -0
- package/dist/do/business/financial/accounting.d.ts +436 -0
- package/dist/do/business/financial/accounting.d.ts.map +1 -0
- package/dist/do/business/financial/accounting.js +476 -0
- package/dist/do/business/financial/accounting.js.map +1 -0
- package/dist/do/business/financial/index.d.ts +15 -0
- package/dist/do/business/financial/index.d.ts.map +1 -0
- package/dist/do/business/financial/index.js +20 -0
- package/dist/do/business/financial/index.js.map +1 -0
- package/dist/do/business/financial/metrics.d.ts +370 -0
- package/dist/do/business/financial/metrics.d.ts.map +1 -0
- package/dist/do/business/financial/metrics.js +376 -0
- package/dist/do/business/financial/metrics.js.map +1 -0
- package/dist/do/business/financial/payments.d.ts +397 -0
- package/dist/do/business/financial/payments.d.ts.map +1 -0
- package/dist/do/business/financial/payments.js +395 -0
- package/dist/do/business/financial/payments.js.map +1 -0
- package/dist/do/business/financial/reports.d.ts +284 -0
- package/dist/do/business/financial/reports.d.ts.map +1 -0
- package/dist/do/business/financial/reports.js +347 -0
- package/dist/do/business/financial/reports.js.map +1 -0
- package/dist/do/business/financial/stripe.d.ts +254 -0
- package/dist/do/business/financial/stripe.d.ts.map +1 -0
- package/dist/do/business/financial/stripe.js +261 -0
- package/dist/do/business/financial/stripe.js.map +1 -0
- package/dist/do/business/financial/subscriptions.d.ts +402 -0
- package/dist/do/business/financial/subscriptions.d.ts.map +1 -0
- package/dist/do/business/financial/subscriptions.js +349 -0
- package/dist/do/business/financial/subscriptions.js.map +1 -0
- package/dist/do/business/index.d.ts +9 -0
- package/dist/do/business/index.d.ts.map +1 -0
- package/dist/do/business/index.js +10 -0
- package/dist/do/business/index.js.map +1 -0
- package/dist/do/colo/followers.d.ts +194 -0
- package/dist/do/colo/followers.d.ts.map +1 -0
- package/dist/do/colo/followers.js +224 -0
- package/dist/do/colo/followers.js.map +1 -0
- package/dist/do/colo/fork.d.ts +103 -0
- package/dist/do/colo/fork.d.ts.map +1 -0
- package/dist/do/colo/fork.js +143 -0
- package/dist/do/colo/fork.js.map +1 -0
- package/dist/do/colo/index.d.ts +181 -0
- package/dist/do/colo/index.d.ts.map +1 -0
- package/dist/do/colo/index.js +145 -0
- package/dist/do/colo/index.js.map +1 -0
- package/dist/do/colo/info.d.ts +106 -0
- package/dist/do/colo/info.d.ts.map +1 -0
- package/dist/do/colo/info.js +196 -0
- package/dist/do/colo/info.js.map +1 -0
- package/dist/do/colo/migrate.d.ts +161 -0
- package/dist/do/colo/migrate.d.ts.map +1 -0
- package/dist/do/colo/migrate.js +190 -0
- package/dist/do/colo/migrate.js.map +1 -0
- package/dist/do/colo/routing.d.ts +182 -0
- package/dist/do/colo/routing.d.ts.map +1 -0
- package/dist/do/colo/routing.js +254 -0
- package/dist/do/colo/routing.js.map +1 -0
- package/dist/do/domains/dns.d.ts +269 -0
- package/dist/do/domains/dns.d.ts.map +1 -0
- package/dist/do/domains/dns.js +215 -0
- package/dist/do/domains/dns.js.map +1 -0
- package/dist/do/domains/index.d.ts +40 -0
- package/dist/do/domains/index.d.ts.map +1 -0
- package/dist/do/domains/index.js +61 -0
- package/dist/do/domains/index.js.map +1 -0
- package/dist/do/domains/routing.d.ts +263 -0
- package/dist/do/domains/routing.d.ts.map +1 -0
- package/dist/do/domains/routing.js +362 -0
- package/dist/do/domains/routing.js.map +1 -0
- package/dist/do/domains/ssl.d.ts +217 -0
- package/dist/do/domains/ssl.d.ts.map +1 -0
- package/dist/do/domains/ssl.js +231 -0
- package/dist/do/domains/ssl.js.map +1 -0
- package/dist/do/domains/subdomains.d.ts +207 -0
- package/dist/do/domains/subdomains.d.ts.map +1 -0
- package/dist/do/domains/subdomains.js +223 -0
- package/dist/do/domains/subdomains.js.map +1 -0
- package/dist/do/domains/tlds.d.ts +175 -0
- package/dist/do/domains/tlds.d.ts.map +1 -0
- package/dist/do/domains/tlds.js +188 -0
- package/dist/do/domains/tlds.js.map +1 -0
- package/dist/do/domains/validation.d.ts +164 -0
- package/dist/do/domains/validation.d.ts.map +1 -0
- package/dist/do/domains/validation.js +290 -0
- package/dist/do/domains/validation.js.map +1 -0
- package/dist/do/hibernation.d.ts +385 -0
- package/dist/do/hibernation.d.ts.map +1 -0
- package/dist/do/hibernation.js +518 -0
- package/dist/do/hibernation.js.map +1 -0
- package/dist/do/index.d.ts +19 -0
- package/dist/do/index.d.ts.map +1 -0
- package/dist/do/index.js +23 -0
- package/dist/do/index.js.map +1 -0
- package/dist/do/state.d.ts +336 -0
- package/dist/do/state.d.ts.map +1 -0
- package/dist/do/state.js +290 -0
- package/dist/do/state.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +89 -0
- package/dist/index.js.map +1 -0
- package/dist/rpc/client.d.ts +426 -0
- package/dist/rpc/client.d.ts.map +1 -0
- package/dist/rpc/client.js +826 -0
- package/dist/rpc/client.js.map +1 -0
- package/dist/rpc/index.d.ts +19 -0
- package/dist/rpc/index.d.ts.map +1 -0
- package/dist/rpc/index.js +23 -0
- package/dist/rpc/index.js.map +1 -0
- package/dist/rpc/methods.d.ts +364 -0
- package/dist/rpc/methods.d.ts.map +1 -0
- package/dist/rpc/methods.js +557 -0
- package/dist/rpc/methods.js.map +1 -0
- package/dist/rpc/protocol.d.ts +310 -0
- package/dist/rpc/protocol.d.ts.map +1 -0
- package/dist/rpc/protocol.js +672 -0
- package/dist/rpc/protocol.js.map +1 -0
- package/dist/rpc/routes.d.ts +332 -0
- package/dist/rpc/routes.d.ts.map +1 -0
- package/dist/rpc/routes.js +633 -0
- package/dist/rpc/routes.js.map +1 -0
- package/dist/rpc/server.d.ts +380 -0
- package/dist/rpc/server.d.ts.map +1 -0
- package/dist/rpc/server.js +850 -0
- package/dist/rpc/server.js.map +1 -0
- package/dist/sdk/auth.d.ts +201 -0
- package/dist/sdk/auth.d.ts.map +1 -0
- package/dist/sdk/auth.js +343 -0
- package/dist/sdk/auth.js.map +1 -0
- package/dist/sdk/client.d.ts +123 -0
- package/dist/sdk/client.d.ts.map +1 -0
- package/dist/sdk/client.js +403 -0
- package/dist/sdk/client.js.map +1 -0
- package/dist/sdk/index.d.ts +123 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +230 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/rpc.d.ts +275 -0
- package/dist/sdk/rpc.d.ts.map +1 -0
- package/dist/sdk/rpc.js +249 -0
- package/dist/sdk/rpc.js.map +1 -0
- package/dist/sdk/transport.d.ts +283 -0
- package/dist/sdk/transport.d.ts.map +1 -0
- package/dist/sdk/transport.js +661 -0
- package/dist/sdk/transport.js.map +1 -0
- package/dist/sdk/types.d.ts +265 -0
- package/dist/sdk/types.d.ts.map +1 -0
- package/dist/sdk/types.js +27 -0
- package/dist/sdk/types.js.map +1 -0
- package/dist/types/ai.d.ts +533 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js +18 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/app.d.ts +371 -0
- package/dist/types/app.d.ts.map +1 -0
- package/dist/types/app.js +151 -0
- package/dist/types/app.js.map +1 -0
- package/dist/types/business.d.ts +482 -0
- package/dist/types/business.d.ts.map +1 -0
- package/dist/types/business.js +60 -0
- package/dist/types/business.js.map +1 -0
- package/dist/types/cascade.d.ts +323 -0
- package/dist/types/cascade.d.ts.map +1 -0
- package/dist/types/cascade.js +82 -0
- package/dist/types/cascade.js.map +1 -0
- package/dist/types/collections.d.ts +704 -0
- package/dist/types/collections.d.ts.map +1 -0
- package/dist/types/collections.js +23 -0
- package/dist/types/collections.js.map +1 -0
- package/dist/types/colo.d.ts +171 -0
- package/dist/types/colo.d.ts.map +1 -0
- package/dist/types/colo.js +63 -0
- package/dist/types/colo.js.map +1 -0
- package/dist/types/communication.d.ts +595 -0
- package/dist/types/communication.d.ts.map +1 -0
- package/dist/types/communication.js +16 -0
- package/dist/types/communication.js.map +1 -0
- package/dist/types/content.d.ts +286 -0
- package/dist/types/content.d.ts.map +1 -0
- package/dist/types/content.js +8 -0
- package/dist/types/content.js.map +1 -0
- package/dist/types/context.d.ts +407 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +36 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/databases.d.ts +377 -0
- package/dist/types/databases.d.ts.map +1 -0
- package/dist/types/databases.js +14 -0
- package/dist/types/databases.js.map +1 -0
- package/dist/types/domains.d.ts +132 -0
- package/dist/types/domains.d.ts.map +1 -0
- package/dist/types/domains.js +107 -0
- package/dist/types/domains.js.map +1 -0
- package/dist/types/execution.d.ts +381 -0
- package/dist/types/execution.d.ts.map +1 -0
- package/dist/types/execution.js +40 -0
- package/dist/types/execution.js.map +1 -0
- package/dist/types/financial.d.ts +608 -0
- package/dist/types/financial.d.ts.map +1 -0
- package/dist/types/financial.js +12 -0
- package/dist/types/financial.js.map +1 -0
- package/dist/types/functions.d.ts +215 -0
- package/dist/types/functions.d.ts.map +1 -0
- package/dist/types/functions.js +15 -0
- package/dist/types/functions.js.map +1 -0
- package/dist/types/git.d.ts +299 -0
- package/dist/types/git.d.ts.map +1 -0
- package/dist/types/git.js +17 -0
- package/dist/types/git.js.map +1 -0
- package/dist/types/identity.d.ts +141 -0
- package/dist/types/identity.d.ts.map +1 -0
- package/dist/types/identity.js +54 -0
- package/dist/types/identity.js.map +1 -0
- package/dist/types/index.d.ts +40 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +65 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/integrations.d.ts +356 -0
- package/dist/types/integrations.d.ts.map +1 -0
- package/dist/types/integrations.js +19 -0
- package/dist/types/integrations.js.map +1 -0
- package/dist/types/mdxui.d.ts +1955 -0
- package/dist/types/mdxui.d.ts.map +1 -0
- package/dist/types/mdxui.js +751 -0
- package/dist/types/mdxui.js.map +1 -0
- package/dist/types/observability.d.ts +315 -0
- package/dist/types/observability.d.ts.map +1 -0
- package/dist/types/observability.js +13 -0
- package/dist/types/observability.js.map +1 -0
- package/dist/types/rpc.d.ts +339 -0
- package/dist/types/rpc.d.ts.map +1 -0
- package/dist/types/rpc.js +24 -0
- package/dist/types/rpc.js.map +1 -0
- package/dist/types/saas.d.ts +678 -0
- package/dist/types/saas.d.ts.map +1 -0
- package/dist/types/saas.js +59 -0
- package/dist/types/saas.js.map +1 -0
- package/dist/types/service.d.ts +676 -0
- package/dist/types/service.d.ts.map +1 -0
- package/dist/types/service.js +69 -0
- package/dist/types/service.js.map +1 -0
- package/dist/types/site.d.ts +317 -0
- package/dist/types/site.d.ts.map +1 -0
- package/dist/types/site.js +203 -0
- package/dist/types/site.js.map +1 -0
- package/dist/types/startup.d.ts +576 -0
- package/dist/types/startup.d.ts.map +1 -0
- package/dist/types/startup.js +59 -0
- package/dist/types/startup.js.map +1 -0
- package/dist/types/storage.d.ts +276 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +35 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/types/telephony.d.ts +458 -0
- package/dist/types/telephony.d.ts.map +1 -0
- package/dist/types/telephony.js +19 -0
- package/dist/types/telephony.js.map +1 -0
- package/dist/types/tenant.d.ts +708 -0
- package/dist/types/tenant.d.ts.map +1 -0
- package/dist/types/tenant.js +103 -0
- package/dist/types/tenant.js.map +1 -0
- package/dist/types/voice-ai.d.ts +459 -0
- package/dist/types/voice-ai.d.ts.map +1 -0
- package/dist/types/voice-ai.js +32 -0
- package/dist/types/voice-ai.js.map +1 -0
- package/package.json +143 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice - Text-to-Speech and Speech-to-Text
|
|
3
|
+
*
|
|
4
|
+
* Voice synthesis (TTS) and speech recognition (STT) capabilities.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Text-to-speech with multiple voices
|
|
8
|
+
* - Speech-to-text transcription
|
|
9
|
+
* - Real-time streaming transcription
|
|
10
|
+
* - Word-level timestamps
|
|
11
|
+
* - Speaker diarization
|
|
12
|
+
*
|
|
13
|
+
* @module ai/voice/tts
|
|
14
|
+
*/
|
|
15
|
+
import type { VoiceSynthesisOptions, VoiceSynthesisResult, SpeechRecognitionOptions, TranscriptionResult, VoiceSynthesisProvider } from '../../types/ai';
|
|
16
|
+
/**
|
|
17
|
+
* Synthesize speech from text
|
|
18
|
+
*
|
|
19
|
+
* @param text - Text to synthesize
|
|
20
|
+
* @param options - Synthesis options including voice
|
|
21
|
+
* @returns Audio buffer and metadata
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // Using ElevenLabs
|
|
26
|
+
* const result = await synthesize('Hello, how are you?', {
|
|
27
|
+
* provider: 'elevenlabs',
|
|
28
|
+
* voice: 'rachel',
|
|
29
|
+
* format: 'mp3'
|
|
30
|
+
* })
|
|
31
|
+
*
|
|
32
|
+
* // Using OpenAI
|
|
33
|
+
* const result = await synthesize('Welcome to our app', {
|
|
34
|
+
* provider: 'openai',
|
|
35
|
+
* voice: 'alloy',
|
|
36
|
+
* speed: 1.0
|
|
37
|
+
* })
|
|
38
|
+
*
|
|
39
|
+
* // Play the audio
|
|
40
|
+
* const blob = new Blob([result.audio], { type: `audio/${result.format}` })
|
|
41
|
+
* const url = URL.createObjectURL(blob)
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function synthesize(text: string, options: VoiceSynthesisOptions): Promise<VoiceSynthesisResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Synthesize speech with streaming output
|
|
47
|
+
*
|
|
48
|
+
* @param text - Text to synthesize
|
|
49
|
+
* @param options - Synthesis options
|
|
50
|
+
* @returns Async iterable of audio chunks
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* for await (const chunk of synthesizeStream('Long text...', {
|
|
55
|
+
* provider: 'elevenlabs',
|
|
56
|
+
* voice: 'rachel'
|
|
57
|
+
* })) {
|
|
58
|
+
* // Process audio chunk
|
|
59
|
+
* audioContext.decodeAudioData(chunk)
|
|
60
|
+
* }
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare function synthesizeStream(text: string, options: VoiceSynthesisOptions): AsyncIterable<ArrayBuffer>;
|
|
64
|
+
/**
|
|
65
|
+
* Transcribe audio to text
|
|
66
|
+
*
|
|
67
|
+
* @param audio - Audio buffer to transcribe
|
|
68
|
+
* @param options - Transcription options
|
|
69
|
+
* @returns Transcription result with text and metadata
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* // Basic transcription
|
|
74
|
+
* const result = await transcribe(audioBuffer, {
|
|
75
|
+
* provider: 'deepgram',
|
|
76
|
+
* language: 'en'
|
|
77
|
+
* })
|
|
78
|
+
* console.log(result.text)
|
|
79
|
+
*
|
|
80
|
+
* // With word timestamps
|
|
81
|
+
* const result = await transcribe(audioBuffer, {
|
|
82
|
+
* provider: 'deepgram',
|
|
83
|
+
* punctuate: true
|
|
84
|
+
* })
|
|
85
|
+
* result.words?.forEach(w => {
|
|
86
|
+
* console.log(`${w.word} (${w.start}s - ${w.end}s)`)
|
|
87
|
+
* })
|
|
88
|
+
*
|
|
89
|
+
* // With speaker diarization
|
|
90
|
+
* const result = await transcribe(meetingAudio, {
|
|
91
|
+
* provider: 'deepgram',
|
|
92
|
+
* diarize: true
|
|
93
|
+
* })
|
|
94
|
+
* result.speakers?.forEach(s => {
|
|
95
|
+
* console.log(`Speaker ${s.speaker}: ${s.text}`)
|
|
96
|
+
* })
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export declare function transcribe(audio: ArrayBuffer, options?: SpeechRecognitionOptions): Promise<TranscriptionResult>;
|
|
100
|
+
/**
|
|
101
|
+
* Transcribe audio stream in real-time
|
|
102
|
+
*
|
|
103
|
+
* @param audioStream - Readable stream of audio data
|
|
104
|
+
* @param options - Transcription options
|
|
105
|
+
* @returns Async iterable of partial transcription results
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* // From microphone
|
|
110
|
+
* const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true })
|
|
111
|
+
* const audioStream = getAudioStream(mediaStream)
|
|
112
|
+
*
|
|
113
|
+
* for await (const partial of transcribeStream(audioStream, {
|
|
114
|
+
* provider: 'deepgram',
|
|
115
|
+
* interimResults: true
|
|
116
|
+
* })) {
|
|
117
|
+
* console.log('Partial:', partial.text)
|
|
118
|
+
* }
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export declare function transcribeStream(audioStream: ReadableStream, options?: SpeechRecognitionOptions): AsyncIterable<TranscriptionResult>;
|
|
122
|
+
/**
|
|
123
|
+
* Transcribe audio from URL
|
|
124
|
+
*
|
|
125
|
+
* @param url - URL of audio file
|
|
126
|
+
* @param options - Transcription options
|
|
127
|
+
* @returns Transcription result
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* const result = await transcribeUrl(
|
|
132
|
+
* 'https://example.com/podcast.mp3',
|
|
133
|
+
* { provider: 'assemblyai', diarize: true }
|
|
134
|
+
* )
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
export declare function transcribeUrl(url: string, options?: SpeechRecognitionOptions): Promise<TranscriptionResult>;
|
|
138
|
+
/**
|
|
139
|
+
* List available voices for a provider
|
|
140
|
+
*
|
|
141
|
+
* @param provider - Voice synthesis provider
|
|
142
|
+
* @returns Array of available voices
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```typescript
|
|
146
|
+
* const voices = await listVoices('elevenlabs')
|
|
147
|
+
* voices.forEach(v => console.log(`${v.name}: ${v.description}`))
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
export declare function listVoices(provider: VoiceSynthesisProvider): Promise<Array<{
|
|
151
|
+
id: string;
|
|
152
|
+
name: string;
|
|
153
|
+
description?: string;
|
|
154
|
+
}>>;
|
|
155
|
+
/**
|
|
156
|
+
* Clone a voice from audio sample (ElevenLabs)
|
|
157
|
+
*
|
|
158
|
+
* @param name - Name for the cloned voice
|
|
159
|
+
* @param audioSamples - Audio samples of the voice
|
|
160
|
+
* @param description - Optional description
|
|
161
|
+
* @returns Voice ID of the cloned voice
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```typescript
|
|
165
|
+
* const voiceId = await cloneVoice(
|
|
166
|
+
* 'My Custom Voice',
|
|
167
|
+
* [sample1, sample2, sample3],
|
|
168
|
+
* 'A warm, friendly voice'
|
|
169
|
+
* )
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
export declare function cloneVoice(name: string, audioSamples: ArrayBuffer[], description?: string): Promise<string>;
|
|
173
|
+
//# sourceMappingURL=tts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tts.d.ts","sourceRoot":"","sources":["../../../ai/voice/tts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EAEvB,MAAM,gBAAgB,CAAA;AA4BvB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAO/B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAuB,gBAAgB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,qBAAqB,GAC7B,aAAa,CAAC,WAAW,CAAC,CAI5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAO9B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAuB,gBAAgB,CACrC,WAAW,EAAE,cAAc,EAC3B,OAAO,CAAC,EAAE,wBAAwB,GACjC,aAAa,CAAC,mBAAmB,CAAC,CAMpC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAI9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,sBAAsB,GAC/B,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAIpE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,WAAW,EAAE,EAC3B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAGjB"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice - Text-to-Speech and Speech-to-Text
|
|
3
|
+
*
|
|
4
|
+
* Voice synthesis (TTS) and speech recognition (STT) capabilities.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Text-to-speech with multiple voices
|
|
8
|
+
* - Speech-to-text transcription
|
|
9
|
+
* - Real-time streaming transcription
|
|
10
|
+
* - Word-level timestamps
|
|
11
|
+
* - Speaker diarization
|
|
12
|
+
*
|
|
13
|
+
* @module ai/voice/tts
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Default TTS models by provider
|
|
17
|
+
*/
|
|
18
|
+
const DEFAULT_TTS_MODELS = {
|
|
19
|
+
elevenlabs: 'eleven_multilingual_v2',
|
|
20
|
+
playht: 'PlayHT2.0',
|
|
21
|
+
azure: 'en-US-JennyNeural',
|
|
22
|
+
google: 'en-US-Standard-A',
|
|
23
|
+
openai: 'tts-1',
|
|
24
|
+
deepgram: 'aura-asteria-en',
|
|
25
|
+
cartesia: 'sonic-english',
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Default STT models by provider
|
|
29
|
+
*/
|
|
30
|
+
const DEFAULT_STT_MODELS = {
|
|
31
|
+
deepgram: 'nova-2',
|
|
32
|
+
assemblyai: 'default',
|
|
33
|
+
whisper: 'whisper-1',
|
|
34
|
+
google: 'default',
|
|
35
|
+
azure: 'default',
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Synthesize speech from text
|
|
39
|
+
*
|
|
40
|
+
* @param text - Text to synthesize
|
|
41
|
+
* @param options - Synthesis options including voice
|
|
42
|
+
* @returns Audio buffer and metadata
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* // Using ElevenLabs
|
|
47
|
+
* const result = await synthesize('Hello, how are you?', {
|
|
48
|
+
* provider: 'elevenlabs',
|
|
49
|
+
* voice: 'rachel',
|
|
50
|
+
* format: 'mp3'
|
|
51
|
+
* })
|
|
52
|
+
*
|
|
53
|
+
* // Using OpenAI
|
|
54
|
+
* const result = await synthesize('Welcome to our app', {
|
|
55
|
+
* provider: 'openai',
|
|
56
|
+
* voice: 'alloy',
|
|
57
|
+
* speed: 1.0
|
|
58
|
+
* })
|
|
59
|
+
*
|
|
60
|
+
* // Play the audio
|
|
61
|
+
* const blob = new Blob([result.audio], { type: `audio/${result.format}` })
|
|
62
|
+
* const url = URL.createObjectURL(blob)
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export async function synthesize(text, options) {
|
|
66
|
+
// TODO: Implement text-to-speech
|
|
67
|
+
// 1. Select provider and model
|
|
68
|
+
// 2. Build provider-specific request
|
|
69
|
+
// 3. Make gateway request
|
|
70
|
+
// 4. Return audio buffer
|
|
71
|
+
throw new Error('Not implemented');
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Synthesize speech with streaming output
|
|
75
|
+
*
|
|
76
|
+
* @param text - Text to synthesize
|
|
77
|
+
* @param options - Synthesis options
|
|
78
|
+
* @returns Async iterable of audio chunks
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* for await (const chunk of synthesizeStream('Long text...', {
|
|
83
|
+
* provider: 'elevenlabs',
|
|
84
|
+
* voice: 'rachel'
|
|
85
|
+
* })) {
|
|
86
|
+
* // Process audio chunk
|
|
87
|
+
* audioContext.decodeAudioData(chunk)
|
|
88
|
+
* }
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export async function* synthesizeStream(text, options) {
|
|
92
|
+
// TODO: Implement streaming TTS
|
|
93
|
+
// Some providers support streaming audio output
|
|
94
|
+
throw new Error('Not implemented');
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Transcribe audio to text
|
|
98
|
+
*
|
|
99
|
+
* @param audio - Audio buffer to transcribe
|
|
100
|
+
* @param options - Transcription options
|
|
101
|
+
* @returns Transcription result with text and metadata
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* // Basic transcription
|
|
106
|
+
* const result = await transcribe(audioBuffer, {
|
|
107
|
+
* provider: 'deepgram',
|
|
108
|
+
* language: 'en'
|
|
109
|
+
* })
|
|
110
|
+
* console.log(result.text)
|
|
111
|
+
*
|
|
112
|
+
* // With word timestamps
|
|
113
|
+
* const result = await transcribe(audioBuffer, {
|
|
114
|
+
* provider: 'deepgram',
|
|
115
|
+
* punctuate: true
|
|
116
|
+
* })
|
|
117
|
+
* result.words?.forEach(w => {
|
|
118
|
+
* console.log(`${w.word} (${w.start}s - ${w.end}s)`)
|
|
119
|
+
* })
|
|
120
|
+
*
|
|
121
|
+
* // With speaker diarization
|
|
122
|
+
* const result = await transcribe(meetingAudio, {
|
|
123
|
+
* provider: 'deepgram',
|
|
124
|
+
* diarize: true
|
|
125
|
+
* })
|
|
126
|
+
* result.speakers?.forEach(s => {
|
|
127
|
+
* console.log(`Speaker ${s.speaker}: ${s.text}`)
|
|
128
|
+
* })
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export async function transcribe(audio, options) {
|
|
132
|
+
// TODO: Implement speech-to-text
|
|
133
|
+
// 1. Select provider and model
|
|
134
|
+
// 2. Build provider-specific request
|
|
135
|
+
// 3. Make gateway request
|
|
136
|
+
// 4. Normalize response
|
|
137
|
+
throw new Error('Not implemented');
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Transcribe audio stream in real-time
|
|
141
|
+
*
|
|
142
|
+
* @param audioStream - Readable stream of audio data
|
|
143
|
+
* @param options - Transcription options
|
|
144
|
+
* @returns Async iterable of partial transcription results
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* // From microphone
|
|
149
|
+
* const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true })
|
|
150
|
+
* const audioStream = getAudioStream(mediaStream)
|
|
151
|
+
*
|
|
152
|
+
* for await (const partial of transcribeStream(audioStream, {
|
|
153
|
+
* provider: 'deepgram',
|
|
154
|
+
* interimResults: true
|
|
155
|
+
* })) {
|
|
156
|
+
* console.log('Partial:', partial.text)
|
|
157
|
+
* }
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
export async function* transcribeStream(audioStream, options) {
|
|
161
|
+
// TODO: Implement real-time streaming transcription
|
|
162
|
+
// 1. Open WebSocket to provider
|
|
163
|
+
// 2. Stream audio chunks
|
|
164
|
+
// 3. Yield partial results
|
|
165
|
+
throw new Error('Not implemented');
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Transcribe audio from URL
|
|
169
|
+
*
|
|
170
|
+
* @param url - URL of audio file
|
|
171
|
+
* @param options - Transcription options
|
|
172
|
+
* @returns Transcription result
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* const result = await transcribeUrl(
|
|
177
|
+
* 'https://example.com/podcast.mp3',
|
|
178
|
+
* { provider: 'assemblyai', diarize: true }
|
|
179
|
+
* )
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
export async function transcribeUrl(url, options) {
|
|
183
|
+
// TODO: Implement URL-based transcription
|
|
184
|
+
// Some providers accept URLs directly
|
|
185
|
+
throw new Error('Not implemented');
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* List available voices for a provider
|
|
189
|
+
*
|
|
190
|
+
* @param provider - Voice synthesis provider
|
|
191
|
+
* @returns Array of available voices
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* const voices = await listVoices('elevenlabs')
|
|
196
|
+
* voices.forEach(v => console.log(`${v.name}: ${v.description}`))
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
export async function listVoices(provider) {
|
|
200
|
+
// TODO: Implement voice listing
|
|
201
|
+
// Provider-specific API calls
|
|
202
|
+
throw new Error('Not implemented');
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Clone a voice from audio sample (ElevenLabs)
|
|
206
|
+
*
|
|
207
|
+
* @param name - Name for the cloned voice
|
|
208
|
+
* @param audioSamples - Audio samples of the voice
|
|
209
|
+
* @param description - Optional description
|
|
210
|
+
* @returns Voice ID of the cloned voice
|
|
211
|
+
*
|
|
212
|
+
* @example
|
|
213
|
+
* ```typescript
|
|
214
|
+
* const voiceId = await cloneVoice(
|
|
215
|
+
* 'My Custom Voice',
|
|
216
|
+
* [sample1, sample2, sample3],
|
|
217
|
+
* 'A warm, friendly voice'
|
|
218
|
+
* )
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
export async function cloneVoice(name, audioSamples, description) {
|
|
222
|
+
// TODO: Implement voice cloning (ElevenLabs specific)
|
|
223
|
+
throw new Error('Not implemented');
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Format TTS request for provider
|
|
227
|
+
*
|
|
228
|
+
* @internal
|
|
229
|
+
*/
|
|
230
|
+
function formatTTSRequest(text, provider, options) {
|
|
231
|
+
// TODO: Handle provider-specific request formats
|
|
232
|
+
throw new Error('Not implemented');
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Format STT request for provider
|
|
236
|
+
*
|
|
237
|
+
* @internal
|
|
238
|
+
*/
|
|
239
|
+
function formatSTTRequest(audio, provider, options) {
|
|
240
|
+
// TODO: Handle provider-specific request formats
|
|
241
|
+
throw new Error('Not implemented');
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Parse STT response from provider
|
|
245
|
+
*
|
|
246
|
+
* @internal
|
|
247
|
+
*/
|
|
248
|
+
function parseSTTResponse(response, provider) {
|
|
249
|
+
// TODO: Normalize provider responses
|
|
250
|
+
throw new Error('Not implemented');
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=tts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tts.js","sourceRoot":"","sources":["../../../ai/voice/tts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebRTC Session Handling
|
|
3
|
+
*
|
|
4
|
+
* Manages browser-based voice calls using WebRTC.
|
|
5
|
+
* Supports multiple providers (LiveKit, Daily, Twilio).
|
|
6
|
+
*
|
|
7
|
+
* @module ai/voice/webrtc
|
|
8
|
+
*/
|
|
9
|
+
import type { WebRTCConfig, RealtimeTranscriptionConfig, VoiceAIProvider } from '../../types/voice-ai';
|
|
10
|
+
import { VoiceAgentManager } from './agents';
|
|
11
|
+
import { VoiceSessionManager } from './sessions';
|
|
12
|
+
/**
|
|
13
|
+
* Options for creating a WebRTC session
|
|
14
|
+
*/
|
|
15
|
+
export interface CreateWebRTCSessionOptions {
|
|
16
|
+
/** Voice agent ID */
|
|
17
|
+
agentId: string;
|
|
18
|
+
/** Participant identity */
|
|
19
|
+
identity: string;
|
|
20
|
+
/** Display name */
|
|
21
|
+
displayName?: string;
|
|
22
|
+
/** Audio-only mode (no video) */
|
|
23
|
+
audioOnly?: boolean;
|
|
24
|
+
/** Auto-connect when joining */
|
|
25
|
+
autoConnect?: boolean;
|
|
26
|
+
/** Session metadata */
|
|
27
|
+
metadata?: Record<string, unknown>;
|
|
28
|
+
/** Real-time transcription config */
|
|
29
|
+
transcription?: RealtimeTranscriptionConfig;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Result of creating a WebRTC session
|
|
33
|
+
*/
|
|
34
|
+
export interface WebRTCSessionResult {
|
|
35
|
+
/** Session ID (for tracking) */
|
|
36
|
+
sessionId: string;
|
|
37
|
+
/** Room name */
|
|
38
|
+
roomName: string;
|
|
39
|
+
/** Room URL (for client connection) */
|
|
40
|
+
roomUrl: string;
|
|
41
|
+
/** Access token (for authentication) */
|
|
42
|
+
token: string;
|
|
43
|
+
/** WebRTC config */
|
|
44
|
+
config: WebRTCConfig;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* WebRTC room information
|
|
48
|
+
*/
|
|
49
|
+
export interface WebRTCRoom {
|
|
50
|
+
/** Room name */
|
|
51
|
+
name: string;
|
|
52
|
+
/** Room URL */
|
|
53
|
+
url: string;
|
|
54
|
+
/** Session ID */
|
|
55
|
+
sessionId: string;
|
|
56
|
+
/** Agent ID */
|
|
57
|
+
agentId: string;
|
|
58
|
+
/** Provider */
|
|
59
|
+
provider: VoiceAIProvider;
|
|
60
|
+
/** Current participants */
|
|
61
|
+
participants: WebRTCParticipant[];
|
|
62
|
+
/** Created timestamp */
|
|
63
|
+
createdAt: number;
|
|
64
|
+
/** Room status */
|
|
65
|
+
status: 'active' | 'closed';
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* WebRTC participant
|
|
69
|
+
*/
|
|
70
|
+
export interface WebRTCParticipant {
|
|
71
|
+
/** Participant identity */
|
|
72
|
+
identity: string;
|
|
73
|
+
/** Display name */
|
|
74
|
+
displayName?: string;
|
|
75
|
+
/** Is AI agent */
|
|
76
|
+
isAgent: boolean;
|
|
77
|
+
/** Joined timestamp */
|
|
78
|
+
joinedAt: number;
|
|
79
|
+
/** Connection state */
|
|
80
|
+
connectionState: 'connecting' | 'connected' | 'disconnected';
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* WebRTC event types
|
|
84
|
+
*/
|
|
85
|
+
export type WebRTCEventType = 'room_created' | 'participant_joined' | 'participant_left' | 'track_subscribed' | 'track_unsubscribed' | 'room_closed';
|
|
86
|
+
/**
|
|
87
|
+
* WebRTC session manager
|
|
88
|
+
*
|
|
89
|
+
* Creates and manages WebRTC sessions for browser-based voice calls.
|
|
90
|
+
* Works with LiveKit, Daily, or other WebRTC providers.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* const manager = new WebRTCSessionManager(storage, agentManager, sessionManager)
|
|
95
|
+
*
|
|
96
|
+
* // Create a session for a user
|
|
97
|
+
* const { sessionId, roomUrl, token } = await manager.create({
|
|
98
|
+
* agentId: 'vagent_support',
|
|
99
|
+
* identity: 'user_123',
|
|
100
|
+
* displayName: 'John Doe',
|
|
101
|
+
* audioOnly: true,
|
|
102
|
+
* })
|
|
103
|
+
*
|
|
104
|
+
* // Client uses token to connect
|
|
105
|
+
* // const room = await LivekitClient.connect(roomUrl, token)
|
|
106
|
+
*
|
|
107
|
+
* // Get room info
|
|
108
|
+
* const room = await manager.getRoom(sessionId)
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare class WebRTCSessionManager {
|
|
112
|
+
private storage;
|
|
113
|
+
private agentManager;
|
|
114
|
+
private sessionManager;
|
|
115
|
+
/**
|
|
116
|
+
* Create a WebRTC session manager
|
|
117
|
+
*
|
|
118
|
+
* @param storage - DO storage interface
|
|
119
|
+
* @param agentManager - Voice agent manager
|
|
120
|
+
* @param sessionManager - Voice session manager
|
|
121
|
+
*/
|
|
122
|
+
constructor(storage: DurableObjectStorage, agentManager: VoiceAgentManager, sessionManager: VoiceSessionManager);
|
|
123
|
+
/**
|
|
124
|
+
* Create a new WebRTC session
|
|
125
|
+
*
|
|
126
|
+
* Creates a room and generates an access token for the participant.
|
|
127
|
+
*
|
|
128
|
+
* @param options - Session options
|
|
129
|
+
* @returns Session details including token and room URL
|
|
130
|
+
*/
|
|
131
|
+
create(options: CreateWebRTCSessionOptions): Promise<WebRTCSessionResult>;
|
|
132
|
+
/**
|
|
133
|
+
* Get room information
|
|
134
|
+
*
|
|
135
|
+
* @param sessionId - Voice session ID
|
|
136
|
+
* @returns Room info or null if not found
|
|
137
|
+
*/
|
|
138
|
+
getRoom(sessionId: string): Promise<WebRTCRoom | null>;
|
|
139
|
+
/**
|
|
140
|
+
* Get room by name
|
|
141
|
+
*
|
|
142
|
+
* @param roomName - Room name
|
|
143
|
+
* @returns Room info or null if not found
|
|
144
|
+
*/
|
|
145
|
+
getRoomByName(roomName: string): Promise<WebRTCRoom | null>;
|
|
146
|
+
/**
|
|
147
|
+
* Generate a new token for an existing room
|
|
148
|
+
*
|
|
149
|
+
* Useful when a participant needs to reconnect.
|
|
150
|
+
*
|
|
151
|
+
* @param sessionId - Voice session ID
|
|
152
|
+
* @param identity - Participant identity
|
|
153
|
+
* @returns New access token
|
|
154
|
+
*/
|
|
155
|
+
generateToken(sessionId: string, identity: string): Promise<string>;
|
|
156
|
+
/**
|
|
157
|
+
* Update participant connection state
|
|
158
|
+
*
|
|
159
|
+
* Called from webhook when participant joins/leaves.
|
|
160
|
+
*
|
|
161
|
+
* @param roomName - Room name
|
|
162
|
+
* @param identity - Participant identity
|
|
163
|
+
* @param state - Connection state
|
|
164
|
+
*/
|
|
165
|
+
updateParticipantState(roomName: string, identity: string, state: WebRTCParticipant['connectionState']): Promise<void>;
|
|
166
|
+
/**
|
|
167
|
+
* Add a participant to a room
|
|
168
|
+
*
|
|
169
|
+
* @param roomName - Room name
|
|
170
|
+
* @param participant - Participant info
|
|
171
|
+
*/
|
|
172
|
+
addParticipant(roomName: string, participant: WebRTCParticipant): Promise<void>;
|
|
173
|
+
/**
|
|
174
|
+
* Remove a participant from a room
|
|
175
|
+
*
|
|
176
|
+
* @param roomName - Room name
|
|
177
|
+
* @param identity - Participant identity
|
|
178
|
+
*/
|
|
179
|
+
removeParticipant(roomName: string, identity: string): Promise<void>;
|
|
180
|
+
/**
|
|
181
|
+
* Close a room
|
|
182
|
+
*
|
|
183
|
+
* @param roomName - Room name
|
|
184
|
+
*/
|
|
185
|
+
closeRoom(roomName: string): Promise<void>;
|
|
186
|
+
/**
|
|
187
|
+
* List active rooms
|
|
188
|
+
*
|
|
189
|
+
* @param agentId - Optional filter by agent
|
|
190
|
+
* @returns List of active rooms
|
|
191
|
+
*/
|
|
192
|
+
listActiveRooms(agentId?: string): Promise<WebRTCRoom[]>;
|
|
193
|
+
/**
|
|
194
|
+
* Clean up old/stale rooms
|
|
195
|
+
*
|
|
196
|
+
* Should be called periodically to clean up rooms that weren't
|
|
197
|
+
* properly closed.
|
|
198
|
+
*
|
|
199
|
+
* @param maxAge - Maximum age in milliseconds (default: 24 hours)
|
|
200
|
+
*/
|
|
201
|
+
cleanup(maxAge?: number): Promise<number>;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* WebRTC session singleton access
|
|
205
|
+
*/
|
|
206
|
+
export declare const WebRTCSession: {
|
|
207
|
+
/**
|
|
208
|
+
* Initialize with dependencies
|
|
209
|
+
*/
|
|
210
|
+
init(storage: DurableObjectStorage, agentManager: VoiceAgentManager, sessionManager: VoiceSessionManager): void;
|
|
211
|
+
/**
|
|
212
|
+
* Create a WebRTC session
|
|
213
|
+
*/
|
|
214
|
+
create(options: CreateWebRTCSessionOptions): Promise<WebRTCSessionResult>;
|
|
215
|
+
/**
|
|
216
|
+
* Get room info
|
|
217
|
+
*/
|
|
218
|
+
getRoom(sessionId: string): Promise<WebRTCRoom | null>;
|
|
219
|
+
/**
|
|
220
|
+
* Generate new token
|
|
221
|
+
*/
|
|
222
|
+
generateToken(sessionId: string, identity: string): Promise<string>;
|
|
223
|
+
/**
|
|
224
|
+
* List active rooms
|
|
225
|
+
*/
|
|
226
|
+
listActiveRooms(agentId?: string): Promise<WebRTCRoom[]>;
|
|
227
|
+
};
|
|
228
|
+
//# sourceMappingURL=webrtc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webrtc.d.ts","sourceRoot":"","sources":["../../../ai/voice/webrtc.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,2BAA2B,EAC3B,eAAe,EAChB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAMhD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iCAAiC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gCAAgC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,qCAAqC;IACrC,aAAa,CAAC,EAAE,2BAA2B,CAAA;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,oBAAoB;IACpB,MAAM,EAAE,YAAY,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe;IACf,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe;IACf,OAAO,EAAE,MAAM,CAAA;IACf,eAAe;IACf,QAAQ,EAAE,eAAe,CAAA;IACzB,2BAA2B;IAC3B,YAAY,EAAE,iBAAiB,EAAE,CAAA;IACjC,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB;IAClB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kBAAkB;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,uBAAuB;IACvB,eAAe,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,CAAA;CAC7D;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,oBAAoB,GACpB,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,aAAa,CAAA;AAMjB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,oBAAoB;IAS7B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;IAVxB;;;;;;OAMG;gBAEO,OAAO,EAAE,oBAAoB,EAC7B,YAAY,EAAE,iBAAiB,EAC/B,cAAc,EAAE,mBAAmB;IAG7C;;;;;;;OAOG;IACG,MAAM,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAwE/E;;;;;OAKG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQ5D;;;;;OAKG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAKjE;;;;;;;;OAQG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BzE;;;;;;;;OAQG;IACG,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,GAC1C,OAAO,CAAC,IAAI,CAAC;IAchB;;;;;OAKG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrF;;;;;OAKG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1E;;;;OAIG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAehD;;;;;OAKG;IACG,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAa9D;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,GAAE,MAA4B,GAAG,OAAO,CAAC,MAAM,CAAC;CAerE;AAmCD;;GAEG;AACH,eAAO,MAAM,aAAa;IACxB;;OAEG;kBAEQ,oBAAoB,gBACf,iBAAiB,kBACf,mBAAmB,GAClC,IAAI;IAIP;;OAEG;oBACmB,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAK/E;;OAEG;uBACsB,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAK5D;;OAEG;6BAC4B,MAAM,YAAY,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzE;;OAEG;8BAC6B,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAI/D,CAAA"}
|