@kubesense/kubesense-browser-logs 0.0.0-stage → 2.0.0-beta.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 (166) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +90 -2
  3. package/bundle/kubesense-logs.js +1 -0
  4. package/cjs/boot/logsPublicApi.d.ts +231 -0
  5. package/cjs/boot/logsPublicApi.js +75 -0
  6. package/cjs/boot/logsPublicApi.js.map +1 -0
  7. package/cjs/boot/preStartLogs.d.ts +8 -0
  8. package/cjs/boot/preStartLogs.js +105 -0
  9. package/cjs/boot/preStartLogs.js.map +1 -0
  10. package/cjs/boot/startLogs.d.ts +35 -0
  11. package/cjs/boot/startLogs.js +54 -0
  12. package/cjs/boot/startLogs.js.map +1 -0
  13. package/cjs/domain/assembly.d.ts +5 -0
  14. package/cjs/domain/assembly.js +35 -0
  15. package/cjs/domain/assembly.js.map +1 -0
  16. package/cjs/domain/configuration.d.ts +306 -0
  17. package/cjs/domain/configuration.js +86 -0
  18. package/cjs/domain/configuration.js.map +1 -0
  19. package/cjs/domain/console/consoleCollection.d.ts +20 -0
  20. package/cjs/domain/console/consoleCollection.js +37 -0
  21. package/cjs/domain/console/consoleCollection.js.map +1 -0
  22. package/cjs/domain/contexts/commonContext.d.ts +2 -0
  23. package/cjs/domain/contexts/commonContext.js +13 -0
  24. package/cjs/domain/contexts/commonContext.js.map +1 -0
  25. package/cjs/domain/contexts/internalContext.d.ts +7 -0
  26. package/cjs/domain/contexts/internalContext.js +11 -0
  27. package/cjs/domain/contexts/internalContext.js.map +1 -0
  28. package/cjs/domain/contexts/rumInternalContext.d.ts +2 -0
  29. package/cjs/domain/contexts/rumInternalContext.js +32 -0
  30. package/cjs/domain/contexts/rumInternalContext.js.map +1 -0
  31. package/cjs/domain/contexts/sessionContext.d.ts +4 -0
  32. package/cjs/domain/contexts/sessionContext.js +20 -0
  33. package/cjs/domain/contexts/sessionContext.js.map +1 -0
  34. package/cjs/domain/contexts/trackingConsentContext.d.ts +3 -0
  35. package/cjs/domain/contexts/trackingConsentContext.js +14 -0
  36. package/cjs/domain/contexts/trackingConsentContext.js.map +1 -0
  37. package/cjs/domain/createErrorFieldFromRawError.d.ts +10 -0
  38. package/cjs/domain/createErrorFieldFromRawError.js +15 -0
  39. package/cjs/domain/createErrorFieldFromRawError.js.map +1 -0
  40. package/cjs/domain/hooks.d.ts +28 -0
  41. package/cjs/domain/hooks.js +13 -0
  42. package/cjs/domain/hooks.js.map +1 -0
  43. package/cjs/domain/lifeCycle.d.ts +24 -0
  44. package/cjs/domain/lifeCycle.js +6 -0
  45. package/cjs/domain/lifeCycle.js.map +1 -0
  46. package/cjs/domain/logger/isAuthorized.d.ts +17 -0
  47. package/cjs/domain/logger/isAuthorized.js +34 -0
  48. package/cjs/domain/logger/isAuthorized.js.map +1 -0
  49. package/cjs/domain/logger/loggerCollection.d.ts +7 -0
  50. package/cjs/domain/logger/loggerCollection.js +47 -0
  51. package/cjs/domain/logger/loggerCollection.js.map +1 -0
  52. package/cjs/domain/logger.d.ts +48 -0
  53. package/cjs/domain/logger.js +112 -0
  54. package/cjs/domain/logger.js.map +1 -0
  55. package/cjs/domain/networkError/networkErrorCollection.d.ts +9 -0
  56. package/cjs/domain/networkError/networkErrorCollection.js +57 -0
  57. package/cjs/domain/networkError/networkErrorCollection.js.map +1 -0
  58. package/cjs/domain/plugins.d.ts +49 -0
  59. package/cjs/domain/plugins.js +12 -0
  60. package/cjs/domain/plugins.js.map +1 -0
  61. package/cjs/domain/remoteSdkConfiguration.d.ts +26 -0
  62. package/cjs/domain/remoteSdkConfiguration.js +67 -0
  63. package/cjs/domain/remoteSdkConfiguration.js.map +1 -0
  64. package/cjs/domain/report/reportCollection.d.ts +13 -0
  65. package/cjs/domain/report/reportCollection.js +30 -0
  66. package/cjs/domain/report/reportCollection.js.map +1 -0
  67. package/cjs/domain/reportError.d.ts +2 -0
  68. package/cjs/domain/reportError.js +20 -0
  69. package/cjs/domain/reportError.js.map +1 -0
  70. package/cjs/domain/runtimeError/runtimeErrorCollection.d.ts +14 -0
  71. package/cjs/domain/runtimeError/runtimeErrorCollection.js +29 -0
  72. package/cjs/domain/runtimeError/runtimeErrorCollection.js.map +1 -0
  73. package/cjs/domainContext.types.d.ts +11 -0
  74. package/cjs/entries/main.d.ts +33 -0
  75. package/cjs/entries/main.js +31 -0
  76. package/cjs/entries/main.js.map +1 -0
  77. package/cjs/logsEvent.types.d.ts +192 -0
  78. package/cjs/rawLogsEvent.types.d.ts +59 -0
  79. package/cjs/transport/startLogsBatch.d.ts +4 -0
  80. package/cjs/transport/startLogsBatch.js +22 -0
  81. package/cjs/transport/startLogsBatch.js.map +1 -0
  82. package/cjs/transport/startLogsBridge.d.ts +2 -0
  83. package/cjs/transport/startLogsBridge.js +13 -0
  84. package/cjs/transport/startLogsBridge.js.map +1 -0
  85. package/esm/boot/logsPublicApi.mjs +75 -0
  86. package/esm/boot/logsPublicApi.mjs.map +1 -0
  87. package/esm/boot/preStartLogs.mjs +105 -0
  88. package/esm/boot/preStartLogs.mjs.map +1 -0
  89. package/esm/boot/startLogs.mjs +54 -0
  90. package/esm/boot/startLogs.mjs.map +1 -0
  91. package/esm/domain/assembly.mjs +35 -0
  92. package/esm/domain/assembly.mjs.map +1 -0
  93. package/esm/domain/configuration.mjs +84 -0
  94. package/esm/domain/configuration.mjs.map +1 -0
  95. package/esm/domain/console/consoleCollection.mjs +36 -0
  96. package/esm/domain/console/consoleCollection.mjs.map +1 -0
  97. package/esm/domain/contexts/commonContext.mjs +13 -0
  98. package/esm/domain/contexts/commonContext.mjs.map +1 -0
  99. package/esm/domain/contexts/internalContext.mjs +11 -0
  100. package/esm/domain/contexts/internalContext.mjs.map +1 -0
  101. package/esm/domain/contexts/rumInternalContext.mjs +32 -0
  102. package/esm/domain/contexts/rumInternalContext.mjs.map +1 -0
  103. package/esm/domain/contexts/sessionContext.mjs +20 -0
  104. package/esm/domain/contexts/sessionContext.mjs.map +1 -0
  105. package/esm/domain/contexts/trackingConsentContext.mjs +14 -0
  106. package/esm/domain/contexts/trackingConsentContext.mjs.map +1 -0
  107. package/esm/domain/createErrorFieldFromRawError.mjs +15 -0
  108. package/esm/domain/createErrorFieldFromRawError.mjs.map +1 -0
  109. package/esm/domain/hooks.mjs +13 -0
  110. package/esm/domain/hooks.mjs.map +1 -0
  111. package/esm/domain/lifeCycle.mjs +7 -0
  112. package/esm/domain/lifeCycle.mjs.map +1 -0
  113. package/esm/domain/logger/isAuthorized.mjs +32 -0
  114. package/esm/domain/logger/isAuthorized.mjs.map +1 -0
  115. package/esm/domain/logger/loggerCollection.mjs +47 -0
  116. package/esm/domain/logger/loggerCollection.mjs.map +1 -0
  117. package/esm/domain/logger.mjs +110 -0
  118. package/esm/domain/logger.mjs.map +1 -0
  119. package/esm/domain/networkError/networkErrorCollection.mjs +56 -0
  120. package/esm/domain/networkError/networkErrorCollection.mjs.map +1 -0
  121. package/esm/domain/plugins.mjs +12 -0
  122. package/esm/domain/plugins.mjs.map +1 -0
  123. package/esm/domain/remoteSdkConfiguration.mjs +65 -0
  124. package/esm/domain/remoteSdkConfiguration.mjs.map +1 -0
  125. package/esm/domain/report/reportCollection.mjs +30 -0
  126. package/esm/domain/report/reportCollection.mjs.map +1 -0
  127. package/esm/domain/reportError.mjs +20 -0
  128. package/esm/domain/reportError.mjs.map +1 -0
  129. package/esm/domain/runtimeError/runtimeErrorCollection.mjs +29 -0
  130. package/esm/domain/runtimeError/runtimeErrorCollection.mjs.map +1 -0
  131. package/esm/entries/main.mjs +27 -0
  132. package/esm/entries/main.mjs.map +1 -0
  133. package/esm/transport/startLogsBatch.mjs +22 -0
  134. package/esm/transport/startLogsBatch.mjs.map +1 -0
  135. package/esm/transport/startLogsBridge.mjs +13 -0
  136. package/esm/transport/startLogsBridge.mjs.map +1 -0
  137. package/package.json +53 -3
  138. package/src/boot/logsPublicApi.ts +427 -0
  139. package/src/boot/preStartLogs.ts +192 -0
  140. package/src/boot/startLogs.ts +83 -0
  141. package/src/domain/assembly.ts +73 -0
  142. package/src/domain/configuration.ts +176 -0
  143. package/src/domain/console/consoleCollection.ts +58 -0
  144. package/src/domain/contexts/commonContext.ts +15 -0
  145. package/src/domain/contexts/internalContext.ts +19 -0
  146. package/src/domain/contexts/rumInternalContext.ts +60 -0
  147. package/src/domain/contexts/sessionContext.ts +34 -0
  148. package/src/domain/contexts/trackingConsentContext.ts +18 -0
  149. package/src/domain/createErrorFieldFromRawError.ts +22 -0
  150. package/src/domain/hooks.ts +40 -0
  151. package/src/domain/lifeCycle.ts +25 -0
  152. package/src/domain/logger/isAuthorized.ts +33 -0
  153. package/src/domain/logger/loggerCollection.ts +69 -0
  154. package/src/domain/logger.ts +202 -0
  155. package/src/domain/networkError/networkErrorCollection.ts +104 -0
  156. package/src/domain/plugins.ts +72 -0
  157. package/src/domain/remoteSdkConfiguration.ts +105 -0
  158. package/src/domain/report/reportCollection.ts +47 -0
  159. package/src/domain/reportError.ts +20 -0
  160. package/src/domain/runtimeError/runtimeErrorCollection.ts +51 -0
  161. package/src/domainContext.types.ts +21 -0
  162. package/src/entries/main.ts +65 -0
  163. package/src/logsEvent.types.ts +198 -0
  164. package/src/rawLogsEvent.types.ts +74 -0
  165. package/src/transport/startLogsBatch.ts +29 -0
  166. package/src/transport/startLogsBridge.ts +13 -0
@@ -0,0 +1,15 @@
1
+ //#region src/domain/createErrorFieldFromRawError.ts
2
+ function createErrorFieldFromRawError(rawError, { includeMessage = false } = {}) {
3
+ return {
4
+ stack: rawError.stack,
5
+ kind: rawError.type,
6
+ message: includeMessage ? rawError.message : void 0,
7
+ causes: rawError.causes,
8
+ fingerprint: rawError.fingerprint,
9
+ handling: rawError.handling
10
+ };
11
+ }
12
+ //#endregion
13
+ exports.createErrorFieldFromRawError = createErrorFieldFromRawError;
14
+
15
+ //# sourceMappingURL=createErrorFieldFromRawError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createErrorFieldFromRawError.js","names":[],"sources":["../../src/domain/createErrorFieldFromRawError.ts"],"sourcesContent":["import type { RawError } from '@kubesense/kubesense-browser-core'\nimport type { RawLoggerLogsEvent } from '../rawLogsEvent.types'\n\nexport function createErrorFieldFromRawError(\n rawError: RawError,\n {\n /**\n * Set this to `true` to include the error message in the error field. In most cases, the error\n * message is already included in the log message, so we don't need to include it again.\n */\n includeMessage = false,\n } = {}\n): NonNullable<RawLoggerLogsEvent['error']> {\n return {\n stack: rawError.stack,\n kind: rawError.type,\n message: includeMessage ? rawError.message : undefined,\n causes: rawError.causes,\n fingerprint: rawError.fingerprint,\n handling: rawError.handling,\n }\n}\n"],"mappings":";AAGA,SAAgB,6BACd,UACA,EAKE,iBAAiB,UACf,CAAC,GACqC;CAC1C,OAAO;EACL,OAAO,SAAS;EAChB,MAAM,SAAS;EACf,SAAS,iBAAiB,SAAS,UAAU,KAAA;EAC7C,QAAQ,SAAS;EACjB,aAAa,SAAS;EACtB,UAAU,SAAS;CACrB;AACF"}
@@ -0,0 +1,28 @@
1
+ import type { RelativeTime } from '@kubesense/kubesense-js-core/time';
2
+ import type { TelemetryEvent } from '@kubesense/kubesense-browser-core';
3
+ import type { Hook } from '@kubesense/kubesense-js-core/assembly';
4
+ import type { RecursivePartial } from '@kubesense/kubesense-js-core/util';
5
+ import type { LogsEvent } from '../logsEvent.types';
6
+ import type { RawLogsEvent } from '../rawLogsEvent.types';
7
+ import type { LogsEventDomainContext } from '../domainContext.types';
8
+ export type DefaultLogsEventAttributes = RecursivePartial<LogsEvent>;
9
+ export type DefaultTelemetryEventAttributes = RecursivePartial<TelemetryEvent>;
10
+ type DeepReadonly<T> = {
11
+ readonly [K in keyof T]: DeepReadonly<T[K]>;
12
+ };
13
+ export interface AssembleHookParams {
14
+ readonly startTime: RelativeTime;
15
+ rawLogsEvent: DeepReadonly<RawLogsEvent>;
16
+ domainContext: DeepReadonly<LogsEventDomainContext>;
17
+ }
18
+ export type AssembleHook = Hook<AssembleHookParams, DefaultLogsEventAttributes>;
19
+ export type AssembleTelemetryHook = Hook<{
20
+ startTime: RelativeTime;
21
+ }, DefaultTelemetryEventAttributes>;
22
+ export interface Hooks {
23
+ assembleEventDefaults: AssembleHook;
24
+ assembleTelemetry: AssembleTelemetryHook;
25
+ assembleEvent: AssembleHook;
26
+ }
27
+ export declare function createHooks(): Hooks;
28
+ export {};
@@ -0,0 +1,13 @@
1
+ let _kubesense_kubesense_js_core_assembly = require("@kubesense/kubesense-js-core/assembly");
2
+ //#region src/domain/hooks.ts
3
+ function createHooks() {
4
+ return {
5
+ assembleEventDefaults: (0, _kubesense_kubesense_js_core_assembly.createHook)(),
6
+ assembleTelemetry: (0, _kubesense_kubesense_js_core_assembly.createHook)(),
7
+ assembleEvent: (0, _kubesense_kubesense_js_core_assembly.createHook)()
8
+ };
9
+ }
10
+ //#endregion
11
+ exports.createHooks = createHooks;
12
+
13
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","names":["createHook"],"sources":["../../src/domain/hooks.ts"],"sourcesContent":["import type { RelativeTime } from '@kubesense/kubesense-js-core/time'\nimport type { TelemetryEvent } from '@kubesense/kubesense-browser-core'\nimport { createHook } from '@kubesense/kubesense-js-core/assembly'\nimport type { Hook } from '@kubesense/kubesense-js-core/assembly'\nimport type { RecursivePartial } from '@kubesense/kubesense-js-core/util'\nimport type { LogsEvent } from '../logsEvent.types'\nimport type { RawLogsEvent } from '../rawLogsEvent.types'\nimport type { LogsEventDomainContext } from '../domainContext.types'\n\nexport type DefaultLogsEventAttributes = RecursivePartial<LogsEvent>\nexport type DefaultTelemetryEventAttributes = RecursivePartial<TelemetryEvent>\n\ntype DeepReadonly<T> = {\n readonly [K in keyof T]: DeepReadonly<T[K]>\n}\n\n// Use readonly and DeepReadonly to prevent assemble hook callbacks from mutating the inputs.\n// DeepReadonly is only applied to objects rather than the entire AssembleHookParams to avoid casts for primitives.\nexport interface AssembleHookParams {\n readonly startTime: RelativeTime\n rawLogsEvent: DeepReadonly<RawLogsEvent>\n domainContext: DeepReadonly<LogsEventDomainContext>\n}\n\nexport type AssembleHook = Hook<AssembleHookParams, DefaultLogsEventAttributes>\nexport type AssembleTelemetryHook = Hook<{ startTime: RelativeTime }, DefaultTelemetryEventAttributes>\n\nexport interface Hooks {\n assembleEventDefaults: AssembleHook\n assembleTelemetry: AssembleTelemetryHook\n assembleEvent: AssembleHook\n}\n\nexport function createHooks(): Hooks {\n return {\n assembleEventDefaults: createHook(),\n assembleTelemetry: createHook(),\n assembleEvent: createHook(),\n }\n}\n"],"mappings":";;AAiCA,SAAgB,cAAqB;CACnC,OAAO;EACL,wBAAA,GAAuBA,sCAAAA,WAAAA,CAAW;EAClC,oBAAA,GAAmBA,sCAAAA,WAAAA,CAAW;EAC9B,gBAAA,GAAeA,sCAAAA,WAAAA,CAAW;CAC5B;AACF"}
@@ -0,0 +1,24 @@
1
+ import { AbstractLifeCycle } from '@kubesense/kubesense-browser-core';
2
+ import type { Context } from '@kubesense/kubesense-browser-core';
3
+ import type { LogsEvent } from '../logsEvent.types';
4
+ import type { CommonContext, RawLogsEvent } from '../rawLogsEvent.types';
5
+ import type { LogsEventDomainContext } from '../domainContext.types';
6
+ export declare const enum LifeCycleEventType {
7
+ RAW_LOG_COLLECTED = 0,
8
+ LOG_COLLECTED = 1
9
+ }
10
+ interface LifeCycleEventMap {
11
+ [LifeCycleEventType.RAW_LOG_COLLECTED]: RawLogsEventCollectedData;
12
+ [LifeCycleEventType.LOG_COLLECTED]: LogsEvent & Context;
13
+ }
14
+ export declare const LifeCycle: {
15
+ new (): AbstractLifeCycle<LifeCycleEventMap>;
16
+ };
17
+ export type LifeCycle = AbstractLifeCycle<LifeCycleEventMap>;
18
+ export interface RawLogsEventCollectedData<E extends RawLogsEvent = RawLogsEvent> {
19
+ rawLogsEvent: E;
20
+ savedCommonContext?: CommonContext;
21
+ domainContext?: LogsEventDomainContext<E['origin']>;
22
+ ktags?: string[];
23
+ }
24
+ export {};
@@ -0,0 +1,6 @@
1
+ //#region src/domain/lifeCycle.ts
2
+ const LifeCycle = require("@kubesense/kubesense-browser-core").AbstractLifeCycle;
3
+ //#endregion
4
+ exports.LifeCycle = LifeCycle;
5
+
6
+ //# sourceMappingURL=lifeCycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifeCycle.js","names":["AbstractLifeCycle"],"sources":["../../src/domain/lifeCycle.ts"],"sourcesContent":["import { AbstractLifeCycle } from '@kubesense/kubesense-browser-core'\nimport type { Context } from '@kubesense/kubesense-browser-core'\nimport type { LogsEvent } from '../logsEvent.types'\nimport type { CommonContext, RawLogsEvent } from '../rawLogsEvent.types'\nimport type { LogsEventDomainContext } from '../domainContext.types'\n\nexport const enum LifeCycleEventType {\n RAW_LOG_COLLECTED,\n LOG_COLLECTED,\n}\n\ninterface LifeCycleEventMap {\n [LifeCycleEventType.RAW_LOG_COLLECTED]: RawLogsEventCollectedData\n [LifeCycleEventType.LOG_COLLECTED]: LogsEvent & Context\n}\n\nexport const LifeCycle = AbstractLifeCycle<LifeCycleEventMap>\nexport type LifeCycle = AbstractLifeCycle<LifeCycleEventMap>\n\nexport interface RawLogsEventCollectedData<E extends RawLogsEvent = RawLogsEvent> {\n rawLogsEvent: E\n savedCommonContext?: CommonContext\n domainContext?: LogsEventDomainContext<E['origin']>\n ktags?: string[]\n}\n"],"mappings":";AAgBA,MAAa,uDAAYA,CAAAA,CAAAA"}
@@ -0,0 +1,17 @@
1
+ import type { Logger, HandlerType } from '../logger';
2
+ export declare function isAuthorized(status: StatusType, handlerType: HandlerType, logger: Logger): boolean;
3
+ export declare const StatusType: {
4
+ readonly ok: "ok";
5
+ readonly debug: "debug";
6
+ readonly info: "info";
7
+ readonly notice: "notice";
8
+ readonly warn: "warn";
9
+ readonly error: "error";
10
+ readonly critical: "critical";
11
+ readonly alert: "alert";
12
+ readonly emerg: "emerg";
13
+ };
14
+ export declare const STATUS_PRIORITIES: {
15
+ [key in StatusType]: number;
16
+ };
17
+ export type StatusType = (typeof StatusType)[keyof typeof StatusType];
@@ -0,0 +1,34 @@
1
+ //#region src/domain/logger/isAuthorized.ts
2
+ function isAuthorized(status, handlerType, logger) {
3
+ const loggerHandler = logger.getHandler();
4
+ const sanitizedHandlerType = Array.isArray(loggerHandler) ? loggerHandler : [loggerHandler];
5
+ return STATUS_PRIORITIES[status] >= STATUS_PRIORITIES[logger.getLevel()] && sanitizedHandlerType.includes(handlerType);
6
+ }
7
+ const StatusType = {
8
+ ok: "ok",
9
+ debug: "debug",
10
+ info: "info",
11
+ notice: "notice",
12
+ warn: "warn",
13
+ error: "error",
14
+ critical: "critical",
15
+ alert: "alert",
16
+ emerg: "emerg"
17
+ };
18
+ const STATUS_PRIORITIES = {
19
+ [StatusType.ok]: 0,
20
+ [StatusType.debug]: 1,
21
+ [StatusType.info]: 2,
22
+ [StatusType.notice]: 4,
23
+ [StatusType.warn]: 5,
24
+ [StatusType.error]: 6,
25
+ [StatusType.critical]: 7,
26
+ [StatusType.alert]: 8,
27
+ [StatusType.emerg]: 9
28
+ };
29
+ //#endregion
30
+ exports.STATUS_PRIORITIES = STATUS_PRIORITIES;
31
+ exports.StatusType = StatusType;
32
+ exports.isAuthorized = isAuthorized;
33
+
34
+ //# sourceMappingURL=isAuthorized.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isAuthorized.js","names":[],"sources":["../../../src/domain/logger/isAuthorized.ts"],"sourcesContent":["import type { Logger, HandlerType } from '../logger'\n\nexport function isAuthorized(status: StatusType, handlerType: HandlerType, logger: Logger) {\n const loggerHandler = logger.getHandler()\n const sanitizedHandlerType = Array.isArray(loggerHandler) ? loggerHandler : [loggerHandler]\n return STATUS_PRIORITIES[status] >= STATUS_PRIORITIES[logger.getLevel()] && sanitizedHandlerType.includes(handlerType)\n}\n\nexport const StatusType = {\n ok: 'ok',\n debug: 'debug',\n info: 'info',\n notice: 'notice',\n warn: 'warn',\n error: 'error',\n critical: 'critical',\n alert: 'alert',\n emerg: 'emerg',\n} as const\n\nexport const STATUS_PRIORITIES: { [key in StatusType]: number } = {\n [StatusType.ok]: 0,\n [StatusType.debug]: 1,\n [StatusType.info]: 2,\n [StatusType.notice]: 4,\n [StatusType.warn]: 5,\n [StatusType.error]: 6,\n [StatusType.critical]: 7,\n [StatusType.alert]: 8,\n [StatusType.emerg]: 9,\n}\n\nexport type StatusType = (typeof StatusType)[keyof typeof StatusType]\n"],"mappings":";AAEA,SAAgB,aAAa,QAAoB,aAA0B,QAAgB;CACzF,MAAM,gBAAgB,OAAO,WAAW;CACxC,MAAM,uBAAuB,MAAM,QAAQ,aAAa,IAAI,gBAAgB,CAAC,aAAa;CAC1F,OAAO,kBAAkB,WAAW,kBAAkB,OAAO,SAAS,MAAM,qBAAqB,SAAS,WAAW;AACvH;AAEA,MAAa,aAAa;CACxB,IAAI;CACJ,OAAO;CACP,MAAM;CACN,QAAQ;CACR,MAAM;CACN,OAAO;CACP,UAAU;CACV,OAAO;CACP,OAAO;AACT;AAEA,MAAa,oBAAqD;EAC/D,WAAW,KAAK;EAChB,WAAW,QAAQ;EACnB,WAAW,OAAO;EAClB,WAAW,SAAS;EACpB,WAAW,OAAO;EAClB,WAAW,QAAQ;EACnB,WAAW,WAAW;EACtB,WAAW,QAAQ;EACnB,WAAW,QAAQ;AACtB"}
@@ -0,0 +1,7 @@
1
+ import type { TimeStamp } from '@kubesense/kubesense-js-core/time';
2
+ import type { CommonContext } from '../../rawLogsEvent.types';
3
+ import type { LifeCycle } from '../lifeCycle';
4
+ import type { Logger, LogsMessage } from '../logger';
5
+ export declare function startLoggerCollection(lifeCycle: LifeCycle): {
6
+ handleLog: (logsMessage: LogsMessage, logger: Logger, handlingStack?: string, savedCommonContext?: CommonContext, savedDate?: TimeStamp) => void;
7
+ };
@@ -0,0 +1,47 @@
1
+ const require_isAuthorized = require("./isAuthorized.js");
2
+ const require_logger = require("../logger.js");
3
+ require("../lifeCycle.js");
4
+ let _kubesense_kubesense_js_core_util = require("@kubesense/kubesense-js-core/util");
5
+ let _kubesense_kubesense_browser_core = require("@kubesense/kubesense-browser-core");
6
+ let _kubesense_kubesense_js_core_time = require("@kubesense/kubesense-js-core/time");
7
+ //#region src/domain/logger/loggerCollection.ts
8
+ function startLoggerCollection(lifeCycle) {
9
+ function handleLog(logsMessage, logger, handlingStack, savedCommonContext, savedDate) {
10
+ const messageContext = (0, _kubesense_kubesense_js_core_util.combine)(logger.getContext(), logsMessage.context);
11
+ if (require_isAuthorized.isAuthorized(logsMessage.status, require_logger.HandlerType.console, logger)) displayInConsole(logsMessage, messageContext);
12
+ if (require_isAuthorized.isAuthorized(logsMessage.status, require_logger.HandlerType.http, logger)) {
13
+ const rawLogEventData = {
14
+ rawLogsEvent: (0, _kubesense_kubesense_js_core_util.combine)({
15
+ date: savedDate || (0, _kubesense_kubesense_js_core_time.timeStampNow)(),
16
+ message: logsMessage.message,
17
+ status: logsMessage.status,
18
+ origin: _kubesense_kubesense_browser_core.ErrorSource.LOGGER,
19
+ _kubesense: { debug_ids: logsMessage.debugIds }
20
+ }, messageContext),
21
+ savedCommonContext,
22
+ ktags: logger.getTags()
23
+ };
24
+ if (handlingStack) rawLogEventData.domainContext = { handlingStack };
25
+ lifeCycle.notify(0, rawLogEventData);
26
+ }
27
+ }
28
+ return { handleLog };
29
+ }
30
+ const loggerToConsoleApiName = {
31
+ [require_isAuthorized.StatusType.ok]: _kubesense_kubesense_js_core_util.ConsoleApiName.debug,
32
+ [require_isAuthorized.StatusType.debug]: _kubesense_kubesense_js_core_util.ConsoleApiName.debug,
33
+ [require_isAuthorized.StatusType.info]: _kubesense_kubesense_js_core_util.ConsoleApiName.info,
34
+ [require_isAuthorized.StatusType.notice]: _kubesense_kubesense_js_core_util.ConsoleApiName.info,
35
+ [require_isAuthorized.StatusType.warn]: _kubesense_kubesense_js_core_util.ConsoleApiName.warn,
36
+ [require_isAuthorized.StatusType.error]: _kubesense_kubesense_js_core_util.ConsoleApiName.error,
37
+ [require_isAuthorized.StatusType.critical]: _kubesense_kubesense_js_core_util.ConsoleApiName.error,
38
+ [require_isAuthorized.StatusType.alert]: _kubesense_kubesense_js_core_util.ConsoleApiName.error,
39
+ [require_isAuthorized.StatusType.emerg]: _kubesense_kubesense_js_core_util.ConsoleApiName.error
40
+ };
41
+ function displayInConsole({ status, message }, messageContext) {
42
+ _kubesense_kubesense_js_core_util.originalConsoleMethods[loggerToConsoleApiName[status]].call(_kubesense_kubesense_js_core_util.globalConsole, message, messageContext);
43
+ }
44
+ //#endregion
45
+ exports.startLoggerCollection = startLoggerCollection;
46
+
47
+ //# sourceMappingURL=loggerCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loggerCollection.js","names":["combine","isAuthorized","HandlerType","timeStampNow","ErrorSource","StatusType","ConsoleApiName","globalConsole"],"sources":["../../../src/domain/logger/loggerCollection.ts"],"sourcesContent":["import { timeStampNow } from '@kubesense/kubesense-js-core/time'\nimport type { TimeStamp } from '@kubesense/kubesense-js-core/time'\nimport type { Context } from '@kubesense/kubesense-browser-core'\nimport { ErrorSource } from '@kubesense/kubesense-browser-core'\nimport { originalConsoleMethods, globalConsole, ConsoleApiName, combine } from '@kubesense/kubesense-js-core/util'\nimport type { CommonContext, RawLogsEvent } from '../../rawLogsEvent.types'\nimport type { LifeCycle, RawLogsEventCollectedData } from '../lifeCycle'\nimport { LifeCycleEventType } from '../lifeCycle'\nimport type { Logger, LogsMessage } from '../logger'\nimport { HandlerType } from '../logger'\nimport { isAuthorized, StatusType } from './isAuthorized'\n\nexport function startLoggerCollection(lifeCycle: LifeCycle) {\n function handleLog(\n logsMessage: LogsMessage,\n logger: Logger,\n handlingStack?: string,\n savedCommonContext?: CommonContext,\n savedDate?: TimeStamp\n ) {\n const messageContext = combine(logger.getContext(), logsMessage.context)\n\n if (isAuthorized(logsMessage.status, HandlerType.console, logger)) {\n displayInConsole(logsMessage, messageContext)\n }\n\n if (isAuthorized(logsMessage.status, HandlerType.http, logger)) {\n const rawLogEventData: RawLogsEventCollectedData<RawLogsEvent> = {\n rawLogsEvent: combine(\n {\n date: savedDate || timeStampNow(),\n message: logsMessage.message,\n status: logsMessage.status,\n origin: ErrorSource.LOGGER,\n _kubesense: { debug_ids: logsMessage.debugIds },\n },\n messageContext\n ),\n savedCommonContext,\n ktags: logger.getTags(),\n }\n\n if (handlingStack) {\n rawLogEventData.domainContext = { handlingStack }\n }\n\n lifeCycle.notify(LifeCycleEventType.RAW_LOG_COLLECTED, rawLogEventData)\n }\n }\n\n return {\n handleLog,\n }\n}\nconst loggerToConsoleApiName: { [key in StatusType]: ConsoleApiName } = {\n [StatusType.ok]: ConsoleApiName.debug,\n [StatusType.debug]: ConsoleApiName.debug,\n [StatusType.info]: ConsoleApiName.info,\n [StatusType.notice]: ConsoleApiName.info,\n [StatusType.warn]: ConsoleApiName.warn,\n [StatusType.error]: ConsoleApiName.error,\n [StatusType.critical]: ConsoleApiName.error,\n [StatusType.alert]: ConsoleApiName.error,\n [StatusType.emerg]: ConsoleApiName.error,\n}\n\nfunction displayInConsole({ status, message }: LogsMessage, messageContext: Context | undefined) {\n originalConsoleMethods[loggerToConsoleApiName[status]].call(globalConsole, message, messageContext)\n}\n"],"mappings":";;;;;;;AAYA,SAAgB,sBAAsB,WAAsB;CAC1D,SAAS,UACP,aACA,QACA,eACA,oBACA,WACA;EACA,MAAM,kBAAA,GAAiBA,kCAAAA,QAAAA,CAAQ,OAAO,WAAW,GAAG,YAAY,OAAO;EAEvE,IAAIC,qBAAAA,aAAa,YAAY,QAAQC,eAAAA,YAAY,SAAS,MAAM,GAC9D,iBAAiB,aAAa,cAAc;EAG9C,IAAID,qBAAAA,aAAa,YAAY,QAAQC,eAAAA,YAAY,MAAM,MAAM,GAAG;GAC9D,MAAM,kBAA2D;IAC/D,eAAA,GAAcF,kCAAAA,QAAAA,CACZ;KACE,MAAM,cAAA,GAAaG,kCAAAA,aAAAA,CAAa;KAChC,SAAS,YAAY;KACrB,QAAQ,YAAY;KACpB,QAAQC,kCAAAA,YAAY;KACpB,YAAY,EAAE,WAAW,YAAY,SAAS;IAChD,GACA,cACF;IACA;IACA,OAAO,OAAO,QAAQ;GACxB;GAEA,IAAI,eACF,gBAAgB,gBAAgB,EAAE,cAAc;GAGlD,UAAU,OAAA,GAA6C,eAAe;EACxE;CACF;CAEA,OAAO,EACL,UACF;AACF;AACA,MAAM,yBAAkE;EACrEC,qBAAAA,WAAW,KAAKC,kCAAAA,eAAe;EAC/BD,qBAAAA,WAAW,QAAQC,kCAAAA,eAAe;EAClCD,qBAAAA,WAAW,OAAOC,kCAAAA,eAAe;EACjCD,qBAAAA,WAAW,SAASC,kCAAAA,eAAe;EACnCD,qBAAAA,WAAW,OAAOC,kCAAAA,eAAe;EACjCD,qBAAAA,WAAW,QAAQC,kCAAAA,eAAe;EAClCD,qBAAAA,WAAW,WAAWC,kCAAAA,eAAe;EACrCD,qBAAAA,WAAW,QAAQC,kCAAAA,eAAe;EAClCD,qBAAAA,WAAW,QAAQC,kCAAAA,eAAe;AACrC;AAEA,SAAS,iBAAiB,EAAE,QAAQ,WAAwB,gBAAqC;CAC/F,kCAAA,uBAAuB,uBAAuB,QAAQ,CAAC,KAAKC,kCAAAA,eAAe,SAAS,cAAc;AACpG"}
@@ -0,0 +1,48 @@
1
+ import type { Context, DebugIdEntry } from '@kubesense/kubesense-browser-core';
2
+ import { StatusType } from './logger/isAuthorized';
3
+ export interface LogsMessage {
4
+ message: string;
5
+ status: StatusType;
6
+ context?: Context;
7
+ debugIds?: DebugIdEntry[];
8
+ }
9
+ export declare const HandlerType: {
10
+ readonly console: "console";
11
+ readonly http: "http";
12
+ readonly silent: "silent";
13
+ };
14
+ export type HandlerType = (typeof HandlerType)[keyof typeof HandlerType];
15
+ export declare const STATUSES: StatusType[];
16
+ export declare class Logger {
17
+ private handleLogStrategy;
18
+ private handlerType;
19
+ private level;
20
+ private contextManager;
21
+ private tags;
22
+ constructor(handleLogStrategy: (logsMessage: LogsMessage, logger: Logger, handlingStack?: string) => void, name?: string, handlerType?: HandlerType | HandlerType[], level?: StatusType, loggerContext?: object);
23
+ logImplementation(message: string, messageContext?: object, status?: StatusType, error?: Error, handlingStack?: string): void;
24
+ log(message: string, messageContext?: object, status?: StatusType, error?: Error): void;
25
+ setContext(context: object): void;
26
+ getContext(): Context;
27
+ setContextProperty(key: string, value: any): void;
28
+ removeContextProperty(key: string): void;
29
+ clearContext(): void;
30
+ addTag(key: string, value?: string): void;
31
+ removeTagsWithKey(key: string): void;
32
+ getTags(): string[];
33
+ setHandler(handler: HandlerType | HandlerType[]): void;
34
+ getHandler(): HandlerType | HandlerType[];
35
+ setLevel(level: StatusType): void;
36
+ getLevel(): StatusType;
37
+ }
38
+ export interface Logger {
39
+ ok(message: string, messageContext?: object, error?: Error): void;
40
+ debug(message: string, messageContext?: object, error?: Error): void;
41
+ info(message: string, messageContext?: object, error?: Error): void;
42
+ notice(message: string, messageContext?: object, error?: Error): void;
43
+ warn(message: string, messageContext?: object, error?: Error): void;
44
+ error(message: string, messageContext?: object, error?: Error): void;
45
+ critical(message: string, messageContext?: object, error?: Error): void;
46
+ alert(message: string, messageContext?: object, error?: Error): void;
47
+ emerg(message: string, messageContext?: object, error?: Error): void;
48
+ }
@@ -0,0 +1,112 @@
1
+ const require_isAuthorized = require("./logger/isAuthorized.js");
2
+ const require_createErrorFieldFromRawError = require("./createErrorFieldFromRawError.js");
3
+ let _kubesense_kubesense_js_core_util = require("@kubesense/kubesense-js-core/util");
4
+ let _kubesense_kubesense_browser_core = require("@kubesense/kubesense-browser-core");
5
+ let _kubesense_kubesense_js_core_monitor = require("@kubesense/kubesense-js-core/monitor");
6
+ let _kubesense_kubesense_js_core_time = require("@kubesense/kubesense-js-core/time");
7
+ //#region src/domain/logger.ts
8
+ const HandlerType = {
9
+ console: "console",
10
+ http: "http",
11
+ silent: "silent"
12
+ };
13
+ const STATUSES = Object.keys(require_isAuthorized.StatusType);
14
+ var Logger = class {
15
+ constructor(handleLogStrategy, name, handlerType = HandlerType.http, level = require_isAuthorized.StatusType.debug, loggerContext = {}) {
16
+ this.handleLogStrategy = handleLogStrategy;
17
+ this.handlerType = handlerType;
18
+ this.level = level;
19
+ this.contextManager = (0, _kubesense_kubesense_browser_core.createContextManager)("logger");
20
+ this.tags = [];
21
+ this.contextManager.setContext(loggerContext);
22
+ if (name) this.contextManager.setContextProperty("logger", { name });
23
+ }
24
+ logImplementation(message, messageContext, status = require_isAuthorized.StatusType.info, error, handlingStack) {
25
+ (0, _kubesense_kubesense_js_core_monitor.callMonitored)(() => {
26
+ const sanitizedMessageContext = (0, _kubesense_kubesense_browser_core.sanitize)(messageContext);
27
+ let context;
28
+ let debugIds;
29
+ if (error !== void 0 && error !== null) {
30
+ const rawError = (0, _kubesense_kubesense_browser_core.computeRawError)({
31
+ originalError: error,
32
+ nonErrorPrefix: _kubesense_kubesense_browser_core.NonErrorPrefix.PROVIDED,
33
+ source: _kubesense_kubesense_browser_core.ErrorSource.LOGGER,
34
+ handling: _kubesense_kubesense_browser_core.ErrorHandling.HANDLED,
35
+ startClocks: (0, _kubesense_kubesense_js_core_time.clocksNow)()
36
+ });
37
+ debugIds = rawError.debugIds;
38
+ context = (0, _kubesense_kubesense_js_core_util.combine)({ error: require_createErrorFieldFromRawError.createErrorFieldFromRawError(rawError, { includeMessage: true }) }, rawError.context, sanitizedMessageContext);
39
+ } else context = sanitizedMessageContext;
40
+ this.handleLogStrategy({
41
+ message: (0, _kubesense_kubesense_browser_core.sanitize)(message),
42
+ context,
43
+ status,
44
+ ...debugIds ? { debugIds } : {}
45
+ }, this, handlingStack);
46
+ });
47
+ }
48
+ log(message, messageContext, status = require_isAuthorized.StatusType.info, error) {
49
+ let handlingStack;
50
+ if (require_isAuthorized.isAuthorized(status, HandlerType.http, this)) handlingStack = (0, _kubesense_kubesense_browser_core.createHandlingStack)("log");
51
+ this.logImplementation(message, messageContext, status, error, handlingStack);
52
+ }
53
+ setContext(context) {
54
+ this.contextManager.setContext(context);
55
+ }
56
+ getContext() {
57
+ return this.contextManager.getContext();
58
+ }
59
+ setContextProperty(key, value) {
60
+ this.contextManager.setContextProperty(key, value);
61
+ }
62
+ removeContextProperty(key) {
63
+ this.contextManager.removeContextProperty(key);
64
+ }
65
+ clearContext() {
66
+ this.contextManager.clearContext();
67
+ }
68
+ addTag(key, value) {
69
+ this.tags.push((0, _kubesense_kubesense_browser_core.buildTag)(key, value));
70
+ }
71
+ removeTagsWithKey(key) {
72
+ const sanitizedKey = (0, _kubesense_kubesense_browser_core.sanitizeTag)(key);
73
+ this.tags = this.tags.filter((tag) => tag !== sanitizedKey && !tag.startsWith(`${sanitizedKey}:`));
74
+ }
75
+ getTags() {
76
+ return this.tags.slice();
77
+ }
78
+ setHandler(handler) {
79
+ this.handlerType = handler;
80
+ }
81
+ getHandler() {
82
+ return this.handlerType;
83
+ }
84
+ setLevel(level) {
85
+ this.level = level;
86
+ }
87
+ getLevel() {
88
+ return this.level;
89
+ }
90
+ };
91
+ Logger.prototype.ok = createLoggerMethod(require_isAuthorized.StatusType.ok);
92
+ Logger.prototype.debug = createLoggerMethod(require_isAuthorized.StatusType.debug);
93
+ Logger.prototype.info = createLoggerMethod(require_isAuthorized.StatusType.info);
94
+ Logger.prototype.notice = createLoggerMethod(require_isAuthorized.StatusType.notice);
95
+ Logger.prototype.warn = createLoggerMethod(require_isAuthorized.StatusType.warn);
96
+ Logger.prototype.error = createLoggerMethod(require_isAuthorized.StatusType.error);
97
+ Logger.prototype.critical = createLoggerMethod(require_isAuthorized.StatusType.critical);
98
+ Logger.prototype.alert = createLoggerMethod(require_isAuthorized.StatusType.alert);
99
+ Logger.prototype.emerg = createLoggerMethod(require_isAuthorized.StatusType.emerg);
100
+ function createLoggerMethod(status) {
101
+ return function(message, messageContext, error) {
102
+ let handlingStack;
103
+ if (require_isAuthorized.isAuthorized(status, HandlerType.http, this)) handlingStack = (0, _kubesense_kubesense_browser_core.createHandlingStack)("log");
104
+ this.logImplementation(message, messageContext, status, error, handlingStack);
105
+ };
106
+ }
107
+ //#endregion
108
+ exports.HandlerType = HandlerType;
109
+ exports.Logger = Logger;
110
+ exports.STATUSES = STATUSES;
111
+
112
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","names":["StatusType","createContextManager","sanitize","computeRawError","NonErrorPrefix","ErrorSource","ErrorHandling","clocksNow","combine","createErrorFieldFromRawError","isAuthorized","createHandlingStack","buildTag","sanitizeTag"],"sources":["../../src/domain/logger.ts"],"sourcesContent":["import type { Context, ContextManager, DebugIdEntry } from '@kubesense/kubesense-browser-core'\nimport { clocksNow } from '@kubesense/kubesense-js-core/time'\nimport { combine } from '@kubesense/kubesense-js-core/util'\nimport {\n computeRawError,\n ErrorHandling,\n createContextManager,\n ErrorSource,\n sanitize,\n NonErrorPrefix,\n createHandlingStack,\n buildTag,\n sanitizeTag,\n} from '@kubesense/kubesense-browser-core'\nimport { callMonitored } from '@kubesense/kubesense-js-core/monitor'\n\nimport { isAuthorized, StatusType } from './logger/isAuthorized'\nimport { createErrorFieldFromRawError } from './createErrorFieldFromRawError'\n\nexport interface LogsMessage {\n message: string\n status: StatusType\n context?: Context\n debugIds?: DebugIdEntry[]\n}\n\nexport const HandlerType = {\n console: 'console',\n http: 'http',\n silent: 'silent',\n} as const\n\nexport type HandlerType = (typeof HandlerType)[keyof typeof HandlerType]\nexport const STATUSES = Object.keys(StatusType) as StatusType[]\n\n// note: it is safe to merge declarations as long as the methods are actually defined on the prototype\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging, no-restricted-syntax\nexport class Logger {\n private contextManager: ContextManager\n\n // Tags are formatted as either `key:value` or `key_only`\n private tags: string[]\n\n constructor(\n private handleLogStrategy: (logsMessage: LogsMessage, logger: Logger, handlingStack?: string) => void,\n name?: string,\n private handlerType: HandlerType | HandlerType[] = HandlerType.http,\n private level: StatusType = StatusType.debug,\n loggerContext: object = {}\n ) {\n this.contextManager = createContextManager('logger')\n this.tags = []\n this.contextManager.setContext(loggerContext)\n if (name) {\n this.contextManager.setContextProperty('logger', { name })\n }\n }\n\n logImplementation(\n message: string,\n messageContext?: object,\n status: StatusType = StatusType.info,\n error?: Error,\n handlingStack?: string\n ) {\n callMonitored(() => {\n const sanitizedMessageContext = sanitize(messageContext) as Context\n let context: Context\n let debugIds: DebugIdEntry[] | undefined\n\n if (error !== undefined && error !== null) {\n const rawError = computeRawError({\n originalError: error,\n nonErrorPrefix: NonErrorPrefix.PROVIDED,\n source: ErrorSource.LOGGER,\n handling: ErrorHandling.HANDLED,\n startClocks: clocksNow(),\n })\n\n debugIds = rawError.debugIds\n context = combine(\n {\n error: createErrorFieldFromRawError(rawError, { includeMessage: true }),\n },\n rawError.context,\n sanitizedMessageContext\n )\n } else {\n context = sanitizedMessageContext\n }\n\n this.handleLogStrategy(\n {\n message: sanitize(message)!,\n context,\n status,\n ...(debugIds ? { debugIds } : {}),\n },\n this,\n handlingStack\n )\n })\n }\n\n log(message: string, messageContext?: object, status: StatusType = StatusType.info, error?: Error) {\n let handlingStack: string | undefined\n\n if (isAuthorized(status, HandlerType.http, this)) {\n handlingStack = createHandlingStack('log')\n }\n\n this.logImplementation(message, messageContext, status, error, handlingStack)\n }\n\n setContext(context: object) {\n this.contextManager.setContext(context)\n }\n\n getContext() {\n return this.contextManager.getContext()\n }\n\n setContextProperty(key: string, value: any) {\n this.contextManager.setContextProperty(key, value)\n }\n\n removeContextProperty(key: string) {\n this.contextManager.removeContextProperty(key)\n }\n\n clearContext() {\n this.contextManager.clearContext()\n }\n\n addTag(key: string, value?: string) {\n this.tags.push(buildTag(key, value))\n }\n\n removeTagsWithKey(key: string) {\n const sanitizedKey = sanitizeTag(key)\n\n this.tags = this.tags.filter((tag) => tag !== sanitizedKey && !tag.startsWith(`${sanitizedKey}:`))\n }\n\n getTags() {\n return this.tags.slice()\n }\n\n setHandler(handler: HandlerType | HandlerType[]) {\n this.handlerType = handler\n }\n\n getHandler() {\n return this.handlerType\n }\n\n setLevel(level: StatusType) {\n this.level = level\n }\n\n getLevel() {\n return this.level\n }\n}\n\n/* eslint-disable local-rules/disallow-side-effects */\nLogger.prototype.ok = createLoggerMethod(StatusType.ok)\nLogger.prototype.debug = createLoggerMethod(StatusType.debug)\nLogger.prototype.info = createLoggerMethod(StatusType.info)\nLogger.prototype.notice = createLoggerMethod(StatusType.notice)\nLogger.prototype.warn = createLoggerMethod(StatusType.warn)\nLogger.prototype.error = createLoggerMethod(StatusType.error)\nLogger.prototype.critical = createLoggerMethod(StatusType.critical)\nLogger.prototype.alert = createLoggerMethod(StatusType.alert)\nLogger.prototype.emerg = createLoggerMethod(StatusType.emerg)\n/* eslint-enable local-rules/disallow-side-effects */\n\n// note: it is safe to merge declarations as long as the methods are actually defined on the prototype\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface Logger {\n ok(message: string, messageContext?: object, error?: Error): void\n debug(message: string, messageContext?: object, error?: Error): void\n info(message: string, messageContext?: object, error?: Error): void\n notice(message: string, messageContext?: object, error?: Error): void\n warn(message: string, messageContext?: object, error?: Error): void\n error(message: string, messageContext?: object, error?: Error): void\n critical(message: string, messageContext?: object, error?: Error): void\n alert(message: string, messageContext?: object, error?: Error): void\n emerg(message: string, messageContext?: object, error?: Error): void\n}\n\nfunction createLoggerMethod(status: StatusType) {\n return function (this: Logger, message: string, messageContext?: object, error?: Error) {\n let handlingStack: string | undefined\n\n if (isAuthorized(status, HandlerType.http, this)) {\n handlingStack = createHandlingStack('log')\n }\n\n this.logImplementation(message, messageContext, status, error, handlingStack)\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Observable, BufferedData } from '@kubesense/kubesense-browser-core';
2
+ import { noop } from '@kubesense/kubesense-browser-core';
3
+ import type { LogsConfiguration } from '../configuration';
4
+ /** arbitrary value, byte precision not needed */
5
+ export declare const DEFAULT_REQUEST_ERROR_RESPONSE_LENGTH_LIMIT: number;
6
+ import type { LifeCycle } from '../lifeCycle';
7
+ export declare function startNetworkErrorCollection(configuration: LogsConfiguration, lifeCycle: LifeCycle, bufferedDataObservable: Observable<BufferedData>): {
8
+ stop: typeof noop;
9
+ };
@@ -0,0 +1,57 @@
1
+ const require_isAuthorized = require("../logger/isAuthorized.js");
2
+ require("../lifeCycle.js");
3
+ let _kubesense_kubesense_browser_core = require("@kubesense/kubesense-browser-core");
4
+ let _kubesense_kubesense_js_core_transport = require("@kubesense/kubesense-js-core/transport");
5
+ //#region src/domain/networkError/networkErrorCollection.ts
6
+ /** arbitrary value, byte precision not needed */
7
+ const DEFAULT_REQUEST_ERROR_RESPONSE_LENGTH_LIMIT = 32 * _kubesense_kubesense_browser_core.ONE_KIBI_BYTE;
8
+ function startNetworkErrorCollection(configuration, lifeCycle, bufferedDataObservable) {
9
+ if (!configuration.forwardErrorsToLogs) return { stop: _kubesense_kubesense_browser_core.noop };
10
+ (0, _kubesense_kubesense_browser_core.initFetchObservable)({ responseBodyAction: (context) => isNetworkError(context) ? _kubesense_kubesense_browser_core.ResponseBodyAction.COLLECT : _kubesense_kubesense_browser_core.ResponseBodyAction.IGNORE });
11
+ const subscription = bufferedDataObservable.subscribe(({ data, type }) => {
12
+ if (type === _kubesense_kubesense_browser_core.BufferedDataType.FETCH && data.state === "resolve") handleResponse(_kubesense_kubesense_browser_core.RequestType.FETCH, data);
13
+ else if (type === _kubesense_kubesense_browser_core.BufferedDataType.XHR && data.state === "complete") handleResponse(_kubesense_kubesense_browser_core.RequestType.XHR, data);
14
+ });
15
+ function isNetworkError(request) {
16
+ return !(0, _kubesense_kubesense_js_core_transport.isIntakeUrl)(request.url) && !request.isAborted && (isRejected(request) || (0, _kubesense_kubesense_browser_core.isServerError)(request.status));
17
+ }
18
+ function handleResponse(type, request) {
19
+ if (!isNetworkError(request)) return;
20
+ const stackTrace = "error" in request && request.error ? (0, _kubesense_kubesense_browser_core.computeStackTrace)(request.error) : void 0;
21
+ const stack = stackTrace ? (0, _kubesense_kubesense_browser_core.toStackTraceString)(stackTrace) : request.responseBody || "Failed to load";
22
+ const debugIds = stackTrace ? (0, _kubesense_kubesense_browser_core.buildDebugIdByUrl)((0, _kubesense_kubesense_browser_core.getStackTraceUrls)(stackTrace)) : void 0;
23
+ const domainContext = { handlingStack: request.handlingStack };
24
+ lifeCycle.notify(0, {
25
+ rawLogsEvent: {
26
+ message: `${format(type)} error ${request.method} ${request.url}`,
27
+ date: request.startClocks.timeStamp,
28
+ error: {
29
+ stack: (0, _kubesense_kubesense_browser_core.safeTruncate)(stack, DEFAULT_REQUEST_ERROR_RESPONSE_LENGTH_LIMIT, "..."),
30
+ handling: void 0
31
+ },
32
+ _kubesense: { debug_ids: debugIds },
33
+ http: {
34
+ method: request.method,
35
+ status_code: request.status,
36
+ url: request.url
37
+ },
38
+ status: require_isAuthorized.StatusType.error,
39
+ origin: _kubesense_kubesense_browser_core.ErrorSource.NETWORK
40
+ },
41
+ domainContext
42
+ });
43
+ }
44
+ return { stop: () => subscription.unsubscribe() };
45
+ }
46
+ function isRejected(request) {
47
+ return request.status === 0 && request.responseType !== "opaque";
48
+ }
49
+ function format(type) {
50
+ if (_kubesense_kubesense_browser_core.RequestType.XHR === type) return "XHR";
51
+ return "Fetch";
52
+ }
53
+ //#endregion
54
+ exports.DEFAULT_REQUEST_ERROR_RESPONSE_LENGTH_LIMIT = DEFAULT_REQUEST_ERROR_RESPONSE_LENGTH_LIMIT;
55
+ exports.startNetworkErrorCollection = startNetworkErrorCollection;
56
+
57
+ //# sourceMappingURL=networkErrorCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkErrorCollection.js","names":["ONE_KIBI_BYTE","noop","ResponseBodyAction","BufferedDataType","RequestType","isIntakeUrl","isServerError","computeStackTrace","toStackTraceString","buildDebugIdByUrl","getStackTraceUrls","safeTruncate","StatusType","ErrorSource"],"sources":["../../../src/domain/networkError/networkErrorCollection.ts"],"sourcesContent":["import type {\n FetchResolveContext,\n XhrCompleteContext,\n Observable,\n BufferedData,\n} from '@kubesense/kubesense-browser-core'\nimport {\n BufferedDataType,\n ErrorSource,\n RequestType,\n initFetchObservable,\n computeStackTrace,\n toStackTraceString,\n noop,\n isServerError,\n ResponseBodyAction,\n safeTruncate,\n ONE_KIBI_BYTE,\n buildDebugIdByUrl,\n getStackTraceUrls,\n} from '@kubesense/kubesense-browser-core'\nimport { isIntakeUrl } from '@kubesense/kubesense-js-core/transport'\nimport type { LogsConfiguration } from '../configuration'\n\n/** arbitrary value, byte precision not needed */\nexport const DEFAULT_REQUEST_ERROR_RESPONSE_LENGTH_LIMIT = 32 * ONE_KIBI_BYTE\nimport type { LifeCycle } from '../lifeCycle'\nimport type { LogsEventDomainContext } from '../../domainContext.types'\nimport { LifeCycleEventType } from '../lifeCycle'\nimport { StatusType } from '../logger/isAuthorized'\n\nexport function startNetworkErrorCollection(\n configuration: LogsConfiguration,\n lifeCycle: LifeCycle,\n bufferedDataObservable: Observable<BufferedData>\n) {\n if (!configuration.forwardErrorsToLogs) {\n return { stop: noop }\n }\n\n // Register responseBodyAction getter (no subscription needed)\n initFetchObservable({\n responseBodyAction: (context) => (isNetworkError(context) ? ResponseBodyAction.COLLECT : ResponseBodyAction.IGNORE),\n })\n\n const subscription = bufferedDataObservable.subscribe(({ data, type }) => {\n if (type === BufferedDataType.FETCH && data.state === 'resolve') {\n handleResponse(RequestType.FETCH, data)\n } else if (type === BufferedDataType.XHR && data.state === 'complete') {\n handleResponse(RequestType.XHR, data)\n }\n })\n\n function isNetworkError(request: XhrCompleteContext | FetchResolveContext) {\n return !isIntakeUrl(request.url) && !request.isAborted && (isRejected(request) || isServerError(request.status))\n }\n\n function handleResponse(type: RequestType, request: XhrCompleteContext | FetchResolveContext) {\n if (!isNetworkError(request)) {\n return\n }\n const stackTrace = 'error' in request && request.error ? computeStackTrace(request.error) : undefined\n const stack = stackTrace ? toStackTraceString(stackTrace) : request.responseBody || 'Failed to load'\n const debugIds = stackTrace ? buildDebugIdByUrl(getStackTraceUrls(stackTrace)) : undefined\n\n const domainContext: LogsEventDomainContext<typeof ErrorSource.NETWORK> = {\n handlingStack: request.handlingStack,\n }\n\n lifeCycle.notify(LifeCycleEventType.RAW_LOG_COLLECTED, {\n rawLogsEvent: {\n message: `${format(type)} error ${request.method} ${request.url}`,\n date: request.startClocks.timeStamp,\n error: {\n stack: safeTruncate(stack, DEFAULT_REQUEST_ERROR_RESPONSE_LENGTH_LIMIT, '...'),\n // We don't know if the error was handled or not, so we set it to undefined\n handling: undefined,\n },\n _kubesense: { debug_ids: debugIds },\n http: {\n method: request.method as any, // Cast resource method because of case mismatch cf issue RUMF-1152\n status_code: request.status,\n url: request.url,\n },\n status: StatusType.error,\n origin: ErrorSource.NETWORK,\n },\n domainContext,\n })\n }\n\n return { stop: () => subscription.unsubscribe() }\n}\n\nfunction isRejected(request: { status: number; responseType?: string }) {\n return request.status === 0 && request.responseType !== 'opaque'\n}\n\nfunction format(type: RequestType) {\n if (RequestType.XHR === type) {\n return 'XHR'\n }\n return 'Fetch'\n}\n"],"mappings":";;;;;;AAyBA,MAAa,8CAA8C,KAAKA,kCAAAA;AAMhE,SAAgB,4BACd,eACA,WACA,wBACA;CACA,IAAI,CAAC,cAAc,qBACjB,OAAO,EAAE,MAAMC,kCAAAA,KAAK;CAItB,CAAA,GAAA,kCAAA,oBAAA,CAAoB,EAClB,qBAAqB,YAAa,eAAe,OAAO,IAAIC,kCAAAA,mBAAmB,UAAUA,kCAAAA,mBAAmB,OAC9G,CAAC;CAED,MAAM,eAAe,uBAAuB,WAAW,EAAE,MAAM,WAAW;EACxE,IAAI,SAASC,kCAAAA,iBAAiB,SAAS,KAAK,UAAU,WACpD,eAAeC,kCAAAA,YAAY,OAAO,IAAI;OACjC,IAAI,SAASD,kCAAAA,iBAAiB,OAAO,KAAK,UAAU,YACzD,eAAeC,kCAAAA,YAAY,KAAK,IAAI;CAExC,CAAC;CAED,SAAS,eAAe,SAAmD;EACzE,OAAO,EAAA,GAACC,uCAAAA,YAAAA,CAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,cAAc,WAAW,OAAO,MAAA,GAAKC,kCAAAA,cAAAA,CAAc,QAAQ,MAAM;CAChH;CAEA,SAAS,eAAe,MAAmB,SAAmD;EAC5F,IAAI,CAAC,eAAe,OAAO,GACzB;EAEF,MAAM,aAAa,WAAW,WAAW,QAAQ,SAAA,GAAQC,kCAAAA,kBAAAA,CAAkB,QAAQ,KAAK,IAAI,KAAA;EAC5F,MAAM,QAAQ,cAAA,GAAaC,kCAAAA,mBAAAA,CAAmB,UAAU,IAAI,QAAQ,gBAAgB;EACpF,MAAM,WAAW,cAAA,GAAaC,kCAAAA,kBAAAA,EAAAA,GAAkBC,kCAAAA,kBAAAA,CAAkB,UAAU,CAAC,IAAI,KAAA;EAEjF,MAAM,gBAAoE,EACxE,eAAe,QAAQ,cACzB;EAEA,UAAU,OAAA,GAA6C;GACrD,cAAc;IACZ,SAAS,GAAG,OAAO,IAAI,EAAE,SAAS,QAAQ,OAAO,GAAG,QAAQ;IAC5D,MAAM,QAAQ,YAAY;IAC1B,OAAO;KACL,QAAA,GAAOC,kCAAAA,aAAAA,CAAa,OAAO,6CAA6C,KAAK;KAE7E,UAAU,KAAA;IACZ;IACA,YAAY,EAAE,WAAW,SAAS;IAClC,MAAM;KACJ,QAAQ,QAAQ;KAChB,aAAa,QAAQ;KACrB,KAAK,QAAQ;IACf;IACA,QAAQC,qBAAAA,WAAW;IACnB,QAAQC,kCAAAA,YAAY;GACtB;GACA;EACF,CAAC;CACH;CAEA,OAAO,EAAE,YAAY,aAAa,YAAY,EAAE;AAClD;AAEA,SAAS,WAAW,SAAoD;CACtE,OAAO,QAAQ,WAAW,KAAK,QAAQ,iBAAiB;AAC1D;AAEA,SAAS,OAAO,MAAmB;CACjC,IAAIT,kCAAAA,YAAY,QAAQ,MACtB,OAAO;CAET,OAAO;AACT"}
@@ -0,0 +1,49 @@
1
+ import type { LogsPublicApi } from '../boot/logsPublicApi';
2
+ import type { StartLogsResult } from '../boot/startLogs';
3
+ import type { LogsInitConfiguration } from './configuration';
4
+ import type { AssembleHook } from './hooks';
5
+ /**
6
+ * onInit plugin API options.
7
+ *
8
+ * @experimental
9
+ */
10
+ export interface OnInitOptions {
11
+ initConfiguration: LogsInitConfiguration;
12
+ publicApi: LogsPublicApi;
13
+ /**
14
+ * Register a callback invoked when a log event is assembled, so plugins can enrich or override
15
+ * log fields before they are sent. Callbacks registered in `onInit` run before any log is
16
+ * assembled, including logs buffered during the pre-start phase.
17
+ */
18
+ registerAssembleEventHook: AssembleHook['register'];
19
+ }
20
+ /**
21
+ * onLogsStart plugin API options.
22
+ *
23
+ * @experimental
24
+ */
25
+ export interface OnLogsStartOptions {
26
+ /**
27
+ * Emit a log with the same pipeline as a logger call.
28
+ */
29
+ handleLog: StartLogsResult['handleLog'];
30
+ }
31
+ /**
32
+ * Plugin interface of the Logs browser SDK.
33
+ *
34
+ * The plugins API is unstable and experimental, and may change without
35
+ * notice. Please use only plugins provided by KubeSense matching the version of the SDK you are
36
+ * using.
37
+ *
38
+ * @experimental
39
+ */
40
+ export interface LogsPlugin {
41
+ name: string;
42
+ getConfigurationTelemetry?(): Record<string, unknown>;
43
+ onInit?(options: OnInitOptions): void;
44
+ onLogsStart?(options: OnLogsStartOptions): void;
45
+ }
46
+ type MethodNames = 'onInit' | 'onLogsStart';
47
+ type MethodParameter<MethodName extends MethodNames> = Parameters<NonNullable<LogsPlugin[MethodName]>>[0];
48
+ export declare function callPluginsMethod<MethodName extends MethodNames>(plugins: LogsPlugin[] | undefined, methodName: MethodName, parameter: MethodParameter<MethodName>): void;
49
+ export {};
@@ -0,0 +1,12 @@
1
+ //#region src/domain/plugins.ts
2
+ function callPluginsMethod(plugins, methodName, parameter) {
3
+ if (!plugins) return;
4
+ for (const plugin of plugins) {
5
+ const method = plugin[methodName];
6
+ if (method) method(parameter);
7
+ }
8
+ }
9
+ //#endregion
10
+ exports.callPluginsMethod = callPluginsMethod;
11
+
12
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","names":[],"sources":["../../src/domain/plugins.ts"],"sourcesContent":["import type { LogsPublicApi } from '../boot/logsPublicApi'\nimport type { StartLogsResult } from '../boot/startLogs'\nimport type { LogsInitConfiguration } from './configuration'\nimport type { AssembleHook } from './hooks'\n\n/**\n * onInit plugin API options.\n *\n * @experimental\n */\nexport interface OnInitOptions {\n initConfiguration: LogsInitConfiguration\n publicApi: LogsPublicApi\n /**\n * Register a callback invoked when a log event is assembled, so plugins can enrich or override\n * log fields before they are sent. Callbacks registered in `onInit` run before any log is\n * assembled, including logs buffered during the pre-start phase.\n */\n registerAssembleEventHook: AssembleHook['register']\n}\n\n/**\n * onLogsStart plugin API options.\n *\n * @experimental\n */\nexport interface OnLogsStartOptions {\n /**\n * Emit a log with the same pipeline as a logger call.\n */\n handleLog: StartLogsResult['handleLog']\n}\n\n/**\n * Plugin interface of the Logs browser SDK.\n *\n * The plugins API is unstable and experimental, and may change without\n * notice. Please use only plugins provided by KubeSense matching the version of the SDK you are\n * using.\n *\n * @experimental\n */\nexport interface LogsPlugin {\n name: string\n getConfigurationTelemetry?(): Record<string, unknown>\n onInit?(options: OnInitOptions): void\n onLogsStart?(options: OnLogsStartOptions): void\n}\n\ntype MethodNames = 'onInit' | 'onLogsStart'\ntype MethodParameter<MethodName extends MethodNames> = Parameters<NonNullable<LogsPlugin[MethodName]>>[0]\n\nexport function callPluginsMethod<MethodName extends MethodNames>(\n plugins: LogsPlugin[] | undefined,\n methodName: MethodName,\n parameter: MethodParameter<MethodName>\n): void\nexport function callPluginsMethod<MethodName extends MethodNames>(\n plugins: LogsPlugin[] | undefined,\n methodName: MethodName,\n parameter: any\n) {\n if (!plugins) {\n return\n }\n for (const plugin of plugins) {\n const method = plugin[methodName]\n if (method) {\n method(parameter)\n }\n }\n}\n"],"mappings":";AAyDA,SAAgB,kBACd,SACA,YACA,WACA;CACA,IAAI,CAAC,SACH;CAEF,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,SAAS,OAAO;EACtB,IAAI,QACF,OAAO,SAAS;CAEpB;AACF"}
@@ -0,0 +1,26 @@
1
+ import type { RemoteSdkConfig } from '@kubesense/kubesense-browser-core';
2
+ import type { LogsInitConfiguration } from './configuration';
3
+ /**
4
+ * Applies the dashboard-managed configuration document to the Logs init configuration.
5
+ *
6
+ * The Logs SDK reads the same cached document as RUM (they share one local-storage entry), but
7
+ * only consumes the `features.logs` switch and the `logs` section — RUM settings never leak
8
+ * into Logs, and vice versa.
9
+ *
10
+ * As in RUM, a missing or invalid field leaves the local `init()` value untouched, and
11
+ * identity/endpoint settings are never remotable.
12
+ */
13
+ export interface LogsRemoteSdkConfigurationResult {
14
+ initConfiguration: LogsInitConfiguration;
15
+ /** `false` when the dashboard has switched Logs off entirely. */
16
+ logsEnabled: boolean;
17
+ }
18
+ export declare function applyCachedLogsSdkConfiguration(initConfiguration: LogsInitConfiguration): LogsRemoteSdkConfigurationResult;
19
+ export declare function applyLogsSdkConfiguration(initConfiguration: LogsInitConfiguration, remoteConfig: RemoteSdkConfig): LogsRemoteSdkConfigurationResult;
20
+ /**
21
+ * Refresh the shared cache for the next page load.
22
+ *
23
+ * When RUM and Logs both run on a page they each schedule a refresh; the requests are
24
+ * idempotent GETs and the last response simply wins, so no coordination is needed.
25
+ */
26
+ export declare function scheduleLogsSdkConfigurationRefresh(initConfiguration: LogsInitConfiguration): Promise<void>;