eimer 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +130 -0
  3. package/dist/cjs/eimer/Eimer.d.ts +102 -0
  4. package/dist/cjs/eimer/Eimer.d.ts.map +1 -0
  5. package/dist/cjs/eimer/Eimer.js +175 -0
  6. package/dist/cjs/eimer/Eimer.js.map +1 -0
  7. package/dist/cjs/eimer/EimerDependencies.d.ts +17 -0
  8. package/dist/cjs/eimer/EimerDependencies.d.ts.map +1 -0
  9. package/dist/cjs/eimer/EimerDependencies.js +4 -0
  10. package/dist/cjs/eimer/EimerDependencies.js.map +1 -0
  11. package/dist/cjs/eimer/EimerMessage.d.ts +31 -0
  12. package/dist/cjs/eimer/EimerMessage.d.ts.map +1 -0
  13. package/dist/cjs/eimer/EimerMessage.js +42 -0
  14. package/dist/cjs/eimer/EimerMessage.js.map +1 -0
  15. package/dist/cjs/eimer/EimerOptions.d.ts +12 -0
  16. package/dist/cjs/eimer/EimerOptions.d.ts.map +1 -0
  17. package/dist/cjs/eimer/EimerOptions.js +4 -0
  18. package/dist/cjs/eimer/EimerOptions.js.map +1 -0
  19. package/dist/cjs/eimer/IdGenerator.d.ts +12 -0
  20. package/dist/cjs/eimer/IdGenerator.d.ts.map +1 -0
  21. package/dist/cjs/eimer/IdGenerator.js +3 -0
  22. package/dist/cjs/eimer/IdGenerator.js.map +1 -0
  23. package/dist/cjs/eimer/LogLevel.d.ts +16 -0
  24. package/dist/cjs/eimer/LogLevel.d.ts.map +1 -0
  25. package/dist/cjs/eimer/LogLevel.js +21 -0
  26. package/dist/cjs/eimer/LogLevel.js.map +1 -0
  27. package/dist/cjs/eimer/Logger.d.ts +70 -0
  28. package/dist/cjs/eimer/Logger.d.ts.map +1 -0
  29. package/dist/cjs/eimer/Logger.js +3 -0
  30. package/dist/cjs/eimer/Logger.js.map +1 -0
  31. package/dist/cjs/eimer/MagicMessageMarker.d.ts +18 -0
  32. package/dist/cjs/eimer/MagicMessageMarker.d.ts.map +1 -0
  33. package/dist/cjs/eimer/MagicMessageMarker.js +3 -0
  34. package/dist/cjs/eimer/MagicMessageMarker.js.map +1 -0
  35. package/dist/cjs/eimer/MessageBus.d.ts +65 -0
  36. package/dist/cjs/eimer/MessageBus.d.ts.map +1 -0
  37. package/dist/cjs/eimer/MessageBus.js +3 -0
  38. package/dist/cjs/eimer/MessageBus.js.map +1 -0
  39. package/dist/cjs/eimer/MessageHandler.d.ts +14 -0
  40. package/dist/cjs/eimer/MessageHandler.d.ts.map +1 -0
  41. package/dist/cjs/eimer/MessageHandler.js +3 -0
  42. package/dist/cjs/eimer/MessageHandler.js.map +1 -0
  43. package/dist/cjs/eimer/MessageId.d.ts +8 -0
  44. package/dist/cjs/eimer/MessageId.d.ts.map +1 -0
  45. package/dist/cjs/eimer/MessageId.js +3 -0
  46. package/dist/cjs/eimer/MessageId.js.map +1 -0
  47. package/dist/cjs/eimer/NodeId.d.ts +5 -0
  48. package/dist/cjs/eimer/NodeId.d.ts.map +1 -0
  49. package/dist/cjs/eimer/NodeId.js +3 -0
  50. package/dist/cjs/eimer/NodeId.js.map +1 -0
  51. package/dist/cjs/eimer/PayloadHandler.d.ts +7 -0
  52. package/dist/cjs/eimer/PayloadHandler.d.ts.map +1 -0
  53. package/dist/cjs/eimer/PayloadHandler.js +3 -0
  54. package/dist/cjs/eimer/PayloadHandler.js.map +1 -0
  55. package/dist/cjs/eimer/RpcHandler.d.ts +6 -0
  56. package/dist/cjs/eimer/RpcHandler.d.ts.map +1 -0
  57. package/dist/cjs/eimer/RpcHandler.js +3 -0
  58. package/dist/cjs/eimer/RpcHandler.js.map +1 -0
  59. package/dist/cjs/eimer/RpcManager.d.ts +48 -0
  60. package/dist/cjs/eimer/RpcManager.d.ts.map +1 -0
  61. package/dist/cjs/eimer/RpcManager.js +3 -0
  62. package/dist/cjs/eimer/RpcManager.js.map +1 -0
  63. package/dist/cjs/eimer/RpcMethod.d.ts +5 -0
  64. package/dist/cjs/eimer/RpcMethod.d.ts.map +1 -0
  65. package/dist/cjs/eimer/RpcMethod.js +3 -0
  66. package/dist/cjs/eimer/RpcMethod.js.map +1 -0
  67. package/dist/cjs/eimer/StructuredCloneable.d.ts +21 -0
  68. package/dist/cjs/eimer/StructuredCloneable.d.ts.map +1 -0
  69. package/dist/cjs/eimer/StructuredCloneable.js +3 -0
  70. package/dist/cjs/eimer/StructuredCloneable.js.map +1 -0
  71. package/dist/cjs/eimer/Topic.d.ts +5 -0
  72. package/dist/cjs/eimer/Topic.d.ts.map +1 -0
  73. package/dist/cjs/eimer/Topic.js +3 -0
  74. package/dist/cjs/eimer/Topic.js.map +1 -0
  75. package/dist/cjs/eimer/Transport.d.ts +36 -0
  76. package/dist/cjs/eimer/Transport.d.ts.map +1 -0
  77. package/dist/cjs/eimer/Transport.js +3 -0
  78. package/dist/cjs/eimer/Transport.js.map +1 -0
  79. package/dist/cjs/eimer/index.d.ts +20 -0
  80. package/dist/cjs/eimer/index.d.ts.map +1 -0
  81. package/dist/cjs/eimer/index.js +36 -0
  82. package/dist/cjs/eimer/index.js.map +1 -0
  83. package/dist/cjs/id-generator/EimerIdGenerator.d.ts +13 -0
  84. package/dist/cjs/id-generator/EimerIdGenerator.d.ts.map +1 -0
  85. package/dist/cjs/id-generator/EimerIdGenerator.js +17 -0
  86. package/dist/cjs/id-generator/EimerIdGenerator.js.map +1 -0
  87. package/dist/cjs/id-generator/index.d.ts +2 -0
  88. package/dist/cjs/id-generator/index.d.ts.map +1 -0
  89. package/dist/cjs/id-generator/index.js +18 -0
  90. package/dist/cjs/id-generator/index.js.map +1 -0
  91. package/dist/cjs/index.d.ts +7 -0
  92. package/dist/cjs/index.d.ts.map +1 -0
  93. package/dist/cjs/index.js +23 -0
  94. package/dist/cjs/index.js.map +1 -0
  95. package/dist/cjs/logger/EimerLogger.d.ts +28 -0
  96. package/dist/cjs/logger/EimerLogger.d.ts.map +1 -0
  97. package/dist/cjs/logger/EimerLogger.js +68 -0
  98. package/dist/cjs/logger/EimerLogger.js.map +1 -0
  99. package/dist/cjs/logger/index.d.ts +2 -0
  100. package/dist/cjs/logger/index.d.ts.map +1 -0
  101. package/dist/cjs/logger/index.js +18 -0
  102. package/dist/cjs/logger/index.js.map +1 -0
  103. package/dist/cjs/message-bus/EimerMessageBus.d.ts +30 -0
  104. package/dist/cjs/message-bus/EimerMessageBus.d.ts.map +1 -0
  105. package/dist/cjs/message-bus/EimerMessageBus.js +120 -0
  106. package/dist/cjs/message-bus/EimerMessageBus.js.map +1 -0
  107. package/dist/cjs/message-bus/index.d.ts +2 -0
  108. package/dist/cjs/message-bus/index.d.ts.map +1 -0
  109. package/dist/cjs/message-bus/index.js +18 -0
  110. package/dist/cjs/message-bus/index.js.map +1 -0
  111. package/dist/cjs/rpc/EimerRpcManager.d.ts +76 -0
  112. package/dist/cjs/rpc/EimerRpcManager.d.ts.map +1 -0
  113. package/dist/cjs/rpc/EimerRpcManager.js +162 -0
  114. package/dist/cjs/rpc/EimerRpcManager.js.map +1 -0
  115. package/dist/cjs/rpc/EimerRpcRequestMessage.d.ts +28 -0
  116. package/dist/cjs/rpc/EimerRpcRequestMessage.d.ts.map +1 -0
  117. package/dist/cjs/rpc/EimerRpcRequestMessage.js +38 -0
  118. package/dist/cjs/rpc/EimerRpcRequestMessage.js.map +1 -0
  119. package/dist/cjs/rpc/EimerRpcRequestPayload.d.ts +38 -0
  120. package/dist/cjs/rpc/EimerRpcRequestPayload.d.ts.map +1 -0
  121. package/dist/cjs/rpc/EimerRpcRequestPayload.js +33 -0
  122. package/dist/cjs/rpc/EimerRpcRequestPayload.js.map +1 -0
  123. package/dist/cjs/rpc/EimerRpcResponseMessage.d.ts +30 -0
  124. package/dist/cjs/rpc/EimerRpcResponseMessage.d.ts.map +1 -0
  125. package/dist/cjs/rpc/EimerRpcResponseMessage.js +40 -0
  126. package/dist/cjs/rpc/EimerRpcResponseMessage.js.map +1 -0
  127. package/dist/cjs/rpc/EimerRpcResponsePayload.d.ts +30 -0
  128. package/dist/cjs/rpc/EimerRpcResponsePayload.d.ts.map +1 -0
  129. package/dist/cjs/rpc/EimerRpcResponsePayload.js +32 -0
  130. package/dist/cjs/rpc/EimerRpcResponsePayload.js.map +1 -0
  131. package/dist/cjs/rpc/RpcRequestId.d.ts +6 -0
  132. package/dist/cjs/rpc/RpcRequestId.d.ts.map +1 -0
  133. package/dist/cjs/rpc/RpcRequestId.js +3 -0
  134. package/dist/cjs/rpc/RpcRequestId.js.map +1 -0
  135. package/dist/cjs/rpc/index.d.ts +7 -0
  136. package/dist/cjs/rpc/index.d.ts.map +1 -0
  137. package/dist/cjs/rpc/index.js +23 -0
  138. package/dist/cjs/rpc/index.js.map +1 -0
  139. package/dist/cjs/transports/EimerBrowserTransport.d.ts +39 -0
  140. package/dist/cjs/transports/EimerBrowserTransport.d.ts.map +1 -0
  141. package/dist/cjs/transports/EimerBrowserTransport.js +74 -0
  142. package/dist/cjs/transports/EimerBrowserTransport.js.map +1 -0
  143. package/dist/cjs/transports/EimerIpcMainTransport.d.ts +38 -0
  144. package/dist/cjs/transports/EimerIpcMainTransport.d.ts.map +1 -0
  145. package/dist/cjs/transports/EimerIpcMainTransport.js +65 -0
  146. package/dist/cjs/transports/EimerIpcMainTransport.js.map +1 -0
  147. package/dist/cjs/transports/EimerIpcRendererTransport.d.ts +43 -0
  148. package/dist/cjs/transports/EimerIpcRendererTransport.d.ts.map +1 -0
  149. package/dist/cjs/transports/EimerIpcRendererTransport.js +64 -0
  150. package/dist/cjs/transports/EimerIpcRendererTransport.js.map +1 -0
  151. package/dist/cjs/transports/EimerMessagePortTransport.d.ts +40 -0
  152. package/dist/cjs/transports/EimerMessagePortTransport.d.ts.map +1 -0
  153. package/dist/cjs/transports/EimerMessagePortTransport.js +56 -0
  154. package/dist/cjs/transports/EimerMessagePortTransport.js.map +1 -0
  155. package/dist/cjs/transports/EimerMockTransport.d.ts +35 -0
  156. package/dist/cjs/transports/EimerMockTransport.d.ts.map +1 -0
  157. package/dist/cjs/transports/EimerMockTransport.js +60 -0
  158. package/dist/cjs/transports/EimerMockTransport.js.map +1 -0
  159. package/dist/cjs/transports/EimerWorkerThreadTransport.d.ts +15 -0
  160. package/dist/cjs/transports/EimerWorkerThreadTransport.d.ts.map +1 -0
  161. package/dist/cjs/transports/EimerWorkerThreadTransport.js +16 -0
  162. package/dist/cjs/transports/EimerWorkerThreadTransport.js.map +1 -0
  163. package/dist/cjs/transports/index.d.ts +7 -0
  164. package/dist/cjs/transports/index.d.ts.map +1 -0
  165. package/dist/cjs/transports/index.js +23 -0
  166. package/dist/cjs/transports/index.js.map +1 -0
  167. package/dist/esm/eimer/Eimer.js +171 -0
  168. package/dist/esm/eimer/Eimer.js.map +1 -0
  169. package/dist/esm/eimer/EimerDependencies.js +3 -0
  170. package/dist/esm/eimer/EimerDependencies.js.map +1 -0
  171. package/dist/esm/eimer/EimerMessage.js +38 -0
  172. package/dist/esm/eimer/EimerMessage.js.map +1 -0
  173. package/dist/esm/eimer/EimerOptions.js +3 -0
  174. package/dist/esm/eimer/EimerOptions.js.map +1 -0
  175. package/dist/esm/eimer/IdGenerator.js +2 -0
  176. package/dist/esm/eimer/IdGenerator.js.map +1 -0
  177. package/dist/esm/eimer/LogLevel.js +18 -0
  178. package/dist/esm/eimer/LogLevel.js.map +1 -0
  179. package/dist/esm/eimer/Logger.js +2 -0
  180. package/dist/esm/eimer/Logger.js.map +1 -0
  181. package/dist/esm/eimer/MagicMessageMarker.js +2 -0
  182. package/dist/esm/eimer/MagicMessageMarker.js.map +1 -0
  183. package/dist/esm/eimer/MessageBus.js +2 -0
  184. package/dist/esm/eimer/MessageBus.js.map +1 -0
  185. package/dist/esm/eimer/MessageHandler.js +2 -0
  186. package/dist/esm/eimer/MessageHandler.js.map +1 -0
  187. package/dist/esm/eimer/MessageId.js +2 -0
  188. package/dist/esm/eimer/MessageId.js.map +1 -0
  189. package/dist/esm/eimer/NodeId.js +2 -0
  190. package/dist/esm/eimer/NodeId.js.map +1 -0
  191. package/dist/esm/eimer/PayloadHandler.js +2 -0
  192. package/dist/esm/eimer/PayloadHandler.js.map +1 -0
  193. package/dist/esm/eimer/RpcHandler.js +2 -0
  194. package/dist/esm/eimer/RpcHandler.js.map +1 -0
  195. package/dist/esm/eimer/RpcManager.js +2 -0
  196. package/dist/esm/eimer/RpcManager.js.map +1 -0
  197. package/dist/esm/eimer/RpcMethod.js +2 -0
  198. package/dist/esm/eimer/RpcMethod.js.map +1 -0
  199. package/dist/esm/eimer/StructuredCloneable.js +2 -0
  200. package/dist/esm/eimer/StructuredCloneable.js.map +1 -0
  201. package/dist/esm/eimer/Topic.js +2 -0
  202. package/dist/esm/eimer/Topic.js.map +1 -0
  203. package/dist/esm/eimer/Transport.js +2 -0
  204. package/dist/esm/eimer/Transport.js.map +1 -0
  205. package/dist/esm/eimer/index.js +20 -0
  206. package/dist/esm/eimer/index.js.map +1 -0
  207. package/dist/esm/id-generator/EimerIdGenerator.js +13 -0
  208. package/dist/esm/id-generator/EimerIdGenerator.js.map +1 -0
  209. package/dist/esm/id-generator/index.js +2 -0
  210. package/dist/esm/id-generator/index.js.map +1 -0
  211. package/dist/esm/index.js +7 -0
  212. package/dist/esm/index.js.map +1 -0
  213. package/dist/esm/logger/EimerLogger.js +64 -0
  214. package/dist/esm/logger/EimerLogger.js.map +1 -0
  215. package/dist/esm/logger/index.js +2 -0
  216. package/dist/esm/logger/index.js.map +1 -0
  217. package/dist/esm/message-bus/EimerMessageBus.js +116 -0
  218. package/dist/esm/message-bus/EimerMessageBus.js.map +1 -0
  219. package/dist/esm/message-bus/index.js +2 -0
  220. package/dist/esm/message-bus/index.js.map +1 -0
  221. package/dist/esm/rpc/EimerRpcManager.js +158 -0
  222. package/dist/esm/rpc/EimerRpcManager.js.map +1 -0
  223. package/dist/esm/rpc/EimerRpcRequestMessage.js +34 -0
  224. package/dist/esm/rpc/EimerRpcRequestMessage.js.map +1 -0
  225. package/dist/esm/rpc/EimerRpcRequestPayload.js +29 -0
  226. package/dist/esm/rpc/EimerRpcRequestPayload.js.map +1 -0
  227. package/dist/esm/rpc/EimerRpcResponseMessage.js +36 -0
  228. package/dist/esm/rpc/EimerRpcResponseMessage.js.map +1 -0
  229. package/dist/esm/rpc/EimerRpcResponsePayload.js +28 -0
  230. package/dist/esm/rpc/EimerRpcResponsePayload.js.map +1 -0
  231. package/dist/esm/rpc/RpcRequestId.js +2 -0
  232. package/dist/esm/rpc/RpcRequestId.js.map +1 -0
  233. package/dist/esm/rpc/index.js +7 -0
  234. package/dist/esm/rpc/index.js.map +1 -0
  235. package/dist/esm/transports/EimerBrowserTransport.js +70 -0
  236. package/dist/esm/transports/EimerBrowserTransport.js.map +1 -0
  237. package/dist/esm/transports/EimerIpcMainTransport.js +61 -0
  238. package/dist/esm/transports/EimerIpcMainTransport.js.map +1 -0
  239. package/dist/esm/transports/EimerIpcRendererTransport.js +60 -0
  240. package/dist/esm/transports/EimerIpcRendererTransport.js.map +1 -0
  241. package/dist/esm/transports/EimerMessagePortTransport.js +52 -0
  242. package/dist/esm/transports/EimerMessagePortTransport.js.map +1 -0
  243. package/dist/esm/transports/EimerMockTransport.js +56 -0
  244. package/dist/esm/transports/EimerMockTransport.js.map +1 -0
  245. package/dist/esm/transports/EimerWorkerThreadTransport.js +12 -0
  246. package/dist/esm/transports/EimerWorkerThreadTransport.js.map +1 -0
  247. package/dist/esm/transports/index.js +7 -0
  248. package/dist/esm/transports/index.js.map +1 -0
  249. package/package.json +57 -0
@@ -0,0 +1,43 @@
1
+ import { IpcRenderer } from 'electron';
2
+ import { EimerMessage } from '../eimer/EimerMessage';
3
+ import type { EimerDependencies } from '../eimer/EimerDependencies';
4
+ import type { EimerOptions } from '../eimer/EimerOptions';
5
+ import type { MessageHandler } from '../eimer/MessageHandler';
6
+ import type { NodeId } from '../eimer/NodeId';
7
+ import type { Transport } from '../eimer/Transport';
8
+ export interface EimerIpcRendererTransportOptions extends Pick<EimerOptions, "logLevel" | "logModuleName"> {
9
+ }
10
+ export interface EimerIpcRendererTransportDependencies extends Pick<EimerDependencies, "logger"> {
11
+ }
12
+ /**
13
+ * Eimer IpcRenderer Transport
14
+ *
15
+ * A `Transport` that can be used inside the preload script of a BrowserWindow of
16
+ * an electron.js application. It uses `ipcRenderer` to communicate with the main
17
+ * process of the application.
18
+ *
19
+ * NOTE:
20
+ * DO NOT use `contextBridge.exposeInMainWorld` to expose this transport or
21
+ * the Eimer node it is connected to in the "main world" - this would potentially
22
+ * make `ipcRenderer` accessible in the "main world", which would bypass electron's
23
+ * context isolation and pose a security issue.
24
+ * Instead, use `EimerBrowserTransport`s to connect the "main world" to the preload script.
25
+ */
26
+ export declare class EimerIpcRendererTransport implements Transport {
27
+ private nodeId?;
28
+ private readonly ipcRenderer;
29
+ private incomingMessageHandler?;
30
+ private logger;
31
+ /**
32
+ *
33
+ * @param ipcRenderer instance of electrons ipcRenderer
34
+ * @param options
35
+ * @param dependencies
36
+ */
37
+ constructor(ipcRenderer: IpcRenderer, options?: EimerIpcRendererTransportOptions, dependencies?: EimerIpcRendererTransportDependencies);
38
+ initialize(nodeId: NodeId, incomingMessageHandler: MessageHandler): void;
39
+ send(message: EimerMessage): void;
40
+ shutdown(): void;
41
+ private handleMessage;
42
+ }
43
+ //# sourceMappingURL=EimerIpcRendererTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerIpcRendererTransport.d.ts","sourceRoot":"","sources":["../../../src/transports/EimerIpcRendererTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,gCAAiC,SAAQ,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,eAAe,CAAC;CAEzG;AAED,MAAM,WAAW,qCAAsC,SAAQ,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC;CAE/F;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,yBAA0B,YAAW,SAAS;IACvD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,sBAAsB,CAAC,CAAiB;IAChD,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;;OAKG;gBACS,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,gCAAgC,EAAE,YAAY,CAAC,EAAE,qCAAqC;IAKtI,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,GAAG,IAAI;IASxE,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IASjC,QAAQ,IAAI,IAAI;IAIhB,OAAO,CAAC,aAAa;CAgBxB"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EimerIpcRendererTransport = void 0;
4
+ const EimerMessage_1 = require("../eimer/EimerMessage");
5
+ const LogLevel_1 = require("../eimer/LogLevel");
6
+ const EimerLogger_1 = require("../logger/EimerLogger");
7
+ /**
8
+ * Eimer IpcRenderer Transport
9
+ *
10
+ * A `Transport` that can be used inside the preload script of a BrowserWindow of
11
+ * an electron.js application. It uses `ipcRenderer` to communicate with the main
12
+ * process of the application.
13
+ *
14
+ * NOTE:
15
+ * DO NOT use `contextBridge.exposeInMainWorld` to expose this transport or
16
+ * the Eimer node it is connected to in the "main world" - this would potentially
17
+ * make `ipcRenderer` accessible in the "main world", which would bypass electron's
18
+ * context isolation and pose a security issue.
19
+ * Instead, use `EimerBrowserTransport`s to connect the "main world" to the preload script.
20
+ */
21
+ class EimerIpcRendererTransport {
22
+ /**
23
+ *
24
+ * @param ipcRenderer instance of electrons ipcRenderer
25
+ * @param options
26
+ * @param dependencies
27
+ */
28
+ constructor(ipcRenderer, options, dependencies) {
29
+ this.logger = dependencies?.logger ?? new EimerLogger_1.EimerLogger(options?.logLevel ?? LogLevel_1.LogLevel.DEBUG, options?.logModuleName ?? 'RendererTransport');
30
+ this.ipcRenderer = ipcRenderer;
31
+ }
32
+ initialize(nodeId, incomingMessageHandler) {
33
+ this.nodeId = nodeId;
34
+ this.logger.setNodeId?.(this.nodeId);
35
+ this.incomingMessageHandler = incomingMessageHandler;
36
+ // Listen for messages from main
37
+ this.ipcRenderer.on('eimer-message', this.handleMessage.bind(this));
38
+ }
39
+ send(message) {
40
+ this.logger.debug('Sending message', {
41
+ topic: message.topic,
42
+ payload: message.payload
43
+ });
44
+ this.ipcRenderer.send('eimer-message', message);
45
+ }
46
+ shutdown() {
47
+ this.ipcRenderer.off('eimer-message', this.handleMessage.bind(this));
48
+ }
49
+ handleMessage(_event, ...args) {
50
+ const message = args[0];
51
+ if (!EimerMessage_1.EimerMessage.isEimerMessage(message)) {
52
+ // ignore message events that may originate from other libraries
53
+ return;
54
+ }
55
+ this.logger.debug('Received message', {
56
+ from: message.from,
57
+ topic: message.topic,
58
+ payload: message.payload
59
+ });
60
+ this.incomingMessageHandler?.(message);
61
+ }
62
+ }
63
+ exports.EimerIpcRendererTransport = EimerIpcRendererTransport;
64
+ //# sourceMappingURL=EimerIpcRendererTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerIpcRendererTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerIpcRendererTransport.ts"],"names":[],"mappings":";;;AAEA,wDAAqD;AACrD,gDAA6C;AAC7C,uDAAoD;AAiBpD;;;;;;;;;;;;;GAaG;AACH,MAAa,yBAAyB;IAMlC;;;;;OAKG;IACH,YAAY,WAAwB,EAAE,OAA0C,EAAE,YAAoD;QAClI,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,MAAM,IAAI,IAAI,yBAAW,CAAC,OAAO,EAAE,QAAQ,IAAI,mBAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,IAAI,mBAAmB,CAAC,CAAC;QAC1I,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,sBAAsC;QAC7D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QAErD,gCAAgC;QAChC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,CAAC,OAAqB;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,CAAC;IAEO,aAAa,CAAC,MAAwB,EAAE,GAAG,IAAW;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,CAAC,2BAAY,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,gEAAgE;YAChE,OAAO;QACX,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;YAClC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,EAAE,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;CACJ;AAvDD,8DAuDC"}
@@ -0,0 +1,40 @@
1
+ import { EimerMessage } from '../eimer/EimerMessage';
2
+ import type { EimerDependencies } from '../eimer/EimerDependencies';
3
+ import type { EimerOptions } from '../eimer/EimerOptions';
4
+ import type { MessageHandler } from '../eimer/MessageHandler';
5
+ import type { NodeId } from '../eimer/NodeId';
6
+ import type { Transport } from '../eimer/Transport';
7
+ export interface MessagePort {
8
+ postMessage(message: any): void;
9
+ on(event: "message", handler: (message: any) => void): this;
10
+ off?(event: "message", handler: (value: any) => void): this;
11
+ }
12
+ export interface EimerMessagePortTransportOptions extends Pick<EimerOptions, "logLevel" | "logModuleName"> {
13
+ }
14
+ export interface EimerMessagePortTransportDependencies extends Pick<EimerDependencies, "logger"> {
15
+ }
16
+ /**
17
+ * Eimer MessagePort Transport
18
+ *
19
+ * A `Transport` can sends messages across anything that looks like a `MessagePort`.
20
+ * This includes (but is not limited to) actual MessagePorts of the "Channel Messaging API".
21
+ * It also serves as the base for more specific Transports that use MessagePort-like APIs.
22
+ */
23
+ export declare class EimerMessagePortTransport implements Transport {
24
+ private nodeId?;
25
+ private readonly messagePort;
26
+ private incomingMessageHandler?;
27
+ private logger;
28
+ /**
29
+ *
30
+ * @param messagePort instance of a `MessagePort`-like API
31
+ * @param options
32
+ * @param dependencies
33
+ */
34
+ constructor(messagePort: MessagePort, options?: EimerMessagePortTransportOptions, dependencies?: EimerMessagePortTransportDependencies);
35
+ initialize(nodeId: NodeId, incomingMessageHandler: MessageHandler): void;
36
+ send(message: EimerMessage): void;
37
+ shutdown(): void;
38
+ private handleMessage;
39
+ }
40
+ //# sourceMappingURL=EimerMessagePortTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerMessagePortTransport.d.ts","sourceRoot":"","sources":["../../../src/transports/EimerMessagePortTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,WAAW;IACxB,WAAW,CAAC,OAAO,EAAE,GAAG,GAAI,IAAI,CAAC;IACjC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5D,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;CAC/D;AAED,MAAM,WAAW,gCAAiC,SAAQ,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,eAAe,CAAC;CAEzG;AAED,MAAM,WAAW,qCAAsC,SAAQ,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC;CAE/F;AAED;;;;;;GAMG;AACH,qBAAa,yBAA0B,YAAW,SAAS;IACvD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,sBAAsB,CAAC,CAAiB;IAChD,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;;OAKG;gBACS,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,gCAAgC,EAAE,YAAY,CAAC,EAAE,qCAAqC;IAKtI,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,GAAG,IAAI;IASxE,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IASjC,QAAQ,IAAI,IAAI;IAIhB,OAAO,CAAC,aAAa;CAaxB"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EimerMessagePortTransport = void 0;
4
+ const EimerMessage_1 = require("../eimer/EimerMessage");
5
+ const LogLevel_1 = require("../eimer/LogLevel");
6
+ const EimerLogger_1 = require("../logger/EimerLogger");
7
+ /**
8
+ * Eimer MessagePort Transport
9
+ *
10
+ * A `Transport` can sends messages across anything that looks like a `MessagePort`.
11
+ * This includes (but is not limited to) actual MessagePorts of the "Channel Messaging API".
12
+ * It also serves as the base for more specific Transports that use MessagePort-like APIs.
13
+ */
14
+ class EimerMessagePortTransport {
15
+ /**
16
+ *
17
+ * @param messagePort instance of a `MessagePort`-like API
18
+ * @param options
19
+ * @param dependencies
20
+ */
21
+ constructor(messagePort, options, dependencies) {
22
+ this.logger = dependencies?.logger ?? new EimerLogger_1.EimerLogger(options?.logLevel ?? LogLevel_1.LogLevel.DEBUG, options?.logModuleName ?? 'MessagePortTransport');
23
+ this.messagePort = messagePort;
24
+ }
25
+ initialize(nodeId, incomingMessageHandler) {
26
+ this.nodeId = nodeId;
27
+ this.logger.setNodeId?.(this.nodeId);
28
+ this.incomingMessageHandler = incomingMessageHandler;
29
+ // Listen for messages from port
30
+ this.messagePort.on('message', this.handleMessage.bind(this));
31
+ }
32
+ send(message) {
33
+ this.logger.debug('Sending message', {
34
+ topic: message.topic,
35
+ payload: message.payload
36
+ });
37
+ this.messagePort.postMessage(message);
38
+ }
39
+ shutdown() {
40
+ this.messagePort.off?.('message', this.handleMessage.bind(this));
41
+ }
42
+ handleMessage(message) {
43
+ if (!EimerMessage_1.EimerMessage.isEimerMessage(message)) {
44
+ // ignore non-eimer message events from message port
45
+ return;
46
+ }
47
+ this.logger.debug('Received message', {
48
+ from: message.from,
49
+ topic: message.topic,
50
+ payload: message.payload
51
+ });
52
+ this.incomingMessageHandler?.(message);
53
+ }
54
+ }
55
+ exports.EimerMessagePortTransport = EimerMessagePortTransport;
56
+ //# sourceMappingURL=EimerMessagePortTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerMessagePortTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerMessagePortTransport.ts"],"names":[],"mappings":";;;AAAA,wDAAqD;AACrD,gDAA6C;AAC7C,uDAAoD;AAuBpD;;;;;;GAMG;AACH,MAAa,yBAAyB;IAMlC;;;;;OAKG;IACH,YAAY,WAAwB,EAAE,OAA0C,EAAE,YAAoD;QAClI,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,MAAM,IAAI,IAAI,yBAAW,CAAC,OAAO,EAAE,QAAQ,IAAI,mBAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,IAAI,sBAAsB,CAAC,CAAC;QAC7I,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,sBAAsC;QAC7D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QAErD,gCAAgC;QAChC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,CAAC,OAAqB;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;IAEO,aAAa,CAAC,OAAY;QAC9B,IAAI,CAAC,2BAAY,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,oDAAoD;YACpD,OAAO;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;YAClC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,EAAE,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;CACJ;AApDD,8DAoDC"}
@@ -0,0 +1,35 @@
1
+ import { EimerMessage } from 'src/eimer/EimerMessage';
2
+ import type { EimerDependencies } from '../eimer/EimerDependencies';
3
+ import type { EimerOptions } from '../eimer/EimerOptions';
4
+ import type { MessageHandler } from '../eimer/MessageHandler';
5
+ import type { NodeId } from '../eimer/NodeId';
6
+ import type { Transport } from '../eimer/Transport';
7
+ export interface EimerMockTransportOptions extends Pick<EimerOptions, "logLevel" | "logModuleName"> {
8
+ latency?: number;
9
+ }
10
+ export interface EimerMockTransportDependencies extends Pick<EimerDependencies, "logger"> {
11
+ }
12
+ /**
13
+ * Eimer Mock Transport
14
+ *
15
+ * A `Transport` that does not depend on any APIs but instead simulates message
16
+ * transportation inside the current process.
17
+ *
18
+ * It can be used for testing.
19
+ */
20
+ export declare class EimerMockTransport implements Transport {
21
+ private static connections;
22
+ private incomingMessageHandler?;
23
+ private nodeId?;
24
+ private readonly logger;
25
+ private readonly latency;
26
+ private peers;
27
+ constructor(options?: EimerMockTransportOptions, dependencies?: EimerMockTransportDependencies);
28
+ initialize(nodeId: NodeId, incomingMessageHandler: MessageHandler): void;
29
+ send(message: EimerMessage): void;
30
+ shutdown(): void;
31
+ static reset(): void;
32
+ connectTo(peerNodeId: NodeId): void;
33
+ handlePeerMessage(message: EimerMessage): void;
34
+ }
35
+ //# sourceMappingURL=EimerMockTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerMockTransport.d.ts","sourceRoot":"","sources":["../../../src/transports/EimerMockTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,eAAe,CAAC;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,8BAA+B,SAAQ,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC;CAExF;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAChD,OAAO,CAAC,MAAM,CAAC,WAAW,CAA8C;IAExE,OAAO,CAAC,sBAAsB,CAAC,CAAiB;IAChD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,KAAK,CAA0B;gBAE3B,OAAO,CAAC,EAAE,yBAAyB,EAAE,YAAY,CAAC,EAAE,8BAA8B;IAK9F,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,GAAG,IAAI;IAQxE,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAajC,QAAQ,IAAI,IAAI;IAMhB,MAAM,CAAC,KAAK,IAAI,IAAI;IAIpB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAInC,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;CAOjD"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EimerMockTransport = void 0;
4
+ const LogLevel_1 = require("../eimer/LogLevel");
5
+ const EimerLogger_1 = require("../logger/EimerLogger");
6
+ /**
7
+ * Eimer Mock Transport
8
+ *
9
+ * A `Transport` that does not depend on any APIs but instead simulates message
10
+ * transportation inside the current process.
11
+ *
12
+ * It can be used for testing.
13
+ */
14
+ class EimerMockTransport {
15
+ constructor(options, dependencies) {
16
+ this.peers = new Set();
17
+ this.latency = options?.latency ?? 0;
18
+ this.logger = dependencies?.logger ?? new EimerLogger_1.EimerLogger(options?.logLevel ?? LogLevel_1.LogLevel.DEBUG, options?.logModuleName ?? 'MockTransport');
19
+ }
20
+ initialize(nodeId, incomingMessageHandler) {
21
+ this.nodeId = nodeId;
22
+ this.logger.setNodeId?.(this.nodeId);
23
+ this.incomingMessageHandler = incomingMessageHandler;
24
+ EimerMockTransport.connections.set(nodeId, this);
25
+ }
26
+ send(message) {
27
+ this.peers.forEach(peerId => {
28
+ setTimeout(() => {
29
+ const peer = EimerMockTransport.connections.get(peerId);
30
+ if (!peer) {
31
+ this.logger.error('Peer is known but not connected!', { nodeId: this.nodeId, peerId });
32
+ return;
33
+ }
34
+ peer.handlePeerMessage(message);
35
+ }, this.latency);
36
+ });
37
+ }
38
+ shutdown() {
39
+ if (this.nodeId) {
40
+ EimerMockTransport.connections.delete(this.nodeId);
41
+ }
42
+ }
43
+ static reset() {
44
+ EimerMockTransport.connections.clear();
45
+ }
46
+ connectTo(peerNodeId) {
47
+ this.peers.add(peerNodeId);
48
+ }
49
+ handlePeerMessage(message) {
50
+ if (this.incomingMessageHandler) {
51
+ this.incomingMessageHandler(message);
52
+ }
53
+ else {
54
+ this.logger.error('Received message from Peer but no "incomingMessageHandler" is set!', { nodeId: this.nodeId, from: message.from });
55
+ }
56
+ }
57
+ }
58
+ exports.EimerMockTransport = EimerMockTransport;
59
+ EimerMockTransport.connections = new Map();
60
+ //# sourceMappingURL=EimerMockTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerMockTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerMockTransport.ts"],"names":[],"mappings":";;;AACA,gDAA6C;AAC7C,uDAAoD;AAiBpD;;;;;;;GAOG;AACH,MAAa,kBAAkB;IAS3B,YAAY,OAAmC,EAAE,YAA6C;QAFtF,UAAK,GAAgB,IAAI,GAAG,EAAE,CAAC;QAGnC,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,MAAM,IAAI,IAAI,yBAAW,CAAC,OAAO,EAAE,QAAQ,IAAI,mBAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,IAAI,eAAe,CAAC,CAAC;IAC1I,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,sBAAsC;QAC7D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QAErD,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,OAAqB;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACxB,UAAU,CAAC,GAAG,EAAE;gBACZ,MAAM,IAAI,GAAG,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACxD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACR,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;oBACvF,OAAO;gBACX,CAAC;gBACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,QAAQ;QACJ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK;QACR,kBAAkB,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,SAAS,CAAC,UAAkB;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAED,iBAAiB,CAAC,OAAqB;QACnC,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oEAAoE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACzI,CAAC;IACL,CAAC;;AAvDL,gDAwDC;AAvDkB,8BAAW,GAAoC,IAAI,GAAG,EAAE,AAA7C,CAA8C"}
@@ -0,0 +1,15 @@
1
+ import { Worker } from 'node:worker_threads';
2
+ import { EimerMessagePortTransport, EimerMessagePortTransportDependencies, EimerMessagePortTransportOptions } from './EimerMessagePortTransport';
3
+ export interface EimerWorkerThreadTransportOptions extends EimerMessagePortTransportOptions {
4
+ }
5
+ export interface EimerWorkerThreadTransportDependencies extends EimerMessagePortTransportDependencies {
6
+ }
7
+ /**
8
+ * Eimer WorkerThread Transport
9
+ *
10
+ * A `Transport` that can be used to communicate with `node:worker_threads`.
11
+ */
12
+ export declare class EimerWorkerThreadTransport extends EimerMessagePortTransport {
13
+ constructor(worker: Worker, options?: EimerWorkerThreadTransportOptions, dependencies?: EimerWorkerThreadTransportDependencies);
14
+ }
15
+ //# sourceMappingURL=EimerWorkerThreadTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerWorkerThreadTransport.d.ts","sourceRoot":"","sources":["../../../src/transports/EimerWorkerThreadTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,qCAAqC,EAAE,gCAAgC,EAAe,MAAM,6BAA6B,CAAC;AAE9J,MAAM,WAAW,iCAAkC,SAAQ,gCAAgC;CAE1F;AAED,MAAM,WAAW,sCAAuC,SAAQ,qCAAqC;CAEpG;AAED;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,yBAAyB;gBACzD,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iCAAiC,EAAE,YAAY,CAAC,EAAE,sCAAsC;CAGjI"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EimerWorkerThreadTransport = void 0;
4
+ const EimerMessagePortTransport_1 = require("./EimerMessagePortTransport");
5
+ /**
6
+ * Eimer WorkerThread Transport
7
+ *
8
+ * A `Transport` that can be used to communicate with `node:worker_threads`.
9
+ */
10
+ class EimerWorkerThreadTransport extends EimerMessagePortTransport_1.EimerMessagePortTransport {
11
+ constructor(worker, options, dependencies) {
12
+ super(worker, { ...options, logModuleName: options?.logModuleName ?? 'EimerWorkerThreadTransport' }, dependencies);
13
+ }
14
+ }
15
+ exports.EimerWorkerThreadTransport = EimerWorkerThreadTransport;
16
+ //# sourceMappingURL=EimerWorkerThreadTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerWorkerThreadTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerWorkerThreadTransport.ts"],"names":[],"mappings":";;;AACA,2EAA8J;AAU9J;;;;GAIG;AACH,MAAa,0BAA2B,SAAQ,qDAAyB;IACrE,YAAY,MAAc,EAAE,OAA2C,EAAE,YAAqD;QAC1H,KAAK,CAAC,MAAqB,EAAE,EAAC,GAAG,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,4BAA4B,EAAE,EAAG,YAAY,CAAC,CAAC;IACtI,CAAC;CACJ;AAJD,gEAIC"}
@@ -0,0 +1,7 @@
1
+ export * from './EimerBrowserTransport';
2
+ export * from './EimerIpcMainTransport';
3
+ export * from './EimerIpcRendererTransport';
4
+ export * from './EimerMockTransport';
5
+ export * from './EimerMessagePortTransport';
6
+ export * from './EimerWorkerThreadTransport';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./EimerBrowserTransport"), exports);
18
+ __exportStar(require("./EimerIpcMainTransport"), exports);
19
+ __exportStar(require("./EimerIpcRendererTransport"), exports);
20
+ __exportStar(require("./EimerMockTransport"), exports);
21
+ __exportStar(require("./EimerMessagePortTransport"), exports);
22
+ __exportStar(require("./EimerWorkerThreadTransport"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transports/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,0DAAwC;AACxC,8DAA4C;AAC5C,uDAAqC;AACrC,8DAA4C;AAC5C,+DAA6C"}
@@ -0,0 +1,171 @@
1
+ import { EimerMessage } from './EimerMessage';
2
+ import { LogLevel } from './LogLevel';
3
+ import { EimerIdGenerator } from '../id-generator/EimerIdGenerator';
4
+ import { EimerLogger } from '../logger/EimerLogger';
5
+ import { EimerMessageBus } from '../message-bus/EimerMessageBus';
6
+ import { EimerRpcManager } from '../rpc/EimerRpcManager';
7
+ /**
8
+ * Eimer main class
9
+ * This class represents an instance of a "node" on the Eimer "network".
10
+ * It encapsulates all user-facing functionality in a single class.
11
+ * Allows connecting one or more transports.
12
+ * Provides Publish/Subscribe and remote procedure call patterns.
13
+ *
14
+ * To use it, create an instance with a unique node id and connect a transport
15
+ * After that, publish/subscribe and RPC can be used.
16
+ */
17
+ export class Eimer {
18
+ /**
19
+ *
20
+ * @param nodeId id of the node this instance belongs to. should be unique across all instances
21
+ * @param options
22
+ * @param dependencies optionally inject dependencies
23
+ */
24
+ constructor(nodeId, options, dependencies) {
25
+ // Map to track user handler to wrapped handler for correct unsubscribe
26
+ // Nested map: topic -> payloadHandler -> messageHandler
27
+ this.handlerMap = new Map();
28
+ this.nodeId = nodeId;
29
+ this.idGenerator = dependencies?.idGenerator ?? new EimerIdGenerator();
30
+ this.logger = dependencies?.logger ?? new EimerLogger(options?.logLevel ?? LogLevel.DEBUG, options?.logModuleName ?? 'Eimer', this.nodeId);
31
+ this.messageBus = dependencies?.messageBus ?? new EimerMessageBus(this.nodeId, options);
32
+ this.rpcManager = dependencies?.rpcManager ?? new EimerRpcManager(this.nodeId, this.messageBus, options);
33
+ }
34
+ /**
35
+ * Connect this Eimer instance to a `Transport`
36
+ * @param transport
37
+ */
38
+ connect(transport) {
39
+ this.logger.debug('Connecting Transport', { transport });
40
+ this.messageBus.connectTransport(transport);
41
+ }
42
+ /**
43
+ * Disconnect from a `Transport`
44
+ * @param transport
45
+ */
46
+ disconnect(transport) {
47
+ this.logger.debug('Disconnecting Transport', { transport });
48
+ this.messageBus.disconnectTransport(transport);
49
+ }
50
+ /**
51
+ * Call an RPC method
52
+ * Will time out if no handler exists or handler does not respond
53
+ * Will throw on errors from handler
54
+ * @param method name of method / rpc handler
55
+ * @param params optional params object
56
+ * @param timeout override timeout from constructor options for this single call
57
+ * @returns result from invoked handler
58
+ */
59
+ async callRpc(method, params, timeout) {
60
+ this.logger.debug('Making RPC call', { method, params });
61
+ return this.rpcManager.call(method, params, timeout);
62
+ }
63
+ /**
64
+ * Register an RPC handler
65
+ * Will be called if callRpc is called on any connected Eimer instance
66
+ * If there is already a registered handler, it will be replaced
67
+ * @param method name of method / rpc handler
68
+ * @param handler async function to be invoked
69
+ */
70
+ registerRpcHandler(method, handler) {
71
+ this.logger.debug('Registering RPC handler for method', { method });
72
+ this.rpcManager.registerHandler(method, handler);
73
+ }
74
+ /**
75
+ * Unregister an RPC handler
76
+ * @param method name of method / rpc handler
77
+ */
78
+ unregisterRpcHandler(method) {
79
+ this.logger.debug('Unregistering RPC handler for method', { method });
80
+ this.rpcManager.unregisterHandler(method);
81
+ }
82
+ /**
83
+ * Publish a payload to a topic
84
+ * Will send payload to all subscribers on the topic
85
+ * @param topic name of topic - subscribers can subscribe to it
86
+ * @param payload payload will be sent to subscribers
87
+ */
88
+ publish(topic, payload) {
89
+ this.logger.debug('Publishing message', { topic });
90
+ this.messageBus.publish(new EimerMessage(this.idGenerator.generateId(), this.nodeId, topic, payload));
91
+ }
92
+ /**
93
+ * Subscribe a handler function to a topic
94
+ * The handler function will be called with the payload everytime a message is published
95
+ * @param topic name of topic
96
+ * @param payloadHandler handler function
97
+ * @returns a function that can be called to unsubscribe the handler from the topic
98
+ */
99
+ subscribe(topic, payloadHandler) {
100
+ this.logger.debug('Subscribing to topic', { topic });
101
+ const messageHandler = (message) => {
102
+ payloadHandler(message.payload);
103
+ };
104
+ // Get or create the topic's handler map
105
+ let topicHandlerMap = this.handlerMap.get(topic);
106
+ if (!topicHandlerMap) {
107
+ topicHandlerMap = new Map();
108
+ this.handlerMap.set(topic, topicHandlerMap);
109
+ }
110
+ topicHandlerMap.set(payloadHandler, messageHandler);
111
+ const unsubscribe = this.messageBus.subscribe(topic, messageHandler);
112
+ return () => {
113
+ unsubscribe();
114
+ const topicMap = this.handlerMap.get(topic);
115
+ if (topicMap) {
116
+ topicMap.delete(payloadHandler);
117
+ // Clean up empty topic maps
118
+ if (topicMap.size === 0) {
119
+ this.handlerMap.delete(topic);
120
+ }
121
+ }
122
+ };
123
+ }
124
+ /**
125
+ * Unsubscribe a handler function from a topic
126
+ * This has the same effect as calling the unsubscriber function that was returned from subscribe
127
+ * @param topic name of topic
128
+ * @param payloadHandler handler function (must be exact same variable that was used to subscribe)
129
+ */
130
+ unsubscribe(topic, payloadHandler) {
131
+ this.logger.debug('Unsubscribing from topic', { topic });
132
+ const topicHandlerMap = this.handlerMap.get(topic);
133
+ if (topicHandlerMap) {
134
+ const messageHandler = topicHandlerMap.get(payloadHandler);
135
+ if (messageHandler) {
136
+ this.messageBus.unsubscribe(topic, messageHandler);
137
+ topicHandlerMap.delete(payloadHandler);
138
+ // Clean up empty topic maps
139
+ if (topicHandlerMap.size === 0) {
140
+ this.handlerMap.delete(topic);
141
+ }
142
+ }
143
+ }
144
+ }
145
+ /**
146
+ * Unsubscribe all handlers from a topic
147
+ * @param topic name of topic
148
+ */
149
+ unsubscribeAll(topic) {
150
+ this.logger.debug('Unsubscribing all handlers from topic', { topic });
151
+ const topicHandlerMap = this.handlerMap.get(topic);
152
+ if (topicHandlerMap) {
153
+ // Unsubscribe all message handlers from the message bus
154
+ for (const messageHandler of topicHandlerMap.values()) {
155
+ this.messageBus.unsubscribe(topic, messageHandler);
156
+ }
157
+ // Remove the topic from the handler map
158
+ this.handlerMap.delete(topic);
159
+ }
160
+ }
161
+ /**
162
+ * Shutdown this Eimer instance
163
+ * Will reject all RPC requests that are still waiting for a response
164
+ * and shutdown the MessageBus
165
+ */
166
+ shutdown() {
167
+ this.rpcManager.shutdown();
168
+ this.messageBus.shutdown();
169
+ }
170
+ }
171
+ //# sourceMappingURL=Eimer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Eimer.js","sourceRoot":"","sources":["../../../src/eimer/Eimer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAkBzD;;;;;;;;;GASG;AACH,MAAM,OAAO,KAAK;IAUd;;;;;OAKG;IACH,YAAY,MAAc,EAAE,OAAsB,EAAE,YAAgC;QAVpF,uEAAuE;QACvE,wDAAwD;QAChD,eAAU,GAAoD,IAAI,GAAG,EAAE,CAAC;QAS5E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,YAAY,EAAE,WAAW,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACvE,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,MAAM,IAAI,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3I,IAAI,CAAC,UAAU,GAAG,YAAY,EAAE,UAAU,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxF,IAAI,CAAC,UAAU,GAAG,YAAY,EAAE,UAAU,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC7G,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,SAAoB;QACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,SAAoB;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,OAAO,CAAI,MAAiB,EAAE,MAAgB,EAAE,OAAgB;QAClE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAI,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;OAMG;IACH,kBAAkB,CAAC,MAAiB,EAAE,OAAmB;QACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,MAAiB;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,KAAY,EAAE,OAAiB;QACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,OAAO,CACnB,IAAI,YAAY,CACZ,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAC7B,IAAI,CAAC,MAAM,EACX,KAAK,EACL,OAAO,CACV,CACJ,CAAC;IACN,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,KAAY,EAAE,cAA8B;QAClD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,CAAC,OAAqB,EAAE,EAAE;YAC7C,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC,CAAC;QAEF,wCAAwC;QACxC,IAAI,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAChD,CAAC;QACD,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACrE,OAAO,GAAG,EAAE;YACR,WAAW,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,QAAQ,EAAE,CAAC;gBACX,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAChC,4BAA4B;gBAC5B,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClC,CAAC;YACL,CAAC;QACL,CAAC,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,KAAY,EAAE,cAA8B;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,eAAe,EAAE,CAAC;YAClB,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC3D,IAAI,cAAc,EAAE,CAAC;gBACjB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;gBACnD,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACvC,4BAA4B;gBAC5B,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClC,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,KAAY;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,eAAe,EAAE,CAAC;YAClB,wDAAwD;YACxD,KAAK,MAAM,cAAc,IAAI,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;gBACpD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YACvD,CAAC;YACD,wCAAwC;YACxC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACJ,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;CAEJ"}
@@ -0,0 +1,3 @@
1
+ ;
2
+ export {};
3
+ //# sourceMappingURL=EimerDependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerDependencies.js","sourceRoot":"","sources":["../../../src/eimer/EimerDependencies.ts"],"names":[],"mappings":"AAgBC,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Base class for Eimer Messages
3
+ */
4
+ export class EimerMessage {
5
+ /**
6
+ *
7
+ * @param id globally unique id of this message - for example generated by an `IdGenerator`
8
+ * @param from nodeId that sent this message
9
+ * @param topic topic this message was sent on
10
+ * @param payload optional payload
11
+ */
12
+ constructor(id, from, topic, payload) {
13
+ this.marker = 'EM.1';
14
+ this.id = id;
15
+ this.from = from;
16
+ this.topic = topic;
17
+ this.payload = payload;
18
+ }
19
+ /**
20
+ * User-defined Type Guard to ensure the message is an Eimer Request
21
+ * Similar to `Array.isArray()`, this static method can be used to check if an object is an `EimerMessage`
22
+ * @param message the message to test
23
+ * @returns true if the message looks like an Eimer Message
24
+ */
25
+ static isEimerMessage(message) {
26
+ if (message === null || message === undefined || typeof message !== 'object') {
27
+ return false;
28
+ }
29
+ if (!('marker' in message) || !('id' in message) || !('from' in message) || !('topic' in message)) {
30
+ return false;
31
+ }
32
+ if (message.marker != 'EM.1') {
33
+ return false;
34
+ }
35
+ return true;
36
+ }
37
+ }
38
+ //# sourceMappingURL=EimerMessage.js.map