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.
- package/LICENSE +22 -0
- package/README.md +130 -0
- package/dist/cjs/eimer/Eimer.d.ts +102 -0
- package/dist/cjs/eimer/Eimer.d.ts.map +1 -0
- package/dist/cjs/eimer/Eimer.js +175 -0
- package/dist/cjs/eimer/Eimer.js.map +1 -0
- package/dist/cjs/eimer/EimerDependencies.d.ts +17 -0
- package/dist/cjs/eimer/EimerDependencies.d.ts.map +1 -0
- package/dist/cjs/eimer/EimerDependencies.js +4 -0
- package/dist/cjs/eimer/EimerDependencies.js.map +1 -0
- package/dist/cjs/eimer/EimerMessage.d.ts +31 -0
- package/dist/cjs/eimer/EimerMessage.d.ts.map +1 -0
- package/dist/cjs/eimer/EimerMessage.js +42 -0
- package/dist/cjs/eimer/EimerMessage.js.map +1 -0
- package/dist/cjs/eimer/EimerOptions.d.ts +12 -0
- package/dist/cjs/eimer/EimerOptions.d.ts.map +1 -0
- package/dist/cjs/eimer/EimerOptions.js +4 -0
- package/dist/cjs/eimer/EimerOptions.js.map +1 -0
- package/dist/cjs/eimer/IdGenerator.d.ts +12 -0
- package/dist/cjs/eimer/IdGenerator.d.ts.map +1 -0
- package/dist/cjs/eimer/IdGenerator.js +3 -0
- package/dist/cjs/eimer/IdGenerator.js.map +1 -0
- package/dist/cjs/eimer/LogLevel.d.ts +16 -0
- package/dist/cjs/eimer/LogLevel.d.ts.map +1 -0
- package/dist/cjs/eimer/LogLevel.js +21 -0
- package/dist/cjs/eimer/LogLevel.js.map +1 -0
- package/dist/cjs/eimer/Logger.d.ts +70 -0
- package/dist/cjs/eimer/Logger.d.ts.map +1 -0
- package/dist/cjs/eimer/Logger.js +3 -0
- package/dist/cjs/eimer/Logger.js.map +1 -0
- package/dist/cjs/eimer/MagicMessageMarker.d.ts +18 -0
- package/dist/cjs/eimer/MagicMessageMarker.d.ts.map +1 -0
- package/dist/cjs/eimer/MagicMessageMarker.js +3 -0
- package/dist/cjs/eimer/MagicMessageMarker.js.map +1 -0
- package/dist/cjs/eimer/MessageBus.d.ts +65 -0
- package/dist/cjs/eimer/MessageBus.d.ts.map +1 -0
- package/dist/cjs/eimer/MessageBus.js +3 -0
- package/dist/cjs/eimer/MessageBus.js.map +1 -0
- package/dist/cjs/eimer/MessageHandler.d.ts +14 -0
- package/dist/cjs/eimer/MessageHandler.d.ts.map +1 -0
- package/dist/cjs/eimer/MessageHandler.js +3 -0
- package/dist/cjs/eimer/MessageHandler.js.map +1 -0
- package/dist/cjs/eimer/MessageId.d.ts +8 -0
- package/dist/cjs/eimer/MessageId.d.ts.map +1 -0
- package/dist/cjs/eimer/MessageId.js +3 -0
- package/dist/cjs/eimer/MessageId.js.map +1 -0
- package/dist/cjs/eimer/NodeId.d.ts +5 -0
- package/dist/cjs/eimer/NodeId.d.ts.map +1 -0
- package/dist/cjs/eimer/NodeId.js +3 -0
- package/dist/cjs/eimer/NodeId.js.map +1 -0
- package/dist/cjs/eimer/PayloadHandler.d.ts +7 -0
- package/dist/cjs/eimer/PayloadHandler.d.ts.map +1 -0
- package/dist/cjs/eimer/PayloadHandler.js +3 -0
- package/dist/cjs/eimer/PayloadHandler.js.map +1 -0
- package/dist/cjs/eimer/RpcHandler.d.ts +6 -0
- package/dist/cjs/eimer/RpcHandler.d.ts.map +1 -0
- package/dist/cjs/eimer/RpcHandler.js +3 -0
- package/dist/cjs/eimer/RpcHandler.js.map +1 -0
- package/dist/cjs/eimer/RpcManager.d.ts +48 -0
- package/dist/cjs/eimer/RpcManager.d.ts.map +1 -0
- package/dist/cjs/eimer/RpcManager.js +3 -0
- package/dist/cjs/eimer/RpcManager.js.map +1 -0
- package/dist/cjs/eimer/RpcMethod.d.ts +5 -0
- package/dist/cjs/eimer/RpcMethod.d.ts.map +1 -0
- package/dist/cjs/eimer/RpcMethod.js +3 -0
- package/dist/cjs/eimer/RpcMethod.js.map +1 -0
- package/dist/cjs/eimer/StructuredCloneable.d.ts +21 -0
- package/dist/cjs/eimer/StructuredCloneable.d.ts.map +1 -0
- package/dist/cjs/eimer/StructuredCloneable.js +3 -0
- package/dist/cjs/eimer/StructuredCloneable.js.map +1 -0
- package/dist/cjs/eimer/Topic.d.ts +5 -0
- package/dist/cjs/eimer/Topic.d.ts.map +1 -0
- package/dist/cjs/eimer/Topic.js +3 -0
- package/dist/cjs/eimer/Topic.js.map +1 -0
- package/dist/cjs/eimer/Transport.d.ts +36 -0
- package/dist/cjs/eimer/Transport.d.ts.map +1 -0
- package/dist/cjs/eimer/Transport.js +3 -0
- package/dist/cjs/eimer/Transport.js.map +1 -0
- package/dist/cjs/eimer/index.d.ts +20 -0
- package/dist/cjs/eimer/index.d.ts.map +1 -0
- package/dist/cjs/eimer/index.js +36 -0
- package/dist/cjs/eimer/index.js.map +1 -0
- package/dist/cjs/id-generator/EimerIdGenerator.d.ts +13 -0
- package/dist/cjs/id-generator/EimerIdGenerator.d.ts.map +1 -0
- package/dist/cjs/id-generator/EimerIdGenerator.js +17 -0
- package/dist/cjs/id-generator/EimerIdGenerator.js.map +1 -0
- package/dist/cjs/id-generator/index.d.ts +2 -0
- package/dist/cjs/id-generator/index.d.ts.map +1 -0
- package/dist/cjs/id-generator/index.js +18 -0
- package/dist/cjs/id-generator/index.js.map +1 -0
- package/dist/cjs/index.d.ts +7 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +23 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/logger/EimerLogger.d.ts +28 -0
- package/dist/cjs/logger/EimerLogger.d.ts.map +1 -0
- package/dist/cjs/logger/EimerLogger.js +68 -0
- package/dist/cjs/logger/EimerLogger.js.map +1 -0
- package/dist/cjs/logger/index.d.ts +2 -0
- package/dist/cjs/logger/index.d.ts.map +1 -0
- package/dist/cjs/logger/index.js +18 -0
- package/dist/cjs/logger/index.js.map +1 -0
- package/dist/cjs/message-bus/EimerMessageBus.d.ts +30 -0
- package/dist/cjs/message-bus/EimerMessageBus.d.ts.map +1 -0
- package/dist/cjs/message-bus/EimerMessageBus.js +120 -0
- package/dist/cjs/message-bus/EimerMessageBus.js.map +1 -0
- package/dist/cjs/message-bus/index.d.ts +2 -0
- package/dist/cjs/message-bus/index.d.ts.map +1 -0
- package/dist/cjs/message-bus/index.js +18 -0
- package/dist/cjs/message-bus/index.js.map +1 -0
- package/dist/cjs/rpc/EimerRpcManager.d.ts +76 -0
- package/dist/cjs/rpc/EimerRpcManager.d.ts.map +1 -0
- package/dist/cjs/rpc/EimerRpcManager.js +162 -0
- package/dist/cjs/rpc/EimerRpcManager.js.map +1 -0
- package/dist/cjs/rpc/EimerRpcRequestMessage.d.ts +28 -0
- package/dist/cjs/rpc/EimerRpcRequestMessage.d.ts.map +1 -0
- package/dist/cjs/rpc/EimerRpcRequestMessage.js +38 -0
- package/dist/cjs/rpc/EimerRpcRequestMessage.js.map +1 -0
- package/dist/cjs/rpc/EimerRpcRequestPayload.d.ts +38 -0
- package/dist/cjs/rpc/EimerRpcRequestPayload.d.ts.map +1 -0
- package/dist/cjs/rpc/EimerRpcRequestPayload.js +33 -0
- package/dist/cjs/rpc/EimerRpcRequestPayload.js.map +1 -0
- package/dist/cjs/rpc/EimerRpcResponseMessage.d.ts +30 -0
- package/dist/cjs/rpc/EimerRpcResponseMessage.d.ts.map +1 -0
- package/dist/cjs/rpc/EimerRpcResponseMessage.js +40 -0
- package/dist/cjs/rpc/EimerRpcResponseMessage.js.map +1 -0
- package/dist/cjs/rpc/EimerRpcResponsePayload.d.ts +30 -0
- package/dist/cjs/rpc/EimerRpcResponsePayload.d.ts.map +1 -0
- package/dist/cjs/rpc/EimerRpcResponsePayload.js +32 -0
- package/dist/cjs/rpc/EimerRpcResponsePayload.js.map +1 -0
- package/dist/cjs/rpc/RpcRequestId.d.ts +6 -0
- package/dist/cjs/rpc/RpcRequestId.d.ts.map +1 -0
- package/dist/cjs/rpc/RpcRequestId.js +3 -0
- package/dist/cjs/rpc/RpcRequestId.js.map +1 -0
- package/dist/cjs/rpc/index.d.ts +7 -0
- package/dist/cjs/rpc/index.d.ts.map +1 -0
- package/dist/cjs/rpc/index.js +23 -0
- package/dist/cjs/rpc/index.js.map +1 -0
- package/dist/cjs/transports/EimerBrowserTransport.d.ts +39 -0
- package/dist/cjs/transports/EimerBrowserTransport.d.ts.map +1 -0
- package/dist/cjs/transports/EimerBrowserTransport.js +74 -0
- package/dist/cjs/transports/EimerBrowserTransport.js.map +1 -0
- package/dist/cjs/transports/EimerIpcMainTransport.d.ts +38 -0
- package/dist/cjs/transports/EimerIpcMainTransport.d.ts.map +1 -0
- package/dist/cjs/transports/EimerIpcMainTransport.js +65 -0
- package/dist/cjs/transports/EimerIpcMainTransport.js.map +1 -0
- package/dist/cjs/transports/EimerIpcRendererTransport.d.ts +43 -0
- package/dist/cjs/transports/EimerIpcRendererTransport.d.ts.map +1 -0
- package/dist/cjs/transports/EimerIpcRendererTransport.js +64 -0
- package/dist/cjs/transports/EimerIpcRendererTransport.js.map +1 -0
- package/dist/cjs/transports/EimerMessagePortTransport.d.ts +40 -0
- package/dist/cjs/transports/EimerMessagePortTransport.d.ts.map +1 -0
- package/dist/cjs/transports/EimerMessagePortTransport.js +56 -0
- package/dist/cjs/transports/EimerMessagePortTransport.js.map +1 -0
- package/dist/cjs/transports/EimerMockTransport.d.ts +35 -0
- package/dist/cjs/transports/EimerMockTransport.d.ts.map +1 -0
- package/dist/cjs/transports/EimerMockTransport.js +60 -0
- package/dist/cjs/transports/EimerMockTransport.js.map +1 -0
- package/dist/cjs/transports/EimerWorkerThreadTransport.d.ts +15 -0
- package/dist/cjs/transports/EimerWorkerThreadTransport.d.ts.map +1 -0
- package/dist/cjs/transports/EimerWorkerThreadTransport.js +16 -0
- package/dist/cjs/transports/EimerWorkerThreadTransport.js.map +1 -0
- package/dist/cjs/transports/index.d.ts +7 -0
- package/dist/cjs/transports/index.d.ts.map +1 -0
- package/dist/cjs/transports/index.js +23 -0
- package/dist/cjs/transports/index.js.map +1 -0
- package/dist/esm/eimer/Eimer.js +171 -0
- package/dist/esm/eimer/Eimer.js.map +1 -0
- package/dist/esm/eimer/EimerDependencies.js +3 -0
- package/dist/esm/eimer/EimerDependencies.js.map +1 -0
- package/dist/esm/eimer/EimerMessage.js +38 -0
- package/dist/esm/eimer/EimerMessage.js.map +1 -0
- package/dist/esm/eimer/EimerOptions.js +3 -0
- package/dist/esm/eimer/EimerOptions.js.map +1 -0
- package/dist/esm/eimer/IdGenerator.js +2 -0
- package/dist/esm/eimer/IdGenerator.js.map +1 -0
- package/dist/esm/eimer/LogLevel.js +18 -0
- package/dist/esm/eimer/LogLevel.js.map +1 -0
- package/dist/esm/eimer/Logger.js +2 -0
- package/dist/esm/eimer/Logger.js.map +1 -0
- package/dist/esm/eimer/MagicMessageMarker.js +2 -0
- package/dist/esm/eimer/MagicMessageMarker.js.map +1 -0
- package/dist/esm/eimer/MessageBus.js +2 -0
- package/dist/esm/eimer/MessageBus.js.map +1 -0
- package/dist/esm/eimer/MessageHandler.js +2 -0
- package/dist/esm/eimer/MessageHandler.js.map +1 -0
- package/dist/esm/eimer/MessageId.js +2 -0
- package/dist/esm/eimer/MessageId.js.map +1 -0
- package/dist/esm/eimer/NodeId.js +2 -0
- package/dist/esm/eimer/NodeId.js.map +1 -0
- package/dist/esm/eimer/PayloadHandler.js +2 -0
- package/dist/esm/eimer/PayloadHandler.js.map +1 -0
- package/dist/esm/eimer/RpcHandler.js +2 -0
- package/dist/esm/eimer/RpcHandler.js.map +1 -0
- package/dist/esm/eimer/RpcManager.js +2 -0
- package/dist/esm/eimer/RpcManager.js.map +1 -0
- package/dist/esm/eimer/RpcMethod.js +2 -0
- package/dist/esm/eimer/RpcMethod.js.map +1 -0
- package/dist/esm/eimer/StructuredCloneable.js +2 -0
- package/dist/esm/eimer/StructuredCloneable.js.map +1 -0
- package/dist/esm/eimer/Topic.js +2 -0
- package/dist/esm/eimer/Topic.js.map +1 -0
- package/dist/esm/eimer/Transport.js +2 -0
- package/dist/esm/eimer/Transport.js.map +1 -0
- package/dist/esm/eimer/index.js +20 -0
- package/dist/esm/eimer/index.js.map +1 -0
- package/dist/esm/id-generator/EimerIdGenerator.js +13 -0
- package/dist/esm/id-generator/EimerIdGenerator.js.map +1 -0
- package/dist/esm/id-generator/index.js +2 -0
- package/dist/esm/id-generator/index.js.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/logger/EimerLogger.js +64 -0
- package/dist/esm/logger/EimerLogger.js.map +1 -0
- package/dist/esm/logger/index.js +2 -0
- package/dist/esm/logger/index.js.map +1 -0
- package/dist/esm/message-bus/EimerMessageBus.js +116 -0
- package/dist/esm/message-bus/EimerMessageBus.js.map +1 -0
- package/dist/esm/message-bus/index.js +2 -0
- package/dist/esm/message-bus/index.js.map +1 -0
- package/dist/esm/rpc/EimerRpcManager.js +158 -0
- package/dist/esm/rpc/EimerRpcManager.js.map +1 -0
- package/dist/esm/rpc/EimerRpcRequestMessage.js +34 -0
- package/dist/esm/rpc/EimerRpcRequestMessage.js.map +1 -0
- package/dist/esm/rpc/EimerRpcRequestPayload.js +29 -0
- package/dist/esm/rpc/EimerRpcRequestPayload.js.map +1 -0
- package/dist/esm/rpc/EimerRpcResponseMessage.js +36 -0
- package/dist/esm/rpc/EimerRpcResponseMessage.js.map +1 -0
- package/dist/esm/rpc/EimerRpcResponsePayload.js +28 -0
- package/dist/esm/rpc/EimerRpcResponsePayload.js.map +1 -0
- package/dist/esm/rpc/RpcRequestId.js +2 -0
- package/dist/esm/rpc/RpcRequestId.js.map +1 -0
- package/dist/esm/rpc/index.js +7 -0
- package/dist/esm/rpc/index.js.map +1 -0
- package/dist/esm/transports/EimerBrowserTransport.js +70 -0
- package/dist/esm/transports/EimerBrowserTransport.js.map +1 -0
- package/dist/esm/transports/EimerIpcMainTransport.js +61 -0
- package/dist/esm/transports/EimerIpcMainTransport.js.map +1 -0
- package/dist/esm/transports/EimerIpcRendererTransport.js +60 -0
- package/dist/esm/transports/EimerIpcRendererTransport.js.map +1 -0
- package/dist/esm/transports/EimerMessagePortTransport.js +52 -0
- package/dist/esm/transports/EimerMessagePortTransport.js.map +1 -0
- package/dist/esm/transports/EimerMockTransport.js +56 -0
- package/dist/esm/transports/EimerMockTransport.js.map +1 -0
- package/dist/esm/transports/EimerWorkerThreadTransport.js +12 -0
- package/dist/esm/transports/EimerWorkerThreadTransport.js.map +1 -0
- package/dist/esm/transports/index.js +7 -0
- package/dist/esm/transports/index.js.map +1 -0
- 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":"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"}
|
|
@@ -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
|