@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,372 @@
|
|
|
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 { VoiceProviderFactory } from './providers';
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// WebRTC Session Manager
|
|
12
|
+
// =============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* WebRTC session manager
|
|
15
|
+
*
|
|
16
|
+
* Creates and manages WebRTC sessions for browser-based voice calls.
|
|
17
|
+
* Works with LiveKit, Daily, or other WebRTC providers.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const manager = new WebRTCSessionManager(storage, agentManager, sessionManager)
|
|
22
|
+
*
|
|
23
|
+
* // Create a session for a user
|
|
24
|
+
* const { sessionId, roomUrl, token } = await manager.create({
|
|
25
|
+
* agentId: 'vagent_support',
|
|
26
|
+
* identity: 'user_123',
|
|
27
|
+
* displayName: 'John Doe',
|
|
28
|
+
* audioOnly: true,
|
|
29
|
+
* })
|
|
30
|
+
*
|
|
31
|
+
* // Client uses token to connect
|
|
32
|
+
* // const room = await LivekitClient.connect(roomUrl, token)
|
|
33
|
+
*
|
|
34
|
+
* // Get room info
|
|
35
|
+
* const room = await manager.getRoom(sessionId)
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export class WebRTCSessionManager {
|
|
39
|
+
storage;
|
|
40
|
+
agentManager;
|
|
41
|
+
sessionManager;
|
|
42
|
+
/**
|
|
43
|
+
* Create a WebRTC session manager
|
|
44
|
+
*
|
|
45
|
+
* @param storage - DO storage interface
|
|
46
|
+
* @param agentManager - Voice agent manager
|
|
47
|
+
* @param sessionManager - Voice session manager
|
|
48
|
+
*/
|
|
49
|
+
constructor(storage, agentManager, sessionManager) {
|
|
50
|
+
this.storage = storage;
|
|
51
|
+
this.agentManager = agentManager;
|
|
52
|
+
this.sessionManager = sessionManager;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a new WebRTC session
|
|
56
|
+
*
|
|
57
|
+
* Creates a room and generates an access token for the participant.
|
|
58
|
+
*
|
|
59
|
+
* @param options - Session options
|
|
60
|
+
* @returns Session details including token and room URL
|
|
61
|
+
*/
|
|
62
|
+
async create(options) {
|
|
63
|
+
const { agentId, identity, displayName, audioOnly, autoConnect, metadata, transcription } = options;
|
|
64
|
+
// Get agent
|
|
65
|
+
const agent = await this.agentManager.get(agentId);
|
|
66
|
+
if (!agent) {
|
|
67
|
+
throw new Error(`Voice agent not found: ${agentId}`);
|
|
68
|
+
}
|
|
69
|
+
// Get provider adapter
|
|
70
|
+
const adapter = VoiceProviderFactory.get(agent.provider);
|
|
71
|
+
if (!adapter.createRoom) {
|
|
72
|
+
throw new Error(`Provider ${agent.provider} does not support WebRTC`);
|
|
73
|
+
}
|
|
74
|
+
// Get provider agent ID
|
|
75
|
+
const agentData = await this.storage.get(`voice_agent:${agentId}`);
|
|
76
|
+
if (!agentData?.providerAgentId) {
|
|
77
|
+
throw new Error(`Provider agent ID not found for: ${agentId}`);
|
|
78
|
+
}
|
|
79
|
+
// Create room via provider
|
|
80
|
+
const { token, roomUrl } = await adapter.createRoom(agentData.providerAgentId, identity);
|
|
81
|
+
// Extract room name from URL
|
|
82
|
+
const roomName = extractRoomName(roomUrl);
|
|
83
|
+
// Create voice session to track the call
|
|
84
|
+
const session = await this.sessionManager.createInbound(agentId, roomName, identity);
|
|
85
|
+
// Create config
|
|
86
|
+
const config = {
|
|
87
|
+
provider: agent.provider,
|
|
88
|
+
roomName,
|
|
89
|
+
identity,
|
|
90
|
+
audioOnly: audioOnly ?? true,
|
|
91
|
+
autoConnect: autoConnect ?? true,
|
|
92
|
+
token,
|
|
93
|
+
};
|
|
94
|
+
// Store room info
|
|
95
|
+
const room = {
|
|
96
|
+
name: roomName,
|
|
97
|
+
url: roomUrl,
|
|
98
|
+
sessionId: session.id,
|
|
99
|
+
agentId,
|
|
100
|
+
provider: agent.provider,
|
|
101
|
+
participants: [
|
|
102
|
+
{
|
|
103
|
+
identity,
|
|
104
|
+
displayName,
|
|
105
|
+
isAgent: false,
|
|
106
|
+
joinedAt: Date.now(),
|
|
107
|
+
connectionState: 'connecting',
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
createdAt: Date.now(),
|
|
111
|
+
status: 'active',
|
|
112
|
+
};
|
|
113
|
+
await this.storage.put(`webrtc_room:${roomName}`, room);
|
|
114
|
+
await this.storage.put(`webrtc_session:${session.id}`, roomName);
|
|
115
|
+
return {
|
|
116
|
+
sessionId: session.id,
|
|
117
|
+
roomName,
|
|
118
|
+
roomUrl,
|
|
119
|
+
token,
|
|
120
|
+
config,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get room information
|
|
125
|
+
*
|
|
126
|
+
* @param sessionId - Voice session ID
|
|
127
|
+
* @returns Room info or null if not found
|
|
128
|
+
*/
|
|
129
|
+
async getRoom(sessionId) {
|
|
130
|
+
const roomName = await this.storage.get(`webrtc_session:${sessionId}`);
|
|
131
|
+
if (!roomName)
|
|
132
|
+
return null;
|
|
133
|
+
const room = await this.storage.get(`webrtc_room:${roomName}`);
|
|
134
|
+
return room ?? null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get room by name
|
|
138
|
+
*
|
|
139
|
+
* @param roomName - Room name
|
|
140
|
+
* @returns Room info or null if not found
|
|
141
|
+
*/
|
|
142
|
+
async getRoomByName(roomName) {
|
|
143
|
+
const room = await this.storage.get(`webrtc_room:${roomName}`);
|
|
144
|
+
return room ?? null;
|
|
145
|
+
}
|
|
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
|
+
async generateToken(sessionId, identity) {
|
|
156
|
+
const room = await this.getRoom(sessionId);
|
|
157
|
+
if (!room) {
|
|
158
|
+
throw new Error(`Room not found for session: ${sessionId}`);
|
|
159
|
+
}
|
|
160
|
+
const agent = await this.agentManager.get(room.agentId);
|
|
161
|
+
if (!agent) {
|
|
162
|
+
throw new Error(`Voice agent not found: ${room.agentId}`);
|
|
163
|
+
}
|
|
164
|
+
const adapter = VoiceProviderFactory.get(agent.provider);
|
|
165
|
+
if (!adapter.createRoom) {
|
|
166
|
+
throw new Error(`Provider ${agent.provider} does not support WebRTC`);
|
|
167
|
+
}
|
|
168
|
+
const agentData = await this.storage.get(`voice_agent:${room.agentId}`);
|
|
169
|
+
if (!agentData?.providerAgentId) {
|
|
170
|
+
throw new Error(`Provider agent ID not found for: ${room.agentId}`);
|
|
171
|
+
}
|
|
172
|
+
// Create room returns new token (most providers allow re-joining existing rooms)
|
|
173
|
+
const { token } = await adapter.createRoom(agentData.providerAgentId, identity);
|
|
174
|
+
return token;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Update participant connection state
|
|
178
|
+
*
|
|
179
|
+
* Called from webhook when participant joins/leaves.
|
|
180
|
+
*
|
|
181
|
+
* @param roomName - Room name
|
|
182
|
+
* @param identity - Participant identity
|
|
183
|
+
* @param state - Connection state
|
|
184
|
+
*/
|
|
185
|
+
async updateParticipantState(roomName, identity, state) {
|
|
186
|
+
const room = await this.getRoomByName(roomName);
|
|
187
|
+
if (!room)
|
|
188
|
+
return;
|
|
189
|
+
const updated = {
|
|
190
|
+
...room,
|
|
191
|
+
participants: room.participants.map((p) => p.identity === identity ? { ...p, connectionState: state } : p),
|
|
192
|
+
};
|
|
193
|
+
await this.storage.put(`webrtc_room:${roomName}`, updated);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Add a participant to a room
|
|
197
|
+
*
|
|
198
|
+
* @param roomName - Room name
|
|
199
|
+
* @param participant - Participant info
|
|
200
|
+
*/
|
|
201
|
+
async addParticipant(roomName, participant) {
|
|
202
|
+
const room = await this.getRoomByName(roomName);
|
|
203
|
+
if (!room)
|
|
204
|
+
return;
|
|
205
|
+
const exists = room.participants.some((p) => p.identity === participant.identity);
|
|
206
|
+
if (exists) {
|
|
207
|
+
// Update existing participant
|
|
208
|
+
await this.updateParticipantState(roomName, participant.identity, participant.connectionState);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const updated = {
|
|
212
|
+
...room,
|
|
213
|
+
participants: [...room.participants, participant],
|
|
214
|
+
};
|
|
215
|
+
await this.storage.put(`webrtc_room:${roomName}`, updated);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Remove a participant from a room
|
|
219
|
+
*
|
|
220
|
+
* @param roomName - Room name
|
|
221
|
+
* @param identity - Participant identity
|
|
222
|
+
*/
|
|
223
|
+
async removeParticipant(roomName, identity) {
|
|
224
|
+
const room = await this.getRoomByName(roomName);
|
|
225
|
+
if (!room)
|
|
226
|
+
return;
|
|
227
|
+
const updated = {
|
|
228
|
+
...room,
|
|
229
|
+
participants: room.participants.filter((p) => p.identity !== identity),
|
|
230
|
+
};
|
|
231
|
+
await this.storage.put(`webrtc_room:${roomName}`, updated);
|
|
232
|
+
// If no human participants left, close the room
|
|
233
|
+
const humanParticipants = updated.participants.filter((p) => !p.isAgent);
|
|
234
|
+
if (humanParticipants.length === 0) {
|
|
235
|
+
await this.closeRoom(roomName);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Close a room
|
|
240
|
+
*
|
|
241
|
+
* @param roomName - Room name
|
|
242
|
+
*/
|
|
243
|
+
async closeRoom(roomName) {
|
|
244
|
+
const room = await this.getRoomByName(roomName);
|
|
245
|
+
if (!room)
|
|
246
|
+
return;
|
|
247
|
+
// Update room status
|
|
248
|
+
const updated = {
|
|
249
|
+
...room,
|
|
250
|
+
status: 'closed',
|
|
251
|
+
};
|
|
252
|
+
await this.storage.put(`webrtc_room:${roomName}`, updated);
|
|
253
|
+
// End the voice session
|
|
254
|
+
await this.sessionManager.end(room.sessionId);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* List active rooms
|
|
258
|
+
*
|
|
259
|
+
* @param agentId - Optional filter by agent
|
|
260
|
+
* @returns List of active rooms
|
|
261
|
+
*/
|
|
262
|
+
async listActiveRooms(agentId) {
|
|
263
|
+
const allRooms = await this.storage.list({ prefix: 'webrtc_room:' });
|
|
264
|
+
const rooms = [];
|
|
265
|
+
for (const [, room] of allRooms) {
|
|
266
|
+
if (room.status !== 'active')
|
|
267
|
+
continue;
|
|
268
|
+
if (agentId && room.agentId !== agentId)
|
|
269
|
+
continue;
|
|
270
|
+
rooms.push(room);
|
|
271
|
+
}
|
|
272
|
+
return rooms;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Clean up old/stale rooms
|
|
276
|
+
*
|
|
277
|
+
* Should be called periodically to clean up rooms that weren't
|
|
278
|
+
* properly closed.
|
|
279
|
+
*
|
|
280
|
+
* @param maxAge - Maximum age in milliseconds (default: 24 hours)
|
|
281
|
+
*/
|
|
282
|
+
async cleanup(maxAge = 24 * 60 * 60 * 1000) {
|
|
283
|
+
const cutoff = Date.now() - maxAge;
|
|
284
|
+
const allRooms = await this.storage.list({ prefix: 'webrtc_room:' });
|
|
285
|
+
let cleaned = 0;
|
|
286
|
+
for (const [key, room] of allRooms) {
|
|
287
|
+
if (room.createdAt < cutoff) {
|
|
288
|
+
await this.storage.delete(key);
|
|
289
|
+
await this.storage.delete(`webrtc_session:${room.sessionId}`);
|
|
290
|
+
cleaned++;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return cleaned;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// =============================================================================
|
|
297
|
+
// Helper Functions
|
|
298
|
+
// =============================================================================
|
|
299
|
+
/**
|
|
300
|
+
* Extract room name from room URL
|
|
301
|
+
*/
|
|
302
|
+
function extractRoomName(roomUrl) {
|
|
303
|
+
try {
|
|
304
|
+
const url = new URL(roomUrl);
|
|
305
|
+
// Most providers use the last path segment as room name
|
|
306
|
+
const parts = url.pathname.split('/').filter(Boolean);
|
|
307
|
+
return parts[parts.length - 1] || `room_${generateId()}`;
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
// If not a valid URL, use as-is or generate
|
|
311
|
+
return roomUrl || `room_${generateId()}`;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Generate a random ID
|
|
316
|
+
*/
|
|
317
|
+
function generateId() {
|
|
318
|
+
// TODO: Use nanoid
|
|
319
|
+
return Math.random().toString(36).substring(2, 15);
|
|
320
|
+
}
|
|
321
|
+
// =============================================================================
|
|
322
|
+
// Singleton Access
|
|
323
|
+
// =============================================================================
|
|
324
|
+
let defaultManager = null;
|
|
325
|
+
/**
|
|
326
|
+
* WebRTC session singleton access
|
|
327
|
+
*/
|
|
328
|
+
export const WebRTCSession = {
|
|
329
|
+
/**
|
|
330
|
+
* Initialize with dependencies
|
|
331
|
+
*/
|
|
332
|
+
init(storage, agentManager, sessionManager) {
|
|
333
|
+
defaultManager = new WebRTCSessionManager(storage, agentManager, sessionManager);
|
|
334
|
+
},
|
|
335
|
+
/**
|
|
336
|
+
* Create a WebRTC session
|
|
337
|
+
*/
|
|
338
|
+
async create(options) {
|
|
339
|
+
if (!defaultManager)
|
|
340
|
+
throw new Error('WebRTCSession not initialized');
|
|
341
|
+
return defaultManager.create(options);
|
|
342
|
+
},
|
|
343
|
+
/**
|
|
344
|
+
* Get room info
|
|
345
|
+
*/
|
|
346
|
+
async getRoom(sessionId) {
|
|
347
|
+
if (!defaultManager)
|
|
348
|
+
throw new Error('WebRTCSession not initialized');
|
|
349
|
+
return defaultManager.getRoom(sessionId);
|
|
350
|
+
},
|
|
351
|
+
/**
|
|
352
|
+
* Generate new token
|
|
353
|
+
*/
|
|
354
|
+
async generateToken(sessionId, identity) {
|
|
355
|
+
if (!defaultManager)
|
|
356
|
+
throw new Error('WebRTCSession not initialized');
|
|
357
|
+
return defaultManager.generateToken(sessionId, identity);
|
|
358
|
+
},
|
|
359
|
+
/**
|
|
360
|
+
* List active rooms
|
|
361
|
+
*/
|
|
362
|
+
async listActiveRooms(agentId) {
|
|
363
|
+
if (!defaultManager)
|
|
364
|
+
throw new Error('WebRTCSession not initialized');
|
|
365
|
+
return defaultManager.listActiveRooms(agentId);
|
|
366
|
+
},
|
|
367
|
+
};
|
|
368
|
+
// =============================================================================
|
|
369
|
+
// Type Exports
|
|
370
|
+
// =============================================================================
|
|
371
|
+
// Note: DurableObjectStorage is a Cloudflare Workers type, imported at runtime
|
|
372
|
+
//# sourceMappingURL=webrtc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webrtc.js","sourceRoot":"","sources":["../../../ai/voice/webrtc.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AA6FlD,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,oBAAoB;IASrB;IACA;IACA;IAVV;;;;;;OAMG;IACH,YACU,OAA6B,EAC7B,YAA+B,EAC/B,cAAmC;QAFnC,YAAO,GAAP,OAAO,CAAsB;QAC7B,iBAAY,GAAZ,YAAY,CAAmB;QAC/B,mBAAc,GAAd,cAAc,CAAqB;IAC1C,CAAC;IAEJ;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,CAAC,OAAmC;QAC9C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAA;QAEnG,YAAY;QACZ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAClD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAA;QACtD,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACxD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,0BAA0B,CAAC,CAAA;QACvE,CAAC;QAED,wBAAwB;QACxB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAA8B,eAAe,OAAO,EAAE,CAAC,CAAA;QAC/F,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAA;QAChE,CAAC;QAED,2BAA2B;QAC3B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;QAExF,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QAEzC,yCAAyC;QACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAEpF,gBAAgB;QAChB,MAAM,MAAM,GAAiB;YAC3B,QAAQ,EAAE,KAAK,CAAC,QAA0C;YAC1D,QAAQ;YACR,QAAQ;YACR,SAAS,EAAE,SAAS,IAAI,IAAI;YAC5B,WAAW,EAAE,WAAW,IAAI,IAAI;YAChC,KAAK;SACN,CAAA;QAED,kBAAkB;QAClB,MAAM,IAAI,GAAe;YACvB,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,OAAO;YACZ,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,YAAY,EAAE;gBACZ;oBACE,QAAQ;oBACR,WAAW;oBACX,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;oBACpB,eAAe,EAAE,YAAY;iBAC9B;aACF;YACD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,QAAQ;SACjB,CAAA;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;QACvD,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;QAEhE,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,QAAQ;YACR,OAAO;YACP,KAAK;YACL,MAAM;SACP,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAS,kBAAkB,SAAS,EAAE,CAAC,CAAA;QAC9E,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAA;QAE1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAa,eAAe,QAAQ,EAAE,CAAC,CAAA;QAC1E,OAAO,IAAI,IAAI,IAAI,CAAA;IACrB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAa,eAAe,QAAQ,EAAE,CAAC,CAAA;QAC1E,OAAO,IAAI,IAAI,IAAI,CAAA;IACrB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,QAAgB;QACrD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACvD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACxD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,0BAA0B,CAAC,CAAA;QACvE,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAA8B,eAAe,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QACpG,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QACrE,CAAC;QAED,iFAAiF;QACjF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;QAE/E,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,sBAAsB,CAC1B,QAAgB,EAChB,QAAgB,EAChB,KAA2C;QAE3C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,MAAM,OAAO,GAAe;YAC1B,GAAG,IAAI;YACP,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAC/D;SACF,CAAA;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;IAC5D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,WAA8B;QACnE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAA;QACjF,IAAI,MAAM,EAAE,CAAC;YACX,8BAA8B;YAC9B,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,eAAe,CAAC,CAAA;YAC9F,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAe;YAC1B,GAAG,IAAI;YACP,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;SAClD,CAAA;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;IAC5D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;QACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,MAAM,OAAO,GAAe;YAC1B,GAAG,IAAI;YACP,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;SACvE,CAAA;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;QAE1D,gDAAgD;QAChD,MAAM,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QACxE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS,CAAC,QAAgB;QAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,qBAAqB;QACrB,MAAM,OAAO,GAAe;YAC1B,GAAG,IAAI;YACP,MAAM,EAAE,QAAQ;SACjB,CAAA;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;QAE1D,wBAAwB;QACxB,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,OAAgB;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;QAEhF,MAAM,KAAK,GAAiB,EAAE,CAAA;QAC9B,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAQ;YACtC,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;gBAAE,SAAQ;YACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAA;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;QAEhF,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC9B,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;gBAC7D,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AAED,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;GAEG;AACH,SAAS,eAAe,CAAC,OAAe;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;QAC5B,wDAAwD;QACxD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACrD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,QAAQ,UAAU,EAAE,EAAE,CAAA;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;QAC5C,OAAO,OAAO,IAAI,QAAQ,UAAU,EAAE,EAAE,CAAA;IAC1C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU;IACjB,mBAAmB;IACnB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC;AAED,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,IAAI,cAAc,GAAgC,IAAI,CAAA;AAEtD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B;;OAEG;IACH,IAAI,CACF,OAA6B,EAC7B,YAA+B,EAC/B,cAAmC;QAEnC,cAAc,GAAG,IAAI,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,cAAc,CAAC,CAAA;IAClF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAmC;QAC9C,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACrE,OAAO,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACrE,OAAO,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,QAAgB;QACrD,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACrE,OAAO,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,OAAgB;QACpC,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACrE,OAAO,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;CACF,CAAA;AAED,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,+EAA+E"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DO API Module
|
|
3
|
+
*
|
|
4
|
+
* Hono-based API layer for Digital Objects.
|
|
5
|
+
* Provides REST, RPC, and MCP endpoints with composable middleware.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createApp } from './api'
|
|
10
|
+
*
|
|
11
|
+
* // Create the app with all defaults
|
|
12
|
+
* const app = createApp()
|
|
13
|
+
*
|
|
14
|
+
* // Or customize
|
|
15
|
+
* const app = createApp({
|
|
16
|
+
* cors: true,
|
|
17
|
+
* rateLimit: true,
|
|
18
|
+
* auth: false,
|
|
19
|
+
* })
|
|
20
|
+
*
|
|
21
|
+
* export default {
|
|
22
|
+
* fetch: app.fetch,
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { Hono } from 'hono';
|
|
27
|
+
import type { Env, DOContext } from './types';
|
|
28
|
+
/**
|
|
29
|
+
* App configuration options
|
|
30
|
+
*/
|
|
31
|
+
export interface AppConfig {
|
|
32
|
+
/** Enable CORS middleware (default: true) */
|
|
33
|
+
cors?: boolean;
|
|
34
|
+
/** Enable rate limiting (default: true) */
|
|
35
|
+
rateLimit?: boolean;
|
|
36
|
+
/** Enable authentication middleware (default: false) */
|
|
37
|
+
auth?: boolean;
|
|
38
|
+
/** Enable request logging (default: true in dev, false in prod) */
|
|
39
|
+
logging?: boolean;
|
|
40
|
+
/** Enable security headers (default: true) */
|
|
41
|
+
security?: boolean;
|
|
42
|
+
/** Custom middleware to add */
|
|
43
|
+
middleware?: Array<(c: unknown, next: () => Promise<void>) => Promise<void | Response>>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a fully configured Hono app for the DO API
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* // Basic usage - all defaults
|
|
50
|
+
* const app = createApp()
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* // Production setup
|
|
54
|
+
* const app = createApp({
|
|
55
|
+
* cors: true,
|
|
56
|
+
* rateLimit: true,
|
|
57
|
+
* auth: true,
|
|
58
|
+
* logging: false,
|
|
59
|
+
* security: true,
|
|
60
|
+
* })
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* // Development setup
|
|
64
|
+
* const app = createApp({
|
|
65
|
+
* cors: true,
|
|
66
|
+
* rateLimit: false,
|
|
67
|
+
* auth: false,
|
|
68
|
+
* logging: true,
|
|
69
|
+
* })
|
|
70
|
+
*/
|
|
71
|
+
export declare function createApp(config?: AppConfig): Hono<{
|
|
72
|
+
Bindings: Env;
|
|
73
|
+
Variables: DOContext;
|
|
74
|
+
}>;
|
|
75
|
+
/**
|
|
76
|
+
* Create a minimal app with just core middleware
|
|
77
|
+
* Useful for testing or when you want full control
|
|
78
|
+
*/
|
|
79
|
+
export declare function createMinimalApp(): Hono<{
|
|
80
|
+
Bindings: Env;
|
|
81
|
+
Variables: DOContext;
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* Create a production-ready app with all security features
|
|
85
|
+
*/
|
|
86
|
+
export declare function createProductionApp(): Hono<{
|
|
87
|
+
Bindings: Env;
|
|
88
|
+
Variables: DOContext;
|
|
89
|
+
}>;
|
|
90
|
+
/**
|
|
91
|
+
* Create a development app with logging and relaxed security
|
|
92
|
+
*/
|
|
93
|
+
export declare function createDevelopmentApp(): Hono<{
|
|
94
|
+
Bindings: Env;
|
|
95
|
+
Variables: DOContext;
|
|
96
|
+
}>;
|
|
97
|
+
export type { Env, DOContext, AuthUser, AuthOptions, AuthResult, APIResponse, APIErrorResponse, PaginatedResponse, PaginationInfo, RateLimitConfig, RateLimitInfo, CORSConfig, HealthCheckResponse, AIGenerateRequest, AIChatRequest, AIEmbedRequest, } from './types';
|
|
98
|
+
export { createAuthMiddleware, createApiKeyMiddleware, createCorsMiddleware, createDynamicCorsMiddleware, createRateLimitMiddleware, createAIRateLimitMiddleware, createWriteRateLimitMiddleware, createContextMiddleware, createLoggingMiddleware, createErrorMiddleware, createSecurityMiddleware, composeMiddleware, getUser, requireUser, hasRole, hasPermission, } from './middleware';
|
|
99
|
+
export { createHealthRoutes, createDORoutes, createAIRoutes, createRootRoute, createRPCRoutes, createAllRoutes, createRolesRoutes, } from './routes';
|
|
100
|
+
export { createMCPRoutes, getTools, handleListTools, handleToolCall, handleInitialize, } from './mcp';
|
|
101
|
+
export type { MCPServerInfo, MCPTool, MCPContent, MCPRequest, MCPToolCallResponse, MCPListToolsResponse, } from './mcp';
|
|
102
|
+
export default createApp;
|
|
103
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AA2B7C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,wDAAwD;IACxD,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAA;CACxF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,SAAS,CAAC,MAAM,GAAE,SAAc,GAAG,IAAI,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,CAAC,CA8F/F;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,CAAC,CAQhF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,CAAC,CAQnF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,CAAC,CAQpF;AAOD,YAAY,EACV,GAAG,EACH,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,2BAA2B,EAC3B,8BAA8B,EAC9B,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,OAAO,EACP,aAAa,GACd,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EAGf,iBAAiB,GAClB,MAAM,UAAU,CAAA;AAGjB,OAAO,EACL,eAAe,EACf,QAAQ,EACR,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,OAAO,CAAA;AAEd,YAAY,EACV,aAAa,EACb,OAAO,EACP,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,OAAO,CAAA;AAMd,eAAe,SAAS,CAAA"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DO API Module
|
|
3
|
+
*
|
|
4
|
+
* Hono-based API layer for Digital Objects.
|
|
5
|
+
* Provides REST, RPC, and MCP endpoints with composable middleware.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createApp } from './api'
|
|
10
|
+
*
|
|
11
|
+
* // Create the app with all defaults
|
|
12
|
+
* const app = createApp()
|
|
13
|
+
*
|
|
14
|
+
* // Or customize
|
|
15
|
+
* const app = createApp({
|
|
16
|
+
* cors: true,
|
|
17
|
+
* rateLimit: true,
|
|
18
|
+
* auth: false,
|
|
19
|
+
* })
|
|
20
|
+
*
|
|
21
|
+
* export default {
|
|
22
|
+
* fetch: app.fetch,
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { Hono } from 'hono';
|
|
27
|
+
// Middleware
|
|
28
|
+
import { createContextMiddleware, createErrorMiddleware, createLoggingMiddleware, createSecurityMiddleware, createCorsMiddleware, createRateLimitMiddleware, createAuthMiddleware, } from './middleware';
|
|
29
|
+
// Routes
|
|
30
|
+
import { createHealthRoutes } from './routes/health';
|
|
31
|
+
import { createDORoutes } from './routes/do';
|
|
32
|
+
import { createAIRoutes } from './routes/ai';
|
|
33
|
+
import { createRootRoute, createRPCRoutes } from './routes';
|
|
34
|
+
// Agents routes excluded from 0.0.1 - depends on workers module
|
|
35
|
+
// import { createAgentsRoutes } from './routes/agents'
|
|
36
|
+
import { createRolesRoutes } from './routes/roles';
|
|
37
|
+
import { createMCPRoutes } from './mcp';
|
|
38
|
+
// =============================================================================
|
|
39
|
+
// App Factory
|
|
40
|
+
// =============================================================================
|
|
41
|
+
/**
|
|
42
|
+
* Create a fully configured Hono app for the DO API
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* // Basic usage - all defaults
|
|
46
|
+
* const app = createApp()
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* // Production setup
|
|
50
|
+
* const app = createApp({
|
|
51
|
+
* cors: true,
|
|
52
|
+
* rateLimit: true,
|
|
53
|
+
* auth: true,
|
|
54
|
+
* logging: false,
|
|
55
|
+
* security: true,
|
|
56
|
+
* })
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* // Development setup
|
|
60
|
+
* const app = createApp({
|
|
61
|
+
* cors: true,
|
|
62
|
+
* rateLimit: false,
|
|
63
|
+
* auth: false,
|
|
64
|
+
* logging: true,
|
|
65
|
+
* })
|
|
66
|
+
*/
|
|
67
|
+
export function createApp(config = {}) {
|
|
68
|
+
const app = new Hono();
|
|
69
|
+
// ==========================================================================
|
|
70
|
+
// Core Middleware (always enabled)
|
|
71
|
+
// ==========================================================================
|
|
72
|
+
// Request context (request ID, timing, hostname)
|
|
73
|
+
app.use('*', createContextMiddleware());
|
|
74
|
+
// Error handling
|
|
75
|
+
app.use('*', createErrorMiddleware());
|
|
76
|
+
// ==========================================================================
|
|
77
|
+
// Optional Middleware
|
|
78
|
+
// ==========================================================================
|
|
79
|
+
// Logging (default: true)
|
|
80
|
+
if (config.logging !== false) {
|
|
81
|
+
app.use('*', createLoggingMiddleware({
|
|
82
|
+
skipPaths: ['/_health', '/favicon.ico'],
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
// Security headers (default: true)
|
|
86
|
+
if (config.security !== false) {
|
|
87
|
+
app.use('*', createSecurityMiddleware());
|
|
88
|
+
}
|
|
89
|
+
// CORS (default: true)
|
|
90
|
+
if (config.cors !== false) {
|
|
91
|
+
app.use('*', createCorsMiddleware());
|
|
92
|
+
}
|
|
93
|
+
// Rate limiting (default: true)
|
|
94
|
+
if (config.rateLimit !== false) {
|
|
95
|
+
app.use('*', createRateLimitMiddleware());
|
|
96
|
+
}
|
|
97
|
+
// Authentication (default: false - opt-in)
|
|
98
|
+
if (config.auth) {
|
|
99
|
+
app.use('*', createAuthMiddleware());
|
|
100
|
+
}
|
|
101
|
+
// Custom middleware
|
|
102
|
+
if (config.middleware) {
|
|
103
|
+
for (const mw of config.middleware) {
|
|
104
|
+
app.use('*', mw);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// ==========================================================================
|
|
108
|
+
// Routes
|
|
109
|
+
// ==========================================================================
|
|
110
|
+
// Health checks (first to ensure they're always fast)
|
|
111
|
+
app.route('/', createHealthRoutes());
|
|
112
|
+
// MCP routes
|
|
113
|
+
app.route('/', createMCPRoutes());
|
|
114
|
+
// RPC routes
|
|
115
|
+
app.route('/', createRPCRoutes());
|
|
116
|
+
// AI routes
|
|
117
|
+
app.route('/', createAIRoutes());
|
|
118
|
+
// Agents routes excluded from 0.0.1 - depends on workers module
|
|
119
|
+
// app.route('/', createAgentsRoutes())
|
|
120
|
+
// Roles routes (before generic DO routes for specific path matching)
|
|
121
|
+
app.route('/', createRolesRoutes());
|
|
122
|
+
// DO CRUD routes
|
|
123
|
+
app.route('/', createDORoutes());
|
|
124
|
+
// Root discovery (last to not interfere with other routes)
|
|
125
|
+
app.route('/', createRootRoute());
|
|
126
|
+
// ==========================================================================
|
|
127
|
+
// Catch-all: Route to DO
|
|
128
|
+
// ==========================================================================
|
|
129
|
+
app.all('*', async (c) => {
|
|
130
|
+
const url = new URL(c.req.url);
|
|
131
|
+
// Route to the appropriate DO
|
|
132
|
+
const doId = c.env.DO.idFromName(url.hostname);
|
|
133
|
+
const stub = c.env.DO.get(doId);
|
|
134
|
+
return stub.fetch(c.req.raw);
|
|
135
|
+
});
|
|
136
|
+
return app;
|
|
137
|
+
}
|
|
138
|
+
// =============================================================================
|
|
139
|
+
// Convenience Functions
|
|
140
|
+
// =============================================================================
|
|
141
|
+
/**
|
|
142
|
+
* Create a minimal app with just core middleware
|
|
143
|
+
* Useful for testing or when you want full control
|
|
144
|
+
*/
|
|
145
|
+
export function createMinimalApp() {
|
|
146
|
+
return createApp({
|
|
147
|
+
cors: false,
|
|
148
|
+
rateLimit: false,
|
|
149
|
+
auth: false,
|
|
150
|
+
logging: false,
|
|
151
|
+
security: false,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Create a production-ready app with all security features
|
|
156
|
+
*/
|
|
157
|
+
export function createProductionApp() {
|
|
158
|
+
return createApp({
|
|
159
|
+
cors: true,
|
|
160
|
+
rateLimit: true,
|
|
161
|
+
auth: true,
|
|
162
|
+
logging: false,
|
|
163
|
+
security: true,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Create a development app with logging and relaxed security
|
|
168
|
+
*/
|
|
169
|
+
export function createDevelopmentApp() {
|
|
170
|
+
return createApp({
|
|
171
|
+
cors: true,
|
|
172
|
+
rateLimit: false,
|
|
173
|
+
auth: false,
|
|
174
|
+
logging: true,
|
|
175
|
+
security: false,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
// Middleware
|
|
179
|
+
export { createAuthMiddleware, createApiKeyMiddleware, createCorsMiddleware, createDynamicCorsMiddleware, createRateLimitMiddleware, createAIRateLimitMiddleware, createWriteRateLimitMiddleware, createContextMiddleware, createLoggingMiddleware, createErrorMiddleware, createSecurityMiddleware, composeMiddleware, getUser, requireUser, hasRole, hasPermission, } from './middleware';
|
|
180
|
+
// Routes
|
|
181
|
+
export { createHealthRoutes, createDORoutes, createAIRoutes, createRootRoute, createRPCRoutes, createAllRoutes,
|
|
182
|
+
// Agents routes excluded from 0.0.1 - depends on workers module
|
|
183
|
+
// createAgentsRoutes,
|
|
184
|
+
createRolesRoutes, } from './routes';
|
|
185
|
+
// MCP
|
|
186
|
+
export { createMCPRoutes, getTools, handleListTools, handleToolCall, handleInitialize, } from './mcp';
|
|
187
|
+
// =============================================================================
|
|
188
|
+
// Default Export
|
|
189
|
+
// =============================================================================
|
|
190
|
+
export default createApp;
|
|
191
|
+
//# sourceMappingURL=index.js.map
|