@gravito/ripple 3.1.0 → 4.0.1

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.
Files changed (190) hide show
  1. package/README.md +260 -19
  2. package/dist/atlas/src/DB.d.ts +348 -0
  3. package/dist/atlas/src/OrbitAtlas.d.ts +9 -0
  4. package/dist/atlas/src/config/defineConfig.d.ts +14 -0
  5. package/dist/atlas/src/config/index.d.ts +7 -0
  6. package/dist/atlas/src/config/loadConfig.d.ts +41 -0
  7. package/dist/atlas/src/connection/Connection.d.ts +112 -0
  8. package/dist/atlas/src/connection/ConnectionManager.d.ts +180 -0
  9. package/dist/atlas/src/connection/ReplicaConnectionPool.d.ts +54 -0
  10. package/dist/atlas/src/drivers/BunSQLDriver.d.ts +32 -0
  11. package/dist/atlas/src/drivers/BunSQLPreparedStatement.d.ts +118 -0
  12. package/dist/atlas/src/drivers/MongoDBDriver.d.ts +36 -0
  13. package/dist/atlas/src/drivers/MySQLDriver.d.ts +79 -0
  14. package/dist/atlas/src/drivers/PostgresDriver.d.ts +96 -0
  15. package/dist/atlas/src/drivers/RedisDriver.d.ts +43 -0
  16. package/dist/atlas/src/drivers/SQLiteDriver.d.ts +45 -0
  17. package/dist/atlas/src/drivers/types.d.ts +260 -0
  18. package/dist/atlas/src/errors/index.d.ts +45 -0
  19. package/dist/atlas/src/grammar/Grammar.d.ts +342 -0
  20. package/dist/atlas/src/grammar/MongoGrammar.d.ts +47 -0
  21. package/dist/atlas/src/grammar/MySQLGrammar.d.ts +54 -0
  22. package/dist/atlas/src/grammar/NullGrammar.d.ts +35 -0
  23. package/dist/atlas/src/grammar/PostgresGrammar.d.ts +62 -0
  24. package/dist/atlas/src/grammar/SQLiteGrammar.d.ts +32 -0
  25. package/dist/atlas/src/index.d.ts +79 -0
  26. package/dist/atlas/src/migration/Migration.d.ts +64 -0
  27. package/dist/atlas/src/migration/MigrationRepository.d.ts +65 -0
  28. package/dist/atlas/src/migration/Migrator.d.ts +110 -0
  29. package/dist/atlas/src/migration/index.d.ts +6 -0
  30. package/dist/atlas/src/observability/AtlasMetrics.d.ts +33 -0
  31. package/dist/atlas/src/observability/AtlasObservability.d.ts +15 -0
  32. package/dist/atlas/src/observability/AtlasTracer.d.ts +12 -0
  33. package/dist/atlas/src/observability/index.d.ts +9 -0
  34. package/dist/atlas/src/orm/Repository.d.ts +247 -0
  35. package/dist/atlas/src/orm/index.d.ts +6 -0
  36. package/dist/atlas/src/orm/model/DirtyTracker.d.ts +121 -0
  37. package/dist/atlas/src/orm/model/Model.d.ts +458 -0
  38. package/dist/atlas/src/orm/model/ModelRegistry.d.ts +20 -0
  39. package/dist/atlas/src/orm/model/concerns/HasAttributes.d.ts +150 -0
  40. package/dist/atlas/src/orm/model/concerns/HasEvents.d.ts +36 -0
  41. package/dist/atlas/src/orm/model/concerns/HasPersistence.d.ts +92 -0
  42. package/dist/atlas/src/orm/model/concerns/HasRelationships.d.ts +117 -0
  43. package/dist/atlas/src/orm/model/concerns/HasSerialization.d.ts +64 -0
  44. package/dist/atlas/src/orm/model/concerns/applyMixins.d.ts +15 -0
  45. package/dist/atlas/src/orm/model/concerns/index.d.ts +12 -0
  46. package/dist/atlas/src/orm/model/decorators.d.ts +138 -0
  47. package/dist/atlas/src/orm/model/errors.d.ts +52 -0
  48. package/dist/atlas/src/orm/model/index.d.ts +10 -0
  49. package/dist/atlas/src/orm/model/relationships.d.ts +207 -0
  50. package/dist/atlas/src/orm/model/types.d.ts +12 -0
  51. package/dist/atlas/src/orm/schema/SchemaRegistry.d.ts +124 -0
  52. package/dist/atlas/src/orm/schema/SchemaSniffer.d.ts +54 -0
  53. package/dist/atlas/src/orm/schema/index.d.ts +6 -0
  54. package/dist/atlas/src/orm/schema/types.d.ts +85 -0
  55. package/dist/atlas/src/pool/AdaptivePoolManager.d.ts +98 -0
  56. package/dist/atlas/src/pool/PoolHealthChecker.d.ts +91 -0
  57. package/dist/atlas/src/pool/PoolStrategy.d.ts +129 -0
  58. package/dist/atlas/src/pool/PoolWarmer.d.ts +92 -0
  59. package/dist/atlas/src/query/Expression.d.ts +60 -0
  60. package/dist/atlas/src/query/NPlusOneDetector.d.ts +10 -0
  61. package/dist/atlas/src/query/QueryBuilder.d.ts +643 -0
  62. package/dist/atlas/src/query/RelationshipResolver.d.ts +23 -0
  63. package/dist/atlas/src/query/clauses/GroupByClause.d.ts +51 -0
  64. package/dist/atlas/src/query/clauses/HavingClause.d.ts +70 -0
  65. package/dist/atlas/src/query/clauses/JoinClause.d.ts +87 -0
  66. package/dist/atlas/src/query/clauses/LimitClause.d.ts +82 -0
  67. package/dist/atlas/src/query/clauses/OrderByClause.d.ts +69 -0
  68. package/dist/atlas/src/query/clauses/SelectClause.d.ts +71 -0
  69. package/dist/atlas/src/query/clauses/WhereClause.d.ts +167 -0
  70. package/dist/atlas/src/query/clauses/index.d.ts +11 -0
  71. package/dist/atlas/src/schema/Blueprint.d.ts +276 -0
  72. package/dist/atlas/src/schema/ColumnDefinition.d.ts +154 -0
  73. package/dist/atlas/src/schema/ForeignKeyDefinition.d.ts +37 -0
  74. package/dist/atlas/src/schema/MigrationGenerator.d.ts +45 -0
  75. package/dist/atlas/src/schema/Schema.d.ts +131 -0
  76. package/dist/atlas/src/schema/SchemaDiff.d.ts +73 -0
  77. package/dist/atlas/src/schema/TypeGenerator.d.ts +57 -0
  78. package/dist/atlas/src/schema/TypeWriter.d.ts +42 -0
  79. package/dist/atlas/src/schema/grammars/MySQLSchemaGrammar.d.ts +23 -0
  80. package/dist/atlas/src/schema/grammars/PostgresSchemaGrammar.d.ts +26 -0
  81. package/dist/atlas/src/schema/grammars/SQLiteSchemaGrammar.d.ts +28 -0
  82. package/dist/atlas/src/schema/grammars/SchemaGrammar.d.ts +97 -0
  83. package/dist/atlas/src/schema/grammars/index.d.ts +7 -0
  84. package/dist/atlas/src/schema/index.d.ts +8 -0
  85. package/dist/atlas/src/seed/Factory.d.ts +90 -0
  86. package/dist/atlas/src/seed/Seeder.d.ts +28 -0
  87. package/dist/atlas/src/seed/SeederRunner.d.ts +74 -0
  88. package/dist/atlas/src/seed/index.d.ts +6 -0
  89. package/dist/atlas/src/sharding/ShardingManager.d.ts +59 -0
  90. package/dist/atlas/src/types/index.d.ts +1182 -0
  91. package/dist/atlas/src/utils/CursorEncoding.d.ts +63 -0
  92. package/dist/atlas/src/utils/levenshtein.d.ts +9 -0
  93. package/dist/core/src/CommandKernel.d.ts +33 -0
  94. package/dist/core/src/ConfigManager.d.ts +39 -0
  95. package/dist/core/src/Container/RequestScopeManager.d.ts +62 -0
  96. package/dist/core/src/Container/RequestScopeMetrics.d.ts +144 -0
  97. package/dist/core/src/Container.d.ts +86 -11
  98. package/dist/core/src/ErrorHandler.d.ts +3 -0
  99. package/dist/core/src/HookManager.d.ts +511 -4
  100. package/dist/core/src/PlanetCore.d.ts +89 -0
  101. package/dist/core/src/RequestContext.d.ts +97 -0
  102. package/dist/core/src/Router.d.ts +1 -5
  103. package/dist/core/src/ServiceProvider.d.ts +22 -0
  104. package/dist/core/src/adapters/GravitoEngineAdapter.d.ts +1 -0
  105. package/dist/core/src/adapters/PhotonAdapter.d.ts +5 -0
  106. package/dist/core/src/adapters/bun/BunContext.d.ts +4 -0
  107. package/dist/core/src/adapters/bun/BunNativeAdapter.d.ts +1 -0
  108. package/dist/core/src/adapters/types.d.ts +27 -0
  109. package/dist/core/src/cli/queue-commands.d.ts +6 -0
  110. package/dist/core/src/engine/AOTRouter.d.ts +7 -12
  111. package/dist/core/src/engine/FastContext.d.ts +27 -2
  112. package/dist/core/src/engine/Gravito.d.ts +0 -1
  113. package/dist/core/src/engine/MinimalContext.d.ts +25 -2
  114. package/dist/core/src/engine/types.d.ts +9 -1
  115. package/dist/core/src/error-handling/RequestScopeErrorContext.d.ts +126 -0
  116. package/dist/core/src/events/BackpressureManager.d.ts +215 -0
  117. package/dist/core/src/events/CircuitBreaker.d.ts +229 -0
  118. package/dist/core/src/events/DeadLetterQueue.d.ts +219 -0
  119. package/dist/core/src/events/EventBackend.d.ts +12 -0
  120. package/dist/core/src/events/EventOptions.d.ts +204 -0
  121. package/dist/core/src/events/EventPriorityQueue.d.ts +301 -0
  122. package/dist/core/src/events/FlowControlStrategy.d.ts +109 -0
  123. package/dist/core/src/events/IdempotencyCache.d.ts +60 -0
  124. package/dist/core/src/events/MessageQueueBridge.d.ts +184 -0
  125. package/dist/core/src/events/PriorityEscalationManager.d.ts +82 -0
  126. package/dist/core/src/events/RetryScheduler.d.ts +104 -0
  127. package/dist/core/src/events/WorkerPool.d.ts +98 -0
  128. package/dist/core/src/events/WorkerPoolConfig.d.ts +153 -0
  129. package/dist/core/src/events/WorkerPoolMetrics.d.ts +65 -0
  130. package/dist/core/src/events/aggregation/AggregationWindow.d.ts +77 -0
  131. package/dist/core/src/events/aggregation/DeduplicationManager.d.ts +135 -0
  132. package/dist/core/src/events/aggregation/EventAggregationManager.d.ts +108 -0
  133. package/dist/core/src/events/aggregation/EventBatcher.d.ts +99 -0
  134. package/dist/core/src/events/aggregation/types.d.ts +117 -0
  135. package/dist/core/src/events/index.d.ts +25 -0
  136. package/dist/core/src/events/observability/EventMetrics.d.ts +132 -0
  137. package/dist/core/src/events/observability/EventTracer.d.ts +68 -0
  138. package/dist/core/src/events/observability/EventTracing.d.ts +161 -0
  139. package/dist/core/src/events/observability/OTelEventMetrics.d.ts +332 -0
  140. package/dist/core/src/events/observability/ObservableHookManager.d.ts +108 -0
  141. package/dist/core/src/events/observability/StreamWorkerMetrics.d.ts +76 -0
  142. package/dist/core/src/events/observability/index.d.ts +24 -0
  143. package/dist/core/src/events/observability/metrics-types.d.ts +16 -0
  144. package/dist/core/src/events/types.d.ts +134 -0
  145. package/dist/core/src/exceptions/CircularDependencyException.d.ts +9 -0
  146. package/dist/core/src/exceptions/index.d.ts +1 -0
  147. package/dist/core/src/health/HealthProvider.d.ts +67 -0
  148. package/dist/core/src/http/types.d.ts +40 -0
  149. package/dist/core/src/index.d.ts +25 -4
  150. package/dist/core/src/instrumentation/index.d.ts +35 -0
  151. package/dist/core/src/instrumentation/opentelemetry.d.ts +178 -0
  152. package/dist/core/src/instrumentation/types.d.ts +182 -0
  153. package/dist/core/src/observability/Metrics.d.ts +244 -0
  154. package/dist/core/src/observability/QueueDashboard.d.ts +136 -0
  155. package/dist/core/src/reliability/DeadLetterQueueManager.d.ts +350 -0
  156. package/dist/core/src/reliability/RetryPolicy.d.ts +217 -0
  157. package/dist/core/src/reliability/index.d.ts +6 -0
  158. package/dist/core/src/router/ControllerDispatcher.d.ts +12 -0
  159. package/dist/core/src/router/RequestValidator.d.ts +20 -0
  160. package/dist/index.js +6709 -9888
  161. package/dist/index.js.map +64 -62
  162. package/dist/photon/src/index.d.ts +19 -0
  163. package/dist/photon/src/middleware/ratelimit-redis.d.ts +50 -0
  164. package/dist/photon/src/middleware/ratelimit.d.ts +161 -0
  165. package/dist/photon/src/openapi.d.ts +19 -0
  166. package/dist/proto/ripple.proto +120 -0
  167. package/dist/ripple/src/RippleServer.d.ts +64 -445
  168. package/dist/ripple/src/channels/ChannelManager.d.ts +25 -10
  169. package/dist/ripple/src/drivers/NATSDriver.d.ts +87 -0
  170. package/dist/ripple/src/drivers/RedisDriver.d.ts +30 -1
  171. package/dist/ripple/src/drivers/index.d.ts +1 -0
  172. package/dist/ripple/src/engines/BunEngine.d.ts +98 -0
  173. package/dist/ripple/src/engines/IRippleEngine.d.ts +205 -0
  174. package/dist/ripple/src/engines/UWebSocketsEngine.d.ts +97 -0
  175. package/dist/ripple/src/engines/WsEngine.d.ts +69 -0
  176. package/dist/ripple/src/engines/index.d.ts +15 -0
  177. package/dist/ripple/src/index.d.ts +2 -0
  178. package/dist/ripple/src/middleware/InterceptorManager.d.ts +21 -0
  179. package/dist/ripple/src/observability/RippleMetrics.d.ts +24 -0
  180. package/dist/ripple/src/reliability/AckManager.d.ts +48 -0
  181. package/dist/ripple/src/serializers/ISerializer.d.ts +39 -0
  182. package/dist/ripple/src/serializers/JsonSerializer.d.ts +19 -0
  183. package/dist/ripple/src/serializers/ProtobufSerializer.d.ts +41 -0
  184. package/dist/ripple/src/serializers/index.d.ts +3 -0
  185. package/dist/ripple/src/tracking/SessionManager.d.ts +104 -0
  186. package/dist/ripple/src/tracking/index.d.ts +1 -0
  187. package/dist/ripple/src/types.d.ts +188 -12
  188. package/dist/ripple/src/utils/MessageSerializer.d.ts +33 -23
  189. package/dist/ripple/src/utils/TokenBucket.d.ts +25 -0
  190. package/package.json +25 -8
@@ -68,3 +68,22 @@ export * from './middleware/binary';
68
68
  * @public
69
69
  */
70
70
  export * from './middleware/htmx';
71
+ /**
72
+ * Rate limiting middleware for Photon.
73
+ *
74
+ * Provides built-in rate limiting with token bucket and sliding window strategies.
75
+ * Supports both memory-based and custom storage backends.
76
+ *
77
+ * @public
78
+ */
79
+ export * from './middleware/ratelimit';
80
+ /**
81
+ * Redis-based rate limiting storage.
82
+ * @public
83
+ */
84
+ export * from './middleware/ratelimit-redis';
85
+ /**
86
+ * OpenAPI utilities
87
+ * @public
88
+ */
89
+ export * from './openapi';
@@ -0,0 +1,50 @@
1
+ import type { RateLimitState, RateLimitStore } from './ratelimit';
2
+ /**
3
+ * Redis-based storage for Rate Limiting.
4
+ *
5
+ * Implements atomic rate limiting using Lua scripts to prevent race conditions
6
+ * in distributed environments.
7
+ *
8
+ * @remarks
9
+ * This store is recommended for production environments with multiple application
10
+ * instances. It requires a Redis client (like ioredis or node-redis).
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import Redis from 'ioredis'
15
+ * import { rateLimit } from '@gravito/photon/middleware'
16
+ * import { RedisStore } from '@gravito/photon/middleware/ratelimit-redis'
17
+ *
18
+ * const redis = new Redis()
19
+ * const app = new Photon()
20
+ *
21
+ * app.use(rateLimit({
22
+ * maxRequests: 100,
23
+ * windowMs: 60000,
24
+ * store: new RedisStore(redis, { maxRequests: 100, windowMs: 60000 })
25
+ * }))
26
+ * ```
27
+ * @public
28
+ */
29
+ export declare class RedisStore implements RateLimitStore {
30
+ private client;
31
+ private config;
32
+ /**
33
+ * Create a new RedisStore.
34
+ *
35
+ * @param client - Redis client instance (must support .eval())
36
+ * @param config - Rate limit configuration
37
+ */
38
+ constructor(client: any, config: {
39
+ maxRequests: number;
40
+ windowMs: number;
41
+ prefix?: string;
42
+ });
43
+ private get prefix();
44
+ /**
45
+ * Atomic increment and TTL management using Lua.
46
+ */
47
+ increment(key: string): Promise<RateLimitState>;
48
+ reset(key: string): Promise<void>;
49
+ get(key: string): Promise<RateLimitState | null>;
50
+ }
@@ -0,0 +1,161 @@
1
+ /**
2
+ * @fileoverview Rate Limiting Middleware for Photon
3
+ *
4
+ * Provides token bucket and sliding window rate limiting strategies.
5
+ * Supports memory-based and Redis-based storage backends.
6
+ *
7
+ * @module @gravito/photon/middleware/ratelimit
8
+ * @since 1.0.0
9
+ */
10
+ import type { Context, MiddlewareHandler } from '@gravito/photon';
11
+ export interface RateLimitConfig {
12
+ /**
13
+ * Maximum number of requests allowed within the time window
14
+ * @default 100
15
+ */
16
+ maxRequests: number;
17
+ /**
18
+ * Time window in milliseconds
19
+ * @default 60000 (1 minute)
20
+ */
21
+ windowMs: number;
22
+ /**
23
+ * Strategy for rate limiting
24
+ * - 'token-bucket': Smooth rate limiting with token refill
25
+ * - 'sliding-window': Time-based window that slides continuously
26
+ * @default 'token-bucket'
27
+ */
28
+ strategy?: 'token-bucket' | 'sliding-window';
29
+ /**
30
+ * Custom key generator function
31
+ * @default (c) => c.req.header('x-forwarded-for') || c.req.header('x-real-ip') || 'unknown'
32
+ */
33
+ keyGenerator?: (c: Context) => string | Promise<string>;
34
+ /**
35
+ * Storage backend for rate limit state
36
+ * @default new MemoryStore()
37
+ */
38
+ store?: RateLimitStore;
39
+ /**
40
+ * Custom handler for rate-limited requests
41
+ * @default (c) => c.json({ error: 'Too Many Requests', retryAfter: <seconds> }, 429)
42
+ */
43
+ onRateLimitExceeded?: (c: Context, retryAfter: number) => Response | Promise<Response>;
44
+ /**
45
+ * Skip rate limiting for certain requests
46
+ * @default undefined
47
+ */
48
+ skip?: (c: Context) => boolean | Promise<boolean>;
49
+ /**
50
+ * Custom headers to include in responses
51
+ * @default true
52
+ */
53
+ standardHeaders?: boolean;
54
+ /**
55
+ * Include draft RateLimit headers (RateLimit-*)
56
+ * @default false
57
+ */
58
+ draftHeaders?: boolean;
59
+ }
60
+ export interface RateLimitStore {
61
+ /**
62
+ * Increment request count and return current state
63
+ */
64
+ increment(key: string): Promise<RateLimitState>;
65
+ /**
66
+ * Reset the rate limit for a key
67
+ */
68
+ reset(key: string): Promise<void>;
69
+ /**
70
+ * Get current state without incrementing
71
+ */
72
+ get(key: string): Promise<RateLimitState | null>;
73
+ }
74
+ export interface RateLimitState {
75
+ /**
76
+ * Number of requests made in current window
77
+ */
78
+ count: number;
79
+ /**
80
+ * Timestamp when the window expires (ms)
81
+ */
82
+ resetTime: number;
83
+ /**
84
+ * Remaining requests allowed
85
+ */
86
+ remaining: number;
87
+ }
88
+ export declare class MemoryStore implements RateLimitStore {
89
+ private config;
90
+ private store;
91
+ private head?;
92
+ private tail?;
93
+ private cleanupInterval;
94
+ constructor(config: {
95
+ maxRequests: number;
96
+ windowMs: number;
97
+ }, cleanupIntervalMs?: number);
98
+ private addNode;
99
+ private removeNode;
100
+ increment(key: string): Promise<RateLimitState>;
101
+ reset(key: string): Promise<void>;
102
+ get(key: string): Promise<RateLimitState | null>;
103
+ /**
104
+ * Cleanup resources
105
+ */
106
+ destroy(): void;
107
+ }
108
+ /**
109
+ * Create a rate limiting middleware
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * import { Photon } from '@gravito/photon'
114
+ * import { rateLimit } from '@gravito/photon/middleware'
115
+ *
116
+ * const app = new Photon()
117
+ *
118
+ * // Basic usage: 100 requests per minute
119
+ * app.use('*', rateLimit({ maxRequests: 100, windowMs: 60000 }))
120
+ *
121
+ * // Per-user rate limiting
122
+ * app.use('/api/*', rateLimit({
123
+ * maxRequests: 50,
124
+ * windowMs: 60000,
125
+ * keyGenerator: (c) => {
126
+ * const userId = c.get('userId')
127
+ * return userId || c.req.header('x-forwarded-for') || 'anonymous'
128
+ * }
129
+ * }))
130
+ * ```
131
+ */
132
+ export declare function rateLimit(config: RateLimitConfig): MiddlewareHandler;
133
+ /**
134
+ * Convenience factory: Create rate limiter with common presets
135
+ */
136
+ export declare const createRateLimiter: {
137
+ /**
138
+ * Strict: 10 requests per minute
139
+ */
140
+ strict: (overrides?: Partial<RateLimitConfig>) => MiddlewareHandler;
141
+ /**
142
+ * Moderate: 60 requests per minute
143
+ */
144
+ moderate: (overrides?: Partial<RateLimitConfig>) => MiddlewareHandler;
145
+ /**
146
+ * Lenient: 100 requests per minute
147
+ */
148
+ lenient: (overrides?: Partial<RateLimitConfig>) => MiddlewareHandler;
149
+ /**
150
+ * API: 1000 requests per hour
151
+ */
152
+ api: (overrides?: Partial<RateLimitConfig>) => MiddlewareHandler;
153
+ /**
154
+ * Auth: 5 attempts per 15 minutes (for login endpoints)
155
+ */
156
+ auth: (overrides?: Partial<RateLimitConfig>) => MiddlewareHandler;
157
+ };
158
+ /**
159
+ * Export convenience preset
160
+ */
161
+ export { createRateLimiter as rateLimiter };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @file packages/photon/src/openapi.ts
3
+ * @module @gravito/photon/openapi
4
+ * @description OpenAPI (Swagger) integration for Photon
5
+ */
6
+ import type { RouteConfig } from '@hono/zod-openapi';
7
+ import { createRoute, OpenAPIHono } from '@hono/zod-openapi';
8
+ import { z } from 'zod';
9
+ /**
10
+ * Photon Open API Class
11
+ * Extends OpenAPIHono to provide a seamless OpenAPI integration.
12
+ */
13
+ export declare class PhotonOpenAPI extends OpenAPIHono {
14
+ /**
15
+ * Helper to create a fully typed route definition.
16
+ */
17
+ static route(config: RouteConfig): RouteConfig;
18
+ }
19
+ export { createRoute, z };
@@ -0,0 +1,120 @@
1
+ syntax = "proto3";
2
+
3
+ package ripple;
4
+
5
+ // -------------------------------------------------------------------
6
+ // Client -> Server Messages
7
+ // -------------------------------------------------------------------
8
+
9
+ message ClientMessage {
10
+ string req_id = 1; // Optional request ID for troubleshooting
11
+
12
+ oneof payload {
13
+ SubscribeRequest subscribe = 10;
14
+ UnsubscribeRequest unsubscribe = 11;
15
+ WhisperRequest whisper = 12;
16
+ PingRequest ping = 13;
17
+ BinaryRequest binary = 14;
18
+ AckRequest ack = 15;
19
+ }
20
+ }
21
+
22
+ message SubscribeRequest {
23
+ string channel = 1;
24
+ optional AuthData auth = 2;
25
+ }
26
+
27
+ message UnsubscribeRequest {
28
+ string channel = 1;
29
+ }
30
+
31
+ message WhisperRequest {
32
+ string channel = 1;
33
+ string event = 2;
34
+ // Payload is generic bytes, application needs to decode based on event
35
+ bytes data = 3;
36
+ }
37
+
38
+ message PingRequest {}
39
+
40
+ message BinaryRequest {
41
+ string channel = 1;
42
+ string event = 2;
43
+ bytes data = 3;
44
+ }
45
+
46
+ message AckRequest {
47
+ int32 seq = 1;
48
+ }
49
+
50
+ message AuthData {
51
+ string socket_id = 1;
52
+ string signature = 2;
53
+ }
54
+
55
+ // -------------------------------------------------------------------
56
+ // Server -> Client Messages
57
+ // -------------------------------------------------------------------
58
+
59
+ message ServerMessage {
60
+ oneof payload {
61
+ ConnectedResponse connected = 10;
62
+ SubscribedResponse subscribed = 11;
63
+ UnsubscribedResponse unsubscribed = 12;
64
+ ErrorResponse error = 13;
65
+ EventMessage event = 14;
66
+ PresenceMessage presence = 15;
67
+ PongResponse pong = 16;
68
+ BinaryMessage binary = 17;
69
+ AckReceivedResponse ack_received = 18;
70
+ ReconnectionTokenMessage reconnection_token = 19;
71
+ }
72
+ }
73
+
74
+ message ConnectedResponse {
75
+ string socket_id = 1;
76
+ }
77
+
78
+ message SubscribedResponse {
79
+ string channel = 1;
80
+ }
81
+
82
+ message UnsubscribedResponse {
83
+ string channel = 1;
84
+ }
85
+
86
+ message ErrorResponse {
87
+ string code = 1;
88
+ string message = 2;
89
+ optional string channel = 3;
90
+ }
91
+
92
+ message EventMessage {
93
+ string channel = 1;
94
+ string event = 2;
95
+ bytes data = 3; // JSON encoded string or raw bytes
96
+ optional int32 seq = 4;
97
+ optional bool need_ack = 5;
98
+ }
99
+
100
+ message PresenceMessage {
101
+ string channel = 1;
102
+ string event = 2; // "join", "leave", "members"
103
+ bytes data = 3; // JSON encoded user info
104
+ }
105
+
106
+ message PongResponse {}
107
+
108
+ message BinaryMessage {
109
+ string channel = 1;
110
+ string event = 2;
111
+ bytes data = 3;
112
+ }
113
+
114
+ message AckReceivedResponse {
115
+ int32 seq = 1;
116
+ }
117
+
118
+ message ReconnectionTokenMessage {
119
+ string token = 1;
120
+ }