@posthog/core 1.49.2 → 1.50.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.
- package/dist/featureFlagLocalEvaluation.d.ts +1 -1
- package/dist/featureFlagLocalEvaluation.d.ts.map +1 -1
- package/dist/featureFlagLocalEvaluation.js +149 -10
- package/dist/featureFlagLocalEvaluation.mjs +149 -10
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -31
- package/dist/index.mjs +4 -2
- package/dist/logs/logs-utils.d.ts +1 -3
- package/dist/logs/logs-utils.d.ts.map +1 -1
- package/dist/logs/logs-utils.js +7 -170
- package/dist/logs/logs-utils.mjs +6 -163
- package/dist/metrics/index.js +2 -2
- package/dist/metrics/index.mjs +1 -1
- package/dist/metrics/metrics-utils.d.ts.map +1 -1
- package/dist/metrics/metrics-utils.js +4 -14
- package/dist/metrics/metrics-utils.mjs +3 -13
- package/dist/utils/otlp-any-value.d.ts +5 -0
- package/dist/utils/otlp-any-value.d.ts.map +1 -0
- package/dist/utils/otlp-any-value.js +203 -0
- package/dist/utils/otlp-any-value.mjs +166 -0
- package/dist/utils/otlp-resource.d.ts +38 -0
- package/dist/utils/otlp-resource.d.ts.map +1 -0
- package/dist/utils/otlp-resource.js +81 -0
- package/dist/utils/otlp-resource.mjs +41 -0
- package/dist/utils/user-agent-utils.d.ts +4 -4
- package/dist/utils/user-agent-utils.d.ts.map +1 -1
- package/dist/utils/user-agent-utils.js +16 -0
- package/dist/utils/user-agent-utils.mjs +16 -0
- package/package.json +1 -1
- package/src/featureFlagLocalEvaluation.ts +199 -12
- package/src/index.ts +2 -2
- package/src/logs/logs-utils.spec.ts +2 -350
- package/src/logs/logs-utils.ts +5 -215
- package/src/metrics/index.ts +1 -1
- package/src/metrics/metrics-utils.ts +3 -9
- package/src/utils/otlp-any-value.spec.ts +361 -0
- package/src/utils/otlp-any-value.ts +225 -0
- package/src/utils/otlp-resource.spec.ts +125 -0
- package/src/utils/otlp-resource.ts +89 -0
- package/src/utils/user-agent-utils.ts +22 -6
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, flagDetailsToResults, getEnabledFromValue, getFeatureFlagValue, getVariantFromValue, minimizeFlagCalledEventProperties, parsePayload } from "./featureFlagUtils.mjs";
|
|
2
2
|
import { InconclusiveMatchError, getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, hashSHA1, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload } from "./featureFlagLocalEvaluation.mjs";
|
|
3
3
|
import { gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError } from "./gzip.mjs";
|
|
4
|
-
import { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText
|
|
4
|
+
import { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText } from "./logs/logs-utils.mjs";
|
|
5
|
+
import { toOtlpAnyValue, toOtlpKeyValueList } from "./utils/otlp-any-value.mjs";
|
|
6
|
+
import { osResourceAttributes } from "./utils/otlp-resource.mjs";
|
|
5
7
|
import { PostHogLogs } from "./logs/index.mjs";
|
|
6
8
|
import { DEFAULT_HISTOGRAM_BOUNDS, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpMetricsPayload, resolveMetricsConfig } from "./metrics/index.mjs";
|
|
7
9
|
import { uuidv7 } from "./vendor/uuidv7.mjs";
|
|
@@ -13,4 +15,4 @@ export * from "./posthog-core-stateless.mjs";
|
|
|
13
15
|
export * from "./tracing-headers.mjs";
|
|
14
16
|
export * from "./types.mjs";
|
|
15
17
|
import * as __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ from "./error-tracking/index.mjs";
|
|
16
|
-
export { DEFAULT_HISTOGRAM_BOUNDS, __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ as ErrorTracking, InconclusiveMatchError, MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, PostHogLogs, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpLogRecord, buildOtlpLogsPayload, buildOtlpMetricsPayload, buildResourceAttributes, flagDetailsToResults, getEnabledFromValue, getFeatureFlagHash, getFeatureFlagValue, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, getLengthFromRules, getOtlpSeverityNumber, getOtlpSeverityText, getRequirementsHint, getValidationError, getVariantFromValue, gzipCompress, hashSHA1, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError, matchFeatureFlagProperty, minimizeFlagCalledEventProperties, parseFeatureFlagSemver, parsePayload, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload, resolveMetricsConfig, toOtlpAnyValue, toOtlpKeyValueList, uuidv7 };
|
|
18
|
+
export { DEFAULT_HISTOGRAM_BOUNDS, __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ as ErrorTracking, InconclusiveMatchError, MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, PostHogLogs, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpLogRecord, buildOtlpLogsPayload, buildOtlpMetricsPayload, buildResourceAttributes, flagDetailsToResults, getEnabledFromValue, getFeatureFlagHash, getFeatureFlagValue, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, getLengthFromRules, getOtlpSeverityNumber, getOtlpSeverityText, getRequirementsHint, getValidationError, getVariantFromValue, gzipCompress, hashSHA1, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError, matchFeatureFlagProperty, minimizeFlagCalledEventProperties, osResourceAttributes, parseFeatureFlagSemver, parsePayload, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload, resolveMetricsConfig, toOtlpAnyValue, toOtlpKeyValueList, uuidv7 };
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import type { CaptureLogOptions, LogAttributeValue, LogSeverityLevel,
|
|
1
|
+
import type { CaptureLogOptions, LogAttributeValue, LogSeverityLevel, OtlpLogRecord, OtlpLogsPayload, OtlpSeverityText } from '@posthog/types';
|
|
2
2
|
import type { Logger } from '../types';
|
|
3
3
|
import type { LogSdkContext, ResolvedPostHogLogsConfig } from './types';
|
|
4
4
|
export declare function getOtlpSeverityText(level: LogSeverityLevel): OtlpSeverityText;
|
|
5
5
|
export declare function getOtlpSeverityNumber(level: LogSeverityLevel): number;
|
|
6
|
-
export declare function toOtlpAnyValue(value: LogAttributeValue, logger?: Logger): OtlpAnyValue;
|
|
7
|
-
export declare function toOtlpKeyValueList(attrs: Record<string, LogAttributeValue>, logger?: Logger): OtlpKeyValue[];
|
|
8
6
|
export declare function buildOtlpLogRecord(options: CaptureLogOptions, sdkContext: LogSdkContext, logger?: Logger, occurredAtMs?: number): OtlpLogRecord;
|
|
9
7
|
/**
|
|
10
8
|
* OTLP resource attributes for every batch, shared by the core flush path and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs-utils.d.ts","sourceRoot":"","sources":["../../src/logs/logs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"logs-utils.d.ts","sourceRoot":"","sources":["../../src/logs/logs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,eAAe,EAEf,gBAAgB,EACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAqBvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAE7E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAErE;AA0CD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,aAAa,EACzB,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,aAAa,CA+Ef;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,yBAAyB,EACjC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAEnC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,aAAa,EAAE,EAC3B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACrD,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,eAAe,CAcjB"}
|
package/dist/logs/logs-utils.js
CHANGED
|
@@ -24,16 +24,16 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
toOtlpKeyValueList: ()=>toOtlpKeyValueList,
|
|
28
27
|
getOtlpSeverityNumber: ()=>getOtlpSeverityNumber,
|
|
29
28
|
buildResourceAttributes: ()=>buildResourceAttributes,
|
|
30
29
|
getOtlpSeverityText: ()=>getOtlpSeverityText,
|
|
31
30
|
buildOtlpLogsPayload: ()=>buildOtlpLogsPayload,
|
|
32
|
-
buildOtlpLogRecord: ()=>buildOtlpLogRecord
|
|
33
|
-
toOtlpAnyValue: ()=>toOtlpAnyValue
|
|
31
|
+
buildOtlpLogRecord: ()=>buildOtlpLogRecord
|
|
34
32
|
});
|
|
35
33
|
const index_js_namespaceObject = require("../utils/index.js");
|
|
36
34
|
const json_utils_js_namespaceObject = require("../utils/json-utils.js");
|
|
35
|
+
const otlp_any_value_js_namespaceObject = require("../utils/otlp-any-value.js");
|
|
36
|
+
const otlp_resource_js_namespaceObject = require("../utils/otlp-resource.js");
|
|
37
37
|
const OTLP_SEVERITY_MAP = {
|
|
38
38
|
trace: {
|
|
39
39
|
text: 'TRACE',
|
|
@@ -67,154 +67,6 @@ function getOtlpSeverityText(level) {
|
|
|
67
67
|
function getOtlpSeverityNumber(level) {
|
|
68
68
|
return (OTLP_SEVERITY_MAP[level] || DEFAULT_OTLP_SEVERITY).number;
|
|
69
69
|
}
|
|
70
|
-
const INT64_RANGE_LIMIT = 9223372036854775808;
|
|
71
|
-
const propertyIsEnumerable = Object.prototype.propertyIsEnumerable;
|
|
72
|
-
function newState() {
|
|
73
|
-
return {
|
|
74
|
-
ancestors: new WeakSet(),
|
|
75
|
-
remainingNodes: json_utils_js_namespaceObject.MAX_JSON_SAFE_VALUE_NODES
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
function toOtlpAnyValue(value, logger) {
|
|
79
|
-
try {
|
|
80
|
-
return encodeAnyValue(value, logger, newState(), 0);
|
|
81
|
-
} catch {
|
|
82
|
-
return {
|
|
83
|
-
stringValue: json_utils_js_namespaceObject.UNSERIALIZABLE_VALUE
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
function toOtlpKeyValueList(attrs, logger) {
|
|
88
|
-
try {
|
|
89
|
-
return encodeKeyValueList(attrs, logger, newState(), 0);
|
|
90
|
-
} catch {
|
|
91
|
-
return [];
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
function encodeAnyValue(value, logger, state, depth) {
|
|
95
|
-
if (state.remainingNodes <= 0) return {
|
|
96
|
-
stringValue: json_utils_js_namespaceObject.TRUNCATED_VALUE
|
|
97
|
-
};
|
|
98
|
-
state.remainingNodes--;
|
|
99
|
-
if ((0, index_js_namespaceObject.isBoolean)(value)) return {
|
|
100
|
-
boolValue: value
|
|
101
|
-
};
|
|
102
|
-
if ('number' == typeof value) {
|
|
103
|
-
if (!Number.isFinite(value)) return {
|
|
104
|
-
stringValue: String(value)
|
|
105
|
-
};
|
|
106
|
-
if (Number.isInteger(value)) {
|
|
107
|
-
if (Number.isSafeInteger(value)) return {
|
|
108
|
-
intValue: String(value)
|
|
109
|
-
};
|
|
110
|
-
if ('undefined' == typeof BigInt) return {
|
|
111
|
-
stringValue: String(value)
|
|
112
|
-
};
|
|
113
|
-
const decimal = BigInt(value).toString();
|
|
114
|
-
if (value >= INT64_RANGE_LIMIT || value < -INT64_RANGE_LIMIT) {
|
|
115
|
-
logger?.debug(`Attribute ${decimal} is outside the int64 range; encoding it as a string`);
|
|
116
|
-
return {
|
|
117
|
-
stringValue: decimal
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
intValue: decimal
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
return {
|
|
125
|
-
doubleValue: value
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
if ('string' == typeof value) return {
|
|
129
|
-
stringValue: (0, json_utils_js_namespaceObject.sanitizeString)(value)
|
|
130
|
-
};
|
|
131
|
-
if ('function' == typeof value) return {
|
|
132
|
-
stringValue: json_utils_js_namespaceObject.FUNCTION_VALUE
|
|
133
|
-
};
|
|
134
|
-
if ('symbol' == typeof value) return {
|
|
135
|
-
stringValue: String(value)
|
|
136
|
-
};
|
|
137
|
-
if ('object' == typeof value && null !== value) {
|
|
138
|
-
if (state.ancestors.has(value)) return {
|
|
139
|
-
stringValue: json_utils_js_namespaceObject.CIRCULAR_VALUE
|
|
140
|
-
};
|
|
141
|
-
if (depth >= json_utils_js_namespaceObject.MAX_JSON_SAFE_VALUE_DEPTH) return {
|
|
142
|
-
stringValue: json_utils_js_namespaceObject.TRUNCATED_VALUE
|
|
143
|
-
};
|
|
144
|
-
if (value instanceof Date) {
|
|
145
|
-
const time = value.getTime();
|
|
146
|
-
const iso = Number.isFinite(time) ? value.toISOString() : String(value);
|
|
147
|
-
return {
|
|
148
|
-
stringValue: 'string' == typeof iso ? (0, json_utils_js_namespaceObject.sanitizeString)(iso) : String(iso)
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
state.ancestors.add(value);
|
|
152
|
-
try {
|
|
153
|
-
try {
|
|
154
|
-
const toJSON = value.toJSON;
|
|
155
|
-
if ('function' == typeof toJSON) return encodeAnyValue(toJSON.call(value), logger, state, depth + 1);
|
|
156
|
-
} catch {}
|
|
157
|
-
if ((0, index_js_namespaceObject.isArray)(value)) return {
|
|
158
|
-
arrayValue: {
|
|
159
|
-
values: encodeArrayValues(value, logger, state, depth + 1)
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
return {
|
|
163
|
-
kvlistValue: {
|
|
164
|
-
values: encodeKeyValueList(value, logger, state, depth + 1)
|
|
165
|
-
}
|
|
166
|
-
};
|
|
167
|
-
} finally{
|
|
168
|
-
state.ancestors.delete(value);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return {
|
|
172
|
-
stringValue: (0, json_utils_js_namespaceObject.sanitizeString)(String(value))
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
function encodeArrayValues(values, logger, state, depth) {
|
|
176
|
-
const result = [];
|
|
177
|
-
const itemCount = Math.min(values.length, json_utils_js_namespaceObject.MAX_JSON_SAFE_VALUE_ITEMS);
|
|
178
|
-
let index = 0;
|
|
179
|
-
for(; index < itemCount && state.remainingNodes > 0; index++)try {
|
|
180
|
-
const element = index in values ? values[index] : void 0;
|
|
181
|
-
if ((0, index_js_namespaceObject.isNullish)(element)) continue;
|
|
182
|
-
result.push(encodeAnyValue(element, logger, state, depth));
|
|
183
|
-
} catch {
|
|
184
|
-
result.push({
|
|
185
|
-
stringValue: json_utils_js_namespaceObject.UNSERIALIZABLE_VALUE
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
if (values.length > index) result.push({
|
|
189
|
-
stringValue: json_utils_js_namespaceObject.TRUNCATED_VALUE
|
|
190
|
-
});
|
|
191
|
-
return result;
|
|
192
|
-
}
|
|
193
|
-
function encodeKeyValueList(attrs, logger, state, depth) {
|
|
194
|
-
const result = [];
|
|
195
|
-
for(const key in attrs)if (propertyIsEnumerable.call(attrs, key)) {
|
|
196
|
-
if (result.length >= json_utils_js_namespaceObject.MAX_JSON_SAFE_VALUE_ITEMS || state.remainingNodes <= 0) {
|
|
197
|
-
logger?.debug('Attributes truncated: the value exceeds the OTLP encoder budget');
|
|
198
|
-
break;
|
|
199
|
-
}
|
|
200
|
-
try {
|
|
201
|
-
const value = attrs[key];
|
|
202
|
-
if ((0, index_js_namespaceObject.isNull)(value) || (0, index_js_namespaceObject.isUndefined)(value)) continue;
|
|
203
|
-
result.push({
|
|
204
|
-
key: (0, json_utils_js_namespaceObject.sanitizeString)(key),
|
|
205
|
-
value: encodeAnyValue(value, logger, state, depth)
|
|
206
|
-
});
|
|
207
|
-
} catch {
|
|
208
|
-
result.push({
|
|
209
|
-
key: (0, json_utils_js_namespaceObject.sanitizeString)(key),
|
|
210
|
-
value: {
|
|
211
|
-
stringValue: json_utils_js_namespaceObject.UNSERIALIZABLE_VALUE
|
|
212
|
-
}
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return result;
|
|
217
|
-
}
|
|
218
70
|
function timestampToUnixNano(timestampMs = Date.now()) {
|
|
219
71
|
return String(timestampMs) + '000000';
|
|
220
72
|
}
|
|
@@ -273,7 +125,7 @@ function buildOtlpLogRecord(options, sdkContext, logger, occurredAtMs) {
|
|
|
273
125
|
body: {
|
|
274
126
|
stringValue: encodeBody(options.body)
|
|
275
127
|
},
|
|
276
|
-
attributes: toOtlpKeyValueList(mergedAttributes, logger)
|
|
128
|
+
attributes: (0, otlp_any_value_js_namespaceObject.toOtlpKeyValueList)(mergedAttributes, logger)
|
|
277
129
|
};
|
|
278
130
|
if (options.trace_id) record.traceId = options.trace_id;
|
|
279
131
|
if (options.span_id) record.spanId = options.span_id;
|
|
@@ -281,25 +133,14 @@ function buildOtlpLogRecord(options, sdkContext, logger, occurredAtMs) {
|
|
|
281
133
|
return record;
|
|
282
134
|
}
|
|
283
135
|
function buildResourceAttributes(config, sdkName, sdkVersion) {
|
|
284
|
-
return
|
|
285
|
-
...config.resourceAttributes,
|
|
286
|
-
'service.name': config.serviceName || 'unknown_service',
|
|
287
|
-
...config.environment && {
|
|
288
|
-
'deployment.environment': config.environment
|
|
289
|
-
},
|
|
290
|
-
...config.serviceVersion && {
|
|
291
|
-
'service.version': config.serviceVersion
|
|
292
|
-
},
|
|
293
|
-
'telemetry.sdk.name': sdkName,
|
|
294
|
-
'telemetry.sdk.version': sdkVersion
|
|
295
|
-
};
|
|
136
|
+
return (0, otlp_resource_js_namespaceObject.buildOtlpResourceAttributes)(config, sdkName, sdkVersion);
|
|
296
137
|
}
|
|
297
138
|
function buildOtlpLogsPayload(logRecords, resourceAttributes, scopeName, scopeVersion) {
|
|
298
139
|
return {
|
|
299
140
|
resourceLogs: [
|
|
300
141
|
{
|
|
301
142
|
resource: {
|
|
302
|
-
attributes: toOtlpKeyValueList(resourceAttributes)
|
|
143
|
+
attributes: (0, otlp_any_value_js_namespaceObject.toOtlpKeyValueList)(resourceAttributes)
|
|
303
144
|
},
|
|
304
145
|
scopeLogs: [
|
|
305
146
|
{
|
|
@@ -319,16 +160,12 @@ exports.buildOtlpLogsPayload = __webpack_exports__.buildOtlpLogsPayload;
|
|
|
319
160
|
exports.buildResourceAttributes = __webpack_exports__.buildResourceAttributes;
|
|
320
161
|
exports.getOtlpSeverityNumber = __webpack_exports__.getOtlpSeverityNumber;
|
|
321
162
|
exports.getOtlpSeverityText = __webpack_exports__.getOtlpSeverityText;
|
|
322
|
-
exports.toOtlpAnyValue = __webpack_exports__.toOtlpAnyValue;
|
|
323
|
-
exports.toOtlpKeyValueList = __webpack_exports__.toOtlpKeyValueList;
|
|
324
163
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
325
164
|
"buildOtlpLogRecord",
|
|
326
165
|
"buildOtlpLogsPayload",
|
|
327
166
|
"buildResourceAttributes",
|
|
328
167
|
"getOtlpSeverityNumber",
|
|
329
|
-
"getOtlpSeverityText"
|
|
330
|
-
"toOtlpAnyValue",
|
|
331
|
-
"toOtlpKeyValueList"
|
|
168
|
+
"getOtlpSeverityText"
|
|
332
169
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
333
170
|
Object.defineProperty(exports, '__esModule', {
|
|
334
171
|
value: true
|
package/dist/logs/logs-utils.mjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { isNullish, isNumber, isUndefined } from "../utils/index.mjs";
|
|
2
|
+
import { UNSERIALIZABLE_VALUE, sanitizeString } from "../utils/json-utils.mjs";
|
|
3
|
+
import { toOtlpKeyValueList } from "../utils/otlp-any-value.mjs";
|
|
4
|
+
import { buildOtlpResourceAttributes } from "../utils/otlp-resource.mjs";
|
|
3
5
|
const OTLP_SEVERITY_MAP = {
|
|
4
6
|
trace: {
|
|
5
7
|
text: 'TRACE',
|
|
@@ -33,154 +35,6 @@ function getOtlpSeverityText(level) {
|
|
|
33
35
|
function getOtlpSeverityNumber(level) {
|
|
34
36
|
return (OTLP_SEVERITY_MAP[level] || DEFAULT_OTLP_SEVERITY).number;
|
|
35
37
|
}
|
|
36
|
-
const INT64_RANGE_LIMIT = 9223372036854775808;
|
|
37
|
-
const propertyIsEnumerable = Object.prototype.propertyIsEnumerable;
|
|
38
|
-
function newState() {
|
|
39
|
-
return {
|
|
40
|
-
ancestors: new WeakSet(),
|
|
41
|
-
remainingNodes: MAX_JSON_SAFE_VALUE_NODES
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
function toOtlpAnyValue(value, logger) {
|
|
45
|
-
try {
|
|
46
|
-
return encodeAnyValue(value, logger, newState(), 0);
|
|
47
|
-
} catch {
|
|
48
|
-
return {
|
|
49
|
-
stringValue: UNSERIALIZABLE_VALUE
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
function toOtlpKeyValueList(attrs, logger) {
|
|
54
|
-
try {
|
|
55
|
-
return encodeKeyValueList(attrs, logger, newState(), 0);
|
|
56
|
-
} catch {
|
|
57
|
-
return [];
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
function encodeAnyValue(value, logger, state, depth) {
|
|
61
|
-
if (state.remainingNodes <= 0) return {
|
|
62
|
-
stringValue: TRUNCATED_VALUE
|
|
63
|
-
};
|
|
64
|
-
state.remainingNodes--;
|
|
65
|
-
if (isBoolean(value)) return {
|
|
66
|
-
boolValue: value
|
|
67
|
-
};
|
|
68
|
-
if ('number' == typeof value) {
|
|
69
|
-
if (!Number.isFinite(value)) return {
|
|
70
|
-
stringValue: String(value)
|
|
71
|
-
};
|
|
72
|
-
if (Number.isInteger(value)) {
|
|
73
|
-
if (Number.isSafeInteger(value)) return {
|
|
74
|
-
intValue: String(value)
|
|
75
|
-
};
|
|
76
|
-
if ('undefined' == typeof BigInt) return {
|
|
77
|
-
stringValue: String(value)
|
|
78
|
-
};
|
|
79
|
-
const decimal = BigInt(value).toString();
|
|
80
|
-
if (value >= INT64_RANGE_LIMIT || value < -INT64_RANGE_LIMIT) {
|
|
81
|
-
logger?.debug(`Attribute ${decimal} is outside the int64 range; encoding it as a string`);
|
|
82
|
-
return {
|
|
83
|
-
stringValue: decimal
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
return {
|
|
87
|
-
intValue: decimal
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
return {
|
|
91
|
-
doubleValue: value
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
if ('string' == typeof value) return {
|
|
95
|
-
stringValue: sanitizeString(value)
|
|
96
|
-
};
|
|
97
|
-
if ('function' == typeof value) return {
|
|
98
|
-
stringValue: FUNCTION_VALUE
|
|
99
|
-
};
|
|
100
|
-
if ('symbol' == typeof value) return {
|
|
101
|
-
stringValue: String(value)
|
|
102
|
-
};
|
|
103
|
-
if ('object' == typeof value && null !== value) {
|
|
104
|
-
if (state.ancestors.has(value)) return {
|
|
105
|
-
stringValue: CIRCULAR_VALUE
|
|
106
|
-
};
|
|
107
|
-
if (depth >= MAX_JSON_SAFE_VALUE_DEPTH) return {
|
|
108
|
-
stringValue: TRUNCATED_VALUE
|
|
109
|
-
};
|
|
110
|
-
if (value instanceof Date) {
|
|
111
|
-
const time = value.getTime();
|
|
112
|
-
const iso = Number.isFinite(time) ? value.toISOString() : String(value);
|
|
113
|
-
return {
|
|
114
|
-
stringValue: 'string' == typeof iso ? sanitizeString(iso) : String(iso)
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
state.ancestors.add(value);
|
|
118
|
-
try {
|
|
119
|
-
try {
|
|
120
|
-
const toJSON = value.toJSON;
|
|
121
|
-
if ('function' == typeof toJSON) return encodeAnyValue(toJSON.call(value), logger, state, depth + 1);
|
|
122
|
-
} catch {}
|
|
123
|
-
if (isArray(value)) return {
|
|
124
|
-
arrayValue: {
|
|
125
|
-
values: encodeArrayValues(value, logger, state, depth + 1)
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
return {
|
|
129
|
-
kvlistValue: {
|
|
130
|
-
values: encodeKeyValueList(value, logger, state, depth + 1)
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
} finally{
|
|
134
|
-
state.ancestors.delete(value);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return {
|
|
138
|
-
stringValue: sanitizeString(String(value))
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
function encodeArrayValues(values, logger, state, depth) {
|
|
142
|
-
const result = [];
|
|
143
|
-
const itemCount = Math.min(values.length, MAX_JSON_SAFE_VALUE_ITEMS);
|
|
144
|
-
let index = 0;
|
|
145
|
-
for(; index < itemCount && state.remainingNodes > 0; index++)try {
|
|
146
|
-
const element = index in values ? values[index] : void 0;
|
|
147
|
-
if (isNullish(element)) continue;
|
|
148
|
-
result.push(encodeAnyValue(element, logger, state, depth));
|
|
149
|
-
} catch {
|
|
150
|
-
result.push({
|
|
151
|
-
stringValue: UNSERIALIZABLE_VALUE
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
if (values.length > index) result.push({
|
|
155
|
-
stringValue: TRUNCATED_VALUE
|
|
156
|
-
});
|
|
157
|
-
return result;
|
|
158
|
-
}
|
|
159
|
-
function encodeKeyValueList(attrs, logger, state, depth) {
|
|
160
|
-
const result = [];
|
|
161
|
-
for(const key in attrs)if (propertyIsEnumerable.call(attrs, key)) {
|
|
162
|
-
if (result.length >= MAX_JSON_SAFE_VALUE_ITEMS || state.remainingNodes <= 0) {
|
|
163
|
-
logger?.debug('Attributes truncated: the value exceeds the OTLP encoder budget');
|
|
164
|
-
break;
|
|
165
|
-
}
|
|
166
|
-
try {
|
|
167
|
-
const value = attrs[key];
|
|
168
|
-
if (isNull(value) || isUndefined(value)) continue;
|
|
169
|
-
result.push({
|
|
170
|
-
key: sanitizeString(key),
|
|
171
|
-
value: encodeAnyValue(value, logger, state, depth)
|
|
172
|
-
});
|
|
173
|
-
} catch {
|
|
174
|
-
result.push({
|
|
175
|
-
key: sanitizeString(key),
|
|
176
|
-
value: {
|
|
177
|
-
stringValue: UNSERIALIZABLE_VALUE
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
return result;
|
|
183
|
-
}
|
|
184
38
|
function timestampToUnixNano(timestampMs = Date.now()) {
|
|
185
39
|
return String(timestampMs) + '000000';
|
|
186
40
|
}
|
|
@@ -247,18 +101,7 @@ function buildOtlpLogRecord(options, sdkContext, logger, occurredAtMs) {
|
|
|
247
101
|
return record;
|
|
248
102
|
}
|
|
249
103
|
function buildResourceAttributes(config, sdkName, sdkVersion) {
|
|
250
|
-
return
|
|
251
|
-
...config.resourceAttributes,
|
|
252
|
-
'service.name': config.serviceName || 'unknown_service',
|
|
253
|
-
...config.environment && {
|
|
254
|
-
'deployment.environment': config.environment
|
|
255
|
-
},
|
|
256
|
-
...config.serviceVersion && {
|
|
257
|
-
'service.version': config.serviceVersion
|
|
258
|
-
},
|
|
259
|
-
'telemetry.sdk.name': sdkName,
|
|
260
|
-
'telemetry.sdk.version': sdkVersion
|
|
261
|
-
};
|
|
104
|
+
return buildOtlpResourceAttributes(config, sdkName, sdkVersion);
|
|
262
105
|
}
|
|
263
106
|
function buildOtlpLogsPayload(logRecords, resourceAttributes, scopeName, scopeVersion) {
|
|
264
107
|
return {
|
|
@@ -280,4 +123,4 @@ function buildOtlpLogsPayload(logRecords, resourceAttributes, scopeName, scopeVe
|
|
|
280
123
|
]
|
|
281
124
|
};
|
|
282
125
|
}
|
|
283
|
-
export { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText
|
|
126
|
+
export { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText };
|
package/dist/metrics/index.js
CHANGED
|
@@ -31,7 +31,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
31
31
|
DEFAULT_HISTOGRAM_BOUNDS: ()=>external_metrics_utils_js_namespaceObject.DEFAULT_HISTOGRAM_BOUNDS
|
|
32
32
|
});
|
|
33
33
|
const index_js_namespaceObject = require("../utils/index.js");
|
|
34
|
-
const
|
|
34
|
+
const otlp_any_value_js_namespaceObject = require("../utils/otlp-any-value.js");
|
|
35
35
|
const external_metrics_utils_js_namespaceObject = require("./metrics-utils.js");
|
|
36
36
|
const external_config_js_namespaceObject = require("./config.js");
|
|
37
37
|
const OTLP_TEMPORALITY_DELTA = 1;
|
|
@@ -268,7 +268,7 @@ class PostHogMetrics {
|
|
|
268
268
|
};
|
|
269
269
|
byMetric.set(metricKey, metric);
|
|
270
270
|
}
|
|
271
|
-
const attributes = (0,
|
|
271
|
+
const attributes = (0, otlp_any_value_js_namespaceObject.toOtlpKeyValueList)(state.attributes ?? {}, this._logger);
|
|
272
272
|
const startNano = (0, external_metrics_utils_js_namespaceObject.msToUnixNano)(state.windowStartMs);
|
|
273
273
|
if ('count' === state.type) {
|
|
274
274
|
const dp = {
|
package/dist/metrics/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isArray, safeSetTimeout } from "../utils/index.mjs";
|
|
2
|
-
import { toOtlpKeyValueList } from "../
|
|
2
|
+
import { toOtlpKeyValueList } from "../utils/otlp-any-value.mjs";
|
|
3
3
|
import { DEFAULT_HISTOGRAM_BOUNDS, bucketIndexFor, buildMetricsResourceAttributes, buildOtlpMetricsPayload, msToUnixNano, seriesKey } from "./metrics-utils.mjs";
|
|
4
4
|
import { resolveMetricsConfig } from "./config.mjs";
|
|
5
5
|
const OTLP_TEMPORALITY_DELTA = 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-utils.d.ts","sourceRoot":"","sources":["../../src/metrics/metrics-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"metrics-utils.d.ts","sourceRoot":"","sources":["../../src/metrics/metrics-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAG1F,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AAE3D;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,UAA4E,CAAA;AAEjH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,SAAS,GAC3D,MAAM,CAOR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAOtE;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,4BAA4B,EACpC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAEtC;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,UAAU,EAAE,EACrB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EACxD,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,kBAAkB,CAcpB"}
|
|
@@ -31,7 +31,8 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
31
31
|
seriesKey: ()=>seriesKey,
|
|
32
32
|
DEFAULT_HISTOGRAM_BOUNDS: ()=>DEFAULT_HISTOGRAM_BOUNDS
|
|
33
33
|
});
|
|
34
|
-
const
|
|
34
|
+
const otlp_any_value_js_namespaceObject = require("../utils/otlp-any-value.js");
|
|
35
|
+
const otlp_resource_js_namespaceObject = require("../utils/otlp-resource.js");
|
|
35
36
|
const DEFAULT_HISTOGRAM_BOUNDS = [
|
|
36
37
|
0,
|
|
37
38
|
5,
|
|
@@ -65,25 +66,14 @@ function bucketIndexFor(value, bounds) {
|
|
|
65
66
|
return bounds.length;
|
|
66
67
|
}
|
|
67
68
|
function buildMetricsResourceAttributes(config, scopeName, scopeVersion) {
|
|
68
|
-
return
|
|
69
|
-
...config.resourceAttributes,
|
|
70
|
-
'service.name': config.serviceName || 'unknown_service',
|
|
71
|
-
...config.environment && {
|
|
72
|
-
'deployment.environment': config.environment
|
|
73
|
-
},
|
|
74
|
-
...config.serviceVersion && {
|
|
75
|
-
'service.version': config.serviceVersion
|
|
76
|
-
},
|
|
77
|
-
'telemetry.sdk.name': scopeName,
|
|
78
|
-
'telemetry.sdk.version': scopeVersion
|
|
79
|
-
};
|
|
69
|
+
return (0, otlp_resource_js_namespaceObject.buildOtlpResourceAttributes)(config, scopeName, scopeVersion);
|
|
80
70
|
}
|
|
81
71
|
function buildOtlpMetricsPayload(metrics, resourceAttributes, scopeName, scopeVersion) {
|
|
82
72
|
return {
|
|
83
73
|
resourceMetrics: [
|
|
84
74
|
{
|
|
85
75
|
resource: {
|
|
86
|
-
attributes: (0,
|
|
76
|
+
attributes: (0, otlp_any_value_js_namespaceObject.toOtlpKeyValueList)(resourceAttributes)
|
|
87
77
|
},
|
|
88
78
|
scopeMetrics: [
|
|
89
79
|
{
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { toOtlpKeyValueList } from "../
|
|
1
|
+
import { toOtlpKeyValueList } from "../utils/otlp-any-value.mjs";
|
|
2
|
+
import { buildOtlpResourceAttributes } from "../utils/otlp-resource.mjs";
|
|
2
3
|
const DEFAULT_HISTOGRAM_BOUNDS = [
|
|
3
4
|
0,
|
|
4
5
|
5,
|
|
@@ -32,18 +33,7 @@ function bucketIndexFor(value, bounds) {
|
|
|
32
33
|
return bounds.length;
|
|
33
34
|
}
|
|
34
35
|
function buildMetricsResourceAttributes(config, scopeName, scopeVersion) {
|
|
35
|
-
return
|
|
36
|
-
...config.resourceAttributes,
|
|
37
|
-
'service.name': config.serviceName || 'unknown_service',
|
|
38
|
-
...config.environment && {
|
|
39
|
-
'deployment.environment': config.environment
|
|
40
|
-
},
|
|
41
|
-
...config.serviceVersion && {
|
|
42
|
-
'service.version': config.serviceVersion
|
|
43
|
-
},
|
|
44
|
-
'telemetry.sdk.name': scopeName,
|
|
45
|
-
'telemetry.sdk.version': scopeVersion
|
|
46
|
-
};
|
|
36
|
+
return buildOtlpResourceAttributes(config, scopeName, scopeVersion);
|
|
47
37
|
}
|
|
48
38
|
function buildOtlpMetricsPayload(metrics, resourceAttributes, scopeName, scopeVersion) {
|
|
49
39
|
return {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { OtlpAnyValue, OtlpKeyValue } from '@posthog/types';
|
|
2
|
+
import type { Logger } from '../types';
|
|
3
|
+
export declare function toOtlpAnyValue(value: unknown, logger?: Logger): OtlpAnyValue;
|
|
4
|
+
export declare function toOtlpKeyValueList(attrs: Record<string, unknown>, logger?: Logger): OtlpKeyValue[];
|
|
5
|
+
//# sourceMappingURL=otlp-any-value.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otlp-any-value.d.ts","sourceRoot":"","sources":["../../src/utils/otlp-any-value.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAiCtC,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAQ5E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAMlG"}
|