@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,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cold Storage - R2 + Iceberg
|
|
3
|
+
*
|
|
4
|
+
* Long-term archival storage using R2 with Apache Iceberg table format.
|
|
5
|
+
* Provides ~69ms latency at $0.015/GB/month for historical data and analytics.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Iceberg table format for ACID transactions
|
|
9
|
+
* - Parquet columnar storage
|
|
10
|
+
* - Time-travel queries
|
|
11
|
+
* - Partition pruning
|
|
12
|
+
*
|
|
13
|
+
* @module @do/core/storage/cold
|
|
14
|
+
*/
|
|
15
|
+
import type { R2ObjectRef, IcebergTable, IcebergSchema, IcebergSnapshot, IcebergPartitionSpec, Snapshot } from '../../types/storage';
|
|
16
|
+
/**
|
|
17
|
+
* Cold storage configuration
|
|
18
|
+
*/
|
|
19
|
+
export interface ColdStorageConfig {
|
|
20
|
+
/** R2 key prefix for all objects */
|
|
21
|
+
prefix?: string;
|
|
22
|
+
/** Default partition fields */
|
|
23
|
+
partitionBy?: string[];
|
|
24
|
+
/** Compression codec for Parquet files */
|
|
25
|
+
compressionCodec?: 'none' | 'zstd' | 'snappy' | 'gzip';
|
|
26
|
+
/** Target file size in bytes */
|
|
27
|
+
targetFileSize?: number;
|
|
28
|
+
/** Enable automatic compaction */
|
|
29
|
+
autoCompact?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Query options for cold storage
|
|
33
|
+
*/
|
|
34
|
+
export interface ColdQueryOptions {
|
|
35
|
+
/** Filter conditions */
|
|
36
|
+
where?: Record<string, unknown>;
|
|
37
|
+
/** Time range for time-travel */
|
|
38
|
+
timeRange?: {
|
|
39
|
+
start: number;
|
|
40
|
+
end: number;
|
|
41
|
+
};
|
|
42
|
+
/** Snapshot ID for time-travel */
|
|
43
|
+
snapshotId?: string;
|
|
44
|
+
/** Partition filters for pruning */
|
|
45
|
+
partitions?: Record<string, string | number>;
|
|
46
|
+
/** Columns to select (projection pushdown) */
|
|
47
|
+
columns?: string[];
|
|
48
|
+
/** Maximum rows to return */
|
|
49
|
+
limit?: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Archive options
|
|
53
|
+
*/
|
|
54
|
+
export interface ArchiveOptions {
|
|
55
|
+
/** Custom partition values */
|
|
56
|
+
partition?: Record<string, string | number>;
|
|
57
|
+
/** Custom metadata */
|
|
58
|
+
metadata?: Record<string, string>;
|
|
59
|
+
/** Compression override */
|
|
60
|
+
compression?: 'none' | 'zstd' | 'snappy' | 'gzip';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Compaction options
|
|
64
|
+
*/
|
|
65
|
+
export interface CompactOptions {
|
|
66
|
+
/** Minimum files to trigger compaction */
|
|
67
|
+
minFiles?: number;
|
|
68
|
+
/** Target file size after compaction */
|
|
69
|
+
targetSize?: number;
|
|
70
|
+
/** Only compact files smaller than this */
|
|
71
|
+
maxFileSize?: number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Cold storage statistics
|
|
75
|
+
*/
|
|
76
|
+
export interface ColdStorageStats {
|
|
77
|
+
/** Total tables */
|
|
78
|
+
tableCount: number;
|
|
79
|
+
/** Total snapshots */
|
|
80
|
+
snapshotCount: number;
|
|
81
|
+
/** Total data files */
|
|
82
|
+
fileCount: number;
|
|
83
|
+
/** Total size in bytes */
|
|
84
|
+
totalSizeBytes: number;
|
|
85
|
+
/** Oldest data timestamp */
|
|
86
|
+
oldestTimestamp: number;
|
|
87
|
+
/** Newest data timestamp */
|
|
88
|
+
newestTimestamp: number;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Cold storage implementation using R2 + Iceberg
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const cold = new ColdStorage(r2Bucket)
|
|
96
|
+
*
|
|
97
|
+
* // Archive a snapshot
|
|
98
|
+
* await cold.archive(snapshot, {
|
|
99
|
+
* partition: { year: 2024, month: 1 },
|
|
100
|
+
* })
|
|
101
|
+
*
|
|
102
|
+
* // Query historical data
|
|
103
|
+
* const orders = await cold.query('orders', {
|
|
104
|
+
* where: { status: 'completed' },
|
|
105
|
+
* timeRange: { start: lastMonth, end: today },
|
|
106
|
+
* partitions: { year: 2024 },
|
|
107
|
+
* })
|
|
108
|
+
*
|
|
109
|
+
* // Time-travel query
|
|
110
|
+
* const asOf = await cold.queryAsOf('orders', snapshotId)
|
|
111
|
+
*
|
|
112
|
+
* // List table snapshots
|
|
113
|
+
* const snapshots = await cold.listSnapshots('orders')
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export declare class ColdStorage {
|
|
117
|
+
private readonly r2;
|
|
118
|
+
private config;
|
|
119
|
+
/**
|
|
120
|
+
* Create a new cold storage instance
|
|
121
|
+
*
|
|
122
|
+
* @param r2 - R2 bucket binding
|
|
123
|
+
* @param config - Storage configuration
|
|
124
|
+
*/
|
|
125
|
+
constructor(r2: R2Bucket, config?: ColdStorageConfig);
|
|
126
|
+
/**
|
|
127
|
+
* Archive a DO snapshot to cold storage
|
|
128
|
+
*
|
|
129
|
+
* Converts snapshot data to Parquet format and stores in R2
|
|
130
|
+
* following Iceberg table structure.
|
|
131
|
+
*
|
|
132
|
+
* @param snapshot - Snapshot to archive
|
|
133
|
+
* @param options - Archive options
|
|
134
|
+
* @returns R2 object reference
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* const ref = await cold.archive(snapshot, {
|
|
139
|
+
* partition: { year: 2024, month: 1, day: 15 },
|
|
140
|
+
* })
|
|
141
|
+
* console.log(`Archived to: ${ref.key}`)
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
archive(snapshot: Snapshot, options?: ArchiveOptions): Promise<R2ObjectRef>;
|
|
145
|
+
/**
|
|
146
|
+
* Query data from cold storage
|
|
147
|
+
*
|
|
148
|
+
* Uses Iceberg metadata for partition pruning and
|
|
149
|
+
* Parquet predicate pushdown for efficient queries.
|
|
150
|
+
*
|
|
151
|
+
* @param table - Table name
|
|
152
|
+
* @param options - Query options
|
|
153
|
+
* @returns Query results
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const results = await cold.query('orders', {
|
|
158
|
+
* where: { customerId: 'cust_123' },
|
|
159
|
+
* timeRange: { start: startOfYear, end: endOfYear },
|
|
160
|
+
* columns: ['id', 'amount', 'status'],
|
|
161
|
+
* limit: 1000,
|
|
162
|
+
* })
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
query<T>(table: string, options?: ColdQueryOptions): Promise<T[]>;
|
|
166
|
+
/**
|
|
167
|
+
* Query data as of a specific snapshot (time-travel)
|
|
168
|
+
*
|
|
169
|
+
* @param table - Table name
|
|
170
|
+
* @param snapshotId - Snapshot ID to query
|
|
171
|
+
* @param options - Additional query options
|
|
172
|
+
* @returns Query results as of that snapshot
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* // Query orders as they were 30 days ago
|
|
177
|
+
* const snapshot = await cold.getSnapshotAt('orders', thirtyDaysAgo)
|
|
178
|
+
* const orders = await cold.queryAsOf('orders', snapshot.snapshotId)
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
queryAsOf<T>(table: string, snapshotId: string, options?: Omit<ColdQueryOptions, 'snapshotId'>): Promise<T[]>;
|
|
182
|
+
/**
|
|
183
|
+
* Get table metadata
|
|
184
|
+
*
|
|
185
|
+
* @param table - Table name
|
|
186
|
+
* @returns Iceberg table metadata
|
|
187
|
+
*/
|
|
188
|
+
getTable(table: string): Promise<IcebergTable | null>;
|
|
189
|
+
/**
|
|
190
|
+
* Create a new Iceberg table
|
|
191
|
+
*
|
|
192
|
+
* @param table - Table name
|
|
193
|
+
* @param schema - Table schema
|
|
194
|
+
* @param options - Table options
|
|
195
|
+
* @returns Created table metadata
|
|
196
|
+
*/
|
|
197
|
+
createTable(table: string, schema: IcebergSchema, options?: {
|
|
198
|
+
partitionSpec?: IcebergPartitionSpec;
|
|
199
|
+
properties?: Record<string, string>;
|
|
200
|
+
}): Promise<IcebergTable>;
|
|
201
|
+
/**
|
|
202
|
+
* List snapshots for a table
|
|
203
|
+
*
|
|
204
|
+
* @param table - Table name
|
|
205
|
+
* @param options - List options
|
|
206
|
+
* @returns Array of snapshots
|
|
207
|
+
*/
|
|
208
|
+
listSnapshots(table: string, options?: {
|
|
209
|
+
limit?: number;
|
|
210
|
+
after?: string;
|
|
211
|
+
}): Promise<IcebergSnapshot[]>;
|
|
212
|
+
/**
|
|
213
|
+
* Get snapshot at a specific timestamp
|
|
214
|
+
*
|
|
215
|
+
* @param table - Table name
|
|
216
|
+
* @param timestamp - Target timestamp
|
|
217
|
+
* @returns Snapshot valid at that time or null
|
|
218
|
+
*/
|
|
219
|
+
getSnapshotAt(table: string, timestamp: number): Promise<IcebergSnapshot | null>;
|
|
220
|
+
/**
|
|
221
|
+
* Restore data from a snapshot
|
|
222
|
+
*
|
|
223
|
+
* @param snapshot - DO snapshot to restore
|
|
224
|
+
* @returns Restored snapshot data
|
|
225
|
+
*/
|
|
226
|
+
restore(snapshotId: string): Promise<Snapshot>;
|
|
227
|
+
/**
|
|
228
|
+
* Delete old snapshots (expire)
|
|
229
|
+
*
|
|
230
|
+
* @param table - Table name
|
|
231
|
+
* @param options - Expiration options
|
|
232
|
+
* @returns Number of snapshots deleted
|
|
233
|
+
*/
|
|
234
|
+
expireSnapshots(table: string, options: {
|
|
235
|
+
olderThan?: number;
|
|
236
|
+
retainLast?: number;
|
|
237
|
+
}): Promise<number>;
|
|
238
|
+
/**
|
|
239
|
+
* Compact small files into larger ones
|
|
240
|
+
*
|
|
241
|
+
* @param table - Table name
|
|
242
|
+
* @param options - Compaction options
|
|
243
|
+
* @returns Compaction result
|
|
244
|
+
*/
|
|
245
|
+
compact(table: string, options?: CompactOptions): Promise<{
|
|
246
|
+
filesCompacted: number;
|
|
247
|
+
filesCreated: number;
|
|
248
|
+
bytesRemoved: number;
|
|
249
|
+
bytesAdded: number;
|
|
250
|
+
}>;
|
|
251
|
+
/**
|
|
252
|
+
* List all tables
|
|
253
|
+
*
|
|
254
|
+
* @returns Array of table names
|
|
255
|
+
*/
|
|
256
|
+
listTables(): Promise<string[]>;
|
|
257
|
+
/**
|
|
258
|
+
* Delete a table and all its data
|
|
259
|
+
*
|
|
260
|
+
* @param table - Table name
|
|
261
|
+
*/
|
|
262
|
+
dropTable(table: string): Promise<void>;
|
|
263
|
+
/**
|
|
264
|
+
* Get storage statistics
|
|
265
|
+
*
|
|
266
|
+
* @returns Cold storage statistics
|
|
267
|
+
*/
|
|
268
|
+
getStats(): Promise<ColdStorageStats>;
|
|
269
|
+
/**
|
|
270
|
+
* Build R2 key for an object
|
|
271
|
+
*
|
|
272
|
+
* @param components - Key components
|
|
273
|
+
* @returns Full R2 key
|
|
274
|
+
*/
|
|
275
|
+
private buildKey;
|
|
276
|
+
/**
|
|
277
|
+
* Build partition path from values
|
|
278
|
+
*
|
|
279
|
+
* @param partitions - Partition values
|
|
280
|
+
* @returns Partition path component
|
|
281
|
+
*/
|
|
282
|
+
private buildPartitionPath;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Convert data to Parquet format
|
|
286
|
+
*
|
|
287
|
+
* @param data - Data to convert
|
|
288
|
+
* @param schema - Schema definition
|
|
289
|
+
* @param options - Conversion options
|
|
290
|
+
* @returns Parquet file as ArrayBuffer
|
|
291
|
+
*/
|
|
292
|
+
export declare function toParquet(data: unknown[], schema: IcebergSchema, options?: {
|
|
293
|
+
compression?: 'none' | 'zstd' | 'snappy' | 'gzip';
|
|
294
|
+
}): Promise<ArrayBuffer>;
|
|
295
|
+
/**
|
|
296
|
+
* Read data from Parquet format
|
|
297
|
+
*
|
|
298
|
+
* @param buffer - Parquet file buffer
|
|
299
|
+
* @param options - Read options
|
|
300
|
+
* @returns Parsed data
|
|
301
|
+
*/
|
|
302
|
+
export declare function fromParquet<T>(buffer: ArrayBuffer, options?: {
|
|
303
|
+
columns?: string[];
|
|
304
|
+
rowFilter?: (row: unknown) => boolean;
|
|
305
|
+
}): Promise<T[]>;
|
|
306
|
+
/**
|
|
307
|
+
* Create Iceberg schema from TypeScript type
|
|
308
|
+
*
|
|
309
|
+
* @param sample - Sample object
|
|
310
|
+
* @returns Iceberg schema
|
|
311
|
+
*/
|
|
312
|
+
export declare function inferSchema(sample: Record<string, unknown>): IcebergSchema;
|
|
313
|
+
//# sourceMappingURL=cold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cold.d.ts","sourceRoot":"","sources":["../../../db/storage/cold.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cold Storage - R2 + Iceberg
|
|
3
|
+
*
|
|
4
|
+
* Long-term archival storage using R2 with Apache Iceberg table format.
|
|
5
|
+
* Provides ~69ms latency at $0.015/GB/month for historical data and analytics.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Iceberg table format for ACID transactions
|
|
9
|
+
* - Parquet columnar storage
|
|
10
|
+
* - Time-travel queries
|
|
11
|
+
* - Partition pruning
|
|
12
|
+
*
|
|
13
|
+
* @module @do/core/storage/cold
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Cold storage implementation using R2 + Iceberg
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const cold = new ColdStorage(r2Bucket)
|
|
21
|
+
*
|
|
22
|
+
* // Archive a snapshot
|
|
23
|
+
* await cold.archive(snapshot, {
|
|
24
|
+
* partition: { year: 2024, month: 1 },
|
|
25
|
+
* })
|
|
26
|
+
*
|
|
27
|
+
* // Query historical data
|
|
28
|
+
* const orders = await cold.query('orders', {
|
|
29
|
+
* where: { status: 'completed' },
|
|
30
|
+
* timeRange: { start: lastMonth, end: today },
|
|
31
|
+
* partitions: { year: 2024 },
|
|
32
|
+
* })
|
|
33
|
+
*
|
|
34
|
+
* // Time-travel query
|
|
35
|
+
* const asOf = await cold.queryAsOf('orders', snapshotId)
|
|
36
|
+
*
|
|
37
|
+
* // List table snapshots
|
|
38
|
+
* const snapshots = await cold.listSnapshots('orders')
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export class ColdStorage {
|
|
42
|
+
r2;
|
|
43
|
+
config;
|
|
44
|
+
/**
|
|
45
|
+
* Create a new cold storage instance
|
|
46
|
+
*
|
|
47
|
+
* @param r2 - R2 bucket binding
|
|
48
|
+
* @param config - Storage configuration
|
|
49
|
+
*/
|
|
50
|
+
constructor(r2, config) {
|
|
51
|
+
this.r2 = r2;
|
|
52
|
+
this.config = {
|
|
53
|
+
prefix: config?.prefix ?? 'iceberg/',
|
|
54
|
+
partitionBy: config?.partitionBy ?? ['year', 'month'],
|
|
55
|
+
compressionCodec: config?.compressionCodec ?? 'zstd',
|
|
56
|
+
targetFileSize: config?.targetFileSize ?? 128 * 1024 * 1024, // 128MB
|
|
57
|
+
autoCompact: config?.autoCompact ?? true,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Archive a DO snapshot to cold storage
|
|
62
|
+
*
|
|
63
|
+
* Converts snapshot data to Parquet format and stores in R2
|
|
64
|
+
* following Iceberg table structure.
|
|
65
|
+
*
|
|
66
|
+
* @param snapshot - Snapshot to archive
|
|
67
|
+
* @param options - Archive options
|
|
68
|
+
* @returns R2 object reference
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const ref = await cold.archive(snapshot, {
|
|
73
|
+
* partition: { year: 2024, month: 1, day: 15 },
|
|
74
|
+
* })
|
|
75
|
+
* console.log(`Archived to: ${ref.key}`)
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
async archive(snapshot, options) {
|
|
79
|
+
// TODO: Implement snapshot archival
|
|
80
|
+
// 1. Convert snapshot tables to Parquet
|
|
81
|
+
// 2. Build Iceberg metadata
|
|
82
|
+
// 3. Store in R2 with proper key structure
|
|
83
|
+
throw new Error('Not implemented');
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Query data from cold storage
|
|
87
|
+
*
|
|
88
|
+
* Uses Iceberg metadata for partition pruning and
|
|
89
|
+
* Parquet predicate pushdown for efficient queries.
|
|
90
|
+
*
|
|
91
|
+
* @param table - Table name
|
|
92
|
+
* @param options - Query options
|
|
93
|
+
* @returns Query results
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const results = await cold.query('orders', {
|
|
98
|
+
* where: { customerId: 'cust_123' },
|
|
99
|
+
* timeRange: { start: startOfYear, end: endOfYear },
|
|
100
|
+
* columns: ['id', 'amount', 'status'],
|
|
101
|
+
* limit: 1000,
|
|
102
|
+
* })
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
async query(table, options) {
|
|
106
|
+
// TODO: Implement Iceberg query
|
|
107
|
+
// 1. Read table metadata
|
|
108
|
+
// 2. Apply partition pruning
|
|
109
|
+
// 3. Read relevant Parquet files
|
|
110
|
+
// 4. Apply predicate pushdown
|
|
111
|
+
// 5. Return filtered results
|
|
112
|
+
throw new Error('Not implemented');
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Query data as of a specific snapshot (time-travel)
|
|
116
|
+
*
|
|
117
|
+
* @param table - Table name
|
|
118
|
+
* @param snapshotId - Snapshot ID to query
|
|
119
|
+
* @param options - Additional query options
|
|
120
|
+
* @returns Query results as of that snapshot
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* // Query orders as they were 30 days ago
|
|
125
|
+
* const snapshot = await cold.getSnapshotAt('orders', thirtyDaysAgo)
|
|
126
|
+
* const orders = await cold.queryAsOf('orders', snapshot.snapshotId)
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
async queryAsOf(table, snapshotId, options) {
|
|
130
|
+
// TODO: Implement time-travel query
|
|
131
|
+
throw new Error('Not implemented');
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get table metadata
|
|
135
|
+
*
|
|
136
|
+
* @param table - Table name
|
|
137
|
+
* @returns Iceberg table metadata
|
|
138
|
+
*/
|
|
139
|
+
async getTable(table) {
|
|
140
|
+
// TODO: Implement table metadata retrieval
|
|
141
|
+
throw new Error('Not implemented');
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Create a new Iceberg table
|
|
145
|
+
*
|
|
146
|
+
* @param table - Table name
|
|
147
|
+
* @param schema - Table schema
|
|
148
|
+
* @param options - Table options
|
|
149
|
+
* @returns Created table metadata
|
|
150
|
+
*/
|
|
151
|
+
async createTable(table, schema, options) {
|
|
152
|
+
// TODO: Implement table creation
|
|
153
|
+
throw new Error('Not implemented');
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* List snapshots for a table
|
|
157
|
+
*
|
|
158
|
+
* @param table - Table name
|
|
159
|
+
* @param options - List options
|
|
160
|
+
* @returns Array of snapshots
|
|
161
|
+
*/
|
|
162
|
+
async listSnapshots(table, options) {
|
|
163
|
+
// TODO: Implement snapshot listing
|
|
164
|
+
throw new Error('Not implemented');
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get snapshot at a specific timestamp
|
|
168
|
+
*
|
|
169
|
+
* @param table - Table name
|
|
170
|
+
* @param timestamp - Target timestamp
|
|
171
|
+
* @returns Snapshot valid at that time or null
|
|
172
|
+
*/
|
|
173
|
+
async getSnapshotAt(table, timestamp) {
|
|
174
|
+
// TODO: Implement snapshot lookup by timestamp
|
|
175
|
+
throw new Error('Not implemented');
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Restore data from a snapshot
|
|
179
|
+
*
|
|
180
|
+
* @param snapshot - DO snapshot to restore
|
|
181
|
+
* @returns Restored snapshot data
|
|
182
|
+
*/
|
|
183
|
+
async restore(snapshotId) {
|
|
184
|
+
// TODO: Implement snapshot restoration
|
|
185
|
+
throw new Error('Not implemented');
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Delete old snapshots (expire)
|
|
189
|
+
*
|
|
190
|
+
* @param table - Table name
|
|
191
|
+
* @param options - Expiration options
|
|
192
|
+
* @returns Number of snapshots deleted
|
|
193
|
+
*/
|
|
194
|
+
async expireSnapshots(table, options) {
|
|
195
|
+
// TODO: Implement snapshot expiration
|
|
196
|
+
throw new Error('Not implemented');
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Compact small files into larger ones
|
|
200
|
+
*
|
|
201
|
+
* @param table - Table name
|
|
202
|
+
* @param options - Compaction options
|
|
203
|
+
* @returns Compaction result
|
|
204
|
+
*/
|
|
205
|
+
async compact(table, options) {
|
|
206
|
+
// TODO: Implement file compaction
|
|
207
|
+
throw new Error('Not implemented');
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* List all tables
|
|
211
|
+
*
|
|
212
|
+
* @returns Array of table names
|
|
213
|
+
*/
|
|
214
|
+
async listTables() {
|
|
215
|
+
// TODO: Implement table listing
|
|
216
|
+
throw new Error('Not implemented');
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Delete a table and all its data
|
|
220
|
+
*
|
|
221
|
+
* @param table - Table name
|
|
222
|
+
*/
|
|
223
|
+
async dropTable(table) {
|
|
224
|
+
// TODO: Implement table deletion
|
|
225
|
+
throw new Error('Not implemented');
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get storage statistics
|
|
229
|
+
*
|
|
230
|
+
* @returns Cold storage statistics
|
|
231
|
+
*/
|
|
232
|
+
async getStats() {
|
|
233
|
+
// TODO: Implement statistics gathering
|
|
234
|
+
throw new Error('Not implemented');
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Build R2 key for an object
|
|
238
|
+
*
|
|
239
|
+
* @param components - Key components
|
|
240
|
+
* @returns Full R2 key
|
|
241
|
+
*/
|
|
242
|
+
buildKey(...components) {
|
|
243
|
+
return `${this.config.prefix}${components.join('/')}`;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Build partition path from values
|
|
247
|
+
*
|
|
248
|
+
* @param partitions - Partition values
|
|
249
|
+
* @returns Partition path component
|
|
250
|
+
*/
|
|
251
|
+
buildPartitionPath(partitions) {
|
|
252
|
+
return Object.entries(partitions)
|
|
253
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
254
|
+
.join('/');
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Convert data to Parquet format
|
|
259
|
+
*
|
|
260
|
+
* @param data - Data to convert
|
|
261
|
+
* @param schema - Schema definition
|
|
262
|
+
* @param options - Conversion options
|
|
263
|
+
* @returns Parquet file as ArrayBuffer
|
|
264
|
+
*/
|
|
265
|
+
export async function toParquet(data, schema, options) {
|
|
266
|
+
// TODO: Implement Parquet encoding
|
|
267
|
+
throw new Error('Not implemented');
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Read data from Parquet format
|
|
271
|
+
*
|
|
272
|
+
* @param buffer - Parquet file buffer
|
|
273
|
+
* @param options - Read options
|
|
274
|
+
* @returns Parsed data
|
|
275
|
+
*/
|
|
276
|
+
export async function fromParquet(buffer, options) {
|
|
277
|
+
// TODO: Implement Parquet decoding
|
|
278
|
+
throw new Error('Not implemented');
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Create Iceberg schema from TypeScript type
|
|
282
|
+
*
|
|
283
|
+
* @param sample - Sample object
|
|
284
|
+
* @returns Iceberg schema
|
|
285
|
+
*/
|
|
286
|
+
export function inferSchema(sample) {
|
|
287
|
+
const fields = Object.entries(sample).map(([name, value], id) => ({
|
|
288
|
+
id,
|
|
289
|
+
name,
|
|
290
|
+
type: inferIcebergType(value),
|
|
291
|
+
required: value !== null && value !== undefined,
|
|
292
|
+
}));
|
|
293
|
+
return {
|
|
294
|
+
schemaId: 0,
|
|
295
|
+
fields,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Infer Iceberg type from JavaScript value
|
|
300
|
+
*/
|
|
301
|
+
function inferIcebergType(value) {
|
|
302
|
+
if (value === null || value === undefined)
|
|
303
|
+
return 'string';
|
|
304
|
+
if (typeof value === 'string')
|
|
305
|
+
return 'string';
|
|
306
|
+
if (typeof value === 'number') {
|
|
307
|
+
return Number.isInteger(value) ? 'long' : 'double';
|
|
308
|
+
}
|
|
309
|
+
if (typeof value === 'boolean')
|
|
310
|
+
return 'boolean';
|
|
311
|
+
if (value instanceof Date)
|
|
312
|
+
return 'timestamp';
|
|
313
|
+
if (Array.isArray(value))
|
|
314
|
+
return 'list';
|
|
315
|
+
if (typeof value === 'object')
|
|
316
|
+
return 'struct';
|
|
317
|
+
return 'binary';
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=cold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cold.js","sourceRoot":"","sources":["../../../db/storage/cold.ts"],"names":[],"mappings":"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"}
|