eimer 0.1.1 → 0.2.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 (156) hide show
  1. package/README.md +12 -6
  2. package/dist/cjs/eimer/Eimer.d.ts +9 -5
  3. package/dist/cjs/eimer/Eimer.d.ts.map +1 -1
  4. package/dist/cjs/eimer/Eimer.js +28 -10
  5. package/dist/cjs/eimer/Eimer.js.map +1 -1
  6. package/dist/cjs/eimer/EimerDependencies.d.ts +2 -0
  7. package/dist/cjs/eimer/EimerDependencies.d.ts.map +1 -1
  8. package/dist/cjs/eimer/EimerDependencies.js.map +1 -1
  9. package/dist/cjs/eimer/EimerMessage.d.ts +4 -1
  10. package/dist/cjs/eimer/EimerMessage.d.ts.map +1 -1
  11. package/dist/cjs/eimer/EimerMessage.js +3 -1
  12. package/dist/cjs/eimer/EimerMessage.js.map +1 -1
  13. package/dist/cjs/eimer/EimerMessageMeta.d.ts +17 -0
  14. package/dist/cjs/eimer/EimerMessageMeta.d.ts.map +1 -0
  15. package/dist/cjs/eimer/EimerMessageMeta.js +3 -0
  16. package/dist/cjs/eimer/EimerMessageMeta.js.map +1 -0
  17. package/dist/cjs/eimer/PayloadHandler.d.ts +2 -1
  18. package/dist/cjs/eimer/PayloadHandler.d.ts.map +1 -1
  19. package/dist/cjs/eimer/RpcHandler.d.ts +2 -1
  20. package/dist/cjs/eimer/RpcHandler.d.ts.map +1 -1
  21. package/dist/cjs/eimer/RpcManager.d.ts +4 -2
  22. package/dist/cjs/eimer/RpcManager.d.ts.map +1 -1
  23. package/dist/cjs/eimer/TraceContext.d.ts +13 -0
  24. package/dist/cjs/eimer/TraceContext.d.ts.map +1 -0
  25. package/dist/cjs/eimer/TraceContext.js +3 -0
  26. package/dist/cjs/eimer/TraceContext.js.map +1 -0
  27. package/dist/cjs/eimer/TraceSpan.d.ts +14 -0
  28. package/dist/cjs/eimer/TraceSpan.d.ts.map +1 -0
  29. package/dist/cjs/eimer/TraceSpan.js +3 -0
  30. package/dist/cjs/eimer/TraceSpan.js.map +1 -0
  31. package/dist/cjs/eimer/Tracer.d.ts +34 -0
  32. package/dist/cjs/eimer/Tracer.d.ts.map +1 -0
  33. package/dist/cjs/eimer/Tracer.js +3 -0
  34. package/dist/cjs/eimer/Tracer.js.map +1 -0
  35. package/dist/cjs/eimer/TracerBackend.d.ts +21 -0
  36. package/dist/cjs/eimer/TracerBackend.d.ts.map +1 -0
  37. package/dist/cjs/eimer/TracerBackend.js +3 -0
  38. package/dist/cjs/eimer/TracerBackend.js.map +1 -0
  39. package/dist/cjs/eimer/index.d.ts +5 -0
  40. package/dist/cjs/eimer/index.d.ts.map +1 -1
  41. package/dist/cjs/eimer/index.js +5 -0
  42. package/dist/cjs/eimer/index.js.map +1 -1
  43. package/dist/cjs/eimer/now.d.ts +12 -0
  44. package/dist/cjs/eimer/now.d.ts.map +1 -0
  45. package/dist/cjs/eimer/now.js +17 -0
  46. package/dist/cjs/eimer/now.js.map +1 -0
  47. package/dist/cjs/message-bus/EimerMessageBus.d.ts +3 -2
  48. package/dist/cjs/message-bus/EimerMessageBus.d.ts.map +1 -1
  49. package/dist/cjs/message-bus/EimerMessageBus.js +21 -3
  50. package/dist/cjs/message-bus/EimerMessageBus.js.map +1 -1
  51. package/dist/cjs/rpc/EimerRpcManager.d.ts +9 -6
  52. package/dist/cjs/rpc/EimerRpcManager.d.ts.map +1 -1
  53. package/dist/cjs/rpc/EimerRpcManager.js +31 -9
  54. package/dist/cjs/rpc/EimerRpcManager.js.map +1 -1
  55. package/dist/cjs/rpc/EimerRpcRequestMessage.d.ts +2 -1
  56. package/dist/cjs/rpc/EimerRpcRequestMessage.d.ts.map +1 -1
  57. package/dist/cjs/rpc/EimerRpcRequestMessage.js +2 -2
  58. package/dist/cjs/rpc/EimerRpcRequestMessage.js.map +1 -1
  59. package/dist/cjs/rpc/EimerRpcResponseMessage.d.ts +2 -1
  60. package/dist/cjs/rpc/EimerRpcResponseMessage.d.ts.map +1 -1
  61. package/dist/cjs/rpc/EimerRpcResponseMessage.js +2 -2
  62. package/dist/cjs/rpc/EimerRpcResponseMessage.js.map +1 -1
  63. package/dist/cjs/tracing/ConsoleLoggingTracerBackend.d.ts +53 -0
  64. package/dist/cjs/tracing/ConsoleLoggingTracerBackend.d.ts.map +1 -0
  65. package/dist/cjs/tracing/ConsoleLoggingTracerBackend.js +113 -0
  66. package/dist/cjs/tracing/ConsoleLoggingTracerBackend.js.map +1 -0
  67. package/dist/cjs/tracing/EimerLoggerTracerBackend.d.ts +12 -0
  68. package/dist/cjs/tracing/EimerLoggerTracerBackend.d.ts.map +1 -0
  69. package/dist/cjs/tracing/EimerLoggerTracerBackend.js +18 -0
  70. package/dist/cjs/tracing/EimerLoggerTracerBackend.js.map +1 -0
  71. package/dist/cjs/tracing/EimerNoopTracer.d.ts +17 -0
  72. package/dist/cjs/tracing/EimerNoopTracer.d.ts.map +1 -0
  73. package/dist/cjs/tracing/EimerNoopTracer.js +27 -0
  74. package/dist/cjs/tracing/EimerNoopTracer.js.map +1 -0
  75. package/dist/cjs/tracing/EimerPublishingTracerBackend.d.ts +17 -0
  76. package/dist/cjs/tracing/EimerPublishingTracerBackend.d.ts.map +1 -0
  77. package/dist/cjs/tracing/EimerPublishingTracerBackend.js +20 -0
  78. package/dist/cjs/tracing/EimerPublishingTracerBackend.js.map +1 -0
  79. package/dist/cjs/tracing/EimerTraceSubscriber.d.ts +17 -0
  80. package/dist/cjs/tracing/EimerTraceSubscriber.d.ts.map +1 -0
  81. package/dist/cjs/tracing/EimerTraceSubscriber.js +23 -0
  82. package/dist/cjs/tracing/EimerTraceSubscriber.js.map +1 -0
  83. package/dist/cjs/tracing/EimerTracer.d.ts +21 -0
  84. package/dist/cjs/tracing/EimerTracer.d.ts.map +1 -0
  85. package/dist/cjs/tracing/EimerTracer.js +59 -0
  86. package/dist/cjs/tracing/EimerTracer.js.map +1 -0
  87. package/dist/cjs/tracing/MemoryTracerBackend.d.ts +14 -0
  88. package/dist/cjs/tracing/MemoryTracerBackend.d.ts.map +1 -0
  89. package/dist/cjs/tracing/MemoryTracerBackend.js +24 -0
  90. package/dist/cjs/tracing/MemoryTracerBackend.js.map +1 -0
  91. package/dist/cjs/tracing/NoopTracer.d.ts +16 -0
  92. package/dist/cjs/tracing/NoopTracer.d.ts.map +1 -0
  93. package/dist/cjs/tracing/NoopTracer.js +27 -0
  94. package/dist/cjs/tracing/NoopTracer.js.map +1 -0
  95. package/dist/cjs/tracing/index.d.ts +9 -0
  96. package/dist/cjs/tracing/index.d.ts.map +1 -0
  97. package/dist/cjs/tracing/index.js +25 -0
  98. package/dist/cjs/tracing/index.js.map +1 -0
  99. package/dist/cjs/tracing/now.d.ts +9 -0
  100. package/dist/cjs/tracing/now.d.ts.map +1 -0
  101. package/dist/cjs/tracing/now.js +14 -0
  102. package/dist/cjs/tracing/now.js.map +1 -0
  103. package/dist/cjs/transports/EimerUtilityProcessTransport.d.ts +5 -2
  104. package/dist/cjs/transports/EimerUtilityProcessTransport.d.ts.map +1 -1
  105. package/dist/cjs/transports/EimerUtilityProcessTransport.js +29 -1
  106. package/dist/cjs/transports/EimerUtilityProcessTransport.js.map +1 -1
  107. package/dist/esm/eimer/Eimer.js +28 -10
  108. package/dist/esm/eimer/Eimer.js.map +1 -1
  109. package/dist/esm/eimer/EimerDependencies.js.map +1 -1
  110. package/dist/esm/eimer/EimerMessage.js +3 -1
  111. package/dist/esm/eimer/EimerMessage.js.map +1 -1
  112. package/dist/esm/eimer/EimerMessageMeta.js +2 -0
  113. package/dist/esm/eimer/EimerMessageMeta.js.map +1 -0
  114. package/dist/esm/eimer/TraceContext.js +2 -0
  115. package/dist/esm/eimer/TraceContext.js.map +1 -0
  116. package/dist/esm/eimer/TraceSpan.js +2 -0
  117. package/dist/esm/eimer/TraceSpan.js.map +1 -0
  118. package/dist/esm/eimer/Tracer.js +2 -0
  119. package/dist/esm/eimer/Tracer.js.map +1 -0
  120. package/dist/esm/eimer/TracerBackend.js +2 -0
  121. package/dist/esm/eimer/TracerBackend.js.map +1 -0
  122. package/dist/esm/eimer/index.js +5 -0
  123. package/dist/esm/eimer/index.js.map +1 -1
  124. package/dist/esm/eimer/now.js +14 -0
  125. package/dist/esm/eimer/now.js.map +1 -0
  126. package/dist/esm/message-bus/EimerMessageBus.js +21 -3
  127. package/dist/esm/message-bus/EimerMessageBus.js.map +1 -1
  128. package/dist/esm/rpc/EimerRpcManager.js +31 -9
  129. package/dist/esm/rpc/EimerRpcManager.js.map +1 -1
  130. package/dist/esm/rpc/EimerRpcRequestMessage.js +2 -2
  131. package/dist/esm/rpc/EimerRpcRequestMessage.js.map +1 -1
  132. package/dist/esm/rpc/EimerRpcResponseMessage.js +2 -2
  133. package/dist/esm/rpc/EimerRpcResponseMessage.js.map +1 -1
  134. package/dist/esm/tracing/ConsoleLoggingTracerBackend.js +109 -0
  135. package/dist/esm/tracing/ConsoleLoggingTracerBackend.js.map +1 -0
  136. package/dist/esm/tracing/EimerLoggerTracerBackend.js +14 -0
  137. package/dist/esm/tracing/EimerLoggerTracerBackend.js.map +1 -0
  138. package/dist/esm/tracing/EimerNoopTracer.js +23 -0
  139. package/dist/esm/tracing/EimerNoopTracer.js.map +1 -0
  140. package/dist/esm/tracing/EimerPublishingTracerBackend.js +16 -0
  141. package/dist/esm/tracing/EimerPublishingTracerBackend.js.map +1 -0
  142. package/dist/esm/tracing/EimerTraceSubscriber.js +19 -0
  143. package/dist/esm/tracing/EimerTraceSubscriber.js.map +1 -0
  144. package/dist/esm/tracing/EimerTracer.js +55 -0
  145. package/dist/esm/tracing/EimerTracer.js.map +1 -0
  146. package/dist/esm/tracing/MemoryTracerBackend.js +20 -0
  147. package/dist/esm/tracing/MemoryTracerBackend.js.map +1 -0
  148. package/dist/esm/tracing/NoopTracer.js +30 -0
  149. package/dist/esm/tracing/NoopTracer.js.map +1 -0
  150. package/dist/esm/tracing/index.js +9 -0
  151. package/dist/esm/tracing/index.js.map +1 -0
  152. package/dist/esm/tracing/now.js +11 -0
  153. package/dist/esm/tracing/now.js.map +1 -0
  154. package/dist/esm/transports/EimerUtilityProcessTransport.js +29 -1
  155. package/dist/esm/transports/EimerUtilityProcessTransport.js.map +1 -1
  156. package/package.json +15 -1
@@ -0,0 +1,12 @@
1
+ import type { Logger } from '../eimer/Logger';
2
+ import type { TracerBackend } from '../eimer/TracerBackend';
3
+ import type { TraceSpan } from '../eimer/TraceSpan';
4
+ /**
5
+ * A `TracerBackend` that logs every recorded span via `Logger`
6
+ */
7
+ export declare class EimerLoggerTracerBackend implements TracerBackend {
8
+ private readonly logger;
9
+ constructor(logger?: Logger);
10
+ handleSpan(span: TraceSpan): void;
11
+ }
12
+ //# sourceMappingURL=EimerLoggerTracerBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerLoggerTracerBackend.d.ts","sourceRoot":"","sources":["../../../src/tracing/EimerLoggerTracerBackend.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,qBAAa,wBAAyB,YAAW,aAAa;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,CAAC,EAAE,MAAM;IAI3B,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;CAGpC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EimerLoggerTracerBackend = void 0;
4
+ const LogLevel_1 = require("../eimer/LogLevel");
5
+ const EimerLogger_1 = require("../logger/EimerLogger");
6
+ /**
7
+ * A `TracerBackend` that logs every recorded span via `Logger`
8
+ */
9
+ class EimerLoggerTracerBackend {
10
+ constructor(logger) {
11
+ this.logger = logger ?? new EimerLogger_1.EimerLogger(LogLevel_1.LogLevel.INFO, 'EimerLoggerTracerBackend');
12
+ }
13
+ handleSpan(span) {
14
+ this.logger.info(`${span.name} (${span.durationMs.toFixed(2)}ms)`, span);
15
+ }
16
+ }
17
+ exports.EimerLoggerTracerBackend = EimerLoggerTracerBackend;
18
+ //# sourceMappingURL=EimerLoggerTracerBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerLoggerTracerBackend.js","sourceRoot":"","sources":["../../../src/tracing/EimerLoggerTracerBackend.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAC7C,uDAAoD;AAMpD;;GAEG;AACH,MAAa,wBAAwB;IAGjC,YAAY,MAAe;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,yBAAW,CAAC,mBAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;IACvF,CAAC;IAED,UAAU,CAAC,IAAe;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7E,CAAC;CACJ;AAVD,4DAUC"}
@@ -0,0 +1,17 @@
1
+ import { TracerBackend } from 'src/eimer';
2
+ import type { IdGenerator } from '../eimer/IdGenerator';
3
+ import type { TraceContext } from '../eimer/TraceContext';
4
+ import type { Tracer } from '../eimer/Tracer';
5
+ /**
6
+ * `Tracer` that does nothing (except id generation)
7
+ * Saves a bunch of if-statements wherever a tracer is optional
8
+ */
9
+ export declare class EimerNoopTracer implements Tracer {
10
+ private readonly idGenerator;
11
+ constructor(idGenerator?: IdGenerator);
12
+ setBackend(_backend?: TracerBackend): void;
13
+ startSpan(_name: string, _metadata?: Record<string, unknown>, parent?: TraceContext): TraceContext;
14
+ endSpan(_tracedId?: string, _metadata?: Record<string, unknown>): void;
15
+ shutdown(): void;
16
+ }
17
+ //# sourceMappingURL=EimerNoopTracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerNoopTracer.d.ts","sourceRoot":"","sources":["../../../src/tracing/EimerNoopTracer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,MAAM;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,WAAW,CAAC,EAAE,WAAW;IAIrC,UAAU,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,IAAI;IAI1C,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY;IAIlG,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAItE,QAAQ,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EimerNoopTracer = void 0;
4
+ const EimerIdGenerator_1 = require("../id-generator/EimerIdGenerator");
5
+ /**
6
+ * `Tracer` that does nothing (except id generation)
7
+ * Saves a bunch of if-statements wherever a tracer is optional
8
+ */
9
+ class EimerNoopTracer {
10
+ constructor(idGenerator) {
11
+ this.idGenerator = idGenerator ?? new EimerIdGenerator_1.EimerIdGenerator();
12
+ }
13
+ setBackend(_backend) {
14
+ // no-op
15
+ }
16
+ startSpan(_name, _metadata, parent) {
17
+ return { traceId: parent?.traceId ?? this.idGenerator.generateId(), spanId: this.idGenerator.generateId() };
18
+ }
19
+ endSpan(_tracedId, _metadata) {
20
+ // no-op
21
+ }
22
+ shutdown() {
23
+ // no-op
24
+ }
25
+ }
26
+ exports.EimerNoopTracer = EimerNoopTracer;
27
+ //# sourceMappingURL=EimerNoopTracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerNoopTracer.js","sourceRoot":"","sources":["../../../src/tracing/EimerNoopTracer.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AAQpE;;;GAGG;AACH,MAAa,eAAe;IAGxB,YAAY,WAAyB;QACjC,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,mCAAgB,EAAE,CAAC;IAC7D,CAAC;IAED,UAAU,CAAC,QAAwB;QAC/B,QAAQ;IACZ,CAAC;IAED,SAAS,CAAC,KAAa,EAAE,SAAmC,EAAE,MAAqB;QAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC;IAChH,CAAC;IAED,OAAO,CAAC,SAAkB,EAAE,SAAmC;QAC3D,QAAQ;IACZ,CAAC;IAED,QAAQ;QACJ,QAAQ;IACZ,CAAC;CACJ;AAtBD,0CAsBC"}
@@ -0,0 +1,17 @@
1
+ import type { Eimer } from '../eimer/Eimer';
2
+ import type { Topic } from '../eimer/Topic';
3
+ import type { TracerBackend } from '../eimer/TracerBackend';
4
+ import type { TraceSpan } from '../eimer/TraceSpan';
5
+ /**
6
+ * A `TracerBackend` that sends forwards spans through through an Eimer instance
7
+ *
8
+ * This backend only *sends* spans - it should be paired with `EimerTraceSubscriber`
9
+ * elsewhere on the Eimer mesh to *receive* and process the spans.
10
+ */
11
+ export declare class EimerPublishingTracerBackend implements TracerBackend {
12
+ private readonly eimer;
13
+ private readonly topic;
14
+ constructor(eimer: Eimer, topic?: Topic);
15
+ handleSpan(span: TraceSpan): void;
16
+ }
17
+ //# sourceMappingURL=EimerPublishingTracerBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerPublishingTracerBackend.d.ts","sourceRoot":"","sources":["../../../src/tracing/EimerPublishingTracerBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;GAKG;AACH,qBAAa,4BAA6B,YAAW,aAAa;IAC9D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAElB,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,KAAsB;IAKvD,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;CAGpC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EimerPublishingTracerBackend = void 0;
4
+ /**
5
+ * A `TracerBackend` that sends forwards spans through through an Eimer instance
6
+ *
7
+ * This backend only *sends* spans - it should be paired with `EimerTraceSubscriber`
8
+ * elsewhere on the Eimer mesh to *receive* and process the spans.
9
+ */
10
+ class EimerPublishingTracerBackend {
11
+ constructor(eimer, topic = 'eimer.traces') {
12
+ this.eimer = eimer;
13
+ this.topic = topic;
14
+ }
15
+ handleSpan(span) {
16
+ this.eimer.publish(this.topic, span);
17
+ }
18
+ }
19
+ exports.EimerPublishingTracerBackend = EimerPublishingTracerBackend;
20
+ //# sourceMappingURL=EimerPublishingTracerBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerPublishingTracerBackend.js","sourceRoot":"","sources":["../../../src/tracing/EimerPublishingTracerBackend.ts"],"names":[],"mappings":";;;AAKA;;;;;GAKG;AACH,MAAa,4BAA4B;IAIrC,YAAY,KAAY,EAAE,QAAe,cAAc;QACnD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,UAAU,CAAC,IAAe;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;CACJ;AAZD,oEAYC"}
@@ -0,0 +1,17 @@
1
+ import type { Eimer } from '../eimer/Eimer';
2
+ import type { Topic } from '../eimer/Topic';
3
+ import type { TracerBackend } from '../eimer/TracerBackend';
4
+ /**
5
+ * The companion to `EimerPublishingTracerBackend`.
6
+ *
7
+ * Subscribes to the Eimer traces on `topic` and forwards every received
8
+ * `TraceSpan` into its configured `backend`
9
+ */
10
+ export declare class EimerTraceSubscriber {
11
+ private readonly backend;
12
+ private readonly unsubscribe;
13
+ constructor(eimer: Eimer, backend: TracerBackend, topic?: Topic);
14
+ /** Stop receiving spans and unsubscribe from `topic`. */
15
+ stop(): void;
16
+ }
17
+ //# sourceMappingURL=EimerTraceSubscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerTraceSubscriber.d.ts","sourceRoot":"","sources":["../../../src/tracing/EimerTraceSubscriber.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAE7B,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,GAAE,KAAsB;IAO/E,yDAAyD;IACzD,IAAI,IAAI,IAAI;CAGf"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EimerTraceSubscriber = void 0;
4
+ /**
5
+ * The companion to `EimerPublishingTracerBackend`.
6
+ *
7
+ * Subscribes to the Eimer traces on `topic` and forwards every received
8
+ * `TraceSpan` into its configured `backend`
9
+ */
10
+ class EimerTraceSubscriber {
11
+ constructor(eimer, backend, topic = 'eimer.traces') {
12
+ this.backend = backend;
13
+ this.unsubscribe = eimer.subscribe(topic, (payload) => {
14
+ this.backend.handleSpan(payload);
15
+ });
16
+ }
17
+ /** Stop receiving spans and unsubscribe from `topic`. */
18
+ stop() {
19
+ this.unsubscribe();
20
+ }
21
+ }
22
+ exports.EimerTraceSubscriber = EimerTraceSubscriber;
23
+ //# sourceMappingURL=EimerTraceSubscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerTraceSubscriber.js","sourceRoot":"","sources":["../../../src/tracing/EimerTraceSubscriber.ts"],"names":[],"mappings":";;;AAKA;;;;;GAKG;AACH,MAAa,oBAAoB;IAI7B,YAAY,KAAY,EAAE,OAAsB,EAAE,QAAe,cAAc;QAC3E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;YAClD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAoB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,yDAAyD;IACzD,IAAI;QACA,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;CACJ;AAfD,oDAeC"}
@@ -0,0 +1,21 @@
1
+ import type { IdGenerator } from '../eimer/IdGenerator';
2
+ import type { TraceContext } from '../eimer/TraceContext';
3
+ import type { Tracer } from '../eimer/Tracer';
4
+ import type { TracerBackend } from '../eimer/TracerBackend';
5
+ /**
6
+ * A reference `Tracer` implementation.
7
+ *
8
+ * Keeps open spans in memory until they are "end"-ed and then
9
+ * forwards them to its `TracerBackend`
10
+ */
11
+ export declare class EimerTracer implements Tracer {
12
+ private backend;
13
+ private readonly idGenerator;
14
+ private readonly openSpans;
15
+ constructor(backend?: TracerBackend, idGenerator?: IdGenerator);
16
+ setBackend(backend: TracerBackend): void;
17
+ startSpan(name: string, metadata?: Record<string, unknown>, parent?: TraceContext): TraceContext;
18
+ endSpan(spanId: string, metadata?: Record<string, unknown>): void;
19
+ shutdown(): void;
20
+ }
21
+ //# sourceMappingURL=EimerTracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerTracer.d.ts","sourceRoot":"","sources":["../../../src/tracing/EimerTracer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,MAAM;IACtC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;gBAEnD,OAAO,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,WAAW;IAK9D,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY;IAehG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAqBjE,QAAQ,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EimerTracer = void 0;
4
+ const now_1 = require("./now");
5
+ const MemoryTracerBackend_1 = require("./MemoryTracerBackend");
6
+ const EimerIdGenerator_1 = require("../id-generator/EimerIdGenerator");
7
+ /**
8
+ * A reference `Tracer` implementation.
9
+ *
10
+ * Keeps open spans in memory until they are "end"-ed and then
11
+ * forwards them to its `TracerBackend`
12
+ */
13
+ class EimerTracer {
14
+ constructor(backend, idGenerator) {
15
+ this.openSpans = new Map();
16
+ this.backend = backend ?? new MemoryTracerBackend_1.MemoryTracerBackend();
17
+ this.idGenerator = idGenerator ?? new EimerIdGenerator_1.EimerIdGenerator();
18
+ }
19
+ setBackend(backend) {
20
+ this.backend = backend;
21
+ }
22
+ startSpan(name, metadata, parent) {
23
+ const traceId = parent?.traceId ?? this.idGenerator.generateId();
24
+ const spanId = this.idGenerator.generateId();
25
+ this.openSpans.set(spanId, {
26
+ traceId,
27
+ spanId,
28
+ ...(parent?.spanId ? { parentSpanId: parent?.spanId } : {}),
29
+ name,
30
+ ...(metadata ? { metadata } : {}),
31
+ startedAt: (0, now_1.now)(),
32
+ durationMs: 0,
33
+ });
34
+ return { traceId, spanId };
35
+ }
36
+ endSpan(spanId, metadata) {
37
+ const openSpan = this.openSpans.get(spanId);
38
+ if (!openSpan) {
39
+ return;
40
+ }
41
+ this.openSpans.delete(spanId);
42
+ const mergedMetadata = (openSpan.metadata || metadata) ? { ...openSpan.metadata, ...metadata } : undefined;
43
+ const span = {
44
+ traceId: openSpan.traceId,
45
+ spanId,
46
+ ...(openSpan.parentSpanId ? { parentSpanId: openSpan.parentSpanId } : {}),
47
+ name: openSpan.name,
48
+ ...(mergedMetadata ? { metadata: mergedMetadata } : {}),
49
+ startedAt: openSpan.startedAt,
50
+ durationMs: (0, now_1.now)() - openSpan.startedAt,
51
+ };
52
+ this.backend.handleSpan(span);
53
+ }
54
+ shutdown() {
55
+ this.backend.shutdown?.();
56
+ }
57
+ }
58
+ exports.EimerTracer = EimerTracer;
59
+ //# sourceMappingURL=EimerTracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EimerTracer.js","sourceRoot":"","sources":["../../../src/tracing/EimerTracer.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,+DAA4D;AAE5D,uEAAoE;AAQpE;;;;;GAKG;AACH,MAAa,WAAW;IAKpB,YAAY,OAAuB,EAAE,WAAyB;QAF7C,cAAS,GAA2B,IAAI,GAAG,EAAE,CAAC;QAG3D,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,yCAAmB,EAAE,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,mCAAgB,EAAE,CAAC;IAC7D,CAAC;IAED,UAAU,CAAC,OAAsB;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,QAAkC,EAAE,MAAqB;QAC7E,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;YACvB,OAAO;YACP,MAAM;YACN,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI;YACJ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,SAAS,EAAE,IAAA,SAAG,GAAE;YAChB,UAAU,EAAE,CAAC;SAChB,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,MAAc,EAAE,QAAkC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO;QACX,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE9B,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAE3G,MAAM,IAAI,GAAc;YACpB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,MAAM;YACN,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,UAAU,EAAE,IAAA,SAAG,GAAE,GAAG,QAAQ,CAAC,SAAS;SACzC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9B,CAAC;CACJ;AArDD,kCAqDC"}
@@ -0,0 +1,14 @@
1
+ import type { TracerBackend } from '../eimer/TracerBackend';
2
+ import type { TraceSpan } from '../eimer/TraceSpan';
3
+ /**
4
+ * A `TracerBackend` that stores spans in Memory
5
+ *
6
+ * You can extract them with `getRecords`
7
+ */
8
+ export declare class MemoryTracerBackend implements TracerBackend {
9
+ private readonly spans;
10
+ handleSpan(span: TraceSpan): void;
11
+ getRecords(): TraceSpan[];
12
+ clear(): void;
13
+ }
14
+ //# sourceMappingURL=MemoryTracerBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryTracerBackend.d.ts","sourceRoot":"","sources":["../../../src/tracing/MemoryTracerBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IAEzC,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAIjC,UAAU,IAAI,SAAS,EAAE;IAIzB,KAAK,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemoryTracerBackend = void 0;
4
+ /**
5
+ * A `TracerBackend` that stores spans in Memory
6
+ *
7
+ * You can extract them with `getRecords`
8
+ */
9
+ class MemoryTracerBackend {
10
+ constructor() {
11
+ this.spans = [];
12
+ }
13
+ handleSpan(span) {
14
+ this.spans.push(span);
15
+ }
16
+ getRecords() {
17
+ return [...this.spans];
18
+ }
19
+ clear() {
20
+ this.spans.length = 0;
21
+ }
22
+ }
23
+ exports.MemoryTracerBackend = MemoryTracerBackend;
24
+ //# sourceMappingURL=MemoryTracerBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryTracerBackend.js","sourceRoot":"","sources":["../../../src/tracing/MemoryTracerBackend.ts"],"names":[],"mappings":";;;AAGA;;;;GAIG;AACH,MAAa,mBAAmB;IAAhC;QACqB,UAAK,GAAgB,EAAE,CAAC;IAa7C,CAAC;IAXG,UAAU,CAAC,IAAe;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;CACJ;AAdD,kDAcC"}
@@ -0,0 +1,16 @@
1
+ import type { IdGenerator } from '../eimer/IdGenerator';
2
+ import type { TraceContext } from '../eimer/TraceContext';
3
+ import type { Tracer } from '../eimer/Tracer';
4
+ /**
5
+ * `Tracer` that does nothing (except id generation)
6
+ * Saves a bunch of if's wherever a tracer is optional
7
+ */
8
+ export declare class EimerNoopTracer implements Tracer {
9
+ private readonly idGenerator;
10
+ constructor(idGenerator?: IdGenerator);
11
+ setBackend(): void;
12
+ startTrace(name: string, metadata?: Record<string, unknown>, parent?: TraceContext): TraceContext;
13
+ endSpan(): void;
14
+ shutdown(): void;
15
+ }
16
+ //# sourceMappingURL=NoopTracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoopTracer.d.ts","sourceRoot":"","sources":["../../../src/tracing/NoopTracer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,MAAM;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,WAAW,CAAC,EAAE,WAAW;IAIrC,UAAU,IAAI,IAAI;IAIlB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY;IAIjG,OAAO,IAAI,IAAI;IAIf,QAAQ,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EimerNoopTracer = void 0;
4
+ const EimerIdGenerator_1 = require("../id-generator/EimerIdGenerator");
5
+ /**
6
+ * `Tracer` that does nothing (except id generation)
7
+ * Saves a bunch of if's wherever a tracer is optional
8
+ */
9
+ class EimerNoopTracer {
10
+ constructor(idGenerator) {
11
+ this.idGenerator = idGenerator ?? new EimerIdGenerator_1.EimerIdGenerator();
12
+ }
13
+ setBackend() {
14
+ // no-op
15
+ }
16
+ startTrace(name, metadata, parent) {
17
+ return parent || { traceId: this.idGenerator.generateId(), spanId: this.idGenerator.generateId() };
18
+ }
19
+ endSpan() {
20
+ // no-op
21
+ }
22
+ shutdown() {
23
+ // no-op
24
+ }
25
+ }
26
+ exports.EimerNoopTracer = EimerNoopTracer;
27
+ //# sourceMappingURL=NoopTracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoopTracer.js","sourceRoot":"","sources":["../../../src/tracing/NoopTracer.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AAMpE;;;GAGG;AACH,MAAa,eAAe;IAGxB,YAAY,WAAyB;QACjC,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,mCAAgB,EAAE,CAAC;IAC7D,CAAC;IAED,UAAU;QACN,QAAQ;IACZ,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,QAAkC,EAAE,MAAqB;QAC9E,OAAO,MAAM,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC;IACvG,CAAC;IAED,OAAO;QACH,QAAQ;IACZ,CAAC;IAED,QAAQ;QACJ,QAAQ;IACZ,CAAC;CACJ;AAtBD,0CAsBC"}
@@ -0,0 +1,9 @@
1
+ export * from './ConsoleLoggingTracerBackend';
2
+ export * from './EimerLoggerTracerBackend';
3
+ export * from './EimerPublishingTracerBackend';
4
+ export * from './EimerTracer';
5
+ export * from './EimerTraceSubscriber';
6
+ export * from './MemoryTracerBackend';
7
+ export * from './EimerNoopTracer';
8
+ export * from './now';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tracing/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,OAAO,CAAC"}
@@ -0,0 +1,25 @@
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("./ConsoleLoggingTracerBackend"), exports);
18
+ __exportStar(require("./EimerLoggerTracerBackend"), exports);
19
+ __exportStar(require("./EimerPublishingTracerBackend"), exports);
20
+ __exportStar(require("./EimerTracer"), exports);
21
+ __exportStar(require("./EimerTraceSubscriber"), exports);
22
+ __exportStar(require("./MemoryTracerBackend"), exports);
23
+ __exportStar(require("./EimerNoopTracer"), exports);
24
+ __exportStar(require("./now"), exports);
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tracing/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,6DAA2C;AAC3C,iEAA+C;AAC/C,gDAA8B;AAC9B,yDAAuC;AACvC,wDAAsC;AACtC,oDAAkC;AAClC,wCAAsB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Returns a timestamp (milliseconds since the Unix epoch) accurate enough for trace timing
3
+ *
4
+ * `Date.now()` is low-resolution and affected by adjustments of the system clock.
5
+ *
6
+ * Therefore we use `performance.now()` and add `performance.timeOrigin` to make it comparable across processes.
7
+ */
8
+ export declare function now(): number;
9
+ //# sourceMappingURL=now.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"now.d.ts","sourceRoot":"","sources":["../../../src/tracing/now.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,GAAG,IAAI,MAAM,CAE5B"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.now = now;
4
+ /**
5
+ * Returns a timestamp (milliseconds since the Unix epoch) accurate enough for trace timing
6
+ *
7
+ * `Date.now()` is low-resolution and affected by adjustments of the system clock.
8
+ *
9
+ * Therefore we use `performance.now()` and add `performance.timeOrigin` to make it comparable across processes.
10
+ */
11
+ function now() {
12
+ return performance.timeOrigin + performance.now();
13
+ }
14
+ //# sourceMappingURL=now.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"now.js","sourceRoot":"","sources":["../../../src/tracing/now.ts"],"names":[],"mappings":";;AAOA,kBAEC;AATD;;;;;;GAMG;AACH,SAAgB,GAAG;IACf,OAAO,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;AACtD,CAAC"}
@@ -4,8 +4,11 @@ import { EimerMessagePortTransport, EimerMessagePortTransportDependencies, Eimer
4
4
  * - `utilityProcess` (Electron.UtilityProcess) in the main process
5
5
  * - `process.parentPort` (Electron.ParentPort) inside the utility process
6
6
  *
7
- * Both satisfy eimer's MessagePort duck-type at runtime; this interface exists
8
- * so callers don't need an `as unknown as MessagePort` cast.
7
+ * Note that the two sides are *not* symmetric at runtime: `UtilityProcess`
8
+ * delivers the raw message to its `'message'` listener, while `ParentPort`
9
+ * wraps it in a `MessageEvent` (`{ data, ports }`). `EimerUtilityProcessTransport`
10
+ * unwraps that `MessageEvent` shape internally so callers can use this type on
11
+ * both ends without worrying about the discrepancy.
9
12
  */
10
13
  export interface UtilityProcessPort {
11
14
  postMessage(message: any): void;
@@ -1 +1 @@
1
- {"version":3,"file":"EimerUtilityProcessTransport.d.ts","sourceRoot":"","sources":["../../../src/transports/EimerUtilityProcessTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,qCAAqC,EAAE,gCAAgC,EAAe,MAAM,6BAA6B,CAAC;AAE9J;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IAChC,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,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,mCAAoC,SAAQ,gCAAgC;CAAG;AAEhG,MAAM,WAAW,wCAAyC,SAAQ,qCAAqC;CAAG;AAE1G;;;;;;;GAOG;AACH,qBAAa,4BAA6B,SAAQ,yBAAyB;gBAC3D,IAAI,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,mCAAmC,EAAE,YAAY,CAAC,EAAE,wCAAwC;CAG/I"}
1
+ {"version":3,"file":"EimerUtilityProcessTransport.d.ts","sourceRoot":"","sources":["../../../src/transports/EimerUtilityProcessTransport.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,qCAAqC,EAAE,gCAAgC,EAAe,MAAM,6BAA6B,CAAC;AAE9J;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IAChC,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,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,mCAAoC,SAAQ,gCAAgC;CAAG;AAEhG,MAAM,WAAW,wCAAyC,SAAQ,qCAAqC;CAAG;AA+B1G;;;;;;;GAOG;AACH,qBAAa,4BAA6B,SAAQ,yBAAyB;gBAC3D,IAAI,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,mCAAmC,EAAE,YAAY,CAAC,EAAE,wCAAwC;CAG/I"}
@@ -1,7 +1,35 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EimerUtilityProcessTransport = void 0;
4
+ const EimerMessage_1 = require("../eimer/EimerMessage");
4
5
  const EimerMessagePortTransport_1 = require("./EimerMessagePortTransport");
6
+ /**
7
+ * Wraps a `UtilityProcessPort` so that `'message'` listeners always receive the
8
+ * raw eimer message, regardless of whether the underlying port delivers it directly
9
+ * (`Electron.UtilityProcess`) or wrapped in a `MessageEvent` (`Electron.ParentPort`).
10
+ */
11
+ class MessageEventUnwrappingPort {
12
+ constructor(port) {
13
+ this.port = port;
14
+ }
15
+ postMessage(message) {
16
+ this.port.postMessage(message);
17
+ }
18
+ on(event, handler) {
19
+ this.port.on(event, (received) => {
20
+ if (!EimerMessage_1.EimerMessage.isEimerMessage(received) && received !== null && typeof received === 'object' && 'data' in received) {
21
+ handler(received.data);
22
+ return;
23
+ }
24
+ handler(received);
25
+ });
26
+ return this;
27
+ }
28
+ off(event, handler) {
29
+ this.port.off?.(event, handler);
30
+ return this;
31
+ }
32
+ }
5
33
  /**
6
34
  * Eimer UtilityProcess Transport
7
35
  *
@@ -12,7 +40,7 @@ const EimerMessagePortTransport_1 = require("./EimerMessagePortTransport");
12
40
  */
13
41
  class EimerUtilityProcessTransport extends EimerMessagePortTransport_1.EimerMessagePortTransport {
14
42
  constructor(port, options, dependencies) {
15
- super(port, { ...options, logModuleName: options?.logModuleName ?? 'EimerUtilityProcessTransport' }, dependencies);
43
+ super(new MessageEventUnwrappingPort(port), { ...options, logModuleName: options?.logModuleName ?? 'EimerUtilityProcessTransport' }, dependencies);
16
44
  }
17
45
  }
18
46
  exports.EimerUtilityProcessTransport = EimerUtilityProcessTransport;
@@ -1 +1 @@
1
- {"version":3,"file":"EimerUtilityProcessTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerUtilityProcessTransport.ts"],"names":[],"mappings":";;;AAAA,2EAA8J;AAoB9J;;;;;;;GAOG;AACH,MAAa,4BAA6B,SAAQ,qDAAyB;IACvE,YAAY,IAAwB,EAAE,OAA6C,EAAE,YAAuD;QACxI,KAAK,CAAC,IAAmB,EAAE,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,8BAA8B,EAAE,EAAE,YAAY,CAAC,CAAC;IACtI,CAAC;CACJ;AAJD,oEAIC"}
1
+ {"version":3,"file":"EimerUtilityProcessTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerUtilityProcessTransport.ts"],"names":[],"mappings":";;;AAAA,wDAAqD;AAErD,2EAA8J;AAuB9J;;;;GAIG;AACH,MAAM,0BAA0B;IAC5B,YAA6B,IAAwB;QAAxB,SAAI,GAAJ,IAAI,CAAoB;IAAG,CAAC;IAEzD,WAAW,CAAC,OAAY;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,EAAE,CAAC,KAAgB,EAAE,OAA+B;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,QAAa,EAAQ,EAAE;YACxC,IAAI,CAAC,2BAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACpH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO;YACX,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,KAAgB,EAAE,OAA+B;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,MAAa,4BAA6B,SAAQ,qDAAyB;IACvE,YAAY,IAAwB,EAAE,OAA6C,EAAE,YAAuD;QACxI,KAAK,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAgB,EAAE,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,8BAA8B,EAAE,EAAE,YAAY,CAAC,CAAC;IACtK,CAAC;CACJ;AAJD,oEAIC"}
@@ -4,6 +4,7 @@ import { EimerIdGenerator } from '../id-generator/EimerIdGenerator';
4
4
  import { EimerLogger } from '../logger/EimerLogger';
5
5
  import { EimerMessageBus } from '../message-bus/EimerMessageBus';
6
6
  import { EimerRpcManager } from '../rpc/EimerRpcManager';
7
+ import { EimerNoopTracer } from '../tracing/EimerNoopTracer';
7
8
  /**
8
9
  * Eimer main class
9
10
  * This class represents an instance of a "node" on the Eimer "network".
@@ -28,8 +29,9 @@ export class Eimer {
28
29
  this.nodeId = nodeId;
29
30
  this.idGenerator = dependencies?.idGenerator ?? new EimerIdGenerator();
30
31
  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);
32
+ this.tracer = dependencies?.tracer ?? new EimerNoopTracer();
33
+ this.messageBus = dependencies?.messageBus ?? new EimerMessageBus(this.nodeId, options, { tracer: this.tracer });
34
+ this.rpcManager = dependencies?.rpcManager ?? new EimerRpcManager(this.nodeId, this.messageBus, options, { tracer: this.tracer });
33
35
  }
34
36
  /**
35
37
  * Connect this Eimer instance to a `Transport`
@@ -53,12 +55,13 @@ export class Eimer {
53
55
  * Will throw on errors from handler
54
56
  * @param method name of method / rpc handler
55
57
  * @param params optional params object
56
- * @param timeout override timeout from constructor options for this single call
58
+ * @param timeoutMs override timeout, in milliseconds, from constructor options for this single call
59
+ * @param meta optional metadata to attach to the request
57
60
  * @returns result from invoked handler
58
61
  */
59
- async callRpc(method, params, timeout) {
62
+ async callRpc(method, params, timeoutMs, meta) {
60
63
  this.logger.debug('Making RPC call', { method, params });
61
- return this.rpcManager.call(method, params, timeout);
64
+ return this.rpcManager.call(method, params, timeoutMs, meta);
62
65
  }
63
66
  /**
64
67
  * Register an RPC handler
@@ -84,10 +87,17 @@ export class Eimer {
84
87
  * Will send payload to all subscribers on the topic
85
88
  * @param topic name of topic - subscribers can subscribe to it
86
89
  * @param payload payload will be sent to subscribers
90
+ * @param meta optional metadata to attach to the message
87
91
  */
88
- publish(topic, payload) {
92
+ publish(topic, payload, meta) {
89
93
  this.logger.debug('Publishing message', { topic });
90
- this.messageBus.publish(new EimerMessage(this.idGenerator.generateId(), this.nodeId, topic, payload));
94
+ if (meta?.collectEimerTraces && meta.trace) {
95
+ meta.trace = this.tracer.startSpan(topic, { isEimerTrace: true, node: this.nodeId, component: 'Eimer', op: 'publish' }, meta.trace);
96
+ }
97
+ this.messageBus.publish(new EimerMessage(this.idGenerator.generateId(), this.nodeId, topic, payload, meta));
98
+ if (meta?.collectEimerTraces && meta.trace) {
99
+ this.tracer.endSpan(meta?.trace?.spanId);
100
+ }
91
101
  }
92
102
  /**
93
103
  * Subscribe a handler function to a topic
@@ -99,7 +109,14 @@ export class Eimer {
99
109
  subscribe(topic, payloadHandler) {
100
110
  this.logger.debug('Subscribing to topic', { topic });
101
111
  const messageHandler = (message) => {
102
- payloadHandler(message.payload);
112
+ let trace = message.meta?.trace;
113
+ if (message.meta?.collectEimerTraces && trace) {
114
+ trace = this.tracer.startSpan(topic, { isEimerTrace: true, node: this.nodeId, component: 'Eimer', op: 'handlePayload' }, trace);
115
+ }
116
+ payloadHandler(message.payload, trace ? { ...message.meta, trace } : message.meta);
117
+ if (message.meta?.collectEimerTraces && trace) {
118
+ this.tracer.endSpan(trace.spanId);
119
+ }
103
120
  };
104
121
  // Get or create the topic's handler map
105
122
  let topicHandlerMap = this.handlerMap.get(topic);
@@ -160,12 +177,13 @@ export class Eimer {
160
177
  }
161
178
  /**
162
179
  * Shutdown this Eimer instance
163
- * Will reject all RPC requests that are still waiting for a response
164
- * and shutdown the MessageBus
180
+ * Will reject all RPC requests that are still waiting for a response,
181
+ * shutdown the MessageBus, and shutdown the Tracer
165
182
  */
166
183
  shutdown() {
167
184
  this.rpcManager.shutdown();
168
185
  this.messageBus.shutdown();
186
+ this.tracer.shutdown();
169
187
  }
170
188
  }
171
189
  //# sourceMappingURL=Eimer.js.map