@aws-amplify/core 4.4.2-api-logging.5 → 4.4.2-unstable.3

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 (110) hide show
  1. package/dist/aws-amplify-core.js +225 -1052
  2. package/dist/aws-amplify-core.js.map +1 -1
  3. package/dist/aws-amplify-core.min.js +7 -7
  4. package/dist/aws-amplify-core.min.js.map +1 -1
  5. package/lib/Logger/ConsoleLogger.d.ts +1 -12
  6. package/lib/Logger/ConsoleLogger.js +6 -69
  7. package/lib/Logger/ConsoleLogger.js.map +1 -1
  8. package/lib/Providers/AWSCloudWatchProvider.js +1 -8
  9. package/lib/Providers/AWSCloudWatchProvider.js.map +1 -1
  10. package/lib/Providers/index.d.ts +0 -1
  11. package/lib/Providers/index.js +0 -2
  12. package/lib/Providers/index.js.map +1 -1
  13. package/lib/Util/Constants.d.ts +1 -3
  14. package/lib/Util/Constants.js +0 -4
  15. package/lib/Util/Constants.js.map +1 -1
  16. package/lib/Util/Reachability.js +5 -7
  17. package/lib/Util/Reachability.js.map +1 -1
  18. package/lib/Util/Retry.d.ts +5 -0
  19. package/lib/Util/Retry.js +8 -2
  20. package/lib/Util/Retry.js.map +1 -1
  21. package/lib/Util/StringUtils.d.ts +0 -1
  22. package/lib/Util/StringUtils.js +6 -11
  23. package/lib/Util/StringUtils.js.map +1 -1
  24. package/lib/types/index.js +0 -4
  25. package/lib/types/index.js.map +1 -1
  26. package/lib/types/types.d.ts +1 -38
  27. package/lib/types/types.js +0 -4
  28. package/lib/types/types.js.map +1 -1
  29. package/lib-esm/Logger/ConsoleLogger.d.ts +1 -12
  30. package/lib-esm/Logger/ConsoleLogger.js +4 -67
  31. package/lib-esm/Logger/ConsoleLogger.js.map +1 -1
  32. package/lib-esm/Providers/AWSCloudWatchProvider.js +1 -8
  33. package/lib-esm/Providers/AWSCloudWatchProvider.js.map +1 -1
  34. package/lib-esm/Providers/index.d.ts +0 -1
  35. package/lib-esm/Providers/index.js +0 -1
  36. package/lib-esm/Providers/index.js.map +1 -1
  37. package/lib-esm/Util/Constants.d.ts +1 -3
  38. package/lib-esm/Util/Constants.js +1 -3
  39. package/lib-esm/Util/Constants.js.map +1 -1
  40. package/lib-esm/Util/Reachability.js +3 -5
  41. package/lib-esm/Util/Reachability.js.map +1 -1
  42. package/lib-esm/Util/Retry.d.ts +5 -0
  43. package/lib-esm/Util/Retry.js +8 -3
  44. package/lib-esm/Util/Retry.js.map +1 -1
  45. package/lib-esm/Util/StringUtils.d.ts +0 -1
  46. package/lib-esm/Util/StringUtils.js +6 -11
  47. package/lib-esm/Util/StringUtils.js.map +1 -1
  48. package/lib-esm/types/index.js +0 -1
  49. package/lib-esm/types/index.js.map +1 -1
  50. package/lib-esm/types/types.d.ts +1 -38
  51. package/lib-esm/types/types.js +0 -3
  52. package/lib-esm/types/types.js.map +1 -1
  53. package/package.json +2 -2
  54. package/src/Logger/ConsoleLogger.ts +2 -54
  55. package/src/Providers/AWSCloudWatchProvider.ts +1 -9
  56. package/src/Providers/index.ts +0 -1
  57. package/src/Util/Constants.ts +0 -4
  58. package/src/Util/Reachability.ts +7 -9
  59. package/src/Util/Retry.ts +9 -3
  60. package/src/Util/StringUtils.ts +6 -15
  61. package/src/types/types.ts +62 -106
  62. package/lib/Providers/APIProvider/APILoggingProvider.d.ts +0 -28
  63. package/lib/Providers/APIProvider/APILoggingProvider.js +0 -320
  64. package/lib/Providers/APIProvider/APILoggingProvider.js.map +0 -1
  65. package/lib/Providers/APIProvider/CloudWatchEventFormatter.d.ts +0 -5
  66. package/lib/Providers/APIProvider/CloudWatchEventFormatter.js +0 -78
  67. package/lib/Providers/APIProvider/CloudWatchEventFormatter.js.map +0 -1
  68. package/lib/Providers/APIProvider/Fetch.d.ts +0 -10
  69. package/lib/Providers/APIProvider/Fetch.js +0 -13
  70. package/lib/Providers/APIProvider/Fetch.js.map +0 -1
  71. package/lib/Providers/APIProvider/LoggerReachability/index.d.ts +0 -3
  72. package/lib/Providers/APIProvider/LoggerReachability/index.js +0 -5
  73. package/lib/Providers/APIProvider/LoggerReachability/index.js.map +0 -1
  74. package/lib/Providers/APIProvider/LoggerReachability/index.native.d.ts +0 -3
  75. package/lib/Providers/APIProvider/LoggerReachability/index.native.js +0 -9
  76. package/lib/Providers/APIProvider/LoggerReachability/index.native.js.map +0 -1
  77. package/lib/Providers/APIProvider/index.d.ts +0 -1
  78. package/lib/Providers/APIProvider/index.js +0 -5
  79. package/lib/Providers/APIProvider/index.js.map +0 -1
  80. package/lib/Providers/APIProvider/loggerConnectivity.d.ts +0 -14
  81. package/lib/Providers/APIProvider/loggerConnectivity.js +0 -55
  82. package/lib/Providers/APIProvider/loggerConnectivity.js.map +0 -1
  83. package/lib-esm/Providers/APIProvider/APILoggingProvider.d.ts +0 -28
  84. package/lib-esm/Providers/APIProvider/APILoggingProvider.js +0 -315
  85. package/lib-esm/Providers/APIProvider/APILoggingProvider.js.map +0 -1
  86. package/lib-esm/Providers/APIProvider/CloudWatchEventFormatter.d.ts +0 -5
  87. package/lib-esm/Providers/APIProvider/CloudWatchEventFormatter.js +0 -76
  88. package/lib-esm/Providers/APIProvider/CloudWatchEventFormatter.js.map +0 -1
  89. package/lib-esm/Providers/APIProvider/Fetch.d.ts +0 -10
  90. package/lib-esm/Providers/APIProvider/Fetch.js +0 -11
  91. package/lib-esm/Providers/APIProvider/Fetch.js.map +0 -1
  92. package/lib-esm/Providers/APIProvider/LoggerReachability/index.d.ts +0 -3
  93. package/lib-esm/Providers/APIProvider/LoggerReachability/index.js +0 -3
  94. package/lib-esm/Providers/APIProvider/LoggerReachability/index.js.map +0 -1
  95. package/lib-esm/Providers/APIProvider/LoggerReachability/index.native.d.ts +0 -3
  96. package/lib-esm/Providers/APIProvider/LoggerReachability/index.native.js +0 -4
  97. package/lib-esm/Providers/APIProvider/LoggerReachability/index.native.js.map +0 -1
  98. package/lib-esm/Providers/APIProvider/index.d.ts +0 -1
  99. package/lib-esm/Providers/APIProvider/index.js +0 -2
  100. package/lib-esm/Providers/APIProvider/index.js.map +0 -1
  101. package/lib-esm/Providers/APIProvider/loggerConnectivity.d.ts +0 -14
  102. package/lib-esm/Providers/APIProvider/loggerConnectivity.js +0 -50
  103. package/lib-esm/Providers/APIProvider/loggerConnectivity.js.map +0 -1
  104. package/src/Providers/APIProvider/APILoggingProvider.ts +0 -286
  105. package/src/Providers/APIProvider/CloudWatchEventFormatter.ts +0 -100
  106. package/src/Providers/APIProvider/Fetch.ts +0 -10
  107. package/src/Providers/APIProvider/LoggerReachability/index.native.ts +0 -4
  108. package/src/Providers/APIProvider/LoggerReachability/index.ts +0 -2
  109. package/src/Providers/APIProvider/index.ts +0 -1
  110. package/src/Providers/APIProvider/loggerConnectivity.ts +0 -49
@@ -1,76 +0,0 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- import { AWS_CLOUDWATCH_BASE_BUFFER_SIZE, AWS_CLOUDWATCH_MAX_BATCH_EVENT_SIZE, AWS_CLOUDWATCH_MAX_EVENT_SIZE, } from '../../Util/Constants';
13
- import { ConsoleLogger as Logger, getStringByteSize } from '../../';
14
- var logger = new Logger('APILoggingProvider');
15
- var TRUNCATE_MAX_LENGTH = 5000;
16
- export var cloudWatchEventFromGeneric = function (event) {
17
- var timestamp = event.context.logTime, message = __rest(event, ["context"]);
18
- return {
19
- timestamp: timestamp,
20
- message: JSON.stringify(event),
21
- };
22
- };
23
- export var truncateOversizedEvent = function (event) {
24
- var timestamp = event.timestamp, message = event.message;
25
- try {
26
- var messageJson = JSON.parse(message);
27
- var truncatedObj = {
28
- level: messageJson.level,
29
- class: messageJson.class,
30
- message: messageJson.message.substring(0, TRUNCATE_MAX_LENGTH),
31
- };
32
- if (messageJson.data != null) {
33
- truncatedObj['data'] = "OBJECT SIZE EXCEEDS CLOUDWATCH EVENT LIMIT. Truncated: " + JSON.stringify(messageJson.data).substring(0, TRUNCATE_MAX_LENGTH);
34
- }
35
- return {
36
- timestamp: timestamp,
37
- message: JSON.stringify(truncatedObj),
38
- };
39
- }
40
- catch (error) {
41
- logger.warn('Could not truncate oversized event', error);
42
- var truncated = JSON.stringify({
43
- level: 'UNKNOWN',
44
- class: 'Unknown',
45
- message: 'OBJECT SIZE EXCEEDS CLOUDWATCH EVENT LIMIT. Could not parse event to truncate',
46
- });
47
- return {
48
- timestamp: timestamp,
49
- message: truncated,
50
- };
51
- }
52
- };
53
- export var cloudWatchLogEventBatch = function (buffer) {
54
- var totalByteSize = 0;
55
- var currentEventIdx = 0;
56
- while (currentEventIdx < buffer.length) {
57
- var currentEvent = buffer[currentEventIdx];
58
- var eventSize = getStringByteSize(currentEvent.message) + AWS_CLOUDWATCH_BASE_BUFFER_SIZE;
59
- if (eventSize > AWS_CLOUDWATCH_MAX_EVENT_SIZE) {
60
- var errString = "Log event exceeds maximum size for CloudWatch logs. Log size: " + eventSize + ". Truncating log message.";
61
- logger.debug(errString);
62
- currentEvent = truncateOversizedEvent(currentEvent);
63
- buffer[currentEventIdx] = currentEvent;
64
- eventSize =
65
- new TextEncoder().encode(currentEvent.message).length +
66
- AWS_CLOUDWATCH_BASE_BUFFER_SIZE;
67
- }
68
- if (totalByteSize + eventSize > AWS_CLOUDWATCH_MAX_BATCH_EVENT_SIZE) {
69
- break;
70
- }
71
- totalByteSize += eventSize;
72
- currentEventIdx += 1;
73
- }
74
- return buffer.slice(0, currentEventIdx);
75
- };
76
- //# sourceMappingURL=CloudWatchEventFormatter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CloudWatchEventFormatter.js","sourceRoot":"","sources":["../../../src/Providers/APIProvider/CloudWatchEventFormatter.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,EACN,+BAA+B,EAC/B,mCAAmC,EACnC,6BAA6B,GAC7B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,aAAa,IAAI,MAAM,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAEpE,IAAM,MAAM,GAAG,IAAI,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAChD,IAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,MAAM,CAAC,IAAM,0BAA0B,GAAG,UACzC,KAAsB;IAGV,IAAA,iCAAkB,EAC7B,oCAAU,CACD;IAEV,OAAO;QACN,SAAS,WAAA;QACT,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC9B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,sBAAsB,GAAG,UAAC,KAAoB;IAClD,IAAA,2BAAS,EAAE,uBAAO,CAAW;IAErC,IAAI;QACH,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAExC,IAAM,YAAY,GAAG;YACpB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,mBAAmB,CAAC;SAC9D,CAAC;QAEF,IAAI,WAAW,CAAC,IAAI,IAAI,IAAI,EAAE;YAC7B,YAAY,CACX,MAAM,CACN,GAAG,4DAA0D,IAAI,CAAC,SAAS,CAC3E,WAAW,CAAC,IAAI,CAChB,CAAC,SAAS,CAAC,CAAC,EAAE,mBAAmB,CAAG,CAAC;SACtC;QAED,OAAO;YACN,SAAS,WAAA;YACT,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;SACrC,CAAC;KACF;IAAC,OAAO,KAAK,EAAE;QACf,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAEzD,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;YAChB,OAAO,EACN,+EAA+E;SAChF,CAAC,CAAC;QAEH,OAAO;YACN,SAAS,WAAA;YACT,OAAO,EAAE,SAAS;SAClB,CAAC;KACF;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,uBAAuB,GAAG,UACtC,MAAuB;IAEvB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,OAAO,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE;QACvC,IAAI,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAC3C,IAAI,SAAS,GACZ,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,+BAA+B,CAAC;QAE3E,IAAI,SAAS,GAAG,6BAA6B,EAAE;YAC9C,IAAM,SAAS,GAAG,mEAAiE,SAAS,8BAA2B,CAAC;YACxH,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAExB,YAAY,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;YACpD,MAAM,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC;YAEvC,SAAS;gBACR,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM;oBACrD,+BAA+B,CAAC;SACjC;QAED,IAAI,aAAa,GAAG,SAAS,GAAG,mCAAmC,EAAE;YACpE,MAAM;SACN;QAED,aAAa,IAAI,SAAS,CAAC;QAC3B,eAAe,IAAI,CAAC,CAAC;KACrB;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;AACzC,CAAC,CAAC"}
@@ -1,10 +0,0 @@
1
- export declare const postOptions: (body: object) => {
2
- method: string;
3
- mode: string;
4
- cache: string;
5
- credentials: string;
6
- headers: {
7
- 'Content-Type': string;
8
- };
9
- body: string;
10
- };
@@ -1,11 +0,0 @@
1
- export var postOptions = function (body) { return ({
2
- method: 'POST',
3
- mode: 'no-cors',
4
- cache: 'no-cache',
5
- credentials: 'same-origin',
6
- headers: {
7
- 'Content-Type': 'application/json',
8
- },
9
- body: JSON.stringify(body),
10
- }); };
11
- //# sourceMappingURL=Fetch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Fetch.js","sourceRoot":"","sources":["../../../src/Providers/APIProvider/Fetch.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,WAAW,GAAG,UAAC,IAAY,IAAK,OAAA,CAAC;IAC7C,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UAAU;IACjB,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE;QACR,cAAc,EAAE,kBAAkB;KAClC;IACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;CAC1B,CAAC,EAT2C,CAS3C,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare const ReachabilityMonitor: import("zen-observable-ts").default<{
2
- online: boolean;
3
- }>;
@@ -1,3 +0,0 @@
1
- import { Reachability } from '../../../Util';
2
- export var ReachabilityMonitor = new Reachability().networkMonitor();
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Providers/APIProvider/LoggerReachability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,MAAM,CAAC,IAAM,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC,cAAc,EAAE,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare const ReachabilityMonitor: import("zen-observable-ts").default<{
2
- online: boolean;
3
- }>;
@@ -1,4 +0,0 @@
1
- import { Reachability } from '../../..';
2
- import { default as NetInfo } from '@react-native-community/netinfo';
3
- export var ReachabilityMonitor = new Reachability().networkMonitor(NetInfo);
4
- //# sourceMappingURL=index.native.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.native.js","sourceRoot":"","sources":["../../../../src/Providers/APIProvider/LoggerReachability/index.native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAErE,MAAM,CAAC,IAAM,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export { APILoggingProvider } from './APILoggingProvider';
@@ -1,2 +0,0 @@
1
- export { APILoggingProvider } from './APILoggingProvider';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Providers/APIProvider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,14 +0,0 @@
1
- import Observable from 'zen-observable-ts';
2
- declare type ConnectionStatus = {
3
- online: boolean;
4
- };
5
- export default class LoggerConnectivity {
6
- private connectionStatus;
7
- private observer;
8
- private subscription;
9
- private timeout;
10
- constructor();
11
- status(): Observable<ConnectionStatus>;
12
- unsubscribe(): void;
13
- }
14
- export {};
@@ -1,50 +0,0 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- import Observable from 'zen-observable-ts';
13
- import { ReachabilityMonitor } from './LoggerReachability';
14
- // TODO: refactor this to a singleton that supports numerous observers
15
- var LoggerConnectivity = /** @class */ (function () {
16
- function LoggerConnectivity() {
17
- this.connectionStatus = {
18
- online: false,
19
- };
20
- }
21
- LoggerConnectivity.prototype.status = function () {
22
- var _this = this;
23
- if (this.observer) {
24
- throw new Error('Subscriber already exists');
25
- }
26
- return new Observable(function (observer) {
27
- _this.observer = observer;
28
- _this.subscription = ReachabilityMonitor.subscribe(function (_a) {
29
- var online = _a.online;
30
- _this.connectionStatus.online = online;
31
- var observerResult = __assign({}, _this.connectionStatus);
32
- observer.next(observerResult);
33
- });
34
- return function () {
35
- clearTimeout(_this.timeout);
36
- _this.unsubscribe();
37
- };
38
- });
39
- };
40
- LoggerConnectivity.prototype.unsubscribe = function () {
41
- if (this.subscription) {
42
- clearTimeout(this.timeout);
43
- this.subscription.unsubscribe();
44
- this.observer = undefined;
45
- }
46
- };
47
- return LoggerConnectivity;
48
- }());
49
- export default LoggerConnectivity;
50
- //# sourceMappingURL=loggerConnectivity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loggerConnectivity.js","sourceRoot":"","sources":["../../../src/Providers/APIProvider/loggerConnectivity.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,UAA6B,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAM3D,sEAAsE;AACtE;IAKC;QACC,IAAI,CAAC,gBAAgB,GAAG;YACvB,MAAM,EAAE,KAAK;SACb,CAAC;IACH,CAAC;IAED,mCAAM,GAAN;QAAA,iBAoBC;QAnBA,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC7C;QACD,OAAO,IAAI,UAAU,CAAC,UAAA,QAAQ;YAC7B,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAEzB,KAAI,CAAC,YAAY,GAAG,mBAAmB,CAAC,SAAS,CAAC,UAAC,EAAU;oBAAR,kBAAM;gBAC1D,KAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC;gBAEtC,IAAM,cAAc,gBAAQ,KAAI,CAAC,gBAAgB,CAAE,CAAC;gBAEpD,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,OAAO;gBACN,YAAY,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,KAAI,CAAC,WAAW,EAAE,CAAC;YACpB,CAAC,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,wCAAW,GAAX;QACC,IAAI,IAAI,CAAC,YAAY,EAAE;YACtB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;SAC1B;IACF,CAAC;IACF,yBAAC;AAAD,CAAC,AAxCD,IAwCC"}
@@ -1,286 +0,0 @@
1
- import { ConsoleLogger as Logger, LOG_LEVELS, LOG_TYPE } from '../../Logger';
2
- import LoggerConnectivity from './loggerConnectivity';
3
- import {
4
- LoggingProvider,
5
- GenericLogEvent,
6
- APILoggingProviderOptions,
7
- isLoggerEvent,
8
- } from '../../types/types';
9
- import { jitteredExponentialRetry, NonRetryableError } from '../../../';
10
- import { postOptions } from './Fetch';
11
- import {
12
- API_LOGGING_PROVIDER_NAME,
13
- API_LOGGING_PROVIDER_CATEGORY,
14
- } from '../../Util/Constants';
15
- import { getStringByteSize } from '../../Util/StringUtils';
16
- import { InputLogEvent } from '@aws-sdk/client-cloudwatch-logs';
17
-
18
- const logger = new Logger('APILoggingProvider');
19
- const HTTPS = 'https';
20
- const LOCALHOST = 'http://localhost';
21
- const DEFAULT_INTERVAL = 3000;
22
-
23
- // Exclude these to avoid infinite loop
24
- const DEFAULT_CLASS_EXCLUDE_LIST = [
25
- 'APILoggingProvider',
26
- 'AWSCloudWatch',
27
- 'Retry', // causes a loop because we're using jitteredExponentialRetry below
28
- ];
29
- const LAMBDA_PAYLOAD_LIMIT = 6 * 1024 * 1024; // 6MB
30
-
31
- /*
32
- Todo:
33
- * Refactor this into a FSM - managing state will become complex when remote config functionality gets added in P1
34
- */
35
- class APILoggingProvider implements LoggingProvider {
36
- static readonly PROVIDER_NAME = API_LOGGING_PROVIDER_NAME;
37
- static readonly CATEGORY = API_LOGGING_PROVIDER_CATEGORY;
38
-
39
- private config: APILoggingProviderOptions;
40
- private connectivity: LoggerConnectivity;
41
- private online: boolean = false;
42
- private bufferInterval: ReturnType<typeof setInterval>;
43
- private eventBuffer: GenericLogEvent[] = [];
44
-
45
- constructor(config?: APILoggingProviderOptions) {
46
- this.configure(config);
47
- }
48
-
49
- public getProviderName(): string {
50
- return APILoggingProvider.PROVIDER_NAME;
51
- }
52
-
53
- public getCategoryName(): string {
54
- return APILoggingProvider.CATEGORY;
55
- }
56
-
57
- public configure(
58
- config: APILoggingProviderOptions
59
- ): object | APILoggingProviderOptions {
60
- try {
61
- this.validateConfig(config);
62
- this.config = this.normalizeConfig(config);
63
-
64
- if (this.config.enabled === true) {
65
- this.initialize();
66
- } else {
67
- this.disable();
68
- }
69
-
70
- return this.config;
71
- } catch (error) {
72
- logger.error('Unable to start: ', error);
73
- }
74
- }
75
-
76
- public pushLogs(events: InputLogEvent[]): void {
77
- if (this.config?.enabled === false) {
78
- return;
79
- }
80
-
81
- events.forEach(event => {
82
- if (!isLoggerEvent(event)) {
83
- return;
84
- }
85
-
86
- const {
87
- message,
88
- timestamp,
89
- loggerInfo: {
90
- level,
91
- data,
92
- name,
93
- error: { message: errorMessage, name: errorName } = {},
94
- },
95
- } = event;
96
-
97
- const error = errorName &&
98
- errorMessage && {
99
- errorMessage,
100
- errorName,
101
- };
102
-
103
- const combinedEvent: GenericLogEvent = {
104
- level,
105
- error,
106
- message,
107
- context: {
108
- category: name,
109
- data: { ...data, ...this.config.metadata },
110
- logTime: timestamp,
111
- },
112
- };
113
-
114
- if (this.verifyEvent(combinedEvent)) {
115
- this.eventBuffer.push(combinedEvent);
116
- }
117
- });
118
- }
119
-
120
- private validateConfig(config: APILoggingProviderOptions): void {
121
- if (typeof config?.endpoint !== 'string') {
122
- throw new Error(
123
- `Invalid configuration. \`config.endpoint\` must be a string. Received: ${typeof config?.endpoint}`
124
- );
125
- }
126
-
127
- const protocolStr = config.endpoint.substring(0, 5).toLowerCase();
128
- const isUsingLocalhost =
129
- config.endpoint.substring(0, LOCALHOST.length).toLowerCase() ===
130
- LOCALHOST;
131
-
132
- if (protocolStr !== HTTPS && !isUsingLocalhost) {
133
- throw new Error(
134
- `Invalid configuration. Only HTTPS endpoints are supported. Received: ${protocolStr}`
135
- );
136
- }
137
- }
138
-
139
- private normalizeConfig(
140
- config: APILoggingProviderOptions
141
- ): APILoggingProviderOptions {
142
- const normalizedConfig = {
143
- endpoint: config.endpoint,
144
- apiKey: config.apiKey,
145
- metadata: config.metadata,
146
- enabled: config.enabled ?? true,
147
- level: config.level ?? LOG_TYPE.WARN,
148
- bufferInterval: config.bufferInterval ?? DEFAULT_INTERVAL,
149
- excludeClassList:
150
- config.excludeClassList instanceof Array
151
- ? [...DEFAULT_CLASS_EXCLUDE_LIST, ...config.excludeClassList]
152
- : DEFAULT_CLASS_EXCLUDE_LIST,
153
- };
154
-
155
- return normalizedConfig;
156
- }
157
-
158
- private initialize() {
159
- this.subscribeConnectivity();
160
- }
161
-
162
- private disable() {
163
- this.clearInterval();
164
- this.unsubscribeConnectivity();
165
- this.eventBuffer = [];
166
- }
167
-
168
- private subscribeConnectivity() {
169
- if (this.connectivity) {
170
- return;
171
- }
172
-
173
- this.connectivity = new LoggerConnectivity();
174
- this.connectivity.status().subscribe(({ online }) => {
175
- if (online && !this.online) {
176
- this.startInterval();
177
- } else {
178
- this.clearInterval();
179
- }
180
-
181
- this.online = online;
182
- logger.debug('Connectivity status: ', online);
183
- });
184
- }
185
-
186
- private unsubscribeConnectivity() {
187
- if (this.connectivity) {
188
- this.connectivity.unsubscribe();
189
- this.connectivity = undefined;
190
- }
191
- }
192
-
193
- private startInterval() {
194
- if (this.bufferInterval) {
195
- this.clearInterval();
196
- }
197
-
198
- this.bufferInterval = setInterval(async () => {
199
- try {
200
- await this.uploadEvents();
201
- } catch (error) {
202
- logger.error(`Could not upload log events`, error);
203
- }
204
- }, this.config.bufferInterval);
205
- }
206
-
207
- private clearInterval() {
208
- clearInterval(this.bufferInterval);
209
- this.bufferInterval = undefined;
210
- }
211
-
212
- /*
213
- Filter out events that don't adhere to config settings
214
- */
215
- private verifyEvent(event: GenericLogEvent): boolean {
216
- const { level, context } = event;
217
-
218
- const configLevelValue = LOG_LEVELS[this.config.level];
219
- const eventLevelValue = LOG_LEVELS[level];
220
-
221
- if (eventLevelValue < configLevelValue) {
222
- return false;
223
- }
224
-
225
- if (this.config.excludeClassList.includes(context.category)) {
226
- return false;
227
- }
228
-
229
- return true;
230
- }
231
-
232
- private async uploadEvents(): Promise<void> {
233
- const eventBatch = this.genericLogEventBatch(this.eventBuffer);
234
-
235
- if (eventBatch.length < 1) {
236
- return;
237
- }
238
-
239
- const body = {
240
- logs: eventBatch,
241
- };
242
-
243
- const options = postOptions(body);
244
-
245
- await jitteredExponentialRetry(
246
- async (endpoint, options) => {
247
- try {
248
- await fetch(endpoint, options); // fetch doesnt return info for no-cors request
249
- } catch (error) {
250
- // fetch will only fail in the event of a network error. Don't retry
251
- if (error.message === 'Failed to fetch') {
252
- throw new NonRetryableError(error.message);
253
- }
254
- // all other errors are logged and retried
255
- logger.warn(error);
256
- throw error;
257
- }
258
- },
259
- [this.config.endpoint, options]
260
- );
261
-
262
- // remove events from buffer after the request succeeds
263
- this.eventBuffer.splice(0, eventBatch.length);
264
- }
265
-
266
- private genericLogEventBatch(buffer: GenericLogEvent[]): GenericLogEvent[] {
267
- let totalByteSize = 0;
268
- let currentEventIdx = 0;
269
-
270
- while (currentEventIdx < buffer.length) {
271
- const currentEvent = buffer[currentEventIdx];
272
- const eventSize = getStringByteSize(JSON.stringify(currentEvent));
273
-
274
- if (totalByteSize + eventSize > LAMBDA_PAYLOAD_LIMIT) {
275
- break;
276
- }
277
-
278
- totalByteSize += eventSize;
279
- currentEventIdx += 1;
280
- }
281
-
282
- return buffer.slice(0, currentEventIdx);
283
- }
284
- }
285
-
286
- export { APILoggingProvider };
@@ -1,100 +0,0 @@
1
- import { InputLogEvent } from '@aws-sdk/client-cloudwatch-logs';
2
- import {
3
- AWS_CLOUDWATCH_BASE_BUFFER_SIZE,
4
- AWS_CLOUDWATCH_MAX_BATCH_EVENT_SIZE,
5
- AWS_CLOUDWATCH_MAX_EVENT_SIZE,
6
- } from '../../Util/Constants';
7
- import { GenericLogEvent } from '../../types/types';
8
- import { ConsoleLogger as Logger, getStringByteSize } from '../../';
9
-
10
- const logger = new Logger('APILoggingProvider');
11
- const TRUNCATE_MAX_LENGTH = 5000;
12
-
13
- export const cloudWatchEventFromGeneric = (
14
- event: GenericLogEvent
15
- ): InputLogEvent => {
16
- const {
17
- context: { logTime: timestamp },
18
- ...message
19
- } = event;
20
-
21
- return {
22
- timestamp,
23
- message: JSON.stringify(event),
24
- };
25
- };
26
-
27
- export const truncateOversizedEvent = (event: InputLogEvent): InputLogEvent => {
28
- const { timestamp, message } = event;
29
-
30
- try {
31
- const messageJson = JSON.parse(message);
32
-
33
- const truncatedObj = {
34
- level: messageJson.level,
35
- class: messageJson.class,
36
- message: messageJson.message.substring(0, TRUNCATE_MAX_LENGTH),
37
- };
38
-
39
- if (messageJson.data != null) {
40
- truncatedObj[
41
- 'data'
42
- ] = `OBJECT SIZE EXCEEDS CLOUDWATCH EVENT LIMIT. Truncated: ${JSON.stringify(
43
- messageJson.data
44
- ).substring(0, TRUNCATE_MAX_LENGTH)}`;
45
- }
46
-
47
- return {
48
- timestamp,
49
- message: JSON.stringify(truncatedObj),
50
- };
51
- } catch (error) {
52
- logger.warn('Could not truncate oversized event', error);
53
-
54
- const truncated = JSON.stringify({
55
- level: 'UNKNOWN',
56
- class: 'Unknown',
57
- message:
58
- 'OBJECT SIZE EXCEEDS CLOUDWATCH EVENT LIMIT. Could not parse event to truncate',
59
- });
60
-
61
- return {
62
- timestamp,
63
- message: truncated,
64
- };
65
- }
66
- };
67
-
68
- export const cloudWatchLogEventBatch = (
69
- buffer: InputLogEvent[]
70
- ): InputLogEvent[] => {
71
- let totalByteSize = 0;
72
- let currentEventIdx = 0;
73
-
74
- while (currentEventIdx < buffer.length) {
75
- let currentEvent = buffer[currentEventIdx];
76
- let eventSize =
77
- getStringByteSize(currentEvent.message) + AWS_CLOUDWATCH_BASE_BUFFER_SIZE;
78
-
79
- if (eventSize > AWS_CLOUDWATCH_MAX_EVENT_SIZE) {
80
- const errString = `Log event exceeds maximum size for CloudWatch logs. Log size: ${eventSize}. Truncating log message.`;
81
- logger.debug(errString);
82
-
83
- currentEvent = truncateOversizedEvent(currentEvent);
84
- buffer[currentEventIdx] = currentEvent;
85
-
86
- eventSize =
87
- new TextEncoder().encode(currentEvent.message).length +
88
- AWS_CLOUDWATCH_BASE_BUFFER_SIZE;
89
- }
90
-
91
- if (totalByteSize + eventSize > AWS_CLOUDWATCH_MAX_BATCH_EVENT_SIZE) {
92
- break;
93
- }
94
-
95
- totalByteSize += eventSize;
96
- currentEventIdx += 1;
97
- }
98
-
99
- return buffer.slice(0, currentEventIdx);
100
- };
@@ -1,10 +0,0 @@
1
- export const postOptions = (body: object) => ({
2
- method: 'POST',
3
- mode: 'no-cors',
4
- cache: 'no-cache',
5
- credentials: 'same-origin',
6
- headers: {
7
- 'Content-Type': 'application/json',
8
- },
9
- body: JSON.stringify(body),
10
- });
@@ -1,4 +0,0 @@
1
- import { Reachability } from '../../..';
2
- import { default as NetInfo } from '@react-native-community/netinfo';
3
-
4
- export const ReachabilityMonitor = new Reachability().networkMonitor(NetInfo);
@@ -1,2 +0,0 @@
1
- import { Reachability } from '../../../Util';
2
- export const ReachabilityMonitor = new Reachability().networkMonitor();
@@ -1 +0,0 @@
1
- export { APILoggingProvider } from './APILoggingProvider';
@@ -1,49 +0,0 @@
1
- import Observable, { ZenObservable } from 'zen-observable-ts';
2
- import { ReachabilityMonitor } from './LoggerReachability';
3
-
4
- type ConnectionStatus = {
5
- online: boolean;
6
- };
7
-
8
- // TODO: refactor this to a singleton that supports numerous observers
9
- export default class LoggerConnectivity {
10
- private connectionStatus: ConnectionStatus;
11
- private observer: ZenObservable.SubscriptionObserver<ConnectionStatus>;
12
- private subscription: ZenObservable.Subscription;
13
- private timeout: ReturnType<typeof setTimeout>;
14
- constructor() {
15
- this.connectionStatus = {
16
- online: false,
17
- };
18
- }
19
-
20
- status(): Observable<ConnectionStatus> {
21
- if (this.observer) {
22
- throw new Error('Subscriber already exists');
23
- }
24
- return new Observable(observer => {
25
- this.observer = observer;
26
-
27
- this.subscription = ReachabilityMonitor.subscribe(({ online }) => {
28
- this.connectionStatus.online = online;
29
-
30
- const observerResult = { ...this.connectionStatus };
31
-
32
- observer.next(observerResult);
33
- });
34
-
35
- return () => {
36
- clearTimeout(this.timeout);
37
- this.unsubscribe();
38
- };
39
- });
40
- }
41
-
42
- unsubscribe() {
43
- if (this.subscription) {
44
- clearTimeout(this.timeout);
45
- this.subscription.unsubscribe();
46
- this.observer = undefined;
47
- }
48
- }
49
- }