o11y 248.6.0 → 248.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/modules/o11y/client/client.js +24 -275
  2. package/dist/modules/o11y/client/client.js.map +1 -1
  3. package/dist/modules/o11y/client/interfaces/PayloadProvider.d.ts +2 -1
  4. package/dist/modules/o11y/client/interfaces/PayloadProviderArgs.d.ts +8 -0
  5. package/dist/modules/o11y/client/interfaces/index.d.ts +1 -0
  6. package/dist/modules/o11y/client/library/InstrumentationImpl.d.ts +0 -4
  7. package/dist/modules/o11y/client/library/NextgenImpl.d.ts +3 -3
  8. package/dist/modules/o11y/client/{library → shared}/LogValidator.d.ts +1 -1
  9. package/dist/modules/o11y/client/shared/PayloadUtility.d.ts +10 -0
  10. package/dist/modules/o11y/client/shared/index.d.ts +2 -0
  11. package/dist/modules/o11y/client/version.d.ts +1 -1
  12. package/dist/modules/o11y/collectors/interfaces/PayloadProvider.d.ts +2 -1
  13. package/dist/modules/o11y/collectors/interfaces/PayloadProviderArgs.d.ts +8 -0
  14. package/dist/modules/o11y/collectors/interfaces/index.d.ts +1 -0
  15. package/dist/modules/o11y/collectors/library/InstrumentationImpl.d.ts +0 -4
  16. package/dist/modules/o11y/collectors/library/NextgenImpl.d.ts +3 -3
  17. package/dist/modules/o11y/collectors/{library → shared}/LogValidator.d.ts +1 -1
  18. package/dist/modules/o11y/collectors/shared/PayloadUtility.d.ts +10 -0
  19. package/dist/modules/o11y/collectors/shared/index.d.ts +2 -0
  20. package/dist/modules/o11y/collectors/version.d.ts +1 -1
  21. package/dist/modules/o11y/core_envelope/interfaces/PayloadProvider.d.ts +2 -1
  22. package/dist/modules/o11y/core_envelope/interfaces/PayloadProviderArgs.d.ts +8 -0
  23. package/dist/modules/o11y/core_envelope/interfaces/index.d.ts +1 -0
  24. package/dist/modules/o11y/core_envelope/library/InstrumentationImpl.d.ts +0 -4
  25. package/dist/modules/o11y/core_envelope/library/NextgenImpl.d.ts +3 -3
  26. package/dist/modules/o11y/core_envelope/{library → shared}/LogValidator.d.ts +1 -1
  27. package/dist/modules/o11y/core_envelope/shared/PayloadUtility.d.ts +10 -0
  28. package/dist/modules/o11y/core_envelope/shared/index.d.ts +2 -0
  29. package/dist/modules/o11y/core_envelope/version.d.ts +1 -1
  30. package/dist/modules/o11y/shared/interfaces/PayloadProvider.d.ts +2 -1
  31. package/dist/modules/o11y/shared/interfaces/PayloadProviderArgs.d.ts +8 -0
  32. package/dist/modules/o11y/shared/interfaces/index.d.ts +1 -0
  33. package/dist/modules/o11y/shared/library/InstrumentationImpl.d.ts +0 -4
  34. package/dist/modules/o11y/shared/library/NextgenImpl.d.ts +3 -3
  35. package/dist/modules/o11y/shared/{library → shared}/LogValidator.d.ts +1 -1
  36. package/dist/modules/o11y/shared/shared/PayloadUtility.d.ts +10 -0
  37. package/dist/modules/o11y/shared/shared/index.d.ts +2 -0
  38. package/dist/modules/o11y/shared/shared.js +399 -138
  39. package/dist/modules/o11y/shared/shared.js.map +1 -1
  40. package/dist/modules/o11y/shared/version.d.ts +1 -1
  41. package/dist/modules/o11y/simple_collector/interfaces/PayloadProvider.d.ts +2 -1
  42. package/dist/modules/o11y/simple_collector/interfaces/PayloadProviderArgs.d.ts +8 -0
  43. package/dist/modules/o11y/simple_collector/interfaces/index.d.ts +1 -0
  44. package/dist/modules/o11y/simple_collector/library/InstrumentationImpl.d.ts +0 -4
  45. package/dist/modules/o11y/simple_collector/library/NextgenImpl.d.ts +3 -3
  46. package/dist/modules/o11y/simple_collector/shared/LogValidator.d.ts +35 -0
  47. package/dist/modules/o11y/simple_collector/shared/PayloadUtility.d.ts +10 -0
  48. package/dist/modules/o11y/simple_collector/shared/index.d.ts +2 -0
  49. package/dist/modules/o11y/simple_collector/version.d.ts +1 -1
  50. package/dist/modules/o11y/web_vitals/interfaces/PayloadProvider.d.ts +2 -1
  51. package/dist/modules/o11y/web_vitals/interfaces/PayloadProviderArgs.d.ts +8 -0
  52. package/dist/modules/o11y/web_vitals/interfaces/index.d.ts +1 -0
  53. package/dist/modules/o11y/web_vitals/library/InstrumentationImpl.d.ts +0 -4
  54. package/dist/modules/o11y/web_vitals/library/NextgenImpl.d.ts +3 -3
  55. package/dist/modules/o11y/web_vitals/shared/LogValidator.d.ts +35 -0
  56. package/dist/modules/o11y/web_vitals/shared/PayloadUtility.d.ts +10 -0
  57. package/dist/modules/o11y/web_vitals/shared/index.d.ts +2 -0
  58. package/dist/modules/o11y/web_vitals/version.d.ts +1 -1
  59. package/package.json +1 -1
  60. package/dist/modules/o11y/simple_collector/library/LogValidator.d.ts +0 -35
  61. package/dist/modules/o11y/web_vitals/library/LogValidator.d.ts +0 -35
@@ -1,5 +1,5 @@
1
1
  import { simpleSchema, errorSchema, activitySchema, instrumentedEventSchema, idleDetectorReportSchema } from 'o11y_schema/sf_instrumentation';
2
- import { utility, PublicSafety, schemaUtil, metricsUtility } from 'o11y/shared';
2
+ import { utility, PublicSafety, schemaUtil, maxStringLengthAppLimit, metricsUtility, payloadUtility } from 'o11y/shared';
3
3
 
4
4
  class TaskerImpl {
5
5
  get isBusy() {
@@ -859,213 +859,6 @@ class DomEventHelpers {
859
859
  const singleton = new DomEventHelpers();
860
860
  const domEventHelpers = singleton;
861
861
 
862
- const maxStringLengthAppLimit = 10000;
863
- const maxItemCountAppLimit = 10000;
864
- const minUnsigned = 0;
865
- const maxFourBytes = 2147483647;
866
- const minFourBytes = -2147483648;
867
- const maxFourBytesUnsigned = 4294967295;
868
- const maxEightBytes = 9223372036854776000;
869
- const minEightBytes = -9223372036854776001;
870
- const maxEightBytesUnsigned = 18446744073709552000;
871
- class ValidationEntry {
872
- constructor(errorCode, fields, expected, received) {
873
- this.errorCode = errorCode;
874
- this.fields = fields;
875
- this.expected = expected;
876
- this.received = received;
877
- }
878
- asMessage(schemaId) {
879
- const key = this.fields[0] +
880
- this.fields
881
- .slice(1)
882
- .reduce((prev, current) => Number(current) >= 0 ? `${prev}[${current}]` : `${prev}.${current}`, '');
883
- let msg;
884
- switch (this.errorCode) {
885
- case 1:
886
- msg = 'Repeated field must be an array';
887
- break;
888
- case 2:
889
- msg = `Expected type ${this.expected} but received type ${this.received}`;
890
- break;
891
- case 3:
892
- msg = 'Value must be finite';
893
- break;
894
- case 4:
895
- msg = 'Value is out of range for its type';
896
- break;
897
- case 5:
898
- msg = 'Bytes array is malformed';
899
- break;
900
- case 6:
901
- msg = 'Exceeded app limit for maximum string length';
902
- break;
903
- case 7:
904
- msg = 'Exceeded app limit for item count';
905
- break;
906
- case 12:
907
- msg = 'Value must be an integer';
908
- break;
909
- case 13:
910
- msg = 'Values like null or undefined are not allowed for items in repeated fields';
911
- break;
912
- default:
913
- msg = `Unknown error code: ${this.errorCode}`;
914
- break;
915
- }
916
- return `Schema ${schemaId} on field "${key}": ${msg}`;
917
- }
918
- }
919
- class LogValidator {
920
- validate(schema, data, noThrow = false) {
921
- const schemaTokens = schemaUtil.checkSchema(schema);
922
- utility.requireArgument(data, 'data', 'object');
923
- const schemaId = schemaUtil.getSchemaId(schema);
924
- const errorInfos = new Array();
925
- const nestedSchema = schemaUtil.getTypes(schema);
926
- this._validateFields(errorInfos, [], data, nestedSchema[schemaTokens.message], nestedSchema, schemaId);
927
- if (errorInfos.length && !noThrow) {
928
- throw new Error(errorInfos[0].asMessage(schemaId));
929
- }
930
- return errorInfos;
931
- }
932
- _validateFields(errorInfos, fieldNames, data, message, descriptor, schemaId) {
933
- const oneofs = message.oneofs || {};
934
- const fields = message.fields || {};
935
- for (const key in data) {
936
- const value = data[key];
937
- if (value !== undefined && value !== null) {
938
- const mft = (fieldType, isRepeated, isItem) => this._matchFieldTypes(errorInfos, [...fieldNames, key], value, fieldType, descriptor, schemaId, key, isRepeated, isItem);
939
- if (oneofs[key]) {
940
- mft(fields[oneofs[key].oneof[0]].type);
941
- }
942
- else if (fields[key]) {
943
- mft(fields[key].type, fields[key].rule === 'repeated');
944
- }
945
- }
946
- }
947
- }
948
- _matchFieldTypes(errorInfos, fieldNames, fieldDataValue, protobufType, descriptor, schemaId, key, isRepeated, isItem) {
949
- let errorCode;
950
- if (isRepeated) {
951
- if (Array.isArray(fieldDataValue)) {
952
- if (fieldDataValue.length > maxItemCountAppLimit) {
953
- errorCode = 7;
954
- }
955
- fieldDataValue.forEach((value, index) => {
956
- this._matchFieldTypes(errorInfos, [...fieldNames, index.toString()], value, protobufType, descriptor, schemaId, key, undefined, true);
957
- });
958
- }
959
- else {
960
- errorCode = 1;
961
- }
962
- }
963
- else if (fieldDataValue == null || fieldDataValue === undefined) {
964
- if (isItem) {
965
- errorCode = 13;
966
- }
967
- }
968
- else {
969
- let numOpts;
970
- let javaScriptType;
971
- switch (protobufType) {
972
- case 'string':
973
- javaScriptType = 'string';
974
- if (fieldDataValue.length > maxStringLengthAppLimit) {
975
- errorCode = 6;
976
- }
977
- break;
978
- case 'bytes':
979
- javaScriptType = 'object';
980
- if (!(fieldDataValue instanceof Uint8Array)) {
981
- errorCode = 5;
982
- }
983
- break;
984
- case 'bool':
985
- javaScriptType = 'boolean';
986
- break;
987
- case 'uint32':
988
- javaScriptType = 'number';
989
- numOpts = {
990
- min: minUnsigned,
991
- max: maxFourBytesUnsigned,
992
- isInt: true,
993
- isItem
994
- };
995
- break;
996
- case 'int32':
997
- case 'sint32':
998
- case 'fixed32':
999
- case 'sfixed32':
1000
- javaScriptType = 'number';
1001
- numOpts = {
1002
- min: minFourBytes,
1003
- max: maxFourBytes,
1004
- isInt: true,
1005
- isItem
1006
- };
1007
- break;
1008
- case 'uint64':
1009
- javaScriptType = 'number';
1010
- numOpts = {
1011
- min: minUnsigned,
1012
- max: maxEightBytesUnsigned,
1013
- isInt: true,
1014
- isItem
1015
- };
1016
- break;
1017
- case 'fixed64':
1018
- case 'sfixed64':
1019
- case 'int64':
1020
- case 'sint64':
1021
- javaScriptType = 'number';
1022
- numOpts = {
1023
- min: minEightBytes,
1024
- max: maxEightBytes,
1025
- isInt: true,
1026
- isItem
1027
- };
1028
- break;
1029
- case 'double':
1030
- case 'float':
1031
- javaScriptType = 'number';
1032
- numOpts = {
1033
- min: Number.NEGATIVE_INFINITY,
1034
- max: Number.POSITIVE_INFINITY,
1035
- isInt: false,
1036
- isItem
1037
- };
1038
- break;
1039
- default:
1040
- if (new Set(Object.keys(descriptor)).has(protobufType)) {
1041
- this._validateFields(errorInfos, fieldNames, fieldDataValue, descriptor[protobufType], descriptor, schemaId);
1042
- javaScriptType = 'object';
1043
- }
1044
- break;
1045
- }
1046
- if (typeof fieldDataValue !== javaScriptType) {
1047
- errorInfos.push(new ValidationEntry(2, fieldNames, protobufType, typeof fieldDataValue));
1048
- }
1049
- else if (numOpts) {
1050
- if (numOpts.isInt && !Number.isFinite(fieldDataValue)) {
1051
- errorCode = 3;
1052
- }
1053
- else if (numOpts.isInt && !Number.isInteger(fieldDataValue)) {
1054
- errorCode = 12;
1055
- }
1056
- else if (!(!numOpts.isInt && Number.isNaN(fieldDataValue)) &&
1057
- !(fieldDataValue >= numOpts.min && fieldDataValue <= numOpts.max)) {
1058
- errorCode = 4;
1059
- }
1060
- }
1061
- }
1062
- if (errorCode) {
1063
- errorInfos.push(new ValidationEntry(errorCode, fieldNames));
1064
- }
1065
- }
1066
- }
1067
- const logValidator = new LogValidator();
1068
-
1069
862
  class BucketHistogramImpl {
1070
863
  constructor(_name, _ownerName, _ownerAppName, _tags, _buckets, createdOn, lastUpdatedOn, values) {
1071
864
  this._name = _name;
@@ -1427,10 +1220,7 @@ class InstrumentationImpl {
1427
1220
  });
1428
1221
  }
1429
1222
  _logInternal(loggerName, schema, data, timestamp, rootId) {
1430
- this._checkInputs(schema, data);
1431
- const appPayload = this._getPayloadFromProvider(this._nextGen.appPayloadProvider);
1432
- const pagePayload = this._getPayloadFromProvider(this._nextGen.pagePayloadProvider);
1433
- return this._nextGen.addLog(loggerName, schema, data, timestamp, rootId, pagePayload, appPayload);
1223
+ return this._nextGen.addLog(loggerName, schema, data, timestamp, rootId);
1434
1224
  }
1435
1225
  error(error, userSchemaOrText, userData, options) {
1436
1226
  return this._safety.tryCatch(() => {
@@ -1516,13 +1306,6 @@ class InstrumentationImpl {
1516
1306
  _handleActivityError(error, detail) {
1517
1307
  this._errorInternal(error, detail.userSchemaOrText, detail.userData, detail.id, detail.rootId);
1518
1308
  }
1519
- _getPayloadFromProvider(provider) {
1520
- const payload = (provider === null || provider === void 0 ? void 0 : provider.getPayload()) || undefined;
1521
- if (payload) {
1522
- this._checkInputs(payload.schema, payload.payload);
1523
- }
1524
- return payload;
1525
- }
1526
1309
  domEvent(event, handledBy, userSchemaOrText, userData, options) {
1527
1310
  this._safety.tryCatch(() => {
1528
1311
  var _a;
@@ -1624,49 +1407,6 @@ class InstrumentationImpl {
1624
1407
  this._metrics.bucketValue(operation, value, buckets, hasError, tags);
1625
1408
  });
1626
1409
  }
1627
- _checkInputs(schema, data) {
1628
- schemaUtil.checkSchema(schema);
1629
- utility.requireArgument(data, 'data', 'object');
1630
- let vEntries;
1631
- let savedUserPayload;
1632
- if (data.userPayload !== undefined && schemaUtil.isInternal(schema)) {
1633
- savedUserPayload = data.userPayload;
1634
- vEntries = logValidator.validate(savedUserPayload.schema, savedUserPayload.payload, true);
1635
- this._processValidationResults(schemaUtil.getSchemaId(savedUserPayload.schema), savedUserPayload.payload, vEntries);
1636
- data.userPayload = undefined;
1637
- }
1638
- vEntries = logValidator.validate(schema, data, true);
1639
- this._processValidationResults(schemaUtil.getSchemaId(schema), data, vEntries);
1640
- if (savedUserPayload !== undefined) {
1641
- data.userPayload = savedUserPayload;
1642
- }
1643
- }
1644
- _processValidationResults(schemaId, data, ventries) {
1645
- for (let i = 0; i < ventries.length; i += 1) {
1646
- const ei = ventries[i];
1647
- if (ei.errorCode == 6 ||
1648
- ei.errorCode == 7) {
1649
- const lfi = ei.fields.length - 1;
1650
- const obj = this._traverseFields(data, ei.fields.slice(0, lfi));
1651
- const field = ei.fields[lfi];
1652
- if (ei.errorCode == 6) {
1653
- obj[field] = obj[field].substring(0, maxStringLengthAppLimit);
1654
- }
1655
- else {
1656
- obj[field].splice(maxItemCountAppLimit);
1657
- }
1658
- }
1659
- else {
1660
- throw new Error(ei.asMessage(schemaId));
1661
- }
1662
- }
1663
- }
1664
- _traverseFields(data, fields) {
1665
- if (!fields.length) {
1666
- return data;
1667
- }
1668
- return this._traverseFields(data[fields[0]], fields.slice(1));
1669
- }
1670
1410
  getUpCounters() {
1671
1411
  return this._metrics.getUpCounters().filter((m) => m.getLastUpdatedOn());
1672
1412
  }
@@ -2170,36 +1910,45 @@ class NextgenImpl {
2170
1910
  var _a;
2171
1911
  return (_a = this._appInstr) === null || _a === void 0 ? void 0 : _a.name;
2172
1912
  }
2173
- addLog(loggerName, schema, data, timestamp, rootId, pagePayload, appPayload) {
1913
+ addLog(loggerName, schema, data, timestamp, rootId) {
1914
+ var _a, _b;
1915
+ payloadUtility.checkInputs(schema, data);
2174
1916
  this._sequence += 1;
2175
1917
  const userSchema = schemaUtil.isInternal(schema) && (data === null || data === void 0 ? void 0 : data.userPayload) ? data.userPayload.schema : schema;
2176
1918
  const schemaId = schemaUtil.getSchemaId(userSchema);
2177
1919
  let schemaSequence = this._seqBySchema.get(schemaId) || 0;
2178
1920
  schemaSequence += 1;
2179
1921
  this._seqBySchema.set(schemaId, schemaSequence);
2180
- if (!this._isSender) {
2181
- data = utility.clone(data);
2182
- }
2183
- if (typeof this._decimalPoints === 'number') {
2184
- utility.roundNumbersInObject(data, this._decimalPoints);
2185
- utility.roundNumbersInObject(pagePayload === null || pagePayload === void 0 ? void 0 : pagePayload.payload, this._decimalPoints);
2186
- utility.roundNumbersInObject(appPayload === null || appPayload === void 0 ? void 0 : appPayload.payload, this._decimalPoints);
2187
- }
2188
1922
  const logMeta = {
2189
1923
  timestamp,
2190
1924
  rootId,
2191
1925
  sequence: this._sequence,
2192
1926
  schemaSequence,
2193
1927
  loggerName,
2194
- pagePayload: pagePayload || undefined,
2195
- appPayload: appPayload || undefined,
1928
+ pagePayload: undefined,
1929
+ appPayload: undefined,
2196
1930
  loggerAppName: this.appName,
2197
1931
  connectionType: utility.getConnectionType(),
2198
1932
  clientSessionId: this._clientSessionId,
2199
1933
  age: utility.getAge(timestamp)
2200
1934
  };
1935
+ const payloadArgs = {
1936
+ schema,
1937
+ data,
1938
+ logMeta
1939
+ };
1940
+ logMeta.pagePayload = payloadUtility.getPayloadFromProvider(this.pagePayloadProvider, payloadArgs);
1941
+ logMeta.appPayload = payloadUtility.getPayloadFromProvider(this.appPayloadProvider, payloadArgs);
1942
+ if (!this._isSender) {
1943
+ data = utility.clone(data);
1944
+ }
1945
+ if (typeof this._decimalPoints === 'number') {
1946
+ utility.roundNumbersInObject(data, this._decimalPoints);
1947
+ utility.roundNumbersInObject((_a = logMeta.pagePayload) === null || _a === void 0 ? void 0 : _a.payload, this._decimalPoints);
1948
+ utility.roundNumbersInObject((_b = logMeta.appPayload) === null || _b === void 0 ? void 0 : _b.payload, this._decimalPoints);
1949
+ }
2201
1950
  if (this._isBufferingEnabled) {
2202
- this._buffer.push({ schema, data, logMeta });
1951
+ this._buffer.push(payloadArgs);
2203
1952
  }
2204
1953
  this._multiplex(schema, data, logMeta);
2205
1954
  return this._sequence;
@@ -2410,7 +2159,7 @@ class ConsoleCollector {
2410
2159
  }
2411
2160
  }
2412
2161
 
2413
- const version = '248.6.0';
2162
+ const version = '248.7.0';
2414
2163
 
2415
2164
  const idleDetector = new IdleDetectorImpl({
2416
2165
  logThreshold: 300,