tracebeam-sdk 0.2.0 → 0.4.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/dist/index.d.mts +38 -3
- package/dist/index.d.ts +38 -3
- package/dist/index.js +185 -14
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +183 -14
- package/dist/index.mjs.map +1 -1
- package/dist/integrations/express.d.mts +8 -2
- package/dist/integrations/express.d.ts +8 -2
- package/dist/integrations/express.js +49 -9
- package/dist/integrations/express.js.map +1 -1
- package/dist/integrations/express.mjs +47 -9
- package/dist/integrations/express.mjs.map +1 -1
- package/dist/integrations/fastify.d.mts +5 -20
- package/dist/integrations/fastify.d.ts +5 -20
- package/dist/integrations/fastify.js +68 -1
- package/dist/integrations/fastify.js.map +1 -1
- package/dist/integrations/fastify.mjs +66 -1
- package/dist/integrations/fastify.mjs.map +1 -1
- package/dist/{sdk-bh44OWR9.d.mts → sdk-PSGN9S91.d.mts} +12 -0
- package/dist/{sdk-bh44OWR9.d.ts → sdk-PSGN9S91.d.ts} +12 -0
- package/package.json +4 -2
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { T as TraceBeamConfig } from './sdk-
|
|
2
|
-
export { C as CaptureOptions, d as Event, e as EventBatch, E as EventLevel, c as Extra, b as Tags, a as TraceBeamSDK, g as TransportErrorResponse, h as TransportResponse, f as TransportSuccessResponse } from './sdk-
|
|
1
|
+
import { T as TraceBeamConfig } from './sdk-PSGN9S91.mjs';
|
|
2
|
+
export { C as CaptureOptions, d as Event, e as EventBatch, E as EventLevel, c as Extra, b as Tags, a as TraceBeamSDK, g as TransportErrorResponse, h as TransportResponse, f as TransportSuccessResponse } from './sdk-PSGN9S91.mjs';
|
|
3
|
+
import { MeterProvider, Histogram, Counter, UpDownCounter } from '@opentelemetry/api';
|
|
4
|
+
import '@opentelemetry/sdk-metrics';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Default configuration values
|
|
@@ -33,4 +35,37 @@ declare function mergeConfig(config: TraceBeamConfig): Required<TraceBeamConfig>
|
|
|
33
35
|
*/
|
|
34
36
|
declare function validateConfig(config: TraceBeamConfig): void;
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
/**
|
|
39
|
+
* HTTP metrics for request tracking
|
|
40
|
+
* All metrics are non-blocking and use OTLP semantic conventions
|
|
41
|
+
*/
|
|
42
|
+
interface HttpMetrics {
|
|
43
|
+
/** Request duration histogram */
|
|
44
|
+
duration: Histogram;
|
|
45
|
+
/** Total request count */
|
|
46
|
+
requestCount: Counter;
|
|
47
|
+
/** Error count (5xx responses) */
|
|
48
|
+
errorCount: Counter;
|
|
49
|
+
/** Currently active requests */
|
|
50
|
+
activeRequests: UpDownCounter;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create HTTP metrics instruments
|
|
54
|
+
*/
|
|
55
|
+
declare function createHttpMetrics(meterProvider: MeterProvider, prefix?: string): HttpMetrics;
|
|
56
|
+
/**
|
|
57
|
+
* Common attributes for HTTP metrics
|
|
58
|
+
*/
|
|
59
|
+
interface HttpMetricAttributes {
|
|
60
|
+
'http.method': string;
|
|
61
|
+
'http.route': string;
|
|
62
|
+
'http.status_code': number;
|
|
63
|
+
'http.scheme'?: string;
|
|
64
|
+
'net.host.name'?: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Record HTTP request metrics (call at request end)
|
|
68
|
+
*/
|
|
69
|
+
declare function recordHttpRequest(metrics: HttpMetrics, durationMs: number, attributes: HttpMetricAttributes): void;
|
|
70
|
+
|
|
71
|
+
export { ConfigError, DEFAULT_CONFIG, type HttpMetricAttributes, type HttpMetrics, TraceBeamConfig, createHttpMetrics, loadConfigFromEnv, mergeConfig, recordHttpRequest, validateConfig };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { T as TraceBeamConfig } from './sdk-
|
|
2
|
-
export { C as CaptureOptions, d as Event, e as EventBatch, E as EventLevel, c as Extra, b as Tags, a as TraceBeamSDK, g as TransportErrorResponse, h as TransportResponse, f as TransportSuccessResponse } from './sdk-
|
|
1
|
+
import { T as TraceBeamConfig } from './sdk-PSGN9S91.js';
|
|
2
|
+
export { C as CaptureOptions, d as Event, e as EventBatch, E as EventLevel, c as Extra, b as Tags, a as TraceBeamSDK, g as TransportErrorResponse, h as TransportResponse, f as TransportSuccessResponse } from './sdk-PSGN9S91.js';
|
|
3
|
+
import { MeterProvider, Histogram, Counter, UpDownCounter } from '@opentelemetry/api';
|
|
4
|
+
import '@opentelemetry/sdk-metrics';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Default configuration values
|
|
@@ -33,4 +35,37 @@ declare function mergeConfig(config: TraceBeamConfig): Required<TraceBeamConfig>
|
|
|
33
35
|
*/
|
|
34
36
|
declare function validateConfig(config: TraceBeamConfig): void;
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
/**
|
|
39
|
+
* HTTP metrics for request tracking
|
|
40
|
+
* All metrics are non-blocking and use OTLP semantic conventions
|
|
41
|
+
*/
|
|
42
|
+
interface HttpMetrics {
|
|
43
|
+
/** Request duration histogram */
|
|
44
|
+
duration: Histogram;
|
|
45
|
+
/** Total request count */
|
|
46
|
+
requestCount: Counter;
|
|
47
|
+
/** Error count (5xx responses) */
|
|
48
|
+
errorCount: Counter;
|
|
49
|
+
/** Currently active requests */
|
|
50
|
+
activeRequests: UpDownCounter;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create HTTP metrics instruments
|
|
54
|
+
*/
|
|
55
|
+
declare function createHttpMetrics(meterProvider: MeterProvider, prefix?: string): HttpMetrics;
|
|
56
|
+
/**
|
|
57
|
+
* Common attributes for HTTP metrics
|
|
58
|
+
*/
|
|
59
|
+
interface HttpMetricAttributes {
|
|
60
|
+
'http.method': string;
|
|
61
|
+
'http.route': string;
|
|
62
|
+
'http.status_code': number;
|
|
63
|
+
'http.scheme'?: string;
|
|
64
|
+
'net.host.name'?: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Record HTTP request metrics (call at request end)
|
|
68
|
+
*/
|
|
69
|
+
declare function recordHttpRequest(metrics: HttpMetrics, durationMs: number, attributes: HttpMetricAttributes): void;
|
|
70
|
+
|
|
71
|
+
export { ConfigError, DEFAULT_CONFIG, type HttpMetricAttributes, type HttpMetrics, TraceBeamConfig, createHttpMetrics, loadConfigFromEnv, mergeConfig, recordHttpRequest, validateConfig };
|
package/dist/index.js
CHANGED
|
@@ -33,8 +33,10 @@ __export(src_exports, {
|
|
|
33
33
|
ConfigError: () => ConfigError,
|
|
34
34
|
DEFAULT_CONFIG: () => DEFAULT_CONFIG,
|
|
35
35
|
TraceBeamSDK: () => TraceBeamSDK,
|
|
36
|
+
createHttpMetrics: () => createHttpMetrics,
|
|
36
37
|
loadConfigFromEnv: () => loadConfigFromEnv,
|
|
37
38
|
mergeConfig: () => mergeConfig,
|
|
39
|
+
recordHttpRequest: () => recordHttpRequest,
|
|
38
40
|
validateConfig: () => validateConfig
|
|
39
41
|
});
|
|
40
42
|
module.exports = __toCommonJS(src_exports);
|
|
@@ -473,6 +475,8 @@ var SimpleSpanProcessor = class {
|
|
|
473
475
|
// src/sdk.ts
|
|
474
476
|
var import_sdk_trace_node = require("@opentelemetry/sdk-trace-node");
|
|
475
477
|
var import_exporter_trace_otlp_http = require("@opentelemetry/exporter-trace-otlp-http");
|
|
478
|
+
var import_sdk_metrics = require("@opentelemetry/sdk-metrics");
|
|
479
|
+
var import_exporter_metrics_otlp_http = require("@opentelemetry/exporter-metrics-otlp-http");
|
|
476
480
|
var import_resources = require("@opentelemetry/resources");
|
|
477
481
|
var import_semantic_conventions = require("@opentelemetry/semantic-conventions");
|
|
478
482
|
|
|
@@ -749,10 +753,135 @@ function parseBoolEnv(name, defaultValue) {
|
|
|
749
753
|
return value.toLowerCase() === "true" || value === "1";
|
|
750
754
|
}
|
|
751
755
|
|
|
756
|
+
// src/metrics/runtime.ts
|
|
757
|
+
function registerRuntimeMetrics(meterProvider) {
|
|
758
|
+
const meter = meterProvider.getMeter("tracebeam-runtime");
|
|
759
|
+
const memoryUsage = meter.createObservableGauge("process.runtime.nodejs.memory.heap_used", {
|
|
760
|
+
description: "Heap memory used in bytes",
|
|
761
|
+
unit: "By"
|
|
762
|
+
});
|
|
763
|
+
const memoryTotal = meter.createObservableGauge("process.runtime.nodejs.memory.heap_total", {
|
|
764
|
+
description: "Total heap memory in bytes",
|
|
765
|
+
unit: "By"
|
|
766
|
+
});
|
|
767
|
+
const memoryRss = meter.createObservableGauge("process.runtime.nodejs.memory.rss", {
|
|
768
|
+
description: "Resident set size in bytes",
|
|
769
|
+
unit: "By"
|
|
770
|
+
});
|
|
771
|
+
const memoryExternal = meter.createObservableGauge("process.runtime.nodejs.memory.external", {
|
|
772
|
+
description: "External memory in bytes",
|
|
773
|
+
unit: "By"
|
|
774
|
+
});
|
|
775
|
+
meter.addBatchObservableCallback(
|
|
776
|
+
(observableResult) => {
|
|
777
|
+
const mem = process.memoryUsage();
|
|
778
|
+
observableResult.observe(memoryUsage, mem.heapUsed);
|
|
779
|
+
observableResult.observe(memoryTotal, mem.heapTotal);
|
|
780
|
+
observableResult.observe(memoryRss, mem.rss);
|
|
781
|
+
observableResult.observe(memoryExternal, mem.external);
|
|
782
|
+
},
|
|
783
|
+
[memoryUsage, memoryTotal, memoryRss, memoryExternal]
|
|
784
|
+
);
|
|
785
|
+
const cpuUser = meter.createObservableGauge("process.runtime.nodejs.cpu.user", {
|
|
786
|
+
description: "CPU user time in microseconds",
|
|
787
|
+
unit: "us"
|
|
788
|
+
});
|
|
789
|
+
const cpuSystem = meter.createObservableGauge("process.runtime.nodejs.cpu.system", {
|
|
790
|
+
description: "CPU system time in microseconds",
|
|
791
|
+
unit: "us"
|
|
792
|
+
});
|
|
793
|
+
meter.addBatchObservableCallback(
|
|
794
|
+
(observableResult) => {
|
|
795
|
+
const cpu = process.cpuUsage();
|
|
796
|
+
observableResult.observe(cpuUser, cpu.user);
|
|
797
|
+
observableResult.observe(cpuSystem, cpu.system);
|
|
798
|
+
},
|
|
799
|
+
[cpuUser, cpuSystem]
|
|
800
|
+
);
|
|
801
|
+
const eventLoopLag = meter.createObservableGauge("process.runtime.nodejs.event_loop.lag", {
|
|
802
|
+
description: "Event loop lag in milliseconds",
|
|
803
|
+
unit: "ms"
|
|
804
|
+
});
|
|
805
|
+
let lastCheck = process.hrtime.bigint();
|
|
806
|
+
let currentLag = 0;
|
|
807
|
+
const measureLag = () => {
|
|
808
|
+
const now = process.hrtime.bigint();
|
|
809
|
+
const expected = 1000n;
|
|
810
|
+
const actual = Number(now - lastCheck) / 1e6;
|
|
811
|
+
currentLag = Math.max(0, actual - 1);
|
|
812
|
+
lastCheck = now;
|
|
813
|
+
setImmediate(measureLag);
|
|
814
|
+
};
|
|
815
|
+
setImmediate(measureLag);
|
|
816
|
+
eventLoopLag.addCallback((observableResult) => {
|
|
817
|
+
observableResult.observe(currentLag);
|
|
818
|
+
});
|
|
819
|
+
const activeHandles = meter.createObservableGauge("process.runtime.nodejs.active_handles", {
|
|
820
|
+
description: "Number of active handles",
|
|
821
|
+
unit: "{handles}"
|
|
822
|
+
});
|
|
823
|
+
const activeRequests = meter.createObservableGauge("process.runtime.nodejs.active_requests", {
|
|
824
|
+
description: "Number of active requests",
|
|
825
|
+
unit: "{requests}"
|
|
826
|
+
});
|
|
827
|
+
meter.addBatchObservableCallback(
|
|
828
|
+
(observableResult) => {
|
|
829
|
+
const handles = process._getActiveHandles?.()?.length ?? 0;
|
|
830
|
+
const requests = process._getActiveRequests?.()?.length ?? 0;
|
|
831
|
+
observableResult.observe(activeHandles, handles);
|
|
832
|
+
observableResult.observe(activeRequests, requests);
|
|
833
|
+
},
|
|
834
|
+
[activeHandles, activeRequests]
|
|
835
|
+
);
|
|
836
|
+
const uptime = meter.createObservableGauge("process.runtime.nodejs.uptime", {
|
|
837
|
+
description: "Process uptime in seconds",
|
|
838
|
+
unit: "s"
|
|
839
|
+
});
|
|
840
|
+
uptime.addCallback((observableResult) => {
|
|
841
|
+
observableResult.observe(process.uptime());
|
|
842
|
+
});
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
// src/metrics/http.ts
|
|
846
|
+
function createHttpMetrics(meterProvider, prefix = "http.server") {
|
|
847
|
+
const meter = meterProvider.getMeter("tracebeam-http");
|
|
848
|
+
return {
|
|
849
|
+
duration: meter.createHistogram(`${prefix}.request.duration`, {
|
|
850
|
+
description: "Duration of HTTP requests",
|
|
851
|
+
unit: "ms"
|
|
852
|
+
}),
|
|
853
|
+
requestCount: meter.createCounter(`${prefix}.request.count`, {
|
|
854
|
+
description: "Total number of HTTP requests",
|
|
855
|
+
unit: "{requests}"
|
|
856
|
+
}),
|
|
857
|
+
errorCount: meter.createCounter(`${prefix}.error.count`, {
|
|
858
|
+
description: "Total number of HTTP errors (5xx)",
|
|
859
|
+
unit: "{errors}"
|
|
860
|
+
}),
|
|
861
|
+
activeRequests: meter.createUpDownCounter(`${prefix}.active_requests`, {
|
|
862
|
+
description: "Number of active HTTP requests",
|
|
863
|
+
unit: "{requests}"
|
|
864
|
+
})
|
|
865
|
+
};
|
|
866
|
+
}
|
|
867
|
+
function recordHttpRequest(metrics3, durationMs, attributes) {
|
|
868
|
+
const labels = {
|
|
869
|
+
"http.method": attributes["http.method"],
|
|
870
|
+
"http.route": attributes["http.route"],
|
|
871
|
+
"http.status_code": String(attributes["http.status_code"])
|
|
872
|
+
};
|
|
873
|
+
metrics3.duration.record(durationMs, labels);
|
|
874
|
+
metrics3.requestCount.add(1, labels);
|
|
875
|
+
if (attributes["http.status_code"] >= 500) {
|
|
876
|
+
metrics3.errorCount.add(1, labels);
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
|
|
752
880
|
// src/sdk.ts
|
|
753
881
|
var TraceBeamSDK = class _TraceBeamSDK {
|
|
754
882
|
config;
|
|
755
883
|
provider;
|
|
884
|
+
meterProvider;
|
|
756
885
|
tracer;
|
|
757
886
|
isInitialized = true;
|
|
758
887
|
globalTags = {};
|
|
@@ -765,39 +894,65 @@ var TraceBeamSDK = class _TraceBeamSDK {
|
|
|
765
894
|
validateConfig(config);
|
|
766
895
|
this.config = mergeConfig(config);
|
|
767
896
|
const baseUrl = this.config.endpoint.replace(/\/$/, "");
|
|
768
|
-
const
|
|
769
|
-
const
|
|
770
|
-
|
|
897
|
+
const traceExporterUrl = `${baseUrl}/v1/traces`;
|
|
898
|
+
const metricExporterUrl = `${baseUrl}/v1/metrics`;
|
|
899
|
+
const traceExporter = new import_exporter_trace_otlp_http.OTLPTraceExporter({
|
|
900
|
+
url: traceExporterUrl,
|
|
771
901
|
headers: {
|
|
772
902
|
"Authorization": `Bearer ${this.config.apiKey}`
|
|
773
903
|
}
|
|
774
904
|
});
|
|
775
905
|
const spanProcessors = [];
|
|
776
|
-
spanProcessors.push(new BatchSpanProcessor(
|
|
906
|
+
spanProcessors.push(new BatchSpanProcessor(traceExporter, {
|
|
777
907
|
maxExportBatchSize: this.config.batchSize,
|
|
778
908
|
scheduledDelayMillis: this.config.flushInterval
|
|
779
909
|
}));
|
|
780
910
|
if (this.config.debug) {
|
|
781
911
|
spanProcessors.push(new SimpleSpanProcessor(new ConsoleSpanExporter()));
|
|
782
|
-
console.debug("[tracebeam] Initialized OTLP", {
|
|
783
|
-
url:
|
|
912
|
+
console.debug("[tracebeam] Initialized OTLP Traces", {
|
|
913
|
+
url: traceExporterUrl,
|
|
784
914
|
projectId: this.config.projectId
|
|
785
915
|
});
|
|
786
916
|
}
|
|
917
|
+
const resource = (0, import_resources.resourceFromAttributes)({
|
|
918
|
+
[import_semantic_conventions.SemanticResourceAttributes.SERVICE_NAME]: this.config.projectId,
|
|
919
|
+
[import_semantic_conventions.SemanticResourceAttributes.SERVICE_VERSION]: this.config.environment,
|
|
920
|
+
[import_semantic_conventions.SemanticResourceAttributes.DEPLOYMENT_ENVIRONMENT]: this.config.environment,
|
|
921
|
+
"telemetry.sdk.language": "nodejs",
|
|
922
|
+
"telemetry.sdk.name": "tracebeam-sdk",
|
|
923
|
+
"telemetry.sdk.version": "0.2.1"
|
|
924
|
+
});
|
|
787
925
|
this.provider = new import_sdk_trace_node.NodeTracerProvider({
|
|
788
|
-
resource
|
|
789
|
-
[import_semantic_conventions.SemanticResourceAttributes.SERVICE_NAME]: this.config.projectId,
|
|
790
|
-
[import_semantic_conventions.SemanticResourceAttributes.SERVICE_VERSION]: this.config.environment,
|
|
791
|
-
[import_semantic_conventions.SemanticResourceAttributes.DEPLOYMENT_ENVIRONMENT]: this.config.environment,
|
|
792
|
-
"telemetry.sdk.language": "nodejs",
|
|
793
|
-
"telemetry.sdk.name": "tracebeam-sdk",
|
|
794
|
-
"telemetry.sdk.version": "0.2.0"
|
|
795
|
-
}),
|
|
926
|
+
resource,
|
|
796
927
|
spanProcessors
|
|
797
928
|
});
|
|
798
929
|
this.provider.register();
|
|
930
|
+
const metricExporter = new import_exporter_metrics_otlp_http.OTLPMetricExporter({
|
|
931
|
+
url: metricExporterUrl,
|
|
932
|
+
headers: {
|
|
933
|
+
"Authorization": `Bearer ${this.config.apiKey}`
|
|
934
|
+
}
|
|
935
|
+
});
|
|
936
|
+
this.meterProvider = new import_sdk_metrics.MeterProvider({
|
|
937
|
+
resource,
|
|
938
|
+
readers: [
|
|
939
|
+
new import_sdk_metrics.PeriodicExportingMetricReader({
|
|
940
|
+
exporter: metricExporter,
|
|
941
|
+
exportIntervalMillis: this.config.flushInterval
|
|
942
|
+
// Match config
|
|
943
|
+
})
|
|
944
|
+
]
|
|
945
|
+
});
|
|
946
|
+
api.metrics.setGlobalMeterProvider(this.meterProvider);
|
|
947
|
+
registerRuntimeMetrics(this.meterProvider);
|
|
948
|
+
if (this.config.debug) {
|
|
949
|
+
console.debug("[tracebeam] Initialized OTLP Metrics with runtime metrics", {
|
|
950
|
+
url: metricExporterUrl
|
|
951
|
+
});
|
|
952
|
+
}
|
|
799
953
|
registerInstrumentations({
|
|
800
954
|
tracerProvider: this.provider,
|
|
955
|
+
meterProvider: this.meterProvider,
|
|
801
956
|
instrumentations: [
|
|
802
957
|
(0, import_auto_instrumentations_node.getNodeAutoInstrumentations)({
|
|
803
958
|
// Disable some noisy instrumentations
|
|
@@ -812,6 +967,18 @@ var TraceBeamSDK = class _TraceBeamSDK {
|
|
|
812
967
|
const config = loadConfigFromEnv();
|
|
813
968
|
return new _TraceBeamSDK(config);
|
|
814
969
|
}
|
|
970
|
+
/**
|
|
971
|
+
* Get the OpenTelemetry Meter for creating custom metrics
|
|
972
|
+
*/
|
|
973
|
+
getMeter(name, version) {
|
|
974
|
+
return this.meterProvider.getMeter(name, version);
|
|
975
|
+
}
|
|
976
|
+
/**
|
|
977
|
+
* Get the MeterProvider for advanced metric creation
|
|
978
|
+
*/
|
|
979
|
+
getMeterProvider() {
|
|
980
|
+
return this.meterProvider;
|
|
981
|
+
}
|
|
815
982
|
/**
|
|
816
983
|
* Capture an exception/error
|
|
817
984
|
*/
|
|
@@ -908,10 +1075,12 @@ var TraceBeamSDK = class _TraceBeamSDK {
|
|
|
908
1075
|
}
|
|
909
1076
|
async flush() {
|
|
910
1077
|
await this.provider.forceFlush();
|
|
1078
|
+
await this.meterProvider.forceFlush();
|
|
911
1079
|
}
|
|
912
1080
|
async close() {
|
|
913
1081
|
this.isInitialized = false;
|
|
914
1082
|
await this.provider.shutdown();
|
|
1083
|
+
await this.meterProvider.shutdown();
|
|
915
1084
|
}
|
|
916
1085
|
isActive() {
|
|
917
1086
|
return this.isInitialized;
|
|
@@ -931,8 +1100,10 @@ var TraceBeamSDK = class _TraceBeamSDK {
|
|
|
931
1100
|
ConfigError,
|
|
932
1101
|
DEFAULT_CONFIG,
|
|
933
1102
|
TraceBeamSDK,
|
|
1103
|
+
createHttpMetrics,
|
|
934
1104
|
loadConfigFromEnv,
|
|
935
1105
|
mergeConfig,
|
|
1106
|
+
recordHttpRequest,
|
|
936
1107
|
validateConfig
|
|
937
1108
|
});
|
|
938
1109
|
//# sourceMappingURL=index.js.map
|