@relaycast/engine 1.1.7
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/dist/adapters/node/database.d.ts +25 -0
- package/dist/adapters/node/database.d.ts.map +1 -0
- package/dist/adapters/node/database.js +71 -0
- package/dist/adapters/node/database.js.map +1 -0
- package/dist/adapters/node/event-queue.d.ts +15 -0
- package/dist/adapters/node/event-queue.d.ts.map +1 -0
- package/dist/adapters/node/event-queue.js +27 -0
- package/dist/adapters/node/event-queue.js.map +1 -0
- package/dist/adapters/node/files.d.ts +47 -0
- package/dist/adapters/node/files.d.ts.map +1 -0
- package/dist/adapters/node/files.js +128 -0
- package/dist/adapters/node/files.js.map +1 -0
- package/dist/adapters/node/index.d.ts +60 -0
- package/dist/adapters/node/index.d.ts.map +1 -0
- package/dist/adapters/node/index.js +79 -0
- package/dist/adapters/node/index.js.map +1 -0
- package/dist/adapters/node/kv.d.ts +27 -0
- package/dist/adapters/node/kv.d.ts.map +1 -0
- package/dist/adapters/node/kv.js +67 -0
- package/dist/adapters/node/kv.js.map +1 -0
- package/dist/adapters/node/mcp.d.ts +18 -0
- package/dist/adapters/node/mcp.d.ts.map +1 -0
- package/dist/adapters/node/mcp.js +53 -0
- package/dist/adapters/node/mcp.js.map +1 -0
- package/dist/adapters/node/presence.d.ts +33 -0
- package/dist/adapters/node/presence.d.ts.map +1 -0
- package/dist/adapters/node/presence.js +113 -0
- package/dist/adapters/node/presence.js.map +1 -0
- package/dist/adapters/node/rate-limit.d.ts +17 -0
- package/dist/adapters/node/rate-limit.d.ts.map +1 -0
- package/dist/adapters/node/rate-limit.js +36 -0
- package/dist/adapters/node/rate-limit.js.map +1 -0
- package/dist/adapters/node/realtime.d.ts +72 -0
- package/dist/adapters/node/realtime.d.ts.map +1 -0
- package/dist/adapters/node/realtime.js +274 -0
- package/dist/adapters/node/realtime.js.map +1 -0
- package/dist/auth/index.d.ts +21 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +50 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/bin/serve.d.ts +3 -0
- package/dist/bin/serve.d.ts.map +1 -0
- package/dist/bin/serve.js +74 -0
- package/dist/bin/serve.js.map +1 -0
- package/dist/db/index.d.ts +16 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +24 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +14 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +16 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/migrations/0000_broad_dagger.sql +227 -0
- package/dist/db/migrations/0001_fts5_search.sql +23 -0
- package/dist/db/migrations/0002_add_metadata_columns.sql +16 -0
- package/dist/db/migrations/0003_add_channel_mute.sql +5 -0
- package/dist/db/migrations/0004_a2a_agents.sql +21 -0
- package/dist/db/migrations/0005_certifications.sql +24 -0
- package/dist/db/migrations/0006_message_logs.sql +30 -0
- package/dist/db/migrations/0007_directory.sql +125 -0
- package/dist/db/migrations/0008_smart_routing.sql +30 -0
- package/dist/db/migrations/0009_drop_workspace_name_unique.sql +4 -0
- package/dist/db/migrations/0010_actions_and_harness.sql +108 -0
- package/dist/db/migrations/0011_stable_handle.sql +5 -0
- package/dist/db/migrations/0012_delivery_and_sequence_constraints.sql +26 -0
- package/dist/db/migrations/0013_status_active.sql +9 -0
- package/dist/db/migrations/meta/0000_snapshot.json +1694 -0
- package/dist/db/migrations/meta/_journal.json +13 -0
- package/dist/db/schema.d.ts +4742 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +572 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/engine/a2a-health.d.ts +11 -0
- package/dist/engine/a2a-health.d.ts.map +1 -0
- package/dist/engine/a2a-health.js +65 -0
- package/dist/engine/a2a-health.js.map +1 -0
- package/dist/engine/a2a.d.ts +73 -0
- package/dist/engine/a2a.d.ts.map +1 -0
- package/dist/engine/a2a.js +549 -0
- package/dist/engine/a2a.js.map +1 -0
- package/dist/engine/action.d.ts +85 -0
- package/dist/engine/action.d.ts.map +1 -0
- package/dist/engine/action.js +220 -0
- package/dist/engine/action.js.map +1 -0
- package/dist/engine/activity.d.ts +21 -0
- package/dist/engine/activity.d.ts.map +1 -0
- package/dist/engine/activity.js +46 -0
- package/dist/engine/activity.js.map +1 -0
- package/dist/engine/agent.d.ts +155 -0
- package/dist/engine/agent.d.ts.map +1 -0
- package/dist/engine/agent.js +408 -0
- package/dist/engine/agent.js.map +1 -0
- package/dist/engine/cache.d.ts +19 -0
- package/dist/engine/cache.d.ts.map +1 -0
- package/dist/engine/cache.js +40 -0
- package/dist/engine/cache.js.map +1 -0
- package/dist/engine/certify.d.ts +84 -0
- package/dist/engine/certify.d.ts.map +1 -0
- package/dist/engine/certify.js +452 -0
- package/dist/engine/certify.js.map +1 -0
- package/dist/engine/channel.d.ts +67 -0
- package/dist/engine/channel.d.ts.map +1 -0
- package/dist/engine/channel.js +375 -0
- package/dist/engine/channel.js.map +1 -0
- package/dist/engine/console.d.ts +83 -0
- package/dist/engine/console.d.ts.map +1 -0
- package/dist/engine/console.js +189 -0
- package/dist/engine/console.js.map +1 -0
- package/dist/engine/directory.d.ts +241 -0
- package/dist/engine/directory.d.ts.map +1 -0
- package/dist/engine/directory.js +528 -0
- package/dist/engine/directory.js.map +1 -0
- package/dist/engine/dm.d.ts +63 -0
- package/dist/engine/dm.d.ts.map +1 -0
- package/dist/engine/dm.js +397 -0
- package/dist/engine/dm.js.map +1 -0
- package/dist/engine/dmAll.d.ts +11 -0
- package/dist/engine/dmAll.d.ts.map +1 -0
- package/dist/engine/dmAll.js +117 -0
- package/dist/engine/dmAll.js.map +1 -0
- package/dist/engine/event-id.d.ts +2 -0
- package/dist/engine/event-id.d.ts.map +1 -0
- package/dist/engine/event-id.js +0 -0
- package/dist/engine/event-id.js.map +1 -0
- package/dist/engine/eventDelivery.d.ts +12 -0
- package/dist/engine/eventDelivery.d.ts.map +1 -0
- package/dist/engine/eventDelivery.js +103 -0
- package/dist/engine/eventDelivery.js.map +1 -0
- package/dist/engine/eventQueue.d.ts +6 -0
- package/dist/engine/eventQueue.d.ts.map +1 -0
- package/dist/engine/eventQueue.js +23 -0
- package/dist/engine/eventQueue.js.map +1 -0
- package/dist/engine/eventSubscription.d.ts +59 -0
- package/dist/engine/eventSubscription.d.ts.map +1 -0
- package/dist/engine/eventSubscription.js +74 -0
- package/dist/engine/eventSubscription.js.map +1 -0
- package/dist/engine/file.d.ts +43 -0
- package/dist/engine/file.d.ts.map +1 -0
- package/dist/engine/file.js +115 -0
- package/dist/engine/file.js.map +1 -0
- package/dist/engine/groupDm.d.ts +54 -0
- package/dist/engine/groupDm.d.ts.map +1 -0
- package/dist/engine/groupDm.js +262 -0
- package/dist/engine/groupDm.js.map +1 -0
- package/dist/engine/inboundWebhook.d.ts +45 -0
- package/dist/engine/inboundWebhook.d.ts.map +1 -0
- package/dist/engine/inboundWebhook.js +170 -0
- package/dist/engine/inboundWebhook.js.map +1 -0
- package/dist/engine/inbox.d.ts +34 -0
- package/dist/engine/inbox.d.ts.map +1 -0
- package/dist/engine/inbox.js +141 -0
- package/dist/engine/inbox.js.map +1 -0
- package/dist/engine/index.d.ts +10 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +10 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/message.d.ts +81 -0
- package/dist/engine/message.d.ts.map +1 -0
- package/dist/engine/message.js +293 -0
- package/dist/engine/message.js.map +1 -0
- package/dist/engine/presence.d.ts +12 -0
- package/dist/engine/presence.d.ts.map +1 -0
- package/dist/engine/presence.js +24 -0
- package/dist/engine/presence.js.map +1 -0
- package/dist/engine/reaction.d.ts +19 -0
- package/dist/engine/reaction.d.ts.map +1 -0
- package/dist/engine/reaction.js +97 -0
- package/dist/engine/reaction.js.map +1 -0
- package/dist/engine/receipt.d.ts +19 -0
- package/dist/engine/receipt.d.ts.map +1 -0
- package/dist/engine/receipt.js +96 -0
- package/dist/engine/receipt.js.map +1 -0
- package/dist/engine/resyncQuery.d.ts +15 -0
- package/dist/engine/resyncQuery.d.ts.map +1 -0
- package/dist/engine/resyncQuery.js +124 -0
- package/dist/engine/resyncQuery.js.map +1 -0
- package/dist/engine/routing.d.ts +45 -0
- package/dist/engine/routing.d.ts.map +1 -0
- package/dist/engine/routing.js +390 -0
- package/dist/engine/routing.js.map +1 -0
- package/dist/engine/search.d.ts +19 -0
- package/dist/engine/search.d.ts.map +1 -0
- package/dist/engine/search.js +60 -0
- package/dist/engine/search.js.map +1 -0
- package/dist/engine/searchQuery.d.ts +8 -0
- package/dist/engine/searchQuery.d.ts.map +1 -0
- package/dist/engine/searchQuery.js +19 -0
- package/dist/engine/searchQuery.js.map +1 -0
- package/dist/engine/sessionEvent.d.ts +29 -0
- package/dist/engine/sessionEvent.d.ts.map +1 -0
- package/dist/engine/sessionEvent.js +76 -0
- package/dist/engine/sessionEvent.js.map +1 -0
- package/dist/engine/snowflake.d.ts +14 -0
- package/dist/engine/snowflake.d.ts.map +1 -0
- package/dist/engine/snowflake.js +88 -0
- package/dist/engine/snowflake.js.map +1 -0
- package/dist/engine/systemPrompt.d.ts +13 -0
- package/dist/engine/systemPrompt.d.ts.map +1 -0
- package/dist/engine/systemPrompt.js +31 -0
- package/dist/engine/systemPrompt.js.map +1 -0
- package/dist/engine/thread.d.ts +56 -0
- package/dist/engine/thread.d.ts.map +1 -0
- package/dist/engine/thread.js +158 -0
- package/dist/engine/thread.js.map +1 -0
- package/dist/engine/tokenRotate.d.ts +8 -0
- package/dist/engine/tokenRotate.d.ts.map +1 -0
- package/dist/engine/tokenRotate.js +25 -0
- package/dist/engine/tokenRotate.js.map +1 -0
- package/dist/engine/usage.d.ts +16 -0
- package/dist/engine/usage.d.ts.map +1 -0
- package/dist/engine/usage.js +24 -0
- package/dist/engine/usage.js.map +1 -0
- package/dist/engine/workspace.d.ts +44 -0
- package/dist/engine/workspace.d.ts.map +1 -0
- package/dist/engine/workspace.js +127 -0
- package/dist/engine/workspace.js.map +1 -0
- package/dist/engine/wsTransform.d.ts +14 -0
- package/dist/engine/wsTransform.d.ts.map +1 -0
- package/dist/engine/wsTransform.js +196 -0
- package/dist/engine/wsTransform.js.map +1 -0
- package/dist/engine.d.ts +18 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +275 -0
- package/dist/engine.js.map +1 -0
- package/dist/entrypoints/node.d.ts +35 -0
- package/dist/entrypoints/node.d.ts.map +1 -0
- package/dist/entrypoints/node.js +114 -0
- package/dist/entrypoints/node.js.map +1 -0
- package/dist/env.d.ts +38 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +2 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/logger.d.ts +47 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +214 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/origin.d.ts +25 -0
- package/dist/lib/origin.d.ts.map +1 -0
- package/dist/lib/origin.js +80 -0
- package/dist/lib/origin.js.map +1 -0
- package/dist/lib/serverTelemetry.d.ts +12 -0
- package/dist/lib/serverTelemetry.d.ts.map +1 -0
- package/dist/lib/serverTelemetry.js +46 -0
- package/dist/lib/serverTelemetry.js.map +1 -0
- package/dist/lib/ssrf.d.ts +23 -0
- package/dist/lib/ssrf.d.ts.map +1 -0
- package/dist/lib/ssrf.js +57 -0
- package/dist/lib/ssrf.js.map +1 -0
- package/dist/lib/workspaceStream.d.ts +9 -0
- package/dist/lib/workspaceStream.d.ts.map +1 -0
- package/dist/lib/workspaceStream.js +53 -0
- package/dist/lib/workspaceStream.js.map +1 -0
- package/dist/middleware/auth.d.ts +9 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +40 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/engine-context.d.ts +9 -0
- package/dist/middleware/engine-context.d.ts.map +1 -0
- package/dist/middleware/engine-context.js +15 -0
- package/dist/middleware/engine-context.js.map +1 -0
- package/dist/middleware/idempotency.d.ts +24 -0
- package/dist/middleware/idempotency.d.ts.map +1 -0
- package/dist/middleware/idempotency.js +148 -0
- package/dist/middleware/idempotency.js.map +1 -0
- package/dist/middleware/logger.d.ts +4 -0
- package/dist/middleware/logger.d.ts.map +1 -0
- package/dist/middleware/logger.js +163 -0
- package/dist/middleware/logger.js.map +1 -0
- package/dist/middleware/planLimits.d.ts +5 -0
- package/dist/middleware/planLimits.d.ts.map +1 -0
- package/dist/middleware/planLimits.js +35 -0
- package/dist/middleware/planLimits.js.map +1 -0
- package/dist/middleware/presenceRefresh.d.ts +3 -0
- package/dist/middleware/presenceRefresh.d.ts.map +1 -0
- package/dist/middleware/presenceRefresh.js +18 -0
- package/dist/middleware/presenceRefresh.js.map +1 -0
- package/dist/middleware/rateLimit.d.ts +3 -0
- package/dist/middleware/rateLimit.d.ts.map +1 -0
- package/dist/middleware/rateLimit.js +69 -0
- package/dist/middleware/rateLimit.js.map +1 -0
- package/dist/middleware/usageTracker.d.ts +3 -0
- package/dist/middleware/usageTracker.d.ts.map +1 -0
- package/dist/middleware/usageTracker.js +10 -0
- package/dist/middleware/usageTracker.js.map +1 -0
- package/dist/ports/auth.d.ts +45 -0
- package/dist/ports/auth.d.ts.map +1 -0
- package/dist/ports/auth.js +2 -0
- package/dist/ports/auth.js.map +1 -0
- package/dist/ports/database.d.ts +20 -0
- package/dist/ports/database.d.ts.map +1 -0
- package/dist/ports/database.js +2 -0
- package/dist/ports/database.js.map +1 -0
- package/dist/ports/entitlements.d.ts +25 -0
- package/dist/ports/entitlements.d.ts.map +1 -0
- package/dist/ports/entitlements.js +2 -0
- package/dist/ports/entitlements.js.map +1 -0
- package/dist/ports/event-queue.d.ts +19 -0
- package/dist/ports/event-queue.d.ts.map +1 -0
- package/dist/ports/event-queue.js +2 -0
- package/dist/ports/event-queue.js.map +1 -0
- package/dist/ports/files.d.ts +28 -0
- package/dist/ports/files.d.ts.map +1 -0
- package/dist/ports/files.js +2 -0
- package/dist/ports/files.js.map +1 -0
- package/dist/ports/index.d.ts +84 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +2 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/kv.d.ts +25 -0
- package/dist/ports/kv.d.ts.map +1 -0
- package/dist/ports/kv.js +2 -0
- package/dist/ports/kv.js.map +1 -0
- package/dist/ports/mcp.d.ts +18 -0
- package/dist/ports/mcp.d.ts.map +1 -0
- package/dist/ports/mcp.js +2 -0
- package/dist/ports/mcp.js.map +1 -0
- package/dist/ports/presence.d.ts +18 -0
- package/dist/ports/presence.d.ts.map +1 -0
- package/dist/ports/presence.js +2 -0
- package/dist/ports/presence.js.map +1 -0
- package/dist/ports/rate-limit.d.ts +20 -0
- package/dist/ports/rate-limit.d.ts.map +1 -0
- package/dist/ports/rate-limit.js +2 -0
- package/dist/ports/rate-limit.js.map +1 -0
- package/dist/ports/realtime.d.ts +104 -0
- package/dist/ports/realtime.d.ts.map +1 -0
- package/dist/ports/realtime.js +19 -0
- package/dist/ports/realtime.js.map +1 -0
- package/dist/ports/telemetry.d.ts +20 -0
- package/dist/ports/telemetry.d.ts.map +1 -0
- package/dist/ports/telemetry.js +2 -0
- package/dist/ports/telemetry.js.map +1 -0
- package/dist/providers/noop-telemetry.d.ts +13 -0
- package/dist/providers/noop-telemetry.d.ts.map +1 -0
- package/dist/providers/noop-telemetry.js +16 -0
- package/dist/providers/noop-telemetry.js.map +1 -0
- package/dist/providers/static-entitlements.d.ts +23 -0
- package/dist/providers/static-entitlements.d.ts.map +1 -0
- package/dist/providers/static-entitlements.js +42 -0
- package/dist/providers/static-entitlements.js.map +1 -0
- package/dist/routes/a2a.d.ts +4 -0
- package/dist/routes/a2a.d.ts.map +1 -0
- package/dist/routes/a2a.js +375 -0
- package/dist/routes/a2a.js.map +1 -0
- package/dist/routes/action.d.ts +4 -0
- package/dist/routes/action.d.ts.map +1 -0
- package/dist/routes/action.js +213 -0
- package/dist/routes/action.js.map +1 -0
- package/dist/routes/agent.d.ts +4 -0
- package/dist/routes/agent.d.ts.map +1 -0
- package/dist/routes/agent.js +431 -0
- package/dist/routes/agent.js.map +1 -0
- package/dist/routes/background.d.ts +13 -0
- package/dist/routes/background.d.ts.map +1 -0
- package/dist/routes/background.js +33 -0
- package/dist/routes/background.js.map +1 -0
- package/dist/routes/certify.d.ts +4 -0
- package/dist/routes/certify.d.ts.map +1 -0
- package/dist/routes/certify.js +119 -0
- package/dist/routes/certify.js.map +1 -0
- package/dist/routes/channel.d.ts +4 -0
- package/dist/routes/channel.d.ts.map +1 -0
- package/dist/routes/channel.js +492 -0
- package/dist/routes/channel.js.map +1 -0
- package/dist/routes/console.d.ts +4 -0
- package/dist/routes/console.d.ts.map +1 -0
- package/dist/routes/console.js +117 -0
- package/dist/routes/console.js.map +1 -0
- package/dist/routes/directory.d.ts +4 -0
- package/dist/routes/directory.d.ts.map +1 -0
- package/dist/routes/directory.js +236 -0
- package/dist/routes/directory.js.map +1 -0
- package/dist/routes/dm.d.ts +4 -0
- package/dist/routes/dm.d.ts.map +1 -0
- package/dist/routes/dm.js +157 -0
- package/dist/routes/dm.js.map +1 -0
- package/dist/routes/eventSubscription.d.ts +4 -0
- package/dist/routes/eventSubscription.d.ts.map +1 -0
- package/dist/routes/eventSubscription.js +115 -0
- package/dist/routes/eventSubscription.js.map +1 -0
- package/dist/routes/fanout.d.ts +17 -0
- package/dist/routes/fanout.d.ts.map +1 -0
- package/dist/routes/fanout.js +150 -0
- package/dist/routes/fanout.js.map +1 -0
- package/dist/routes/file.d.ts +4 -0
- package/dist/routes/file.d.ts.map +1 -0
- package/dist/routes/file.js +166 -0
- package/dist/routes/file.js.map +1 -0
- package/dist/routes/groupDm.d.ts +4 -0
- package/dist/routes/groupDm.d.ts.map +1 -0
- package/dist/routes/groupDm.js +204 -0
- package/dist/routes/groupDm.js.map +1 -0
- package/dist/routes/health.d.ts +4 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +10 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/inboundWebhook.d.ts +4 -0
- package/dist/routes/inboundWebhook.d.ts.map +1 -0
- package/dist/routes/inboundWebhook.js +149 -0
- package/dist/routes/inboundWebhook.js.map +1 -0
- package/dist/routes/inbox.d.ts +4 -0
- package/dist/routes/inbox.d.ts.map +1 -0
- package/dist/routes/inbox.js +23 -0
- package/dist/routes/inbox.js.map +1 -0
- package/dist/routes/message.d.ts +4 -0
- package/dist/routes/message.d.ts.map +1 -0
- package/dist/routes/message.js +164 -0
- package/dist/routes/message.js.map +1 -0
- package/dist/routes/presence.d.ts +4 -0
- package/dist/routes/presence.d.ts.map +1 -0
- package/dist/routes/presence.js +70 -0
- package/dist/routes/presence.js.map +1 -0
- package/dist/routes/reaction.d.ts +4 -0
- package/dist/routes/reaction.d.ts.map +1 -0
- package/dist/routes/reaction.js +152 -0
- package/dist/routes/reaction.js.map +1 -0
- package/dist/routes/receipt.d.ts +4 -0
- package/dist/routes/receipt.d.ts.map +1 -0
- package/dist/routes/receipt.js +100 -0
- package/dist/routes/receipt.js.map +1 -0
- package/dist/routes/routing.d.ts +4 -0
- package/dist/routes/routing.d.ts.map +1 -0
- package/dist/routes/routing.js +186 -0
- package/dist/routes/routing.js.map +1 -0
- package/dist/routes/search.d.ts +4 -0
- package/dist/routes/search.d.ts.map +1 -0
- package/dist/routes/search.js +48 -0
- package/dist/routes/search.js.map +1 -0
- package/dist/routes/systemPrompt.d.ts +4 -0
- package/dist/routes/systemPrompt.d.ts.map +1 -0
- package/dist/routes/systemPrompt.js +66 -0
- package/dist/routes/systemPrompt.js.map +1 -0
- package/dist/routes/thread.d.ts +4 -0
- package/dist/routes/thread.d.ts.map +1 -0
- package/dist/routes/thread.js +126 -0
- package/dist/routes/thread.js.map +1 -0
- package/dist/routes/workspace.d.ts +4 -0
- package/dist/routes/workspace.d.ts.map +1 -0
- package/dist/routes/workspace.js +355 -0
- package/dist/routes/workspace.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { requireAuth } from '../middleware/auth.js';
|
|
4
|
+
import { rateLimit } from '../middleware/rateLimit.js';
|
|
5
|
+
import * as eventSubscriptionEngine from '../engine/eventSubscription.js';
|
|
6
|
+
import { emitServerEvent } from '../lib/serverTelemetry.js';
|
|
7
|
+
export const eventSubscriptionRoutes = new Hono();
|
|
8
|
+
const createSubscriptionSchema = z.object({
|
|
9
|
+
events: z.array(z.string()).min(1),
|
|
10
|
+
filter: z.object({
|
|
11
|
+
channel: z.string().optional(),
|
|
12
|
+
mentions: z.string().optional(),
|
|
13
|
+
}).nullable().optional(),
|
|
14
|
+
url: z.string().min(1),
|
|
15
|
+
secret: z.string().nullable().optional(),
|
|
16
|
+
});
|
|
17
|
+
// POST /v1/subscriptions - create an outbound event subscription
|
|
18
|
+
eventSubscriptionRoutes.post('/subscriptions', requireAuth, rateLimit, async (c) => {
|
|
19
|
+
try {
|
|
20
|
+
const db = c.get('db');
|
|
21
|
+
const workspace = c.get('workspace');
|
|
22
|
+
const parsed = createSubscriptionSchema.safeParse(await c.req.json());
|
|
23
|
+
if (!parsed.success) {
|
|
24
|
+
const hasEventsIssue = parsed.error.issues.some((issue) => issue.path[0] === 'events');
|
|
25
|
+
const hasUrlIssue = parsed.error.issues.some((issue) => issue.path[0] === 'url');
|
|
26
|
+
const message = hasEventsIssue
|
|
27
|
+
? 'events array is required'
|
|
28
|
+
: hasUrlIssue
|
|
29
|
+
? 'url is required'
|
|
30
|
+
: 'invalid subscription body';
|
|
31
|
+
return c.json({
|
|
32
|
+
ok: false,
|
|
33
|
+
error: { code: 'invalid_request', message },
|
|
34
|
+
}, 400);
|
|
35
|
+
}
|
|
36
|
+
const { events, filter, url, secret } = parsed.data;
|
|
37
|
+
const result = await eventSubscriptionEngine.createSubscription(db, workspace.id, { events, filter, url, secret: secret ?? undefined });
|
|
38
|
+
emitServerEvent(c, workspace.id, 'relaycast_server_subscription_created', {
|
|
39
|
+
subscription_id: result.id,
|
|
40
|
+
event_count: result.events.length,
|
|
41
|
+
});
|
|
42
|
+
return c.json({ ok: true, data: result }, 201);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
const error = err;
|
|
46
|
+
return c.json({
|
|
47
|
+
ok: false,
|
|
48
|
+
error: { code: error.code || 'internal_error', message: error.message },
|
|
49
|
+
}, (error.status || 500));
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
// GET /v1/subscriptions - list subscriptions
|
|
53
|
+
eventSubscriptionRoutes.get('/subscriptions', requireAuth, rateLimit, async (c) => {
|
|
54
|
+
try {
|
|
55
|
+
const db = c.get('db');
|
|
56
|
+
const workspace = c.get('workspace');
|
|
57
|
+
const result = await eventSubscriptionEngine.listSubscriptions(db, workspace.id);
|
|
58
|
+
return c.json({ ok: true, data: result });
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
const error = err;
|
|
62
|
+
return c.json({
|
|
63
|
+
ok: false,
|
|
64
|
+
error: { code: error.code || 'internal_error', message: error.message },
|
|
65
|
+
}, (error.status || 500));
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
// GET /v1/subscriptions/:id - get a single subscription
|
|
69
|
+
eventSubscriptionRoutes.get('/subscriptions/:id', requireAuth, rateLimit, async (c) => {
|
|
70
|
+
try {
|
|
71
|
+
const db = c.get('db');
|
|
72
|
+
const workspace = c.get('workspace');
|
|
73
|
+
const result = await eventSubscriptionEngine.getSubscription(db, workspace.id, c.req.param('id'));
|
|
74
|
+
if (!result) {
|
|
75
|
+
return c.json({
|
|
76
|
+
ok: false,
|
|
77
|
+
error: { code: 'subscription_not_found', message: 'Subscription not found' },
|
|
78
|
+
}, 404);
|
|
79
|
+
}
|
|
80
|
+
return c.json({ ok: true, data: result });
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const error = err;
|
|
84
|
+
return c.json({
|
|
85
|
+
ok: false,
|
|
86
|
+
error: { code: error.code || 'internal_error', message: error.message },
|
|
87
|
+
}, (error.status || 500));
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
// DELETE /v1/subscriptions/:id - delete a subscription
|
|
91
|
+
eventSubscriptionRoutes.delete('/subscriptions/:id', requireAuth, rateLimit, async (c) => {
|
|
92
|
+
try {
|
|
93
|
+
const db = c.get('db');
|
|
94
|
+
const workspace = c.get('workspace');
|
|
95
|
+
const deleted = await eventSubscriptionEngine.deleteSubscription(db, workspace.id, c.req.param('id'));
|
|
96
|
+
if (!deleted) {
|
|
97
|
+
return c.json({
|
|
98
|
+
ok: false,
|
|
99
|
+
error: { code: 'subscription_not_found', message: 'Subscription not found' },
|
|
100
|
+
}, 404);
|
|
101
|
+
}
|
|
102
|
+
emitServerEvent(c, workspace.id, 'relaycast_server_subscription_deleted', {
|
|
103
|
+
subscription_id: c.req.param('id'),
|
|
104
|
+
});
|
|
105
|
+
return c.body(null, 204);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const error = err;
|
|
109
|
+
return c.json({
|
|
110
|
+
ok: false,
|
|
111
|
+
error: { code: error.code || 'internal_error', message: error.message },
|
|
112
|
+
}, (error.status || 500));
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=eventSubscription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventSubscription.js","sourceRoot":"","sources":["../../src/routes/eventSubscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,KAAK,uBAAuB,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,IAAI,EAAU,CAAC;AAE1D,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAChC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,iEAAiE;AACjE,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACjF,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;YACvF,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;YACjF,MAAM,OAAO,GAAG,cAAc;gBAC5B,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,WAAW;oBACX,CAAC,CAAC,iBAAiB;oBACnB,CAAC,CAAC,2BAA2B,CAAC;YAClC,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE;aAC5C,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,kBAAkB,CAC7D,EAAE,EACF,SAAS,CAAC,EAAE,EACZ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,SAAS,EAAE,CACrD,CAAC;QACF,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,uCAAuC,EAAE;YACxE,eAAe,EAAE,MAAM,CAAC,EAAE;YAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;SAClC,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,GAAiD,CAAC;QAChE,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;SACxE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAQ,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,6CAA6C;AAC7C,uBAAuB,CAAC,GAAG,CAAC,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChF,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;QACjF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,GAAiD,CAAC;QAChE,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;SACxE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAQ,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,wDAAwD;AACxD,uBAAuB,CAAC,GAAG,CAAC,oBAAoB,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACpF,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,eAAe,CAC1D,EAAE,EACF,SAAS,CAAC,EAAE,EACZ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAClB,CAAC;QACF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,wBAAwB,EAAE;aAC7E,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,GAAiD,CAAC;QAChE,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;SACxE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAQ,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,uDAAuD;AACvD,uBAAuB,CAAC,MAAM,CAAC,oBAAoB,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvF,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,kBAAkB,CAC9D,EAAE,EACF,SAAS,CAAC,EAAE,EACZ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAClB,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,wBAAwB,EAAE;aAC7E,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QACD,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,uCAAuC,EAAE;YACxE,eAAe,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;SACnC,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,GAAiD,CAAC;QAChE,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;SACxE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAQ,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
import type { AppEnv } from '../env.js';
|
|
3
|
+
type HonoContext = Context<AppEnv>;
|
|
4
|
+
export declare function fanoutToChannel(c: HonoContext, channelId: string, type: string, data: Record<string, unknown>, members?: string[], // Optional: provide members for member-cache initialization
|
|
5
|
+
workspaceIdOverride?: string): Promise<void>;
|
|
6
|
+
export declare function fanoutToAgents(c: HonoContext, agentIds: string[], type: string, data: Record<string, unknown>): Promise<void>;
|
|
7
|
+
export declare function fanoutToWorkspace(c: HonoContext, type: string, data: Record<string, unknown>): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Check if a channel belongs to a DM conversation and return active participant
|
|
10
|
+
* agent IDs. Returns `null` for regular (non-DM) channels or on any error so
|
|
11
|
+
* callers can fall back to the standard `fanoutToChannel` path.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getDmParticipantAgentIds(c: HonoContext, channelId: string): Promise<string[] | null>;
|
|
14
|
+
export declare function updateChannelMuted(c: HonoContext, channelId: string, mutedIds: string[]): Promise<void>;
|
|
15
|
+
export declare function updateChannelMembers(c: HonoContext, channelId: string, memberIds: string[]): Promise<void>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=fanout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fanout.d.ts","sourceRoot":"","sources":["../../src/routes/fanout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAOxC,KAAK,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAuCnC,wBAAsB,eAAe,CACnC,CAAC,EAAE,WAAW,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,4DAA4D;AAChF,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED,wBAAsB,cAAc,CAClC,CAAC,EAAE,WAAW,EACd,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,iBAAiB,CACrC,CAAC,EAAE,WAAW,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,CAAC,EAAE,WAAW,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAqB1B;AAED,wBAAsB,kBAAkB,CACtC,CAAC,EAAE,WAAW,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,oBAAoB,CACxC,CAAC,EAAE,WAAW,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { transformForClient } from '../engine/wsTransform.js';
|
|
2
|
+
import { isWorkspaceStreamEnabled } from '../lib/workspaceStream.js';
|
|
3
|
+
import { getRequestLogger, toErrorDetails } from '../lib/logger.js';
|
|
4
|
+
import { dmConversations, dmParticipants } from '../db/schema.js';
|
|
5
|
+
import { and, eq, isNull } from 'drizzle-orm';
|
|
6
|
+
function buildEvent(type, workspaceId, data, channelId) {
|
|
7
|
+
return {
|
|
8
|
+
type,
|
|
9
|
+
workspace_id: workspaceId,
|
|
10
|
+
channel_id: channelId,
|
|
11
|
+
data,
|
|
12
|
+
timestamp: new Date().toISOString(),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
async function workspaceStreamEnabled(c, workspaceId) {
|
|
16
|
+
const { kv, config } = c.get('engine');
|
|
17
|
+
return isWorkspaceStreamEnabled(kv, workspaceId, config.workspaceStreamEnabled ?? false);
|
|
18
|
+
}
|
|
19
|
+
async function publishToWorkspaceStream(c, workspaceId, payload) {
|
|
20
|
+
const logger = getRequestLogger(c, 'fanout.workspace_stream');
|
|
21
|
+
if (!(await workspaceStreamEnabled(c, workspaceId)))
|
|
22
|
+
return;
|
|
23
|
+
try {
|
|
24
|
+
await c.get('engine').realtime.publishToWorkspaceStream({ workspaceId, event: payload });
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
logger.error(`workspace stream publish error for workspace ${workspaceId}`, {
|
|
28
|
+
workspace_id: workspaceId,
|
|
29
|
+
...toErrorDetails(err),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export async function fanoutToChannel(c, channelId, type, data, members, // Optional: provide members for member-cache initialization
|
|
34
|
+
workspaceIdOverride) {
|
|
35
|
+
const logger = getRequestLogger(c, 'fanout.channel');
|
|
36
|
+
let workspaceId = workspaceIdOverride;
|
|
37
|
+
if (!workspaceId) {
|
|
38
|
+
const workspace = c.get('workspace');
|
|
39
|
+
workspaceId = workspace?.id;
|
|
40
|
+
}
|
|
41
|
+
if (!workspaceId) {
|
|
42
|
+
logger.error('fanoutToChannel missing workspace context', {
|
|
43
|
+
channel_id: channelId,
|
|
44
|
+
event_type: type,
|
|
45
|
+
});
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const event = buildEvent(type, workspaceId, data, channelId);
|
|
49
|
+
const payload = transformForClient(event);
|
|
50
|
+
const ws = workspaceId;
|
|
51
|
+
const tasks = [];
|
|
52
|
+
tasks.push(c.get('engine').realtime
|
|
53
|
+
.broadcastToChannel({ workspaceId: ws, channelId, event: payload, members })
|
|
54
|
+
.catch((err) => {
|
|
55
|
+
logger.error(`broadcastToChannel error for channel ${channelId}, event ${type}`, {
|
|
56
|
+
workspace_id: ws,
|
|
57
|
+
channel_id: channelId,
|
|
58
|
+
event_type: type,
|
|
59
|
+
...toErrorDetails(err),
|
|
60
|
+
});
|
|
61
|
+
}));
|
|
62
|
+
tasks.push(publishToWorkspaceStream(c, ws, payload));
|
|
63
|
+
await Promise.allSettled(tasks);
|
|
64
|
+
}
|
|
65
|
+
export async function fanoutToAgents(c, agentIds, type, data) {
|
|
66
|
+
const workspaceId = c.get('workspace').id;
|
|
67
|
+
const event = buildEvent(type, workspaceId, data);
|
|
68
|
+
const payload = transformForClient(event);
|
|
69
|
+
const unique = [...new Set(agentIds)];
|
|
70
|
+
await Promise.allSettled([
|
|
71
|
+
c.get('engine').realtime.deliverToAgents({ workspaceId, agentIds: unique, event: payload }),
|
|
72
|
+
publishToWorkspaceStream(c, workspaceId, payload),
|
|
73
|
+
]);
|
|
74
|
+
}
|
|
75
|
+
export async function fanoutToWorkspace(c, type, data) {
|
|
76
|
+
const logger = getRequestLogger(c, 'fanout.workspace');
|
|
77
|
+
const workspaceId = c.get('workspace').id;
|
|
78
|
+
try {
|
|
79
|
+
const agentIds = await c.get('engine').presence.getOnline(workspaceId);
|
|
80
|
+
await fanoutToAgents(c, agentIds, type, data);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
logger.error(`fanoutToWorkspace error for workspace ${workspaceId}, event ${type}`, {
|
|
84
|
+
workspace_id: workspaceId,
|
|
85
|
+
event_type: type,
|
|
86
|
+
...toErrorDetails(err),
|
|
87
|
+
});
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if a channel belongs to a DM conversation and return active participant
|
|
93
|
+
* agent IDs. Returns `null` for regular (non-DM) channels or on any error so
|
|
94
|
+
* callers can fall back to the standard `fanoutToChannel` path.
|
|
95
|
+
*/
|
|
96
|
+
export async function getDmParticipantAgentIds(c, channelId) {
|
|
97
|
+
try {
|
|
98
|
+
const db = c.get('db');
|
|
99
|
+
const [conv] = await db
|
|
100
|
+
.select({ id: dmConversations.id })
|
|
101
|
+
.from(dmConversations)
|
|
102
|
+
.where(eq(dmConversations.channelId, channelId));
|
|
103
|
+
if (!conv)
|
|
104
|
+
return null;
|
|
105
|
+
const rows = await db
|
|
106
|
+
.select({ agentId: dmParticipants.agentId })
|
|
107
|
+
.from(dmParticipants)
|
|
108
|
+
.where(and(eq(dmParticipants.conversationId, conv.id), isNull(dmParticipants.leftAt)));
|
|
109
|
+
return rows.map((r) => r.agentId);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
const logger = getRequestLogger(c, 'fanout.dm_lookup');
|
|
113
|
+
logger.warn(`getDmParticipantAgentIds failed for channel ${channelId}`, {
|
|
114
|
+
channel_id: channelId,
|
|
115
|
+
...toErrorDetails(err),
|
|
116
|
+
});
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export async function updateChannelMuted(c, channelId, mutedIds) {
|
|
121
|
+
const logger = getRequestLogger(c, 'fanout.update_channel_muted');
|
|
122
|
+
const workspaceId = c.get('workspace').id;
|
|
123
|
+
try {
|
|
124
|
+
await c.get('engine').realtime.setChannelMuted(workspaceId, channelId, mutedIds);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
logger.error(`setChannelMuted error for channel ${channelId}`, {
|
|
128
|
+
workspace_id: workspaceId,
|
|
129
|
+
channel_id: channelId,
|
|
130
|
+
...toErrorDetails(err),
|
|
131
|
+
});
|
|
132
|
+
throw err;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export async function updateChannelMembers(c, channelId, memberIds) {
|
|
136
|
+
const logger = getRequestLogger(c, 'fanout.update_channel_members');
|
|
137
|
+
const workspaceId = c.get('workspace').id;
|
|
138
|
+
try {
|
|
139
|
+
await c.get('engine').realtime.setChannelMembers(workspaceId, channelId, memberIds);
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
logger.error(`setChannelMembers error for channel ${channelId}`, {
|
|
143
|
+
workspace_id: workspaceId,
|
|
144
|
+
channel_id: channelId,
|
|
145
|
+
...toErrorDetails(err),
|
|
146
|
+
});
|
|
147
|
+
throw err;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=fanout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fanout.js","sourceRoot":"","sources":["../../src/routes/fanout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/routes/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAQxC,eAAO,MAAM,UAAU,qDAAqB,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { requireAuth, requireAgentToken } from '../middleware/auth.js';
|
|
4
|
+
import { rateLimit } from '../middleware/rateLimit.js';
|
|
5
|
+
import * as fileEngine from '../engine/file.js';
|
|
6
|
+
import { fanoutToWorkspace } from './fanout.js';
|
|
7
|
+
import { runInBackground } from './background.js';
|
|
8
|
+
import { emitServerEvent } from '../lib/serverTelemetry.js';
|
|
9
|
+
export const fileRoutes = new Hono();
|
|
10
|
+
const fileUploadSchema = z.object({
|
|
11
|
+
filename: z.string().min(1),
|
|
12
|
+
content_type: z.string().min(1),
|
|
13
|
+
size_bytes: z.number().finite().refine((value) => value !== 0),
|
|
14
|
+
});
|
|
15
|
+
// POST /v1/files/upload — Returns presigned PUT URL
|
|
16
|
+
fileRoutes.post('/files/upload', requireAgentToken, rateLimit, async (c) => {
|
|
17
|
+
try {
|
|
18
|
+
const db = c.get('db');
|
|
19
|
+
const workspace = c.get('workspace');
|
|
20
|
+
const agent = c.get('agent');
|
|
21
|
+
const storage = c.get('engine').files;
|
|
22
|
+
const parsed = fileUploadSchema.safeParse(await c.req.json());
|
|
23
|
+
if (!parsed.success) {
|
|
24
|
+
const hasFilenameIssue = parsed.error.issues.some((issue) => issue.path[0] === 'filename');
|
|
25
|
+
const hasContentTypeIssue = parsed.error.issues.some((issue) => issue.path[0] === 'content_type');
|
|
26
|
+
const hasSizeBytesIssue = parsed.error.issues.some((issue) => issue.path[0] === 'size_bytes');
|
|
27
|
+
const message = hasFilenameIssue
|
|
28
|
+
? 'filename is required'
|
|
29
|
+
: hasContentTypeIssue
|
|
30
|
+
? 'content_type is required'
|
|
31
|
+
: hasSizeBytesIssue
|
|
32
|
+
? 'size_bytes is required'
|
|
33
|
+
: 'invalid upload body';
|
|
34
|
+
return c.json({
|
|
35
|
+
ok: false,
|
|
36
|
+
error: { code: 'invalid_request', message },
|
|
37
|
+
}, 400);
|
|
38
|
+
}
|
|
39
|
+
const { filename, content_type, size_bytes } = parsed.data;
|
|
40
|
+
const result = await fileEngine.createUpload(db, storage, workspace.id, agent.id, { filename, content_type, size_bytes });
|
|
41
|
+
emitServerEvent(c, workspace.id, 'relaycast_server_file_upload_requested', {
|
|
42
|
+
file_id: result.id,
|
|
43
|
+
size_bytes,
|
|
44
|
+
content_type,
|
|
45
|
+
});
|
|
46
|
+
return c.json({ ok: true, data: result }, 201);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
const error = err;
|
|
50
|
+
return c.json({
|
|
51
|
+
ok: false,
|
|
52
|
+
error: { code: error.code || 'internal_error', message: error.message },
|
|
53
|
+
}, (error.status || 500));
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
// POST /v1/files/:id/complete — Complete upload
|
|
57
|
+
fileRoutes.post('/files/:id/complete', requireAgentToken, rateLimit, async (c) => {
|
|
58
|
+
try {
|
|
59
|
+
const db = c.get('db');
|
|
60
|
+
const workspace = c.get('workspace');
|
|
61
|
+
const agent = c.get('agent');
|
|
62
|
+
const storage = c.get('engine').files;
|
|
63
|
+
const result = await fileEngine.completeUpload(db, storage, workspace.id, c.req.param('id'), agent.id);
|
|
64
|
+
if (!result) {
|
|
65
|
+
return c.json({
|
|
66
|
+
ok: false,
|
|
67
|
+
error: { code: 'file_not_found', message: 'File not found or not owned by you' },
|
|
68
|
+
}, 404);
|
|
69
|
+
}
|
|
70
|
+
const eventData = { ...result, agent_id: agent.id };
|
|
71
|
+
runInBackground(c, fanoutToWorkspace(c, 'file.uploaded', eventData), 'fanout file.uploaded');
|
|
72
|
+
runInBackground(c, c.get('engine').webhookQueue.send({
|
|
73
|
+
type: 'file.uploaded',
|
|
74
|
+
workspaceId: workspace.id,
|
|
75
|
+
data: { ...result, uploaded_by_name: agent.name },
|
|
76
|
+
}), 'queue file.uploaded');
|
|
77
|
+
emitServerEvent(c, workspace.id, 'relaycast_server_file_upload_completed', {
|
|
78
|
+
file_id: result.id,
|
|
79
|
+
size_bytes: result.size_bytes,
|
|
80
|
+
content_type: result.content_type,
|
|
81
|
+
});
|
|
82
|
+
return c.json({ ok: true, data: result });
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
const error = err;
|
|
86
|
+
return c.json({
|
|
87
|
+
ok: false,
|
|
88
|
+
error: { code: error.code || 'internal_error', message: error.message },
|
|
89
|
+
}, (error.status || 500));
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
// GET /v1/files/:id — Get file metadata
|
|
93
|
+
fileRoutes.get('/files/:id', requireAuth, rateLimit, async (c) => {
|
|
94
|
+
try {
|
|
95
|
+
const db = c.get('db');
|
|
96
|
+
const workspace = c.get('workspace');
|
|
97
|
+
const storage = c.get('engine').files;
|
|
98
|
+
const result = await fileEngine.getFile(db, storage, workspace.id, c.req.param('id'));
|
|
99
|
+
if (!result) {
|
|
100
|
+
return c.json({
|
|
101
|
+
ok: false,
|
|
102
|
+
error: { code: 'file_not_found', message: 'File not found' },
|
|
103
|
+
}, 404);
|
|
104
|
+
}
|
|
105
|
+
return c.json({ ok: true, data: result });
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const error = err;
|
|
109
|
+
return c.json({
|
|
110
|
+
ok: false,
|
|
111
|
+
error: { code: error.code || 'internal_error', message: error.message },
|
|
112
|
+
}, (error.status || 500));
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
// DELETE /v1/files/:id — Soft delete
|
|
116
|
+
fileRoutes.delete('/files/:id', requireAgentToken, rateLimit, async (c) => {
|
|
117
|
+
try {
|
|
118
|
+
const db = c.get('db');
|
|
119
|
+
const workspace = c.get('workspace');
|
|
120
|
+
const agent = c.get('agent');
|
|
121
|
+
const result = await fileEngine.deleteFile(db, workspace.id, c.req.param('id'), agent.id);
|
|
122
|
+
if (result === null) {
|
|
123
|
+
return c.json({
|
|
124
|
+
ok: false,
|
|
125
|
+
error: { code: 'file_not_found', message: 'File not found' },
|
|
126
|
+
}, 404);
|
|
127
|
+
}
|
|
128
|
+
if (result === 'forbidden') {
|
|
129
|
+
return c.json({
|
|
130
|
+
ok: false,
|
|
131
|
+
error: { code: 'forbidden', message: 'Not the file owner' },
|
|
132
|
+
}, 403);
|
|
133
|
+
}
|
|
134
|
+
return c.body(null, 204);
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
const error = err;
|
|
138
|
+
return c.json({
|
|
139
|
+
ok: false,
|
|
140
|
+
error: { code: error.code || 'internal_error', message: error.message },
|
|
141
|
+
}, (error.status || 500));
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
// GET /v1/files — List files
|
|
145
|
+
fileRoutes.get('/files', requireAuth, rateLimit, async (c) => {
|
|
146
|
+
try {
|
|
147
|
+
const db = c.get('db');
|
|
148
|
+
const workspace = c.get('workspace');
|
|
149
|
+
const uploaded_by = c.req.query('uploaded_by');
|
|
150
|
+
const limitStr = c.req.query('limit');
|
|
151
|
+
const limit = limitStr ? parseInt(limitStr, 10) : undefined;
|
|
152
|
+
const result = await fileEngine.listFiles(db, workspace.id, {
|
|
153
|
+
uploaded_by,
|
|
154
|
+
limit,
|
|
155
|
+
});
|
|
156
|
+
return c.json({ ok: true, data: result });
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
const error = err;
|
|
160
|
+
return c.json({
|
|
161
|
+
ok: false,
|
|
162
|
+
error: { code: error.code || 'internal_error', message: error.message },
|
|
163
|
+
}, (error.status || 500));
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/routes/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupDm.d.ts","sourceRoot":"","sources":["../../src/routes/groupDm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWxC,eAAO,MAAM,aAAa,qDAAqB,CAAC"}
|