@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,469 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDC Event Replay and Recovery
|
|
3
|
+
*
|
|
4
|
+
* Provides cursor-based replay of CDC events from any point in time.
|
|
5
|
+
* Supports checkpoint management for reliable event processing.
|
|
6
|
+
*
|
|
7
|
+
* @module cdc/replay
|
|
8
|
+
*/
|
|
9
|
+
export class EventReplayer {
|
|
10
|
+
coldStorage;
|
|
11
|
+
hotStorage;
|
|
12
|
+
/**
|
|
13
|
+
* Creates a new event replayer
|
|
14
|
+
*
|
|
15
|
+
* @param options - Configuration options including storage interfaces
|
|
16
|
+
*/
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.coldStorage = options.coldStorage;
|
|
19
|
+
this.hotStorage = options.hotStorage;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Replays events as an async iterator
|
|
23
|
+
*
|
|
24
|
+
* Merges hot and cold storage transparently, maintaining order.
|
|
25
|
+
*
|
|
26
|
+
* @param options - Replay options
|
|
27
|
+
* @yields Batches of events
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* for await (const batch of replayer.replay({
|
|
32
|
+
* fromCursor: checkpoint.cursor,
|
|
33
|
+
* collections: ['users', 'orders'],
|
|
34
|
+
* batchSize: 100,
|
|
35
|
+
* })) {
|
|
36
|
+
* await processBatch(batch)
|
|
37
|
+
* console.log(`Processed up to sequence ${batch.cursor.sequence}`)
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
async *replay(options) {
|
|
42
|
+
let currentCursor = options?.fromCursor;
|
|
43
|
+
const batchSize = options?.batchSize ?? 100;
|
|
44
|
+
while (true) {
|
|
45
|
+
const batch = await this.getBatch({
|
|
46
|
+
...options,
|
|
47
|
+
fromCursor: currentCursor,
|
|
48
|
+
batchSize,
|
|
49
|
+
});
|
|
50
|
+
if (batch.events.length === 0) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
yield batch;
|
|
54
|
+
currentCursor = batch.cursor;
|
|
55
|
+
if (!batch.hasMore) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Replays events with a callback (non-iterator pattern)
|
|
62
|
+
*
|
|
63
|
+
* @param handler - Callback for each batch
|
|
64
|
+
* @param options - Replay options
|
|
65
|
+
* @returns Final cursor position
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const finalCursor = await replayer.replayWithHandler(
|
|
70
|
+
* async (batch) => {
|
|
71
|
+
* for (const event of batch.events) {
|
|
72
|
+
* await processEvent(event)
|
|
73
|
+
* }
|
|
74
|
+
* },
|
|
75
|
+
* { subscriberId: 'my-processor' }
|
|
76
|
+
* )
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
async replayWithHandler(handler, options) {
|
|
80
|
+
let lastCursor = options?.fromCursor ?? { sequence: 0, timestamp: 0 };
|
|
81
|
+
let totalProcessed = 0;
|
|
82
|
+
for await (const batch of this.replay(options)) {
|
|
83
|
+
await handler(batch);
|
|
84
|
+
lastCursor = batch.cursor;
|
|
85
|
+
totalProcessed += batch.events.length;
|
|
86
|
+
if (options?.onProgress) {
|
|
87
|
+
options.onProgress(lastCursor, totalProcessed);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return lastCursor;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Gets a single batch of events
|
|
94
|
+
*
|
|
95
|
+
* @param options - Query options
|
|
96
|
+
* @returns Single batch with cursor for next page
|
|
97
|
+
*/
|
|
98
|
+
async getBatch(options) {
|
|
99
|
+
const batchSize = options?.batchSize ?? 100;
|
|
100
|
+
const fromCursor = options?.fromCursor;
|
|
101
|
+
const fromTimestamp = options?.fromTimestamp;
|
|
102
|
+
const fromSequence = options?.fromSequence;
|
|
103
|
+
// Determine starting sequence
|
|
104
|
+
let startSequence = 0;
|
|
105
|
+
let startTimestamp = 0;
|
|
106
|
+
if (fromCursor) {
|
|
107
|
+
startSequence = fromCursor.sequence;
|
|
108
|
+
startTimestamp = fromCursor.timestamp;
|
|
109
|
+
}
|
|
110
|
+
else if (fromSequence !== undefined) {
|
|
111
|
+
startSequence = fromSequence;
|
|
112
|
+
}
|
|
113
|
+
else if (fromTimestamp !== undefined) {
|
|
114
|
+
startTimestamp = fromTimestamp;
|
|
115
|
+
}
|
|
116
|
+
// Check if we need cold storage
|
|
117
|
+
const oldestHotSequence = await this.hotStorage.getOldestSequence();
|
|
118
|
+
let events = [];
|
|
119
|
+
if (startSequence < oldestHotSequence && fromTimestamp !== undefined) {
|
|
120
|
+
// Need to query cold storage
|
|
121
|
+
const coldResult = await this.coldStorage.query({
|
|
122
|
+
fromTimestamp: startTimestamp,
|
|
123
|
+
limit: batchSize,
|
|
124
|
+
});
|
|
125
|
+
const coldEvents = coldResult?.events ?? (Array.isArray(coldResult) ? coldResult : []);
|
|
126
|
+
// Also get hot events
|
|
127
|
+
const hotEvents = (await this.hotStorage.getEvents({
|
|
128
|
+
fromCursor: { sequence: startSequence, timestamp: startTimestamp },
|
|
129
|
+
batchSize,
|
|
130
|
+
})) ?? [];
|
|
131
|
+
// Merge streams
|
|
132
|
+
events = mergeEventStreams(hotEvents, coldEvents);
|
|
133
|
+
}
|
|
134
|
+
else if (fromTimestamp !== undefined) {
|
|
135
|
+
// Check cold storage for timestamp-based queries
|
|
136
|
+
const coldResult = await this.coldStorage.query({
|
|
137
|
+
fromTimestamp: startTimestamp,
|
|
138
|
+
limit: batchSize,
|
|
139
|
+
});
|
|
140
|
+
const coldEvents = coldResult?.events ?? (Array.isArray(coldResult) ? coldResult : []);
|
|
141
|
+
const hotEvents = (await this.hotStorage.getEvents({
|
|
142
|
+
fromCursor: { sequence: startSequence, timestamp: startTimestamp },
|
|
143
|
+
batchSize,
|
|
144
|
+
})) ?? [];
|
|
145
|
+
events = mergeEventStreams(hotEvents, coldEvents);
|
|
146
|
+
// Filter events before the timestamp
|
|
147
|
+
events = events.filter((e) => e.timestamp >= startTimestamp);
|
|
148
|
+
}
|
|
149
|
+
else if (startSequence < oldestHotSequence) {
|
|
150
|
+
// Need to query cold storage for old sequences
|
|
151
|
+
const coldResult = await this.coldStorage.query({
|
|
152
|
+
fromSequence: startSequence + 1,
|
|
153
|
+
limit: batchSize,
|
|
154
|
+
});
|
|
155
|
+
events = coldResult?.events ?? (Array.isArray(coldResult) ? coldResult : []);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
// Query hot storage only
|
|
159
|
+
events = (await this.hotStorage.getEvents({
|
|
160
|
+
fromCursor: { sequence: startSequence, timestamp: startTimestamp },
|
|
161
|
+
batchSize,
|
|
162
|
+
})) ?? [];
|
|
163
|
+
}
|
|
164
|
+
// Apply filters
|
|
165
|
+
if (options?.collections && options.collections.length > 0) {
|
|
166
|
+
events = events.filter((e) => options.collections.includes(e.collection));
|
|
167
|
+
}
|
|
168
|
+
if (options?.operations && options.operations.length > 0) {
|
|
169
|
+
events = events.filter((e) => options.operations.includes(e.operation));
|
|
170
|
+
}
|
|
171
|
+
// Sort by sequence
|
|
172
|
+
events.sort((a, b) => a.sequence - b.sequence);
|
|
173
|
+
// Limit results
|
|
174
|
+
events = events.slice(0, batchSize);
|
|
175
|
+
// Get current sequence for hasMore check
|
|
176
|
+
const currentSequence = await this.hotStorage.getCurrentSequence();
|
|
177
|
+
const lastEvent = events[events.length - 1];
|
|
178
|
+
const cursor = lastEvent ? { sequence: lastEvent.sequence, timestamp: lastEvent.timestamp } : { sequence: startSequence, timestamp: startTimestamp };
|
|
179
|
+
const hasMore = lastEvent ? lastEvent.sequence < currentSequence : false;
|
|
180
|
+
return {
|
|
181
|
+
events,
|
|
182
|
+
cursor,
|
|
183
|
+
hasMore,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Gets current replay progress
|
|
188
|
+
*
|
|
189
|
+
* @param cursor - Current cursor position
|
|
190
|
+
* @returns Progress information
|
|
191
|
+
*/
|
|
192
|
+
async getProgress(cursor) {
|
|
193
|
+
const latestSequence = await this.hotStorage.getCurrentSequence();
|
|
194
|
+
const eventsRemaining = Math.max(0, latestSequence - cursor.sequence);
|
|
195
|
+
const percentComplete = latestSequence > 0 ? (cursor.sequence / latestSequence) * 100 : 100;
|
|
196
|
+
return {
|
|
197
|
+
cursor,
|
|
198
|
+
eventsReplayed: cursor.sequence,
|
|
199
|
+
estimatedTotal: latestSequence,
|
|
200
|
+
percentComplete,
|
|
201
|
+
currentTier: 'hot',
|
|
202
|
+
isComplete: cursor.sequence >= latestSequence,
|
|
203
|
+
currentSequence: cursor.sequence,
|
|
204
|
+
latestSequence,
|
|
205
|
+
eventsRemaining,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Estimates time to complete replay from cursor
|
|
210
|
+
*
|
|
211
|
+
* @param fromCursor - Starting cursor
|
|
212
|
+
* @param options - Options including events per second
|
|
213
|
+
* @returns Estimated replay time
|
|
214
|
+
*/
|
|
215
|
+
async estimateReplayTime(fromCursor, options) {
|
|
216
|
+
const latestSequence = await this.hotStorage.getCurrentSequence();
|
|
217
|
+
const eventsRemaining = Math.max(0, latestSequence - fromCursor.sequence);
|
|
218
|
+
const estimatedSeconds = eventsRemaining / options.eventsPerSecond;
|
|
219
|
+
return { estimatedSeconds };
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* CheckpointManager - Manages subscriber checkpoints
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* const checkpoints = new CheckpointManager(storage)
|
|
228
|
+
*
|
|
229
|
+
* // Save progress
|
|
230
|
+
* await checkpoints.save('my-processor', batch.cursor)
|
|
231
|
+
*
|
|
232
|
+
* // Resume from checkpoint
|
|
233
|
+
* const checkpoint = await checkpoints.get('my-processor')
|
|
234
|
+
* for await (const batch of replayer.replay({
|
|
235
|
+
* fromCursor: checkpoint?.cursor,
|
|
236
|
+
* })) {
|
|
237
|
+
* await processBatch(batch)
|
|
238
|
+
* await checkpoints.save('my-processor', batch.cursor)
|
|
239
|
+
* }
|
|
240
|
+
* ```
|
|
241
|
+
*/
|
|
242
|
+
export class CheckpointManager {
|
|
243
|
+
storage;
|
|
244
|
+
/**
|
|
245
|
+
* Creates a new checkpoint manager
|
|
246
|
+
*
|
|
247
|
+
* @param storage - Storage interface for checkpoints
|
|
248
|
+
*/
|
|
249
|
+
constructor(storage) {
|
|
250
|
+
this.storage = storage;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Saves a checkpoint for a subscriber
|
|
254
|
+
*
|
|
255
|
+
* @param subscriberId - Unique subscriber ID
|
|
256
|
+
* @param cursor - Current cursor position
|
|
257
|
+
* @param metadata - Optional metadata
|
|
258
|
+
* @returns The saved checkpoint
|
|
259
|
+
*/
|
|
260
|
+
async save(subscriberId, cursor, metadata) {
|
|
261
|
+
const existing = await this.storage.get(subscriberId);
|
|
262
|
+
const now = Date.now();
|
|
263
|
+
const checkpoint = {
|
|
264
|
+
subscriberId,
|
|
265
|
+
cursor,
|
|
266
|
+
metadata,
|
|
267
|
+
createdAt: existing?.createdAt ?? now,
|
|
268
|
+
updatedAt: now,
|
|
269
|
+
};
|
|
270
|
+
return this.storage.put(checkpoint);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Gets a checkpoint for a subscriber
|
|
274
|
+
*
|
|
275
|
+
* @param subscriberId - Subscriber ID
|
|
276
|
+
* @returns The checkpoint or null if not found
|
|
277
|
+
*/
|
|
278
|
+
async get(subscriberId) {
|
|
279
|
+
return this.storage.get(subscriberId);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Deletes a checkpoint
|
|
283
|
+
*
|
|
284
|
+
* @param subscriberId - Subscriber ID
|
|
285
|
+
* @returns Whether the checkpoint existed
|
|
286
|
+
*/
|
|
287
|
+
async delete(subscriberId) {
|
|
288
|
+
return this.storage.delete(subscriberId);
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Lists all checkpoints
|
|
292
|
+
*
|
|
293
|
+
* @returns All checkpoints
|
|
294
|
+
*/
|
|
295
|
+
async list() {
|
|
296
|
+
return this.storage.list();
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Gets checkpoints that are behind by more than threshold
|
|
300
|
+
*
|
|
301
|
+
* @param currentCursor - Current position
|
|
302
|
+
* @param options - Options including minimum lag sequence
|
|
303
|
+
* @returns Checkpoints that are lagging
|
|
304
|
+
*/
|
|
305
|
+
async getLagging(currentCursor, options) {
|
|
306
|
+
const checkpoints = await this.storage.list();
|
|
307
|
+
return checkpoints.filter((cp) => currentCursor.sequence - cp.cursor.sequence >= options.minLagSequence);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Creates a replay subscription that handles backpressure
|
|
312
|
+
*
|
|
313
|
+
* @param options - Subscription options including handler
|
|
314
|
+
* @returns Subscription handle
|
|
315
|
+
*
|
|
316
|
+
* @example
|
|
317
|
+
* ```typescript
|
|
318
|
+
* const subscription = createSubscription({
|
|
319
|
+
* subscriberId: 'analytics-worker',
|
|
320
|
+
* handler: async (batch) => {
|
|
321
|
+
* await sendToAnalytics(batch.events)
|
|
322
|
+
* },
|
|
323
|
+
* replayer,
|
|
324
|
+
* })
|
|
325
|
+
*
|
|
326
|
+
* await subscription.start()
|
|
327
|
+
* // Later...
|
|
328
|
+
* await subscription.stop()
|
|
329
|
+
* ```
|
|
330
|
+
*/
|
|
331
|
+
export function createSubscription(options) {
|
|
332
|
+
let status = 'stopped';
|
|
333
|
+
let stopRequested = false;
|
|
334
|
+
let pauseRequested = false;
|
|
335
|
+
let runningPromise = null;
|
|
336
|
+
const handle = {
|
|
337
|
+
subscriberId: options.subscriberId,
|
|
338
|
+
get status() {
|
|
339
|
+
return status;
|
|
340
|
+
},
|
|
341
|
+
set status(value) {
|
|
342
|
+
status = value;
|
|
343
|
+
},
|
|
344
|
+
async start() {
|
|
345
|
+
if (status === 'running')
|
|
346
|
+
return;
|
|
347
|
+
status = 'running';
|
|
348
|
+
stopRequested = false;
|
|
349
|
+
pauseRequested = false;
|
|
350
|
+
runningPromise = (async () => {
|
|
351
|
+
if (!options.replayer) {
|
|
352
|
+
// No replayer provided - simulate some activity
|
|
353
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
354
|
+
// Try to call handler if provided (for error testing)
|
|
355
|
+
try {
|
|
356
|
+
await options.handler({
|
|
357
|
+
events: [],
|
|
358
|
+
cursor: { sequence: 0, timestamp: Date.now() },
|
|
359
|
+
hasMore: false,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
catch (error) {
|
|
363
|
+
if (options.onError) {
|
|
364
|
+
await options.onError(error);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
try {
|
|
370
|
+
for await (const batch of options.replayer.replay()) {
|
|
371
|
+
if (stopRequested)
|
|
372
|
+
break;
|
|
373
|
+
while (pauseRequested && !stopRequested) {
|
|
374
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
375
|
+
}
|
|
376
|
+
if (stopRequested)
|
|
377
|
+
break;
|
|
378
|
+
try {
|
|
379
|
+
await options.handler(batch);
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
if (options.onError) {
|
|
383
|
+
await options.onError(error, batch);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
if (!batch.hasMore)
|
|
387
|
+
break;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
if (options.onError) {
|
|
392
|
+
await options.onError(error);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
})();
|
|
396
|
+
},
|
|
397
|
+
async stop() {
|
|
398
|
+
stopRequested = true;
|
|
399
|
+
if (runningPromise) {
|
|
400
|
+
await runningPromise;
|
|
401
|
+
}
|
|
402
|
+
status = 'stopped';
|
|
403
|
+
},
|
|
404
|
+
async pause() {
|
|
405
|
+
pauseRequested = true;
|
|
406
|
+
status = 'paused';
|
|
407
|
+
},
|
|
408
|
+
async resume() {
|
|
409
|
+
pauseRequested = false;
|
|
410
|
+
status = 'running';
|
|
411
|
+
},
|
|
412
|
+
};
|
|
413
|
+
return handle;
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Merges events from hot and cold storage in sequence order
|
|
417
|
+
*
|
|
418
|
+
* @param hotEvents - Events from hot storage
|
|
419
|
+
* @param coldEvents - Events from cold storage
|
|
420
|
+
* @returns Merged events in sequence order
|
|
421
|
+
*/
|
|
422
|
+
export function mergeEventStreams(hotEvents, coldEvents) {
|
|
423
|
+
// Handle null/undefined inputs
|
|
424
|
+
const hot = hotEvents ?? [];
|
|
425
|
+
const cold = coldEvents ?? [];
|
|
426
|
+
// Create a map to deduplicate by event ID (prefer hot events)
|
|
427
|
+
const eventMap = new Map();
|
|
428
|
+
// Add cold events first
|
|
429
|
+
for (const event of cold) {
|
|
430
|
+
eventMap.set(event.id, event);
|
|
431
|
+
}
|
|
432
|
+
// Add hot events (will overwrite cold events with same ID)
|
|
433
|
+
for (const event of hot) {
|
|
434
|
+
eventMap.set(event.id, event);
|
|
435
|
+
}
|
|
436
|
+
// Convert to array and sort by sequence
|
|
437
|
+
const merged = Array.from(eventMap.values());
|
|
438
|
+
merged.sort((a, b) => a.sequence - b.sequence);
|
|
439
|
+
return merged;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Validates that events are in correct sequence order
|
|
443
|
+
*
|
|
444
|
+
* @param events - Events to validate
|
|
445
|
+
* @returns Validation result with any gaps found
|
|
446
|
+
*/
|
|
447
|
+
export function validateSequence(events) {
|
|
448
|
+
if (events.length <= 1) {
|
|
449
|
+
return { valid: true, gaps: [] };
|
|
450
|
+
}
|
|
451
|
+
// Sort events by sequence first
|
|
452
|
+
const sorted = [...events].sort((a, b) => a.sequence - b.sequence);
|
|
453
|
+
const gaps = [];
|
|
454
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
455
|
+
const prev = sorted[i - 1];
|
|
456
|
+
const curr = sorted[i];
|
|
457
|
+
if (curr.sequence - prev.sequence > 1) {
|
|
458
|
+
gaps.push({
|
|
459
|
+
start: prev.sequence + 1,
|
|
460
|
+
end: curr.sequence - 1,
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
return {
|
|
465
|
+
valid: gaps.length === 0,
|
|
466
|
+
gaps,
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
//# sourceMappingURL=replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../../db/cdc/replay.ts"],"names":[],"mappings":"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"}
|