@superblocksteam/sdk 2.0.139 → 2.0.140-next.1

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 (80) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/application-build.d.mts.map +1 -1
  3. package/dist/application-build.mjs +3 -0
  4. package/dist/application-build.mjs.map +1 -1
  5. package/dist/dev-utils/dev-server-resolve-config.test.d.mts +2 -0
  6. package/dist/dev-utils/dev-server-resolve-config.test.d.mts.map +1 -0
  7. package/dist/dev-utils/dev-server-resolve-config.test.mjs +20 -0
  8. package/dist/dev-utils/dev-server-resolve-config.test.mjs.map +1 -0
  9. package/dist/dev-utils/dev-server-tracing.test.d.mts +2 -0
  10. package/dist/dev-utils/dev-server-tracing.test.d.mts.map +1 -0
  11. package/dist/dev-utils/dev-server-tracing.test.mjs +24 -0
  12. package/dist/dev-utils/dev-server-tracing.test.mjs.map +1 -0
  13. package/dist/dev-utils/dev-server.d.mts +10 -0
  14. package/dist/dev-utils/dev-server.d.mts.map +1 -1
  15. package/dist/dev-utils/dev-server.mjs +20 -1
  16. package/dist/dev-utils/dev-server.mjs.map +1 -1
  17. package/dist/react-compiler-runtime-shim.d.mts +23 -0
  18. package/dist/react-compiler-runtime-shim.d.mts.map +1 -0
  19. package/dist/react-compiler-runtime-shim.mjs +44 -0
  20. package/dist/react-compiler-runtime-shim.mjs.map +1 -0
  21. package/dist/react-compiler-runtime-shim.test.d.mts +2 -0
  22. package/dist/react-compiler-runtime-shim.test.d.mts.map +1 -0
  23. package/dist/react-compiler-runtime-shim.test.mjs +23 -0
  24. package/dist/react-compiler-runtime-shim.test.mjs.map +1 -0
  25. package/dist/telemetry/attributes.d.ts +0 -1
  26. package/dist/telemetry/attributes.d.ts.map +1 -1
  27. package/dist/telemetry/attributes.js +0 -1
  28. package/dist/telemetry/attributes.js.map +1 -1
  29. package/dist/telemetry/identity.d.ts +29 -0
  30. package/dist/telemetry/identity.d.ts.map +1 -0
  31. package/dist/telemetry/identity.js +9 -0
  32. package/dist/telemetry/identity.js.map +1 -0
  33. package/dist/telemetry/identity.test.d.ts +2 -0
  34. package/dist/telemetry/identity.test.d.ts.map +1 -0
  35. package/dist/telemetry/identity.test.js +25 -0
  36. package/dist/telemetry/identity.test.js.map +1 -0
  37. package/dist/telemetry/index.d.ts.map +1 -1
  38. package/dist/telemetry/index.js +55 -45
  39. package/dist/telemetry/index.js.map +1 -1
  40. package/dist/telemetry/index.test.js +29 -1
  41. package/dist/telemetry/index.test.js.map +1 -1
  42. package/dist/telemetry/local-obs.d.ts +8 -2
  43. package/dist/telemetry/local-obs.d.ts.map +1 -1
  44. package/dist/telemetry/local-obs.js +8 -3
  45. package/dist/telemetry/local-obs.js.map +1 -1
  46. package/dist/telemetry/otlp-config.d.ts +74 -0
  47. package/dist/telemetry/otlp-config.d.ts.map +1 -0
  48. package/dist/telemetry/otlp-config.js +204 -0
  49. package/dist/telemetry/otlp-config.js.map +1 -0
  50. package/dist/telemetry/otlp-config.test.d.ts +2 -0
  51. package/dist/telemetry/otlp-config.test.d.ts.map +1 -0
  52. package/dist/telemetry/otlp-config.test.js +156 -0
  53. package/dist/telemetry/otlp-config.test.js.map +1 -0
  54. package/dist/telemetry/preload.d.ts +23 -0
  55. package/dist/telemetry/preload.d.ts.map +1 -0
  56. package/dist/telemetry/preload.js +92 -0
  57. package/dist/telemetry/preload.js.map +1 -0
  58. package/dist/telemetry/util.d.ts +3 -3
  59. package/dist/telemetry/util.d.ts.map +1 -1
  60. package/dist/telemetry/util.js +6 -32
  61. package/dist/telemetry/util.js.map +1 -1
  62. package/package.json +18 -9
  63. package/src/application-build.mts +4 -0
  64. package/src/dev-utils/dev-server-resolve-config.test.mts +29 -0
  65. package/src/dev-utils/dev-server-tracing.test.mts +32 -0
  66. package/src/dev-utils/dev-server.mts +22 -1
  67. package/src/react-compiler-runtime-shim.mts +50 -0
  68. package/src/react-compiler-runtime-shim.test.mts +26 -0
  69. package/src/telemetry/attributes.ts +0 -1
  70. package/src/telemetry/identity.test.ts +30 -0
  71. package/src/telemetry/identity.ts +40 -0
  72. package/src/telemetry/index.test.ts +36 -1
  73. package/src/telemetry/index.ts +58 -47
  74. package/src/telemetry/local-obs.ts +8 -3
  75. package/src/telemetry/otlp-config.test.ts +213 -0
  76. package/src/telemetry/otlp-config.ts +250 -0
  77. package/src/telemetry/preload.ts +113 -0
  78. package/src/telemetry/util.ts +6 -32
  79. package/tsconfig.tsbuildinfo +1 -1
  80. package/turbo.json +0 -1
@@ -0,0 +1,25 @@
1
+ import { afterEach, describe, expect, it, vi } from "vitest";
2
+ describe("telemetry identity", () => {
3
+ afterEach(async () => {
4
+ const { setTelemetryIdentity } = await import("./identity.js");
5
+ setTelemetryIdentity({});
6
+ vi.resetModules();
7
+ });
8
+ it("drops undefined values and returns the rest", async () => {
9
+ const { setTelemetryIdentity, getTelemetryIdentity } = await import("./identity.js");
10
+ setTelemetryIdentity({ "application-id": "app-1", branch: undefined });
11
+ expect(getTelemetryIdentity()).toEqual({ "application-id": "app-1" });
12
+ });
13
+ it("shares identity across module instances, as when the CLI bundle and the preload's node_modules copy each load their own", async () => {
14
+ const writer = await import("./identity.js");
15
+ writer.setTelemetryIdentity({ "application-id": "app-1" });
16
+ // A fresh module registry stands in for the second copy of this module
17
+ // that esbuild bakes into the packaged CLI.
18
+ vi.resetModules();
19
+ const reader = await import("./identity.js");
20
+ expect(reader.getTelemetryIdentity()).toEqual({
21
+ "application-id": "app-1",
22
+ });
23
+ });
24
+ });
25
+ //# sourceMappingURL=identity.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.test.js","sourceRoot":"","sources":["../../src/telemetry/identity.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE7D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAC/D,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACzB,EAAE,CAAC,YAAY,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,GAClD,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAChC,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yHAAyH,EAAE,KAAK,IAAI,EAAE;QACvI,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC;QAE3D,uEAAuE;QACvE,4CAA4C;QAC5C,EAAE,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAE7C,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC;YAC5C,gBAAgB,EAAE,OAAO;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,KAAK,EAAS,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAK5D,OAAO,EACL,kBAAkB,EAKnB,MAAM,yBAAyB,CAAC;AAWjC,OAAO,KAAK,EAAE,2CAA2C,EAAE,MAAM,mBAAmB,CAAC;AAgCrF;;;GAGG;AACH,eAAO,MAAM,cAAc,oBAUvB,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,WAAW,SAAmD,CAAC;AAE5E;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAc1D;AAED,wBAAsB,kBAAkB,CACtC,iBAAiB,CAAC,EAAE,2CAA2C,GAC9D,OAAO,CAAC,OAAO,CAAC,CAuHlB;AAED,wBAAgB,SAAS,IAAI,MAAM,CAMlC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAMlC;AAED,wBAAgB,QAAQ,IAAI,KAAK,CAMhC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,KAAK,EAAS,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAK5D,OAAO,EACL,kBAAkB,EAKnB,MAAM,yBAAyB,CAAC;AAWjC,OAAO,KAAK,EAAE,2CAA2C,EAAE,MAAM,mBAAmB,CAAC;AAgCrF;;;GAGG;AACH,eAAO,MAAM,cAAc,oBAUvB,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,WAAW,SAAmD,CAAC;AAE5E;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAc1D;AAED,wBAAsB,kBAAkB,CACtC,iBAAiB,CAAC,EAAE,2CAA2C,GAC9D,OAAO,CAAC,OAAO,CAAC,CAkIlB;AAED,wBAAgB,SAAS,IAAI,MAAM,CAMlC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAMlC;AAED,wBAAgB,QAAQ,IAAI,KAAK,CAMhC"}
@@ -6,7 +6,8 @@ import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
6
6
  import { DeploymentTypeEnum, OBS_TAG_APPLICATION_ID, OBS_TAG_BRANCH, OBS_TAG_ORG_ID, OBS_TAG_USER_EMAIL, } from "@superblocksteam/shared";
7
7
  import { initNodeTelemetry, getTelemetryInstance, isTelemetryInitialized, parseDeploymentType, resetTelemetry, getDefaultPolicy, } from "@superblocksteam/telemetry";
8
8
  import packageJson from "../../package.json" with { type: "json" };
9
- import { ATTR_SUPERBLOCKS_BASE_URL, ATTR_SUPERBLOCKS_CLI_TOKEN, ATTR_SUPERBLOCKS_CSB_ID, ATTR_SUPERBLOCKS_IS_CSB, ATTR_SUPERBLOCKS_USER_ID, getEnvironmentFromHostname, } from "./attributes.js";
9
+ import { ATTR_SUPERBLOCKS_BASE_URL, ATTR_SUPERBLOCKS_CSB_ID, ATTR_SUPERBLOCKS_IS_CSB, ATTR_SUPERBLOCKS_USER_ID, getEnvironmentFromHostname, } from "./attributes.js";
10
+ import { getTelemetryIdentity, setTelemetryIdentity } from "./identity.js";
10
11
  import { applyLocalObsEnvVars, isLocalObsEnabled } from "./local-obs.js";
11
12
  import { getLogger as getStandardLogger } from "./logging.js";
12
13
  import { getConfiguration, SERVICE_NAME } from "./util.js";
@@ -73,8 +74,26 @@ export async function shutdownTelemetry() {
73
74
  }
74
75
  export async function configureTelemetry(applicationConfig) {
75
76
  const logger = getStandardLogger();
77
+ // The application, user, and org are known only at connect, so they are
78
+ // stamped onto every span and exported log record via the SDK's dynamic
79
+ // attribute source rather than the resource. This restores the identity the
80
+ // SDK used to put on the resource, without re-initializing (which would churn
81
+ // instrumentation). The CLI token is deliberately NOT included: it is a
82
+ // credential and does not belong in telemetry.
83
+ const identity = {
84
+ [OBS_TAG_APPLICATION_ID]: applicationConfig?.id,
85
+ [OBS_TAG_BRANCH]: applicationConfig?.branchName,
86
+ [OBS_TAG_USER_EMAIL]: applicationConfig?.userEmail,
87
+ [ATTR_SUPERBLOCKS_USER_ID]: applicationConfig?.userId,
88
+ [OBS_TAG_ORG_ID]: applicationConfig?.organizationId,
89
+ };
90
+ // Repeat calls (e.g. auth hot-reload) must not tear down a working pipeline:
91
+ // a shutdown+reinit loses the global provider registration (the OTel API
92
+ // rejects a second registration), leaving all instrumentation pointed at dead
93
+ // providers. Refresh the identity and keep the running SDK and dd-trace.
76
94
  if (configured) {
77
- await shutdownTelemetry();
95
+ setTelemetryIdentity(identity);
96
+ return true;
78
97
  }
79
98
  configured = true;
80
99
  try {
@@ -87,6 +106,7 @@ export async function configureTelemetry(applicationConfig) {
87
106
  return false;
88
107
  }
89
108
  logger.info(`[INIT] Initializing telemetry for service ${config.serviceName} at Superblocks instance ${config.superblocksHostname}`);
109
+ setTelemetryIdentity(identity);
90
110
  // Check for local observability mode (SUPERBLOCKS_LOCAL_OBS=true)
91
111
  const isLocalObs = isLocalObsEnabled();
92
112
  // Allow env var override for local development testing (AGENT-1048)
@@ -110,7 +130,6 @@ export async function configureTelemetry(applicationConfig) {
110
130
  plugins: false,
111
131
  tags: {
112
132
  [ATTR_SUPERBLOCKS_BASE_URL]: config.superblocksHostname,
113
- [ATTR_SUPERBLOCKS_CLI_TOKEN]: config.token,
114
133
  [ATTR_SUPERBLOCKS_IS_CSB]: !!process.env.SUPERBLOCKS_IS_CSB,
115
134
  [ATTR_SUPERBLOCKS_CSB_ID]: process.env.SUPERBLOCKS_IS_CSB
116
135
  ? os.hostname()
@@ -126,48 +145,39 @@ export async function configureTelemetry(applicationConfig) {
126
145
  : undefined,
127
146
  });
128
147
  logger.info(`[INIT] Datadog LLM tracing is ${ddTrace.llmobs.enabled ? "enabled" : "disabled"} for service ${config.serviceName}`);
129
- // Configure OpenTelemetry for APM traces and logs via shared telemetry package
130
- const policy = getDefaultPolicy(deploymentType);
131
- try {
132
- initNodeTelemetry({
133
- serviceName: config.serviceName,
134
- serviceVersion: packageJson.version,
135
- environment: getEnvironmentFromHostname(config.superblocksHostname),
136
- otlpUrl: config.otlpBaseUrl,
137
- resourceAttributes: {
138
- [ATTR_SUPERBLOCKS_BASE_URL]: config.superblocksHostname,
139
- [ATTR_SUPERBLOCKS_CLI_TOKEN]: config.token,
140
- [ATTR_SUPERBLOCKS_IS_CSB]: String(!!process.env.SUPERBLOCKS_IS_CSB),
141
- ...(process.env.SUPERBLOCKS_IS_CSB && {
142
- [ATTR_SUPERBLOCKS_CSB_ID]: os.hostname(),
143
- }),
144
- ...(applicationConfig?.id && {
145
- [OBS_TAG_APPLICATION_ID]: applicationConfig.id,
146
- }),
147
- ...(applicationConfig?.branchName && {
148
- [OBS_TAG_BRANCH]: applicationConfig.branchName,
149
- }),
150
- ...(applicationConfig?.userEmail && {
151
- [OBS_TAG_USER_EMAIL]: applicationConfig.userEmail,
152
- }),
153
- ...(applicationConfig?.userId && {
154
- [ATTR_SUPERBLOCKS_USER_ID]: applicationConfig.userId,
155
- }),
156
- ...(applicationConfig?.organizationId && {
157
- [OBS_TAG_ORG_ID]: applicationConfig.organizationId,
158
- }),
159
- },
160
- instrumentations: [
161
- new HttpInstrumentation(),
162
- new ExpressInstrumentation(),
163
- ],
164
- logsEnabled: true,
165
- }, policy);
166
- }
167
- catch (error) {
168
- console.error("[Telemetry] Failed to initialize OpenTelemetry:", error);
169
- configured = false;
170
- return false;
148
+ // Configure OpenTelemetry for APM traces and logs via shared telemetry
149
+ // package. When the early preload already started the SDK, skip: identity
150
+ // flows through the dynamic attribute source above, and constructing
151
+ // instrumentations here would only leave self-enabled orphans behind
152
+ // (initNodeTelemetry would return the existing instance and discard them).
153
+ if (!isTelemetryInitialized()) {
154
+ const policy = getDefaultPolicy(deploymentType);
155
+ try {
156
+ initNodeTelemetry({
157
+ serviceName: config.serviceName,
158
+ serviceVersion: packageJson.version,
159
+ environment: getEnvironmentFromHostname(config.superblocksHostname),
160
+ otlpUrl: config.otlpBaseUrl,
161
+ resourceAttributes: {
162
+ [ATTR_SUPERBLOCKS_BASE_URL]: config.superblocksHostname,
163
+ [ATTR_SUPERBLOCKS_IS_CSB]: String(!!process.env.SUPERBLOCKS_IS_CSB),
164
+ ...(process.env.SUPERBLOCKS_IS_CSB && {
165
+ [ATTR_SUPERBLOCKS_CSB_ID]: os.hostname(),
166
+ }),
167
+ },
168
+ instrumentations: [
169
+ new HttpInstrumentation(),
170
+ new ExpressInstrumentation(),
171
+ ],
172
+ logsEnabled: true,
173
+ dynamicAttributes: getTelemetryIdentity,
174
+ }, policy);
175
+ }
176
+ catch (error) {
177
+ console.error("[Telemetry] Failed to initialize OpenTelemetry:", error);
178
+ configured = false;
179
+ return false;
180
+ }
171
181
  }
172
182
  return true;
173
183
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,7 @@ vi.mock("./logging.js", () => ({
29
29
  error: vi.fn(),
30
30
  }),
31
31
  }));
32
+ import { FeatureFlags } from "../flag.js";
32
33
  describe("CLI SDK Telemetry Integration", () => {
33
34
  let telemetryModule;
34
35
  beforeAll(async () => {
@@ -43,8 +44,10 @@ describe("CLI SDK Telemetry Integration", () => {
43
44
  resetTelemetry();
44
45
  }
45
46
  });
46
- beforeEach(() => {
47
+ beforeEach(async () => {
47
48
  vi.clearAllMocks();
49
+ // Each test starts unconfigured; repeat-call behavior is tested explicitly.
50
+ await telemetryModule.shutdownTelemetry();
48
51
  });
49
52
  describe("configureTelemetry", () => {
50
53
  it("successfully initializes telemetry", async () => {
@@ -57,6 +60,31 @@ describe("CLI SDK Telemetry Integration", () => {
57
60
  await telemetryModule.configureTelemetry();
58
61
  expect(ddTrace.default.init).toHaveBeenCalled();
59
62
  });
63
+ it("refreshes identity on a repeat call without tearing down the pipeline", async () => {
64
+ const ddTrace = await import("dd-trace");
65
+ const { isTelemetryInitialized } = await import("@superblocksteam/telemetry");
66
+ const { getTelemetryIdentity } = await import("./identity.js");
67
+ const applicationConfig = {
68
+ id: "app-2",
69
+ branchName: "main",
70
+ userId: "user-1",
71
+ userEmail: "dev@example.com",
72
+ organizationId: "org-1",
73
+ featureFlags: new FeatureFlags({}),
74
+ superblocksBaseUrl: "https://app.superblocks.com",
75
+ token: "test1234",
76
+ };
77
+ await telemetryModule.configureTelemetry();
78
+ const result = await telemetryModule.configureTelemetry(applicationConfig);
79
+ expect(result).toBe(true);
80
+ // The running SDK and dd-trace survive; only identity is refreshed.
81
+ expect(isTelemetryInitialized()).toBe(true);
82
+ expect(ddTrace.default.init).toHaveBeenCalledTimes(1);
83
+ expect(getTelemetryIdentity()).toMatchObject({
84
+ "application-id": "app-2",
85
+ "organization-id": "org-1",
86
+ });
87
+ });
60
88
  });
61
89
  describe("getTracer", () => {
62
90
  it("returns working tracer after initialization", async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/telemetry/index.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/telemetry/index.test.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,10 @@
5
5
  * all environment variables needed for local observability testing with the
6
6
  * LGTM stack (Loki, Grafana, Tempo, Mimir).
7
7
  *
8
- * This eliminates the need to manually set 9+ environment variables:
8
+ * This eliminates the need to manually set 8+ environment variables:
9
9
  * - SUPERBLOCKS_DEPLOYMENT_TYPE
10
10
  * - SUPERBLOCKS_LLMOBS_ENABLED
11
11
  * - OTEL_EXPORTER_OTLP_ENDPOINT
12
- * - SUPERBLOCKS_OTEL_COLLECTOR_URL
13
12
  * - DD_LLMOBS_ENABLED
14
13
  * - DD_LLMOBS_ML_APP
15
14
  * - DD_LLMOBS_AGENTLESS_ENABLED
@@ -21,6 +20,13 @@
21
20
  *
22
21
  * Or with custom OTEL endpoint:
23
22
  * SUPERBLOCKS_LOCAL_OBS=true OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 pnpm start:all
23
+ *
24
+ * Note: this mode changes export POLICY (sampling, log levels, LLMObs), not the
25
+ * dev-server's OTLP endpoint. The dev-server always exports through the
26
+ * Superblocks server proxy at <SUPERBLOCKS_BASE_URL>/api, so with an auth file
27
+ * pointing at a remote instance, a standalone `SUPERBLOCKS_LOCAL_OBS=true
28
+ * superblocks dev` sends its telemetry to that instance, not to the local
29
+ * collector. Run against a local stack to keep telemetry local.
24
30
  */
25
31
  import { DeploymentTypeEnum } from "@superblocksteam/shared";
26
32
  export interface LocalObsConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"local-obs.d.ts","sourceRoot":"","sources":["../../src/telemetry/local-obs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAK7D,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,cAAc,EAAE,kBAAkB,CAAC,UAAU,CAAC;IAC9C,2BAA2B;IAC3B,MAAM,EAAE;QACN,OAAO,EAAE,IAAI,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,gBAAgB,EAAE,IAAI,CAAC;KACxB,CAAC;IACF,yCAAyC;IACzC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAqBzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAwB3C"}
1
+ {"version":3,"file":"local-obs.d.ts","sourceRoot":"","sources":["../../src/telemetry/local-obs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAK7D,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,cAAc,EAAE,kBAAkB,CAAC,UAAU,CAAC;IAC9C,2BAA2B;IAC3B,MAAM,EAAE;QACN,OAAO,EAAE,IAAI,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,gBAAgB,EAAE,IAAI,CAAC;KACxB,CAAC;IACF,yCAAyC;IACzC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAqBzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAuB3C"}
@@ -5,11 +5,10 @@
5
5
  * all environment variables needed for local observability testing with the
6
6
  * LGTM stack (Loki, Grafana, Tempo, Mimir).
7
7
  *
8
- * This eliminates the need to manually set 9+ environment variables:
8
+ * This eliminates the need to manually set 8+ environment variables:
9
9
  * - SUPERBLOCKS_DEPLOYMENT_TYPE
10
10
  * - SUPERBLOCKS_LLMOBS_ENABLED
11
11
  * - OTEL_EXPORTER_OTLP_ENDPOINT
12
- * - SUPERBLOCKS_OTEL_COLLECTOR_URL
13
12
  * - DD_LLMOBS_ENABLED
14
13
  * - DD_LLMOBS_ML_APP
15
14
  * - DD_LLMOBS_AGENTLESS_ENABLED
@@ -21,6 +20,13 @@
21
20
  *
22
21
  * Or with custom OTEL endpoint:
23
22
  * SUPERBLOCKS_LOCAL_OBS=true OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 pnpm start:all
23
+ *
24
+ * Note: this mode changes export POLICY (sampling, log levels, LLMObs), not the
25
+ * dev-server's OTLP endpoint. The dev-server always exports through the
26
+ * Superblocks server proxy at <SUPERBLOCKS_BASE_URL>/api, so with an auth file
27
+ * pointing at a remote instance, a standalone `SUPERBLOCKS_LOCAL_OBS=true
28
+ * superblocks dev` sends its telemetry to that instance, not to the local
29
+ * collector. Run against a local stack to keep telemetry local.
24
30
  */
25
31
  import { DeploymentTypeEnum } from "@superblocksteam/shared";
26
32
  const DEFAULT_LOCAL_OTEL_ENDPOINT = "http://localhost:4318";
@@ -91,7 +97,6 @@ export function applyLocalObsEnvVars() {
91
97
  SUPERBLOCKS_DEPLOYMENT_TYPE: config.deploymentType,
92
98
  SUPERBLOCKS_LLMOBS_ENABLED: "true",
93
99
  OTEL_EXPORTER_OTLP_ENDPOINT: config.otelEndpoint,
94
- SUPERBLOCKS_OTEL_COLLECTOR_URL: config.otelEndpoint,
95
100
  DD_LLMOBS_ENABLED: "1",
96
101
  DD_LLMOBS_ML_APP: config.llmobs.mlApp,
97
102
  DD_LLMOBS_AGENTLESS_ENABLED: "1",
@@ -1 +1 @@
1
- {"version":3,"file":"local-obs.js","sourceRoot":"","sources":["../../src/telemetry/local-obs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,2BAA2B,GAAG,uBAAuB,CAAC;AAC5D,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAsBtD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB;IAC/B,iBAAiB;IACjB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,kBAAkB,CAAC,UAAU;QACzE,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,MAAM;QACjD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAE5C,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,YAAY,EACV,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,2BAA2B;QACxE,cAAc,EAAE,kBAAkB,CAAC,UAAU;QAC7C,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,mBAAmB;YAC1D,gBAAgB,EAAE,IAAI;SACvB;QACD,OAAO,EAAE;YACP,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,eAAe;YAC5C,uEAAuE;YACvE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,qBAAqB;SACxD;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,+DAA+D;IAC/D,MAAM,WAAW,GAA2B;QAC1C,2BAA2B,EAAE,MAAM,CAAC,cAAc;QAClD,0BAA0B,EAAE,MAAM;QAClC,2BAA2B,EAAE,MAAM,CAAC,YAAY;QAChD,8BAA8B,EAAE,MAAM,CAAC,YAAY;QACnD,iBAAiB,EAAE,GAAG;QACtB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;QACrC,2BAA2B,EAAE,GAAG;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;QAC5B,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;KAClC,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"local-obs.js","sourceRoot":"","sources":["../../src/telemetry/local-obs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,2BAA2B,GAAG,uBAAuB,CAAC;AAC5D,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAsBtD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB;IAC/B,iBAAiB;IACjB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,kBAAkB,CAAC,UAAU;QACzE,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,MAAM;QACjD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAE5C,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,YAAY,EACV,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,2BAA2B;QACxE,cAAc,EAAE,kBAAkB,CAAC,UAAU;QAC7C,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,mBAAmB;YAC1D,gBAAgB,EAAE,IAAI;SACvB;QACD,OAAO,EAAE;YACP,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,eAAe;YAC5C,uEAAuE;YACvE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,qBAAqB;SACxD;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,+DAA+D;IAC/D,MAAM,WAAW,GAA2B;QAC1C,2BAA2B,EAAE,MAAM,CAAC,cAAc;QAClD,0BAA0B,EAAE,MAAM;QAClC,2BAA2B,EAAE,MAAM,CAAC,YAAY;QAChD,iBAAiB,EAAE,GAAG;QACtB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;QACrC,2BAA2B,EAAE,GAAG;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;QAC5B,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;KAClC,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Shared OTLP configuration for the dev-server CLI.
3
+ *
4
+ * This is the single source of truth for where the dev-server sends telemetry
5
+ * and how it tags it. It is imported by three places that must agree:
6
+ * - the early telemetry preload (`preload.mts`, full OTel SDK),
7
+ * - the SDK telemetry init (`util.ts` / `index.ts`),
8
+ * - the lightweight dev-server parent (`parent-otlp-metric.mts`), which hand-
9
+ * rolls OTLP because it must stay small and cannot load the OTel SDK.
10
+ *
11
+ * Because the parent imports this, the module MUST depend only on `node:`
12
+ * builtins and other import-free modules in this package (`attributes.ts`). Do
13
+ * NOT import OpenTelemetry, dd-trace, or the `@superblocksteam/sdk` barrel
14
+ * here — that would drag the SDK into the lightweight parent.
15
+ *
16
+ * Endpoint policy: the dev-server always exports through the Superblocks server's
17
+ * OTLP proxy at `<baseUrl>/api/v1/{traces,metrics,logs}`. The server forwards to
18
+ * the LGTM collector locally and to the in-cluster collector when deployed, so
19
+ * the client behaves identically in every environment — there is no
20
+ * direct-to-collector path.
21
+ */
22
+ /** Resource `service.name` for every dev-server telemetry signal. */
23
+ export declare const SERVICE_NAME = "sdk-dev-server";
24
+ /**
25
+ * Base URL the dev-server exports OTLP to: `<baseUrl origin>/api`. Callers append
26
+ * `/v1/traces`, `/v1/metrics`, or `/v1/logs`. Returns undefined when the base URL
27
+ * is missing or unparseable so callers can skip emission rather than crash.
28
+ */
29
+ export declare function otlpBaseUrl(baseUrl: string | URL | undefined): string | undefined;
30
+ /**
31
+ * Full OTLP metrics endpoint derived from `SUPERBLOCKS_BASE_URL`. Used by the
32
+ * lightweight parent's hand-rolled emitter.
33
+ */
34
+ export declare function otlpMetricsUrl(env?: NodeJS.ProcessEnv): string | null;
35
+ /**
36
+ * Derives the `deployment.environment.name` resource attribute from
37
+ * `SUPERBLOCKS_BASE_URL` so every dev-server signal carries the same environment
38
+ * tag. Defaults to `"other"` when the host is unknown or unavailable.
39
+ */
40
+ export declare function deploymentEnvironment(env?: NodeJS.ProcessEnv): string;
41
+ export declare function warnIfCollectorUrlIgnored(env?: NodeJS.ProcessEnv): void;
42
+ /**
43
+ * Builds a minimal OTLP/HTTP `ExportMetricsServiceRequest` body for a single
44
+ * monotonic DELTA counter increment (value 1). Timestamps are nanosecond
45
+ * decimal strings built with BigInt so JS number precision can't corrupt them;
46
+ * `startTimeUnixNano <= timeUnixNano` is required by the protocol.
47
+ */
48
+ export declare function buildDeltaCounterPayload(opts: {
49
+ name: string;
50
+ description: string;
51
+ attributes: Record<string, string>;
52
+ environment: string;
53
+ serviceName?: string;
54
+ scopeName?: string;
55
+ nowMs?: number;
56
+ }): unknown;
57
+ /**
58
+ * Fire-and-forget POST of a single counter increment as OTLP/HTTP JSON.
59
+ *
60
+ * Never throws and never rejects: any failure (no endpoint, DNS, timeout,
61
+ * non-2xx) resolves quietly so telemetry cannot break or delay the parent's
62
+ * supervision loop or shutdown. In production the request socket and timeout are
63
+ * `unref`'d so a slow collector can't keep the parent alive; tests pass
64
+ * `unref: false` and `await` to observe the request deterministically.
65
+ */
66
+ export declare function emitOtlpCounter(opts: {
67
+ name: string;
68
+ description: string;
69
+ attributes: Record<string, string>;
70
+ env?: NodeJS.ProcessEnv;
71
+ timeoutMs?: number;
72
+ unref?: boolean;
73
+ }): Promise<void>;
74
+ //# sourceMappingURL=otlp-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otlp-config.d.ts","sourceRoot":"","sources":["../../src/telemetry/otlp-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,qEAAqE;AACrE,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAQ7C;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,GAChC,MAAM,GAAG,SAAS,CASpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,IAAI,CAGf;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAYR;AAMD,wBAAgB,yBAAyB,CACvC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,IAAI,CAQN;AAYD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAwCV;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiEhB"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Shared OTLP configuration for the dev-server CLI.
3
+ *
4
+ * This is the single source of truth for where the dev-server sends telemetry
5
+ * and how it tags it. It is imported by three places that must agree:
6
+ * - the early telemetry preload (`preload.mts`, full OTel SDK),
7
+ * - the SDK telemetry init (`util.ts` / `index.ts`),
8
+ * - the lightweight dev-server parent (`parent-otlp-metric.mts`), which hand-
9
+ * rolls OTLP because it must stay small and cannot load the OTel SDK.
10
+ *
11
+ * Because the parent imports this, the module MUST depend only on `node:`
12
+ * builtins and other import-free modules in this package (`attributes.ts`). Do
13
+ * NOT import OpenTelemetry, dd-trace, or the `@superblocksteam/sdk` barrel
14
+ * here — that would drag the SDK into the lightweight parent.
15
+ *
16
+ * Endpoint policy: the dev-server always exports through the Superblocks server's
17
+ * OTLP proxy at `<baseUrl>/api/v1/{traces,metrics,logs}`. The server forwards to
18
+ * the LGTM collector locally and to the in-cluster collector when deployed, so
19
+ * the client behaves identically in every environment — there is no
20
+ * direct-to-collector path.
21
+ */
22
+ import * as http from "node:http";
23
+ import * as https from "node:https";
24
+ import { getEnvironmentFromHostname } from "./attributes.js";
25
+ /** Resource `service.name` for every dev-server telemetry signal. */
26
+ export const SERVICE_NAME = "sdk-dev-server";
27
+ /** OTel instrument scope for parent-emitted metrics (distinct from the child). */
28
+ const SCOPE_NAME = "superblocks.cli.dev-parent";
29
+ /** Default fire-and-forget POST budget. Telemetry must never delay the parent. */
30
+ const DEFAULT_TIMEOUT_MS = 1000;
31
+ /**
32
+ * Base URL the dev-server exports OTLP to: `<baseUrl origin>/api`. Callers append
33
+ * `/v1/traces`, `/v1/metrics`, or `/v1/logs`. Returns undefined when the base URL
34
+ * is missing or unparseable so callers can skip emission rather than crash.
35
+ */
36
+ export function otlpBaseUrl(baseUrl) {
37
+ if (!baseUrl) {
38
+ return undefined;
39
+ }
40
+ try {
41
+ return `${new URL(baseUrl).origin}/api`;
42
+ }
43
+ catch {
44
+ return undefined;
45
+ }
46
+ }
47
+ /**
48
+ * Full OTLP metrics endpoint derived from `SUPERBLOCKS_BASE_URL`. Used by the
49
+ * lightweight parent's hand-rolled emitter.
50
+ */
51
+ export function otlpMetricsUrl(env = process.env) {
52
+ const base = otlpBaseUrl(env.SUPERBLOCKS_BASE_URL);
53
+ return base ? `${base}/v1/metrics` : null;
54
+ }
55
+ /**
56
+ * Derives the `deployment.environment.name` resource attribute from
57
+ * `SUPERBLOCKS_BASE_URL` so every dev-server signal carries the same environment
58
+ * tag. Defaults to `"other"` when the host is unknown or unavailable.
59
+ */
60
+ export function deploymentEnvironment(env = process.env) {
61
+ const baseUrl = env.SUPERBLOCKS_BASE_URL;
62
+ if (!baseUrl) {
63
+ return "other";
64
+ }
65
+ let hostname;
66
+ try {
67
+ hostname = new URL(baseUrl).hostname;
68
+ }
69
+ catch {
70
+ return "other";
71
+ }
72
+ return getEnvironmentFromHostname(hostname);
73
+ }
74
+ // The direct-to-collector export path was removed: the dev-server always goes
75
+ // through the server proxy. Anyone still setting the old env var gets one
76
+ // visible notice instead of silently-dropped configuration.
77
+ let warnedCollectorUrlIgnored = false;
78
+ export function warnIfCollectorUrlIgnored(env = process.env) {
79
+ if (warnedCollectorUrlIgnored || !env.SUPERBLOCKS_OTEL_COLLECTOR_URL) {
80
+ return;
81
+ }
82
+ warnedCollectorUrlIgnored = true;
83
+ console.warn("[Telemetry] SUPERBLOCKS_OTEL_COLLECTOR_URL is set but ignored: the dev-server always exports through the Superblocks server proxy at <SUPERBLOCKS_BASE_URL>/api.");
84
+ }
85
+ warnIfCollectorUrlIgnored();
86
+ function toAttributeArray(attributes) {
87
+ return Object.entries(attributes).map(([key, value]) => ({
88
+ key,
89
+ value: { stringValue: value },
90
+ }));
91
+ }
92
+ /**
93
+ * Builds a minimal OTLP/HTTP `ExportMetricsServiceRequest` body for a single
94
+ * monotonic DELTA counter increment (value 1). Timestamps are nanosecond
95
+ * decimal strings built with BigInt so JS number precision can't corrupt them;
96
+ * `startTimeUnixNano <= timeUnixNano` is required by the protocol.
97
+ */
98
+ export function buildDeltaCounterPayload(opts) {
99
+ const nowNano = BigInt(opts.nowMs ?? Date.now()) * 1000000n;
100
+ // A 1ms window keeps start strictly <= time without implying real duration.
101
+ const startNano = nowNano - 1000000n;
102
+ return {
103
+ resourceMetrics: [
104
+ {
105
+ resource: {
106
+ attributes: toAttributeArray({
107
+ "service.name": opts.serviceName ?? SERVICE_NAME,
108
+ "deployment.environment.name": opts.environment,
109
+ }),
110
+ },
111
+ scopeMetrics: [
112
+ {
113
+ scope: { name: opts.scopeName ?? SCOPE_NAME },
114
+ metrics: [
115
+ {
116
+ name: opts.name,
117
+ description: opts.description,
118
+ sum: {
119
+ aggregationTemporality: 1, // AGGREGATION_TEMPORALITY_DELTA
120
+ isMonotonic: true,
121
+ dataPoints: [
122
+ {
123
+ attributes: toAttributeArray(opts.attributes),
124
+ startTimeUnixNano: startNano.toString(),
125
+ timeUnixNano: nowNano.toString(),
126
+ asInt: "1",
127
+ },
128
+ ],
129
+ },
130
+ },
131
+ ],
132
+ },
133
+ ],
134
+ },
135
+ ],
136
+ };
137
+ }
138
+ /**
139
+ * Fire-and-forget POST of a single counter increment as OTLP/HTTP JSON.
140
+ *
141
+ * Never throws and never rejects: any failure (no endpoint, DNS, timeout,
142
+ * non-2xx) resolves quietly so telemetry cannot break or delay the parent's
143
+ * supervision loop or shutdown. In production the request socket and timeout are
144
+ * `unref`'d so a slow collector can't keep the parent alive; tests pass
145
+ * `unref: false` and `await` to observe the request deterministically.
146
+ */
147
+ export function emitOtlpCounter(opts) {
148
+ const env = opts.env ?? process.env;
149
+ const url = otlpMetricsUrl(env);
150
+ if (!url) {
151
+ return Promise.resolve();
152
+ }
153
+ let parsed;
154
+ try {
155
+ parsed = new URL(url);
156
+ }
157
+ catch {
158
+ return Promise.resolve();
159
+ }
160
+ const body = JSON.stringify(buildDeltaCounterPayload({
161
+ name: opts.name,
162
+ description: opts.description,
163
+ attributes: opts.attributes,
164
+ environment: deploymentEnvironment(env),
165
+ }));
166
+ const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
167
+ const unref = opts.unref ?? true;
168
+ const transport = parsed.protocol === "https:" ? https : http;
169
+ return new Promise((resolve) => {
170
+ let settled = false;
171
+ const done = () => {
172
+ if (settled)
173
+ return;
174
+ settled = true;
175
+ resolve();
176
+ };
177
+ const req = transport.request({
178
+ protocol: parsed.protocol,
179
+ hostname: parsed.hostname,
180
+ port: parsed.port,
181
+ path: parsed.pathname + parsed.search,
182
+ method: "POST",
183
+ headers: {
184
+ "content-type": "application/json",
185
+ "content-length": Buffer.byteLength(body),
186
+ },
187
+ }, (res) => {
188
+ // Drain so the socket can close; the status is irrelevant to the parent.
189
+ res.on("data", () => { });
190
+ res.on("end", done);
191
+ res.on("error", done);
192
+ });
193
+ req.on("error", done);
194
+ req.setTimeout(timeoutMs, () => {
195
+ req.destroy();
196
+ done();
197
+ });
198
+ if (unref) {
199
+ req.on("socket", (socket) => socket.unref());
200
+ }
201
+ req.end(body);
202
+ });
203
+ }
204
+ //# sourceMappingURL=otlp-config.js.map