@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.
Files changed (41) hide show
  1. package/dist/featureFlagLocalEvaluation.d.ts +1 -1
  2. package/dist/featureFlagLocalEvaluation.d.ts.map +1 -1
  3. package/dist/featureFlagLocalEvaluation.js +149 -10
  4. package/dist/featureFlagLocalEvaluation.mjs +149 -10
  5. package/dist/index.d.ts +3 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +48 -31
  8. package/dist/index.mjs +4 -2
  9. package/dist/logs/logs-utils.d.ts +1 -3
  10. package/dist/logs/logs-utils.d.ts.map +1 -1
  11. package/dist/logs/logs-utils.js +7 -170
  12. package/dist/logs/logs-utils.mjs +6 -163
  13. package/dist/metrics/index.js +2 -2
  14. package/dist/metrics/index.mjs +1 -1
  15. package/dist/metrics/metrics-utils.d.ts.map +1 -1
  16. package/dist/metrics/metrics-utils.js +4 -14
  17. package/dist/metrics/metrics-utils.mjs +3 -13
  18. package/dist/utils/otlp-any-value.d.ts +5 -0
  19. package/dist/utils/otlp-any-value.d.ts.map +1 -0
  20. package/dist/utils/otlp-any-value.js +203 -0
  21. package/dist/utils/otlp-any-value.mjs +166 -0
  22. package/dist/utils/otlp-resource.d.ts +38 -0
  23. package/dist/utils/otlp-resource.d.ts.map +1 -0
  24. package/dist/utils/otlp-resource.js +81 -0
  25. package/dist/utils/otlp-resource.mjs +41 -0
  26. package/dist/utils/user-agent-utils.d.ts +4 -4
  27. package/dist/utils/user-agent-utils.d.ts.map +1 -1
  28. package/dist/utils/user-agent-utils.js +16 -0
  29. package/dist/utils/user-agent-utils.mjs +16 -0
  30. package/package.json +1 -1
  31. package/src/featureFlagLocalEvaluation.ts +199 -12
  32. package/src/index.ts +2 -2
  33. package/src/logs/logs-utils.spec.ts +2 -350
  34. package/src/logs/logs-utils.ts +5 -215
  35. package/src/metrics/index.ts +1 -1
  36. package/src/metrics/metrics-utils.ts +3 -9
  37. package/src/utils/otlp-any-value.spec.ts +361 -0
  38. package/src/utils/otlp-any-value.ts +225 -0
  39. package/src/utils/otlp-resource.spec.ts +125 -0
  40. package/src/utils/otlp-resource.ts +89 -0
  41. package/src/utils/user-agent-utils.ts +22 -6
@@ -1,5 +1,5 @@
1
1
  import type { FeatureFlagValue, JsonType } from './types';
2
- export type FeatureFlagPropertyValue = string | number | (string | number)[] | boolean;
2
+ export type FeatureFlagPropertyValue = JsonType;
3
3
  export type FeatureFlagProperty = {
4
4
  key: string;
5
5
  value: FeatureFlagPropertyValue;
@@ -1 +1 @@
1
- {"version":3,"file":"featureFlagLocalEvaluation.d.ts","sourceRoot":"","sources":["../src/featureFlagLocalEvaluation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEzD,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAA;AAEtF,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,wBAAwB,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG,QAAQ,GAAG,mBAAmB,CAAA;AAE3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,mBAAmB,CAAC,EAAE,8BAA8B,CAAA;CACrD,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AASD,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAK5B;AAWD,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAa3C,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,8BAAyC,GACvD,WAAW,CAeb;AAwED,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAmBlF;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CA+IT;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ5D;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhH;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GACtC,6BAA6B,EAAE,CASjC;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GACtC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK7B;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3E,SAAS,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAC7C,QAAQ,GAAG,IAAI,CAMjB"}
1
+ {"version":3,"file":"featureFlagLocalEvaluation.d.ts","sourceRoot":"","sources":["../src/featureFlagLocalEvaluation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEzD,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAA;AAE/C,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,wBAAwB,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG,QAAQ,GAAG,mBAAmB,CAAA;AAE3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,mBAAmB,CAAC,EAAE,8BAA8B,CAAA;CACrD,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AASD,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAK5B;AAsLD,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAa3C,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,8BAAyC,GACvD,WAAW,CAeb;AAwED,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAmBlF;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CA+JT;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ5D;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhH;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GACtC,6BAA6B,EAAE,CASjC;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GACtC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK7B;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3E,SAAS,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAC7C,QAAQ,GAAG,IAAI,CAMjB"}
@@ -47,6 +47,130 @@ class InconclusiveMatchError extends Error {
47
47
  Object.setPrototypeOf(this, InconclusiveMatchError.prototype);
48
48
  }
49
49
  }
50
+ function isTruthyOrFalsyPropertyValue(value) {
51
+ if ('boolean' == typeof value) return true;
52
+ if ('string' == typeof value) {
53
+ const lowercaseValue = value.toLowerCase();
54
+ return 'true' === lowercaseValue || 'false' === lowercaseValue;
55
+ }
56
+ if (!Array.isArray(value)) return false;
57
+ for(let index = 0; index < value.length; index++)if (!isTruthyOrFalsyPropertyValue(index in value ? value[index] : null)) return false;
58
+ return true;
59
+ }
60
+ function isTruthyPropertyValue(value) {
61
+ if ('boolean' == typeof value) return value;
62
+ if ('string' == typeof value) return 'true' === value.toLowerCase();
63
+ if (!Array.isArray(value)) return false;
64
+ for(let index = 0; index < value.length; index++)if (!isTruthyPropertyValue(index in value ? value[index] : null)) return false;
65
+ return true;
66
+ }
67
+ function assertUnicodeScalarString(value) {
68
+ for(let index = 0; index < value.length; index++){
69
+ const unit = value.charCodeAt(index);
70
+ if (unit >= 0xd800 && unit <= 0xdbff) {
71
+ const next = value.charCodeAt(index + 1);
72
+ if (index + 1 >= value.length || next < 0xdc00 || next > 0xdfff) throw new InconclusiveMatchError('Cannot stringify an unpaired surrogate like the flags service');
73
+ index++;
74
+ } else if (unit >= 0xdc00 && unit <= 0xdfff) throw new InconclusiveMatchError('Cannot stringify an unpaired surrogate like the flags service');
75
+ }
76
+ }
77
+ function assertJsonRepresentable(value, seen = new Set()) {
78
+ if (null === value || 'boolean' == typeof value) return;
79
+ if ('string' == typeof value) return void assertUnicodeScalarString(value);
80
+ if ('number' == typeof value) {
81
+ if (!Number.isFinite(value)) throw new InconclusiveMatchError(`Cannot represent non-finite number ${value} like the flags service`);
82
+ return;
83
+ }
84
+ if (Array.isArray(value)) {
85
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot represent a circular array during local evaluation');
86
+ seen.add(value);
87
+ try {
88
+ for(let index = 0; index < value.length; index++)if (index in value) assertJsonRepresentable(value[index], seen);
89
+ } finally{
90
+ seen.delete(value);
91
+ }
92
+ return;
93
+ }
94
+ if ('object' == typeof value) {
95
+ const prototype = Object.getPrototypeOf(value);
96
+ if (prototype !== Object.prototype && null !== prototype) throw new InconclusiveMatchError('Cannot represent a non-JSON object like the flags service');
97
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot represent a circular object during local evaluation');
98
+ seen.add(value);
99
+ try {
100
+ for (const key of Object.keys(value)){
101
+ assertUnicodeScalarString(key);
102
+ assertJsonRepresentable(value[key], seen);
103
+ }
104
+ } finally{
105
+ seen.delete(value);
106
+ }
107
+ return;
108
+ }
109
+ throw new InconclusiveMatchError(`Cannot represent ${typeof value} like the flags service`);
110
+ }
111
+ function compareJsonObjectKeys(left, right) {
112
+ let leftIndex = 0;
113
+ let rightIndex = 0;
114
+ while(leftIndex < left.length && rightIndex < right.length){
115
+ const leftUnit = left.charCodeAt(leftIndex);
116
+ const rightUnit = right.charCodeAt(rightIndex);
117
+ const leftIsHighSurrogate = leftUnit >= 0xd800 && leftUnit <= 0xdbff;
118
+ const rightIsHighSurrogate = rightUnit >= 0xd800 && rightUnit <= 0xdbff;
119
+ const leftNext = leftIsHighSurrogate ? left.charCodeAt(leftIndex + 1) : 0;
120
+ const rightNext = rightIsHighSurrogate ? right.charCodeAt(rightIndex + 1) : 0;
121
+ const leftCodePoint = leftIsHighSurrogate ? (leftUnit - 0xd800) * 0x400 + leftNext - 0xdc00 + 0x10000 : leftUnit;
122
+ const rightCodePoint = rightIsHighSurrogate ? (rightUnit - 0xd800) * 0x400 + rightNext - 0xdc00 + 0x10000 : rightUnit;
123
+ if (leftCodePoint !== rightCodePoint) return leftCodePoint - rightCodePoint;
124
+ leftIndex += leftIsHighSurrogate ? 2 : 1;
125
+ rightIndex += rightIsHighSurrogate ? 2 : 1;
126
+ }
127
+ return left.length - right.length;
128
+ }
129
+ function serializeJsonValue(value, seen = new Set()) {
130
+ if (null === value) return 'null';
131
+ if ('string' == typeof value) {
132
+ assertUnicodeScalarString(value);
133
+ return JSON.stringify(value);
134
+ }
135
+ if ('boolean' == typeof value) return value ? 'true' : 'false';
136
+ if ('number' == typeof value) {
137
+ if (!Number.isFinite(value)) throw new InconclusiveMatchError(`Cannot stringify non-finite number ${value} like the flags service`);
138
+ if (Number.isInteger(value)) throw new InconclusiveMatchError(`Cannot distinguish integer ${value} from an integral JSON float during local evaluation`);
139
+ return String(value);
140
+ }
141
+ if (Array.isArray(value)) {
142
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot stringify a circular array during local evaluation');
143
+ seen.add(value);
144
+ try {
145
+ const items = [];
146
+ for(let index = 0; index < value.length; index++)items.push(index in value ? serializeJsonValue(value[index], seen) : 'null');
147
+ return `[${items.join(',')}]`;
148
+ } finally{
149
+ seen.delete(value);
150
+ }
151
+ }
152
+ if ('object' == typeof value) {
153
+ const prototype = Object.getPrototypeOf(value);
154
+ if (prototype !== Object.prototype && null !== prototype) throw new InconclusiveMatchError('Cannot stringify a non-JSON object like the flags service');
155
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot stringify a circular object during local evaluation');
156
+ seen.add(value);
157
+ try {
158
+ const keys = Object.keys(value);
159
+ keys.forEach(assertUnicodeScalarString);
160
+ return `{${keys.sort(compareJsonObjectKeys).map((key)=>`${JSON.stringify(key)}:${serializeJsonValue(value[key], seen)}`).join(',')}}`;
161
+ } finally{
162
+ seen.delete(value);
163
+ }
164
+ }
165
+ throw new InconclusiveMatchError(`Cannot stringify ${typeof value} like the flags service`);
166
+ }
167
+ function exactMatchString(value) {
168
+ if ('string' == typeof value) {
169
+ assertUnicodeScalarString(value);
170
+ return value;
171
+ }
172
+ return serializeJsonValue(value);
173
+ }
50
174
  function isValidRegex(regex) {
51
175
  try {
52
176
  new RegExp(regex);
@@ -55,6 +179,9 @@ function isValidRegex(regex) {
55
179
  return false;
56
180
  }
57
181
  }
182
+ function asciiLowercase(value) {
183
+ return String(value).replace(/[A-Z]/g, (character)=>character.toLowerCase());
184
+ }
58
185
  function parseSemverNumericIdentifier(part, raw, parsingPolicy) {
59
186
  if (!/^\d+$/.test(part) || 'strict' === parsingPolicy && part.length > 1 && '0' === part[0]) throw new InconclusiveMatchError(`Invalid semver: ${raw}`);
60
187
  return parseInt(part, 10);
@@ -198,15 +325,27 @@ function matchFeatureFlagProperty(property, propertyValues, options = {}) {
198
325
  const hasProperty = Object.prototype.hasOwnProperty.call(propertyValues, key);
199
326
  if (hasProperty) {
200
327
  if ('is_not_set' === operator) return false;
328
+ else if ('is_set' === operator) return true;
201
329
  } else throw new InconclusiveMatchError(`Property ${key} not found in propertyValues`);
202
330
  const overrideValue = propertyValues[key];
203
- if (null == overrideValue && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator)) {
204
- options.warnFunction?.(`Property ${key} cannot have a value of null/undefined with the ${operator} operator`);
331
+ if (void 0 === overrideValue) {
332
+ options.warnFunction?.(`Property ${key} cannot have a value of undefined with the ${operator} operator`);
333
+ return 'is_not' === operator;
334
+ }
335
+ if (null === overrideValue && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator) && 'exact' !== operator && 'is_not' !== operator) {
336
+ options.warnFunction?.(`Property ${key} cannot have a value of null with the ${operator} operator`);
205
337
  return false;
206
338
  }
207
339
  const computeExactMatch = (target, actual)=>{
208
- if (Array.isArray(target)) return target.map((item)=>String(item).toLowerCase()).includes(String(actual).toLowerCase());
209
- return String(target).toLowerCase() === String(actual).toLowerCase();
340
+ if (isTruthyOrFalsyPropertyValue(target)) {
341
+ assertJsonRepresentable(actual);
342
+ return isTruthyPropertyValue(target) === isTruthyPropertyValue(actual);
343
+ }
344
+ if (Array.isArray(target)) {
345
+ const actualString = exactMatchString(actual).toLowerCase();
346
+ return target.some((item)=>exactMatchString(item).toLowerCase() === actualString);
347
+ }
348
+ return exactMatchString(target).toLowerCase() === exactMatchString(actual).toLowerCase();
210
349
  };
211
350
  const compare = (lhs, rhs, comparisonOperator)=>{
212
351
  if ('gt' === comparisonOperator) return lhs > rhs;
@@ -223,17 +362,17 @@ function matchFeatureFlagProperty(property, propertyValues, options = {}) {
223
362
  case 'is_set':
224
363
  return true;
225
364
  case 'icontains':
226
- return String(overrideValue).toLowerCase().includes(String(value).toLowerCase());
365
+ return asciiLowercase(overrideValue).includes(asciiLowercase(value));
227
366
  case 'not_icontains':
228
- return !String(overrideValue).toLowerCase().includes(String(value).toLowerCase());
367
+ return !asciiLowercase(overrideValue).includes(asciiLowercase(value));
229
368
  case 'starts_with':
230
- return String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase());
369
+ return asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
231
370
  case 'not_starts_with':
232
- return !String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase());
371
+ return !asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
233
372
  case 'ends_with':
234
- return String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase());
373
+ return asciiLowercase(overrideValue).endsWith(asciiLowercase(value));
235
374
  case 'not_ends_with':
236
- return !String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase());
375
+ return !asciiLowercase(overrideValue).endsWith(asciiLowercase(value));
237
376
  case 'regex':
238
377
  return isValidRegex(String(value)) && null !== String(overrideValue).match(String(value));
239
378
  case 'not_regex':
@@ -11,6 +11,130 @@ class InconclusiveMatchError extends Error {
11
11
  Object.setPrototypeOf(this, InconclusiveMatchError.prototype);
12
12
  }
13
13
  }
14
+ function isTruthyOrFalsyPropertyValue(value) {
15
+ if ('boolean' == typeof value) return true;
16
+ if ('string' == typeof value) {
17
+ const lowercaseValue = value.toLowerCase();
18
+ return 'true' === lowercaseValue || 'false' === lowercaseValue;
19
+ }
20
+ if (!Array.isArray(value)) return false;
21
+ for(let index = 0; index < value.length; index++)if (!isTruthyOrFalsyPropertyValue(index in value ? value[index] : null)) return false;
22
+ return true;
23
+ }
24
+ function isTruthyPropertyValue(value) {
25
+ if ('boolean' == typeof value) return value;
26
+ if ('string' == typeof value) return 'true' === value.toLowerCase();
27
+ if (!Array.isArray(value)) return false;
28
+ for(let index = 0; index < value.length; index++)if (!isTruthyPropertyValue(index in value ? value[index] : null)) return false;
29
+ return true;
30
+ }
31
+ function assertUnicodeScalarString(value) {
32
+ for(let index = 0; index < value.length; index++){
33
+ const unit = value.charCodeAt(index);
34
+ if (unit >= 0xd800 && unit <= 0xdbff) {
35
+ const next = value.charCodeAt(index + 1);
36
+ if (index + 1 >= value.length || next < 0xdc00 || next > 0xdfff) throw new InconclusiveMatchError('Cannot stringify an unpaired surrogate like the flags service');
37
+ index++;
38
+ } else if (unit >= 0xdc00 && unit <= 0xdfff) throw new InconclusiveMatchError('Cannot stringify an unpaired surrogate like the flags service');
39
+ }
40
+ }
41
+ function assertJsonRepresentable(value, seen = new Set()) {
42
+ if (null === value || 'boolean' == typeof value) return;
43
+ if ('string' == typeof value) return void assertUnicodeScalarString(value);
44
+ if ('number' == typeof value) {
45
+ if (!Number.isFinite(value)) throw new InconclusiveMatchError(`Cannot represent non-finite number ${value} like the flags service`);
46
+ return;
47
+ }
48
+ if (Array.isArray(value)) {
49
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot represent a circular array during local evaluation');
50
+ seen.add(value);
51
+ try {
52
+ for(let index = 0; index < value.length; index++)if (index in value) assertJsonRepresentable(value[index], seen);
53
+ } finally{
54
+ seen.delete(value);
55
+ }
56
+ return;
57
+ }
58
+ if ('object' == typeof value) {
59
+ const prototype = Object.getPrototypeOf(value);
60
+ if (prototype !== Object.prototype && null !== prototype) throw new InconclusiveMatchError('Cannot represent a non-JSON object like the flags service');
61
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot represent a circular object during local evaluation');
62
+ seen.add(value);
63
+ try {
64
+ for (const key of Object.keys(value)){
65
+ assertUnicodeScalarString(key);
66
+ assertJsonRepresentable(value[key], seen);
67
+ }
68
+ } finally{
69
+ seen.delete(value);
70
+ }
71
+ return;
72
+ }
73
+ throw new InconclusiveMatchError(`Cannot represent ${typeof value} like the flags service`);
74
+ }
75
+ function compareJsonObjectKeys(left, right) {
76
+ let leftIndex = 0;
77
+ let rightIndex = 0;
78
+ while(leftIndex < left.length && rightIndex < right.length){
79
+ const leftUnit = left.charCodeAt(leftIndex);
80
+ const rightUnit = right.charCodeAt(rightIndex);
81
+ const leftIsHighSurrogate = leftUnit >= 0xd800 && leftUnit <= 0xdbff;
82
+ const rightIsHighSurrogate = rightUnit >= 0xd800 && rightUnit <= 0xdbff;
83
+ const leftNext = leftIsHighSurrogate ? left.charCodeAt(leftIndex + 1) : 0;
84
+ const rightNext = rightIsHighSurrogate ? right.charCodeAt(rightIndex + 1) : 0;
85
+ const leftCodePoint = leftIsHighSurrogate ? (leftUnit - 0xd800) * 0x400 + leftNext - 0xdc00 + 0x10000 : leftUnit;
86
+ const rightCodePoint = rightIsHighSurrogate ? (rightUnit - 0xd800) * 0x400 + rightNext - 0xdc00 + 0x10000 : rightUnit;
87
+ if (leftCodePoint !== rightCodePoint) return leftCodePoint - rightCodePoint;
88
+ leftIndex += leftIsHighSurrogate ? 2 : 1;
89
+ rightIndex += rightIsHighSurrogate ? 2 : 1;
90
+ }
91
+ return left.length - right.length;
92
+ }
93
+ function serializeJsonValue(value, seen = new Set()) {
94
+ if (null === value) return 'null';
95
+ if ('string' == typeof value) {
96
+ assertUnicodeScalarString(value);
97
+ return JSON.stringify(value);
98
+ }
99
+ if ('boolean' == typeof value) return value ? 'true' : 'false';
100
+ if ('number' == typeof value) {
101
+ if (!Number.isFinite(value)) throw new InconclusiveMatchError(`Cannot stringify non-finite number ${value} like the flags service`);
102
+ if (Number.isInteger(value)) throw new InconclusiveMatchError(`Cannot distinguish integer ${value} from an integral JSON float during local evaluation`);
103
+ return String(value);
104
+ }
105
+ if (Array.isArray(value)) {
106
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot stringify a circular array during local evaluation');
107
+ seen.add(value);
108
+ try {
109
+ const items = [];
110
+ for(let index = 0; index < value.length; index++)items.push(index in value ? serializeJsonValue(value[index], seen) : 'null');
111
+ return `[${items.join(',')}]`;
112
+ } finally{
113
+ seen.delete(value);
114
+ }
115
+ }
116
+ if ('object' == typeof value) {
117
+ const prototype = Object.getPrototypeOf(value);
118
+ if (prototype !== Object.prototype && null !== prototype) throw new InconclusiveMatchError('Cannot stringify a non-JSON object like the flags service');
119
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot stringify a circular object during local evaluation');
120
+ seen.add(value);
121
+ try {
122
+ const keys = Object.keys(value);
123
+ keys.forEach(assertUnicodeScalarString);
124
+ return `{${keys.sort(compareJsonObjectKeys).map((key)=>`${JSON.stringify(key)}:${serializeJsonValue(value[key], seen)}`).join(',')}}`;
125
+ } finally{
126
+ seen.delete(value);
127
+ }
128
+ }
129
+ throw new InconclusiveMatchError(`Cannot stringify ${typeof value} like the flags service`);
130
+ }
131
+ function exactMatchString(value) {
132
+ if ('string' == typeof value) {
133
+ assertUnicodeScalarString(value);
134
+ return value;
135
+ }
136
+ return serializeJsonValue(value);
137
+ }
14
138
  function isValidRegex(regex) {
15
139
  try {
16
140
  new RegExp(regex);
@@ -19,6 +143,9 @@ function isValidRegex(regex) {
19
143
  return false;
20
144
  }
21
145
  }
146
+ function asciiLowercase(value) {
147
+ return String(value).replace(/[A-Z]/g, (character)=>character.toLowerCase());
148
+ }
22
149
  function parseSemverNumericIdentifier(part, raw, parsingPolicy) {
23
150
  if (!/^\d+$/.test(part) || 'strict' === parsingPolicy && part.length > 1 && '0' === part[0]) throw new InconclusiveMatchError(`Invalid semver: ${raw}`);
24
151
  return parseInt(part, 10);
@@ -162,15 +289,27 @@ function matchFeatureFlagProperty(property, propertyValues, options = {}) {
162
289
  const hasProperty = Object.prototype.hasOwnProperty.call(propertyValues, key);
163
290
  if (hasProperty) {
164
291
  if ('is_not_set' === operator) return false;
292
+ else if ('is_set' === operator) return true;
165
293
  } else throw new InconclusiveMatchError(`Property ${key} not found in propertyValues`);
166
294
  const overrideValue = propertyValues[key];
167
- if (null == overrideValue && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator)) {
168
- options.warnFunction?.(`Property ${key} cannot have a value of null/undefined with the ${operator} operator`);
295
+ if (void 0 === overrideValue) {
296
+ options.warnFunction?.(`Property ${key} cannot have a value of undefined with the ${operator} operator`);
297
+ return 'is_not' === operator;
298
+ }
299
+ if (null === overrideValue && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator) && 'exact' !== operator && 'is_not' !== operator) {
300
+ options.warnFunction?.(`Property ${key} cannot have a value of null with the ${operator} operator`);
169
301
  return false;
170
302
  }
171
303
  const computeExactMatch = (target, actual)=>{
172
- if (Array.isArray(target)) return target.map((item)=>String(item).toLowerCase()).includes(String(actual).toLowerCase());
173
- return String(target).toLowerCase() === String(actual).toLowerCase();
304
+ if (isTruthyOrFalsyPropertyValue(target)) {
305
+ assertJsonRepresentable(actual);
306
+ return isTruthyPropertyValue(target) === isTruthyPropertyValue(actual);
307
+ }
308
+ if (Array.isArray(target)) {
309
+ const actualString = exactMatchString(actual).toLowerCase();
310
+ return target.some((item)=>exactMatchString(item).toLowerCase() === actualString);
311
+ }
312
+ return exactMatchString(target).toLowerCase() === exactMatchString(actual).toLowerCase();
174
313
  };
175
314
  const compare = (lhs, rhs, comparisonOperator)=>{
176
315
  if ('gt' === comparisonOperator) return lhs > rhs;
@@ -187,17 +326,17 @@ function matchFeatureFlagProperty(property, propertyValues, options = {}) {
187
326
  case 'is_set':
188
327
  return true;
189
328
  case 'icontains':
190
- return String(overrideValue).toLowerCase().includes(String(value).toLowerCase());
329
+ return asciiLowercase(overrideValue).includes(asciiLowercase(value));
191
330
  case 'not_icontains':
192
- return !String(overrideValue).toLowerCase().includes(String(value).toLowerCase());
331
+ return !asciiLowercase(overrideValue).includes(asciiLowercase(value));
193
332
  case 'starts_with':
194
- return String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase());
333
+ return asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
195
334
  case 'not_starts_with':
196
- return !String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase());
335
+ return !asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
197
336
  case 'ends_with':
198
- return String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase());
337
+ return asciiLowercase(overrideValue).endsWith(asciiLowercase(value));
199
338
  case 'not_ends_with':
200
- return !String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase());
339
+ return !asciiLowercase(overrideValue).endsWith(asciiLowercase(value));
201
340
  case 'regex':
202
341
  return isValidRegex(String(value)) && null !== String(overrideValue).match(String(value));
203
342
  case 'not_regex':
package/dist/index.d.ts CHANGED
@@ -4,7 +4,9 @@ export type { FeatureFlagProperty, FeatureFlagPropertyValue, FeatureFlagSemverPa
4
4
  export { gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError, } from './gzip';
5
5
  export * from './utils';
6
6
  export * as ErrorTracking from './error-tracking';
7
- export { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText, toOtlpAnyValue, toOtlpKeyValueList, } from './logs/logs-utils';
7
+ export { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText, } from './logs/logs-utils';
8
+ export { toOtlpAnyValue, toOtlpKeyValueList } from './utils/otlp-any-value';
9
+ export { osResourceAttributes } from './utils/otlp-resource';
8
10
  export { PostHogLogs } from './logs';
9
11
  export type { BeforeSendLogFn, BufferedLogEntry, CaptureLogger, LogSdkContext, PostHogLogsConfig, ResolvedPostHogLogsConfig, } from './logs/types';
10
12
  export type { CaptureLogOptions, LogAttributeValue, LogAttributes, LogSeverityLevel } from './logs/types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,6CAA6C,EAC7C,iCAAiC,GAClC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,gCAAgC,EAChC,QAAQ,EACR,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,uCAAuC,EACvC,yBAAyB,GAC1B,MAAM,8BAA8B,CAAA;AACrC,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,8BAA8B,EAC9B,kBAAkB,EAClB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,QAAQ,CAAA;AACf,cAAc,SAAS,CAAA;AACvB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AAIrB,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGzG,YAAY,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAGhE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAElB,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,OAAO,EACP,aAAa,GACd,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,6CAA6C,EAC7C,iCAAiC,GAClC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,gCAAgC,EAChC,QAAQ,EACR,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,uCAAuC,EACvC,yBAAyB,GAC1B,MAAM,8BAA8B,CAAA;AACrC,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,8BAA8B,EAC9B,kBAAkB,EAClB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,QAAQ,CAAA;AACf,cAAc,SAAS,CAAA;AACvB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AAIrB,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGzG,YAAY,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAGhE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAElB,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,OAAO,EACP,aAAa,GACd,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA"}
package/dist/index.js CHANGED
@@ -42,6 +42,12 @@ var __webpack_modules__ = {
42
42
  "./utils?637c": function(module) {
43
43
  module.exports = require("./utils/index.js");
44
44
  },
45
+ "./utils/otlp-any-value": function(module) {
46
+ module.exports = require("./utils/otlp-any-value.js");
47
+ },
48
+ "./utils/otlp-resource": function(module) {
49
+ module.exports = require("./utils/otlp-resource.js");
50
+ },
45
51
  "./vendor/uuidv7": function(module) {
46
52
  module.exports = require("./vendor/uuidv7.js");
47
53
  }
@@ -90,16 +96,16 @@ var __webpack_exports__ = {};
90
96
  (()=>{
91
97
  __webpack_require__.r(__webpack_exports__);
92
98
  __webpack_require__.d(__webpack_exports__, {
93
- DEFAULT_HISTOGRAM_BOUNDS: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_HISTOGRAM_BOUNDS,
99
+ DEFAULT_HISTOGRAM_BOUNDS: ()=>_metrics__WEBPACK_IMPORTED_MODULE_9__.DEFAULT_HISTOGRAM_BOUNDS,
94
100
  ErrorTracking: ()=>_error_tracking__WEBPACK_IMPORTED_MODULE_4__,
95
101
  InconclusiveMatchError: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.InconclusiveMatchError,
96
102
  MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES,
97
- PostHogLogs: ()=>_logs__WEBPACK_IMPORTED_MODULE_6__.PostHogLogs,
98
- PostHogMetrics: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.PostHogMetrics,
99
- buildMetricsResourceAttributes: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.buildMetricsResourceAttributes,
103
+ PostHogLogs: ()=>_logs__WEBPACK_IMPORTED_MODULE_8__.PostHogLogs,
104
+ PostHogMetrics: ()=>_metrics__WEBPACK_IMPORTED_MODULE_9__.PostHogMetrics,
105
+ buildMetricsResourceAttributes: ()=>_metrics__WEBPACK_IMPORTED_MODULE_9__.buildMetricsResourceAttributes,
100
106
  buildOtlpLogRecord: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.buildOtlpLogRecord,
101
107
  buildOtlpLogsPayload: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.buildOtlpLogsPayload,
102
- buildOtlpMetricsPayload: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.buildOtlpMetricsPayload,
108
+ buildOtlpMetricsPayload: ()=>_metrics__WEBPACK_IMPORTED_MODULE_9__.buildOtlpMetricsPayload,
103
109
  buildResourceAttributes: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.buildResourceAttributes,
104
110
  flagDetailsToResults: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.flagDetailsToResults,
105
111
  getEnabledFromValue: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.getEnabledFromValue,
@@ -107,11 +113,11 @@ var __webpack_exports__ = {};
107
113
  getFeatureFlagValue: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.getFeatureFlagValue,
108
114
  getFeatureFlagVariant: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.getFeatureFlagVariant,
109
115
  getFeatureFlagVariantLookupTable: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.getFeatureFlagVariantLookupTable,
110
- getLengthFromRules: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_14__.getLengthFromRules,
116
+ getLengthFromRules: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_16__.getLengthFromRules,
111
117
  getOtlpSeverityNumber: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.getOtlpSeverityNumber,
112
118
  getOtlpSeverityText: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.getOtlpSeverityText,
113
- getRequirementsHint: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_14__.getRequirementsHint,
114
- getValidationError: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_14__.getValidationError,
119
+ getRequirementsHint: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_16__.getRequirementsHint,
120
+ getValidationError: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_16__.getValidationError,
115
121
  getVariantFromValue: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.getVariantFromValue,
116
122
  gzipCompress: ()=>_gzip__WEBPACK_IMPORTED_MODULE_2__.gzipCompress,
117
123
  hashSHA1: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.hashSHA1,
@@ -122,14 +128,15 @@ var __webpack_exports__ = {};
122
128
  isNativeAsyncGzipReadError: ()=>_gzip__WEBPACK_IMPORTED_MODULE_2__.isNativeAsyncGzipReadError,
123
129
  matchFeatureFlagProperty: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.matchFeatureFlagProperty,
124
130
  minimizeFlagCalledEventProperties: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.minimizeFlagCalledEventProperties,
131
+ osResourceAttributes: ()=>_utils_otlp_resource__WEBPACK_IMPORTED_MODULE_7__.osResourceAttributes,
125
132
  parseFeatureFlagSemver: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.parseFeatureFlagSemver,
126
133
  parsePayload: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.parsePayload,
127
134
  relativeDateParseForFeatureFlagMatching: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.relativeDateParseForFeatureFlagMatching,
128
135
  resolveFeatureFlagPayload: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.resolveFeatureFlagPayload,
129
- resolveMetricsConfig: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.resolveMetricsConfig,
130
- toOtlpAnyValue: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.toOtlpAnyValue,
131
- toOtlpKeyValueList: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.toOtlpKeyValueList,
132
- uuidv7: ()=>_vendor_uuidv7__WEBPACK_IMPORTED_MODULE_8__.uuidv7
136
+ resolveMetricsConfig: ()=>_metrics__WEBPACK_IMPORTED_MODULE_9__.resolveMetricsConfig,
137
+ toOtlpAnyValue: ()=>_utils_otlp_any_value__WEBPACK_IMPORTED_MODULE_6__.toOtlpAnyValue,
138
+ toOtlpKeyValueList: ()=>_utils_otlp_any_value__WEBPACK_IMPORTED_MODULE_6__.toOtlpKeyValueList,
139
+ uuidv7: ()=>_vendor_uuidv7__WEBPACK_IMPORTED_MODULE_10__.uuidv7
133
140
  });
134
141
  var _featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./featureFlagUtils");
135
142
  var _featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./featureFlagLocalEvaluation");
@@ -138,6 +145,7 @@ var __webpack_exports__ = {};
138
145
  var __WEBPACK_REEXPORT_OBJECT__ = {};
139
146
  for(var __WEBPACK_IMPORT_KEY__ in _utils__WEBPACK_IMPORTED_MODULE_3__)if ([
140
147
  "toOtlpKeyValueList",
148
+ "osResourceAttributes",
141
149
  "relativeDateParseForFeatureFlagMatching",
142
150
  "isNativeAsyncGzipError",
143
151
  "getOtlpSeverityText",
@@ -184,13 +192,16 @@ var __webpack_exports__ = {};
184
192
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
185
193
  var _error_tracking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./error-tracking");
186
194
  var _logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./logs/logs-utils");
187
- var _logs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./logs");
188
- var _metrics__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./metrics");
189
- var _vendor_uuidv7__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./vendor/uuidv7");
190
- var _cookie__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("./cookie");
195
+ var _utils_otlp_any_value__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./utils/otlp-any-value");
196
+ var _utils_otlp_resource__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./utils/otlp-resource");
197
+ var _logs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./logs");
198
+ var _metrics__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("./metrics");
199
+ var _vendor_uuidv7__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("./vendor/uuidv7");
200
+ var _cookie__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("./cookie");
191
201
  var __WEBPACK_REEXPORT_OBJECT__ = {};
192
- for(var __WEBPACK_IMPORT_KEY__ in _cookie__WEBPACK_IMPORTED_MODULE_9__)if ([
202
+ for(var __WEBPACK_IMPORT_KEY__ in _cookie__WEBPACK_IMPORTED_MODULE_11__)if ([
193
203
  "toOtlpKeyValueList",
204
+ "osResourceAttributes",
194
205
  "relativeDateParseForFeatureFlagMatching",
195
206
  "isNativeAsyncGzipError",
196
207
  "getOtlpSeverityText",
@@ -232,13 +243,14 @@ var __webpack_exports__ = {};
232
243
  "buildOtlpLogRecord",
233
244
  "getFeatureFlagVariant"
234
245
  ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
235
- return _cookie__WEBPACK_IMPORTED_MODULE_9__[key];
246
+ return _cookie__WEBPACK_IMPORTED_MODULE_11__[key];
236
247
  }).bind(0, __WEBPACK_IMPORT_KEY__);
237
248
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
238
- var _posthog_core__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("./posthog-core");
249
+ var _posthog_core__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("./posthog-core");
239
250
  var __WEBPACK_REEXPORT_OBJECT__ = {};
240
- for(var __WEBPACK_IMPORT_KEY__ in _posthog_core__WEBPACK_IMPORTED_MODULE_10__)if ([
251
+ for(var __WEBPACK_IMPORT_KEY__ in _posthog_core__WEBPACK_IMPORTED_MODULE_12__)if ([
241
252
  "toOtlpKeyValueList",
253
+ "osResourceAttributes",
242
254
  "relativeDateParseForFeatureFlagMatching",
243
255
  "isNativeAsyncGzipError",
244
256
  "getOtlpSeverityText",
@@ -280,13 +292,14 @@ var __webpack_exports__ = {};
280
292
  "buildOtlpLogRecord",
281
293
  "getFeatureFlagVariant"
282
294
  ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
283
- return _posthog_core__WEBPACK_IMPORTED_MODULE_10__[key];
295
+ return _posthog_core__WEBPACK_IMPORTED_MODULE_12__[key];
284
296
  }).bind(0, __WEBPACK_IMPORT_KEY__);
285
297
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
286
- var _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("./posthog-core-stateless");
298
+ var _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__("./posthog-core-stateless");
287
299
  var __WEBPACK_REEXPORT_OBJECT__ = {};
288
- for(var __WEBPACK_IMPORT_KEY__ in _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_11__)if ([
300
+ for(var __WEBPACK_IMPORT_KEY__ in _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_13__)if ([
289
301
  "toOtlpKeyValueList",
302
+ "osResourceAttributes",
290
303
  "relativeDateParseForFeatureFlagMatching",
291
304
  "isNativeAsyncGzipError",
292
305
  "getOtlpSeverityText",
@@ -328,13 +341,14 @@ var __webpack_exports__ = {};
328
341
  "buildOtlpLogRecord",
329
342
  "getFeatureFlagVariant"
330
343
  ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
331
- return _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_11__[key];
344
+ return _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_13__[key];
332
345
  }).bind(0, __WEBPACK_IMPORT_KEY__);
333
346
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
334
- var _tracing_headers__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("./tracing-headers");
347
+ var _tracing_headers__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__("./tracing-headers");
335
348
  var __WEBPACK_REEXPORT_OBJECT__ = {};
336
- for(var __WEBPACK_IMPORT_KEY__ in _tracing_headers__WEBPACK_IMPORTED_MODULE_12__)if ([
349
+ for(var __WEBPACK_IMPORT_KEY__ in _tracing_headers__WEBPACK_IMPORTED_MODULE_14__)if ([
337
350
  "toOtlpKeyValueList",
351
+ "osResourceAttributes",
338
352
  "relativeDateParseForFeatureFlagMatching",
339
353
  "isNativeAsyncGzipError",
340
354
  "getOtlpSeverityText",
@@ -376,13 +390,14 @@ var __webpack_exports__ = {};
376
390
  "buildOtlpLogRecord",
377
391
  "getFeatureFlagVariant"
378
392
  ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
379
- return _tracing_headers__WEBPACK_IMPORTED_MODULE_12__[key];
393
+ return _tracing_headers__WEBPACK_IMPORTED_MODULE_14__[key];
380
394
  }).bind(0, __WEBPACK_IMPORT_KEY__);
381
395
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
382
- var _types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__("./types");
396
+ var _types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__("./types");
383
397
  var __WEBPACK_REEXPORT_OBJECT__ = {};
384
- for(var __WEBPACK_IMPORT_KEY__ in _types__WEBPACK_IMPORTED_MODULE_13__)if ([
398
+ for(var __WEBPACK_IMPORT_KEY__ in _types__WEBPACK_IMPORTED_MODULE_15__)if ([
385
399
  "toOtlpKeyValueList",
400
+ "osResourceAttributes",
386
401
  "relativeDateParseForFeatureFlagMatching",
387
402
  "isNativeAsyncGzipError",
388
403
  "getOtlpSeverityText",
@@ -424,10 +439,10 @@ var __webpack_exports__ = {};
424
439
  "buildOtlpLogRecord",
425
440
  "getFeatureFlagVariant"
426
441
  ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
427
- return _types__WEBPACK_IMPORTED_MODULE_13__[key];
442
+ return _types__WEBPACK_IMPORTED_MODULE_15__[key];
428
443
  }).bind(0, __WEBPACK_IMPORT_KEY__);
429
444
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
430
- var _surveys_validation__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__("./surveys/validation");
445
+ var _surveys_validation__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__("./surveys/validation");
431
446
  })();
432
447
  exports.DEFAULT_HISTOGRAM_BOUNDS = __webpack_exports__.DEFAULT_HISTOGRAM_BOUNDS;
433
448
  exports.ErrorTracking = __webpack_exports__.ErrorTracking;
@@ -461,6 +476,7 @@ exports.isNativeAsyncGzipError = __webpack_exports__.isNativeAsyncGzipError;
461
476
  exports.isNativeAsyncGzipReadError = __webpack_exports__.isNativeAsyncGzipReadError;
462
477
  exports.matchFeatureFlagProperty = __webpack_exports__.matchFeatureFlagProperty;
463
478
  exports.minimizeFlagCalledEventProperties = __webpack_exports__.minimizeFlagCalledEventProperties;
479
+ exports.osResourceAttributes = __webpack_exports__.osResourceAttributes;
464
480
  exports.parseFeatureFlagSemver = __webpack_exports__.parseFeatureFlagSemver;
465
481
  exports.parsePayload = __webpack_exports__.parsePayload;
466
482
  exports.relativeDateParseForFeatureFlagMatching = __webpack_exports__.relativeDateParseForFeatureFlagMatching;
@@ -502,6 +518,7 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
502
518
  "isNativeAsyncGzipReadError",
503
519
  "matchFeatureFlagProperty",
504
520
  "minimizeFlagCalledEventProperties",
521
+ "osResourceAttributes",
505
522
  "parseFeatureFlagSemver",
506
523
  "parsePayload",
507
524
  "relativeDateParseForFeatureFlagMatching",