@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,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration Operations
|
|
3
|
+
*
|
|
4
|
+
* Move Digital Objects between colos. Use when usage patterns change
|
|
5
|
+
* or for optimization.
|
|
6
|
+
*
|
|
7
|
+
* @module colo/migrate
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Migrate this DO to another colo
|
|
11
|
+
*
|
|
12
|
+
* Moves the primary DO to a different geographic location. This is useful when:
|
|
13
|
+
* - User patterns shift (e.g., most users now in Asia instead of US)
|
|
14
|
+
* - Optimizing for latency based on analytics
|
|
15
|
+
* - Meeting new jurisdiction requirements
|
|
16
|
+
*
|
|
17
|
+
* **Graceful Strategy** (default):
|
|
18
|
+
* 1. Stop accepting new writes
|
|
19
|
+
* 2. Wait for in-flight requests to complete
|
|
20
|
+
* 3. Transfer all state to new location
|
|
21
|
+
* 4. Update routing to point to new location
|
|
22
|
+
* 5. Resume normal operation
|
|
23
|
+
*
|
|
24
|
+
* **Immediate Strategy**:
|
|
25
|
+
* 1. Snapshot current state
|
|
26
|
+
* 2. Create new DO in target colo with snapshot
|
|
27
|
+
* 3. Immediately switch routing
|
|
28
|
+
* 4. In-flight requests to old location may fail
|
|
29
|
+
*
|
|
30
|
+
* @param state - The DurableObjectState instance
|
|
31
|
+
* @param env - Environment bindings
|
|
32
|
+
* @param targetColo - IATA code of target colo (e.g., 'fra', 'nrt')
|
|
33
|
+
* @param options - Migration configuration options
|
|
34
|
+
* @throws ColoError if target colo is invalid or migration fails
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* // Graceful migration (recommended)
|
|
39
|
+
* await migrateDO(state, env, 'nrt', {
|
|
40
|
+
* strategy: 'graceful',
|
|
41
|
+
* timeout: 30000,
|
|
42
|
+
* })
|
|
43
|
+
*
|
|
44
|
+
* // Immediate migration (faster but riskier)
|
|
45
|
+
* await migrateDO(state, env, 'nrt', {
|
|
46
|
+
* strategy: 'immediate',
|
|
47
|
+
* })
|
|
48
|
+
*
|
|
49
|
+
* // Fire and forget (don't wait for completion)
|
|
50
|
+
* await migrateDO(state, env, 'fra', {
|
|
51
|
+
* wait: false,
|
|
52
|
+
* })
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export async function migrateDO(state, env, targetColo, options) {
|
|
56
|
+
// TODO: Implement migrateDO
|
|
57
|
+
//
|
|
58
|
+
// 1. Validate target colo
|
|
59
|
+
// - Use isValidColo() to check
|
|
60
|
+
// - Throw INVALID_COLO error if invalid
|
|
61
|
+
//
|
|
62
|
+
// 2. Resolve options with defaults
|
|
63
|
+
//
|
|
64
|
+
// 3. Emit MIGRATION_STARTED event
|
|
65
|
+
//
|
|
66
|
+
// 4. Based on strategy:
|
|
67
|
+
// Graceful:
|
|
68
|
+
// a. Set state to 'preparing'
|
|
69
|
+
// b. Set state to 'draining', reject new writes
|
|
70
|
+
// c. Wait for in-flight requests (with timeout)
|
|
71
|
+
// d. Set state to 'transferring', export all storage
|
|
72
|
+
// e. Create new DO in target colo
|
|
73
|
+
// f. Transfer state to new DO
|
|
74
|
+
// g. Set state to 'switching', update routing
|
|
75
|
+
// h. Set state to 'completed'
|
|
76
|
+
//
|
|
77
|
+
// Immediate:
|
|
78
|
+
// a. Snapshot current state
|
|
79
|
+
// b. Create new DO in target colo
|
|
80
|
+
// c. Transfer snapshot
|
|
81
|
+
// d. Switch routing immediately
|
|
82
|
+
//
|
|
83
|
+
// 5. Emit MIGRATION_COMPLETED or MIGRATION_FAILED event
|
|
84
|
+
//
|
|
85
|
+
throw new Error('Not implemented');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Apply default values to migrate options
|
|
89
|
+
*
|
|
90
|
+
* @param options - Partial options from caller
|
|
91
|
+
* @returns Fully resolved options with defaults
|
|
92
|
+
*/
|
|
93
|
+
export function resolveMigrateOptions(options) {
|
|
94
|
+
return {
|
|
95
|
+
wait: options?.wait ?? true,
|
|
96
|
+
timeout: options?.timeout ?? 60000,
|
|
97
|
+
strategy: options?.strategy ?? 'graceful',
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get the current migration status
|
|
102
|
+
*
|
|
103
|
+
* @param state - The DurableObjectState instance
|
|
104
|
+
* @returns Current migration status or null if no migration in progress
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* const status = await getMigrationStatus(state)
|
|
109
|
+
* if (status) {
|
|
110
|
+
* console.log(`Migration ${status.progress}% complete`)
|
|
111
|
+
* console.log(`${status.entriesTransferred}/${status.totalEntries} entries`)
|
|
112
|
+
* }
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export async function getMigrationStatus(state) {
|
|
116
|
+
// TODO: Implement getMigrationStatus
|
|
117
|
+
//
|
|
118
|
+
// 1. Get migration status from storage
|
|
119
|
+
// 2. Return null if no migration in progress
|
|
120
|
+
// 3. Return status object
|
|
121
|
+
//
|
|
122
|
+
throw new Error('Not implemented');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Cancel an in-progress migration
|
|
126
|
+
*
|
|
127
|
+
* Can only cancel migrations that haven't reached the 'switching' state.
|
|
128
|
+
* Graceful migrations in 'draining' or 'transferring' state can be cancelled.
|
|
129
|
+
*
|
|
130
|
+
* @param state - The DurableObjectState instance
|
|
131
|
+
* @throws ColoError if no migration in progress or migration cannot be cancelled
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```typescript
|
|
135
|
+
* await cancelMigration(state)
|
|
136
|
+
* // Migration cancelled, DO remains in original colo
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
export async function cancelMigration(state) {
|
|
140
|
+
// TODO: Implement cancelMigration
|
|
141
|
+
//
|
|
142
|
+
// 1. Get current migration status
|
|
143
|
+
// 2. Validate migration can be cancelled (not in 'switching' or 'completed')
|
|
144
|
+
// 3. Clean up any partially transferred state
|
|
145
|
+
// 4. Reset migration status
|
|
146
|
+
// 5. Resume normal operation
|
|
147
|
+
//
|
|
148
|
+
throw new Error('Not implemented');
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Drain in-flight requests during graceful migration
|
|
152
|
+
*
|
|
153
|
+
* Waits for active requests to complete before proceeding with state transfer.
|
|
154
|
+
*
|
|
155
|
+
* @param state - The DurableObjectState instance
|
|
156
|
+
* @param timeout - Maximum time to wait in ms
|
|
157
|
+
* @returns True if all requests drained, false if timeout
|
|
158
|
+
*/
|
|
159
|
+
export async function drainRequests(state, timeout) {
|
|
160
|
+
// TODO: Implement drainRequests
|
|
161
|
+
//
|
|
162
|
+
// 1. Track active request count
|
|
163
|
+
// 2. Reject new requests with appropriate status
|
|
164
|
+
// 3. Wait for active count to reach 0
|
|
165
|
+
// 4. Return true if drained, false if timeout
|
|
166
|
+
//
|
|
167
|
+
throw new Error('Not implemented');
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Transfer state to a new DO location
|
|
171
|
+
*
|
|
172
|
+
* Exports all storage entries and sends them to the target DO.
|
|
173
|
+
*
|
|
174
|
+
* @param state - Source DO state
|
|
175
|
+
* @param targetRef - Reference to target DO
|
|
176
|
+
* @param onProgress - Optional callback for progress updates
|
|
177
|
+
* @returns Number of entries transferred
|
|
178
|
+
*/
|
|
179
|
+
export async function transferState(state, targetRef, onProgress) {
|
|
180
|
+
// TODO: Implement transferState
|
|
181
|
+
//
|
|
182
|
+
// 1. List all storage entries
|
|
183
|
+
// 2. Batch entries for efficient transfer
|
|
184
|
+
// 3. Send batches to target DO
|
|
185
|
+
// 4. Call onProgress callback after each batch
|
|
186
|
+
// 5. Return total count
|
|
187
|
+
//
|
|
188
|
+
throw new Error('Not implemented');
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../do/colo/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6DH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAAyB,EACzB,GAAY,EACZ,UAAkB,EAClB,OAAwB;IAExB,4BAA4B;IAC5B,EAAE;IACF,0BAA0B;IAC1B,kCAAkC;IAClC,2CAA2C;IAC3C,EAAE;IACF,mCAAmC;IACnC,EAAE;IACF,kCAAkC;IAClC,EAAE;IACF,wBAAwB;IACxB,eAAe;IACf,mCAAmC;IACnC,qDAAqD;IACrD,qDAAqD;IACrD,0DAA0D;IAC1D,uCAAuC;IACvC,mCAAmC;IACnC,mDAAmD;IACnD,mCAAmC;IACnC,EAAE;IACF,gBAAgB;IAChB,iCAAiC;IACjC,uCAAuC;IACvC,4BAA4B;IAC5B,qCAAqC;IACrC,EAAE;IACF,wDAAwD;IACxD,EAAE;IACF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAwB;IAC5D,OAAO;QACL,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI;QAC3B,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK;QAClC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,UAAU;KAC1C,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAyB;IAEzB,qCAAqC;IACrC,EAAE;IACF,uCAAuC;IACvC,6CAA6C;IAC7C,0BAA0B;IAC1B,EAAE;IACF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAyB;IAC7D,kCAAkC;IAClC,EAAE;IACF,kCAAkC;IAClC,6EAA6E;IAC7E,8CAA8C;IAC9C,4BAA4B;IAC5B,6BAA6B;IAC7B,EAAE;IACF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAyB,EACzB,OAAe;IAEf,gCAAgC;IAChC,EAAE;IACF,gCAAgC;IAChC,iDAAiD;IACjD,sCAAsC;IACtC,8CAA8C;IAC9C,EAAE;IACF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAyB,EACzB,SAA2B,EAC3B,UAAyD;IAEzD,gCAAgC;IAChC,EAAE;IACF,8BAA8B;IAC9B,0CAA0C;IAC1C,+BAA+B;IAC/B,+CAA+C;IAC/C,wBAAwB;IACxB,EAAE;IACF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;AACpC,CAAC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Colo-Aware Routing
|
|
3
|
+
*
|
|
4
|
+
* Find the best colo for a given location, measure latency, and route
|
|
5
|
+
* requests to the optimal replica.
|
|
6
|
+
*
|
|
7
|
+
* @module colo/routing
|
|
8
|
+
*/
|
|
9
|
+
import type { ColoInfo, Region, LocationHint, JurisdictionConfig } from '../../types/colo';
|
|
10
|
+
import type { DigitalObjectRef } from '../../types/identity';
|
|
11
|
+
/**
|
|
12
|
+
* Ping result with timing information
|
|
13
|
+
*/
|
|
14
|
+
export interface PingResult {
|
|
15
|
+
/** Target colo */
|
|
16
|
+
colo: string;
|
|
17
|
+
/** Round-trip time in ms */
|
|
18
|
+
latency: number;
|
|
19
|
+
/** Whether the colo is reachable */
|
|
20
|
+
reachable: boolean;
|
|
21
|
+
/** Error message if not reachable */
|
|
22
|
+
error?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Routing decision result
|
|
26
|
+
*/
|
|
27
|
+
export interface RoutingDecision {
|
|
28
|
+
/** Recommended DO reference to route to */
|
|
29
|
+
target: DigitalObjectRef;
|
|
30
|
+
/** Colo of the target */
|
|
31
|
+
colo: string;
|
|
32
|
+
/** Estimated latency to target */
|
|
33
|
+
estimatedLatency: number;
|
|
34
|
+
/** Reason for this routing decision */
|
|
35
|
+
reason: 'nearest' | 'lowest-latency' | 'jurisdiction' | 'fallback';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Find the nearest colo to a given geographic location
|
|
39
|
+
*
|
|
40
|
+
* Uses the Haversine formula to calculate great-circle distance between
|
|
41
|
+
* the given coordinates and known colo locations.
|
|
42
|
+
*
|
|
43
|
+
* @param latitude - Latitude of the target location
|
|
44
|
+
* @param longitude - Longitude of the target location
|
|
45
|
+
* @param filter - Optional region filter or jurisdiction config
|
|
46
|
+
* @returns ColoInfo for the nearest colo
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* // Find nearest colo to Tokyo
|
|
51
|
+
* const nearest = await findNearestColo(35.6762, 139.6503)
|
|
52
|
+
* // { colo: 'nrt', region: 'apac', city: 'Tokyo', ... }
|
|
53
|
+
*
|
|
54
|
+
* // Find nearest colo in Europe only
|
|
55
|
+
* const nearestEU = await findNearestColo(48.8566, 2.3522, 'weur')
|
|
56
|
+
* // { colo: 'cdg', region: 'weur', city: 'Paris', ... }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function findNearestColo(latitude: number, longitude: number, filter?: Region | JurisdictionConfig): Promise<ColoInfo>;
|
|
60
|
+
/**
|
|
61
|
+
* Ping a colo to measure latency
|
|
62
|
+
*
|
|
63
|
+
* Sends a lightweight request to a colo to measure round-trip time.
|
|
64
|
+
* Useful for runtime latency-based routing decisions.
|
|
65
|
+
*
|
|
66
|
+
* @param colo - IATA code of the colo to ping
|
|
67
|
+
* @returns Ping result with latency
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const result = await pingColo('fra')
|
|
72
|
+
* console.log(`Latency to Frankfurt: ${result.latency}ms`)
|
|
73
|
+
*
|
|
74
|
+
* // Check multiple colos
|
|
75
|
+
* const colos = ['iad', 'fra', 'nrt']
|
|
76
|
+
* const results = await Promise.all(colos.map(pingColo))
|
|
77
|
+
* const fastest = results.reduce((a, b) => a.latency < b.latency ? a : b)
|
|
78
|
+
* console.log(`Fastest colo: ${fastest.colo} (${fastest.latency}ms)`)
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function pingColo(colo: string): Promise<PingResult>;
|
|
82
|
+
/**
|
|
83
|
+
* Ping multiple colos in parallel
|
|
84
|
+
*
|
|
85
|
+
* @param colos - Array of colo codes to ping
|
|
86
|
+
* @returns Array of ping results
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* const results = await pingColos(['iad', 'fra', 'nrt', 'sin'])
|
|
91
|
+
* const sorted = results.sort((a, b) => a.latency - b.latency)
|
|
92
|
+
* console.log(`Fastest: ${sorted[0].colo} at ${sorted[0].latency}ms`)
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function pingColos(colos: string[]): Promise<PingResult[]>;
|
|
96
|
+
/**
|
|
97
|
+
* Make a routing decision based on location and available replicas
|
|
98
|
+
*
|
|
99
|
+
* Determines the best replica to route a request to based on the client's
|
|
100
|
+
* location, available replicas, and any jurisdiction constraints.
|
|
101
|
+
*
|
|
102
|
+
* @param hint - Location hint from the request
|
|
103
|
+
* @param replicas - Available replica references with their colos
|
|
104
|
+
* @param jurisdiction - Optional jurisdiction constraints
|
|
105
|
+
* @returns Routing decision with target reference
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* const decision = await route(
|
|
110
|
+
* { clientIp: request.headers.get('cf-connecting-ip') },
|
|
111
|
+
* [
|
|
112
|
+
* { ref: 'https://...', colo: 'iad' },
|
|
113
|
+
* { ref: 'https://...', colo: 'fra' },
|
|
114
|
+
* { ref: 'https://...', colo: 'nrt' },
|
|
115
|
+
* ]
|
|
116
|
+
* )
|
|
117
|
+
*
|
|
118
|
+
* // Route to the recommended target
|
|
119
|
+
* const response = await fetch(decision.target, request)
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export declare function route(hint: LocationHint, replicas: Array<{
|
|
123
|
+
ref: DigitalObjectRef;
|
|
124
|
+
colo: string;
|
|
125
|
+
}>, jurisdiction?: JurisdictionConfig): Promise<RoutingDecision>;
|
|
126
|
+
/**
|
|
127
|
+
* Calculate the great-circle distance between two points
|
|
128
|
+
*
|
|
129
|
+
* Uses the Haversine formula for accurate distance calculation.
|
|
130
|
+
*
|
|
131
|
+
* @param lat1 - Latitude of first point
|
|
132
|
+
* @param lon1 - Longitude of first point
|
|
133
|
+
* @param lat2 - Latitude of second point
|
|
134
|
+
* @param lon2 - Longitude of second point
|
|
135
|
+
* @returns Distance in kilometers
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```typescript
|
|
139
|
+
* // Distance from New York to London
|
|
140
|
+
* const distance = haversineDistance(40.7128, -74.0060, 51.5074, -0.1278)
|
|
141
|
+
* // ~5570 km
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
export declare function haversineDistance(lat1: number, lon1: number, lat2: number, lon2: number): number;
|
|
145
|
+
/**
|
|
146
|
+
* Estimate latency based on geographic distance
|
|
147
|
+
*
|
|
148
|
+
* Uses a simple model: base latency + distance-based latency.
|
|
149
|
+
* This is a rough estimate; use pingColo for actual measurements.
|
|
150
|
+
*
|
|
151
|
+
* @param distanceKm - Distance in kilometers
|
|
152
|
+
* @returns Estimated latency in milliseconds
|
|
153
|
+
*/
|
|
154
|
+
export declare function estimateLatency(distanceKm: number): number;
|
|
155
|
+
/**
|
|
156
|
+
* Check if a colo is allowed by jurisdiction config
|
|
157
|
+
*
|
|
158
|
+
* @param colo - Colo to check
|
|
159
|
+
* @param config - Jurisdiction configuration
|
|
160
|
+
* @returns True if colo is allowed
|
|
161
|
+
*/
|
|
162
|
+
export declare function isColoAllowedByJurisdiction(colo: string, config: JurisdictionConfig): boolean;
|
|
163
|
+
/**
|
|
164
|
+
* Get all colos in a region
|
|
165
|
+
*
|
|
166
|
+
* @param region - Region code
|
|
167
|
+
* @returns Array of colo codes in the region
|
|
168
|
+
*/
|
|
169
|
+
export declare function getColosInRegion(region: Region): string[];
|
|
170
|
+
/**
|
|
171
|
+
* Sort colos by distance from a location
|
|
172
|
+
*
|
|
173
|
+
* @param latitude - Origin latitude
|
|
174
|
+
* @param longitude - Origin longitude
|
|
175
|
+
* @param colos - Colos to sort (defaults to all known colos)
|
|
176
|
+
* @returns Colos sorted by distance (nearest first)
|
|
177
|
+
*/
|
|
178
|
+
export declare function sortColosByDistance(latitude: number, longitude: number, colos?: string[]): Array<{
|
|
179
|
+
colo: string;
|
|
180
|
+
distance: number;
|
|
181
|
+
}>;
|
|
182
|
+
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../../do/colo/routing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAG5D;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,MAAM,EAAE,gBAAgB,CAAA;IACxB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,gBAAgB,EAAE,MAAM,CAAA;IACxB,uCAAuC;IACvC,MAAM,EAAE,SAAS,GAAG,gBAAgB,GAAG,cAAc,GAAG,UAAU,CAAA;CACnE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GAAG,kBAAkB,GACnC,OAAO,CAAC,QAAQ,CAAC,CASnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAUhE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAEtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,KAAK,CACzB,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACxD,YAAY,CAAC,EAAE,kBAAkB,GAChC,OAAO,CAAC,eAAe,CAAC,CAW1B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,CAeR;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAU1D;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,kBAAkB,GACzB,OAAO,CA+BT;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAezD;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAe3C"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Colo-Aware Routing
|
|
3
|
+
*
|
|
4
|
+
* Find the best colo for a given location, measure latency, and route
|
|
5
|
+
* requests to the optimal replica.
|
|
6
|
+
*
|
|
7
|
+
* @module colo/routing
|
|
8
|
+
*/
|
|
9
|
+
import { COLO_METADATA, getRegionForColo } from './info';
|
|
10
|
+
/**
|
|
11
|
+
* Find the nearest colo to a given geographic location
|
|
12
|
+
*
|
|
13
|
+
* Uses the Haversine formula to calculate great-circle distance between
|
|
14
|
+
* the given coordinates and known colo locations.
|
|
15
|
+
*
|
|
16
|
+
* @param latitude - Latitude of the target location
|
|
17
|
+
* @param longitude - Longitude of the target location
|
|
18
|
+
* @param filter - Optional region filter or jurisdiction config
|
|
19
|
+
* @returns ColoInfo for the nearest colo
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* // Find nearest colo to Tokyo
|
|
24
|
+
* const nearest = await findNearestColo(35.6762, 139.6503)
|
|
25
|
+
* // { colo: 'nrt', region: 'apac', city: 'Tokyo', ... }
|
|
26
|
+
*
|
|
27
|
+
* // Find nearest colo in Europe only
|
|
28
|
+
* const nearestEU = await findNearestColo(48.8566, 2.3522, 'weur')
|
|
29
|
+
* // { colo: 'cdg', region: 'weur', city: 'Paris', ... }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export async function findNearestColo(latitude, longitude, filter) {
|
|
33
|
+
// TODO: Implement findNearestColo
|
|
34
|
+
//
|
|
35
|
+
// 1. Get list of candidate colos (filtered if region specified)
|
|
36
|
+
// 2. If JurisdictionConfig provided, filter by allowed/blocked
|
|
37
|
+
// 3. Calculate distance to each colo using haversineDistance
|
|
38
|
+
// 4. Return colo with minimum distance
|
|
39
|
+
//
|
|
40
|
+
throw new Error('Not implemented');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Ping a colo to measure latency
|
|
44
|
+
*
|
|
45
|
+
* Sends a lightweight request to a colo to measure round-trip time.
|
|
46
|
+
* Useful for runtime latency-based routing decisions.
|
|
47
|
+
*
|
|
48
|
+
* @param colo - IATA code of the colo to ping
|
|
49
|
+
* @returns Ping result with latency
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const result = await pingColo('fra')
|
|
54
|
+
* console.log(`Latency to Frankfurt: ${result.latency}ms`)
|
|
55
|
+
*
|
|
56
|
+
* // Check multiple colos
|
|
57
|
+
* const colos = ['iad', 'fra', 'nrt']
|
|
58
|
+
* const results = await Promise.all(colos.map(pingColo))
|
|
59
|
+
* const fastest = results.reduce((a, b) => a.latency < b.latency ? a : b)
|
|
60
|
+
* console.log(`Fastest colo: ${fastest.colo} (${fastest.latency}ms)`)
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export async function pingColo(colo) {
|
|
64
|
+
// TODO: Implement pingColo
|
|
65
|
+
//
|
|
66
|
+
// 1. Validate colo code
|
|
67
|
+
// 2. Record start time
|
|
68
|
+
// 3. Send ping request to colo
|
|
69
|
+
// 4. Calculate round-trip time
|
|
70
|
+
// 5. Return result
|
|
71
|
+
//
|
|
72
|
+
throw new Error('Not implemented');
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Ping multiple colos in parallel
|
|
76
|
+
*
|
|
77
|
+
* @param colos - Array of colo codes to ping
|
|
78
|
+
* @returns Array of ping results
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const results = await pingColos(['iad', 'fra', 'nrt', 'sin'])
|
|
83
|
+
* const sorted = results.sort((a, b) => a.latency - b.latency)
|
|
84
|
+
* console.log(`Fastest: ${sorted[0].colo} at ${sorted[0].latency}ms`)
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export async function pingColos(colos) {
|
|
88
|
+
return Promise.all(colos.map(pingColo));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Make a routing decision based on location and available replicas
|
|
92
|
+
*
|
|
93
|
+
* Determines the best replica to route a request to based on the client's
|
|
94
|
+
* location, available replicas, and any jurisdiction constraints.
|
|
95
|
+
*
|
|
96
|
+
* @param hint - Location hint from the request
|
|
97
|
+
* @param replicas - Available replica references with their colos
|
|
98
|
+
* @param jurisdiction - Optional jurisdiction constraints
|
|
99
|
+
* @returns Routing decision with target reference
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const decision = await route(
|
|
104
|
+
* { clientIp: request.headers.get('cf-connecting-ip') },
|
|
105
|
+
* [
|
|
106
|
+
* { ref: 'https://...', colo: 'iad' },
|
|
107
|
+
* { ref: 'https://...', colo: 'fra' },
|
|
108
|
+
* { ref: 'https://...', colo: 'nrt' },
|
|
109
|
+
* ]
|
|
110
|
+
* )
|
|
111
|
+
*
|
|
112
|
+
* // Route to the recommended target
|
|
113
|
+
* const response = await fetch(decision.target, request)
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export async function route(hint, replicas, jurisdiction) {
|
|
117
|
+
// TODO: Implement route
|
|
118
|
+
//
|
|
119
|
+
// 1. If hint.colo specified, try to match directly
|
|
120
|
+
// 2. If hint.region specified, filter replicas to that region
|
|
121
|
+
// 3. If hint.clientIp, geo-locate IP and find nearest
|
|
122
|
+
// 4. If hint.coordinates, use findNearestColo
|
|
123
|
+
// 5. Apply jurisdiction constraints
|
|
124
|
+
// 6. Return routing decision with reason
|
|
125
|
+
//
|
|
126
|
+
throw new Error('Not implemented');
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Calculate the great-circle distance between two points
|
|
130
|
+
*
|
|
131
|
+
* Uses the Haversine formula for accurate distance calculation.
|
|
132
|
+
*
|
|
133
|
+
* @param lat1 - Latitude of first point
|
|
134
|
+
* @param lon1 - Longitude of first point
|
|
135
|
+
* @param lat2 - Latitude of second point
|
|
136
|
+
* @param lon2 - Longitude of second point
|
|
137
|
+
* @returns Distance in kilometers
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* // Distance from New York to London
|
|
142
|
+
* const distance = haversineDistance(40.7128, -74.0060, 51.5074, -0.1278)
|
|
143
|
+
* // ~5570 km
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
export function haversineDistance(lat1, lon1, lat2, lon2) {
|
|
147
|
+
const R = 6371; // Earth radius in kilometers
|
|
148
|
+
const toRad = (deg) => (deg * Math.PI) / 180;
|
|
149
|
+
const dLat = toRad(lat2 - lat1);
|
|
150
|
+
const dLon = toRad(lon2 - lon1);
|
|
151
|
+
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
|
|
152
|
+
Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
|
|
153
|
+
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
154
|
+
return R * c;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Estimate latency based on geographic distance
|
|
158
|
+
*
|
|
159
|
+
* Uses a simple model: base latency + distance-based latency.
|
|
160
|
+
* This is a rough estimate; use pingColo for actual measurements.
|
|
161
|
+
*
|
|
162
|
+
* @param distanceKm - Distance in kilometers
|
|
163
|
+
* @returns Estimated latency in milliseconds
|
|
164
|
+
*/
|
|
165
|
+
export function estimateLatency(distanceKm) {
|
|
166
|
+
// Base latency (processing, serialization, etc.)
|
|
167
|
+
const baseLatency = 10;
|
|
168
|
+
// Speed of light in fiber: ~200,000 km/s
|
|
169
|
+
// Round trip, so divide by 100,000 km/s
|
|
170
|
+
const propagationLatency = distanceKm / 100;
|
|
171
|
+
// Add some overhead for network hops (~20%)
|
|
172
|
+
return Math.round((baseLatency + propagationLatency) * 1.2);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Check if a colo is allowed by jurisdiction config
|
|
176
|
+
*
|
|
177
|
+
* @param colo - Colo to check
|
|
178
|
+
* @param config - Jurisdiction configuration
|
|
179
|
+
* @returns True if colo is allowed
|
|
180
|
+
*/
|
|
181
|
+
export function isColoAllowedByJurisdiction(colo, config) {
|
|
182
|
+
// Check blocked colos
|
|
183
|
+
if (config.blockedColos?.includes(colo.toLowerCase())) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
// Check allowed colos (if specified, must be in list)
|
|
187
|
+
if (config.allowedColos && !config.allowedColos.includes(colo.toLowerCase())) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
// Check region
|
|
191
|
+
const region = getRegionForColo(colo);
|
|
192
|
+
if (region) {
|
|
193
|
+
if (config.blockedRegions?.includes(region)) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
if (config.allowedRegions && !config.allowedRegions.includes(region)) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Check country
|
|
201
|
+
const metadata = COLO_METADATA[colo.toLowerCase()];
|
|
202
|
+
if (metadata && config.requiredCountries) {
|
|
203
|
+
if (!config.requiredCountries.includes(metadata.country)) {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get all colos in a region
|
|
211
|
+
*
|
|
212
|
+
* @param region - Region code
|
|
213
|
+
* @returns Array of colo codes in the region
|
|
214
|
+
*/
|
|
215
|
+
export function getColosInRegion(region) {
|
|
216
|
+
// TODO: Import REGIONS from types at module level when implementing
|
|
217
|
+
// For now, use the inline data
|
|
218
|
+
const regionColos = {
|
|
219
|
+
wnam: ['sjc', 'lax', 'sea', 'den', 'phx', 'pdx', 'yvr'],
|
|
220
|
+
enam: ['iad', 'dfw', 'atl', 'ord', 'mia', 'yyz', 'bos', 'jfk'],
|
|
221
|
+
sam: ['gru', 'eze', 'scl', 'bog'],
|
|
222
|
+
weur: ['lhr', 'cdg', 'fra', 'ams', 'dub', 'mad', 'lis'],
|
|
223
|
+
eeur: ['waw', 'bud', 'prg', 'vie'],
|
|
224
|
+
apac: ['nrt', 'sin', 'hkg', 'bom', 'del', 'icn', 'kix'],
|
|
225
|
+
oc: ['syd', 'mel', 'akl', 'per'],
|
|
226
|
+
afr: ['jnb', 'cpt', 'nbo'],
|
|
227
|
+
me: ['dxb', 'tlv', 'ruh'],
|
|
228
|
+
};
|
|
229
|
+
return regionColos[region] ?? [];
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Sort colos by distance from a location
|
|
233
|
+
*
|
|
234
|
+
* @param latitude - Origin latitude
|
|
235
|
+
* @param longitude - Origin longitude
|
|
236
|
+
* @param colos - Colos to sort (defaults to all known colos)
|
|
237
|
+
* @returns Colos sorted by distance (nearest first)
|
|
238
|
+
*/
|
|
239
|
+
export function sortColosByDistance(latitude, longitude, colos) {
|
|
240
|
+
const candidates = colos ?? Object.keys(COLO_METADATA);
|
|
241
|
+
return candidates
|
|
242
|
+
.map((colo) => {
|
|
243
|
+
const metadata = COLO_METADATA[colo.toLowerCase()];
|
|
244
|
+
if (!metadata) {
|
|
245
|
+
return { colo, distance: Infinity };
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
colo,
|
|
249
|
+
distance: haversineDistance(latitude, longitude, metadata.latitude, metadata.longitude),
|
|
250
|
+
};
|
|
251
|
+
})
|
|
252
|
+
.sort((a, b) => a.distance - b.distance);
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../do/colo/routing.ts"],"names":[],"mappings":"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"}
|