@gravito/ripple 4.0.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 (91) hide show
  1. package/dist/atlas/src/DB.d.ts +51 -4
  2. package/dist/atlas/src/config/index.d.ts +1 -1
  3. package/dist/atlas/src/config/loadConfig.d.ts +0 -7
  4. package/dist/atlas/src/connection/Connection.d.ts +4 -0
  5. package/dist/atlas/src/connection/ConnectionManager.d.ts +75 -6
  6. package/dist/atlas/src/connection/ReplicaConnectionPool.d.ts +54 -0
  7. package/dist/atlas/src/drivers/MySQLDriver.d.ts +16 -3
  8. package/dist/atlas/src/drivers/PostgresDriver.d.ts +15 -2
  9. package/dist/atlas/src/index.d.ts +15 -3
  10. package/dist/atlas/src/observability/AtlasMetrics.d.ts +22 -0
  11. package/dist/atlas/src/orm/Repository.d.ts +247 -0
  12. package/dist/atlas/src/orm/index.d.ts +1 -0
  13. package/dist/atlas/src/orm/model/Model.d.ts +11 -2
  14. package/dist/atlas/src/orm/model/concerns/HasAttributes.d.ts +14 -0
  15. package/dist/atlas/src/orm/model/concerns/HasPersistence.d.ts +5 -0
  16. package/dist/atlas/src/orm/model/decorators.d.ts +29 -0
  17. package/dist/atlas/src/orm/model/index.d.ts +1 -1
  18. package/dist/atlas/src/orm/schema/SchemaRegistry.d.ts +1 -0
  19. package/dist/atlas/src/pool/AdaptivePoolManager.d.ts +98 -0
  20. package/dist/atlas/src/pool/PoolHealthChecker.d.ts +91 -0
  21. package/dist/atlas/src/pool/PoolStrategy.d.ts +129 -0
  22. package/dist/atlas/src/pool/PoolWarmer.d.ts +92 -0
  23. package/dist/atlas/src/query/QueryBuilder.d.ts +71 -1
  24. package/dist/atlas/src/query/RelationshipResolver.d.ts +23 -0
  25. package/dist/atlas/src/schema/MigrationGenerator.d.ts +45 -0
  26. package/dist/atlas/src/schema/SchemaDiff.d.ts +73 -0
  27. package/dist/atlas/src/schema/TypeGenerator.d.ts +57 -0
  28. package/dist/atlas/src/schema/TypeWriter.d.ts +42 -0
  29. package/dist/atlas/src/sharding/ShardingManager.d.ts +59 -0
  30. package/dist/atlas/src/types/index.d.ts +83 -1
  31. package/dist/atlas/src/utils/CursorEncoding.d.ts +63 -0
  32. package/dist/core/src/ConfigManager.d.ts +39 -0
  33. package/dist/core/src/Container/RequestScopeManager.d.ts +62 -0
  34. package/dist/core/src/Container/RequestScopeMetrics.d.ts +144 -0
  35. package/dist/core/src/Container.d.ts +45 -0
  36. package/dist/core/src/ErrorHandler.d.ts +3 -0
  37. package/dist/core/src/HookManager.d.ts +95 -0
  38. package/dist/core/src/PlanetCore.d.ts +89 -0
  39. package/dist/core/src/RequestContext.d.ts +97 -0
  40. package/dist/core/src/ServiceProvider.d.ts +22 -0
  41. package/dist/core/src/adapters/PhotonAdapter.d.ts +4 -0
  42. package/dist/core/src/adapters/bun/BunContext.d.ts +4 -0
  43. package/dist/core/src/cli/queue-commands.d.ts +6 -0
  44. package/dist/core/src/engine/AOTRouter.d.ts +6 -1
  45. package/dist/core/src/engine/FastContext.d.ts +23 -0
  46. package/dist/core/src/engine/Gravito.d.ts +0 -1
  47. package/dist/core/src/engine/MinimalContext.d.ts +21 -0
  48. package/dist/core/src/engine/types.d.ts +3 -0
  49. package/dist/core/src/error-handling/RequestScopeErrorContext.d.ts +126 -0
  50. package/dist/core/src/events/BackpressureManager.d.ts +215 -0
  51. package/dist/core/src/events/DeadLetterQueue.d.ts +75 -1
  52. package/dist/core/src/events/EventBackend.d.ts +2 -1
  53. package/dist/core/src/events/EventOptions.d.ts +99 -4
  54. package/dist/core/src/events/EventPriorityQueue.d.ts +105 -6
  55. package/dist/core/src/events/FlowControlStrategy.d.ts +109 -0
  56. package/dist/core/src/events/MessageQueueBridge.d.ts +184 -0
  57. package/dist/core/src/events/PriorityEscalationManager.d.ts +82 -0
  58. package/dist/core/src/events/RetryScheduler.d.ts +104 -0
  59. package/dist/core/src/events/WorkerPool.d.ts +98 -0
  60. package/dist/core/src/events/WorkerPoolConfig.d.ts +153 -0
  61. package/dist/core/src/events/WorkerPoolMetrics.d.ts +65 -0
  62. package/dist/core/src/events/aggregation/AggregationWindow.d.ts +77 -0
  63. package/dist/core/src/events/aggregation/DeduplicationManager.d.ts +135 -0
  64. package/dist/core/src/events/aggregation/EventAggregationManager.d.ts +108 -0
  65. package/dist/core/src/events/aggregation/EventBatcher.d.ts +99 -0
  66. package/dist/core/src/events/aggregation/types.d.ts +117 -0
  67. package/dist/core/src/events/index.d.ts +11 -0
  68. package/dist/core/src/events/observability/OTelEventMetrics.d.ts +92 -0
  69. package/dist/core/src/events/observability/StreamWorkerMetrics.d.ts +76 -0
  70. package/dist/core/src/events/observability/index.d.ts +4 -0
  71. package/dist/core/src/events/types.d.ts +59 -0
  72. package/dist/core/src/health/HealthProvider.d.ts +67 -0
  73. package/dist/core/src/http/types.d.ts +19 -0
  74. package/dist/core/src/index.d.ts +13 -1
  75. package/dist/core/src/observability/Metrics.d.ts +244 -0
  76. package/dist/core/src/observability/QueueDashboard.d.ts +136 -0
  77. package/dist/core/src/reliability/DeadLetterQueueManager.d.ts +34 -0
  78. package/dist/index.js +403 -40
  79. package/dist/index.js.map +11 -9
  80. package/dist/photon/src/index.d.ts +5 -0
  81. package/dist/photon/src/middleware/ratelimit-redis.d.ts +50 -0
  82. package/dist/photon/src/middleware/ratelimit.d.ts +4 -0
  83. package/dist/ripple/src/RippleServer.d.ts +0 -1
  84. package/dist/ripple/src/engines/UWebSocketsEngine.d.ts +97 -0
  85. package/dist/ripple/src/engines/WsEngine.d.ts +69 -0
  86. package/dist/ripple/src/engines/index.d.ts +4 -0
  87. package/dist/ripple/src/serializers/ISerializer.d.ts +1 -1
  88. package/dist/ripple/src/serializers/JsonSerializer.d.ts +1 -1
  89. package/dist/ripple/src/serializers/ProtobufSerializer.d.ts +6 -3
  90. package/dist/ripple/src/types.d.ts +11 -0
  91. package/package.json +3 -2
package/dist/index.js.map CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../node_modules/.bun/@protobufjs+aspromise@1.1.2/node_modules/@protobufjs/aspromise/index.js", "../../../node_modules/.bun/@protobufjs+base64@1.1.2/node_modules/@protobufjs/base64/index.js", "../../../node_modules/.bun/@protobufjs+eventemitter@1.1.0/node_modules/@protobufjs/eventemitter/index.js", "../../../node_modules/.bun/@protobufjs+float@1.0.2/node_modules/@protobufjs/float/index.js", "../../../node_modules/.bun/@protobufjs+inquire@1.1.0/node_modules/@protobufjs/inquire/index.js", "../../../node_modules/.bun/@protobufjs+utf8@1.1.0/node_modules/@protobufjs/utf8/index.js", "../../../node_modules/.bun/@protobufjs+pool@1.1.0/node_modules/@protobufjs/pool/index.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/util/longbits.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/util/minimal.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/writer.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/writer_buffer.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/reader.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/reader_buffer.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/rpc/service.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/rpc.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/roots.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/index-minimal.js", "../../../node_modules/.bun/@protobufjs+codegen@2.0.4/node_modules/@protobufjs/codegen/index.js", "../../../node_modules/.bun/@protobufjs+fetch@1.1.0/node_modules/@protobufjs/fetch/index.js", "../../../node_modules/.bun/@protobufjs+path@1.1.2/node_modules/@protobufjs/path/index.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/namespace.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/mapfield.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/method.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/service.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/message.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/decoder.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/verifier.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/converter.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/wrappers.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/type.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/root.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/util.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/types.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/field.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/oneof.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/object.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/enum.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/encoder.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/index-light.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/tokenize.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/parse.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/common.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/index.js", "../src/channels/Channel.ts", "../src/channels/ChannelManager.ts", "../src/drivers/LocalDriver.ts", "../src/errors/RippleError.ts", "../src/logging/Logger.ts", "../src/drivers/NATSDriver.ts", "../src/drivers/RedisDriver.ts", "../src/events/BroadcastEvent.ts", "../src/events/BroadcastManager.ts", "../src/events/Broadcaster.ts", "../src/health/HealthChecker.ts", "../src/engines/BunEngine.ts", "../src/middleware/InterceptorManager.ts", "../src/observability/RippleMetrics.ts", "../src/reliability/AckManager.ts", "../src/serializers/JsonSerializer.ts", "../src/serializers/ProtobufSerializer.ts", "../src/tracking/ConnectionTracker.ts", "../src/tracking/SessionManager.ts", "../src/utils/TokenBucket.ts", "../src/RippleServer.ts", "../src/OrbitRipple.ts", "../src/utils/MessageSerializer.ts"],
3
+ "sources": ["../../../node_modules/.bun/@protobufjs+aspromise@1.1.2/node_modules/@protobufjs/aspromise/index.js", "../../../node_modules/.bun/@protobufjs+base64@1.1.2/node_modules/@protobufjs/base64/index.js", "../../../node_modules/.bun/@protobufjs+eventemitter@1.1.0/node_modules/@protobufjs/eventemitter/index.js", "../../../node_modules/.bun/@protobufjs+float@1.0.2/node_modules/@protobufjs/float/index.js", "../../../node_modules/.bun/@protobufjs+inquire@1.1.0/node_modules/@protobufjs/inquire/index.js", "../../../node_modules/.bun/@protobufjs+utf8@1.1.0/node_modules/@protobufjs/utf8/index.js", "../../../node_modules/.bun/@protobufjs+pool@1.1.0/node_modules/@protobufjs/pool/index.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/util/longbits.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/util/minimal.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/writer.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/writer_buffer.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/reader.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/reader_buffer.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/rpc/service.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/rpc.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/roots.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/index-minimal.js", "../../../node_modules/.bun/@protobufjs+codegen@2.0.4/node_modules/@protobufjs/codegen/index.js", "../../../node_modules/.bun/@protobufjs+fetch@1.1.0/node_modules/@protobufjs/fetch/index.js", "../../../node_modules/.bun/@protobufjs+path@1.1.2/node_modules/@protobufjs/path/index.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/namespace.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/mapfield.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/method.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/service.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/message.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/decoder.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/verifier.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/converter.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/wrappers.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/type.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/root.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/util.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/types.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/field.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/oneof.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/object.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/enum.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/encoder.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/index-light.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/tokenize.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/parse.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/common.js", "../../../node_modules/.bun/protobufjs@8.0.0/node_modules/protobufjs/src/index.js", "../src/channels/Channel.ts", "../src/channels/ChannelManager.ts", "../src/drivers/LocalDriver.ts", "../src/errors/RippleError.ts", "../src/logging/Logger.ts", "../src/drivers/NATSDriver.ts", "../src/drivers/RedisDriver.ts", "../src/events/BroadcastEvent.ts", "../src/events/BroadcastManager.ts", "../src/events/Broadcaster.ts", "../src/health/HealthChecker.ts", "../src/engines/BunEngine.ts", "../src/engines/UWebSocketsEngine.ts", "../src/engines/WsEngine.ts", "../src/middleware/InterceptorManager.ts", "../src/observability/RippleMetrics.ts", "../src/reliability/AckManager.ts", "../src/serializers/JsonSerializer.ts", "../src/serializers/ProtobufSerializer.ts", "../src/tracking/ConnectionTracker.ts", "../src/tracking/SessionManager.ts", "../src/utils/TokenBucket.ts", "../src/RippleServer.ts", "../src/OrbitRipple.ts", "../src/utils/MessageSerializer.ts"],
4
4
  "sourcesContent": [
5
5
  "\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n",
6
6
  "\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n",
@@ -50,26 +50,28 @@
50
50
  "/**\n * @fileoverview Local (in-memory) driver for @gravito/ripple\n *\n * @module @gravito/ripple/drivers\n */\n\nimport type { DriverStatus, RippleDriver } from '../types'\n\n/**\n * Local (in-memory) driver for Ripple.\n *\n * This driver is intended for development and single-server deployments.\n * It distributes messages directly within the current process memory.\n *\n * @example\n * ```typescript\n * import { RippleServer, LocalDriver } from '@gravito/ripple'\n *\n * const server = new RippleServer({\n * driver: 'local' // Uses LocalDriver internally\n * })\n * ```\n */\nexport class LocalDriver implements RippleDriver {\n /** Driver name identifier */\n readonly name = 'local'\n\n /** In-memory map of channel subscribers: channel -> set of callbacks */\n private listeners = new Map<string, Set<(event: string, data: unknown) => void>>()\n private _initialized = false\n\n /**\n * Publish a message to a channel within the current process.\n *\n * @param channel - Target channel name\n * @param event - Event name\n * @param data - Event payload\n */\n async publish(channel: string, event: string, data: unknown): Promise<void> {\n const callbacks = this.listeners.get(channel)\n if (callbacks) {\n for (const callback of callbacks) {\n callback(event, data)\n }\n }\n }\n\n /**\n * Subscribe to a channel in memory.\n *\n * @param channel - Channel name\n * @param callback - Function called when a message is published to this channel\n */\n async subscribe(\n channel: string,\n callback: (event: string, data: unknown) => void\n ): Promise<void> {\n if (!this.listeners.has(channel)) {\n this.listeners.set(channel, new Set())\n }\n this.listeners.get(channel)?.add(callback)\n }\n\n /**\n * Unsubscribe from a channel in memory.\n *\n * @param channel - Channel name\n */\n async unsubscribe(channel: string): Promise<void> {\n this.listeners.delete(channel)\n }\n\n /**\n * Initialize the local driver.\n */\n async init(): Promise<void> {\n this._initialized = true\n }\n\n /**\n * Shutdown the local driver and clear all listeners.\n */\n async shutdown(): Promise<void> {\n this.listeners.clear()\n this._initialized = false\n }\n\n /**\n * Get the current status of the local driver.\n */\n getStatus(): DriverStatus {\n return {\n name: this.name,\n initialized: this._initialized,\n connected: this._initialized,\n }\n }\n}\n",
51
51
  "/**\n * @fileoverview Ripple error types\n *\n * @module @gravito/ripple/errors\n */\n\n/**\n * Base error class for Ripple module.\n *\n * Provides structured error handling with error codes and messages.\n *\n * @example\n * ```typescript\n * throw new RippleError('INVALID_FORMAT', 'Invalid message format')\n * ```\n */\nexport class RippleError extends Error {\n /**\n * Creates a new RippleError instance.\n *\n * @param code - The error code.\n * @param message - The error message.\n */\n constructor(\n public readonly code: string,\n message: string\n ) {\n super(message)\n this.name = 'RippleError'\n // Ensure proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, RippleError.prototype)\n }\n}\n\n/**\n * Error class for driver-related issues.\n *\n * Used specifically for errors that occur in driver implementations\n * (LocalDriver, RedisDriver).\n *\n * @example\n * ```typescript\n * throw new RippleDriverError(\n * 'REDIS_NOT_INSTALLED',\n * 'ioredis is required for RedisDriver'\n * )\n * ```\n */\nexport class RippleDriverError extends RippleError {\n /**\n * Creates a new RippleDriverError instance.\n *\n * @param code - The error code.\n * @param message - The error message.\n */\n constructor(code: string, message: string) {\n super(code, message)\n this.name = 'RippleDriverError'\n Object.setPrototypeOf(this, RippleDriverError.prototype)\n }\n}\n",
52
52
  "/**\n * Supported log levels for Ripple.\n */\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error'\n\n/**\n * Structured log context containing metadata for logs.\n */\nexport interface LogContext {\n /** ISO 8601 timestamp */\n timestamp: string\n /** Log level */\n level: LogLevel\n /** Module name where the log originated */\n module: string\n /** Unique client identifier if applicable */\n clientId?: string\n /** Channel name if applicable */\n channel?: string\n /** Event name if applicable */\n event?: string\n /** Error code if applicable */\n errorCode?: string\n /** Additional dynamic metadata */\n [key: string]: unknown\n}\n\n/**\n * Interface for Ripple logging implementations.\n *\n * Developers can implement this interface to integrate Ripple with their\n * preferred logging systems (e.g., Winston, Pino, Datadog).\n *\n * @example\n * ```typescript\n * const myLogger: RippleLogger = {\n * debug: (msg, ctx) => console.log('[DEBUG]', msg, ctx),\n * info: (msg, ctx) => console.log('[INFO]', msg, ctx),\n * warn: (msg, ctx) => console.warn('[WARN]', msg, ctx),\n * error: (msg, ctx) => console.error('[ERROR]', msg, ctx)\n * }\n * ```\n */\nexport interface RippleLogger {\n /** Log a debug message */\n debug(message: string, context?: Partial<LogContext>): void\n /** Log an info message */\n info(message: string, context?: Partial<LogContext>): void\n /** Log a warning message */\n warn(message: string, context?: Partial<LogContext>): void\n /** Log an error message */\n error(message: string, context?: Partial<LogContext>): void\n}\n\n/**\n * Default JSON-based console logger for Ripple.\n *\n * Formats logs as JSON strings to the console, suitable for cloud log aggregators.\n */\nexport class ConsoleLogger implements RippleLogger {\n /**\n * Create a new ConsoleLogger.\n *\n * @param module - Module name for identification\n * @param minLevel - Minimum level to log (default: 'info')\n */\n constructor(\n private readonly module: string,\n private readonly minLevel: LogLevel = 'info'\n ) {}\n\n /**\n * Check if a message should be logged based on its level.\n */\n private shouldLog(level: LogLevel): boolean {\n const levels: LogLevel[] = ['debug', 'info', 'warn', 'error']\n return levels.indexOf(level) >= levels.indexOf(this.minLevel)\n }\n\n /**\n * Format the log context with standard metadata.\n */\n private formatContext(level: LogLevel, context?: Partial<LogContext>): LogContext {\n return {\n timestamp: new Date().toISOString(),\n level,\n module: this.module,\n ...context,\n }\n }\n\n /**\n * Log a debug message as JSON.\n */\n debug(message: string, context?: Partial<LogContext>): void {\n if (this.shouldLog('debug')) {\n console.debug(\n JSON.stringify({\n message,\n ...this.formatContext('debug', context),\n })\n )\n }\n }\n\n /**\n * Log an info message as JSON.\n */\n info(message: string, context?: Partial<LogContext>): void {\n if (this.shouldLog('info')) {\n console.info(\n JSON.stringify({\n message,\n ...this.formatContext('info', context),\n })\n )\n }\n }\n\n /**\n * Log a warning message as JSON.\n */\n warn(message: string, context?: Partial<LogContext>): void {\n if (this.shouldLog('warn')) {\n console.warn(\n JSON.stringify({\n message,\n ...this.formatContext('warn', context),\n })\n )\n }\n }\n\n /**\n * Log an error message as JSON.\n */\n error(message: string, context?: Partial<LogContext>): void {\n if (this.shouldLog('error')) {\n console.error(\n JSON.stringify({\n message,\n ...this.formatContext('error', context),\n })\n )\n }\n }\n}\n\n/**\n * Utility function to create a new ConsoleLogger.\n *\n * @param module - Module name\n * @param minLevel - Minimum log level\n * @returns A new RippleLogger instance\n */\nexport function createLogger(module: string, minLevel?: LogLevel): RippleLogger {\n return new ConsoleLogger(module, minLevel)\n}\n",
53
- "/**\n * @fileoverview NATS driver for @gravito/ripple\n *\n * @module @gravito/ripple/drivers\n */\n\n// @ts-expect-error\nimport type { ConnectionOptions, NatsConnection } from 'nats'\nimport { RippleDriverError } from '../errors/RippleError'\nimport type { RippleLogger } from '../logging/Logger'\nimport { createLogger } from '../logging/Logger'\nimport type { DriverStatus, PresenceUserInfo, RippleDriver } from '../types'\n\n/**\n * Configuration for the NATSDriver.\n */\nexport interface NATSDriverConfig {\n /** NATS server URL (default: 'nats://localhost:4222') */\n servers?: string | string[]\n /** Credentials for authentication */\n user?: string\n password?: string\n token?: string\n /** Prefix for Ripple NATS subjects (default: 'ripple.') */\n subjectPrefix?: string\n /** Custom logger instance */\n logger?: RippleLogger\n /** Optional NATS connection options */\n connectionOptions?: ConnectionOptions\n}\n\n/**\n * NATS driver for Ripple, offering high-performance distributed broadcasting.\n *\n * @example\n * ```typescript\n * import { RippleServer, NATSDriver } from '@gravito/ripple'\n *\n * const server = new RippleServer({\n * driver: 'nats',\n * nats: {\n * servers: 'nats://localhost:4222'\n * }\n * })\n * ```\n */\nexport class NATSDriver implements RippleDriver {\n readonly name = 'nats'\n\n private nats?: NatsConnection\n private subjectPrefix: string\n private subscriptions = new Map<string, any>()\n private callbacks = new Map<string, Set<(event: string, data: unknown) => void>>()\n private _initialized = false\n private _connected = false\n private _lastError?: string\n private logger: RippleLogger\n\n constructor(private config: NATSDriverConfig = {}) {\n this.subjectPrefix = config.subjectPrefix ?? 'ripple.'\n this.logger = config.logger ?? createLogger('NATSDriver')\n }\n\n get isInitialized(): boolean {\n return this._initialized\n }\n\n async init(): Promise<void> {\n if (this._initialized) return\n\n this.logger.info('Initializing NATSDriver', {\n servers: this.config.servers ?? 'nats://localhost:4222',\n })\n\n try {\n // @ts-expect-error\n const { connect } = await import('nats')\n this.nats = await connect({\n servers: this.config.servers ?? 'nats://localhost:4222',\n user: this.config.user,\n password: this.config.password,\n token: this.config.token,\n ...this.config.connectionOptions,\n })\n\n this._connected = true\n this._initialized = true\n\n this.nats.closed().then((err: Error | null) => {\n this._connected = false\n if (err) {\n this.handleError(err)\n }\n })\n\n this.logger.info('NATSDriver initialized successfully')\n } catch (error) {\n this._lastError = error instanceof Error ? error.message : String(error)\n throw new RippleDriverError('NATS_CONNECTION_FAILED', this._lastError)\n }\n }\n\n async publish(channel: string, event: string, data: unknown): Promise<void> {\n if (!this.nats || !this._initialized) {\n throw new RippleDriverError('DRIVER_NOT_INITIALIZED', 'NATSDriver not initialized')\n }\n\n const subject = this.subjectPrefix + channel\n // @ts-expect-error\n const sc = (await import('nats')).JSONCodec()\n this.nats.publish(subject, sc.encode({ event, data }))\n }\n\n async subscribe(\n channel: string,\n callback: (event: string, data: unknown) => void\n ): Promise<void> {\n if (!this.nats || !this._initialized) {\n throw new RippleDriverError('DRIVER_NOT_INITIALIZED', 'NATSDriver not initialized')\n }\n\n const subject = this.subjectPrefix + channel\n\n if (!this.callbacks.has(subject)) {\n this.callbacks.set(subject, new Set())\n\n // @ts-expect-error\n const sc = (await import('nats')).JSONCodec()\n const sub = this.nats.subscribe(subject)\n this.subscriptions.set(subject, sub)\n\n ;(async () => {\n for await (const m of sub) {\n try {\n const { event, data } = sc.decode(m.data) as any\n const channelCallbacks = this.callbacks.get(subject)\n if (channelCallbacks) {\n for (const cb of channelCallbacks) {\n cb(event, data)\n }\n }\n } catch (_e) {\n this.logger.error('Failed to decode NATS message', { subject })\n }\n }\n })()\n }\n\n this.callbacks.get(subject)?.add(callback)\n }\n\n async unsubscribe(channel: string): Promise<void> {\n const subject = this.subjectPrefix + channel\n const sub = this.subscriptions.get(subject)\n if (sub) {\n sub.unsubscribe()\n this.subscriptions.delete(subject)\n this.callbacks.delete(subject)\n }\n }\n\n async shutdown(): Promise<void> {\n if (this.nats) {\n await this.nats.close()\n }\n this._initialized = false\n this._connected = false\n }\n\n getStatus(): DriverStatus {\n return {\n name: this.name,\n initialized: this._initialized,\n connected: this._connected,\n lastError: this._lastError,\n }\n }\n\n // Presence logic using KV Store\n /**\n * Track presence member using NATS KV Store.\n *\n * Creates or updates a bucket for the channel and stores user info with TTL.\n *\n * @param channel - Presence channel name\n * @param userInfo - User information to store\n * @since 4.0.0-alpha\n */\n async trackPresence(channel: string, userInfo: PresenceUserInfo): Promise<void> {\n if (!this.nats || !this._initialized) {\n throw new RippleDriverError('DRIVER_NOT_INITIALIZED', 'NATSDriver not initialized')\n }\n\n try {\n // @ts-expect-error\n const { jetstream } = await import('nats')\n const js = this.nats.jetstream()\n const bucketName = `ripple_presence_${channel.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n\n // Get or create KV bucket with 5-minute TTL\n let kv: any\n try {\n kv = await js.views.kv(bucketName)\n } catch {\n // Bucket doesn't exist, create it\n kv = await js.views.kv(bucketName, {\n ttl: 300000, // 5 minutes in milliseconds\n history: 1, // Only keep latest value\n max_bytes: 1024 * 1024, // 1MB max\n })\n this.logger.debug('Created NATS KV bucket for presence', { bucketName })\n }\n\n // Store user info\n const userId = String(userInfo.id)\n const codec = jetstream().StringCodec()\n await kv.put(userId, codec.encode(JSON.stringify(userInfo)))\n\n this.logger.debug('Tracked presence member in NATS KV', { channel, userId })\n } catch (error) {\n this.logger.error('Failed to track presence in NATS KV', {\n channel,\n error: error instanceof Error ? error.message : String(error),\n })\n throw new RippleDriverError(\n 'NATS_KV_OPERATION_FAILED',\n `Failed to track presence: ${error instanceof Error ? error.message : String(error)}`\n )\n }\n }\n\n /**\n * Remove presence member from NATS KV Store.\n *\n * @param channel - Presence channel name\n * @param userId - User ID to remove\n * @since 4.0.0-alpha\n */\n async untrackPresence(channel: string, userId: string | number): Promise<void> {\n if (!this.nats || !this._initialized) {\n throw new RippleDriverError('DRIVER_NOT_INITIALIZED', 'NATSDriver not initialized')\n }\n\n try {\n // @ts-expect-error\n await import('nats')\n const js = this.nats.jetstream()\n const bucketName = `ripple_presence_${channel.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n\n try {\n const kv = await js.views.kv(bucketName)\n await kv.delete(String(userId))\n this.logger.debug('Untracked presence member from NATS KV', { channel, userId })\n } catch (_error) {\n // Bucket or key might not exist, which is fine\n this.logger.debug('Presence member not found in NATS KV', { channel, userId })\n }\n } catch (error) {\n this.logger.error('Failed to untrack presence in NATS KV', {\n channel,\n userId,\n error: error instanceof Error ? error.message : String(error),\n })\n }\n }\n\n /**\n * Get all presence members from NATS KV Store.\n *\n * @param channel - Presence channel name\n * @returns Array of presence user information\n * @since 4.0.0-alpha\n */\n async getPresenceMembers(channel: string): Promise<PresenceUserInfo[]> {\n if (!this.nats || !this._initialized) {\n throw new RippleDriverError('DRIVER_NOT_INITIALIZED', 'NATSDriver not initialized')\n }\n\n const members: PresenceUserInfo[] = []\n\n try {\n // @ts-expect-error\n const { jetstream } = await import('nats')\n const js = this.nats.jetstream()\n const bucketName = `ripple_presence_${channel.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n\n try {\n const kv = await js.views.kv(bucketName)\n const codec = jetstream().StringCodec()\n\n // Get all keys\n const keys = await kv.keys()\n\n // Fetch each member's info\n for await (const key of keys) {\n try {\n const entry = await kv.get(key)\n if (entry) {\n const userInfoJson = codec.decode(entry.value)\n const userInfo = JSON.parse(userInfoJson)\n members.push(userInfo)\n }\n } catch (parseError) {\n this.logger.error('Failed to parse presence member data', {\n channel,\n key,\n error: parseError instanceof Error ? parseError.message : String(parseError),\n })\n }\n }\n\n this.logger.debug('Retrieved presence members from NATS KV', {\n channel,\n count: members.length,\n })\n } catch (_error) {\n // Bucket doesn't exist, return empty array\n this.logger.debug('Presence bucket not found in NATS KV', { channel })\n }\n } catch (_error) {\n this.logger.error('Failed to get presence members from NATS KV', {\n channel,\n error: _error instanceof Error ? _error.message : String(_error),\n })\n }\n\n return members\n }\n\n private handleError(error: Error): void {\n this._lastError = error.message\n this.logger.error('NATS error', { error: error.message })\n }\n}\n",
53
+ "/**\n * @fileoverview NATS driver for @gravito/ripple\n *\n * @module @gravito/ripple/drivers\n */\n\n// @ts-expect-error\nimport type { ConnectionOptions, NatsConnection } from 'nats'\nimport { RippleDriverError } from '../errors/RippleError'\nimport type { RippleLogger } from '../logging/Logger'\nimport { createLogger } from '../logging/Logger'\nimport type { DriverStatus, PresenceUserInfo, RippleDriver } from '../types'\n\n/**\n * Configuration for the NATSDriver.\n */\nexport interface NATSDriverConfig {\n /** NATS server URL (default: 'nats://localhost:4222') */\n servers?: string | string[]\n /** Credentials for authentication */\n user?: string\n password?: string\n token?: string\n /** Prefix for Ripple NATS subjects (default: 'ripple.') */\n subjectPrefix?: string\n /** Custom logger instance */\n logger?: RippleLogger\n /** Optional NATS connection options */\n connectionOptions?: ConnectionOptions\n}\n\n/**\n * NATS driver for Ripple, offering high-performance distributed broadcasting.\n *\n * @example\n * ```typescript\n * import { RippleServer, NATSDriver } from '@gravito/ripple'\n *\n * const server = new RippleServer({\n * driver: 'nats',\n * nats: {\n * servers: 'nats://localhost:4222'\n * }\n * })\n * ```\n */\nexport class NATSDriver implements RippleDriver {\n readonly name = 'nats'\n\n private nats?: NatsConnection\n private subjectPrefix: string\n private subscriptions = new Map<string, any>()\n private callbacks = new Map<string, Set<(event: string, data: unknown) => void>>()\n private _initialized = false\n private _connected = false\n private _lastError?: string\n private logger: RippleLogger\n\n constructor(private config: NATSDriverConfig = {}) {\n this.subjectPrefix = config.subjectPrefix ?? 'ripple.'\n this.logger = config.logger ?? createLogger('NATSDriver')\n }\n\n get isInitialized(): boolean {\n return this._initialized\n }\n\n async init(): Promise<void> {\n if (this._initialized) {\n return\n }\n\n this.logger.info('Initializing NATSDriver', {\n servers: this.config.servers ?? 'nats://localhost:4222',\n })\n\n try {\n // @ts-expect-error\n const { connect } = await import('nats')\n this.nats = await connect({\n servers: this.config.servers ?? 'nats://localhost:4222',\n user: this.config.user,\n password: this.config.password,\n token: this.config.token,\n ...this.config.connectionOptions,\n })\n\n this._connected = true\n this._initialized = true\n\n this.nats.closed().then((err: Error | null) => {\n this._connected = false\n if (err) {\n this.handleError(err)\n }\n })\n\n this.logger.info('NATSDriver initialized successfully')\n } catch (error) {\n this._lastError = error instanceof Error ? error.message : String(error)\n throw new RippleDriverError('NATS_CONNECTION_FAILED', this._lastError)\n }\n }\n\n async publish(channel: string, event: string, data: unknown): Promise<void> {\n if (!this.nats || !this._initialized) {\n throw new RippleDriverError('DRIVER_NOT_INITIALIZED', 'NATSDriver not initialized')\n }\n\n const subject = this.subjectPrefix + channel\n // @ts-expect-error\n const sc = (await import('nats')).JSONCodec()\n this.nats.publish(subject, sc.encode({ event, data }))\n }\n\n async subscribe(\n channel: string,\n callback: (event: string, data: unknown) => void\n ): Promise<void> {\n if (!this.nats || !this._initialized) {\n throw new RippleDriverError('DRIVER_NOT_INITIALIZED', 'NATSDriver not initialized')\n }\n\n const subject = this.subjectPrefix + channel\n\n if (!this.callbacks.has(subject)) {\n this.callbacks.set(subject, new Set())\n\n // @ts-expect-error\n const sc = (await import('nats')).JSONCodec()\n const sub = this.nats.subscribe(subject)\n this.subscriptions.set(subject, sub)\n\n ;(async () => {\n for await (const m of sub) {\n try {\n const { event, data } = sc.decode(m.data) as any\n const channelCallbacks = this.callbacks.get(subject)\n if (channelCallbacks) {\n for (const cb of channelCallbacks) {\n cb(event, data)\n }\n }\n } catch (_e) {\n this.logger.error('Failed to decode NATS message', { subject })\n }\n }\n })()\n }\n\n this.callbacks.get(subject)?.add(callback)\n }\n\n async unsubscribe(channel: string): Promise<void> {\n const subject = this.subjectPrefix + channel\n const sub = this.subscriptions.get(subject)\n if (sub) {\n sub.unsubscribe()\n this.subscriptions.delete(subject)\n this.callbacks.delete(subject)\n }\n }\n\n async shutdown(): Promise<void> {\n if (this.nats) {\n await this.nats.close()\n }\n this._initialized = false\n this._connected = false\n }\n\n getStatus(): DriverStatus {\n return {\n name: this.name,\n initialized: this._initialized,\n connected: this._connected,\n lastError: this._lastError,\n }\n }\n\n // Presence logic using KV Store\n /**\n * Track presence member using NATS KV Store.\n *\n * Creates or updates a bucket for the channel and stores user info with TTL.\n *\n * @param channel - Presence channel name\n * @param userInfo - User information to store\n * @since 4.0.0-alpha\n */\n async trackPresence(channel: string, userInfo: PresenceUserInfo): Promise<void> {\n if (!this.nats || !this._initialized) {\n throw new RippleDriverError('DRIVER_NOT_INITIALIZED', 'NATSDriver not initialized')\n }\n\n try {\n // @ts-expect-error\n const { jetstream } = await import('nats')\n const js = this.nats.jetstream()\n const bucketName = `ripple_presence_${channel.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n\n // Get or create KV bucket with 5-minute TTL\n let kv: any\n try {\n kv = await js.views.kv(bucketName)\n } catch {\n // Bucket doesn't exist, create it\n kv = await js.views.kv(bucketName, {\n ttl: 300000, // 5 minutes in milliseconds\n history: 1, // Only keep latest value\n max_bytes: 1024 * 1024, // 1MB max\n })\n this.logger.debug('Created NATS KV bucket for presence', { bucketName })\n }\n\n // Store user info\n const userId = String(userInfo.id)\n const codec = jetstream().StringCodec()\n await kv.put(userId, codec.encode(JSON.stringify(userInfo)))\n\n this.logger.debug('Tracked presence member in NATS KV', { channel, userId })\n } catch (error) {\n this.logger.error('Failed to track presence in NATS KV', {\n channel,\n error: error instanceof Error ? error.message : String(error),\n })\n throw new RippleDriverError(\n 'NATS_KV_OPERATION_FAILED',\n `Failed to track presence: ${error instanceof Error ? error.message : String(error)}`\n )\n }\n }\n\n /**\n * Remove presence member from NATS KV Store.\n *\n * @param channel - Presence channel name\n * @param userId - User ID to remove\n * @since 4.0.0-alpha\n */\n async untrackPresence(channel: string, userId: string | number): Promise<void> {\n if (!this.nats || !this._initialized) {\n throw new RippleDriverError('DRIVER_NOT_INITIALIZED', 'NATSDriver not initialized')\n }\n\n try {\n // @ts-expect-error\n await import('nats')\n const js = this.nats.jetstream()\n const bucketName = `ripple_presence_${channel.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n\n try {\n const kv = await js.views.kv(bucketName)\n await kv.delete(String(userId))\n this.logger.debug('Untracked presence member from NATS KV', { channel, userId })\n } catch (_error) {\n // Bucket or key might not exist, which is fine\n this.logger.debug('Presence member not found in NATS KV', { channel, userId })\n }\n } catch (error) {\n this.logger.error('Failed to untrack presence in NATS KV', {\n channel,\n userId,\n error: error instanceof Error ? error.message : String(error),\n })\n }\n }\n\n /**\n * Get all presence members from NATS KV Store.\n *\n * @param channel - Presence channel name\n * @returns Array of presence user information\n * @since 4.0.0-alpha\n */\n async getPresenceMembers(channel: string): Promise<PresenceUserInfo[]> {\n if (!this.nats || !this._initialized) {\n throw new RippleDriverError('DRIVER_NOT_INITIALIZED', 'NATSDriver not initialized')\n }\n\n const members: PresenceUserInfo[] = []\n\n try {\n // @ts-expect-error\n const { jetstream } = await import('nats')\n const js = this.nats.jetstream()\n const bucketName = `ripple_presence_${channel.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n\n try {\n const kv = await js.views.kv(bucketName)\n const codec = jetstream().StringCodec()\n\n // Get all keys\n const keys = await kv.keys()\n\n // Fetch each member's info\n for await (const key of keys) {\n try {\n const entry = await kv.get(key)\n if (entry) {\n const userInfoJson = codec.decode(entry.value)\n const userInfo = JSON.parse(userInfoJson)\n members.push(userInfo)\n }\n } catch (parseError) {\n this.logger.error('Failed to parse presence member data', {\n channel,\n key,\n error: parseError instanceof Error ? parseError.message : String(parseError),\n })\n }\n }\n\n this.logger.debug('Retrieved presence members from NATS KV', {\n channel,\n count: members.length,\n })\n } catch (_error) {\n // Bucket doesn't exist, return empty array\n this.logger.debug('Presence bucket not found in NATS KV', { channel })\n }\n } catch (_error) {\n this.logger.error('Failed to get presence members from NATS KV', {\n channel,\n error: _error instanceof Error ? _error.message : String(_error),\n })\n }\n\n return members\n }\n\n private handleError(error: Error): void {\n this._lastError = error.message\n this.logger.error('NATS error', { error: error.message })\n }\n}\n",
54
54
  "/**\n * @fileoverview Redis driver for @gravito/ripple\n *\n * @module @gravito/ripple/drivers\n */\n\nimport type { Redis as RedisClient, RedisOptions } from 'ioredis'\nimport { RippleDriverError } from '../errors/RippleError'\nimport type { RippleLogger } from '../logging/Logger'\nimport { createLogger } from '../logging/Logger'\nimport type { DriverStatus, PresenceUserInfo, RippleDriver } from '../types'\n\n/**\n * Configuration for the RedisDriver.\n */\nexport interface RedisDriverConfig {\n /** Redis server hostname (default: 'localhost') */\n host?: string\n /** Redis server port (default: 6379) */\n port?: number\n /** Redis password for authentication */\n password?: string\n /** Redis database index (default: 0) */\n db?: number\n /** Prefix for Ripple Redis channels (default: 'ripple:') */\n keyPrefix?: string\n /** Custom logger instance */\n logger?: RippleLogger\n /** Connection timeout in milliseconds (default: 5000) */\n connectTimeout?: number\n /** Command timeout in milliseconds (default: 3000) */\n commandTimeout?: number\n /** Whether to enable ready check (default: true) */\n enableReadyCheck?: boolean\n /** Whether to connect lazily (default: false) */\n lazyConnect?: boolean\n}\n\n/**\n * Redis driver for Ripple, enabling horizontal scaling via Redis Pub/Sub.\n *\n * This driver distributes messages across multiple server instances, allowing\n * clients connected to different servers to receive the same broadcasts.\n *\n * @example\n * ```typescript\n * import { RippleServer, RedisDriver } from '@gravito/ripple'\n *\n * const server = new RippleServer({\n * driver: 'redis',\n * redis: {\n * host: 'localhost',\n * port: 6379,\n * password: 'secret_password'\n * }\n * })\n * ```\n */\nexport class RedisDriver implements RippleDriver {\n /** Driver name identifier */\n readonly name = 'redis'\n\n /** Redis client for publishing messages */\n private redis?: RedisClient\n /** Redis client for subscribing to messages */\n private subscriber?: RedisClient\n /** Prefix for Redis channels to avoid collisions */\n private channelPrefix: string\n /** Local subscription map: channel -> callbacks */\n private subscriptions = new Map<string, Set<(event: string, data: unknown) => void>>()\n private _initialized = false\n private _connected = false\n private _lastError?: string\n private logger: RippleLogger\n\n /**\n * Create a new RedisDriver.\n *\n * @param config - Redis connection and behavior configuration\n */\n constructor(private config: RedisDriverConfig = {}) {\n this.channelPrefix = config.keyPrefix ?? 'ripple:'\n this.logger = config.logger ?? createLogger('RedisDriver')\n }\n\n /**\n * Check if the driver has been initialized.\n */\n get isInitialized(): boolean {\n return this._initialized\n }\n\n /**\n * Initialize the Redis connections (Publisher and Subscriber).\n *\n * This method performs dynamic import of 'ioredis' to avoid mandatory\n * dependency on users who only use the local driver.\n *\n * @throws {RippleDriverError} If 'ioredis' is not installed or connection fails\n */\n async init(): Promise<void> {\n if (this._initialized) {\n this.logger.debug('RedisDriver already initialized, skipping')\n return\n }\n\n this.logger.info('Initializing RedisDriver', {\n host: this.config.host ?? 'localhost',\n port: this.config.port ?? 6379,\n })\n\n try {\n const Redis = await this.getRedisClient()\n\n const redisOptions: RedisOptions = {\n host: this.config.host ?? 'localhost',\n port: this.config.port ?? 6379,\n password: this.config.password,\n db: this.config.db ?? 0,\n retryStrategy: (times) => Math.min(times * 50, 2000),\n maxRetriesPerRequest: 3,\n connectTimeout: this.config.connectTimeout ?? 5000,\n commandTimeout: this.config.commandTimeout ?? 3000,\n enableReadyCheck: this.config.enableReadyCheck ?? true,\n lazyConnect: this.config.lazyConnect ?? false,\n }\n\n this.redis = new Redis(redisOptions)\n this.subscriber = new Redis(redisOptions)\n\n this.subscriber.on('message', (channel: string, message: string) => {\n this.handleMessage(channel, message)\n })\n\n this.subscriber.on('error', (error: Error) => {\n this.handleError('subscriber', error)\n })\n\n this.subscriber.on('connect', () => {\n this._connected = true\n this.logger.info('Redis subscriber connected')\n })\n\n this.subscriber.on('close', () => {\n this._connected = false\n this.logger.warn('Redis subscriber connection closed')\n })\n\n this.redis.on('error', (error: Error) => {\n this.handleError('publisher', error)\n })\n\n this._initialized = true\n this.logger.info('RedisDriver initialized successfully')\n } catch (error) {\n this._lastError = error instanceof Error ? error.message : String(error)\n this.logger.error('Failed to initialize RedisDriver', {\n error: this._lastError,\n errorCode: 'REDIS_CONNECTION_FAILED',\n })\n throw error\n }\n }\n\n /**\n * Publish a message to Redis Pub/Sub.\n *\n * @param channel - Target channel name\n * @param event - Event name\n * @param data - Event payload\n * @throws {RippleDriverError} If driver is not initialized\n */\n async publish(channel: string, event: string, data: unknown): Promise<void> {\n if (!this.redis || !this._initialized) {\n throw new RippleDriverError(\n 'DRIVER_NOT_INITIALIZED',\n 'RedisDriver not initialized. Call init() first.'\n )\n }\n\n const prefixedChannel = this.channelPrefix + channel\n const message = JSON.stringify({ event, data })\n\n await this.redis.publish(prefixedChannel, message)\n }\n\n /**\n * Subscribe to a channel via Redis Pub/Sub.\n *\n * Multiple calls for the same channel will only result in one Redis subscription,\n * while maintaining all local callbacks.\n *\n * @param channel - Channel name\n * @param callback - Function called when a message is received from Redis\n * @throws {RippleDriverError} If driver is not initialized\n */\n async subscribe(\n channel: string,\n callback: (event: string, data: unknown) => void\n ): Promise<void> {\n if (!this.subscriber || !this._initialized) {\n throw new RippleDriverError(\n 'DRIVER_NOT_INITIALIZED',\n 'RedisDriver not initialized. Call init() first.'\n )\n }\n\n const prefixedChannel = this.channelPrefix + channel\n\n if (!this.subscriptions.has(prefixedChannel)) {\n this.subscriptions.set(prefixedChannel, new Set())\n await this.subscriber.subscribe(prefixedChannel)\n this.logger.debug('Subscribed to Redis channel', { channel: prefixedChannel })\n }\n\n this.subscriptions.get(prefixedChannel)?.add(callback)\n }\n\n /**\n * Unsubscribe from a channel via Redis Pub/Sub.\n *\n * If no local callbacks remain for the channel, the actual Redis unsubscription\n * is performed.\n *\n * @param channel - Channel name\n */\n async unsubscribe(channel: string): Promise<void> {\n if (!this.subscriber) {\n return\n }\n\n const prefixedChannel = this.channelPrefix + channel\n\n this.subscriptions.delete(prefixedChannel)\n\n if (!this.subscriptions.has(prefixedChannel)) {\n await this.subscriber.unsubscribe(prefixedChannel)\n }\n }\n\n /**\n * Shutdown the Redis driver and close all connections.\n */\n async shutdown(): Promise<void> {\n this.logger.info('Shutting down RedisDriver')\n\n this.subscriptions.clear()\n\n if (this.subscriber) {\n try {\n await this.subscriber.quit()\n this.logger.debug('Redis subscriber quit successfully')\n } catch (error) {\n this._lastError = error instanceof Error ? error.message : String(error)\n this.logger.error('Failed to quit Redis subscriber', { error: this._lastError })\n }\n this.subscriber = undefined\n }\n\n if (this.redis) {\n try {\n await this.redis.quit()\n this.logger.debug('Redis publisher quit successfully')\n } catch (error) {\n this._lastError = error instanceof Error ? error.message : String(error)\n this.logger.error('Failed to quit Redis publisher', { error: this._lastError })\n }\n this.redis = undefined\n }\n\n this._initialized = false\n this._connected = false\n this.logger.info('RedisDriver shutdown complete')\n }\n\n /**\n * Get the current status of the Redis driver.\n */\n getStatus(): DriverStatus {\n return {\n name: this.name,\n initialized: this._initialized,\n connected: this._connected,\n lastError: this._lastError,\n }\n }\n\n /**\n * Track a presence member in a channel.\n *\n * Stores presence information in Redis Hash for cross-node sharing.\n * Sets TTL on the hash to prevent stale data.\n *\n * @param channel - Presence channel name\n * @param userInfo - User information to track\n * @since 3.6.0\n */\n async trackPresence(channel: string, userInfo: PresenceUserInfo): Promise<void> {\n if (!this.redis || !this._initialized) {\n throw new RippleDriverError(\n 'DRIVER_NOT_INITIALIZED',\n 'RedisDriver not initialized. Call init() first.'\n )\n }\n\n const presenceKey = `${this.channelPrefix}presence:${channel}`\n const userId = String(userInfo.id)\n\n // Store user info as JSON in hash field\n await this.redis.hset(presenceKey, userId, JSON.stringify(userInfo))\n\n // Set TTL on the presence hash (5 minutes)\n await this.redis.expire(presenceKey, 300)\n\n this.logger.debug('Tracked presence member', { channel, userId })\n }\n\n /**\n * Remove a presence member from a channel.\n *\n * @param channel - Presence channel name\n * @param userId - User ID to remove\n * @since 3.6.0\n */\n async untrackPresence(channel: string, userId: string | number): Promise<void> {\n if (!this.redis || !this._initialized) {\n throw new RippleDriverError(\n 'DRIVER_NOT_INITIALIZED',\n 'RedisDriver not initialized. Call init() first.'\n )\n }\n\n const presenceKey = `${this.channelPrefix}presence:${channel}`\n await this.redis.hdel(presenceKey, String(userId))\n\n this.logger.debug('Untracked presence member', { channel, userId })\n }\n\n /**\n * Get all presence members for a channel.\n *\n * Retrieves all members from the Redis Hash.\n *\n * @param channel - Presence channel name\n * @returns Array of presence user information\n * @since 3.6.0\n */\n async getPresenceMembers(channel: string): Promise<PresenceUserInfo[]> {\n if (!this.redis || !this._initialized) {\n throw new RippleDriverError(\n 'DRIVER_NOT_INITIALIZED',\n 'RedisDriver not initialized. Call init() first.'\n )\n }\n\n const presenceKey = `${this.channelPrefix}presence:${channel}`\n const membersHash = await this.redis.hgetall(presenceKey)\n\n const members: PresenceUserInfo[] = []\n for (const [_userId, userInfoJson] of Object.entries(membersHash)) {\n try {\n const userInfo = JSON.parse(userInfoJson)\n members.push(userInfo)\n } catch (error) {\n this.logger.error('Failed to parse presence member data', {\n channel,\n error: error instanceof Error ? error.message : String(error),\n })\n }\n }\n\n return members\n }\n\n /**\n * Handle an incoming message from Redis Pub/Sub.\n *\n * Dispatches the message to all local callbacks registered for the channel.\n */\n private handleMessage(channel: string, message: string): void {\n try {\n const callbacks = this.subscriptions.get(channel)\n if (!callbacks || callbacks.size === 0) {\n return\n }\n\n const parsed = JSON.parse(message)\n const { event, data } = parsed\n\n for (const callback of callbacks) {\n callback(event, data)\n }\n } catch (error) {\n this._lastError = error instanceof Error ? error.message : String(error)\n this.logger.error('Failed to handle Redis message', {\n channel,\n error: this._lastError,\n })\n }\n }\n\n /**\n * Handle Redis client errors.\n */\n private handleError(source: 'publisher' | 'subscriber', error: Error): void {\n this._lastError = `${source}: ${error.message}`\n this.logger.error(`Redis ${source} error`, {\n error: error.message,\n errorCode: 'REDIS_CONNECTION_FAILED',\n })\n }\n\n /**\n * Dynamically import ioredis to check if it's available.\n *\n * @throws {RippleDriverError} If ioredis package is missing\n */\n private async getRedisClient(): Promise<typeof import('ioredis').default> {\n try {\n const ioredis = await import('ioredis')\n return ioredis.default\n } catch {\n throw new RippleDriverError(\n 'REDIS_NOT_INSTALLED',\n 'ioredis is required for RedisDriver. Install it with: bun add ioredis'\n )\n }\n }\n}\n",
55
55
  "/**\n * @fileoverview Broadcast Event base class\n *\n * Events that can be broadcast to WebSocket channels.\n *\n * @module @gravito/ripple/events\n */\n\nimport type { Channel } from '../types'\n\n/**\n * Abstract base class for broadcast events\n *\n * @example\n * ```typescript\n * class OrderShipped extends BroadcastEvent {\n * constructor(public order: Order) {\n * super()\n * }\n *\n * broadcastOn() {\n * return new PrivateChannel(`orders.${this.order.userId}`)\n * }\n *\n * broadcastAs() {\n * return 'OrderShipped'\n * }\n * }\n *\n * // Broadcast\n * broadcast(new OrderShipped(order))\n * ```\n */\nexport abstract class BroadcastEvent {\n /**\n * Define which channel(s) this event should be broadcast on.\n *\n * @returns Single Channel or array of Channels for multi-channel broadcasting\n *\n * @example\n * ```typescript\n * // Broadcast to a single private channel\n * broadcastOn() {\n * return new PrivateChannel(`orders.${this.order.userId}`)\n * }\n *\n * // Broadcast to multiple channels\n * broadcastOn() {\n * return [\n * new PrivateChannel(`user.${this.userId}`),\n * new PublicChannel('notifications')\n * ]\n * }\n * ```\n */\n abstract broadcastOn(): Channel | Channel[]\n\n /**\n * Define the event name for client listeners.\n *\n * @returns The event name (defaults to class name if not overridden)\n *\n * @example\n * ```typescript\n * // Use class name (default behavior)\n * class OrderShipped extends BroadcastEvent {\n * // Event name will be 'OrderShipped'\n * }\n *\n * // Custom event name\n * broadcastAs() {\n * return 'order.shipped' // dot notation style\n * }\n * ```\n */\n broadcastAs(): string {\n return this.constructor.name\n }\n\n /**\n * Exclude specific socket IDs from receiving this broadcast.\n *\n * @returns Array of socket IDs to exclude (empty array by default)\n *\n * @example\n * ```typescript\n * // Exclude the sender\n * class MessageSent extends BroadcastEvent {\n * constructor(\n * public message: Message,\n * public senderSocketId: string\n * ) { super() }\n *\n * broadcastExcept() {\n * return [this.senderSocketId] // Don't send back to sender\n * }\n * }\n * ```\n */\n broadcastExcept(): string[] {\n return []\n }\n\n /**\n * Define the event payload data sent to clients.\n *\n * @returns The data object to broadcast (all public properties by default)\n *\n * @example\n * ```typescript\n * // Default: All public properties are included\n * class OrderShipped extends BroadcastEvent {\n * constructor(public order: Order) { super() }\n * // Broadcasts: { order: { id, status, ... } }\n * }\n *\n * // Custom payload\n * class OrderShipped extends BroadcastEvent {\n * constructor(public order: Order) { super() }\n *\n * broadcastWith() {\n * return {\n * orderId: this.order.id,\n * trackingNumber: this.order.trackingNumber,\n * // Exclude sensitive data\n * }\n * }\n * }\n * ```\n */\n broadcastWith(): Record<string, unknown> {\n // By default, return all public properties\n const data: Record<string, unknown> = {}\n for (const key of Object.keys(this)) {\n data[key] = (this as Record<string, unknown>)[key]\n }\n return data\n }\n}\n",
56
56
  "/**\n * @fileoverview Broadcast manager for Ripple\n *\n * @module @gravito/ripple/events\n */\n\nimport type { RippleServer } from '../RippleServer'\nimport type { BroadcastEvent } from './BroadcastEvent'\n\n/**\n * Modern broadcast manager with dependency injection.\n *\n * BroadcastManager is the recommended way to broadcast events in Ripple applications.\n * It accepts RippleServer explicitly through the constructor (dependency injection),\n * making it testable and avoiding global state.\n *\n * @example\n * ```typescript\n * // Setup with dependency injection\n * const ripple = new RippleServer({ path: '/ws' })\n * const manager = new BroadcastManager(ripple)\n *\n * // Or bind to IoC container\n * container.bind('broadcast').toValue(new BroadcastManager(ripple))\n *\n * // Broadcast BroadcastEvent instances\n * manager.broadcast(new OrderShipped(order))\n *\n * // Fluent API for direct broadcasting\n * manager.to('news').emit('article.published', { id: 123 })\n * manager.toPrivate('orders.456').emit('order.updated', { status: 'shipped' })\n * manager.toPresence('chat.lobby').except('socket-1').emit('message', { text: 'Hi!' })\n * ```\n */\nexport class BroadcastManager {\n constructor(private readonly server: RippleServer) {}\n\n /**\n * Broadcast a BroadcastEvent to its designated channels.\n *\n * @param event - The BroadcastEvent instance to broadcast\n *\n * @example\n * ```typescript\n * class OrderShipped extends BroadcastEvent {\n * constructor(public order: Order) { super() }\n * broadcastOn() { return new PrivateChannel(`orders.${this.order.userId}`) }\n * broadcastAs() { return 'OrderShipped' }\n * }\n *\n * manager.broadcast(new OrderShipped(order))\n * ```\n */\n broadcast(event: BroadcastEvent): void {\n const channels = event.broadcastOn()\n const eventName = event.broadcastAs()\n const data = event.broadcastWith()\n\n const channelList = Array.isArray(channels) ? channels : [channels]\n\n for (const channel of channelList) {\n this.server.broadcast(channel.fullName, eventName, data)\n }\n }\n\n /**\n * Broadcast to a public channel.\n *\n * @param channel - The channel name (without prefix)\n * @returns ChannelBroadcaster for chaining\n */\n to(channel: string): ChannelBroadcaster {\n return new ChannelBroadcaster(this.server, channel)\n }\n\n /**\n * Broadcast to a private channel.\n *\n * @param channel - The channel name (will be prefixed with 'private-')\n * @returns ChannelBroadcaster for chaining\n */\n toPrivate(channel: string): ChannelBroadcaster {\n return new ChannelBroadcaster(this.server, `private-${channel}`)\n }\n\n /**\n * Broadcast to a presence channel.\n *\n * @param channel - The channel name (will be prefixed with 'presence-')\n * @returns ChannelBroadcaster for chaining\n */\n toPresence(channel: string): ChannelBroadcaster {\n return new ChannelBroadcaster(this.server, `presence-${channel}`)\n }\n}\n\n/**\n * Fluent broadcaster for channel-specific operations.\n *\n * Returned by BroadcastManager's `to()`, `toPrivate()`, and `toPresence()` methods.\n * Provides a chainable API for broadcasting with optional exclusions.\n */\nexport class ChannelBroadcaster {\n private _except: string[] = []\n\n constructor(\n private readonly server: RippleServer,\n private readonly channel: string\n ) {}\n\n /**\n * Exclude specific socket IDs from the broadcast.\n *\n * @param socketIds - Single socket ID or array of IDs to exclude\n * @returns this for method chaining\n */\n except(socketIds: string | string[]): this {\n const ids = Array.isArray(socketIds) ? socketIds : [socketIds]\n this._except.push(...ids)\n return this\n }\n\n /**\n * Emit the event to the channel.\n *\n * @param event - The event name\n * @param data - The event payload (must be JSON-serializable)\n */\n emit(event: string, data: unknown): void {\n this.server.broadcast(this.channel, event, data)\n }\n}\n",
57
57
  "/**\n * @fileoverview Broadcaster for sending events to channels\n *\n * @module @gravito/ripple/events\n */\n\nimport type { RippleServer } from '../RippleServer'\nimport type { BroadcastEvent } from './BroadcastEvent'\nimport { BroadcastManager } from './BroadcastManager'\n\nlet globalRippleServer: RippleServer | null = null\n\n/**\n * Set the global RippleServer instance.\n *\n * **⚠️ DEPRECATED**: This function is deprecated and will be removed in v4.0.\n * Use dependency injection with `BroadcastManager` instead.\n *\n * @deprecated Use BroadcastManager with dependency injection instead. Will be removed in v4.0.\n * @param server - The RippleServer instance to use globally\n *\n * @example\n * ```typescript\n * // ❌ Old way (deprecated)\n * import { setRippleServer } from '@gravito/ripple'\n * const ripple = new RippleServer({ path: '/ws' })\n * setRippleServer(ripple)\n *\n * // ✅ New way (recommended)\n * import { BroadcastManager } from '@gravito/ripple'\n * const ripple = new RippleServer({ path: '/ws' })\n * const manager = new BroadcastManager(ripple)\n * // Or with dependency injection:\n * container.bind('broadcast').toValue(new BroadcastManager(ripple))\n * ```\n *\n * @see {@link BroadcastManager} - Recommended replacement\n */\nexport function setRippleServer(server: RippleServer): void {\n globalRippleServer = server\n}\n\n/**\n * Get the global RippleServer instance.\n *\n * **⚠️ DEPRECATED**: This function is deprecated and will be removed in v4.0.\n * Use dependency injection with `BroadcastManager` instead.\n *\n * @deprecated Use BroadcastManager with dependency injection instead. Will be removed in v4.0.\n * @returns The globally configured RippleServer instance, or null if not configured\n *\n * @example\n * ```typescript\n * // ❌ Old way (deprecated)\n * import { getRippleServer } from '@gravito/ripple'\n * const ripple = getRippleServer()\n * if (ripple) {\n * ripple.broadcast('news', 'article.published', data)\n * }\n *\n * // ✅ New way (recommended)\n * import { BroadcastManager } from '@gravito/ripple'\n * const manager = container.make<BroadcastManager>('broadcast')\n * manager.to('news').emit('article.published', data)\n * ```\n *\n * @see {@link BroadcastManager} - Recommended replacement\n */\nexport function getRippleServer(): RippleServer | null {\n return globalRippleServer\n}\n\n/**\n * Broadcast a BroadcastEvent to its designated channels.\n *\n * **⚠️ DEPRECATED**: This function is deprecated and will be removed in v4.0.\n * Use `BroadcastManager.broadcast()` with dependency injection instead.\n *\n * This function uses a global RippleServer instance. In modern applications,\n * prefer dependency injection with BroadcastManager for better testability\n * and cleaner architecture.\n *\n * @deprecated Use BroadcastManager.broadcast() instead. Will be removed in v4.0.\n * @param event - The BroadcastEvent to send (determines channels via broadcastOn())\n *\n * @example\n * ```typescript\n * // ❌ Old way (deprecated)\n * import { broadcast } from '@gravito/ripple'\n *\n * class OrderShipped extends BroadcastEvent {\n * constructor(public order: Order) { super() }\n * broadcastOn() { return new PrivateChannel(`orders.${this.order.userId}`) }\n * broadcastAs() { return 'OrderShipped' }\n * }\n *\n * broadcast(new OrderShipped(order))\n *\n * // ✅ New way (recommended)\n * import { BroadcastManager } from '@gravito/ripple'\n *\n * class OrderShipped extends BroadcastEvent {\n * constructor(public order: Order) { super() }\n * broadcastOn() { return new PrivateChannel(`orders.${this.order.userId}`) }\n * broadcastAs() { return 'OrderShipped' }\n * }\n *\n * const manager = container.make<BroadcastManager>('broadcast')\n * manager.broadcast(new OrderShipped(order))\n * ```\n *\n * @see {@link BroadcastManager.broadcast} - Recommended replacement\n * @see {@link BroadcastEvent} - For creating broadcast events\n */\nexport function broadcast(event: BroadcastEvent): void {\n if (!globalRippleServer) {\n console.warn('[Ripple] No server configured. Use BroadcastManager instead.')\n return\n }\n\n const manager = new BroadcastManager(globalRippleServer)\n manager.broadcast(event)\n}\n\n/**\n * Fluent API for broadcasting events to channels.\n *\n * **⚠️ DEPRECATED**: This class is deprecated and will be removed in v4.0.\n * Use `BroadcastManager` with dependency injection for a cleaner, more testable approach.\n *\n * The Broadcaster class uses a global RippleServer instance, which makes testing difficult\n * and creates hidden dependencies. BroadcastManager accepts the server explicitly through\n * dependency injection.\n *\n * @deprecated Use BroadcastManager instead. Will be removed in v4.0.\n *\n * @example\n * ```typescript\n * // ❌ Old way (deprecated)\n * import { Broadcaster } from '@gravito/ripple'\n *\n * Broadcaster.to('news').emit('article.published', { id: 123 })\n * Broadcaster.toPrivate('orders.456').emit('order.shipped', data)\n * Broadcaster.toPresence('chat.lobby')\n * .except(['socket-id-1', 'socket-id-2'])\n * .emit('message', { text: 'Hello!' })\n *\n * // ✅ New way (recommended)\n * import { BroadcastManager } from '@gravito/ripple'\n *\n * const manager = container.make<BroadcastManager>('broadcast')\n * manager.to('news').emit('article.published', { id: 123 })\n * manager.to('private-orders.456').emit('order.shipped', data)\n * manager.to('presence-chat.lobby')\n * .except(['socket-id-1', 'socket-id-2'])\n * .emit('message', { text: 'Hello!' })\n * ```\n *\n * @see {@link BroadcastManager} - Recommended replacement with dependency injection\n */\nexport class Broadcaster {\n private _channel: string\n private _except: string[] = []\n\n private constructor(channel: string) {\n this._channel = channel\n }\n\n /**\n * Create a broadcaster for a public channel.\n *\n * **⚠️ DEPRECATED**: Use `BroadcastManager.to()` instead.\n *\n * @deprecated Use BroadcastManager.to() instead. Will be removed in v4.0.\n * @param channel - The public channel name (without prefix)\n * @returns A Broadcaster instance for the channel\n *\n * @example\n * ```typescript\n * // ❌ Deprecated\n * Broadcaster.to('news').emit('article.published', data)\n *\n * // ✅ Recommended\n * manager.to('news').emit('article.published', data)\n * ```\n */\n static to(channel: string): Broadcaster {\n return new Broadcaster(channel)\n }\n\n /**\n * Create a broadcaster for a private channel.\n *\n * Automatically prefixes the channel name with 'private-'.\n *\n * **⚠️ DEPRECATED**: Use `BroadcastManager.to()` with manual prefix instead.\n *\n * @deprecated Use BroadcastManager.to() instead. Will be removed in v4.0.\n * @param channel - The channel name (will be prefixed with 'private-')\n * @returns A Broadcaster instance for the private channel\n *\n * @example\n * ```typescript\n * // ❌ Deprecated\n * Broadcaster.toPrivate('orders.123').emit('order.shipped', data)\n *\n * // ✅ Recommended\n * manager.to('private-orders.123').emit('order.shipped', data)\n * ```\n */\n static toPrivate(channel: string): Broadcaster {\n return new Broadcaster(`private-${channel}`)\n }\n\n /**\n * Create a broadcaster for a presence channel.\n *\n * Automatically prefixes the channel name with 'presence-'.\n *\n * **⚠️ DEPRECATED**: Use `BroadcastManager.to()` with manual prefix instead.\n *\n * @deprecated Use BroadcastManager.to() instead. Will be removed in v4.0.\n * @param channel - The channel name (will be prefixed with 'presence-')\n * @returns A Broadcaster instance for the presence channel\n *\n * @example\n * ```typescript\n * // ❌ Deprecated\n * Broadcaster.toPresence('chat.lobby').emit('message', { text: 'Hello!' })\n *\n * // ✅ Recommended\n * manager.to('presence-chat.lobby').emit('message', { text: 'Hello!' })\n * ```\n */\n static toPresence(channel: string): Broadcaster {\n return new Broadcaster(`presence-${channel}`)\n }\n\n /**\n * Exclude specific socket IDs from receiving the broadcast.\n *\n * Useful for preventing the sender from receiving their own message\n * or excluding specific users from a broadcast.\n *\n * **⚠️ DEPRECATED**: Use `BroadcastManager.to().except()` instead.\n *\n * @deprecated Use BroadcastManager instead. Will be removed in v4.0.\n * @param socketIds - Single socket ID or array of socket IDs to exclude\n * @returns The Broadcaster instance for method chaining\n *\n * @example\n * ```typescript\n * // ❌ Deprecated\n * Broadcaster.to('chat.room1')\n * .except('socket-id-sender')\n * .emit('message', { text: 'Hello!' })\n *\n * Broadcaster.to('chat.room1')\n * .except(['socket-id-1', 'socket-id-2'])\n * .emit('notification', { type: 'info' })\n *\n * // ✅ Recommended\n * manager.to('chat.room1')\n * .except('socket-id-sender')\n * .emit('message', { text: 'Hello!' })\n * ```\n */\n except(socketIds: string | string[]): this {\n const ids = Array.isArray(socketIds) ? socketIds : [socketIds]\n this._except.push(...ids)\n return this\n }\n\n /**\n * Emit an event to the configured channel.\n *\n * Sends the event to all subscribers of the channel, excluding any socket IDs\n * specified via the `except()` method.\n *\n * **⚠️ DEPRECATED**: Use `BroadcastManager.to().emit()` instead.\n *\n * @deprecated Use BroadcastManager instead. Will be removed in v4.0.\n * @param event - The event name that clients will listen for\n * @param data - The event payload (must be JSON-serializable)\n *\n * @example\n * ```typescript\n * // ❌ Deprecated\n * Broadcaster.to('news').emit('article.published', {\n * id: 123,\n * title: 'Breaking News'\n * })\n *\n * // ✅ Recommended\n * manager.to('news').emit('article.published', {\n * id: 123,\n * title: 'Breaking News'\n * })\n * ```\n */\n emit(event: string, data: unknown): void {\n if (!globalRippleServer) {\n console.warn('[Ripple] No server configured. Use BroadcastManager instead.')\n return\n }\n\n globalRippleServer.broadcast(this._channel, event, data)\n }\n}\n",
58
58
  "import type { RippleServer } from '../RippleServer'\nimport type { RippleDriver } from '../types'\n\n/**\n * Health status levels for individual components or the overall system.\n */\nexport type HealthStatus = 'healthy' | 'degraded' | 'unhealthy'\n\n/**\n * Health information for a specific system component.\n */\nexport interface ComponentHealth {\n /** Current health status */\n status: HealthStatus\n /** Descriptive message about the health state */\n message?: string\n /** ISO 8601 timestamp of the last check */\n lastCheck: string\n}\n\n/**\n * Result of a system-wide health check.\n */\nexport interface HealthCheckResult {\n /** Overall system health status */\n status: HealthStatus\n /** ISO 8601 timestamp of the check */\n timestamp: string\n /** Server uptime in milliseconds */\n uptime: number\n /** Health status of individual components */\n checks: {\n /** WebSocket server health */\n websocket: ComponentHealth\n /** Message distribution driver health */\n driver: ComponentHealth\n }\n /** Real-time performance statistics */\n stats: {\n /** Current number of active client connections */\n activeConnections: number\n /** Total number of active channels */\n totalChannels: number\n /** Average message throughput (messages per second) */\n messagesPerSecond: number\n }\n}\n\n/**\n * HealthChecker monitors the Ripple server and its driver.\n *\n * It provides real-time health diagnostics, performance metrics (MPS),\n * and tracks server uptime.\n */\nexport class HealthChecker {\n private startTime = Date.now()\n private messageCount = 0\n private lastMessageCountReset = Date.now()\n\n /**\n * Create a new HealthChecker.\n *\n * @param server - The Ripple server instance to monitor\n * @param driver - The message driver instance to monitor\n */\n constructor(\n private readonly server: RippleServer,\n private readonly driver: RippleDriver\n ) {}\n\n /**\n * Record a message being processed.\n *\n * Used to calculate messages-per-second (MPS) metrics.\n */\n recordMessage(): void {\n this.messageCount++\n }\n\n /**\n * Perform a full system health check.\n *\n * Resets the message counter and calculates MPS since the last check.\n *\n * @returns Detailed health check result\n */\n async check(): Promise<HealthCheckResult> {\n const now = new Date()\n const driverHealth = await this.checkDriver()\n const websocketHealth = this.checkWebSocket()\n\n const overallStatus = this.determineOverallStatus([driverHealth.status, websocketHealth.status])\n\n const elapsed = (Date.now() - this.lastMessageCountReset) / 1000\n const messagesPerSecond = elapsed > 0 ? this.messageCount / elapsed : 0\n\n this.messageCount = 0\n this.lastMessageCountReset = Date.now()\n\n const stats = this.server.getStats()\n\n return {\n status: overallStatus,\n timestamp: now.toISOString(),\n uptime: Date.now() - this.startTime,\n checks: {\n websocket: websocketHealth,\n driver: driverHealth,\n },\n stats: {\n activeConnections: stats.totalClients,\n totalChannels: stats.totalChannels,\n messagesPerSecond: Math.round(messagesPerSecond * 100) / 100,\n },\n }\n }\n\n /**\n * Check the health of the WebSocket server layer.\n */\n private checkWebSocket(): ComponentHealth {\n try {\n const stats = this.server.getStats()\n return {\n status: 'healthy',\n message: `${stats.totalClients} active connections`,\n lastCheck: new Date().toISOString(),\n }\n } catch (error) {\n return {\n status: 'unhealthy',\n message: error instanceof Error ? error.message : 'Unknown error',\n lastCheck: new Date().toISOString(),\n }\n }\n }\n\n /**\n * Check the health of the message distribution driver.\n */\n private async checkDriver(): Promise<ComponentHealth> {\n try {\n if ('isInitialized' in this.driver && !this.driver.isInitialized) {\n return {\n status: 'unhealthy',\n message: 'Driver not initialized',\n lastCheck: new Date().toISOString(),\n }\n }\n\n return {\n status: 'healthy',\n message: `${this.driver.name} driver operational`,\n lastCheck: new Date().toISOString(),\n }\n } catch (error) {\n return {\n status: 'unhealthy',\n message: error instanceof Error ? error.message : 'Unknown error',\n lastCheck: new Date().toISOString(),\n }\n }\n }\n\n /**\n * Determine the overall status based on component statuses.\n *\n * @param statuses - Array of component health statuses\n * @returns The most severe status found\n */\n private determineOverallStatus(statuses: HealthStatus[]): HealthStatus {\n if (statuses.includes('unhealthy')) {\n return 'unhealthy'\n }\n if (statuses.includes('degraded')) {\n return 'degraded'\n }\n return 'healthy'\n }\n}\n",
59
- "/**\n * @fileoverview Bun native WebSocket engine implementation\n *\n * Wraps Bun's native WebSocket API to implement the IRippleEngine interface.\n * This is the default and highest-performance engine for Ripple.\n *\n * @module @gravito/ripple/engines\n * @since 5.0.0\n */\n\nimport type { Server, ServerWebSocket } from 'bun'\nimport type { ClientData } from '../types'\nimport type { IRippleEngine, RippleSocket } from './IRippleEngine'\n\n/**\n * Wrapper around Bun's ServerWebSocket to implement RippleSocket interface.\n *\n * This is a zero-overhead wrapper that delegates all operations to the native\n * Bun WebSocket object. No proxies or additional allocations.\n */\nexport class BunRippleSocket implements RippleSocket {\n constructor(private ws: ServerWebSocket<ClientData>) {}\n\n get id(): string {\n return this.ws.data.id\n }\n\n get data(): ClientData {\n return this.ws.data\n }\n\n send(data: string | Uint8Array, compress?: boolean): void {\n this.ws.send(data, compress)\n }\n\n close(code?: number, reason?: string): void {\n this.ws.close(code, reason)\n }\n\n getBufferedAmount(): number {\n return this.ws.getBufferedAmount()\n }\n\n subscribe(topic: string): void {\n this.ws.subscribe(topic)\n }\n\n unsubscribe(topic: string): void {\n this.ws.unsubscribe(topic)\n }\n\n publish(topic: string, data: string | Uint8Array): void {\n this.ws.publish(topic, data)\n }\n\n get raw(): ServerWebSocket<ClientData> {\n return this.ws\n }\n}\n\n/**\n * Configuration for BunEngine.\n */\nexport interface BunEngineConfig {\n /** Port to listen on */\n port?: number\n /** Hostname to bind to */\n hostname?: string\n /** TLS configuration */\n tls?: {\n cert: string\n key: string\n }\n /** Development mode (enables verbose logging) */\n development?: boolean\n}\n\n/**\n * Bun native WebSocket engine.\n *\n * Leverages Bun's high-performance WebSocket implementation with native pub/sub support.\n * This engine provides the best performance and is the default choice for Bun runtime.\n *\n * @example\n * ```typescript\n * const engine = new BunEngine({ port: 3000 })\n *\n * engine.onConnection((socket) => {\n * console.log('Client connected:', socket.id)\n * })\n *\n * await engine.listen(3000)\n * ```\n */\nexport class BunEngine implements IRippleEngine {\n readonly name = 'bun'\n\n private server?: Server<ClientData>\n private connectionHandler?: (socket: RippleSocket) => void\n private disconnectionHandler?: (socket: RippleSocket, code: number, reason: string) => void\n private messageHandler?: (socket: RippleSocket, message: string | Uint8Array) => void\n private sockets = new Map<string, BunRippleSocket>()\n\n constructor(private config: BunEngineConfig = {}) {}\n\n onConnection(handler: (socket: RippleSocket) => void): void {\n this.connectionHandler = handler\n }\n\n onDisconnection(handler: (socket: RippleSocket, code: number, reason: string) => void): void {\n this.disconnectionHandler = handler\n }\n\n onMessage(handler: (socket: RippleSocket, message: string | Uint8Array) => void): void {\n this.messageHandler = handler\n }\n\n async listen(port: number): Promise<void> {\n this.server = Bun.serve<ClientData>({\n port: port,\n hostname: this.config.hostname,\n tls: this.config.tls,\n development: this.config.development,\n\n fetch: (req, server) => {\n // This will be called by RippleServer.upgrade()\n // We don't handle fetch here, just return 404\n return new Response('WebSocket endpoint. Use upgrade() to connect.', { status: 404 })\n },\n\n websocket: {\n open: (ws) => {\n const socket = new BunRippleSocket(ws)\n this.sockets.set(socket.id, socket)\n this.connectionHandler?.(socket)\n },\n\n message: (ws, message) => {\n const socket = this.sockets.get(ws.data.id)\n if (!socket) return\n\n const data =\n typeof message === 'string'\n ? message\n : message instanceof Buffer\n ? new Uint8Array(message.buffer, message.byteOffset, message.byteLength)\n : new Uint8Array(message as unknown as ArrayBuffer)\n\n this.messageHandler?.(socket, data)\n },\n\n close: (ws, code, reason) => {\n const socket = this.sockets.get(ws.data.id)\n if (!socket) return\n\n this.disconnectionHandler?.(socket, code, reason)\n this.sockets.delete(ws.data.id)\n },\n\n drain: (ws) => {\n // Backpressure drained - no-op for now\n // Could emit event if needed\n },\n },\n })\n }\n\n async close(): Promise<void> {\n if (this.server) {\n this.server.stop()\n this.server = undefined\n }\n this.sockets.clear()\n }\n\n broadcast(topic: string, data: string | Uint8Array, excludeSocketId?: string): void {\n if (!this.server) return\n\n // Bun's native pub/sub - extremely efficient (C++ layer broadcast)\n // If we need to exclude a socket, we have to do it manually\n if (excludeSocketId) {\n // Iterate and send to each socket except the excluded one\n for (const [id, socket] of this.sockets) {\n if (id !== excludeSocketId && socket.raw.isSubscribed(topic)) {\n socket.send(data)\n }\n }\n } else {\n // Use native broadcast for maximum performance\n this.server.publish(topic, data)\n }\n }\n\n /**\n * Upgrade an HTTP request to a WebSocket connection.\n *\n * This method is called by RippleServer to handle WebSocket upgrade requests.\n *\n * @param req - HTTP request\n * @param options - Upgrade options (userId, reconnectionToken)\n * @returns true if upgrade succeeded, false otherwise\n */\n upgrade(req: Request, options?: { userId?: string; reconnectionToken?: string }): boolean {\n if (!this.server) {\n // Server not started - cannot upgrade\n return false\n }\n\n const url = new URL(req.url)\n const reconnectionToken =\n options?.reconnectionToken ?? url.searchParams.get('reconnection_token') ?? undefined\n\n const success = this.server.upgrade(req, {\n data: {\n id: crypto.randomUUID(),\n channels: new Set<string>(),\n userId: options?.userId,\n reconnectionToken,\n } satisfies ClientData,\n })\n\n return success\n }\n\n /**\n * Get the underlying Bun server instance.\n * Useful for advanced use cases.\n */\n getServer(): Server<ClientData> | undefined {\n return this.server\n }\n}\n",
59
+ "/**\n * @fileoverview Bun native WebSocket engine implementation\n *\n * Wraps Bun's native WebSocket API to implement the IRippleEngine interface.\n * This is the default and highest-performance engine for Ripple.\n *\n * @module @gravito/ripple/engines\n * @since 5.0.0\n */\n\nimport type { Server, ServerWebSocket } from 'bun'\nimport type { ClientData } from '../types'\nimport type { IRippleEngine, RippleSocket } from './IRippleEngine'\n\n/**\n * Wrapper around Bun's ServerWebSocket to implement RippleSocket interface.\n *\n * This is a zero-overhead wrapper that delegates all operations to the native\n * Bun WebSocket object. No proxies or additional allocations.\n */\nexport class BunRippleSocket implements RippleSocket {\n constructor(private ws: ServerWebSocket<ClientData>) {}\n\n get id(): string {\n return this.ws.data.id\n }\n\n get data(): ClientData {\n return this.ws.data\n }\n\n send(data: string | Uint8Array, compress?: boolean): void {\n this.ws.send(data, compress)\n }\n\n close(code?: number, reason?: string): void {\n this.ws.close(code, reason)\n }\n\n getBufferedAmount(): number {\n return this.ws.getBufferedAmount()\n }\n\n subscribe(topic: string): void {\n this.ws.subscribe(topic)\n }\n\n unsubscribe(topic: string): void {\n this.ws.unsubscribe(topic)\n }\n\n publish(topic: string, data: string | Uint8Array): void {\n this.ws.publish(topic, data)\n }\n\n get raw(): ServerWebSocket<ClientData> {\n return this.ws\n }\n}\n\n/**\n * Configuration for BunEngine.\n */\nexport interface BunEngineConfig {\n /** Port to listen on */\n port?: number\n /** Hostname to bind to */\n hostname?: string\n /** TLS configuration */\n tls?: {\n cert: string\n key: string\n }\n /** Development mode (enables verbose logging) */\n development?: boolean\n}\n\n/**\n * Bun native WebSocket engine.\n *\n * Leverages Bun's high-performance WebSocket implementation with native pub/sub support.\n * This engine provides the best performance and is the default choice for Bun runtime.\n *\n * @example\n * ```typescript\n * const engine = new BunEngine({ port: 3000 })\n *\n * engine.onConnection((socket) => {\n * console.log('Client connected:', socket.id)\n * })\n *\n * await engine.listen(3000)\n * ```\n */\nexport class BunEngine implements IRippleEngine {\n readonly name = 'bun'\n\n private server?: Server<ClientData>\n private connectionHandler?: (socket: RippleSocket) => void\n private disconnectionHandler?: (socket: RippleSocket, code: number, reason: string) => void\n private messageHandler?: (socket: RippleSocket, message: string | Uint8Array) => void\n private sockets = new Map<string, BunRippleSocket>()\n\n constructor(private config: BunEngineConfig = {}) {}\n\n onConnection(handler: (socket: RippleSocket) => void): void {\n this.connectionHandler = handler\n }\n\n onDisconnection(handler: (socket: RippleSocket, code: number, reason: string) => void): void {\n this.disconnectionHandler = handler\n }\n\n onMessage(handler: (socket: RippleSocket, message: string | Uint8Array) => void): void {\n this.messageHandler = handler\n }\n\n async listen(port: number): Promise<void> {\n this.server = Bun.serve<ClientData>({\n port: port,\n hostname: this.config.hostname,\n tls: this.config.tls,\n development: this.config.development,\n\n fetch: (_req, _server) => {\n // This will be called by RippleServer.upgrade()\n // We don't handle fetch here, just return 404\n return new Response('WebSocket endpoint. Use upgrade() to connect.', { status: 404 })\n },\n\n websocket: {\n open: (ws) => {\n const socket = new BunRippleSocket(ws)\n this.sockets.set(socket.id, socket)\n this.connectionHandler?.(socket)\n },\n\n message: (ws, message) => {\n const socket = this.sockets.get(ws.data.id)\n if (!socket) {\n return\n }\n\n const data =\n typeof message === 'string'\n ? message\n : message instanceof Buffer\n ? new Uint8Array(message.buffer, message.byteOffset, message.byteLength)\n : new Uint8Array(message as unknown as ArrayBuffer)\n\n this.messageHandler?.(socket, data)\n },\n\n close: (ws, code, reason) => {\n const socket = this.sockets.get(ws.data.id)\n if (!socket) {\n return\n }\n\n this.disconnectionHandler?.(socket, code, reason)\n this.sockets.delete(ws.data.id)\n },\n\n drain: (_ws) => {\n // Backpressure drained - no-op for now\n // Could emit event if needed\n },\n },\n })\n }\n\n async close(): Promise<void> {\n if (this.server) {\n this.server.stop()\n this.server = undefined\n }\n this.sockets.clear()\n }\n\n broadcast(topic: string, data: string | Uint8Array, excludeSocketId?: string): void {\n if (!this.server) {\n return\n }\n\n // Bun's native pub/sub - extremely efficient (C++ layer broadcast)\n // If we need to exclude a socket, we have to do it manually\n if (excludeSocketId) {\n // Iterate and send to each socket except the excluded one\n for (const [id, socket] of this.sockets) {\n if (id !== excludeSocketId && socket.raw.isSubscribed(topic)) {\n socket.send(data)\n }\n }\n } else {\n // Use native broadcast for maximum performance\n this.server.publish(topic, data)\n }\n }\n\n /**\n * Upgrade an HTTP request to a WebSocket connection.\n *\n * This method is called by RippleServer to handle WebSocket upgrade requests.\n *\n * @param req - HTTP request\n * @param options - Upgrade options (userId, reconnectionToken)\n * @returns true if upgrade succeeded, false otherwise\n */\n upgrade(req: Request, options?: { userId?: string; reconnectionToken?: string }): boolean {\n if (!this.server) {\n // Server not started - cannot upgrade\n return false\n }\n\n const url = new URL(req.url)\n const reconnectionToken =\n options?.reconnectionToken ?? url.searchParams.get('reconnection_token') ?? undefined\n\n const success = this.server.upgrade(req, {\n data: {\n id: crypto.randomUUID(),\n channels: new Set<string>(),\n userId: options?.userId,\n reconnectionToken,\n } satisfies ClientData,\n })\n\n return success\n }\n\n /**\n * Get the underlying Bun server instance.\n * Useful for advanced use cases.\n */\n getServer(): Server<ClientData> | undefined {\n return this.server\n }\n}\n",
60
+ "/**\n * @fileoverview uWebSockets.js engine implementation for Node.js\n *\n * Wraps uWebSockets.js API to implement the IRippleEngine interface.\n * This engine provides high performance on Node.js, close to Bun's native performance.\n *\n * @module @gravito/ripple/engines\n * @since 5.0.0\n */\n\nimport { randomUUID } from 'node:crypto'\nimport type { ClientData } from '../types'\nimport type { IRippleEngine, RippleSocket } from './IRippleEngine'\n\n// uWebSockets.js types (will be installed as optional peer dependency)\ninterface WebSocket {\n send(message: string | ArrayBuffer, isBinary?: boolean, compress?: boolean): number\n close(): void\n getBufferedAmount(): number\n subscribe(topic: string): void\n unsubscribe(topic: string): void\n publish(\n topic: string,\n message: string | ArrayBuffer,\n isBinary?: boolean,\n compress?: boolean\n ): boolean\n getUserData(): ClientData\n}\n\ninterface TemplatedApp {\n ws(\n pattern: string,\n behavior: {\n compression?: number\n maxPayloadLength?: number\n idleTimeout?: number\n maxBackpressure?: number\n upgrade?: (res: any, req: any, context: any) => void\n open?: (ws: WebSocket) => void\n message?: (ws: WebSocket, message: ArrayBuffer, isBinary: boolean) => void\n drain?: (ws: WebSocket) => void\n close?: (ws: WebSocket, code: number, message: ArrayBuffer) => void\n }\n ): TemplatedApp\n listen(port: number, callback: (listenSocket: any) => void): TemplatedApp\n publish(\n topic: string,\n message: string | ArrayBuffer,\n isBinary?: boolean,\n compress?: boolean\n ): boolean\n}\n\ninterface UWebSocketsModule {\n App(options?: { cert_file_name?: string; key_file_name?: string }): TemplatedApp\n DEDICATED_COMPRESSOR_3KB: number\n SHARED_COMPRESSOR: number\n DISABLED: number\n}\n\n/**\n * Wrapper around uWebSockets.js WebSocket to implement RippleSocket interface.\n *\n * This is a zero-overhead wrapper that delegates all operations to the uWebSockets.js\n * WebSocket object.\n */\nexport class UWebSocketsRippleSocket implements RippleSocket {\n constructor(private ws: WebSocket) {}\n\n get id(): string {\n return this.ws.getUserData().id\n }\n\n get data(): ClientData {\n return this.ws.getUserData()\n }\n\n send(data: string | Uint8Array, compress?: boolean): void {\n if (typeof data === 'string') {\n this.ws.send(data, false, compress)\n } else {\n // Convert Uint8Array to ArrayBuffer\n const buffer = data.buffer.slice(\n data.byteOffset,\n data.byteOffset + data.byteLength\n ) as ArrayBuffer\n this.ws.send(buffer, true, compress)\n }\n }\n\n close(_code?: number, _reason?: string): void {\n // uWebSockets.js doesn't support close codes/reasons directly\n // We just close the connection\n this.ws.close()\n }\n\n getBufferedAmount(): number {\n return this.ws.getBufferedAmount()\n }\n\n subscribe(topic: string): void {\n this.ws.subscribe(topic)\n }\n\n unsubscribe(topic: string): void {\n this.ws.unsubscribe(topic)\n }\n\n publish(topic: string, data: string | Uint8Array): void {\n if (typeof data === 'string') {\n this.ws.publish(topic, data, false)\n } else {\n const buffer = data.buffer.slice(\n data.byteOffset,\n data.byteOffset + data.byteLength\n ) as ArrayBuffer\n this.ws.publish(topic, buffer, true)\n }\n }\n\n get raw(): WebSocket {\n return this.ws as unknown as any // Cast to any because it's a uWS socket, not DOM WebSocket\n }\n}\n\n/**\n * Configuration for uWebSocketsEngine.\n */\nexport interface UWebSocketsEngineConfig {\n /** Port to listen on */\n port?: number\n /** Hostname to bind to */\n hostname?: string\n /** TLS configuration */\n tls?: {\n cert: string\n key: string\n }\n /** Compression mode (0 = disabled, 1 = shared, 3 = dedicated 3KB) */\n compression?: number\n /** Maximum payload length in bytes (default: 16MB) */\n maxPayloadLength?: number\n /** Idle timeout in seconds (default: 120) */\n idleTimeout?: number\n /** Maximum backpressure in bytes (default: 1MB) */\n maxBackpressure?: number\n /** Development mode (enables verbose logging) */\n development?: boolean\n}\n\n/**\n * uWebSockets.js engine for Node.js.\n *\n * Leverages uWebSockets.js high-performance WebSocket implementation with native pub/sub support.\n * This engine provides excellent performance on Node.js (~90% of Bun's performance).\n */\nexport class UWebSocketsEngine implements IRippleEngine {\n readonly name = 'node-uws'\n\n private app?: TemplatedApp\n private uws?: UWebSocketsModule\n private connectionHandler?: (socket: RippleSocket) => void\n private disconnectionHandler?: (socket: RippleSocket, code: number, reason: string) => void\n private messageHandler?: (socket: RippleSocket, message: string | Uint8Array) => void\n private sockets = new Map<string, UWebSocketsRippleSocket>()\n private listenSocket?: any\n\n constructor(private config: UWebSocketsEngineConfig = {}) {}\n\n onConnection(handler: (socket: RippleSocket) => void): void {\n this.connectionHandler = handler\n }\n\n onDisconnection(handler: (socket: RippleSocket, code: number, reason: string) => void): void {\n this.disconnectionHandler = handler\n }\n\n onMessage(handler: (socket: RippleSocket, message: string | Uint8Array) => void): void {\n this.messageHandler = handler\n }\n\n async listen(port: number): Promise<void> {\n // Dynamically import uWebSockets.js (optional peer dependency)\n try {\n // @ts-expect-error: uWebSockets.js is not installed locally\n this.uws = await import('uWebSockets.js')\n } catch (_error) {\n throw new Error(\n 'uWebSockets.js is not installed. Install it with: npm install uWebSockets.js@uNetworking/uWebSockets.js#v20.44.0'\n )\n }\n\n if (!this.uws) {\n throw new Error('Failed to load uWebSockets.js module')\n }\n\n // Create uWebSockets.js app\n this.app = this.config.tls\n ? this.uws.App({\n cert_file_name: this.config.tls.cert,\n key_file_name: this.config.tls.key,\n })\n : this.uws.App()\n\n // Configure WebSocket route\n this.app.ws('/*', {\n compression: this.config.compression ?? this.uws.SHARED_COMPRESSOR,\n maxPayloadLength: this.config.maxPayloadLength ?? 16 * 1024 * 1024, // 16MB\n idleTimeout: this.config.idleTimeout ?? 120,\n maxBackpressure: this.config.maxBackpressure ?? 1024 * 1024, // 1MB\n\n open: (ws) => {\n // Initialize ClientData on connection\n const data = ws.getUserData()\n\n // Use Node.js crypto for UUIDs\n const id = randomUUID()\n\n // Manually hydrate the ClientData object which is empty initially\n Object.assign(data, {\n id,\n channels: new Set<string>(),\n remoteAddress: undefined, // uWS usually provides remote address via specialized API, skipping for now\n })\n\n const socket = new UWebSocketsRippleSocket(ws)\n this.sockets.set(socket.id, socket)\n this.connectionHandler?.(socket)\n },\n\n message: (ws, message, isBinary) => {\n const data = ws.getUserData()\n const socket = this.sockets.get(data.id)\n if (!socket) {\n return\n }\n\n // Convert ArrayBuffer to Uint8Array or string\n const payload = isBinary ? new Uint8Array(message) : new TextDecoder().decode(message)\n\n this.messageHandler?.(socket, payload)\n },\n\n drain: (ws) => {\n // Handle backpressure\n if (this.config.development) {\n const buffered = ws.getBufferedAmount()\n if (buffered > 0) {\n console.log(`[uWS] Draining backpressure: ${buffered} bytes`)\n }\n }\n },\n\n close: (ws, code, message) => {\n const data = ws.getUserData()\n const socket = this.sockets.get(data.id)\n if (!socket) {\n return\n }\n\n const reason = new TextDecoder().decode(message)\n this.disconnectionHandler?.(socket, code, reason)\n this.sockets.delete(data.id)\n },\n })\n\n // Start listening\n return new Promise((resolve, reject) => {\n this.app?.listen(port, (listenSocket) => {\n if (listenSocket) {\n this.listenSocket = listenSocket\n resolve()\n } else {\n reject(new Error(`Failed to listen on port ${port}`))\n }\n })\n })\n }\n\n async close(): Promise<void> {\n // Close all active connections\n for (const socket of this.sockets.values()) {\n socket.close()\n }\n this.sockets.clear()\n\n // Close the listen socket\n if (this.listenSocket && this.uws) {\n this.listenSocket = undefined\n }\n\n this.app = undefined\n }\n\n broadcast(topic: string, data: string | Uint8Array, excludeSocketId?: string): void {\n if (!this.app) {\n throw new Error('Engine not started. Call listen() first.')\n }\n\n // Note: uWebSockets.js doesn't support excluding specific sockets in native pub/sub\n // If excludeSocketId is provided, we need to iterate manually\n if (excludeSocketId) {\n for (const socket of this.sockets.values()) {\n if (socket.id !== excludeSocketId) {\n socket.send(data)\n }\n }\n } else {\n // Use native pub/sub for better performance\n if (typeof data === 'string') {\n this.app.publish(topic, data, false)\n } else {\n // Safe cast for ArrayBufferLike\n const buffer = data.buffer.slice(\n data.byteOffset,\n data.byteOffset + data.byteLength\n ) as ArrayBuffer\n this.app.publish(topic, buffer, true)\n }\n }\n }\n\n getConnectedSockets(): RippleSocket[] {\n return Array.from(this.sockets.values())\n }\n\n getSocket(id: string): RippleSocket | undefined {\n return this.sockets.get(id)\n }\n\n /**\n * Upgrade an HTTP request to WebSocket.\n *\n * Note: This method is not used in the engine-based architecture.\n * uWebSockets.js handles upgrades internally via the ws() route.\n */\n upgrade(_req: Request, _data?: Record<string, unknown>): boolean {\n throw new Error('upgrade() is not supported in uWebSocketsEngine. Use the ws() route instead.')\n }\n}\n",
61
+ "/**\n * @fileoverview Node.js ws engine implementation\n *\n * Wraps the 'ws' library to implement the IRippleEngine interface.\n * Implements in-memory pub/sub since the ws library does not support it natively.\n *\n * @module @gravito/ripple/engines\n * @since 5.0.0\n */\n\nimport { type WebSocket, WebSocketServer } from 'ws'\nimport type { ClientData } from '../types'\nimport type { IRippleEngine, RippleSocket } from './IRippleEngine'\n\n/**\n * Wrapper around 'ws' WebSocket to implement RippleSocket interface.\n */\nexport class WsRippleSocket implements RippleSocket {\n constructor(\n private ws: WebSocket,\n private clientData: ClientData,\n private engine: WsEngine\n ) {}\n\n get id(): string {\n return this.clientData.id\n }\n\n get data(): ClientData {\n return this.clientData\n }\n\n send(data: string | Uint8Array, compress?: boolean): void {\n this.ws.send(data, { compress })\n }\n\n close(code?: number, reason?: string): void {\n this.ws.close(code, reason)\n }\n\n getBufferedAmount(): number {\n return this.ws.bufferedAmount\n }\n\n subscribe(topic: string): void {\n this.engine.subscribe(this.id, topic)\n }\n\n unsubscribe(topic: string): void {\n this.engine.unsubscribe(this.id, topic)\n }\n\n publish(topic: string, data: string | Uint8Array): void {\n this.engine.broadcast(topic, data)\n }\n\n get raw(): WebSocket {\n return this.ws\n }\n}\n\n/**\n * Configuration for WsEngine.\n */\nexport interface WsEngineConfig {\n /** Port to listen on */\n port?: number\n /** Hostname to bind to */\n hostname?: string\n /** Development mode */\n development?: boolean\n /** WebSocket path */\n path?: string\n}\n\n/**\n * Node.js ws engine.\n *\n * Uses the popular 'ws' library. Provides standard compatibility but\n * uses application-layer pub/sub.\n */\nexport class WsEngine implements IRippleEngine {\n readonly name = 'node-ws'\n\n private wss?: WebSocketServer\n private connectionHandler?: (socket: RippleSocket) => void\n private disconnectionHandler?: (socket: RippleSocket, code: number, reason: string) => void\n private messageHandler?: (socket: RippleSocket, message: string | Uint8Array) => void\n\n private sockets = new Map<string, WsRippleSocket>()\n private subscriptions = new Map<string, Set<string>>() // topic -> Set<socketId>\n\n constructor(private config: WsEngineConfig = {}) {}\n\n onConnection(handler: (socket: RippleSocket) => void): void {\n this.connectionHandler = handler\n }\n\n onDisconnection(handler: (socket: RippleSocket, code: number, reason: string) => void): void {\n this.disconnectionHandler = handler\n }\n\n onMessage(handler: (socket: RippleSocket, message: string | Uint8Array) => void): void {\n this.messageHandler = handler\n }\n\n async listen(port: number): Promise<void> {\n this.wss = new WebSocketServer({\n port: port,\n host: this.config.hostname,\n path: this.config.path,\n })\n\n this.wss.on('connection', (ws, req) => {\n // Create client data (Ripple context expects this)\n const clientData: ClientData = {\n id: crypto.randomUUID(),\n remoteAddress: req.socket.remoteAddress,\n channels: new Set<string>(),\n }\n\n const socket = new WsRippleSocket(ws, clientData, this)\n this.sockets.set(socket.id, socket)\n\n ws.on('message', (data: any, isBinary: boolean) => {\n let payload: string | Uint8Array\n if (isBinary) {\n payload = data instanceof Uint8Array ? data : new Uint8Array(data as any)\n } else {\n payload = data.toString()\n }\n this.messageHandler?.(socket, payload)\n })\n\n ws.on('close', (code: number, reason: Buffer) => {\n // Cleanup subscriptions\n this.cleanupSocket(socket.id)\n this.sockets.delete(socket.id)\n this.disconnectionHandler?.(socket, code, reason.toString())\n })\n\n this.connectionHandler?.(socket)\n })\n\n return new Promise((resolve) => {\n this.wss?.once('listening', () => resolve())\n })\n }\n\n async close(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!this.wss) {\n return resolve()\n }\n this.wss.close((err: any) => {\n if (err) {\n return reject(err)\n }\n this.sockets.clear()\n this.subscriptions.clear()\n resolve()\n })\n })\n }\n\n subscribe(socketId: string, topic: string): void {\n if (!this.subscriptions.has(topic)) {\n this.subscriptions.set(topic, new Set())\n }\n this.subscriptions.get(topic)?.add(socketId)\n }\n\n unsubscribe(socketId: string, topic: string): void {\n this.subscriptions.get(topic)?.delete(socketId)\n }\n\n private cleanupSocket(socketId: string): void {\n for (const subscribers of this.subscriptions.values()) {\n subscribers.delete(socketId)\n }\n }\n\n broadcast(topic: string, data: string | Uint8Array, excludeSocketId?: string): void {\n const subscribers = this.subscriptions.get(topic)\n if (!subscribers) {\n return\n }\n\n for (const socketId of subscribers) {\n if (socketId === excludeSocketId) {\n continue\n }\n const socket = this.sockets.get(socketId)\n socket?.send(data)\n }\n }\n}\n",
60
62
  "import type { RippleContext, RippleInterceptor } from '../types'\n\n/**\n * Manages the execution of message interceptors in an onion model.\n *\n * @since 4.0.0\n */\nexport class InterceptorManager {\n private interceptors: RippleInterceptor[]\n\n constructor(interceptors: RippleInterceptor[] = []) {\n this.interceptors = interceptors\n }\n\n /**\n * Execute the interceptor pipeline for a given context.\n *\n * @param ctx - The ripple message context\n * @param finalHandler - The final handler to run after all interceptors\n */\n async execute(ctx: RippleContext, finalHandler: () => Promise<void> | void): Promise<void> {\n if (this.interceptors.length === 0) {\n await finalHandler()\n return\n }\n\n let index = -1\n\n const dispatch = async (i: number): Promise<void> => {\n if (i <= index) {\n throw new Error('next() called multiple times')\n }\n index = i\n\n const interceptor = i === this.interceptors.length ? null : this.interceptors[i]\n\n if (!interceptor) {\n await finalHandler()\n return\n }\n\n await interceptor(ctx, () => dispatch(i + 1))\n }\n\n return dispatch(0)\n }\n\n /**\n * Add a new interceptor to the end of the pipeline.\n */\n use(interceptor: RippleInterceptor): void {\n this.interceptors.push(interceptor)\n }\n}\n",
61
- "import type { AckManager } from '../reliability/AckManager'\nimport type { ConnectionTracker } from '../tracking/ConnectionTracker'\n\n/**\n * Prometheus metrics exporter for Ripple.\n *\n * @since 3.7.0\n */\nexport class RippleMetrics {\n private prefix: string\n private tracker: ConnectionTracker\n private ackManager?: AckManager\n private slowClients = 0\n\n constructor(tracker: ConnectionTracker, prefix = 'ripple', ackManager?: AckManager) {\n this.tracker = tracker\n this.prefix = prefix\n this.ackManager = ackManager\n }\n\n /**\n * Increment the counter for slow clients isolated or disconnected.\n */\n incrementSlowClients(): void {\n this.slowClients++\n }\n\n /**\n * Export metrics in Prometheus text format.\n *\n * @returns String containing Prometheus metrics\n */\n export(): string {\n const activeConnections = this.tracker.getActiveConnections()\n const pendingAcks = this.ackManager?.getPendingCount() ?? 0\n\n return (\n [\n `# HELP ${this.prefix}_connections_active Currently active WebSocket connections`,\n `# TYPE ${this.prefix}_connections_active gauge`,\n `${this.prefix}_connections_active ${activeConnections}`,\n\n `# HELP ${this.prefix}_acks_pending Current number of messages waiting for ACK`,\n `# TYPE ${this.prefix}_acks_pending gauge`,\n `${this.prefix}_acks_pending ${pendingAcks}`,\n\n `# HELP ${this.prefix}_slow_clients_total Total number of slow clients isolated/disconnected`,\n `# TYPE ${this.prefix}_slow_clients_total counter`,\n `${this.prefix}_slow_clients_total ${this.slowClients}`,\n ].join('\\n') + '\\n'\n )\n }\n}\n",
63
+ "import type { AckManager } from '../reliability/AckManager'\nimport type { ConnectionTracker } from '../tracking/ConnectionTracker'\n\n/**\n * Prometheus metrics exporter for Ripple.\n *\n * @since 3.7.0\n */\nexport class RippleMetrics {\n private prefix: string\n private tracker: ConnectionTracker\n private ackManager?: AckManager\n private slowClients = 0\n\n constructor(tracker: ConnectionTracker, prefix = 'ripple', ackManager?: AckManager) {\n this.tracker = tracker\n this.prefix = prefix\n this.ackManager = ackManager\n }\n\n /**\n * Increment the counter for slow clients isolated or disconnected.\n */\n incrementSlowClients(): void {\n this.slowClients++\n }\n\n /**\n * Export metrics in Prometheus text format.\n *\n * @returns String containing Prometheus metrics\n */\n export(): string {\n const activeConnections = this.tracker.getActiveConnections()\n const pendingAcks = this.ackManager?.getPendingCount() ?? 0\n\n return `${[\n `# HELP ${this.prefix}_connections_active Currently active WebSocket connections`,\n `# TYPE ${this.prefix}_connections_active gauge`,\n `${this.prefix}_connections_active ${activeConnections}`,\n\n `# HELP ${this.prefix}_acks_pending Current number of messages waiting for ACK`,\n `# TYPE ${this.prefix}_acks_pending gauge`,\n `${this.prefix}_acks_pending ${pendingAcks}`,\n\n `# HELP ${this.prefix}_slow_clients_total Total number of slow clients isolated/disconnected`,\n `# TYPE ${this.prefix}_slow_clients_total counter`,\n `${this.prefix}_slow_clients_total ${this.slowClients}`,\n ].join('\\n')}\\n`\n }\n}\n",
62
64
  "import type { RippleLogger } from '../logging/Logger'\n\n/**\n * Interface for a message that is pending acknowledgement.\n */\nexport interface PendingAck {\n clientId: string\n seq: number\n timer: ReturnType<typeof setTimeout>\n resolve: (value: boolean) => void\n reject: (reason: any) => void\n}\n\n/**\n * Manages message acknowledgements for Ripple.\n *\n * @since 3.7.0\n */\nexport class AckManager {\n private pendingAcks: Map<string, PendingAck> = new Map()\n private nextSeq = 1\n private logger: RippleLogger\n\n constructor(logger: RippleLogger) {\n this.logger = logger\n }\n\n /**\n * Register a message that requires acknowledgement.\n *\n * @param clientId - The ID of the client the message was sent to\n * @param timeout - How long to wait for ACK in ms\n * @returns A promise that resolves to true when ACKed, or false if timed out\n */\n register(clientId: string, timeout = 5000): { seq: number; promise: Promise<boolean> } {\n const seq = this.nextSeq++\n const key = `${clientId}:${seq}`\n\n const promise = new Promise<boolean>((resolve, reject) => {\n const timer = setTimeout(() => {\n this.logger.warn('Message ACK timeout', { clientId, seq })\n this.pendingAcks.delete(key)\n resolve(false)\n }, timeout)\n\n this.pendingAcks.set(key, {\n clientId,\n seq,\n timer,\n resolve,\n reject,\n })\n })\n\n return { seq, promise }\n }\n\n /**\n * Confirm receipt of a message.\n *\n * @param clientId - The ID of the client that sent the ACK\n * @param seq - The sequence number being confirmed\n */\n confirm(clientId: string, seq: number): boolean {\n const key = `${clientId}:${seq}`\n const pending = this.pendingAcks.get(key)\n\n if (pending) {\n clearTimeout(pending.timer)\n this.pendingAcks.delete(key)\n pending.resolve(true)\n return true\n }\n\n return false\n }\n\n /**\n * Clear all pending ACKs for a client (e.g., on disconnect).\n */\n clearClient(clientId: string): void {\n for (const [key, pending] of this.pendingAcks.entries()) {\n if (pending.clientId === clientId) {\n clearTimeout(pending.timer)\n this.pendingAcks.delete(key)\n pending.resolve(false)\n }\n }\n }\n\n /**\n * Get the number of pending ACKs.\n */\n getPendingCount(): number {\n return this.pendingAcks.size\n }\n}\n",
63
- "import type { ClientMessage, ServerMessage } from '../types'\nimport type { ISerializer } from './ISerializer'\n\n/**\n * Default JSON serializer implementation.\n *\n * Handles standard JSON serialization with optimizations for broadcasting.\n */\nexport class JsonSerializer implements ISerializer {\n readonly contentType = 'json'\n\n /** Pre-serialized pong message */\n private static readonly PONG_MESSAGE = JSON.stringify({ type: 'pong' })\n\n /** Cached serialized string for the current broadcast operation */\n private broadcastCache: string | null = null\n\n serialize(message: ServerMessage): string {\n return JSON.stringify(message)\n }\n\n deserialize(data: string | Buffer | ArrayBuffer): ClientMessage {\n let str: string\n if (typeof data === 'string') {\n str = data\n } else if (Buffer.isBuffer(data)) {\n str = data.toString()\n } else {\n str = new TextDecoder().decode(data)\n }\n return JSON.parse(str)\n }\n\n serializeForBroadcast(message: ServerMessage): string {\n if (!this.broadcastCache) {\n this.broadcastCache = JSON.stringify(message)\n }\n return this.broadcastCache\n }\n\n clearBroadcastCache(): void {\n this.broadcastCache = null\n }\n\n getPongMessage(): string {\n return JsonSerializer.PONG_MESSAGE\n }\n}\n",
64
- "import { existsSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport type { ClientMessage, ServerMessage } from '../types'\nimport type { ISerializer } from './ISerializer'\n\n// ESM-compatible __dirname\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = dirname(__filename)\n\n// We use dynamic import for protobufjs to avoid hard dependency if not used\n// This allows the package to be used without protobufjs if only JSON is needed\nlet protoRoot: any = null\nlet ClientMessageProto: any = null\nlet ServerMessageProto: any = null\n\n/**\n * Protobuf Serializer implementation.\n *\n * Uses 'ripple.proto' to serialize messages.\n * Requires 'protobufjs' to be installed.\n */\nexport class ProtobufSerializer implements ISerializer {\n readonly contentType = 'protobuf'\n\n private broadcastCache: Uint8Array | null = null\n private initialized = false\n\n constructor(private protoPath?: string) {\n if (!protoPath) {\n this.protoPath = this.resolveProtoPath()\n }\n }\n\n /**\n * Resolves the proto file path using a multi-level fallback strategy.\n *\n * Search order:\n * 1. Relative to current file (ESM: import.meta.url)\n * 2. From cwd as package root (common in test environments)\n * 3. From cwd as monorepo root\n */\n private resolveProtoPath(): string {\n const candidatePaths = [\n // 1. 相對於當前檔案(開發環境:src/serializers -> ../proto)\n join(__dirname, '../proto/ripple.proto'),\n\n // 2. 相對於當前檔案,但在 dist 構建後(dist/serializers -> ../../src/proto)\n join(__dirname, '../../src/proto/ripple.proto'),\n\n // 3. 從 cwd 作為 package 根目錄(測試環境常見)\n join(process.cwd(), 'src/proto/ripple.proto'),\n join(process.cwd(), 'proto/ripple.proto'),\n join(process.cwd(), 'dist/proto/ripple.proto'),\n\n // 4. 從 cwd 作為 monorepo 根目錄\n join(process.cwd(), 'packages/ripple/src/proto/ripple.proto'),\n join(process.cwd(), 'packages/ripple/dist/proto/ripple.proto'),\n ]\n\n for (const candidatePath of candidatePaths) {\n const resolvedPath = resolve(candidatePath)\n if (existsSync(resolvedPath)) {\n return resolvedPath\n }\n }\n\n // 沒找到時返回預設路徑(讓後續的 init() 顯示詳細錯誤)\n return join(__dirname, '../proto/ripple.proto')\n }\n\n /**\n * Initialize the serializer by loading the .proto file\n */\n async init(): Promise<void> {\n if (this.initialized) return\n\n try {\n // 先檢查文件是否存在\n if (!existsSync(this.protoPath!)) {\n throw new Error(\n `Proto file not found at: ${this.protoPath}\\n` +\n `Working directory: ${process.cwd()}\\n` +\n `Please ensure ripple.proto exists or provide a custom protoPath.`\n )\n }\n\n let protobuf: any\n try {\n protobuf = await import('protobufjs')\n } catch (_importError) {\n throw new Error(\n `'protobufjs' is not installed.\\n` +\n `Install it with: npm install protobufjs\\n` +\n `Or use JSON serializer instead: new RippleServer({ serializer: 'json' })`\n )\n }\n\n protoRoot = await protobuf.load(this.protoPath!)\n ClientMessageProto = protoRoot.lookupType('ripple.ClientMessage')\n ServerMessageProto = protoRoot.lookupType('ripple.ServerMessage')\n this.initialized = true\n } catch (error) {\n throw new Error(\n `Failed to initialize ProtobufSerializer: ${(error as Error).message}\\n` +\n `Proto path attempted: ${this.protoPath}\\n` +\n `Ensure 'protobufjs' is installed or switch to JSON serializer.`\n )\n }\n }\n\n serialize(message: ServerMessage): Uint8Array {\n this.checkInitialized()\n\n // Convert generic message to Proto-compatible payload\n const payload = this.toProtoPayload(message)\n const errMsg = ServerMessageProto.verify(payload)\n if (errMsg) throw Error(errMsg)\n\n const msg = ServerMessageProto.create(payload)\n return ServerMessageProto.encode(msg).finish()\n }\n\n deserialize(data: string | Buffer | ArrayBuffer): ClientMessage {\n this.checkInitialized()\n\n const buffer =\n data instanceof ArrayBuffer ? new Uint8Array(data) : (data as Buffer | Uint8Array)\n const decoded = ClientMessageProto.decode(buffer)\n const obj = ClientMessageProto.toObject(decoded, {\n enums: String,\n longs: String,\n bytes: String,\n defaults: true,\n oneofs: true,\n })\n\n return this.fromProtoPayload(obj)\n }\n\n serializeForBroadcast(message: ServerMessage): Uint8Array {\n if (!this.broadcastCache) {\n this.broadcastCache = this.serialize(message)\n }\n return this.broadcastCache\n }\n\n clearBroadcastCache(): void {\n this.broadcastCache = null\n }\n\n getPongMessage(): Uint8Array {\n this.checkInitialized()\n const payload = { pong: {} }\n const msg = ServerMessageProto.create(payload)\n return ServerMessageProto.encode(msg).finish()\n }\n\n private checkInitialized() {\n if (!this.initialized) {\n throw new Error('ProtobufSerializer not initialized. Call init() first.')\n }\n }\n\n private toProtoPayload(msg: ServerMessage): any {\n // Map internal ServerMessage union types to Proto oneof structure\n switch (msg.type) {\n case 'connected':\n return { connected: { socket_id: msg.socketId } }\n case 'subscribed':\n return { subscribed: { channel: msg.channel } }\n case 'unsubscribed':\n return { unsubscribed: { channel: msg.channel } }\n case 'pong':\n return { pong: {} }\n case 'ack_received':\n return { ack_received: { seq: msg.seq } }\n case 'reconnection_token':\n return { reconnection_token: { token: msg.token } }\n case 'error':\n return {\n error: { code: msg.code || 'UNKNOWN', message: msg.message, channel: msg.channel },\n }\n case 'event':\n return {\n event: {\n channel: msg.channel,\n event: msg.event,\n data: this.encodeData(msg.data),\n seq: msg.seq,\n need_ack: msg.needAck,\n },\n }\n case 'presence':\n return {\n presence: {\n channel: msg.channel,\n event: msg.event,\n data: this.encodeData(msg.data),\n },\n }\n case 'binary':\n return {\n binary: {\n channel: msg.channel,\n event: msg.event,\n data: msg.data instanceof ArrayBuffer ? new Uint8Array(msg.data) : msg.data,\n },\n }\n }\n throw new Error(`Unknown server message type: ${(msg as any).type}`)\n }\n\n private fromProtoPayload(obj: any): ClientMessage {\n // oneof field name is usually the key in `obj`\n if (obj.subscribe) {\n const auth = obj.subscribe.auth\n // Note: protobufjs converts snake_case to camelCase automatically\n return {\n type: 'subscribe',\n channel: obj.subscribe.channel,\n auth: auth\n ? {\n socketId: auth.socketId || '',\n signature: auth.signature || '',\n }\n : undefined,\n }\n }\n if (obj.unsubscribe) return { type: 'unsubscribe', channel: obj.unsubscribe.channel }\n if (obj.whisper) {\n return {\n type: 'whisper',\n channel: obj.whisper.channel,\n event: obj.whisper.event,\n data: this.decodeData(obj.whisper.data),\n }\n }\n if (obj.ping) return { type: 'ping' }\n if (obj.ack) return { type: 'ack', seq: obj.ack.seq }\n if (obj.binary) {\n return {\n type: 'binary',\n channel: obj.binary.channel,\n event: obj.binary.event,\n data: obj.binary.data, // keep as is (buffer/bytes)\n }\n }\n\n throw new Error('Unknown client message payload')\n }\n\n private encodeData(data: unknown): Uint8Array {\n // In Hybrid mode, we put JSON string into bytes field for now\n // This is the \"Envelope\" strategy from RFC\n if (typeof data === 'string') return new TextEncoder().encode(data)\n if (data instanceof Uint8Array) return data\n return new TextEncoder().encode(JSON.stringify(data))\n }\n\n private decodeData(data: Uint8Array | string): unknown {\n if (typeof data === 'string') {\n // protobufjs might return base64 string for bytes if configured to String\n // but we used bytes: String option? No, usually Bytes is Buffer/Uint8Array\n // Let's assume it handles it.\n try {\n return JSON.parse(atob(data))\n } catch {\n return data\n }\n }\n try {\n const str = new TextDecoder().decode(data)\n return JSON.parse(str)\n } catch {\n return data\n }\n }\n}\n",
65
+ "import type { ClientMessage, ServerMessage } from '../types'\nimport type { ISerializer } from './ISerializer'\n\n/**\n * Default JSON serializer implementation.\n *\n * Handles standard JSON serialization with optimizations for broadcasting.\n */\nexport class JsonSerializer implements ISerializer {\n readonly contentType = 'json'\n\n /** Pre-serialized pong message */\n private static readonly PONG_MESSAGE = JSON.stringify({ type: 'pong' })\n\n /** Cached serialized string for the current broadcast operation */\n private broadcastCache: string | null = null\n\n serialize(message: ServerMessage): string {\n return JSON.stringify(message)\n }\n\n deserialize(data: string | Buffer | ArrayBuffer | Uint8Array): ClientMessage {\n let str: string\n if (typeof data === 'string') {\n str = data\n } else if (Buffer.isBuffer(data)) {\n str = data.toString()\n } else {\n str = new TextDecoder().decode(data)\n }\n return JSON.parse(str)\n }\n\n serializeForBroadcast(message: ServerMessage): string {\n if (!this.broadcastCache) {\n this.broadcastCache = JSON.stringify(message)\n }\n return this.broadcastCache\n }\n\n clearBroadcastCache(): void {\n this.broadcastCache = null\n }\n\n getPongMessage(): string {\n return JsonSerializer.PONG_MESSAGE\n }\n}\n",
66
+ "import { existsSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport type { ClientMessage, ServerMessage } from '../types'\nimport type { ISerializer } from './ISerializer'\n\n// ESM-compatible __dirname\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = dirname(__filename)\n\n// We use dynamic import for protobufjs to avoid hard dependency if not used\n// This allows the package to be used without protobufjs if only JSON is needed\nlet protoRoot: any = null\nlet ClientMessageProto: any = null\nlet ServerMessageProto: any = null\n\n/**\n * Protobuf Serializer implementation.\n *\n * Uses 'ripple.proto' to serialize messages.\n * Requires 'protobufjs' to be installed.\n */\nexport class ProtobufSerializer implements ISerializer {\n readonly contentType = 'protobuf'\n\n private broadcastCache: Uint8Array | null = null\n private initialized = false\n\n constructor(private options: { protoPath?: string; pure?: boolean } = {}) {\n if (!options.protoPath) {\n this.options.protoPath = this.resolveProtoPath()\n }\n }\n\n /**\n * Resolves the proto file path using a multi-level fallback strategy.\n *\n * Search order:\n * 1. Relative to current file (ESM: import.meta.url)\n * 2. From cwd as package root (common in test environments)\n * 3. From cwd as monorepo root\n */\n private resolveProtoPath(): string {\n const candidatePaths = [\n // 1. 相對於當前檔案(開發環境:src/serializers -> ../proto)\n join(__dirname, '../proto/ripple.proto'),\n\n // 2. 相對於當前檔案,但在 dist 構建後(dist/serializers -> ../../src/proto)\n join(__dirname, '../../src/proto/ripple.proto'),\n\n // 3. 從 cwd 作為 package 根目錄(測試環境常見)\n join(process.cwd(), 'src/proto/ripple.proto'),\n join(process.cwd(), 'proto/ripple.proto'),\n join(process.cwd(), 'dist/proto/ripple.proto'),\n\n // 4. 從 cwd 作為 monorepo 根目錄\n join(process.cwd(), 'packages/ripple/src/proto/ripple.proto'),\n join(process.cwd(), 'packages/ripple/dist/proto/ripple.proto'),\n ]\n\n for (const candidatePath of candidatePaths) {\n const resolvedPath = resolve(candidatePath)\n if (existsSync(resolvedPath)) {\n return resolvedPath\n }\n }\n\n // 沒找到時返回預設路徑(讓後續的 init() 顯示詳細錯誤)\n return join(__dirname, '../proto/ripple.proto')\n }\n\n /**\n * Initialize the serializer by loading the .proto file\n */\n async init(): Promise<void> {\n if (this.initialized) {\n return\n }\n\n try {\n // 先檢查文件是否存在\n if (!existsSync(this.options.protoPath!)) {\n throw new Error(\n `Proto file not found at: ${this.options.protoPath}\\n` +\n `Working directory: ${process.cwd()}\\n` +\n `Please ensure ripple.proto exists or provide a custom protoPath.`\n )\n }\n\n let protobuf: any\n try {\n protobuf = await import('protobufjs')\n } catch (_importError) {\n throw new Error(\n `'protobufjs' is not installed.\\n` +\n `Install it with: npm install protobufjs\\n` +\n `Or use JSON serializer instead: new RippleServer({ serializer: 'json' })`\n )\n }\n\n protoRoot = await protobuf.load(this.options.protoPath!)\n ClientMessageProto = protoRoot.lookupType('ripple.ClientMessage')\n ServerMessageProto = protoRoot.lookupType('ripple.ServerMessage')\n this.initialized = true\n } catch (error) {\n throw new Error(\n `Failed to initialize ProtobufSerializer: ${(error as Error).message}\\n` +\n `Proto path attempted: ${this.options.protoPath}\\n` +\n `Ensure 'protobufjs' is installed or switch to JSON serializer.`\n )\n }\n }\n\n serialize(message: ServerMessage): Uint8Array {\n this.checkInitialized()\n\n // Convert generic message to Proto-compatible payload\n const payload = this.toProtoPayload(message)\n const errMsg = ServerMessageProto.verify(payload)\n if (errMsg) {\n throw Error(errMsg)\n }\n\n const msg = ServerMessageProto.create(payload)\n return ServerMessageProto.encode(msg).finish()\n }\n\n deserialize(data: string | Buffer | ArrayBuffer | Uint8Array): ClientMessage {\n this.checkInitialized()\n\n const buffer =\n data instanceof ArrayBuffer ? new Uint8Array(data) : (data as Buffer | Uint8Array)\n const decoded = ClientMessageProto.decode(buffer)\n const obj = ClientMessageProto.toObject(decoded, {\n enums: String,\n longs: String,\n bytes: this.options.pure ? undefined : String,\n defaults: true,\n oneofs: true,\n })\n\n return this.fromProtoPayload(obj)\n }\n\n serializeForBroadcast(message: ServerMessage): Uint8Array {\n if (!this.broadcastCache) {\n this.broadcastCache = this.serialize(message)\n }\n return this.broadcastCache\n }\n\n clearBroadcastCache(): void {\n this.broadcastCache = null\n }\n\n getPongMessage(): Uint8Array {\n this.checkInitialized()\n const payload = { pong: {} }\n const msg = ServerMessageProto.create(payload)\n return ServerMessageProto.encode(msg).finish()\n }\n\n private checkInitialized() {\n if (!this.initialized) {\n throw new Error('ProtobufSerializer not initialized. Call init() first.')\n }\n }\n\n private toProtoPayload(msg: ServerMessage): any {\n // Map internal ServerMessage union types to Proto oneof structure\n switch (msg.type) {\n case 'connected':\n return { connected: { socket_id: msg.socketId } }\n case 'subscribed':\n return { subscribed: { channel: msg.channel } }\n case 'unsubscribed':\n return { unsubscribed: { channel: msg.channel } }\n case 'pong':\n return { pong: {} }\n case 'ack_received':\n return { ack_received: { seq: msg.seq } }\n case 'reconnection_token':\n return { reconnection_token: { token: msg.token } }\n case 'error':\n return {\n error: { code: msg.code || 'UNKNOWN', message: msg.message, channel: msg.channel },\n }\n case 'event':\n return {\n event: {\n channel: msg.channel,\n event: msg.event,\n data: this.encodeData(msg.data),\n seq: msg.seq,\n need_ack: msg.needAck,\n },\n }\n case 'presence':\n return {\n presence: {\n channel: msg.channel,\n event: msg.event,\n data: this.encodeData(msg.data),\n },\n }\n case 'binary':\n return {\n binary: {\n channel: msg.channel,\n event: msg.event,\n data: msg.data instanceof ArrayBuffer ? new Uint8Array(msg.data) : msg.data,\n },\n }\n }\n throw new Error(`Unknown server message type: ${(msg as any).type}`)\n }\n\n private fromProtoPayload(obj: any): ClientMessage {\n // oneof field name is usually the key in `obj`\n if (obj.subscribe) {\n const auth = obj.subscribe.auth\n // Note: protobufjs converts snake_case to camelCase automatically\n return {\n type: 'subscribe',\n channel: obj.subscribe.channel,\n auth: auth\n ? {\n socketId: auth.socketId || '',\n signature: auth.signature || '',\n }\n : undefined,\n }\n }\n if (obj.unsubscribe) {\n return { type: 'unsubscribe', channel: obj.unsubscribe.channel }\n }\n if (obj.whisper) {\n return {\n type: 'whisper',\n channel: obj.whisper.channel,\n event: obj.whisper.event,\n data: this.decodeData(obj.whisper.data),\n }\n }\n if (obj.ping) {\n return { type: 'ping' }\n }\n if (obj.ack) {\n return { type: 'ack', seq: obj.ack.seq }\n }\n if (obj.binary) {\n return {\n type: 'binary',\n channel: obj.binary.channel,\n event: obj.binary.event,\n data: obj.binary.data, // keep as is (buffer/bytes)\n }\n }\n\n throw new Error('Unknown client message payload')\n }\n\n private encodeData(data: unknown): Uint8Array {\n if (this.options.pure) {\n if (data instanceof Uint8Array) {\n return data\n }\n if (Object.prototype.toString.call(data) === '[object Uint8Array]') {\n return data as Uint8Array\n }\n if (Buffer.isBuffer(data)) {\n return data\n }\n throw new Error('In pure mode, data must be Uint8Array or Buffer')\n }\n\n // In Hybrid mode, we put JSON string into bytes field for now\n // This is the \"Envelope\" strategy from RFC\n if (typeof data === 'string') {\n return new TextEncoder().encode(data)\n }\n if (data instanceof Uint8Array) {\n return data\n }\n return new TextEncoder().encode(JSON.stringify(data))\n }\n\n private decodeData(data: Uint8Array | string | Buffer): unknown {\n if (this.options.pure) {\n return data\n }\n\n if (typeof data === 'string') {\n try {\n return JSON.parse(atob(data))\n } catch {\n return data\n }\n }\n\n try {\n const str = new TextDecoder().decode(data)\n return JSON.parse(str)\n } catch {\n return data\n }\n }\n}\n",
65
67
  "import type { RippleLogger } from '../logging/Logger'\nimport { createLogger } from '../logging/Logger'\n\n/**\n * Events tracked by the ConnectionTracker.\n */\nexport type ConnectionEvent =\n | { type: 'connected'; clientId: string; timestamp: Date }\n | {\n type: 'disconnected'\n clientId: string\n timestamp: Date\n code: number\n reason: string\n duration: number\n }\n | { type: 'subscribed'; clientId: string; channel: string; timestamp: Date }\n | { type: 'unsubscribed'; clientId: string; channel: string; timestamp: Date }\n | { type: 'error'; clientId: string; error: string; timestamp: Date }\n\n/**\n * Interface for tracking WebSocket connection lifecycles and statistics.\n *\n * Implementations are responsible for monitoring active connections,\n * subscription states, and providing metrics for observability.\n */\nexport interface ConnectionTracker {\n /** Called when a client establishes a connection */\n onConnect(clientId: string): void\n /** Called when a client disconnects */\n onDisconnect(clientId: string, code: number, reason: string): void\n /** Called when a client subscribes to a channel */\n onSubscribe(clientId: string, channel: string): void\n /** Called when a client unsubscribes from a channel */\n onUnsubscribe(clientId: string, channel: string): void\n /** Called when a client-related error occurs */\n onError(clientId: string, error: string): void\n /** Get the duration of an active connection in milliseconds */\n getConnectionDuration(clientId: string): number | null\n /** Get the total number of active connections */\n getActiveConnections(): number\n}\n\n/**\n * Default implementation of the ConnectionTracker.\n *\n * Maintains an in-memory map of active connections and logs lifecycle events.\n * Provides basic metrics like active connection count and connection duration.\n */\nexport class DefaultConnectionTracker implements ConnectionTracker {\n /** Map of active connection data: clientId -> connection info */\n private connections = new Map<\n string,\n {\n connectedAt: Date\n subscriptions: Set<string>\n }\n >()\n\n private logger: RippleLogger\n\n /**\n * Create a new DefaultConnectionTracker.\n *\n * @param logger - Optional custom logger (defaults to ConsoleLogger)\n */\n constructor(logger?: RippleLogger) {\n this.logger = logger ?? createLogger('ConnectionTracker')\n }\n\n /**\n * Track a new connection.\n *\n * @param clientId - Unique client identifier\n */\n onConnect(clientId: string): void {\n this.connections.set(clientId, {\n connectedAt: new Date(),\n subscriptions: new Set(),\n })\n\n this.logger.info('Client connected', {\n clientId,\n activeConnections: this.getActiveConnections(),\n })\n }\n\n /**\n * Clean up and log disconnection metrics.\n *\n * @param clientId - Client identifier\n * @param code - WebSocket close code\n * @param reason - Close reason\n */\n onDisconnect(clientId: string, code: number, reason: string): void {\n const connection = this.connections.get(clientId)\n const duration = connection ? Date.now() - connection.connectedAt.getTime() : 0\n\n this.logger.info('Client disconnected', {\n clientId,\n code: code.toString(),\n reason,\n durationMs: duration,\n subscriptions: connection?.subscriptions.size ?? 0,\n })\n\n this.connections.delete(clientId)\n }\n\n /**\n * Track channel subscription.\n *\n * @param clientId - Client identifier\n * @param channel - Channel name\n */\n onSubscribe(clientId: string, channel: string): void {\n const connection = this.connections.get(clientId)\n connection?.subscriptions.add(channel)\n\n this.logger.debug('Client subscribed', {\n clientId,\n channel,\n })\n }\n\n /**\n * Track channel unsubscription.\n *\n * @param clientId - Client identifier\n * @param channel - Channel name\n */\n onUnsubscribe(clientId: string, channel: string): void {\n const connection = this.connections.get(clientId)\n connection?.subscriptions.delete(channel)\n\n this.logger.debug('Client unsubscribed', {\n clientId,\n channel,\n })\n }\n\n /**\n * Log client errors.\n *\n * @param clientId - Client identifier\n * @param error - Error message\n */\n onError(clientId: string, error: string): void {\n this.logger.error('Client error', {\n clientId,\n error,\n })\n }\n\n /**\n * Calculate connection duration.\n *\n * @param clientId - Client identifier\n * @returns Duration in milliseconds, or null if not found\n */\n getConnectionDuration(clientId: string): number | null {\n const connection = this.connections.get(clientId)\n if (!connection) {\n return null\n }\n return Date.now() - connection.connectedAt.getTime()\n }\n\n /**\n * Get total active connection count.\n */\n getActiveConnections(): number {\n return this.connections.size\n }\n}\n",
66
68
  "/**\n * @fileoverview Session Manager for reconnection support\n *\n * @module @gravito/ripple/tracking\n */\n\nimport type { RippleLogger } from '../logging/Logger'\nimport { createLogger } from '../logging/Logger'\n\n/**\n * Session data stored for reconnection.\n */\nexport interface SessionData {\n /** Client ID */\n clientId: string\n /** User ID if authenticated */\n userId?: string | number\n /** Channels the client was subscribed to */\n channels: string[]\n /** User info for presence channels */\n userInfo?: Record<string, unknown>\n /** Session expiry timestamp */\n expiresAt: number\n}\n\n/**\n * Manages disconnected client sessions for reconnection support.\n *\n * When a client disconnects, their session is stored temporarily to allow\n * them to reconnect and resume their subscriptions without re-authorization.\n *\n * @example\n * ```typescript\n * const sessionManager = new SessionManager({\n * sessionTTL: 60000, // 1 minute\n * maxSessions: 10000\n * })\n *\n * // On disconnect\n * const token = sessionManager.createSession({\n * clientId: 'client-123',\n * userId: 'user-456',\n * channels: ['news', 'presence-lobby'],\n * userInfo: { name: 'John' }\n * })\n *\n * // On reconnect\n * const session = sessionManager.getSession(token)\n * if (session) {\n * // Restore subscriptions\n * for (const channel of session.channels) {\n * await subscribe(session.clientId, channel)\n * }\n * }\n * ```\n */\nexport class SessionManager {\n private sessions = new Map<string, SessionData>()\n private cleanupInterval?: ReturnType<typeof setInterval>\n private logger: RippleLogger\n\n constructor(\n private config: {\n sessionTTL: number\n maxSessions: number\n logger?: RippleLogger\n }\n ) {\n this.logger = config.logger ?? createLogger('SessionManager')\n this.startCleanup()\n }\n\n /**\n * Create a new session for a disconnected client.\n *\n * @param data - Session data to store\n * @param token - Optional specific token to use (otherwise generates new UUID)\n * @returns Reconnection token\n */\n createSession(data: Omit<SessionData, 'expiresAt'>, token?: string): string {\n // Generate reconnection token if not provided\n const sessionToken = token ?? crypto.randomUUID()\n\n // Check session limit\n if (this.sessions.size >= this.config.maxSessions) {\n this.logger.warn('Session limit reached, removing oldest session')\n this.removeOldestSession()\n }\n\n // Store session\n this.sessions.set(sessionToken, {\n ...data,\n expiresAt: Date.now() + this.config.sessionTTL,\n })\n\n this.logger.debug('Created session', {\n token: sessionToken,\n clientId: data.clientId,\n channels: data.channels.length,\n })\n\n return sessionToken\n }\n\n /**\n * Get a session by reconnection token.\n *\n * @param token - Reconnection token\n * @returns Session data if found and not expired, undefined otherwise\n */\n getSession(token: string): SessionData | undefined {\n const session = this.sessions.get(token)\n\n if (!session) {\n return undefined\n }\n\n // Check expiry\n if (Date.now() > session.expiresAt) {\n this.sessions.delete(token)\n this.logger.debug('Session expired', { token })\n return undefined\n }\n\n return session\n }\n\n /**\n * Remove a session by token.\n *\n * @param token - Reconnection token\n */\n removeSession(token: string): void {\n this.sessions.delete(token)\n this.logger.debug('Removed session', { token })\n }\n\n /**\n * Get the number of active sessions.\n */\n getSessionCount(): number {\n return this.sessions.size\n }\n\n /**\n * Start periodic cleanup of expired sessions.\n */\n private startCleanup(): void {\n this.cleanupInterval = setInterval(() => {\n this.cleanupExpiredSessions()\n }, 30000) // Run every 30 seconds\n }\n\n /**\n * Clean up expired sessions.\n */\n private cleanupExpiredSessions(): void {\n const now = Date.now()\n let removed = 0\n\n for (const [token, session] of this.sessions.entries()) {\n if (now > session.expiresAt) {\n this.sessions.delete(token)\n removed++\n }\n }\n\n if (removed > 0) {\n this.logger.debug('Cleaned up expired sessions', { removed })\n }\n }\n\n /**\n * Remove the oldest session to make room for new ones.\n */\n private removeOldestSession(): void {\n let oldestToken: string | undefined\n let oldestExpiry = Infinity\n\n for (const [token, session] of this.sessions.entries()) {\n if (session.expiresAt < oldestExpiry) {\n oldestExpiry = session.expiresAt\n oldestToken = token\n }\n }\n\n if (oldestToken) {\n this.sessions.delete(oldestToken)\n this.logger.debug('Removed oldest session', { token: oldestToken })\n }\n }\n\n /**\n * Shutdown the session manager and clear all sessions.\n */\n shutdown(): void {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval)\n this.cleanupInterval = undefined\n }\n\n this.sessions.clear()\n this.logger.info('SessionManager shutdown complete')\n }\n}\n",
67
69
  "/**\n * Simple Token Bucket algorithm for rate limiting.\n *\n * @internal\n */\nexport class TokenBucket {\n private tokens: number\n private lastRefill: number\n\n /**\n * Create a new TokenBucket instance.\n *\n * @param capacity - Max tokens in the bucket.\n * @param fillRatePerMs - Rate at which tokens are added (tokens per millisecond).\n */\n constructor(\n private capacity: number,\n private fillRatePerMs: number\n ) {\n this.tokens = capacity\n this.lastRefill = Date.now()\n }\n\n /**\n * Consume a token from the bucket.\n *\n * @returns true if token was consumed, false if bucket is empty.\n */\n consume(): boolean {\n this.refill()\n\n if (this.tokens >= 1) {\n this.tokens -= 1\n return true\n }\n\n return false\n }\n\n private refill(): void {\n const now = Date.now()\n const elapsed = now - this.lastRefill\n const newTokens = elapsed * this.fillRatePerMs\n\n if (newTokens > 0) {\n this.tokens = Math.min(this.capacity, this.tokens + newTokens)\n this.lastRefill = now\n }\n }\n}\n",
68
- "/**\n * @fileoverview Ripple WebSocket Server\n *\n * Core WebSocket server implementation using Bun's native WebSocket API.\n *\n * @module @gravito/ripple\n */\n\nimport { ChannelManager, requiresAuth } from './channels'\nimport { LocalDriver, NATSDriver, RedisDriver } from './drivers'\nimport { BunEngine } from './engines/BunEngine'\nimport type { IRippleEngine, RippleSocket } from './engines/IRippleEngine'\nimport { HealthChecker } from './health/HealthChecker'\nimport type { RippleLogger } from './logging/Logger'\nimport { createLogger } from './logging/Logger'\nimport { InterceptorManager } from './middleware/InterceptorManager'\nimport { RippleMetrics } from './observability/RippleMetrics'\nimport { AckManager } from './reliability/AckManager'\nimport type { ISerializer } from './serializers/ISerializer'\nimport { JsonSerializer } from './serializers/JsonSerializer'\nimport { ProtobufSerializer } from './serializers/ProtobufSerializer'\nimport type { ConnectionTracker } from './tracking/ConnectionTracker'\nimport { DefaultConnectionTracker } from './tracking/ConnectionTracker'\nimport { type SessionData, SessionManager } from './tracking/SessionManager'\nimport type {\n ChannelAuthorizer,\n ClientData,\n ClientMessage,\n RippleConfig,\n RippleDriver,\n RippleInterceptor,\n RippleWebSocket,\n ServerMessage,\n WebSocketHandlerConfig,\n} from './types'\nimport { TokenBucket } from './utils/TokenBucket'\n\n/**\n * Ripple WebSocket Server\n *\n * Provides channel-based real-time communication with multi-runtime support.\n * Can run on Bun (native WebSocket), Node.js (uWebSockets.js or ws).\n *\n * @since 5.0.0 - Multi-runtime support via engine abstraction\n */\nexport class RippleServer {\n private channels: ChannelManager\n private driver: RippleDriver\n private engine: IRippleEngine\n private authorizer?: ChannelAuthorizer\n private pingInterval?: ReturnType<typeof setInterval>\n private eventListeners: Map<string, ((socket: RippleSocket, data: any) => void)[]> = new Map()\n private logger: RippleLogger\n private tracker: ConnectionTracker\n private healthChecker: HealthChecker\n private serializer: ISerializer\n private whisperLimiters: Map<string, TokenBucket> = new Map()\n private sessionManager?: SessionManager\n private ackManager: AckManager\n private rippleMetrics?: RippleMetrics\n private interceptors: InterceptorManager\n private clientSockets = new Map<string, RippleSocket>()\n\n readonly config: Required<Pick<RippleConfig, 'path' | 'authEndpoint' | 'pingInterval'>> &\n RippleConfig\n\n constructor(config: RippleConfig = {}) {\n this.config = {\n path: '/ws',\n authEndpoint: '/broadcasting/auth',\n pingInterval: 30000,\n ...config,\n }\n\n this.logger = config.logger ?? createLogger('RippleServer', config.logLevel)\n\n // Create WebSocket engine based on runtime\n this.engine = this.createEngine(config)\n\n this.driver =\n config.driver === 'redis'\n ? new RedisDriver({ ...config.redis, logger: this.logger })\n : config.driver === 'nats'\n ? new NATSDriver({ ...config.nats, logger: this.logger })\n : new LocalDriver()\n this.channels = new ChannelManager(this.driver)\n this.authorizer = config.authorizer\n this.tracker = config.connectionTracker ?? new DefaultConnectionTracker(this.logger)\n this.healthChecker = new HealthChecker(this, this.driver)\n\n // Initialize serializer based on config\n this.serializer =\n config.serializer === 'protobuf' ? new ProtobufSerializer() : new JsonSerializer()\n\n // Initialize session manager if reconnection is enabled\n if (config.reconnection?.enabled) {\n this.sessionManager = new SessionManager({\n sessionTTL: config.reconnection.sessionTTL ?? 60000,\n maxSessions: config.reconnection.maxSessions ?? 10000,\n logger: this.logger,\n })\n }\n\n this.ackManager = new AckManager(this.logger)\n\n if (config.metrics?.enabled) {\n this.rippleMetrics = new RippleMetrics(this.tracker, config.metrics.prefix, this.ackManager)\n }\n\n this.interceptors = new InterceptorManager(config.interceptors ?? [])\n\n // Register engine event handlers\n this.setupEngineHandlers()\n }\n\n /**\n * Create the appropriate WebSocket engine based on configuration.\n */\n private createEngine(config: RippleConfig): IRippleEngine {\n const runtime = config.runtime ?? this.detectRuntime()\n\n this.logger.info('Creating WebSocket engine', { runtime })\n\n switch (runtime) {\n case 'bun':\n return new BunEngine({\n port: config.port,\n hostname: config.hostname,\n development: process.env.NODE_ENV === 'development',\n })\n\n // TODO: Enable for Node.js support (v5.0)\n // case 'node-uws':\n // return new UWebSocketsEngine({\n // port: config.port,\n // hostname: config.hostname,\n // development: process.env.NODE_ENV === 'development',\n // })\n // TODO: Enable for Node.js support (v5.0)\n // case 'node-ws':\n // return new WsEngine({\n // port: config.port,\n // hostname: config.hostname,\n // path: config.path,\n // development: process.env.NODE_ENV === 'development',\n // })\n default:\n throw new Error(`Unsupported runtime: ${runtime}`)\n }\n }\n\n /**\n * Auto-detect the current JavaScript runtime.\n */\n private detectRuntime(): 'bun' | 'node-uws' | 'node-ws' {\n // Check if running in Bun\n if (typeof Bun !== 'undefined') {\n return 'bun'\n }\n\n // For Node.js, default to ws (most compatible)\n // User can explicitly set runtime: 'node-uws' for better performance\n return 'node-ws'\n }\n\n /**\n * Setup engine event handlers.\n */\n private setupEngineHandlers(): void {\n this.engine.onConnection((socket) => this.handleOpen(socket))\n this.engine.onMessage((socket, message) => this.handleMessage(socket, message))\n this.engine.onDisconnection((socket, code, reason) => this.handleClose(socket, code, reason))\n }\n\n private emit(event: string, socket: RippleSocket, data: any): void {\n const handlers = this.eventListeners.get(event)\n if (handlers) {\n for (const handler of handlers) {\n handler(socket, data)\n }\n }\n }\n\n on(event: string, handler: (socket: RippleSocket, data: any) => void): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, [])\n }\n this.eventListeners.get(event)?.push(handler)\n }\n\n /**\n * Get the name of the active message driver.\n */\n get driverName(): string {\n return this.driver.name\n }\n\n to(channel: string) {\n return {\n emit: (event: string, data: unknown, options?: { needAck?: boolean; timeout?: number }) =>\n this.broadcast(channel, event, data, options),\n }\n }\n\n /**\n * Upgrade an HTTP request to WebSocket (Bun/uWS only).\n *\n * @deprecated Use engine-based initialization via init() instead.\n * This method is kept for backward compatibility with v4.x.\n */\n upgrade(req: Request, options?: { userId?: string }): boolean {\n const url = new URL(req.url)\n\n if (url.pathname !== this.config.path) {\n return false\n }\n\n const reconnectionToken = url.searchParams.get('reconnection_token')\n let sessionData: SessionData | undefined\n\n if (reconnectionToken && this.sessionManager) {\n sessionData = this.sessionManager.getSession(reconnectionToken)\n if (sessionData) {\n this.logger.info('Client reconnecting with token', {\n token: reconnectionToken,\n clientId: sessionData.clientId,\n })\n }\n }\n\n // Delegate to engine if it supports upgrade\n if ('upgrade' in this.engine && typeof this.engine.upgrade === 'function') {\n return this.engine.upgrade(req, {\n userId: sessionData?.userId?.toString() ?? options?.userId,\n reconnectionToken:\n sessionData && reconnectionToken\n ? reconnectionToken\n : this.sessionManager\n ? crypto.randomUUID()\n : undefined,\n })\n }\n\n throw new Error('Current engine does not support HTTP upgrade')\n }\n\n /**\n * Get WebSocket handler configuration (Bun only).\n *\n * @deprecated Use engine-based initialization via init() instead.\n * This method is kept for backward compatibility with v4.x.\n */\n getHandler(): WebSocketHandlerConfig {\n // For backward compatibility, we need to return Bun-specific handlers\n // This will only work if using BunEngine\n throw new Error('getHandler() is deprecated in v5.0. Use init() to start the server instead.')\n }\n\n private async handleOpen(ws: RippleSocket): Promise<void> {\n this.clientSockets.set(ws.id, ws)\n this.channels.addClient(ws)\n this.tracker.onConnect(ws.data.id)\n\n this.logger.info('Client connected', {\n clientId: ws.data.id,\n activeConnections: this.tracker.getActiveConnections(),\n })\n\n this.send(ws, {\n type: 'connected',\n socketId: ws.data.id,\n })\n\n if (ws.data.reconnectionToken) {\n this.send(ws, {\n type: 'reconnection_token',\n token: ws.data.reconnectionToken,\n })\n }\n\n if (ws.data.reconnectionToken && this.sessionManager) {\n const session = this.sessionManager.getSession(ws.data.reconnectionToken)\n if (session) {\n this.logger.info('Restoring session subscriptions', {\n clientId: ws.data.id,\n channels: session.channels.length,\n })\n\n for (const channel of session.channels) {\n if (channel.startsWith('presence-') && session.userInfo) {\n await this.channels.subscribe(ws.data.id, channel, {\n id: session.userId!,\n info: session.userInfo,\n })\n } else {\n await this.channels.subscribe(ws.data.id, channel)\n }\n\n this.send(ws, { type: 'subscribed', channel })\n }\n\n this.sessionManager.removeSession(ws.data.reconnectionToken)\n }\n }\n }\n\n private async handleMessage(\n ws: RippleSocket,\n message: string | Buffer | ArrayBuffer | Uint8Array\n ): Promise<void> {\n try {\n // Convert to string or Uint8Array\n let data: string | Uint8Array\n if (typeof message === 'string') {\n data = message\n } else if (message instanceof Uint8Array) {\n data = message\n } else if (message instanceof ArrayBuffer) {\n data = new Uint8Array(message)\n } else if (Buffer.isBuffer(message)) {\n const buf = message as any as {\n buffer: ArrayBuffer\n byteOffset: number\n byteLength: number\n }\n data = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n } else {\n return // Unknown type\n }\n\n if (data instanceof Uint8Array) {\n // Check if it's a raw binary message or a serialized message\n await this.handleBinaryMessage(ws, data)\n return\n }\n\n const parsedData = this.serializer.deserialize(data)\n\n await this.interceptors.execute(\n { ws, message: parsedData, direction: 'incoming' },\n async () => {\n switch (parsedData.type) {\n case 'subscribe':\n await this.handleSubscribe(ws, parsedData.channel, parsedData.auth)\n break\n\n case 'unsubscribe':\n await this.handleUnsubscribe(ws, parsedData.channel)\n break\n\n case 'whisper':\n this.handleWhisper(ws, parsedData.channel, parsedData.event, parsedData.data)\n break\n\n case 'ping':\n this.send(ws, { type: 'pong' })\n break\n\n case 'ack':\n this.ackManager.confirm(ws.data.id, parsedData.seq)\n break\n }\n }\n )\n } catch (error) {\n this.logger.error('Failed to parse message', {\n clientId: ws.data.id,\n error: error instanceof Error ? error.message : 'Unknown error',\n })\n this.tracker.onError(ws.data.id, error instanceof Error ? error.message : 'Invalid message')\n this.send(ws, {\n type: 'error',\n message: error instanceof Error ? error.message : 'Invalid message',\n })\n }\n }\n\n private async handleBinaryMessage(ws: RippleSocket, message: Uint8Array): Promise<void> {\n const buffer = message\n\n if (buffer.length < 4) return\n\n // Read header length (4 bytes, little-endian)\n const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n const headerLength = view.getInt32(0, true) // true = little-endian\n if (buffer.length < 4 + headerLength) return\n\n try {\n const headerBytes = buffer.subarray(4, 4 + headerLength)\n const headerRaw = new TextDecoder().decode(headerBytes)\n const header = JSON.parse(headerRaw)\n const payload = buffer.subarray(4 + headerLength)\n\n if (header.type === 'binary') {\n const { channel, event } = header\n\n const listeners = this.eventListeners.get(event)\n if (listeners) {\n for (const handler of listeners) {\n handler(ws, payload.buffer as ArrayBuffer)\n }\n }\n\n if (!this.channels.isSubscribed(ws.data.id, channel)) {\n this.send(ws, { type: 'error', message: 'Not subscribed to channel', channel })\n return\n }\n\n this.broadcastBinaryToChannel(channel, event, payload.buffer as ArrayBuffer, ws.data.id)\n }\n } catch (e) {\n this.logger.error('Failed to parse binary message header', { error: (e as any).message })\n }\n }\n\n private broadcastBinaryToChannel(\n channel: string,\n event: string,\n data: ArrayBuffer,\n excludeClientId?: string\n ): void {\n const subscribers = this.channels.getSubscribers(channel)\n if (subscribers.length === 0) return\n\n const header = JSON.stringify({ type: 'binary', channel, event })\n const headerBuffer = Buffer.from(header)\n const totalBuffer = Buffer.allocUnsafe(4 + headerBuffer.length + data.byteLength)\n\n totalBuffer.writeInt32LE(headerBuffer.length, 0)\n headerBuffer.copy(totalBuffer, 4)\n Buffer.from(data).copy(totalBuffer, 4 + headerBuffer.length)\n\n for (const ws of subscribers) {\n if (excludeClientId && ws.data.id === excludeClientId) continue\n ws.send(totalBuffer)\n }\n }\n\n broadcastBinary(channel: string, event: string, data: ArrayBuffer): void {\n this.broadcastBinaryToChannel(channel, event, data)\n }\n\n private handleClose(ws: RippleSocket, code: number, reason: string): void {\n if (this.sessionManager && ws.data.channels.size > 0) {\n const token = this.sessionManager.createSession(\n {\n clientId: ws.data.id,\n userId: ws.data.userId,\n channels: Array.from(ws.data.channels),\n userInfo: ws.data.userInfo,\n },\n ws.data.reconnectionToken\n )\n\n this.logger.info('Created reconnection session', {\n clientId: ws.data.id,\n token,\n channels: ws.data.channels.size,\n })\n }\n\n const leftChannels = this.channels.removeClient(ws.data.id)\n this.tracker.onDisconnect(ws.data.id, code, reason)\n\n this.logger.info('Client disconnected', {\n clientId: ws.data.id,\n code: code.toString(),\n reason,\n channelsLeft: leftChannels.length,\n activeConnections: this.tracker.getActiveConnections(),\n })\n\n for (const channel of leftChannels) {\n if (channel.startsWith('presence-') && ws.data.userId) {\n this.broadcastToChannel(channel, 'presence', {\n event: 'leave',\n data: {\n id: ws.data.userId,\n info: ws.data.userInfo,\n },\n })\n }\n }\n\n this.ackManager.clearClient(ws.data.id)\n }\n\n private handleDrain(_ws: RippleSocket): void {\n // No-op\n }\n\n private async handleSubscribe(\n ws: RippleSocket,\n channel: string,\n _auth?: { socketId: string; signature: string }\n ): Promise<void> {\n if (requiresAuth(channel)) {\n if (!this.authorizer) {\n this.send(ws, {\n type: 'error',\n message: 'No authorizer configured for private channels',\n channel,\n })\n return\n }\n\n const result = await this.authorizer(channel, ws.data.userId, ws.data.id)\n\n if (result === false) {\n this.send(ws, { type: 'error', message: 'Unauthorized', channel })\n return\n }\n\n if (typeof result === 'object' && 'id' in result) {\n await this.channels.subscribe(ws.data.id, channel, result)\n this.tracker.onSubscribe(ws.data.id, channel)\n\n this.broadcastToChannel(channel, 'presence', { event: 'join', data: result }, ws.data.id)\n\n this.send(ws, {\n type: 'presence',\n channel,\n event: 'members',\n data: await this.channels.getPresenceMembers(channel),\n })\n } else {\n await this.channels.subscribe(ws.data.id, channel)\n this.tracker.onSubscribe(ws.data.id, channel)\n }\n } else {\n await this.channels.subscribe(ws.data.id, channel)\n this.tracker.onSubscribe(ws.data.id, channel)\n }\n\n this.send(ws, { type: 'subscribed', channel })\n }\n\n private async handleUnsubscribe(ws: RippleSocket, channel: string): Promise<void> {\n if (channel.startsWith('presence-') && ws.data.userId) {\n this.broadcastToChannel(\n channel,\n 'presence',\n {\n event: 'leave',\n data: { id: ws.data.userId, info: ws.data.userInfo },\n },\n ws.data.id\n )\n }\n\n await this.channels.unsubscribe(ws.data.id, channel)\n this.tracker.onUnsubscribe(ws.data.id, channel)\n this.send(ws, { type: 'unsubscribed', channel })\n }\n\n private handleWhisper(ws: RippleSocket, channel: string, event: string, data: unknown): void {\n if (this.config.rateLimit?.whisperMax) {\n let limiter = this.whisperLimiters.get(ws.data.id)\n if (!limiter) {\n limiter = new TokenBucket(\n this.config.rateLimit.whisperMax,\n this.config.rateLimit.whisperMax / (this.config.rateLimit.whisperInterval ?? 1000)\n )\n this.whisperLimiters.set(ws.data.id, limiter)\n }\n\n if (!limiter.consume()) {\n this.send(ws, { type: 'error', message: 'Rate limit exceeded' })\n return\n }\n }\n\n const listeners = this.eventListeners.get(event)\n if (listeners) {\n listeners.forEach((handler) => {\n handler(ws, data)\n })\n }\n\n this.emit('whisper', ws, { channel, event, data })\n\n if (!this.channels.isSubscribed(ws.data.id, channel)) {\n this.send(ws, { type: 'error', message: 'Not subscribed to channel', channel })\n return\n }\n\n this.broadcastToChannel(channel, event, data, ws.data.id)\n }\n\n broadcast(\n channel: string,\n event: string,\n data: unknown,\n options?: { needAck?: boolean; timeout?: number }\n ): void {\n this.broadcastToChannel(channel, event, data, undefined, options)\n }\n\n broadcastToClients(clientIds: string[], event: string, data: unknown): void {\n for (const clientId of clientIds) {\n const ws = this.channels.getClient(clientId)\n if (ws) {\n this.send(ws, { type: 'event', channel: '', event, data })\n }\n }\n }\n\n private broadcastToChannel(\n channel: string,\n event: string,\n data: unknown,\n excludeClientId?: string,\n options?: { needAck?: boolean; timeout?: number }\n ): void {\n const subscribers = this.channels.getSubscribers(channel)\n if (subscribers.length === 0) return\n\n const message: ServerMessage =\n event === 'presence'\n ? {\n type: 'presence',\n channel,\n event: (data as { event: 'join' | 'leave' | 'members' }).event,\n data: (data as { data: unknown }).data,\n }\n : { type: 'event', channel, event, data }\n\n const serialized = this.serializer.serializeForBroadcast(message)\n\n for (const ws of subscribers) {\n if (excludeClientId && ws.data.id === excludeClientId) continue\n\n // Execute outgoing interceptors\n this.interceptors.execute(\n { ws, message: message, direction: 'outgoing', channel, event },\n async () => {\n if (options?.needAck) {\n const { seq, promise } = this.ackManager.register(ws.data.id, options.timeout)\n const msgWithAck: ServerMessage = { ...message, seq, needAck: true }\n this.send(ws, msgWithAck)\n\n promise.then((success) => {\n if (!success) {\n this.logger.warn('ACK timeout', { clientId: ws.data.id, seq, channel })\n } else {\n this.send(ws, { type: 'ack_received', seq })\n }\n })\n } else {\n this.sendRaw(ws, serialized)\n }\n }\n )\n }\n\n this.serializer.clearBroadcastCache()\n }\n\n private sendRaw(ws: RippleSocket, serialized: string | Buffer | Uint8Array): boolean {\n const config = this.config.backpressure\n if (config?.enabled) {\n const buffered = ws.getBufferedAmount()\n if (config.hwmHigh && buffered >= config.hwmHigh) {\n this.logger.warn('Backpressure HWM High', { clientId: ws.data.id, buffered })\n this.rippleMetrics?.incrementSlowClients()\n ws.close(1011, 'Backpressure')\n return false\n }\n if (config.hwmLow && buffered >= config.hwmLow) {\n this.logger.debug('Backpressure HWM Low', { clientId: ws.data.id, buffered })\n }\n }\n\n try {\n ws.send(serialized)\n return true\n } catch {\n return false\n }\n }\n\n private send(ws: RippleSocket, message: ServerMessage): boolean {\n return this.sendRaw(ws, this.serializer.serialize(message))\n }\n\n /**\n * Add a middleware interceptor (v4.0+).\n */\n use(interceptor: RippleInterceptor): this {\n this.interceptors.use(interceptor)\n return this\n }\n\n /**\n * Get real-time server statistics.\n */\n getStats() {\n return this.channels.getStats()\n }\n\n /**\n * Get Prometheus metrics (v3.7+).\n */\n getMetrics(): string {\n return this.rippleMetrics?.export() ?? ''\n }\n\n /**\n * Get server health status.\n */\n async getHealth() {\n return await this.healthChecker.check()\n }\n\n /**\n * Initialize and start the RippleServer.\n *\n * This method:\n * 1. Initializes the driver (Redis/NATS/Local)\n * 2. Initializes the serializer (JSON/Protobuf)\n * 3. Starts the WebSocket engine (Bun/uWS/ws)\n * 4. Starts the ping interval\n *\n * @since 5.0.0\n */\n async start(): Promise<void> {\n const port = this.config.port ?? 3000\n\n this.logger.info('Starting RippleServer', {\n driver: this.driver.name,\n serializer: this.serializer.contentType,\n runtime: this.config.runtime ?? 'auto-detected',\n port,\n })\n\n // Initialize driver\n await this.driver.init?.()\n\n // Initialize serializer if needed (e.g. loading proto files)\n if ('init' in this.serializer) {\n await (this.serializer as any).init()\n }\n\n // Start the WebSocket engine\n await this.engine.listen(port)\n\n // Start ping interval\n if (this.config.pingInterval > 0) {\n const pong = this.serializer.getPongMessage()\n this.pingInterval = setInterval(() => {\n for (const ws of this.channels.getAllClients()) {\n try {\n ws.send(pong)\n } catch {}\n }\n }, this.config.pingInterval)\n }\n\n this.logger.info('RippleServer started successfully', { port })\n }\n\n /**\n * Initialize the RippleServer without starting the engine.\n *\n * @deprecated Use start() instead. This method is kept for backward compatibility.\n * @since 3.0.0\n */\n async init(): Promise<void> {\n this.logger.info('Initializing RippleServer', {\n driver: this.driver.name,\n serializer: this.serializer.contentType,\n })\n\n await this.driver.init?.()\n\n // Initialize serializer if needed (e.g. loading proto files)\n if ('init' in this.serializer) {\n await (this.serializer as any).init()\n }\n\n if (this.config.pingInterval > 0) {\n const pong = this.serializer.getPongMessage()\n this.pingInterval = setInterval(() => {\n for (const ws of this.channels.getAllClients()) {\n try {\n ws.send(pong)\n } catch {}\n }\n }, this.config.pingInterval)\n }\n }\n\n async shutdown(): Promise<void> {\n this.logger.info('Shutting down RippleServer')\n if (this.pingInterval) clearInterval(this.pingInterval)\n await this.driver.shutdown?.()\n }\n}\n",
70
+ "/**\n * @fileoverview Ripple WebSocket Server\n *\n * Core WebSocket server implementation using Bun's native WebSocket API.\n *\n * @module @gravito/ripple\n */\n\nimport { ChannelManager, requiresAuth } from './channels'\nimport { LocalDriver, NATSDriver, RedisDriver } from './drivers'\nimport { BunEngine } from './engines/BunEngine'\nimport type { IRippleEngine, RippleSocket } from './engines/IRippleEngine'\nimport { UWebSocketsEngine } from './engines/UWebSocketsEngine'\nimport { WsEngine } from './engines/WsEngine'\nimport { HealthChecker } from './health/HealthChecker'\nimport type { RippleLogger } from './logging/Logger'\nimport { createLogger } from './logging/Logger'\nimport { InterceptorManager } from './middleware/InterceptorManager'\nimport { RippleMetrics } from './observability/RippleMetrics'\nimport { AckManager } from './reliability/AckManager'\nimport type { ISerializer } from './serializers/ISerializer'\nimport { JsonSerializer } from './serializers/JsonSerializer'\nimport { ProtobufSerializer } from './serializers/ProtobufSerializer'\nimport type { ConnectionTracker } from './tracking/ConnectionTracker'\nimport { DefaultConnectionTracker } from './tracking/ConnectionTracker'\nimport { type SessionData, SessionManager } from './tracking/SessionManager'\nimport type {\n ChannelAuthorizer,\n RippleConfig,\n RippleDriver,\n RippleInterceptor,\n ServerMessage,\n WebSocketHandlerConfig,\n} from './types'\nimport { TokenBucket } from './utils/TokenBucket'\n\n/**\n * Ripple WebSocket Server\n *\n * Provides channel-based real-time communication with multi-runtime support.\n * Can run on Bun (native WebSocket), Node.js (uWebSockets.js or ws).\n *\n * @since 5.0.0 - Multi-runtime support via engine abstraction\n */\nexport class RippleServer {\n private channels: ChannelManager\n private driver: RippleDriver\n private engine: IRippleEngine\n private authorizer?: ChannelAuthorizer\n private pingInterval?: ReturnType<typeof setInterval>\n private eventListeners: Map<string, ((socket: RippleSocket, data: any) => void)[]> = new Map()\n private logger: RippleLogger\n private tracker: ConnectionTracker\n private healthChecker: HealthChecker\n private serializer: ISerializer\n private whisperLimiters: Map<string, TokenBucket> = new Map()\n private sessionManager?: SessionManager\n private ackManager: AckManager\n private rippleMetrics?: RippleMetrics\n private interceptors: InterceptorManager\n private clientSockets = new Map<string, RippleSocket>()\n\n readonly config: Required<Pick<RippleConfig, 'path' | 'authEndpoint' | 'pingInterval'>> &\n RippleConfig\n\n constructor(config: RippleConfig = {}) {\n this.config = {\n path: '/ws',\n authEndpoint: '/broadcasting/auth',\n pingInterval: 30000,\n ...config,\n }\n\n this.logger = config.logger ?? createLogger('RippleServer', config.logLevel)\n\n // Create WebSocket engine based on runtime\n this.engine = this.createEngine(config)\n\n this.driver =\n config.driver === 'redis'\n ? new RedisDriver({ ...config.redis, logger: this.logger })\n : config.driver === 'nats'\n ? new NATSDriver({ ...config.nats, logger: this.logger })\n : new LocalDriver()\n this.channels = new ChannelManager(this.driver)\n this.authorizer = config.authorizer\n this.tracker = config.connectionTracker ?? new DefaultConnectionTracker(this.logger)\n this.healthChecker = new HealthChecker(this, this.driver)\n\n // Initialize serializer based on config\n this.serializer =\n config.serializer === 'protobuf'\n ? new ProtobufSerializer(config.serializerOptions)\n : new JsonSerializer()\n\n // Initialize session manager if reconnection is enabled\n if (config.reconnection?.enabled) {\n this.sessionManager = new SessionManager({\n sessionTTL: config.reconnection.sessionTTL ?? 60000,\n maxSessions: config.reconnection.maxSessions ?? 10000,\n logger: this.logger,\n })\n }\n\n this.ackManager = new AckManager(this.logger)\n\n if (config.metrics?.enabled) {\n this.rippleMetrics = new RippleMetrics(this.tracker, config.metrics.prefix, this.ackManager)\n }\n\n this.interceptors = new InterceptorManager(config.interceptors ?? [])\n\n // Register engine event handlers\n this.setupEngineHandlers()\n }\n\n /**\n * Create the appropriate WebSocket engine based on configuration.\n */\n private createEngine(config: RippleConfig): IRippleEngine {\n const runtime = config.runtime ?? this.detectRuntime()\n\n this.logger.info('Creating WebSocket engine', { runtime })\n\n switch (runtime) {\n case 'bun':\n return new BunEngine({\n port: config.port,\n hostname: config.hostname,\n development: process.env.NODE_ENV === 'development',\n })\n\n case 'node-uws':\n return new UWebSocketsEngine({\n port: config.port,\n hostname: config.hostname,\n development: process.env.NODE_ENV === 'development',\n })\n\n case 'node-ws':\n return new WsEngine({\n port: config.port,\n hostname: config.hostname,\n path: config.path,\n development: process.env.NODE_ENV === 'development',\n })\n default:\n throw new Error(`Unsupported runtime: ${runtime}`)\n }\n }\n\n /**\n * Auto-detect the current JavaScript runtime.\n */\n private detectRuntime(): 'bun' | 'node-uws' | 'node-ws' {\n // Check if running in Bun\n if (typeof Bun !== 'undefined') {\n return 'bun'\n }\n\n // For Node.js, default to ws (most compatible)\n // User can explicitly set runtime: 'node-uws' for better performance\n return 'node-ws'\n }\n\n /**\n * Setup engine event handlers.\n */\n private setupEngineHandlers(): void {\n this.engine.onConnection((socket) => this.handleOpen(socket))\n this.engine.onMessage((socket, message) => this.handleMessage(socket, message))\n this.engine.onDisconnection((socket, code, reason) => this.handleClose(socket, code, reason))\n }\n\n private emit(event: string, socket: RippleSocket, data: any): void {\n const handlers = this.eventListeners.get(event)\n if (handlers) {\n for (const handler of handlers) {\n handler(socket, data)\n }\n }\n }\n\n on(event: string, handler: (socket: RippleSocket, data: any) => void): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, [])\n }\n this.eventListeners.get(event)?.push(handler)\n }\n\n /**\n * Get the name of the active message driver.\n */\n get driverName(): string {\n return this.driver.name\n }\n\n to(channel: string) {\n return {\n emit: (event: string, data: unknown, options?: { needAck?: boolean; timeout?: number }) =>\n this.broadcast(channel, event, data, options),\n }\n }\n\n /**\n * Upgrade an HTTP request to WebSocket (Bun/uWS only).\n *\n * @deprecated Use engine-based initialization via init() instead.\n * This method is kept for backward compatibility with v4.x.\n */\n upgrade(req: Request, options?: { userId?: string }): boolean {\n const url = new URL(req.url)\n\n if (url.pathname !== this.config.path) {\n return false\n }\n\n const reconnectionToken = url.searchParams.get('reconnection_token')\n let sessionData: SessionData | undefined\n\n if (reconnectionToken && this.sessionManager) {\n sessionData = this.sessionManager.getSession(reconnectionToken)\n if (sessionData) {\n this.logger.info('Client reconnecting with token', {\n token: reconnectionToken,\n clientId: sessionData.clientId,\n })\n }\n }\n\n // Delegate to engine if it supports upgrade\n if ('upgrade' in this.engine && typeof this.engine.upgrade === 'function') {\n return this.engine.upgrade(req, {\n userId: sessionData?.userId?.toString() ?? options?.userId,\n reconnectionToken:\n sessionData && reconnectionToken\n ? reconnectionToken\n : this.sessionManager\n ? crypto.randomUUID()\n : undefined,\n })\n }\n\n throw new Error('Current engine does not support HTTP upgrade')\n }\n\n /**\n * Get WebSocket handler configuration (Bun only).\n *\n * @deprecated Use engine-based initialization via init() instead.\n * This method is kept for backward compatibility with v4.x.\n */\n getHandler(): WebSocketHandlerConfig {\n // For backward compatibility, we need to return Bun-specific handlers\n // This will only work if using BunEngine\n throw new Error('getHandler() is deprecated in v5.0. Use init() to start the server instead.')\n }\n\n private async handleOpen(ws: RippleSocket): Promise<void> {\n this.clientSockets.set(ws.id, ws)\n this.channels.addClient(ws)\n this.tracker.onConnect(ws.data.id)\n\n this.logger.info('Client connected', {\n clientId: ws.data.id,\n activeConnections: this.tracker.getActiveConnections(),\n })\n\n this.send(ws, {\n type: 'connected',\n socketId: ws.data.id,\n })\n\n if (ws.data.reconnectionToken) {\n this.send(ws, {\n type: 'reconnection_token',\n token: ws.data.reconnectionToken,\n })\n }\n\n if (ws.data.reconnectionToken && this.sessionManager) {\n const session = this.sessionManager.getSession(ws.data.reconnectionToken)\n if (session) {\n this.logger.info('Restoring session subscriptions', {\n clientId: ws.data.id,\n channels: session.channels.length,\n })\n\n for (const channel of session.channels) {\n if (channel.startsWith('presence-') && session.userInfo) {\n await this.channels.subscribe(ws.data.id, channel, {\n id: session.userId!,\n info: session.userInfo,\n })\n } else {\n await this.channels.subscribe(ws.data.id, channel)\n }\n\n this.send(ws, { type: 'subscribed', channel })\n }\n\n this.sessionManager.removeSession(ws.data.reconnectionToken)\n }\n }\n }\n\n private async handleMessage(\n ws: RippleSocket,\n message: string | Buffer | ArrayBuffer | Uint8Array\n ): Promise<void> {\n try {\n // Convert to string or Uint8Array\n let data: string | Uint8Array\n if (typeof message === 'string') {\n data = message\n } else if (message instanceof Uint8Array) {\n data = message\n } else if (message instanceof ArrayBuffer) {\n data = new Uint8Array(message)\n } else if (Buffer.isBuffer(message)) {\n const buf = message as any as {\n buffer: ArrayBuffer\n byteOffset: number\n byteLength: number\n }\n data = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n } else {\n return // Unknown type\n }\n\n if (data instanceof Uint8Array) {\n // Check if it's a raw binary message or a serialized message\n await this.handleBinaryMessage(ws, data)\n return\n }\n\n const parsedData = this.serializer.deserialize(data)\n\n await this.interceptors.execute(\n { ws, message: parsedData, direction: 'incoming' },\n async () => {\n switch (parsedData.type) {\n case 'subscribe':\n await this.handleSubscribe(ws, parsedData.channel, parsedData.auth)\n break\n\n case 'unsubscribe':\n await this.handleUnsubscribe(ws, parsedData.channel)\n break\n\n case 'whisper':\n this.handleWhisper(ws, parsedData.channel, parsedData.event, parsedData.data)\n break\n\n case 'ping':\n this.send(ws, { type: 'pong' })\n break\n\n case 'ack':\n this.ackManager.confirm(ws.data.id, parsedData.seq)\n break\n }\n }\n )\n } catch (error) {\n this.logger.error('Failed to parse message', {\n clientId: ws.data.id,\n error: error instanceof Error ? error.message : 'Unknown error',\n })\n this.tracker.onError(ws.data.id, error instanceof Error ? error.message : 'Invalid message')\n this.send(ws, {\n type: 'error',\n message: error instanceof Error ? error.message : 'Invalid message',\n })\n }\n }\n\n private async handleBinaryMessage(ws: RippleSocket, message: Uint8Array): Promise<void> {\n const buffer = message\n\n if (buffer.length < 4) {\n return\n }\n\n // Read header length (4 bytes, little-endian)\n const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n const headerLength = view.getInt32(0, true) // true = little-endian\n if (buffer.length < 4 + headerLength) {\n return\n }\n\n try {\n const headerBytes = buffer.subarray(4, 4 + headerLength)\n const headerRaw = new TextDecoder().decode(headerBytes)\n const header = JSON.parse(headerRaw)\n const payload = buffer.subarray(4 + headerLength)\n\n if (header.type === 'binary') {\n const { channel, event } = header\n\n const listeners = this.eventListeners.get(event)\n if (listeners) {\n for (const handler of listeners) {\n handler(ws, payload.buffer as ArrayBuffer)\n }\n }\n\n if (!this.channels.isSubscribed(ws.data.id, channel)) {\n this.send(ws, { type: 'error', message: 'Not subscribed to channel', channel })\n return\n }\n\n this.broadcastBinaryToChannel(channel, event, payload.buffer as ArrayBuffer, ws.data.id)\n }\n } catch (e) {\n this.logger.error('Failed to parse binary message header', { error: (e as any).message })\n }\n }\n\n private broadcastBinaryToChannel(\n channel: string,\n event: string,\n data: ArrayBuffer,\n excludeClientId?: string\n ): void {\n const subscribers = this.channels.getSubscribers(channel)\n if (subscribers.length === 0) {\n return\n }\n\n const header = JSON.stringify({ type: 'binary', channel, event })\n const headerBuffer = Buffer.from(header)\n const totalBuffer = Buffer.allocUnsafe(4 + headerBuffer.length + data.byteLength)\n\n totalBuffer.writeInt32LE(headerBuffer.length, 0)\n headerBuffer.copy(totalBuffer, 4)\n Buffer.from(data).copy(totalBuffer, 4 + headerBuffer.length)\n\n for (const ws of subscribers) {\n if (excludeClientId && ws.data.id === excludeClientId) {\n continue\n }\n ws.send(totalBuffer)\n }\n }\n\n broadcastBinary(channel: string, event: string, data: ArrayBuffer): void {\n this.broadcastBinaryToChannel(channel, event, data)\n }\n\n private handleClose(ws: RippleSocket, code: number, reason: string): void {\n if (this.sessionManager && ws.data.channels.size > 0) {\n const token = this.sessionManager.createSession(\n {\n clientId: ws.data.id,\n userId: ws.data.userId,\n channels: Array.from(ws.data.channels),\n userInfo: ws.data.userInfo,\n },\n ws.data.reconnectionToken\n )\n\n this.logger.info('Created reconnection session', {\n clientId: ws.data.id,\n token,\n channels: ws.data.channels.size,\n })\n }\n\n const leftChannels = this.channels.removeClient(ws.data.id)\n this.tracker.onDisconnect(ws.data.id, code, reason)\n\n this.logger.info('Client disconnected', {\n clientId: ws.data.id,\n code: code.toString(),\n reason,\n channelsLeft: leftChannels.length,\n activeConnections: this.tracker.getActiveConnections(),\n })\n\n for (const channel of leftChannels) {\n if (channel.startsWith('presence-') && ws.data.userId) {\n this.broadcastToChannel(channel, 'presence', {\n event: 'leave',\n data: {\n id: ws.data.userId,\n info: ws.data.userInfo,\n },\n })\n }\n }\n\n this.ackManager.clearClient(ws.data.id)\n }\n\n private async handleSubscribe(\n ws: RippleSocket,\n channel: string,\n _auth?: { socketId: string; signature: string }\n ): Promise<void> {\n if (requiresAuth(channel)) {\n if (!this.authorizer) {\n this.send(ws, {\n type: 'error',\n message: 'No authorizer configured for private channels',\n channel,\n })\n return\n }\n\n const result = await this.authorizer(channel, ws.data.userId, ws.data.id)\n\n if (result === false) {\n this.send(ws, { type: 'error', message: 'Unauthorized', channel })\n return\n }\n\n if (typeof result === 'object' && 'id' in result) {\n await this.channels.subscribe(ws.data.id, channel, result)\n this.tracker.onSubscribe(ws.data.id, channel)\n\n this.broadcastToChannel(channel, 'presence', { event: 'join', data: result }, ws.data.id)\n\n this.send(ws, {\n type: 'presence',\n channel,\n event: 'members',\n data: await this.channels.getPresenceMembers(channel),\n })\n } else {\n await this.channels.subscribe(ws.data.id, channel)\n this.tracker.onSubscribe(ws.data.id, channel)\n }\n } else {\n await this.channels.subscribe(ws.data.id, channel)\n this.tracker.onSubscribe(ws.data.id, channel)\n }\n\n this.send(ws, { type: 'subscribed', channel })\n }\n\n private async handleUnsubscribe(ws: RippleSocket, channel: string): Promise<void> {\n if (channel.startsWith('presence-') && ws.data.userId) {\n this.broadcastToChannel(\n channel,\n 'presence',\n {\n event: 'leave',\n data: { id: ws.data.userId, info: ws.data.userInfo },\n },\n ws.data.id\n )\n }\n\n await this.channels.unsubscribe(ws.data.id, channel)\n this.tracker.onUnsubscribe(ws.data.id, channel)\n this.send(ws, { type: 'unsubscribed', channel })\n }\n\n private handleWhisper(ws: RippleSocket, channel: string, event: string, data: unknown): void {\n if (this.config.rateLimit?.whisperMax) {\n let limiter = this.whisperLimiters.get(ws.data.id)\n if (!limiter) {\n limiter = new TokenBucket(\n this.config.rateLimit.whisperMax,\n this.config.rateLimit.whisperMax / (this.config.rateLimit.whisperInterval ?? 1000)\n )\n this.whisperLimiters.set(ws.data.id, limiter)\n }\n\n if (!limiter.consume()) {\n this.send(ws, { type: 'error', message: 'Rate limit exceeded' })\n return\n }\n }\n\n const listeners = this.eventListeners.get(event)\n if (listeners) {\n listeners.forEach((handler) => {\n handler(ws, data)\n })\n }\n\n this.emit('whisper', ws, { channel, event, data })\n\n if (!this.channels.isSubscribed(ws.data.id, channel)) {\n this.send(ws, { type: 'error', message: 'Not subscribed to channel', channel })\n return\n }\n\n this.broadcastToChannel(channel, event, data, ws.data.id)\n }\n\n broadcast(\n channel: string,\n event: string,\n data: unknown,\n options?: { needAck?: boolean; timeout?: number }\n ): void {\n this.broadcastToChannel(channel, event, data, undefined, options)\n }\n\n broadcastToClients(clientIds: string[], event: string, data: unknown): void {\n for (const clientId of clientIds) {\n const ws = this.channels.getClient(clientId)\n if (ws) {\n this.send(ws, { type: 'event', channel: '', event, data })\n }\n }\n }\n\n private broadcastToChannel(\n channel: string,\n event: string,\n data: unknown,\n excludeClientId?: string,\n options?: { needAck?: boolean; timeout?: number }\n ): void {\n const subscribers = this.channels.getSubscribers(channel)\n if (subscribers.length === 0) {\n return\n }\n\n const message: ServerMessage =\n event === 'presence'\n ? {\n type: 'presence',\n channel,\n event: (data as { event: 'join' | 'leave' | 'members' }).event,\n data: (data as { data: unknown }).data,\n }\n : { type: 'event', channel, event, data }\n\n const serialized = this.serializer.serializeForBroadcast(message)\n\n for (const ws of subscribers) {\n if (excludeClientId && ws.data.id === excludeClientId) {\n continue\n }\n\n // Execute outgoing interceptors\n this.interceptors.execute(\n { ws, message: message, direction: 'outgoing', channel, event },\n async () => {\n if (options?.needAck) {\n const { seq, promise } = this.ackManager.register(ws.data.id, options.timeout)\n const msgWithAck: ServerMessage = { ...message, seq, needAck: true }\n this.send(ws, msgWithAck)\n\n promise.then((success) => {\n if (!success) {\n this.logger.warn('ACK timeout', { clientId: ws.data.id, seq, channel })\n } else {\n this.send(ws, { type: 'ack_received', seq })\n }\n })\n } else {\n this.sendRaw(ws, serialized)\n }\n }\n )\n }\n\n this.serializer.clearBroadcastCache()\n }\n\n private sendRaw(ws: RippleSocket, serialized: string | Buffer | Uint8Array): boolean {\n const config = this.config.backpressure\n if (config?.enabled) {\n const buffered = ws.getBufferedAmount()\n if (config.hwmHigh && buffered >= config.hwmHigh) {\n this.logger.warn('Backpressure HWM High', { clientId: ws.data.id, buffered })\n this.rippleMetrics?.incrementSlowClients()\n ws.close(1011, 'Backpressure')\n return false\n }\n if (config.hwmLow && buffered >= config.hwmLow) {\n this.logger.debug('Backpressure HWM Low', { clientId: ws.data.id, buffered })\n }\n }\n\n try {\n ws.send(serialized)\n return true\n } catch {\n return false\n }\n }\n\n private send(ws: RippleSocket, message: ServerMessage): boolean {\n return this.sendRaw(ws, this.serializer.serialize(message))\n }\n\n /**\n * Add a middleware interceptor (v4.0+).\n */\n use(interceptor: RippleInterceptor): this {\n this.interceptors.use(interceptor)\n return this\n }\n\n /**\n * Get real-time server statistics.\n */\n getStats() {\n return this.channels.getStats()\n }\n\n /**\n * Get Prometheus metrics (v3.7+).\n */\n getMetrics(): string {\n return this.rippleMetrics?.export() ?? ''\n }\n\n /**\n * Get server health status.\n */\n async getHealth() {\n return await this.healthChecker.check()\n }\n\n /**\n * Initialize and start the RippleServer.\n *\n * This method:\n * 1. Initializes the driver (Redis/NATS/Local)\n * 2. Initializes the serializer (JSON/Protobuf)\n * 3. Starts the WebSocket engine (Bun/uWS/ws)\n * 4. Starts the ping interval\n *\n * @since 5.0.0\n */\n async start(): Promise<void> {\n const port = this.config.port ?? 3000\n\n this.logger.info('Starting RippleServer', {\n driver: this.driver.name,\n serializer: this.serializer.contentType,\n runtime: this.config.runtime ?? 'auto-detected',\n port,\n })\n\n // Initialize driver\n await this.driver.init?.()\n\n // Initialize serializer if needed (e.g. loading proto files)\n if ('init' in this.serializer) {\n await (this.serializer as any).init()\n }\n\n // Start the WebSocket engine\n await this.engine.listen(port)\n\n // Start ping interval\n if (this.config.pingInterval > 0) {\n const pong = this.serializer.getPongMessage()\n this.pingInterval = setInterval(() => {\n for (const ws of this.channels.getAllClients()) {\n try {\n ws.send(pong)\n } catch {}\n }\n }, this.config.pingInterval)\n }\n\n this.logger.info('RippleServer started successfully', { port })\n }\n\n /**\n * Initialize the RippleServer without starting the engine.\n *\n * @deprecated Use start() instead. This method is kept for backward compatibility.\n * @since 3.0.0\n */\n async init(): Promise<void> {\n this.logger.info('Initializing RippleServer', {\n driver: this.driver.name,\n serializer: this.serializer.contentType,\n })\n\n await this.driver.init?.()\n\n // Initialize serializer if needed (e.g. loading proto files)\n if ('init' in this.serializer) {\n await (this.serializer as any).init()\n }\n\n if (this.config.pingInterval > 0) {\n const pong = this.serializer.getPongMessage()\n this.pingInterval = setInterval(() => {\n for (const ws of this.channels.getAllClients()) {\n try {\n ws.send(pong)\n } catch {}\n }\n }, this.config.pingInterval)\n }\n }\n\n async shutdown(): Promise<void> {\n this.logger.info('Shutting down RippleServer')\n if (this.pingInterval) {\n clearInterval(this.pingInterval)\n }\n await this.driver.shutdown?.()\n }\n}\n",
69
71
  "import type { GravitoContext, GravitoNext, GravitoOrbit, PlanetCore } from '@gravito/core'\nimport { setRippleServer } from './events/Broadcaster'\nimport { BroadcastManager } from './events/BroadcastManager'\nimport { RippleServer } from './RippleServer'\nimport type { RippleConfig } from './types'\n\n/**\n * OrbitRipple integrates the Ripple WebSocket module into the Gravito framework.\n *\n * It handles the registration of the RippleServer in the IoC container,\n * adds middleware for context access, and manages the server lifecycle.\n *\n * @example\n * ```typescript\n * import { PlanetCore } from '@gravito/core'\n * import { OrbitRipple } from '@gravito/ripple'\n *\n * const core = new PlanetCore()\n *\n * // Install Ripple as an Orbit\n * core.install(new OrbitRipple({\n * path: '/ws',\n * authorizer: async (channel, userId) => userId !== undefined\n * }))\n * ```\n */\nexport class OrbitRipple implements GravitoOrbit {\n private server: RippleServer\n private config: RippleConfig\n\n /**\n * Create a new OrbitRipple.\n *\n * @param config - Ripple configuration options\n */\n constructor(config: RippleConfig = {}) {\n this.config = config\n this.server = new RippleServer(config)\n }\n\n /**\n * Install the orbit into the Gravito core.\n *\n * - Registers 'ripple' (RippleServer) and 'broadcast' (BroadcastManager) in the container.\n * - Adds middleware to inject 'ripple' and 'broadcast' into GravitoContext.\n * - Initializes the server and registers shutdown hooks.\n *\n * @param core - The PlanetCore instance\n */\n install(core: PlanetCore): void {\n core.logger.info('🌊 Orbit Ripple installed')\n\n // Set static reference for helper functions\n setRippleServer(this.server)\n\n // Register in IoC container\n core.container.instance('ripple', this.server)\n\n const broadcastManager = new BroadcastManager(this.server)\n core.container.instance('broadcast', broadcastManager)\n\n // Middleware to inject into context\n core.adapter.use('*', async (ctx: GravitoContext, next: GravitoNext) => {\n ctx.set('ripple', this.server)\n ctx.set('broadcast', broadcastManager)\n return await next()\n })\n\n // Async initialization\n this.server.init().then(() => {\n core.logger.info(`🌊 Ripple WebSocket ready at ${this.config.path || '/ws'}`)\n })\n\n // Lifecycle: Graceful shutdown\n core.hooks.doAction('core:shutdown', async () => {\n await this.server.shutdown()\n })\n }\n\n /**\n * Get the underlying RippleServer instance.\n *\n * @returns The RippleServer instance\n */\n getServer(): RippleServer {\n return this.server\n }\n\n /**\n * Get the WebSocket handler for Bun.serve.\n *\n * @returns The WebSocket handler object\n */\n getHandler() {\n return this.server.getHandler()\n }\n}\n\ndeclare module '@gravito/core' {\n interface GravitoVariables {\n /** RippleServer instance available in context */\n ripple?: RippleServer\n /** BroadcastManager instance available in context */\n broadcast?: BroadcastManager\n }\n}\n",
70
72
  "import type { ISerializer } from '../serializers/ISerializer'\nimport type { ClientMessage, ServerMessage } from '../types'\n\n/**\n * 訊息序列化器,用於 JSON 格式的訊息序列化與反序列化。\n *\n * 實現了廣播消息的緩存優化,確保相同的訊息只被序列化一次,\n * 然後發送給所有客戶端,從而減少 CPU 開銷。\n */\nexport class MessageSerializer implements ISerializer {\n readonly contentType = 'json'\n\n /** 預序列化的 PONG 訊息 */\n private static readonly PONG_MESSAGE = '{\"type\":\"pong\"}'\n\n /** 廣播訊息緩存 */\n private broadcastCache: Map<ServerMessage, string> = new Map()\n\n /**\n * 序列化伺服器訊息為 JSON 字符串。\n *\n * @param message - 要序列化的訊息\n * @returns JSON 字符串\n */\n serialize(message: ServerMessage): string {\n return JSON.stringify(message)\n }\n\n /**\n * 將訊息反序列化為客戶端訊息物件。\n *\n * @param data - 原始數據\n * @returns 解析後的客戶端訊息\n */\n deserialize(data: string | Buffer | ArrayBuffer): ClientMessage {\n const str = typeof data === 'string' ? data : new TextDecoder().decode(data)\n return JSON.parse(str) as ClientMessage\n }\n\n /**\n * 為廣播序列化訊息,支援緩存優化。\n *\n * 第一次序列化時會緩存結果,後續相同的訊息會直接返回緩存值,\n * 避免重複序列化。這在廣播給大量客戶端時可以顯著減少 CPU 使用。\n *\n * @param message - 要廣播的訊息\n * @returns 序列化的訊息\n */\n serializeForBroadcast(message: ServerMessage): string {\n let cached = this.broadcastCache.get(message)\n if (!cached) {\n cached = this.serialize(message)\n this.broadcastCache.set(message, cached)\n }\n return cached\n }\n\n /**\n * 清除廣播訊息緩存。\n *\n * 應在訊息發送完成後調用,以釋放記憶體。\n */\n clearBroadcastCache(): void {\n this.broadcastCache.clear()\n }\n\n /**\n * 取得預序列化的 PONG 訊息。\n *\n * PONG 訊息是一個常用的心跳訊息,為了效率我們將其預序列化為常數,\n * 每次都返回相同的字符串引用,無需重複序列化。\n *\n * @returns 預序列化的 PONG 訊息\n */\n getPongMessage(): string {\n return MessageSerializer.PONG_MESSAGE\n }\n}\n"
71
73
  ],
72
- "mappings": "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",
73
- "debugId": "7FB174B3B1EE198164756E2164756E21",
74
+ "mappings": "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",
75
+ "debugId": "5BEEEDA722E6EBC364756E2164756E21",
74
76
  "names": []
75
77
  }