@voidhash/mimic-effect 0.0.9 → 1.0.0-beta.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 (176) hide show
  1. package/.turbo/turbo-build.log +93 -89
  2. package/README.md +385 -0
  3. package/dist/ColdStorage.cjs +60 -0
  4. package/dist/ColdStorage.d.cts +53 -0
  5. package/dist/ColdStorage.d.cts.map +1 -0
  6. package/dist/ColdStorage.d.mts +53 -0
  7. package/dist/ColdStorage.d.mts.map +1 -0
  8. package/dist/ColdStorage.mjs +60 -0
  9. package/dist/ColdStorage.mjs.map +1 -0
  10. package/dist/DocumentManager.cjs +193 -82
  11. package/dist/DocumentManager.d.cts +33 -19
  12. package/dist/DocumentManager.d.cts.map +1 -1
  13. package/dist/DocumentManager.d.mts +33 -19
  14. package/dist/DocumentManager.d.mts.map +1 -1
  15. package/dist/DocumentManager.mjs +189 -67
  16. package/dist/DocumentManager.mjs.map +1 -1
  17. package/dist/Errors.cjs +45 -0
  18. package/dist/Errors.d.cts +81 -0
  19. package/dist/Errors.d.cts.map +1 -0
  20. package/dist/Errors.d.mts +81 -0
  21. package/dist/Errors.d.mts.map +1 -0
  22. package/dist/Errors.mjs +40 -0
  23. package/dist/Errors.mjs.map +1 -0
  24. package/dist/HotStorage.cjs +77 -0
  25. package/dist/HotStorage.d.cts +54 -0
  26. package/dist/HotStorage.d.cts.map +1 -0
  27. package/dist/HotStorage.d.mts +54 -0
  28. package/dist/HotStorage.d.mts.map +1 -0
  29. package/dist/HotStorage.mjs +77 -0
  30. package/dist/HotStorage.mjs.map +1 -0
  31. package/dist/Metrics.cjs +121 -0
  32. package/dist/Metrics.d.cts +27 -0
  33. package/dist/Metrics.d.cts.map +1 -0
  34. package/dist/Metrics.d.mts +27 -0
  35. package/dist/Metrics.d.mts.map +1 -0
  36. package/dist/Metrics.mjs +106 -0
  37. package/dist/Metrics.mjs.map +1 -0
  38. package/dist/MimicAuthService.cjs +61 -45
  39. package/dist/MimicAuthService.d.cts +61 -48
  40. package/dist/MimicAuthService.d.cts.map +1 -1
  41. package/dist/MimicAuthService.d.mts +61 -48
  42. package/dist/MimicAuthService.d.mts.map +1 -1
  43. package/dist/MimicAuthService.mjs +60 -36
  44. package/dist/MimicAuthService.mjs.map +1 -1
  45. package/dist/MimicClusterServerEngine.cjs +443 -0
  46. package/dist/MimicClusterServerEngine.d.cts +17 -0
  47. package/dist/MimicClusterServerEngine.d.cts.map +1 -0
  48. package/dist/MimicClusterServerEngine.d.mts +17 -0
  49. package/dist/MimicClusterServerEngine.d.mts.map +1 -0
  50. package/dist/MimicClusterServerEngine.mjs +445 -0
  51. package/dist/MimicClusterServerEngine.mjs.map +1 -0
  52. package/dist/MimicServer.cjs +205 -96
  53. package/dist/MimicServer.d.cts +9 -110
  54. package/dist/MimicServer.d.cts.map +1 -1
  55. package/dist/MimicServer.d.mts +9 -110
  56. package/dist/MimicServer.d.mts.map +1 -1
  57. package/dist/MimicServer.mjs +206 -90
  58. package/dist/MimicServer.mjs.map +1 -1
  59. package/dist/MimicServerEngine.cjs +97 -0
  60. package/dist/MimicServerEngine.d.cts +75 -0
  61. package/dist/MimicServerEngine.d.cts.map +1 -0
  62. package/dist/MimicServerEngine.d.mts +75 -0
  63. package/dist/MimicServerEngine.d.mts.map +1 -0
  64. package/dist/MimicServerEngine.mjs +97 -0
  65. package/dist/MimicServerEngine.mjs.map +1 -0
  66. package/dist/PresenceManager.cjs +75 -91
  67. package/dist/PresenceManager.d.cts +17 -66
  68. package/dist/PresenceManager.d.cts.map +1 -1
  69. package/dist/PresenceManager.d.mts +17 -66
  70. package/dist/PresenceManager.d.mts.map +1 -1
  71. package/dist/PresenceManager.mjs +74 -78
  72. package/dist/PresenceManager.mjs.map +1 -1
  73. package/dist/Protocol.cjs +146 -0
  74. package/dist/Protocol.d.cts +203 -0
  75. package/dist/Protocol.d.cts.map +1 -0
  76. package/dist/Protocol.d.mts +203 -0
  77. package/dist/Protocol.d.mts.map +1 -0
  78. package/dist/Protocol.mjs +132 -0
  79. package/dist/Protocol.mjs.map +1 -0
  80. package/dist/Types.d.cts +172 -0
  81. package/dist/Types.d.cts.map +1 -0
  82. package/dist/Types.d.mts +172 -0
  83. package/dist/Types.d.mts.map +1 -0
  84. package/dist/_virtual/rolldown_runtime.cjs +1 -25
  85. package/dist/_virtual/rolldown_runtime.mjs +4 -1
  86. package/dist/index.cjs +37 -75
  87. package/dist/index.d.cts +13 -12
  88. package/dist/index.d.mts +13 -12
  89. package/dist/index.mjs +12 -12
  90. package/package.json +13 -3
  91. package/src/ColdStorage.ts +136 -0
  92. package/src/DocumentManager.ts +445 -193
  93. package/src/Errors.ts +100 -0
  94. package/src/HotStorage.ts +165 -0
  95. package/src/Metrics.ts +163 -0
  96. package/src/MimicAuthService.ts +126 -64
  97. package/src/MimicClusterServerEngine.ts +824 -0
  98. package/src/MimicServer.ts +448 -195
  99. package/src/MimicServerEngine.ts +272 -0
  100. package/src/PresenceManager.ts +169 -240
  101. package/src/Protocol.ts +350 -0
  102. package/src/Types.ts +231 -0
  103. package/src/index.ts +57 -23
  104. package/tests/ColdStorage.test.ts +136 -0
  105. package/tests/DocumentManager.test.ts +158 -287
  106. package/tests/HotStorage.test.ts +143 -0
  107. package/tests/MimicAuthService.test.ts +102 -134
  108. package/tests/MimicClusterServerEngine.test.ts +587 -0
  109. package/tests/MimicServer.test.ts +90 -226
  110. package/tests/MimicServerEngine.test.ts +521 -0
  111. package/tests/PresenceManager.test.ts +22 -63
  112. package/tests/Protocol.test.ts +190 -0
  113. package/tsconfig.json +1 -1
  114. package/dist/DocumentProtocol.cjs +0 -94
  115. package/dist/DocumentProtocol.d.cts +0 -113
  116. package/dist/DocumentProtocol.d.cts.map +0 -1
  117. package/dist/DocumentProtocol.d.mts +0 -113
  118. package/dist/DocumentProtocol.d.mts.map +0 -1
  119. package/dist/DocumentProtocol.mjs +0 -89
  120. package/dist/DocumentProtocol.mjs.map +0 -1
  121. package/dist/MimicConfig.cjs +0 -60
  122. package/dist/MimicConfig.d.cts +0 -141
  123. package/dist/MimicConfig.d.cts.map +0 -1
  124. package/dist/MimicConfig.d.mts +0 -141
  125. package/dist/MimicConfig.d.mts.map +0 -1
  126. package/dist/MimicConfig.mjs +0 -50
  127. package/dist/MimicConfig.mjs.map +0 -1
  128. package/dist/MimicDataStorage.cjs +0 -83
  129. package/dist/MimicDataStorage.d.cts +0 -113
  130. package/dist/MimicDataStorage.d.cts.map +0 -1
  131. package/dist/MimicDataStorage.d.mts +0 -113
  132. package/dist/MimicDataStorage.d.mts.map +0 -1
  133. package/dist/MimicDataStorage.mjs +0 -74
  134. package/dist/MimicDataStorage.mjs.map +0 -1
  135. package/dist/WebSocketHandler.cjs +0 -365
  136. package/dist/WebSocketHandler.d.cts +0 -34
  137. package/dist/WebSocketHandler.d.cts.map +0 -1
  138. package/dist/WebSocketHandler.d.mts +0 -34
  139. package/dist/WebSocketHandler.d.mts.map +0 -1
  140. package/dist/WebSocketHandler.mjs +0 -355
  141. package/dist/WebSocketHandler.mjs.map +0 -1
  142. package/dist/auth/NoAuth.cjs +0 -43
  143. package/dist/auth/NoAuth.d.cts +0 -22
  144. package/dist/auth/NoAuth.d.cts.map +0 -1
  145. package/dist/auth/NoAuth.d.mts +0 -22
  146. package/dist/auth/NoAuth.d.mts.map +0 -1
  147. package/dist/auth/NoAuth.mjs +0 -36
  148. package/dist/auth/NoAuth.mjs.map +0 -1
  149. package/dist/errors.cjs +0 -74
  150. package/dist/errors.d.cts +0 -89
  151. package/dist/errors.d.cts.map +0 -1
  152. package/dist/errors.d.mts +0 -89
  153. package/dist/errors.d.mts.map +0 -1
  154. package/dist/errors.mjs +0 -67
  155. package/dist/errors.mjs.map +0 -1
  156. package/dist/storage/InMemoryDataStorage.cjs +0 -57
  157. package/dist/storage/InMemoryDataStorage.d.cts +0 -19
  158. package/dist/storage/InMemoryDataStorage.d.cts.map +0 -1
  159. package/dist/storage/InMemoryDataStorage.d.mts +0 -19
  160. package/dist/storage/InMemoryDataStorage.d.mts.map +0 -1
  161. package/dist/storage/InMemoryDataStorage.mjs +0 -48
  162. package/dist/storage/InMemoryDataStorage.mjs.map +0 -1
  163. package/src/DocumentProtocol.ts +0 -112
  164. package/src/MimicConfig.ts +0 -211
  165. package/src/MimicDataStorage.ts +0 -157
  166. package/src/WebSocketHandler.ts +0 -735
  167. package/src/auth/NoAuth.ts +0 -46
  168. package/src/errors.ts +0 -113
  169. package/src/storage/InMemoryDataStorage.ts +0 -66
  170. package/tests/DocumentProtocol.test.ts +0 -113
  171. package/tests/InMemoryDataStorage.test.ts +0 -190
  172. package/tests/MimicConfig.test.ts +0 -290
  173. package/tests/MimicDataStorage.test.ts +0 -190
  174. package/tests/NoAuth.test.ts +0 -94
  175. package/tests/WebSocketHandler.test.ts +0 -321
  176. package/tests/errors.test.ts +0 -77
@@ -1,5 +1,5 @@
1
1
 
2
- > @voidhash/mimic-effect@0.0.9 build /home/runner/work/mimic/mimic/packages/mimic-effect
2
+ > @voidhash/mimic-effect@1.0.0-beta.1 build /home/runner/work/mimic/mimic/packages/mimic-effect
3
3
  > tsdown
4
4
 
5
5
  ℹ tsdown v0.18.2 powered by rolldown v1.0.0-beta.55
@@ -8,101 +8,105 @@
8
8
  ℹ target: es2017
9
9
  ℹ tsconfig: tsconfig.json
10
10
  ℹ Build start
11
- ℹ [CJS] dist/index.cjs  2.79 kB │ gzip: 0.52 kB
12
- ℹ [CJS] dist/WebSocketHandler.cjs 13.83 kB │ gzip: 2.46 kB
13
- ℹ [CJS] dist/MimicServer.cjs  6.03 kB │ gzip: 1.82 kB
14
- ℹ [CJS] dist/DocumentManager.cjs  4.75 kB │ gzip: 1.40 kB
15
- ℹ [CJS] dist/PresenceManager.cjs  4.25 kB │ gzip: 1.19 kB
16
- ℹ [CJS] dist/MimicDataStorage.cjs  3.13 kB │ gzip: 0.96 kB
17
- ℹ [CJS] dist/DocumentProtocol.cjs  2.85 kB │ gzip: 0.79 kB
18
- ℹ [CJS] dist/MimicConfig.cjs  2.77 kB │ gzip: 0.93 kB
19
- ℹ [CJS] dist/errors.cjs  2.33 kB │ gzip: 0.63 kB
20
- ℹ [CJS] dist/storage/InMemoryDataStorage.cjs  2.21 kB │ gzip: 0.80 kB
21
- ℹ [CJS] dist/MimicAuthService.cjs  2.12 kB │ gzip: 0.69 kB
22
- ℹ [CJS] dist/auth/NoAuth.cjs  1.52 kB │ gzip: 0.63 kB
23
- ℹ [CJS] dist/_virtual/rolldown_runtime.cjs  1.31 kB │ gzip: 0.61 kB
11
+ ℹ [CJS] dist/index.cjs  2.37 kB │ gzip: 0.49 kB
12
+ ℹ [CJS] dist/MimicClusterServerEngine.cjs 18.10 kB │ gzip: 4.15 kB
13
+ ℹ [CJS] dist/MimicServer.cjs 10.10 kB │ gzip: 2.74 kB
14
+ ℹ [CJS] dist/DocumentManager.cjs  9.09 kB │ gzip: 2.24 kB
15
+ ℹ [CJS] dist/MimicServerEngine.cjs  4.23 kB │ gzip: 1.34 kB
16
+ ℹ [CJS] dist/Protocol.cjs  3.78 kB │ gzip: 1.14 kB
17
+ ℹ [CJS] dist/PresenceManager.cjs  3.72 kB │ gzip: 1.00 kB
18
+ ℹ [CJS] dist/Metrics.cjs  3.49 kB │ gzip: 0.88 kB
19
+ ℹ [CJS] dist/HotStorage.cjs  2.63 kB │ gzip: 0.94 kB
20
+ ℹ [CJS] dist/MimicAuthService.cjs  2.27 kB │ gzip: 0.88 kB
21
+ ℹ [CJS] dist/ColdStorage.cjs  1.91 kB │ gzip: 0.77 kB
22
+ ℹ [CJS] dist/Errors.cjs  1.63 kB │ gzip: 0.49 kB
24
23
  ℹ [CJS] dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.cjs  0.95 kB │ gzip: 0.43 kB
25
24
  ℹ [CJS] dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.cjs  0.53 kB │ gzip: 0.29 kB
26
25
  ℹ [CJS] dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.cjs  0.52 kB │ gzip: 0.32 kB
27
26
  ℹ [CJS] dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.cjs  0.40 kB │ gzip: 0.24 kB
28
27
  ℹ [CJS] dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.cjs  0.37 kB │ gzip: 0.23 kB
29
- ℹ [CJS] 18 files, total: 52.65 kB
30
- ℹ [CJS] dist/MimicDataStorage.d.cts.map 1.96 kB │ gzip: 0.73 kB
31
- ℹ [CJS] dist/DocumentProtocol.d.cts.map 1.35 kB │ gzip: 0.52 kB
32
- ℹ [CJS] dist/MimicConfig.d.cts.map 1.03 kB │ gzip: 0.51 kB
33
- ℹ [CJS] dist/MimicAuthService.d.cts.map 0.97 kB │ gzip: 0.51 kB
34
- ℹ [CJS] dist/MimicServer.d.cts.map 0.84 kB │ gzip: 0.44 kB
35
- ℹ [CJS] dist/errors.d.cts.map 0.77 kB │ gzip: 0.36 kB
36
- ℹ [CJS] dist/WebSocketHandler.d.cts.map 0.74 kB │ gzip: 0.35 kB
37
- ℹ [CJS] dist/PresenceManager.d.cts.map 0.69 kB │ gzip: 0.36 kB
38
- ℹ [CJS] dist/DocumentManager.d.cts.map 0.52 kB │ gzip: 0.29 kB
39
- ℹ [CJS] dist/storage/InMemoryDataStorage.d.cts.map 0.26 kB │ gzip: 0.18 kB
40
- ℹ [CJS] dist/auth/NoAuth.d.cts.map 0.22 kB │ gzip: 0.17 kB
41
- ℹ [CJS] dist/index.d.cts 1.52 kB │ gzip: 0.37 kB
42
- ℹ [CJS] dist/MimicConfig.d.cts 5.14 kB │ gzip: 1.43 kB
43
- ℹ [CJS] dist/MimicDataStorage.d.cts 4.84 kB │ gzip: 1.19 kB
44
- ℹ [CJS] dist/MimicServer.d.cts 4.62 kB │ gzip: 1.65 kB
45
- ℹ [CJS] dist/errors.d.cts 4.08 kB │ gzip: 0.75 kB
46
- ℹ [CJS] dist/DocumentProtocol.d.cts 3.78 kB │ gzip: 0.78 kB
47
- ℹ [CJS] dist/PresenceManager.d.cts 3.00 kB │ gzip: 0.90 kB
48
- ℹ [CJS] dist/MimicAuthService.d.cts 2.38 kB │ gzip: 0.77 kB
49
- ℹ [CJS] dist/DocumentManager.d.cts 1.77 kB │ gzip: 0.63 kB
50
- ℹ [CJS] dist/WebSocketHandler.d.cts 1.73 kB │ gzip: 0.63 kB
51
- ℹ [CJS] dist/auth/NoAuth.d.cts 0.72 kB │ gzip: 0.40 kB
52
- ℹ [CJS] dist/storage/InMemoryDataStorage.d.cts 0.65 kB │ gzip: 0.33 kB
53
- ℹ [CJS] 23 files, total: 43.60 kB
54
- ✔ Build complete in 5485ms
55
- ℹ [ESM] dist/index.mjs  1.45 kB │ gzip: 0.36 kB
56
- ℹ [ESM] dist/WebSocketHandler.mjs.map 29.74 kB │ gzip: 5.00 kB
57
- ℹ [ESM] dist/WebSocketHandler.mjs 12.36 kB │ gzip: 2.34 kB
58
- ℹ [ESM] dist/MimicServer.mjs.map 10.71 kB │ gzip: 3.31 kB
59
- ℹ [ESM] dist/PresenceManager.mjs.map 10.45 kB │ gzip: 2.54 kB
60
- ℹ [ESM] dist/DocumentManager.mjs.map  9.97 kB │ gzip: 2.85 kB
61
- ℹ [ESM] dist/MimicConfig.mjs.map  7.76 kB │ gzip: 2.11 kB
62
- ℹ [ESM] dist/MimicDataStorage.mjs.map  6.27 kB │ gzip: 1.55 kB
63
- ℹ [ESM] dist/MimicServer.mjs  5.21 kB │ gzip: 1.72 kB
64
- ℹ [ESM] dist/MimicAuthService.mjs.map  4.09 kB │ gzip: 1.10 kB
65
- ℹ [ESM] dist/DocumentProtocol.mjs.map  4.07 kB │ gzip: 1.01 kB
66
- ℹ [ESM] dist/DocumentManager.mjs  3.81 kB │ gzip: 1.26 kB
67
- ℹ [ESM] dist/errors.mjs.map  3.53 kB │ gzip: 0.92 kB
68
- ℹ [ESM] dist/PresenceManager.mjs  3.38 kB │ gzip: 1.06 kB
69
- ℹ [ESM] dist/storage/InMemoryDataStorage.mjs.map  2.84 kB │ gzip: 1.03 kB
70
- ℹ [ESM] dist/MimicDataStorage.mjs  2.66 kB │ gzip: 0.87 kB
71
- ℹ [ESM] dist/DocumentProtocol.mjs  2.44 kB │ gzip: 0.73 kB
72
- ℹ [ESM] dist/MimicConfig.mjs  2.25 kB │ gzip: 0.84 kB
73
- ℹ [ESM] dist/MimicDataStorage.d.mts.map  1.96 kB │ gzip: 0.73 kB
74
- ℹ [ESM] dist/errors.mjs  1.95 kB │ gzip: 0.57 kB
75
- ℹ [ESM] dist/auth/NoAuth.mjs.map  1.82 kB │ gzip: 0.68 kB
76
- ℹ [ESM] dist/MimicAuthService.mjs  1.74 kB │ gzip: 0.61 kB
77
- ℹ [ESM] dist/storage/InMemoryDataStorage.mjs  1.68 kB │ gzip: 0.71 kB
78
- ℹ [ESM] dist/DocumentProtocol.d.mts.map  1.35 kB │ gzip: 0.52 kB
79
- ℹ [ESM] dist/auth/NoAuth.mjs  1.21 kB │ gzip: 0.56 kB
80
- ℹ [ESM] dist/MimicConfig.d.mts.map  1.03 kB │ gzip: 0.51 kB
81
- ℹ [ESM] dist/MimicAuthService.d.mts.map  0.97 kB │ gzip: 0.51 kB
28
+ ℹ [CJS] dist/_virtual/rolldown_runtime.cjs  0.36 kB │ gzip: 0.25 kB
29
+ ℹ [CJS] 18 files, total: 66.45 kB
30
+ ℹ [CJS] dist/Protocol.d.cts.map 1.57 kB │ gzip: 0.70 kB
31
+ ℹ [CJS] dist/Types.d.cts.map 1.41 kB │ gzip: 0.65 kB
32
+ ℹ [CJS] dist/MimicServerEngine.d.cts.map 1.05 kB │ gzip: 0.48 kB
33
+ ℹ [CJS] dist/Errors.d.cts.map 0.72 kB │ gzip: 0.34 kB
34
+ ℹ [CJS] dist/ColdStorage.d.cts.map 0.70 kB │ gzip: 0.37 kB
35
+ ℹ [CJS] dist/HotStorage.d.cts.map 0.64 kB │ gzip: 0.35 kB
36
+ ℹ [CJS] dist/MimicAuthService.d.cts.map 0.61 kB │ gzip: 0.35 kB
37
+ ℹ [CJS] dist/DocumentManager.d.cts.map 0.56 kB │ gzip: 0.33 kB
38
+ ℹ [CJS] dist/PresenceManager.d.cts.map 0.45 kB │ gzip: 0.27 kB
39
+ ℹ [CJS] dist/MimicClusterServerEngine.d.cts.map 0.25 kB │ gzip: 0.19 kB
40
+ ℹ [CJS] dist/MimicServer.d.cts.map 0.22 kB │ gzip: 0.16 kB
41
+ ℹ [CJS] dist/Metrics.d.cts.map 0.12 kB │ gzip: 0.12 kB
42
+ ℹ [CJS] dist/index.d.cts 2.23 kB │ gzip: 0.56 kB
43
+ ℹ [CJS] dist/Protocol.d.cts 5.86 kB │ gzip: 1.34 kB
44
+ ℹ [CJS] dist/Types.d.cts 5.47 kB │ gzip: 1.54 kB
45
+ ℹ [CJS] dist/Errors.d.cts 4.10 kB │ gzip: 0.85 kB
46
+ ℹ [CJS] dist/MimicServerEngine.d.cts 3.15 kB │ gzip: 1.00 kB
47
+ ℹ [CJS] dist/MimicAuthService.d.cts 2.70 kB │ gzip: 1.04 kB
48
+ ℹ [CJS] dist/DocumentManager.d.cts 2.23 kB │ gzip: 0.76 kB
49
+ ℹ [CJS] dist/HotStorage.d.cts 1.95 kB │ gzip: 0.83 kB
50
+ ℹ [CJS] dist/ColdStorage.d.cts 1.74 kB │ gzip: 0.70 kB
51
+ ℹ [CJS] dist/PresenceManager.d.cts 1.60 kB │ gzip: 0.63 kB
52
+ ℹ [CJS] dist/Metrics.d.cts 1.37 kB │ gzip: 0.36 kB
53
+ ℹ [CJS] dist/MimicClusterServerEngine.d.cts 0.82 kB │ gzip: 0.33 kB
54
+ ℹ [CJS] dist/MimicServer.d.cts 0.74 kB │ gzip: 0.31 kB
55
+ ℹ [CJS] 25 files, total: 42.28 kB
56
+ ✔ Build complete in 6497ms
57
+ ℹ [ESM] dist/index.mjs  1.34 kB │ gzip: 0.34 kB
58
+ ℹ [ESM] dist/MimicClusterServerEngine.mjs.map 35.37 kB │ gzip: 8.25 kB
59
+ ℹ [ESM] dist/DocumentManager.mjs.map 21.77 kB │ gzip: 5.24 kB
60
+ ℹ [ESM] dist/MimicServer.mjs.map 20.88 kB │ gzip: 5.46 kB
61
+ ℹ [ESM] dist/MimicClusterServerEngine.mjs 16.72 kB │ gzip: 4.17 kB
62
+ ℹ [ESM] dist/MimicServerEngine.mjs.map  9.73 kB │ gzip: 2.68 kB
63
+ ℹ [ESM] dist/MimicServer.mjs  9.63 kB │ gzip: 2.78 kB
64
+ ℹ [ESM] dist/Protocol.mjs.map  9.18 kB │ gzip: 2.15 kB
65
+ ℹ [ESM] dist/PresenceManager.mjs.map  9.11 kB │ gzip: 2.27 kB
66
+ ℹ [ESM] dist/DocumentManager.mjs  8.49 kB │ gzip: 2.26 kB
67
+ ℹ [ESM] dist/HotStorage.mjs.map  6.48 kB │ gzip: 1.93 kB
68
+ ℹ [ESM] dist/MimicAuthService.mjs.map  6.09 kB │ gzip: 1.85 kB
69
+ ℹ [ESM] dist/Metrics.mjs.map  5.25 kB │ gzip: 1.22 kB
70
+ ℹ [ESM] dist/ColdStorage.mjs.map  4.90 kB │ gzip: 1.52 kB
71
+ ℹ [ESM] dist/MimicServerEngine.mjs  4.10 kB │ gzip: 1.35 kB
72
+ ℹ [ESM] dist/Errors.mjs.map  3.46 kB │ gzip: 0.88 kB
73
+ ℹ [ESM] dist/PresenceManager.mjs  3.39 kB │ gzip: 1.01 kB
74
+ ℹ [ESM] dist/Protocol.mjs  3.35 kB │ gzip: 1.06 kB
75
+ ℹ [ESM] dist/Metrics.mjs  2.95 kB │ gzip: 0.85 kB
76
+ ℹ [ESM] dist/HotStorage.mjs  2.56 kB │ gzip: 0.96 kB
77
+ ℹ [ESM] dist/MimicAuthService.mjs  2.23 kB │ gzip: 0.88 kB
78
+ ℹ [ESM] dist/ColdStorage.mjs  1.85 kB │ gzip: 0.79 kB
79
+ ℹ [ESM] dist/Protocol.d.mts.map  1.57 kB │ gzip: 0.70 kB
80
+ ℹ [ESM] dist/Errors.mjs  1.42 kB │ gzip: 0.50 kB
81
+ ℹ [ESM] dist/Types.d.mts.map  1.41 kB │ gzip: 0.65 kB
82
+ ℹ [ESM] dist/MimicServerEngine.d.mts.map  1.05 kB │ gzip: 0.48 kB
82
83
  ℹ [ESM] dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.mjs  0.90 kB │ gzip: 0.42 kB
83
- ℹ [ESM] dist/MimicServer.d.mts.map  0.84 kB │ gzip: 0.44 kB
84
- ℹ [ESM] dist/errors.d.mts.map  0.77 kB │ gzip: 0.36 kB
85
- ℹ [ESM] dist/WebSocketHandler.d.mts.map  0.74 kB │ gzip: 0.35 kB
86
- ℹ [ESM] dist/PresenceManager.d.mts.map  0.69 kB │ gzip: 0.36 kB
87
- ℹ [ESM] dist/DocumentManager.d.mts.map  0.52 kB │ gzip: 0.29 kB
84
+ ℹ [ESM] dist/Errors.d.mts.map  0.72 kB │ gzip: 0.34 kB
85
+ ℹ [ESM] dist/ColdStorage.d.mts.map  0.70 kB │ gzip: 0.37 kB
86
+ ℹ [ESM] dist/HotStorage.d.mts.map  0.64 kB │ gzip: 0.35 kB
87
+ ℹ [ESM] dist/MimicAuthService.d.mts.map  0.61 kB │ gzip: 0.35 kB
88
+ ℹ [ESM] dist/DocumentManager.d.mts.map  0.56 kB │ gzip: 0.33 kB
89
+ ℹ [ESM] dist/_virtual/rolldown_runtime.mjs  0.47 kB │ gzip: 0.30 kB
88
90
  ℹ [ESM] dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.mjs  0.47 kB │ gzip: 0.30 kB
91
+ ℹ [ESM] dist/PresenceManager.d.mts.map  0.45 kB │ gzip: 0.27 kB
89
92
  ℹ [ESM] dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.mjs  0.43 kB │ gzip: 0.24 kB
90
- ℹ [ESM] dist/_virtual/rolldown_runtime.mjs  0.35 kB │ gzip: 0.24 kB
91
93
  ℹ [ESM] dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.mjs  0.35 kB │ gzip: 0.23 kB
92
94
  ℹ [ESM] dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.mjs  0.30 kB │ gzip: 0.21 kB
93
- ℹ [ESM] dist/storage/InMemoryDataStorage.d.mts.map  0.26 kB │ gzip: 0.18 kB
94
- ℹ [ESM] dist/auth/NoAuth.d.mts.map  0.22 kB │ gzip: 0.17 kB
95
- ℹ [ESM] dist/index.d.mts  1.52 kB │ gzip: 0.37 kB
96
- ℹ [ESM] dist/MimicConfig.d.mts  5.14 kB │ gzip: 1.42 kB
97
- ℹ [ESM] dist/MimicDataStorage.d.mts  4.84 kB │ gzip: 1.19 kB
98
- ℹ [ESM] dist/MimicServer.d.mts  4.62 kB │ gzip: 1.65 kB
99
- ℹ [ESM] dist/errors.d.mts  4.08 kB │ gzip: 0.75 kB
100
- ℹ [ESM] dist/DocumentProtocol.d.mts  3.78 kB │ gzip: 0.78 kB
101
- ℹ [ESM] dist/PresenceManager.d.mts  3.00 kB │ gzip: 0.90 kB
102
- ℹ [ESM] dist/MimicAuthService.d.mts  2.38 kB │ gzip: 0.77 kB
103
- ℹ [ESM] dist/DocumentManager.d.mts  1.77 kB │ gzip: 0.63 kB
104
- ℹ [ESM] dist/WebSocketHandler.d.mts  1.73 kB │ gzip: 0.63 kB
105
- ℹ [ESM] dist/auth/NoAuth.d.mts  0.72 kB │ gzip: 0.40 kB
106
- ℹ [ESM] dist/storage/InMemoryDataStorage.d.mts  0.65 kB │ gzip: 0.33 kB
107
- ℹ [ESM] 52 files, total: 177.78 kB
108
- ✔ Build complete in 5499ms
95
+ ℹ [ESM] dist/MimicClusterServerEngine.d.mts.map  0.25 kB │ gzip: 0.19 kB
96
+ ℹ [ESM] dist/MimicServer.d.mts.map  0.22 kB │ gzip: 0.16 kB
97
+ ℹ [ESM] dist/Metrics.d.mts.map  0.12 kB │ gzip: 0.12 kB
98
+ ℹ [ESM] dist/index.d.mts  2.23 kB │ gzip: 0.56 kB
99
+ ℹ [ESM] dist/Protocol.d.mts  5.86 kB │ gzip: 1.34 kB
100
+ ℹ [ESM] dist/Types.d.mts  5.47 kB │ gzip: 1.54 kB
101
+ ℹ [ESM] dist/Errors.d.mts  4.10 kB │ gzip: 0.85 kB
102
+ ℹ [ESM] dist/MimicServerEngine.d.mts  3.15 kB │ gzip: 1.01 kB
103
+ ℹ [ESM] dist/MimicAuthService.d.mts  2.70 kB │ gzip: 1.04 kB
104
+ ℹ [ESM] dist/DocumentManager.d.mts  2.23 kB │ gzip: 0.76 kB
105
+ ℹ [ESM] dist/HotStorage.d.mts  1.95 kB │ gzip: 0.83 kB
106
+ ℹ [ESM] dist/ColdStorage.d.mts  1.74 kB │ gzip: 0.70 kB
107
+ ℹ [ESM] dist/PresenceManager.d.mts  1.60 kB │ gzip: 0.63 kB
108
+ ℹ [ESM] dist/Metrics.d.mts  1.37 kB │ gzip: 0.36 kB
109
+ ℹ [ESM] dist/MimicClusterServerEngine.d.mts  0.82 kB │ gzip: 0.33 kB
110
+ ℹ [ESM] dist/MimicServer.d.mts  0.74 kB │ gzip: 0.31 kB
111
+ ℹ [ESM] 54 files, total: 235.47 kB
112
+ ✔ Build complete in 6508ms
package/README.md CHANGED
@@ -0,0 +1,385 @@
1
+ # @voidhash/mimic-effect
2
+
3
+ Effect-based server engine for real-time document collaboration using the Mimic CRDT system.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pnpm add @voidhash/mimic-effect @voidhash/mimic effect @effect/platform
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```typescript
14
+ import { Effect, Layer } from "effect"
15
+ import { Primitive } from "@voidhash/mimic"
16
+ import {
17
+ MimicServerEngine,
18
+ ColdStorage,
19
+ HotStorage,
20
+ MimicAuthService,
21
+ } from "@voidhash/mimic-effect"
22
+
23
+ // Define your document schema
24
+ const TodoSchema = Primitive.Struct({
25
+ title: Primitive.String().default(""),
26
+ items: Primitive.Array(
27
+ Primitive.Struct({
28
+ text: Primitive.String(),
29
+ completed: Primitive.Boolean().default(false),
30
+ })
31
+ ).default([]),
32
+ })
33
+
34
+ // Create the engine
35
+ const Engine = MimicServerEngine.make({
36
+ schema: TodoSchema,
37
+ initial: { title: "My Todo List" },
38
+ basePath: "/mimic",
39
+ })
40
+
41
+ // Wire up with storage and auth
42
+ const MimicLive = Engine.pipe(
43
+ Layer.provide(ColdStorage.InMemory.make()),
44
+ Layer.provide(HotStorage.InMemory.make()),
45
+ Layer.provide(MimicAuthService.NoAuth.make())
46
+ )
47
+
48
+ // Use in your HTTP server
49
+ const program = Effect.gen(function* () {
50
+ const engine = yield* MimicServerEngine.Tag
51
+ // Mount engine.routes in your HTTP server
52
+ // e.g., with @effect/platform-bun or @effect/platform-node
53
+ })
54
+
55
+ program.pipe(Effect.provide(MimicLive), Effect.runPromise)
56
+ ```
57
+
58
+ ## Architecture
59
+
60
+ ```
61
+ MimicServerEngine
62
+ |
63
+ +-------------------+-------------------+
64
+ | | |
65
+ ColdStorage HotStorage MimicAuthService
66
+ (Snapshots) (WAL) (Auth/Permissions)
67
+ | |
68
+ +-------------------+
69
+ |
70
+ Document Storage
71
+ ```
72
+
73
+ ### Components
74
+
75
+ - **MimicServerEngine**: Main entry point that creates HTTP routes for WebSocket connections
76
+ - **ColdStorage**: Snapshot storage interface (for persisting document state)
77
+ - **HotStorage**: Write-ahead log storage (for transaction history)
78
+ - **MimicAuthService**: Authentication and authorization service
79
+ - **DocumentManager**: Internal service managing document lifecycle
80
+ - **PresenceManager**: Internal service managing ephemeral presence state
81
+
82
+ ## Configuration
83
+
84
+ ```typescript
85
+ const Engine = MimicServerEngine.make({
86
+ // Required: Document schema
87
+ schema: MySchema,
88
+
89
+ // Optional: Initial state for new documents
90
+ initial: { title: "Untitled" },
91
+ // Or a function for dynamic initial state:
92
+ // initial: ({ documentId }) => Effect.succeed({ title: documentId }),
93
+
94
+ // Optional: Presence schema for cursor tracking, etc.
95
+ presence: CursorPresence,
96
+
97
+ // Optional: WebSocket route base path (default: "/mimic")
98
+ basePath: "/mimic",
99
+
100
+ // Optional: Document idle timeout before GC (default: 5 minutes)
101
+ maxIdleTime: "10 minutes",
102
+
103
+ // Optional: Max transaction history for deduplication (default: 1000)
104
+ maxTransactionHistory: 500,
105
+
106
+ // Optional: Snapshot configuration
107
+ snapshot: {
108
+ interval: "5 minutes", // Time-based snapshot interval
109
+ transactionThreshold: 100, // Transaction count threshold
110
+ },
111
+
112
+ // Optional: Heartbeat configuration
113
+ heartbeatInterval: "30 seconds", // How often to ping
114
+ heartbeatTimeout: "10 seconds", // How long to wait for pong
115
+ })
116
+ ```
117
+
118
+ ## Storage Implementations
119
+
120
+ ### In-Memory (Development/Testing)
121
+
122
+ ```typescript
123
+ import { ColdStorage, HotStorage } from "@voidhash/mimic-effect"
124
+
125
+ const StorageLive = Layer.mergeAll(
126
+ ColdStorage.InMemory.make(),
127
+ HotStorage.InMemory.make()
128
+ )
129
+ ```
130
+
131
+ ### Custom Storage
132
+
133
+ ```typescript
134
+ import { ColdStorage, HotStorage } from "@voidhash/mimic-effect"
135
+
136
+ // Implement ColdStorage interface
137
+ const PostgresColdStorage = Layer.effect(
138
+ ColdStorage.Tag,
139
+ Effect.gen(function* () {
140
+ const db = yield* DatabaseService
141
+ return {
142
+ load: (documentId) => /* load from DB */,
143
+ save: (documentId, doc) => /* save to DB */,
144
+ delete: (documentId) => /* delete from DB */,
145
+ }
146
+ })
147
+ )
148
+
149
+ // Implement HotStorage interface
150
+ const RedisHotStorage = Layer.effect(
151
+ HotStorage.Tag,
152
+ Effect.gen(function* () {
153
+ const redis = yield* RedisService
154
+ return {
155
+ getEntries: (documentId, sinceVersion) => /* get from Redis */,
156
+ append: (documentId, entry) => /* append to Redis */,
157
+ truncate: (documentId, upToVersion) => /* truncate in Redis */,
158
+ }
159
+ })
160
+ )
161
+ ```
162
+
163
+ ## Authentication
164
+
165
+ ### No Authentication (Development)
166
+
167
+ ```typescript
168
+ import { MimicAuthService } from "@voidhash/mimic-effect"
169
+
170
+ const AuthLive = MimicAuthService.NoAuth.make()
171
+ // All users get "write" permission as "anonymous"
172
+ ```
173
+
174
+ ### Static Permissions
175
+
176
+ ```typescript
177
+ import { MimicAuthService } from "@voidhash/mimic-effect"
178
+
179
+ const AuthLive = MimicAuthService.Static.make({
180
+ permissions: {
181
+ "admin-token": "write",
182
+ "viewer-token": "read",
183
+ },
184
+ defaultPermission: "read", // Optional fallback
185
+ })
186
+ ```
187
+
188
+ ### Custom Authentication
189
+
190
+ ```typescript
191
+ import { MimicAuthService, AuthenticationError } from "@voidhash/mimic-effect"
192
+
193
+ const CustomAuth = MimicAuthService.make(
194
+ Effect.gen(function* () {
195
+ const jwt = yield* JwtService
196
+ const db = yield* DatabaseService
197
+
198
+ return {
199
+ authenticate: (token, documentId) =>
200
+ Effect.gen(function* () {
201
+ // Verify JWT
202
+ const payload = yield* jwt.verify(token).pipe(
203
+ Effect.mapError(() => new AuthenticationError({ reason: "Invalid token" }))
204
+ )
205
+
206
+ // Check document permissions
207
+ const permission = yield* db.getDocumentPermission(
208
+ payload.userId,
209
+ documentId
210
+ )
211
+
212
+ return {
213
+ userId: payload.userId,
214
+ permission, // "read" or "write"
215
+ }
216
+ }),
217
+ }
218
+ })
219
+ )
220
+ ```
221
+
222
+ ### Permissions
223
+
224
+ - `"read"`: Can subscribe, receive transactions, get snapshots
225
+ - `"write"`: All of the above, plus can submit transactions and set presence
226
+
227
+ ## Presence
228
+
229
+ Enable presence tracking for features like cursor position, user status, etc.
230
+
231
+ ```typescript
232
+ import { Schema } from "effect"
233
+ import { Presence } from "@voidhash/mimic"
234
+
235
+ // Define presence schema
236
+ const CursorPresence = Presence.make({
237
+ schema: Schema.Struct({
238
+ x: Schema.Number,
239
+ y: Schema.Number,
240
+ color: Schema.String,
241
+ name: Schema.optional(Schema.String),
242
+ }),
243
+ })
244
+
245
+ // Enable in engine config
246
+ const Engine = MimicServerEngine.make({
247
+ schema: DocSchema,
248
+ presence: CursorPresence,
249
+ })
250
+ ```
251
+
252
+ ## WebSocket Protocol
253
+
254
+ ### Client -> Server Messages
255
+
256
+ ```typescript
257
+ // Authentication
258
+ { type: "auth", token: "user-token" }
259
+
260
+ // Heartbeat
261
+ { type: "ping" }
262
+
263
+ // Submit transaction
264
+ { type: "submit", transaction: EncodedTransaction }
265
+
266
+ // Request snapshot
267
+ { type: "request_snapshot" }
268
+
269
+ // Set presence
270
+ { type: "presence_set", data: { x: 100, y: 200 } }
271
+
272
+ // Clear presence
273
+ { type: "presence_clear" }
274
+ ```
275
+
276
+ ### Server -> Client Messages
277
+
278
+ ```typescript
279
+ // Authentication result
280
+ { type: "auth_result", success: true, userId: "...", permission: "write" }
281
+ { type: "auth_result", success: false, error: "Invalid token" }
282
+
283
+ // Heartbeat response
284
+ { type: "pong" }
285
+
286
+ // Document snapshot
287
+ { type: "snapshot", state: {...}, version: 42 }
288
+
289
+ // Transaction broadcast
290
+ { type: "transaction", transaction: EncodedTransaction, version: 43 }
291
+
292
+ // Transaction error
293
+ { type: "error", transactionId: "tx-123", reason: "..." }
294
+
295
+ // Presence snapshot (after auth)
296
+ { type: "presence_snapshot", selfId: "conn-123", presences: {...} }
297
+
298
+ // Presence update
299
+ { type: "presence_update", entries: { "conn-456": { data: {...}, userId: "..." } } }
300
+
301
+ // Presence removal
302
+ { type: "presence_remove", connectionId: "conn-456" }
303
+ ```
304
+
305
+ ## Metrics
306
+
307
+ Built-in observability metrics using Effect's Metric API:
308
+
309
+ ```typescript
310
+ import { MimicMetrics } from "@voidhash/mimic-effect"
311
+
312
+ // Connection metrics
313
+ MimicMetrics.connectionsActive // Gauge: Current connections
314
+ MimicMetrics.connectionsTotal // Counter: Total connections
315
+ MimicMetrics.connectionsDuration // Histogram: Connection duration (ms)
316
+ MimicMetrics.connectionsErrors // Counter: Connection errors
317
+
318
+ // Document metrics
319
+ MimicMetrics.documentsActive // Gauge: Documents in memory
320
+ MimicMetrics.documentsCreated // Counter: New documents
321
+ MimicMetrics.documentsRestored // Counter: Restored from storage
322
+ MimicMetrics.documentsEvicted // Counter: Evicted (idle GC)
323
+
324
+ // Transaction metrics
325
+ MimicMetrics.transactionsProcessed // Counter: Successful transactions
326
+ MimicMetrics.transactionsRejected // Counter: Rejected transactions
327
+ MimicMetrics.transactionsLatency // Histogram: Processing time (ms)
328
+
329
+ // Storage metrics
330
+ MimicMetrics.storageSnapshots // Counter: Snapshots saved
331
+ MimicMetrics.storageSnapshotLatency // Histogram: Snapshot save time (ms)
332
+ MimicMetrics.storageWalAppends // Counter: WAL entries written
333
+
334
+ // Presence metrics
335
+ MimicMetrics.presenceUpdates // Counter: Presence updates
336
+ MimicMetrics.presenceActive // Gauge: Active presences
337
+ ```
338
+
339
+ ## Integration Examples
340
+
341
+ ### With @effect/platform-bun
342
+
343
+ ```typescript
344
+ import { BunHttpServer, BunRuntime } from "@effect/platform-bun"
345
+ import { HttpRouter, HttpServer } from "@effect/platform"
346
+
347
+ const server = HttpServer.serve(engine.routes).pipe(
348
+ Layer.provide(MimicLive),
349
+ Layer.provide(BunHttpServer.layer({ port: 3000 }))
350
+ )
351
+
352
+ BunRuntime.runMain(Layer.launch(server))
353
+ ```
354
+
355
+ ### With @effect/platform-node
356
+
357
+ ```typescript
358
+ import { NodeHttpServer, NodeRuntime } from "@effect/platform-node"
359
+ import { HttpRouter, HttpServer } from "@effect/platform"
360
+
361
+ const server = HttpServer.serve(engine.routes).pipe(
362
+ Layer.provide(MimicLive),
363
+ Layer.provide(NodeHttpServer.layer({ port: 3000 }))
364
+ )
365
+
366
+ NodeRuntime.runMain(Layer.launch(server))
367
+ ```
368
+
369
+ ## Error Types
370
+
371
+ ```typescript
372
+ import {
373
+ ColdStorageError,
374
+ HotStorageError,
375
+ AuthenticationError,
376
+ AuthorizationError,
377
+ MissingDocumentIdError,
378
+ MessageParseError,
379
+ TransactionRejectedError,
380
+ } from "@voidhash/mimic-effect"
381
+ ```
382
+
383
+ ## License
384
+
385
+ MIT