@r_masseater/vitest-otlp 0.0.0 → 0.0.2

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/setup.mjs DELETED
@@ -1,337 +0,0 @@
1
- import { t as FORWARD_KEY } from "./context-COyJBDQM.mjs";
2
- import { r as setReceiver } from "./store-DSDf4Wia.mjs";
3
- import { Array, Context, Effect, Exit, Layer, MutableRef, Option, Predicate, Record, Result, Schema, Scope, String as String$1, pipe } from "effect";
4
- import { afterAll, inject } from "vite-plus/test";
5
- import { connect, createServer } from "node:http2";
6
- import { NodeHttpServer, NodeHttpServerRequest } from "@effect/platform-node";
7
- import { HttpServer, HttpServerRequest, HttpServerResponse } from "effect/http";
8
- import { create, fromBinary, fromJson, toBinary, toJson } from "@bufbuild/protobuf";
9
- import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
10
- import { Base64, Hex } from "effect/encoding";
11
- // src/environment.ts
12
- const UNSET = "";
13
- const POINTED = {
14
- OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: UNSET,
15
- OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: UNSET,
16
- OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: UNSET,
17
- OTEL_TRACES_EXPORTER: "otlp",
18
- OTEL_METRICS_EXPORTER: "otlp",
19
- OTEL_LOGS_EXPORTER: "otlp"
20
- };
21
- const QUICK_EXPORT = {
22
- OTEL_BSP_SCHEDULE_DELAY: "50",
23
- OTEL_BLRP_SCHEDULE_DELAY: "50",
24
- OTEL_METRIC_EXPORT_INTERVAL: "100",
25
- OTEL_METRIC_EXPORT_TIMEOUT: "100"
26
- };
27
- const endpointFor = (address) => (env) => Option.match(Option.liftPredicate(env["OTEL_EXPORTER_OTLP_PROTOCOL"], (protocol) => protocol === "grpc"), {
28
- onNone: () => address.httpEndpoint,
29
- onSome: () => address.grpcEndpoint
30
- });
31
- const receiverEnvironment = (address) => (env) => ({
32
- ...pipe(QUICK_EXPORT, Record.filter((_value, name) => Predicate.isUndefined(env[name]))),
33
- ...POINTED,
34
- OTEL_EXPORTER_OTLP_ENDPOINT: endpointFor(address)(env)
35
- });
36
- // src/generated/opentelemetry/proto/common/v1/common_pb.ts
37
- /**
38
- * Describes the file opentelemetry/proto/common/v1/common.proto.
39
- */
40
- const file_opentelemetry_proto_common_v1_common = /*@__PURE__*/ fileDesc("CipvcGVudGVsZW1ldHJ5L3Byb3RvL2NvbW1vbi92MS9jb21tb24ucHJvdG8SHW9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxIq0CCghBbnlWYWx1ZRIWCgxzdHJpbmdfdmFsdWUYASABKAlIABIUCgpib29sX3ZhbHVlGAIgASgISAASEwoJaW50X3ZhbHVlGAMgASgDSAASFgoMZG91YmxlX3ZhbHVlGAQgASgBSAASQAoLYXJyYXlfdmFsdWUYBSABKAsyKS5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlSAASQwoMa3ZsaXN0X3ZhbHVlGAYgASgLMisub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0SAASFQoLYnl0ZXNfdmFsdWUYByABKAxIABIfChVzdHJpbmdfdmFsdWVfc3RyaW5kZXgYCCABKAVIAEIHCgV2YWx1ZSJFCgpBcnJheVZhbHVlEjcKBnZhbHVlcxgBIAMoCzInLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlIkcKDEtleVZhbHVlTGlzdBI3CgZ2YWx1ZXMYASADKAsyJy5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZSJlCghLZXlWYWx1ZRILCgNrZXkYASABKAkSNgoFdmFsdWUYAiABKAsyJy5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZRIUCgxrZXlfc3RyaW5kZXgYAyABKAUilAEKFEluc3RydW1lbnRhdGlvblNjb3BlEgwKBG5hbWUYASABKAkSDwoHdmVyc2lvbhgCIAEoCRI7CgphdHRyaWJ1dGVzGAMgAygLMicub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUSIAoYZHJvcHBlZF9hdHRyaWJ1dGVzX2NvdW50GAQgASgNIlgKCUVudGl0eVJlZhISCgpzY2hlbWFfdXJsGAEgASgJEgwKBHR5cGUYAiABKAkSDwoHaWRfa2V5cxgDIAMoCRIYChBkZXNjcmlwdGlvbl9rZXlzGAQgAygJQnsKIGlvLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxQgtDb21tb25Qcm90b1ABWihnby5vcGVudGVsZW1ldHJ5LmlvL3Byb3RvL290bHAvY29tbW9uL3YxqgIdT3BlblRlbGVtZXRyeS5Qcm90by5Db21tb24uVjFiBnByb3RvMw");
41
- // src/generated/opentelemetry/proto/resource/v1/resource_pb.ts
42
- /**
43
- * Describes the file opentelemetry/proto/resource/v1/resource.proto.
44
- */
45
- const file_opentelemetry_proto_resource_v1_resource = /*@__PURE__*/ fileDesc("Ci5vcGVudGVsZW1ldHJ5L3Byb3RvL3Jlc291cmNlL3YxL3Jlc291cmNlLnByb3RvEh9vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxIqgBCghSZXNvdXJjZRI7CgphdHRyaWJ1dGVzGAEgAygLMicub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUSIAoYZHJvcHBlZF9hdHRyaWJ1dGVzX2NvdW50GAIgASgNEj0KC2VudGl0eV9yZWZzGAMgAygLMigub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmQoMBCiJpby5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxQg1SZXNvdXJjZVByb3RvUAFaKmdvLm9wZW50ZWxlbWV0cnkuaW8vcHJvdG8vb3RscC9yZXNvdXJjZS92MaoCH09wZW5UZWxlbWV0cnkuUHJvdG8uUmVzb3VyY2UuVjFiBnByb3RvMw", [file_opentelemetry_proto_common_v1_common]);
46
- // src/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.ts
47
- /**
48
- * Describes the file opentelemetry/proto/collector/logs/v1/logs_service.proto.
49
- */
50
- const file_opentelemetry_proto_collector_logs_v1_logs_service = /*@__PURE__*/ fileDesc("CjhvcGVudGVsZW1ldHJ5L3Byb3RvL2NvbGxlY3Rvci9sb2dzL3YxL2xvZ3Nfc2VydmljZS5wcm90bxIlb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MSJcChhFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QSQAoNcmVzb3VyY2VfbG9ncxgBIAMoCzIpLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MidQoZRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZRJYCg9wYXJ0aWFsX3N1Y2Nlc3MYASABKAsyPy5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyJPChhFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MSHAoUcmVqZWN0ZWRfbG9nX3JlY29yZHMYASABKAMSFQoNZXJyb3JfbWVzc2FnZRgCIAEoCTKdAQoLTG9nc1NlcnZpY2USjQEKBkV4cG9ydBI/Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0GkAub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlIgBCmAEKKGlvLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjFCEExvZ3NTZXJ2aWNlUHJvdG9QAVowZ28ub3BlbnRlbGVtZXRyeS5pby9wcm90by9vdGxwL2NvbGxlY3Rvci9sb2dzL3YxqgIlT3BlblRlbGVtZXRyeS5Qcm90by5Db2xsZWN0b3IuTG9ncy5WMWIGcHJvdG8z", [/* @__PURE__ */ fileDesc("CiZvcGVudGVsZW1ldHJ5L3Byb3RvL2xvZ3MvdjEvbG9ncy5wcm90bxIbb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxIkwKCExvZ3NEYXRhEkAKDXJlc291cmNlX2xvZ3MYASADKAsyKS5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzIqMBCgxSZXNvdXJjZUxvZ3MSOwoIcmVzb3VyY2UYASABKAsyKS5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlEjoKCnNjb3BlX2xvZ3MYAiADKAsyJi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzEhIKCnNjaGVtYV91cmwYAyABKAlKBgjoBxDpByKgAQoJU2NvcGVMb2dzEkIKBXNjb3BlGAEgASgLMjMub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUSOwoLbG9nX3JlY29yZHMYAiADKAsyJi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkEhIKCnNjaGVtYV91cmwYAyABKAkigwMKCUxvZ1JlY29yZBIWCg50aW1lX3VuaXhfbmFubxgBIAEoBhIfChdvYnNlcnZlZF90aW1lX3VuaXhfbmFubxgLIAEoBhJECg9zZXZlcml0eV9udW1iZXIYAiABKA4yKy5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2V2ZXJpdHlOdW1iZXISFQoNc2V2ZXJpdHlfdGV4dBgDIAEoCRI1CgRib2R5GAUgASgLMicub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUSOwoKYXR0cmlidXRlcxgGIAMoCzInLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlEiAKGGRyb3BwZWRfYXR0cmlidXRlc19jb3VudBgHIAEoDRINCgVmbGFncxgIIAEoBxIQCgh0cmFjZV9pZBgJIAEoDBIPCgdzcGFuX2lkGAogASgMEhIKCmV2ZW50X25hbWUYDCABKAlKBAgEEAUqwwUKDlNldmVyaXR5TnVtYmVyEh8KG1NFVkVSSVRZX05VTUJFUl9VTlNQRUNJRklFRBAAEhkKFVNFVkVSSVRZX05VTUJFUl9UUkFDRRABEhoKFlNFVkVSSVRZX05VTUJFUl9UUkFDRTIQAhIaChZTRVZFUklUWV9OVU1CRVJfVFJBQ0UzEAMSGgoWU0VWRVJJVFlfTlVNQkVSX1RSQUNFNBAEEhkKFVNFVkVSSVRZX05VTUJFUl9ERUJVRxAFEhoKFlNFVkVSSVRZX05VTUJFUl9ERUJVRzIQBhIaChZTRVZFUklUWV9OVU1CRVJfREVCVUczEAcSGgoWU0VWRVJJVFlfTlVNQkVSX0RFQlVHNBAIEhgKFFNFVkVSSVRZX05VTUJFUl9JTkZPEAkSGQoVU0VWRVJJVFlfTlVNQkVSX0lORk8yEAoSGQoVU0VWRVJJVFlfTlVNQkVSX0lORk8zEAsSGQoVU0VWRVJJVFlfTlVNQkVSX0lORk80EAwSGAoUU0VWRVJJVFlfTlVNQkVSX1dBUk4QDRIZChVTRVZFUklUWV9OVU1CRVJfV0FSTjIQDhIZChVTRVZFUklUWV9OVU1CRVJfV0FSTjMQDxIZChVTRVZFUklUWV9OVU1CRVJfV0FSTjQQEBIZChVTRVZFUklUWV9OVU1CRVJfRVJST1IQERIaChZTRVZFUklUWV9OVU1CRVJfRVJST1IyEBISGgoWU0VWRVJJVFlfTlVNQkVSX0VSUk9SMxATEhoKFlNFVkVSSVRZX05VTUJFUl9FUlJPUjQQFBIZChVTRVZFUklUWV9OVU1CRVJfRkFUQUwQFRIaChZTRVZFUklUWV9OVU1CRVJfRkFUQUwyEBYSGgoWU0VWRVJJVFlfTlVNQkVSX0ZBVEFMMxAXEhoKFlNFVkVSSVRZX05VTUJFUl9GQVRBTDQQGCpZCg5Mb2dSZWNvcmRGbGFncxIfChtMT0dfUkVDT1JEX0ZMQUdTX0RPX05PVF9VU0UQABImCiFMT0dfUkVDT1JEX0ZMQUdTX1RSQUNFX0ZMQUdTX01BU0sQ/wFCcwoeaW8ub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxQglMb2dzUHJvdG9QAVomZ28ub3BlbnRlbGVtZXRyeS5pby9wcm90by9vdGxwL2xvZ3MvdjGqAhtPcGVuVGVsZW1ldHJ5LlByb3RvLkxvZ3MuVjFiBnByb3RvMw", [file_opentelemetry_proto_common_v1_common, file_opentelemetry_proto_resource_v1_resource])]);
51
- /**
52
- * Describes the message opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest.
53
- * Use `create(ExportLogsServiceRequestSchema)` to create a new message.
54
- */
55
- const ExportLogsServiceRequestSchema = /*@__PURE__*/ messageDesc(file_opentelemetry_proto_collector_logs_v1_logs_service, 0);
56
- /**
57
- * Describes the message opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse.
58
- * Use `create(ExportLogsServiceResponseSchema)` to create a new message.
59
- */
60
- const ExportLogsServiceResponseSchema = /*@__PURE__*/ messageDesc(file_opentelemetry_proto_collector_logs_v1_logs_service, 1);
61
- // src/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.ts
62
- /**
63
- * Describes the file opentelemetry/proto/collector/metrics/v1/metrics_service.proto.
64
- */
65
- const file_opentelemetry_proto_collector_metrics_v1_metrics_service = /*@__PURE__*/ fileDesc("Cj5vcGVudGVsZW1ldHJ5L3Byb3RvL2NvbGxlY3Rvci9tZXRyaWNzL3YxL21ldHJpY3Nfc2VydmljZS5wcm90bxIob3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MSJoChtFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QSSQoQcmVzb3VyY2VfbWV0cmljcxgBIAMoCzIvLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MifgocRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZRJeCg9wYXJ0aWFsX3N1Y2Nlc3MYASABKAsyRS5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcyJSChtFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MSHAoUcmVqZWN0ZWRfZGF0YV9wb2ludHMYASABKAMSFQoNZXJyb3JfbWVzc2FnZRgCIAEoCTKsAQoOTWV0cmljc1NlcnZpY2USmQEKBkV4cG9ydBJFLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0GkYub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIgBCpAEKK2lvLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjFCE01ldHJpY3NTZXJ2aWNlUHJvdG9QAVozZ28ub3BlbnRlbGVtZXRyeS5pby9wcm90by9vdGxwL2NvbGxlY3Rvci9tZXRyaWNzL3YxqgIoT3BlblRlbGVtZXRyeS5Qcm90by5Db2xsZWN0b3IuTWV0cmljcy5WMWIGcHJvdG8z", [/* @__PURE__ */ fileDesc("CixvcGVudGVsZW1ldHJ5L3Byb3RvL21ldHJpY3MvdjEvbWV0cmljcy5wcm90bxIeb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxIlgKC01ldHJpY3NEYXRhEkkKEHJlc291cmNlX21ldHJpY3MYASADKAsyLy5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzIq8BCg9SZXNvdXJjZU1ldHJpY3MSOwoIcmVzb3VyY2UYASABKAsyKS5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlEkMKDXNjb3BlX21ldHJpY3MYAiADKAsyLC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzEhIKCnNjaGVtYV91cmwYAyABKAlKBgjoBxDpByKfAQoMU2NvcGVNZXRyaWNzEkIKBXNjb3BlGAEgASgLMjMub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUSNwoHbWV0cmljcxgCIAMoCzImLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMSEgoKc2NoZW1hX3VybBgDIAEoCSLNAwoGTWV0cmljEgwKBG5hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDAoEdW5pdBgDIAEoCRI2CgVnYXVnZRgFIAEoCzIlLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZUgAEjIKA3N1bRgHIAEoCzIjLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1IABI+CgloaXN0b2dyYW0YCSABKAsyKS5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtSAASVQoVZXhwb25lbnRpYWxfaGlzdG9ncmFtGAogASgLMjQub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtSAASOgoHc3VtbWFyeRgLIAEoCzInLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5SAASOQoIbWV0YWRhdGEYDCADKAsyJy5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUIGCgRkYXRhSgQIBBAFSgQIBhAHSgQICBAJIk0KBUdhdWdlEkQKC2RhdGFfcG9pbnRzGAEgAygLMi8ub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludCK6AQoDU3VtEkQKC2RhdGFfcG9pbnRzGAEgAygLMi8ub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludBJXChdhZ2dyZWdhdGlvbl90ZW1wb3JhbGl0eRgCIAEoDjI2Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5EhQKDGlzX21vbm90b25pYxgDIAEoCCKtAQoJSGlzdG9ncmFtEkcKC2RhdGFfcG9pbnRzGAEgAygLMjIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludBJXChdhZ2dyZWdhdGlvbl90ZW1wb3JhbGl0eRgCIAEoDjI2Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5IsMBChRFeHBvbmVudGlhbEhpc3RvZ3JhbRJSCgtkYXRhX3BvaW50cxgBIAMoCzI9Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludBJXChdhZ2dyZWdhdGlvbl90ZW1wb3JhbGl0eRgCIAEoDjI2Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5IlAKB1N1bW1hcnkSRQoLZGF0YV9wb2ludHMYASADKAsyMC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludCKGAgoPTnVtYmVyRGF0YVBvaW50EjsKCmF0dHJpYnV0ZXMYByADKAsyJy5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZRIcChRzdGFydF90aW1lX3VuaXhfbmFubxgCIAEoBhIWCg50aW1lX3VuaXhfbmFubxgDIAEoBhITCglhc19kb3VibGUYBCABKAFIABIQCgZhc19pbnQYBiABKBBIABI7CglleGVtcGxhcnMYBSADKAsyKC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXISDQoFZmxhZ3MYCCABKA1CBwoFdmFsdWVKBAgBEAIi5gIKEkhpc3RvZ3JhbURhdGFQb2ludBI7CgphdHRyaWJ1dGVzGAkgAygLMicub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUSHAoUc3RhcnRfdGltZV91bml4X25hbm8YAiABKAYSFgoOdGltZV91bml4X25hbm8YAyABKAYSDQoFY291bnQYBCABKAYSEAoDc3VtGAUgASgBSACIAQESFQoNYnVja2V0X2NvdW50cxgGIAMoBhIXCg9leHBsaWNpdF9ib3VuZHMYByADKAESOwoJZXhlbXBsYXJzGAggAygLMigub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyEg0KBWZsYWdzGAogASgNEhAKA21pbhgLIAEoAUgBiAEBEhAKA21heBgMIAEoAUgCiAEBQgYKBF9zdW1CBgoEX21pbkIGCgRfbWF4SgQIARACItoECh1FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludBI7CgphdHRyaWJ1dGVzGAEgAygLMicub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUSHAoUc3RhcnRfdGltZV91bml4X25hbm8YAiABKAYSFgoOdGltZV91bml4X25hbm8YAyABKAYSDQoFY291bnQYBCABKAYSEAoDc3VtGAUgASgBSACIAQESDQoFc2NhbGUYBiABKBESEgoKemVyb19jb3VudBgHIAEoBhJXCghwb3NpdGl2ZRgIIAEoCzJFLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzElcKCG5lZ2F0aXZlGAkgASgLMkUub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMSDQoFZmxhZ3MYCiABKA0SOwoJZXhlbXBsYXJzGAsgAygLMigub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyEhAKA21pbhgMIAEoAUgBiAEBEhAKA21heBgNIAEoAUgCiAEBEhYKDnplcm9fdGhyZXNob2xkGA4gASgBGjAKB0J1Y2tldHMSDgoGb2Zmc2V0GAEgASgREhUKDWJ1Y2tldF9jb3VudHMYAiADKARCBgoEX3N1bUIGCgRfbWluQgYKBF9tYXgixQIKEFN1bW1hcnlEYXRhUG9pbnQSOwoKYXR0cmlidXRlcxgHIAMoCzInLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlEhwKFHN0YXJ0X3RpbWVfdW5peF9uYW5vGAIgASgGEhYKDnRpbWVfdW5peF9uYW5vGAMgASgGEg0KBWNvdW50GAQgASgGEgsKA3N1bRgFIAEoARJZCg9xdWFudGlsZV92YWx1ZXMYBiADKAsyQC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUSDQoFZmxhZ3MYCCABKA0aMgoPVmFsdWVBdFF1YW50aWxlEhAKCHF1YW50aWxlGAEgASgBEg0KBXZhbHVlGAIgASgBSgQIARACIsEBCghFeGVtcGxhchJEChNmaWx0ZXJlZF9hdHRyaWJ1dGVzGAcgAygLMicub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUSFgoOdGltZV91bml4X25hbm8YAiABKAYSEwoJYXNfZG91YmxlGAMgASgBSAASEAoGYXNfaW50GAYgASgQSAASDwoHc3Bhbl9pZBgEIAEoDBIQCgh0cmFjZV9pZBgFIAEoDEIHCgV2YWx1ZUoECAEQAiqMAQoWQWdncmVnYXRpb25UZW1wb3JhbGl0eRInCiNBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRBAAEiEKHUFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBEAESJgoiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRRACKl4KDkRhdGFQb2ludEZsYWdzEh8KG0RBVEFfUE9JTlRfRkxBR1NfRE9fTk9UX1VTRRAAEisKJ0RBVEFfUE9JTlRfRkxBR1NfTk9fUkVDT1JERURfVkFMVUVfTUFTSxABQn8KIWlvLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MUIMTWV0cmljc1Byb3RvUAFaKWdvLm9wZW50ZWxlbWV0cnkuaW8vcHJvdG8vb3RscC9tZXRyaWNzL3YxqgIeT3BlblRlbGVtZXRyeS5Qcm90by5NZXRyaWNzLlYxYgZwcm90bzM", [file_opentelemetry_proto_common_v1_common, file_opentelemetry_proto_resource_v1_resource])]);
66
- /**
67
- * Describes the message opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest.
68
- * Use `create(ExportMetricsServiceRequestSchema)` to create a new message.
69
- */
70
- const ExportMetricsServiceRequestSchema = /*@__PURE__*/ messageDesc(file_opentelemetry_proto_collector_metrics_v1_metrics_service, 0);
71
- /**
72
- * Describes the message opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse.
73
- * Use `create(ExportMetricsServiceResponseSchema)` to create a new message.
74
- */
75
- const ExportMetricsServiceResponseSchema = /*@__PURE__*/ messageDesc(file_opentelemetry_proto_collector_metrics_v1_metrics_service, 1);
76
- // src/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.ts
77
- /**
78
- * Describes the file opentelemetry/proto/collector/trace/v1/trace_service.proto.
79
- */
80
- const file_opentelemetry_proto_collector_trace_v1_trace_service = /*@__PURE__*/ fileDesc("CjpvcGVudGVsZW1ldHJ5L3Byb3RvL2NvbGxlY3Rvci90cmFjZS92MS90cmFjZV9zZXJ2aWNlLnByb3RvEiZvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MSJgChlFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0EkMKDnJlc291cmNlX3NwYW5zGAEgAygLMisub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zIngKGkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlEloKD3BhcnRpYWxfc3VjY2VzcxgBIAEoCzJBLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MiSgoZRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcxIWCg5yZWplY3RlZF9zcGFucxgBIAEoAxIVCg1lcnJvcl9tZXNzYWdlGAIgASgJMqIBCgxUcmFjZVNlcnZpY2USkQEKBkV4cG9ydBJBLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QaQi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSIAQpwBCilpby5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MUIRVHJhY2VTZXJ2aWNlUHJvdG9QAVoxZ28ub3BlbnRlbGVtZXRyeS5pby9wcm90by9vdGxwL2NvbGxlY3Rvci90cmFjZS92MaoCJk9wZW5UZWxlbWV0cnkuUHJvdG8uQ29sbGVjdG9yLlRyYWNlLlYxYgZwcm90bzM", [/* @__PURE__ */ fileDesc("CihvcGVudGVsZW1ldHJ5L3Byb3RvL3RyYWNlL3YxL3RyYWNlLnByb3RvEhxvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxIlEKClRyYWNlc0RhdGESQwoOcmVzb3VyY2Vfc3BhbnMYASADKAsyKy5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMipwEKDVJlc291cmNlU3BhbnMSOwoIcmVzb3VyY2UYASABKAsyKS5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlEj0KC3Njb3BlX3NwYW5zGAIgAygLMigub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zEhIKCnNjaGVtYV91cmwYAyABKAlKBgjoBxDpByKXAQoKU2NvcGVTcGFucxJCCgVzY29wZRgBIAEoCzIzLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlEjEKBXNwYW5zGAIgAygLMiIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuEhIKCnNjaGVtYV91cmwYAyABKAkihAgKBFNwYW4SEAoIdHJhY2VfaWQYASABKAwSDwoHc3Bhbl9pZBgCIAEoDBITCgt0cmFjZV9zdGF0ZRgDIAEoCRIWCg5wYXJlbnRfc3Bhbl9pZBgEIAEoDBINCgVmbGFncxgQIAEoBxIMCgRuYW1lGAUgASgJEjkKBGtpbmQYBiABKA4yKy5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uU3BhbktpbmQSHAoUc3RhcnRfdGltZV91bml4X25hbm8YByABKAYSGgoSZW5kX3RpbWVfdW5peF9uYW5vGAggASgGEjsKCmF0dHJpYnV0ZXMYCSADKAsyJy5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZRIgChhkcm9wcGVkX2F0dHJpYnV0ZXNfY291bnQYCiABKA0SOAoGZXZlbnRzGAsgAygLMigub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50EhwKFGRyb3BwZWRfZXZlbnRzX2NvdW50GAwgASgNEjYKBWxpbmtzGA0gAygLMicub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsSGwoTZHJvcHBlZF9saW5rc19jb3VudBgOIAEoDRI0CgZzdGF0dXMYDyABKAsyJC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cxqMAQoFRXZlbnQSFgoOdGltZV91bml4X25hbm8YASABKAYSDAoEbmFtZRgCIAEoCRI7CgphdHRyaWJ1dGVzGAMgAygLMicub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUSIAoYZHJvcHBlZF9hdHRyaWJ1dGVzX2NvdW50GAQgASgNGqwBCgRMaW5rEhAKCHRyYWNlX2lkGAEgASgMEg8KB3NwYW5faWQYAiABKAwSEwoLdHJhY2Vfc3RhdGUYAyABKAkSOwoKYXR0cmlidXRlcxgEIAMoCzInLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlEiAKGGRyb3BwZWRfYXR0cmlidXRlc19jb3VudBgFIAEoDRINCgVmbGFncxgGIAEoByKZAQoIU3BhbktpbmQSGQoVU1BBTl9LSU5EX1VOU1BFQ0lGSUVEEAASFgoSU1BBTl9LSU5EX0lOVEVSTkFMEAESFAoQU1BBTl9LSU5EX1NFUlZFUhACEhQKEFNQQU5fS0lORF9DTElFTlQQAxIWChJTUEFOX0tJTkRfUFJPRFVDRVIQBBIWChJTUEFOX0tJTkRfQ09OU1VNRVIQBSKuAQoGU3RhdHVzEg8KB21lc3NhZ2UYAiABKAkSPQoEY29kZRgDIAEoDjIvLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLlN0YXR1c0NvZGUiTgoKU3RhdHVzQ29kZRIVChFTVEFUVVNfQ09ERV9VTlNFVBAAEhIKDlNUQVRVU19DT0RFX09LEAESFQoRU1RBVFVTX0NPREVfRVJST1IQAkoECAEQAiqcAQoJU3BhbkZsYWdzEhkKFVNQQU5fRkxBR1NfRE9fTk9UX1VTRRAAEiAKG1NQQU5fRkxBR1NfVFJBQ0VfRkxBR1NfTUFTSxD/ARIqCiVTUEFOX0ZMQUdTX0NPTlRFWFRfSEFTX0lTX1JFTU9URV9NQVNLEIACEiYKIVNQQU5fRkxBR1NfQ09OVEVYVF9JU19SRU1PVEVfTUFTSxCABEJ3Ch9pby5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxQgpUcmFjZVByb3RvUAFaJ2dvLm9wZW50ZWxlbWV0cnkuaW8vcHJvdG8vb3RscC90cmFjZS92MaoCHE9wZW5UZWxlbWV0cnkuUHJvdG8uVHJhY2UuVjFiBnByb3RvMw", [file_opentelemetry_proto_common_v1_common, file_opentelemetry_proto_resource_v1_resource])]);
81
- /**
82
- * Describes the message opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest.
83
- * Use `create(ExportTraceServiceRequestSchema)` to create a new message.
84
- */
85
- const ExportTraceServiceRequestSchema = /*@__PURE__*/ messageDesc(file_opentelemetry_proto_collector_trace_v1_trace_service, 0);
86
- /**
87
- * Describes the message opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse.
88
- * Use `create(ExportTraceServiceResponseSchema)` to create a new message.
89
- */
90
- const ExportTraceServiceResponseSchema = /*@__PURE__*/ messageDesc(file_opentelemetry_proto_collector_trace_v1_trace_service, 1);
91
- // src/normalize.ts
92
- const isObject = (value) => Predicate.isObject(value);
93
- const isList = (value) => Array.isArray(value);
94
- const listOf = (value) => Option.getOrElse(Option.liftPredicate(value, isList), () => []);
95
- const fieldOf = (name) => (value) => pipe(Option.liftPredicate(value, isObject), Option.flatMap(Record.get(name)), Option.getOrNull);
96
- const whenString = (convert) => (value) => Option.match(Option.liftPredicate(value, Predicate.isString), {
97
- onSome: convert,
98
- onNone: () => value
99
- });
100
- const mapTree = (readers) => (value) => {
101
- const walk = (node) => Option.match(Option.liftPredicate(node, isList), {
102
- onSome: Array.map(walk),
103
- onNone: () => Option.match(Option.liftPredicate(node, isObject), {
104
- onNone: () => node,
105
- onSome: Record.map((inner, key) => Option.match(Record.get(readers, key), {
106
- onSome: (read) => read(inner),
107
- onNone: () => walk(inner)
108
- }))
109
- })
110
- });
111
- return walk(value);
112
- };
113
- const keyOf = (pair) => pipe(fieldOf("key")(pair), Option.liftPredicate(Predicate.isString), Option.getOrElse(() => ""));
114
- const kvlist = (read) => (values) => pipe(listOf(values), Array.map((pair) => [keyOf(pair), read(fieldOf("value")(pair))]), Record.fromEntries);
115
- const anyValue = (value) => {
116
- const readers = {
117
- intValue: Number,
118
- arrayValue: (inner) => pipe(listOf(fieldOf("values")(inner)), Array.map(anyValue)),
119
- kvlistValue: (inner) => kvlist(anyValue)(fieldOf("values")(inner))
120
- };
121
- return pipe(Option.liftPredicate(value, isObject), Option.flatMap((object) => Array.head(Record.toEntries(object))), Option.map(([kind, inner]) => Option.match(Record.get(readers, kind), {
122
- onSome: (read) => read(inner),
123
- onNone: () => inner
124
- })), Option.getOrNull);
125
- };
126
- const attributes = kvlist(anyValue);
127
- const reencode = (decode, encode) => (text) => Result.match(decode(text), {
128
- onSuccess: encode,
129
- onFailure: () => text
130
- });
131
- const toHex = whenString(reencode(Base64.decode, Hex.encode));
132
- const toBase64 = whenString(reencode(Hex.decode, Base64.encode));
133
- const idsAs = (convert) => ({
134
- traceId: convert,
135
- spanId: convert,
136
- parentSpanId: convert
137
- });
138
- const normalize = mapTree({
139
- ...idsAs(toHex),
140
- attributes,
141
- body: anyValue
142
- });
143
- const hexIdsToBase64 = mapTree(idsAs(toBase64));
144
- // src/protocol.ts
145
- const taggedError$1 = Schema.TaggedError;
146
- var MalformedExport = class extends taggedError$1()("MalformedExport", { message: Schema.String }) {};
147
- const ENDPOINTS = [
148
- {
149
- key: "traces",
150
- httpPath: "/v1/traces",
151
- grpcPath: "/opentelemetry.proto.collector.trace.v1.TraceService/Export",
152
- request: ExportTraceServiceRequestSchema,
153
- response: ExportTraceServiceResponseSchema
154
- },
155
- {
156
- key: "metrics",
157
- httpPath: "/v1/metrics",
158
- grpcPath: "/opentelemetry.proto.collector.metrics.v1.MetricsService/Export",
159
- request: ExportMetricsServiceRequestSchema,
160
- response: ExportMetricsServiceResponseSchema
161
- },
162
- {
163
- key: "logs",
164
- httpPath: "/v1/logs",
165
- grpcPath: "/opentelemetry.proto.collector.logs.v1.LogsService/Export",
166
- request: ExportLogsServiceRequestSchema,
167
- response: ExportLogsServiceResponseSchema
168
- }
169
- ];
170
- const malformed = (cause) => MalformedExport.make({ message: String(cause) });
171
- const decodeJsonText = Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.MutableJson));
172
- const parse = (read) => Effect.try({
173
- try: read,
174
- catch: malformed
175
- });
176
- const fromProtobuf = (endpoint) => (body) => parse(() => fromBinary(endpoint.request, body));
177
- const fromOtlpJson = (endpoint) => (body) => decodeJsonText(new TextDecoder().decode(body)).pipe(Effect.mapError(malformed), Effect.flatMap((json) => parse(() => fromJson(endpoint.request, hexIdsToBase64(json), { ignoreUnknownFields: true }))));
178
- const normalized = (endpoint) => (message) => Effect.try({
179
- try: () => normalize(toJson(endpoint.request, message)),
180
- catch: malformed
181
- });
182
- const encoded = (endpoint) => (message) => toBinary(endpoint.request, message);
183
- const gunzip = (body) => Effect.tryPromise({
184
- try: () => new Response(new Blob([Uint8Array.from(body)]).stream().pipeThrough(new DecompressionStream("gzip"))).bytes(),
185
- catch: malformed
186
- });
187
- const gunzipWhen = (compressed) => (body) => Option.match(Option.liftPredicate(body, () => compressed), {
188
- onSome: gunzip,
189
- onNone: () => Effect.succeed(body)
190
- });
191
- const LOOPBACK = "127.0.0.1";
192
- const originOf = (address) => Option.match(Option.liftPredicate(address, Predicate.hasProperty("port")), {
193
- onSome: ({ port }) => `http://${LOOPBACK}:${String(port)}`,
194
- onNone: () => ""
195
- });
196
- const emptyResponse = (endpoint) => toBinary(endpoint.response, create(endpoint.response));
197
- // src/grpc.ts
198
- const FRAME_HEADER_BYTES = 5;
199
- const LENGTH_OFFSET = 1;
200
- const COMPRESSED_FLAG = 1;
201
- const FIRST_BYTE = 0;
202
- const ANY_FREE_PORT = 0;
203
- const GrpcStatus = {
204
- ok: "0",
205
- invalidArgument: "3",
206
- unimplemented: "12",
207
- unavailable: "14"
208
- };
209
- const frame = (message) => {
210
- const framed = new Uint8Array(FRAME_HEADER_BYTES + message.length);
211
- new DataView(framed.buffer).setUint32(LENGTH_OFFSET, message.length);
212
- framed.set(message, FRAME_HEADER_BYTES);
213
- return framed;
214
- };
215
- const unframe = (request) => (framed) => gunzipWhen(framed[FIRST_BYTE] === COMPRESSED_FLAG && request.headers["grpc-encoding"] === "gzip")(framed.subarray(FRAME_HEADER_BYTES));
216
- const reply = (request) => (status, message) => {
217
- NodeHttpServerRequest.toServerResponse(request).addTrailers({ "grpc-status": status });
218
- return HttpServerResponse.uint8Array(message, { contentType: "application/grpc" });
219
- };
220
- const rejected = (request, status) => () => reply(request)(status, /* @__PURE__ */ new Uint8Array());
221
- const accepted = (request, endpoint) => () => reply(request)(GrpcStatus.ok, frame(emptyResponse(endpoint)));
222
- const receive$1 = (store, request) => (endpoint) => request.arrayBuffer.pipe(Effect.map((buffer) => new Uint8Array(buffer)), Effect.flatMap(unframe(request)), Effect.flatMap(fromProtobuf(endpoint)), Effect.flatMap(store(endpoint)), Effect.map(accepted(request, endpoint)), Effect.catchTags({
223
- MalformedExport: () => Effect.sync(rejected(request, GrpcStatus.invalidArgument)),
224
- ForwardFailed: () => Effect.sync(rejected(request, GrpcStatus.unavailable))
225
- }));
226
- const exportCall = (store) => HttpServerRequest.HttpServerRequest.pipe(Effect.flatMap((request) => Option.match(Array.findFirst(ENDPOINTS, ({ grpcPath }) => grpcPath === request.url), {
227
- onNone: () => Effect.sync(() => reply(request)(GrpcStatus.unimplemented, /* @__PURE__ */ new Uint8Array())),
228
- onSome: receive$1(store, request)
229
- })));
230
- const serveGrpc = (store) => NodeHttpServer.make(() => createServer(), {
231
- port: ANY_FREE_PORT,
232
- host: LOOPBACK
233
- }).pipe(Effect.orDie, Effect.tap((server) => server.serve(exportCall(store))), Effect.map((server) => originOf(server.address)));
234
- // src/forward.ts
235
- const taggedError = Schema.TaggedError;
236
- var ForwardFailed = class extends taggedError()("ForwardFailed", { message: Schema.String }) {};
237
- const failure = (origin) => (reason) => ForwardFailed.make({ message: `${origin}: ${reason}` });
238
- const causedBy = (origin) => (cause) => failure(origin)(String(cause));
239
- const statusOf = (headers) => Option.map(Option.fromNullishOr(headers["grpc-status"]), String);
240
- const succeeded = (origin) => (code) => Effect.fromOption(Option.liftPredicate(code, (status) => status === GrpcStatus.ok)).pipe(Effect.asVoid, Effect.mapError(() => failure(origin)(`grpc-status ${code}`)));
241
- const outcome = (origin) => (status) => Effect.fromOption(status).pipe(Effect.mapError(() => failure(origin)("no grpc-status")), Effect.flatMap(succeeded(origin)));
242
- const requestHeaders = (endpoint) => ({
243
- ":method": "POST",
244
- ":path": endpoint.grpcPath,
245
- "content-type": "application/grpc",
246
- te: "trailers"
247
- });
248
- const exportTo = (origin, endpoint) => (message) => Effect.acquireUseRelease(Effect.sync(() => connect(origin)), (session) => Effect.callback((resume) => {
249
- const status = MutableRef.make(Option.none());
250
- const remember = (headers) => {
251
- MutableRef.update(status, Option.orElse(() => statusOf(headers)));
252
- };
253
- const broken = (cause) => {
254
- resume(Effect.fail(causedBy(origin)(cause)));
255
- };
256
- session.on("error", broken);
257
- session.request(requestHeaders(endpoint)).on("response", remember).on("trailers", remember).on("error", broken).on("close", () => {
258
- resume(Effect.succeed(MutableRef.get(status)));
259
- }).resume().end(frame(message));
260
- }).pipe(Effect.flatMap(outcome(origin))), (session) => Effect.sync(() => {
261
- session.close();
262
- }));
263
- const forwardTo = (origins) => (endpoint) => (message) => Effect.forEach(origins, (origin) => exportTo(origin, endpoint)(message), { discard: true }).pipe(Effect.withSpan("vitest-otlp.forward"));
264
- // src/http.ts
265
- const HTTP_BAD_REQUEST = 400;
266
- const HTTP_NOT_FOUND = 404;
267
- const HTTP_SERVICE_UNAVAILABLE = 503;
268
- const JSON_CONTENT_TYPE = "application/json";
269
- const PROTOBUF_CONTENT_TYPE = "application/x-protobuf";
270
- const JSON_ENCODING = {
271
- decode: fromOtlpJson,
272
- respond: () => HttpServerResponse.text("{}", { contentType: JSON_CONTENT_TYPE })
273
- };
274
- const PROTOBUF_ENCODING = {
275
- decode: fromProtobuf,
276
- respond: (endpoint) => HttpServerResponse.uint8Array(emptyResponse(endpoint), { contentType: PROTOBUF_CONTENT_TYPE })
277
- };
278
- const headerStartsWith = (request, name) => (expected) => pipe(Option.fromNullishOr(request.headers[name]), Option.exists(String$1.startsWith(expected)));
279
- const encodingOf = (request) => Option.match(Option.liftPredicate(JSON_ENCODING, () => headerStartsWith(request, "content-type")(JSON_CONTENT_TYPE)), {
280
- onSome: (json) => json,
281
- onNone: () => PROTOBUF_ENCODING
282
- });
283
- const receive = (store, request) => (endpoint) => Effect.gen(function* receiveExport() {
284
- const encoding = encodingOf(request);
285
- const raw = new Uint8Array(yield* request.arrayBuffer);
286
- const body = yield* gunzipWhen(headerStartsWith(request, "content-encoding")("gzip"))(raw);
287
- yield* store(endpoint)(yield* encoding.decode(endpoint)(body));
288
- return encoding.respond(endpoint);
289
- }).pipe(Effect.catchTags({
290
- MalformedExport: (malformed) => Effect.succeed(HttpServerResponse.text(malformed.message, { status: HTTP_BAD_REQUEST })),
291
- ForwardFailed: (unforwarded) => Effect.succeed(HttpServerResponse.text(unforwarded.message, { status: HTTP_SERVICE_UNAVAILABLE }))
292
- }));
293
- const exportRequest = (store) => HttpServerRequest.HttpServerRequest.pipe(Effect.flatMap((request) => Option.match(Array.findFirst(ENDPOINTS, ({ httpPath }) => httpPath === request.url), {
294
- onNone: () => Effect.succeed(HttpServerResponse.empty({ status: HTTP_NOT_FOUND })),
295
- onSome: receive(store, request)
296
- })));
297
- const serveHttp = (store) => Layer.build(NodeHttpServer.layerTest).pipe(Effect.orDie, Effect.map(Context.get(HttpServer.HttpServer)), Effect.tap((server) => server.serve(exportRequest(store))), Effect.map((server) => originOf(server.address)));
298
- // src/receiver.ts
299
- const NOTHING_RECEIVED = {
300
- traces: [],
301
- logs: [],
302
- metrics: []
303
- };
304
- const startReceiver = (forwardOrigins) => Effect.gen(function* receiverStart() {
305
- const received = MutableRef.make(NOTHING_RECEIVED);
306
- const forward = forwardTo(forwardOrigins);
307
- const save = (key) => (request) => Effect.sync(() => {
308
- MutableRef.update(received, (requests) => ({
309
- ...requests,
310
- [key]: [...requests[key], request]
311
- }));
312
- });
313
- const store = (endpoint) => (message) => forward(endpoint)(encoded(endpoint)(message)).pipe(Effect.andThen(normalized(endpoint)(message)), Effect.flatMap(save(endpoint.key)));
314
- return {
315
- address: {
316
- httpEndpoint: yield* serveHttp(store),
317
- grpcEndpoint: yield* serveGrpc(store)
318
- },
319
- requests: Effect.sync(() => MutableRef.get(received)),
320
- clear: Effect.sync(() => {
321
- MutableRef.set(received, NOTHING_RECEIVED);
322
- })
323
- };
324
- }).pipe(Effect.withSpan("vitest-otlp.receiver.start"));
325
- // src/setup.ts
326
- const scope = Scope.makeUnsafe();
327
- const forwardOrigins = Option.getOrElse(Option.fromNullishOr(inject(FORWARD_KEY)), () => []);
328
- const receiver = await Effect.runPromise(Scope.provide(startReceiver(forwardOrigins), scope));
329
- setReceiver(Option.some(receiver));
330
- Object.assign(process.env, receiverEnvironment(receiver.address)(process.env));
331
- const stop = Effect.sync(() => {
332
- setReceiver(Option.none());
333
- }).pipe(Effect.andThen(Scope.close(scope, Exit.void)));
334
- afterAll(() => Effect.runPromise(stop));
335
- export {};
336
-
337
- //# sourceMappingURL=setup.mjs.map