@dynatrace/rum-javascript-sdk 1.329.2

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 (115) hide show
  1. package/LICENSE +174 -0
  2. package/README.md +402 -0
  3. package/dist/api/constants.d.ts +1 -0
  4. package/dist/api/constants.js +2 -0
  5. package/dist/api/dynatrace-error.d.ts +3 -0
  6. package/dist/api/dynatrace-error.js +7 -0
  7. package/dist/api/global-adapter.d.ts +1 -0
  8. package/dist/api/global-adapter.js +4 -0
  9. package/dist/api/index.d.ts +65 -0
  10. package/dist/api/index.js +110 -0
  11. package/dist/api/logging.d.ts +2 -0
  12. package/dist/api/logging.js +8 -0
  13. package/dist/api/promises/index.d.ts +85 -0
  14. package/dist/api/promises/index.js +104 -0
  15. package/dist/api/promises/user-actions.d.ts +35 -0
  16. package/dist/api/promises/user-actions.js +48 -0
  17. package/dist/api/promises/wait-for-agent.d.ts +2 -0
  18. package/dist/api/promises/wait-for-agent.js +77 -0
  19. package/dist/api/promises/wait-for-send-exception-event.d.ts +9 -0
  20. package/dist/api/promises/wait-for-send-exception-event.js +18 -0
  21. package/dist/api/promises/wait-for-user-actions.d.ts +9 -0
  22. package/dist/api/promises/wait-for-user-actions.js +18 -0
  23. package/dist/api/type-guards/is-valid-agent.d.ts +2 -0
  24. package/dist/api/type-guards/is-valid-agent.js +4 -0
  25. package/dist/api/user-actions.d.ts +62 -0
  26. package/dist/api/user-actions.js +99 -0
  27. package/dist/testing/install.d.ts +15 -0
  28. package/dist/testing/install.js +19 -0
  29. package/dist/testing/test.d.ts +111 -0
  30. package/dist/testing/test.js +229 -0
  31. package/dist/types/api/dynatrace-api-types.d.ts +319 -0
  32. package/dist/types/api/dynatrace-api-types.js +7 -0
  33. package/dist/types/api/index.d.ts +1 -0
  34. package/dist/types/api/index.js +2 -0
  35. package/dist/types/index-typedoc.d.ts +31 -0
  36. package/dist/types/index-typedoc.js +32 -0
  37. package/dist/types/index.d.ts +11 -0
  38. package/dist/types/index.js +5 -0
  39. package/dist/types/internal/beacon-query.d.ts +29 -0
  40. package/dist/types/internal/beacon-query.js +32 -0
  41. package/dist/types/internal/data-dt-config-scope.d.ts +10 -0
  42. package/dist/types/internal/data-dt-config-scope.js +12 -0
  43. package/dist/types/internal/feature-hashes.d.ts +19 -0
  44. package/dist/types/internal/feature-hashes.js +22 -0
  45. package/dist/types/internal/index.d.ts +3 -0
  46. package/dist/types/internal/index.js +4 -0
  47. package/dist/types/rum-events/event-context/event-context.d.ts +364 -0
  48. package/dist/types/rum-events/event-context/event-context.js +106 -0
  49. package/dist/types/rum-events/event-context/index.d.ts +1 -0
  50. package/dist/types/rum-events/event-context/index.js +2 -0
  51. package/dist/types/rum-events/event-updates.d.ts +4 -0
  52. package/dist/types/rum-events/event-updates.js +2 -0
  53. package/dist/types/rum-events/index.d.ts +19 -0
  54. package/dist/types/rum-events/index.js +20 -0
  55. package/dist/types/rum-events/json-event.d.ts +84 -0
  56. package/dist/types/rum-events/json-event.js +2 -0
  57. package/dist/types/rum-events/rum-biz-event.d.ts +10 -0
  58. package/dist/types/rum-events/rum-biz-event.js +15 -0
  59. package/dist/types/rum-events/rum-event.d.ts +13 -0
  60. package/dist/types/rum-events/rum-event.js +3 -0
  61. package/dist/types/rum-events/rum-internal-selfmonitoring-event.d.ts +114 -0
  62. package/dist/types/rum-events/rum-internal-selfmonitoring-event.js +99 -0
  63. package/dist/types/rum-events/rum-long-task-event.d.ts +18 -0
  64. package/dist/types/rum-events/rum-long-task-event.js +10 -0
  65. package/dist/types/rum-events/rum-page-summary-event.d.ts +370 -0
  66. package/dist/types/rum-events/rum-page-summary-event.js +184 -0
  67. package/dist/types/rum-events/rum-selfmonitoring-event.d.ts +39 -0
  68. package/dist/types/rum-events/rum-selfmonitoring-event.js +32 -0
  69. package/dist/types/rum-events/rum-session-properties-event.d.ts +9 -0
  70. package/dist/types/rum-events/rum-session-properties-event.js +3 -0
  71. package/dist/types/rum-events/rum-standalone-csp-rule-violation-event.d.ts +16 -0
  72. package/dist/types/rum-events/rum-standalone-csp-rule-violation-event.js +3 -0
  73. package/dist/types/rum-events/rum-standalone-exception-event.d.ts +16 -0
  74. package/dist/types/rum-events/rum-standalone-exception-event.js +2 -0
  75. package/dist/types/rum-events/rum-standalone-navigation-event.d.ts +23 -0
  76. package/dist/types/rum-events/rum-standalone-navigation-event.js +6 -0
  77. package/dist/types/rum-events/rum-user-action-event.d.ts +187 -0
  78. package/dist/types/rum-events/rum-user-action-event.js +78 -0
  79. package/dist/types/rum-events/rum-user-interaction-event.d.ts +302 -0
  80. package/dist/types/rum-events/rum-user-interaction-event.js +131 -0
  81. package/dist/types/rum-events/rum-visibility-change-event.d.ts +15 -0
  82. package/dist/types/rum-events/rum-visibility-change-event.js +6 -0
  83. package/dist/types/rum-events/rum-web-request-event.d.ts +269 -0
  84. package/dist/types/rum-events/rum-web-request-event.js +143 -0
  85. package/dist/types/rum-events/schema-versions.d.ts +4 -0
  86. package/dist/types/rum-events/schema-versions.js +5 -0
  87. package/dist/types/rum-events/shared-namespaces-and-fields/csp-fields.d.ts +38 -0
  88. package/dist/types/rum-events/shared-namespaces-and-fields/csp-fields.js +23 -0
  89. package/dist/types/rum-events/shared-namespaces-and-fields/exception-fields.d.ts +26 -0
  90. package/dist/types/rum-events/shared-namespaces-and-fields/exception-fields.js +19 -0
  91. package/dist/types/rum-events/shared-namespaces-and-fields/general-rum-error-fields.d.ts +66 -0
  92. package/dist/types/rum-events/shared-namespaces-and-fields/general-rum-error-fields.js +66 -0
  93. package/dist/types/rum-events/shared-namespaces-and-fields/general-rum-event-fields.d.ts +142 -0
  94. package/dist/types/rum-events/shared-namespaces-and-fields/general-rum-event-fields.js +98 -0
  95. package/dist/types/rum-events/shared-namespaces-and-fields/http-namespace.d.ts +16 -0
  96. package/dist/types/rum-events/shared-namespaces-and-fields/http-namespace.js +11 -0
  97. package/dist/types/rum-events/shared-namespaces-and-fields/index.d.ts +9 -0
  98. package/dist/types/rum-events/shared-namespaces-and-fields/index.js +10 -0
  99. package/dist/types/rum-events/shared-namespaces-and-fields/navigation-fields.d.ts +48 -0
  100. package/dist/types/rum-events/shared-namespaces-and-fields/navigation-fields.js +47 -0
  101. package/dist/types/rum-events/shared-namespaces-and-fields/page-source-fields.d.ts +9 -0
  102. package/dist/types/rum-events/shared-namespaces-and-fields/page-source-fields.js +5 -0
  103. package/dist/types/rum-events/shared-namespaces-and-fields/request-fields.d.ts +14 -0
  104. package/dist/types/rum-events/shared-namespaces-and-fields/request-fields.js +10 -0
  105. package/dist/types/rum-events/shared-namespaces-and-fields/view-source-fields.d.ts +14 -0
  106. package/dist/types/rum-events/shared-namespaces-and-fields/view-source-fields.js +9 -0
  107. package/dist/types/user-actions/index.d.ts +3 -0
  108. package/dist/types/user-actions/index.js +4 -0
  109. package/dist/types/user-actions/user-action-end-event.d.ts +28 -0
  110. package/dist/types/user-actions/user-action-end-event.js +2 -0
  111. package/dist/types/user-actions/user-action-start-options.d.ts +23 -0
  112. package/dist/types/user-actions/user-action-start-options.js +2 -0
  113. package/dist/types/user-actions/user-action-tracker.d.ts +72 -0
  114. package/dist/types/user-actions/user-action-tracker.js +2 -0
  115. package/package.json +115 -0
@@ -0,0 +1,110 @@
1
+ import { getGlobal } from "./global-adapter.js";
2
+ import { isValidAgent } from "./type-guards/is-valid-agent.js";
3
+ import { log } from "./logging.js";
4
+ export { DynatraceError } from "./dynatrace-error.js";
5
+ /**
6
+ * Safe wrapper for {@link dynatrace.sendEvent} which reverts to a noop if RUM JavaScript is not available.
7
+ *
8
+ * @param fields Must be a valid JSON object and cannot contain functions, undefined, Infinity and NaN as
9
+ * values, otherwise they will be replaced with null. The `fields` need to be serializable
10
+ * using JSON.stringify. The resulting event will be populated with `fields` parameter, and
11
+ * modified with additional properties, thus also empty objects are valid. Only properties
12
+ * prefixed with `event_properties.`, the `duration` property and the `start_time` property are
13
+ * allowed.
14
+ * @param eventContext An optional context that can be used to manipulate the
15
+ * result event within the modification callback.
16
+ */
17
+ export function sendEvent(fields, eventContext) {
18
+ guardDynatrace((dt) => {
19
+ dt.sendEvent(fields, eventContext);
20
+ });
21
+ }
22
+ /**
23
+ * Safe wrapper for {@link dynatrace.addEventModifier} which reverts to a noop if RUM JavaScript is not available.
24
+ *
25
+ * @param eventModifier The modifier function to modify a given (readonly) JSONEvent. It receives an optional context
26
+ * depending on the type of event, if available. The returned event must be a new object, otherwise
27
+ * modification will be ignored.
28
+ * @returns The unsubscriber function to turn off event modification, or undefined if RUM JavaScript is not available.
29
+ */
30
+ export function addEventModifier(eventModifier) {
31
+ return guardDynatrace((dt) => {
32
+ return dt.addEventModifier(eventModifier);
33
+ });
34
+ }
35
+ /**
36
+ * Safe wrapper for {@link dynatrace.runHealthCheck} which reverts to a noop if RUM JavaScript is not available.
37
+ *
38
+ * @param config The optional configuration object for the health check.
39
+ * @param config.logVerbose If true, verbose information is included in the health check.
40
+ * @param config.returnDiagnosticData If true, the diagnostic data is returned as array instead of just being logged.
41
+ * @param config.runDetailedOverrideCheck If true, additional information will be logged to the console for overridden native APIs.
42
+ * @returns A promise that settles as soon as the health check has been performed, or undefined if RUM JavaScript is not available.
43
+ */
44
+ export function runHealthCheck(config) {
45
+ return guardDynatrace((dt) => {
46
+ return dt.runHealthCheck(config);
47
+ });
48
+ }
49
+ /**
50
+ * Safe wrapper for {@link dynatrace.identifyUser} which reverts to a noop if RUM JavaScript is not available.
51
+ *
52
+ * @param value The name of the user. For example, use a name, userid, or your user's email address.
53
+ */
54
+ export function identifyUser(value) {
55
+ guardDynatrace((dt) => {
56
+ dt.identifyUser(value);
57
+ });
58
+ }
59
+ /**
60
+ * Safe wrapper for {@link dynatrace.sendSessionPropertyEvent} which reverts to a noop if RUM JavaScript is not available.
61
+ *
62
+ * @param fields Must be a valid JSON object and cannot contain functions, undefined, Infinity and NaN as
63
+ * values, otherwise they will be replaced with null. The `fields` need to be serializable
64
+ * using JSON.stringify. All keys must be prefixed with "session_properties.*" and must contain only
65
+ * lower-case characters, numbers, underscores or dots. Each dot must be followed by a lower-case
66
+ * character. Each underscore must be followed by a lower-case character or number.
67
+ */
68
+ export function sendSessionPropertyEvent(fields) {
69
+ guardDynatrace((dt) => {
70
+ dt.sendSessionPropertyEvent(fields);
71
+ });
72
+ }
73
+ /**
74
+ * This function is only available if the Error module is enabled
75
+ *
76
+ * @param error Must be a valid instance of the Error class. If an invalid value is provided, the error will not be processed or sent.
77
+ * @param fields Optional: Must be a valid JSON object and cannot contain functions, undefined, Infinity and NaN as
78
+ * values, otherwise they will be replaced with null. The `fields` need to be serializable
79
+ * using JSON.stringify. The resulting event will contain the provided `fields`, and is
80
+ * modified with additional properties, thus also empty objects are valid. Only properties
81
+ * prefixed with `event_properties.`, the `duration` property and the `start_time` property are
82
+ * allowed. String properties are limited to 5000 characters, exceeding characters are cut off.
83
+ * All event property keys must contain only alphabetic characters, numbers,
84
+ * underscores or dots. Each dot must be followed by an alphabetic character. Each underscore
85
+ * must be followed by an alphabetic character or number.
86
+ */
87
+ export function sendExceptionEvent(error, fields) {
88
+ guardDynatrace((dt) => {
89
+ if (!dt.sendExceptionEvent) {
90
+ log("dynatrace.sendExceptionEvent is not available, the Error module might not be enabled");
91
+ return;
92
+ }
93
+ dt.sendExceptionEvent(error, fields);
94
+ });
95
+ }
96
+ /**
97
+ * Safe wrapper for various RUM JavaScript API functions which reverts to a noop if RUM JavaScript is not available.
98
+ *
99
+ * @param fn The function to be executed if RUM JavaScript is available.
100
+ * @returns The result of the provided function call if RUM JavaScript is available, otherwise undefined.
101
+ */
102
+ function guardDynatrace(fn) {
103
+ const globalDt = getGlobal("dynatrace");
104
+ if (!isValidAgent(globalDt)) {
105
+ log("dynatrace is not available");
106
+ return void 0;
107
+ }
108
+ return fn(globalDt);
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvYXBpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVuQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQXNDLEVBQUUsWUFBc0I7SUFDcEYsY0FBYyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7UUFDbEIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxhQUFnRztJQUM3SCxPQUFPLGNBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQ3pCLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUEwQjtJQUNyRCxPQUFPLGNBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQ3pCLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhO0lBQ3RDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQ2xCLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsTUFBd0M7SUFDN0UsY0FBYyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7UUFDbEIsRUFBRSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBWSxFQUFFLE1BQXVDO0lBQ3BGLGNBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQ2xCLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN6QixHQUFHLENBQUMsc0ZBQXNGLENBQUMsQ0FBQztZQUM1RixPQUFPO1FBQ1gsQ0FBQztRQUNELEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGNBQWMsQ0FBa0UsRUFBSztJQUMxRixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzFCLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gICAgQXBpQ3JlYXRlZEV2ZW50UHJvcGVydGllc0V2ZW50LFxuICAgIEFwaUNyZWF0ZWRTZXNzaW9uUHJvcGVydGllc0V2ZW50LFxuICAgIEV2ZW50Q29udGV4dCxcbiAgICBIZWFsdGhDaGVja0NvbmZpZyxcbiAgICBKU09ORXZlbnQsXG4gICAgVW5zdWJzY3JpYmVyXG59IGZyb20gXCIuLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4vZ2xvYmFsLWFkYXB0ZXIuanNcIjtcbmltcG9ydCB7IGlzVmFsaWRBZ2VudCB9IGZyb20gXCIuL3R5cGUtZ3VhcmRzL2lzLXZhbGlkLWFnZW50LmpzXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiLi9sb2dnaW5nLmpzXCI7XG5cbmV4cG9ydCB7IER5bmF0cmFjZUVycm9yIH0gZnJvbSBcIi4vZHluYXRyYWNlLWVycm9yLmpzXCI7XG5cbi8qKlxuICogU2FmZSB3cmFwcGVyIGZvciB7QGxpbmsgZHluYXRyYWNlLnNlbmRFdmVudH0gd2hpY2ggcmV2ZXJ0cyB0byBhIG5vb3AgaWYgUlVNIEphdmFTY3JpcHQgaXMgbm90IGF2YWlsYWJsZS5cbiAqXG4gKiBAcGFyYW0gZmllbGRzICAgICAgIE11c3QgYmUgYSB2YWxpZCBKU09OIG9iamVjdCBhbmQgY2Fubm90IGNvbnRhaW4gZnVuY3Rpb25zLCB1bmRlZmluZWQsIEluZmluaXR5IGFuZCBOYU4gYXNcbiAqICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLCBvdGhlcndpc2UgdGhleSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggbnVsbC4gVGhlIGBmaWVsZHNgIG5lZWQgdG8gYmUgc2VyaWFsaXphYmxlXG4gKiAgICAgICAgICAgICAgICAgICAgIHVzaW5nIEpTT04uc3RyaW5naWZ5LiBUaGUgcmVzdWx0aW5nIGV2ZW50IHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggYGZpZWxkc2AgcGFyYW1ldGVyLCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgd2l0aCBhZGRpdGlvbmFsIHByb3BlcnRpZXMsIHRodXMgYWxzbyBlbXB0eSBvYmplY3RzIGFyZSB2YWxpZC4gT25seSBwcm9wZXJ0aWVzXG4gKiAgICAgICAgICAgICAgICAgICAgIHByZWZpeGVkIHdpdGggYGV2ZW50X3Byb3BlcnRpZXMuYCwgdGhlIGBkdXJhdGlvbmAgcHJvcGVydHkgYW5kIHRoZSBgc3RhcnRfdGltZWAgcHJvcGVydHkgYXJlXG4gKiAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQuXG4gKiBAcGFyYW0gZXZlbnRDb250ZXh0IEFuIG9wdGlvbmFsIGNvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZVxuICogICAgICAgICAgICAgICAgICAgICByZXN1bHQgZXZlbnQgd2l0aGluIHRoZSBtb2RpZmljYXRpb24gY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kRXZlbnQoZmllbGRzOiBBcGlDcmVhdGVkRXZlbnRQcm9wZXJ0aWVzRXZlbnQsIGV2ZW50Q29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBndWFyZER5bmF0cmFjZSgoZHQpID0+IHtcbiAgICAgICAgZHQuc2VuZEV2ZW50KGZpZWxkcywgZXZlbnRDb250ZXh0KTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBTYWZlIHdyYXBwZXIgZm9yIHtAbGluayBkeW5hdHJhY2UuYWRkRXZlbnRNb2RpZmllcn0gd2hpY2ggcmV2ZXJ0cyB0byBhIG5vb3AgaWYgUlVNIEphdmFTY3JpcHQgaXMgbm90IGF2YWlsYWJsZS5cbiAqXG4gKiBAcGFyYW0gZXZlbnRNb2RpZmllciBUaGUgbW9kaWZpZXIgZnVuY3Rpb24gdG8gbW9kaWZ5IGEgZ2l2ZW4gKHJlYWRvbmx5KSBKU09ORXZlbnQuIEl0IHJlY2VpdmVzIGFuIG9wdGlvbmFsIGNvbnRleHRcbiAqICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBldmVudCwgaWYgYXZhaWxhYmxlLiBUaGUgcmV0dXJuZWQgZXZlbnQgbXVzdCBiZSBhIG5ldyBvYmplY3QsIG90aGVyd2lzZVxuICogICAgICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9uIHdpbGwgYmUgaWdub3JlZC5cbiAqIEByZXR1cm5zICAgICAgICAgICAgIFRoZSB1bnN1YnNjcmliZXIgZnVuY3Rpb24gdG8gdHVybiBvZmYgZXZlbnQgbW9kaWZpY2F0aW9uLCBvciB1bmRlZmluZWQgaWYgUlVNIEphdmFTY3JpcHQgaXMgbm90IGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50TW9kaWZpZXIoZXZlbnRNb2RpZmllcjogKGpzb25FdmVudDogUmVhZG9ubHk8SlNPTkV2ZW50PiwgZXZlbnRDb250ZXh0PzogRXZlbnRDb250ZXh0KSA9PiBKU09ORXZlbnQgfCBudWxsKTogVW5zdWJzY3JpYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZ3VhcmREeW5hdHJhY2UoKGR0KSA9PiB7XG4gICAgICAgIHJldHVybiBkdC5hZGRFdmVudE1vZGlmaWVyKGV2ZW50TW9kaWZpZXIpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFNhZmUgd3JhcHBlciBmb3Ige0BsaW5rIGR5bmF0cmFjZS5ydW5IZWFsdGhDaGVja30gd2hpY2ggcmV2ZXJ0cyB0byBhIG5vb3AgaWYgUlVNIEphdmFTY3JpcHQgaXMgbm90IGF2YWlsYWJsZS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBoZWFsdGggY2hlY2suXG4gKiBAcGFyYW0gY29uZmlnLmxvZ1ZlcmJvc2UgICAgICAgICAgICAgICBJZiB0cnVlLCB2ZXJib3NlIGluZm9ybWF0aW9uIGlzIGluY2x1ZGVkIGluIHRoZSBoZWFsdGggY2hlY2suXG4gKiBAcGFyYW0gY29uZmlnLnJldHVybkRpYWdub3N0aWNEYXRhICAgICBJZiB0cnVlLCB0aGUgZGlhZ25vc3RpYyBkYXRhIGlzIHJldHVybmVkIGFzIGFycmF5IGluc3RlYWQgb2YganVzdCBiZWluZyBsb2dnZWQuXG4gKiBAcGFyYW0gY29uZmlnLnJ1bkRldGFpbGVkT3ZlcnJpZGVDaGVjayBJZiB0cnVlLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9nZ2VkIHRvIHRoZSBjb25zb2xlIGZvciBvdmVycmlkZGVuIG5hdGl2ZSBBUElzLlxuICogQHJldHVybnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBwcm9taXNlIHRoYXQgc2V0dGxlcyBhcyBzb29uIGFzIHRoZSBoZWFsdGggY2hlY2sgaGFzIGJlZW4gcGVyZm9ybWVkLCBvciB1bmRlZmluZWQgaWYgUlVNIEphdmFTY3JpcHQgaXMgbm90IGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkhlYWx0aENoZWNrKGNvbmZpZz86IEhlYWx0aENoZWNrQ29uZmlnKTogUHJvbWlzZTx1bmtub3duW10gfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZ3VhcmREeW5hdHJhY2UoKGR0KSA9PiB7XG4gICAgICAgIHJldHVybiBkdC5ydW5IZWFsdGhDaGVjayhjb25maWcpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFNhZmUgd3JhcHBlciBmb3Ige0BsaW5rIGR5bmF0cmFjZS5pZGVudGlmeVVzZXJ9IHdoaWNoIHJldmVydHMgdG8gYSBub29wIGlmIFJVTSBKYXZhU2NyaXB0IGlzIG5vdCBhdmFpbGFibGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSBuYW1lIG9mIHRoZSB1c2VyLiBGb3IgZXhhbXBsZSwgdXNlIGEgbmFtZSwgdXNlcmlkLCBvciB5b3VyIHVzZXIncyBlbWFpbCBhZGRyZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZnlVc2VyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBndWFyZER5bmF0cmFjZSgoZHQpID0+IHtcbiAgICAgICAgZHQuaWRlbnRpZnlVc2VyKHZhbHVlKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBTYWZlIHdyYXBwZXIgZm9yIHtAbGluayBkeW5hdHJhY2Uuc2VuZFNlc3Npb25Qcm9wZXJ0eUV2ZW50fSB3aGljaCByZXZlcnRzIHRvIGEgbm9vcCBpZiBSVU0gSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlLlxuICpcbiAqIEBwYXJhbSBmaWVsZHMgTXVzdCBiZSBhIHZhbGlkIEpTT04gb2JqZWN0IGFuZCBjYW5ub3QgY29udGFpbiBmdW5jdGlvbnMsIHVuZGVmaW5lZCwgSW5maW5pdHkgYW5kIE5hTiBhc1xuICogICAgICAgICAgICAgICB2YWx1ZXMsIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBudWxsLiBUaGUgYGZpZWxkc2AgbmVlZCB0byBiZSBzZXJpYWxpemFibGVcbiAqICAgICAgICAgICAgICAgdXNpbmcgSlNPTi5zdHJpbmdpZnkuIEFsbCBrZXlzIG11c3QgYmUgcHJlZml4ZWQgd2l0aCBcInNlc3Npb25fcHJvcGVydGllcy4qXCIgYW5kIG11c3QgY29udGFpbiBvbmx5XG4gKiAgICAgICAgICAgICAgIGxvd2VyLWNhc2UgY2hhcmFjdGVycywgbnVtYmVycywgdW5kZXJzY29yZXMgb3IgZG90cy4gRWFjaCBkb3QgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGxvd2VyLWNhc2VcbiAqICAgICAgICAgICAgICAgY2hhcmFjdGVyLiBFYWNoIHVuZGVyc2NvcmUgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGxvd2VyLWNhc2UgY2hhcmFjdGVyIG9yIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRTZXNzaW9uUHJvcGVydHlFdmVudChmaWVsZHM6IEFwaUNyZWF0ZWRTZXNzaW9uUHJvcGVydGllc0V2ZW50KTogdm9pZCB7XG4gICAgZ3VhcmREeW5hdHJhY2UoKGR0KSA9PiB7XG4gICAgICAgIGR0LnNlbmRTZXNzaW9uUHJvcGVydHlFdmVudChmaWVsZHMpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIEVycm9yIG1vZHVsZSBpcyBlbmFibGVkXG4gKlxuICogQHBhcmFtIGVycm9yICBNdXN0IGJlIGEgdmFsaWQgaW5zdGFuY2Ugb2YgdGhlIEVycm9yIGNsYXNzLiBJZiBhbiBpbnZhbGlkIHZhbHVlIGlzIHByb3ZpZGVkLCB0aGUgZXJyb3Igd2lsbCBub3QgYmUgcHJvY2Vzc2VkIG9yIHNlbnQuXG4gKiBAcGFyYW0gZmllbGRzIE9wdGlvbmFsOiBNdXN0IGJlIGEgdmFsaWQgSlNPTiBvYmplY3QgYW5kIGNhbm5vdCBjb250YWluIGZ1bmN0aW9ucywgdW5kZWZpbmVkLCBJbmZpbml0eSBhbmQgTmFOIGFzXG4gKiAgICAgICAgICAgICAgIHZhbHVlcywgb3RoZXJ3aXNlIHRoZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG51bGwuIFRoZSBgZmllbGRzYCBuZWVkIHRvIGJlIHNlcmlhbGl6YWJsZVxuICogICAgICAgICAgICAgICB1c2luZyBKU09OLnN0cmluZ2lmeS4gVGhlIHJlc3VsdGluZyBldmVudCB3aWxsIGNvbnRhaW4gdGhlIHByb3ZpZGVkIGBmaWVsZHNgLCBhbmQgaXNcbiAqICAgICAgICAgICAgICAgbW9kaWZpZWQgd2l0aCBhZGRpdGlvbmFsIHByb3BlcnRpZXMsIHRodXMgYWxzbyBlbXB0eSBvYmplY3RzIGFyZSB2YWxpZC4gT25seSBwcm9wZXJ0aWVzXG4gKiAgICAgICAgICAgICAgIHByZWZpeGVkIHdpdGggYGV2ZW50X3Byb3BlcnRpZXMuYCwgdGhlIGBkdXJhdGlvbmAgcHJvcGVydHkgYW5kIHRoZSBgc3RhcnRfdGltZWAgcHJvcGVydHkgYXJlXG4gKiAgICAgICAgICAgICAgIGFsbG93ZWQuIFN0cmluZyBwcm9wZXJ0aWVzIGFyZSBsaW1pdGVkIHRvIDUwMDAgY2hhcmFjdGVycywgZXhjZWVkaW5nIGNoYXJhY3RlcnMgYXJlIGN1dCBvZmYuXG4gKiAgICAgICAgICAgICAgIEFsbCBldmVudCBwcm9wZXJ0eSBrZXlzIG11c3QgY29udGFpbiBvbmx5IGFscGhhYmV0aWMgY2hhcmFjdGVycywgbnVtYmVycyxcbiAqICAgICAgICAgICAgICAgdW5kZXJzY29yZXMgb3IgZG90cy4gRWFjaCBkb3QgbXVzdCBiZSBmb2xsb3dlZCBieSBhbiBhbHBoYWJldGljIGNoYXJhY3Rlci4gRWFjaCB1bmRlcnNjb3JlXG4gKiAgICAgICAgICAgICAgIG11c3QgYmUgZm9sbG93ZWQgYnkgYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIgb3IgbnVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEV4Y2VwdGlvbkV2ZW50KGVycm9yOiBFcnJvciwgZmllbGRzPzogQXBpQ3JlYXRlZEV2ZW50UHJvcGVydGllc0V2ZW50KTogdm9pZCB7XG4gICAgZ3VhcmREeW5hdHJhY2UoKGR0KSA9PiB7XG4gICAgICAgIGlmICghZHQuc2VuZEV4Y2VwdGlvbkV2ZW50KSB7XG4gICAgICAgICAgICBsb2coXCJkeW5hdHJhY2Uuc2VuZEV4Y2VwdGlvbkV2ZW50IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBFcnJvciBtb2R1bGUgbWlnaHQgbm90IGJlIGVuYWJsZWRcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZHQuc2VuZEV4Y2VwdGlvbkV2ZW50KGVycm9yLCBmaWVsZHMpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFNhZmUgd3JhcHBlciBmb3IgdmFyaW91cyBSVU0gSmF2YVNjcmlwdCBBUEkgZnVuY3Rpb25zIHdoaWNoIHJldmVydHMgdG8gYSBub29wIGlmIFJVTSBKYXZhU2NyaXB0IGlzIG5vdCBhdmFpbGFibGUuXG4gKlxuICogQHBhcmFtIGZuIFRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBpZiBSVU0gSmF2YVNjcmlwdCBpcyBhdmFpbGFibGUuXG4gKiBAcmV0dXJucyAgVGhlIHJlc3VsdCBvZiB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gY2FsbCBpZiBSVU0gSmF2YVNjcmlwdCBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIGd1YXJkRHluYXRyYWNlPFQgZXh0ZW5kcyAoZHQ6IE5vbk51bGxhYmxlPHR5cGVvZiBnbG9iYWxUaGlzLmR5bmF0cmFjZT4pID0+IGFueT4oZm46IFQpOiBSZXR1cm5UeXBlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBnbG9iYWxEdCA9IGdldEdsb2JhbChcImR5bmF0cmFjZVwiKTtcbiAgICBpZiAoIWlzVmFsaWRBZ2VudChnbG9iYWxEdCkpIHtcbiAgICAgICAgbG9nKFwiZHluYXRyYWNlIGlzIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiBmbihnbG9iYWxEdCk7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export declare function log(...args: unknown[]): void;
2
+ export declare function warn(...args: unknown[]): void;
@@ -0,0 +1,8 @@
1
+ import { LOG_PREFIX } from "./constants.js";
2
+ export function log(...args) {
3
+ console.log(LOG_PREFIX, ...args);
4
+ }
5
+ export function warn(...args) {
6
+ console.warn(LOG_PREFIX, ...args);
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9hcGkvbG9nZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQWU7SUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRUQsTUFBTSxVQUFVLElBQUksQ0FBQyxHQUFHLElBQWU7SUFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTE9HX1BSRUZJWCB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9nKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKExPR19QUkVGSVgsIC4uLmFyZ3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2FybiguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBjb25zb2xlLndhcm4oTE9HX1BSRUZJWCwgLi4uYXJncyk7XG59XG4iXX0=
@@ -0,0 +1,85 @@
1
+ import type { ApiCreatedEventPropertiesEvent, ApiCreatedSessionPropertiesEvent, EventContext, JSONEvent } from "../../types/index.js";
2
+ import type { HealthCheckConfig, Unsubscriber } from "../../types/api/dynatrace-api-types.js";
3
+ export { DynatraceError } from "../dynatrace-error.js";
4
+ /**
5
+ * Async wrapper for {@link dynatrace.sendEvent}.
6
+ *
7
+ * @param fields Must be a valid JSON object and cannot contain functions, undefined, Infinity and NaN as
8
+ * values, otherwise they will be replaced with null. The `fields` need to be serializable
9
+ * using JSON.stringify. The resulting event will be populated with `fields` parameter, and
10
+ * modified with additional properties, thus also empty objects are valid. Only properties
11
+ * prefixed with `event_properties.`, the `duration` property and the `start_time` property are
12
+ * allowed.
13
+ * @param eventContext An optional context that can be used to manipulate the
14
+ * result event within the modification callback.
15
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
16
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the timeout, or the namespace is
17
+ * overridden with an incompatible object
18
+ */
19
+ export declare function sendEvent(fields: ApiCreatedEventPropertiesEvent, eventContext?: unknown, timeout?: number): Promise<void>;
20
+ /**
21
+ * Async wrapper for {@link dynatrace.addEventModifier}.
22
+ *
23
+ * @param eventModifier The modifier function to modify a given (readonly) JSONEvent. It receives an optional context
24
+ * depending on the type of event, if available. The returned event must be a new object, otherwise
25
+ * modification will be ignored.
26
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
27
+ * @returns A promise that resolves to the unsubscriber function to turn off event modification.
28
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the timeout, or the
29
+ * namespace is overridden with an incompatible object
30
+ */
31
+ export declare function addEventModifier(eventModifier: (jsonEvent: Readonly<JSONEvent>, eventContext?: EventContext) => JSONEvent | null, timeout?: number): Promise<Unsubscriber>;
32
+ /**
33
+ * Async wrapper for {@link dynatrace.runHealthCheck}.
34
+ *
35
+ * @param config The optional configuration object for the health check.
36
+ * @param config.logVerbose If true, verbose information is included in the health check.
37
+ * @param config.returnDiagnosticData If true, the diagnostic data is returned as array instead of just being logged.
38
+ * @param config.runDetailedOverrideCheck If true, additional information will be logged to the console for overridden native APIs.
39
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
40
+ * @returns A promise that settles as soon as the health check has been performed.
41
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the
42
+ * timeout, or the namespace is overridden with an incompatible object
43
+ */
44
+ export declare function runHealthCheck(config?: HealthCheckConfig, timeout?: number): Promise<unknown[] | undefined>;
45
+ /**
46
+ * Async wrapper for {@link dynatrace.identifyUser}.
47
+ *
48
+ * @param value The name of the user. For example, use a name, userid, or your user's email address.
49
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
50
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the timeout, or the namespace is
51
+ * overridden with an incompatible object
52
+ */
53
+ export declare function identifyUser(value: string, timeout?: number): Promise<void>;
54
+ /**
55
+ * Async wrapper for {@link dynatrace.sendSessionPropertyEvent}.
56
+ *
57
+ * @param fields Must be a valid JSON object and cannot contain functions, undefined, Infinity and NaN as
58
+ * values, otherwise they will be replaced with null. The `fields` need to be serializable
59
+ * using JSON.stringify. All keys must be prefixed with "session_properties.*" and must contain only
60
+ * lower-case characters, numbers, underscores or dots. Each dot must be followed by a lower-case
61
+ * character. Each underscore must be followed by a lower-case character or number.
62
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
63
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the timeout, or the namespace is
64
+ * overridden with an incompatible object
65
+ */
66
+ export declare function sendSessionPropertyEvent(fields: ApiCreatedSessionPropertiesEvent, timeout?: number): Promise<void>;
67
+ /**
68
+ * Async wrapper for {@link dynatrace.sendExceptionEvent}.
69
+ * This function is only available if the Error module is enabled
70
+ *
71
+ * @param error Must be a valid instance of the Error class. If an invalid value is provided, the error will not be processed or sent.
72
+ * @param fields Optional: Must be a valid JSON object and cannot contain functions, undefined, Infinity and NaN as
73
+ * values, otherwise they will be replaced with null. The `fields` need to be serializable
74
+ * using JSON.stringify. The resulting event will contain the provided `fields`, and is
75
+ * modified with additional properties, thus also empty objects are valid. Only properties
76
+ * prefixed with `event_properties.`, the `duration` property and the `start_time` property are
77
+ * allowed. String properties are limited to 5000 characters, exceeding characters are cut off.
78
+ * All event property keys must contain only alphabetic characters, numbers,
79
+ * underscores or dots. Each dot must be followed by an alphabetic character. Each underscore
80
+ * must be followed by an alphabetic character or number.
81
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
82
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the timeout, or the namespace is
83
+ * overridden with an incompatible object
84
+ */
85
+ export declare function sendExceptionEvent(error: Error, fields?: ApiCreatedEventPropertiesEvent, timeout?: number): Promise<void>;
@@ -0,0 +1,104 @@
1
+ import { waitForAgent } from "./wait-for-agent.js";
2
+ import { waitForSendExceptionEvent } from "./wait-for-send-exception-event.js";
3
+ export { DynatraceError } from "../dynatrace-error.js";
4
+ /**
5
+ * Async wrapper for {@link dynatrace.sendEvent}.
6
+ *
7
+ * @param fields Must be a valid JSON object and cannot contain functions, undefined, Infinity and NaN as
8
+ * values, otherwise they will be replaced with null. The `fields` need to be serializable
9
+ * using JSON.stringify. The resulting event will be populated with `fields` parameter, and
10
+ * modified with additional properties, thus also empty objects are valid. Only properties
11
+ * prefixed with `event_properties.`, the `duration` property and the `start_time` property are
12
+ * allowed.
13
+ * @param eventContext An optional context that can be used to manipulate the
14
+ * result event within the modification callback.
15
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
16
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the timeout, or the namespace is
17
+ * overridden with an incompatible object
18
+ */
19
+ export async function sendEvent(fields, eventContext, timeout = 10_000) {
20
+ const dynatrace = await waitForAgent(timeout);
21
+ dynatrace.sendEvent(fields, eventContext);
22
+ }
23
+ /**
24
+ * Async wrapper for {@link dynatrace.addEventModifier}.
25
+ *
26
+ * @param eventModifier The modifier function to modify a given (readonly) JSONEvent. It receives an optional context
27
+ * depending on the type of event, if available. The returned event must be a new object, otherwise
28
+ * modification will be ignored.
29
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
30
+ * @returns A promise that resolves to the unsubscriber function to turn off event modification.
31
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the timeout, or the
32
+ * namespace is overridden with an incompatible object
33
+ */
34
+ export async function addEventModifier(eventModifier, timeout = 10_000) {
35
+ const dynatrace = await waitForAgent(timeout);
36
+ return dynatrace.addEventModifier(eventModifier);
37
+ }
38
+ /**
39
+ * Async wrapper for {@link dynatrace.runHealthCheck}.
40
+ *
41
+ * @param config The optional configuration object for the health check.
42
+ * @param config.logVerbose If true, verbose information is included in the health check.
43
+ * @param config.returnDiagnosticData If true, the diagnostic data is returned as array instead of just being logged.
44
+ * @param config.runDetailedOverrideCheck If true, additional information will be logged to the console for overridden native APIs.
45
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
46
+ * @returns A promise that settles as soon as the health check has been performed.
47
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the
48
+ * timeout, or the namespace is overridden with an incompatible object
49
+ */
50
+ export async function runHealthCheck(config, timeout = 10_000) {
51
+ const dynatrace = await waitForAgent(timeout);
52
+ return dynatrace.runHealthCheck(config);
53
+ }
54
+ /**
55
+ * Async wrapper for {@link dynatrace.identifyUser}.
56
+ *
57
+ * @param value The name of the user. For example, use a name, userid, or your user's email address.
58
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
59
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the timeout, or the namespace is
60
+ * overridden with an incompatible object
61
+ */
62
+ export async function identifyUser(value, timeout = 10_000) {
63
+ const dynatrace = await waitForAgent(timeout);
64
+ dynatrace.identifyUser(value);
65
+ }
66
+ /**
67
+ * Async wrapper for {@link dynatrace.sendSessionPropertyEvent}.
68
+ *
69
+ * @param fields Must be a valid JSON object and cannot contain functions, undefined, Infinity and NaN as
70
+ * values, otherwise they will be replaced with null. The `fields` need to be serializable
71
+ * using JSON.stringify. All keys must be prefixed with "session_properties.*" and must contain only
72
+ * lower-case characters, numbers, underscores or dots. Each dot must be followed by a lower-case
73
+ * character. Each underscore must be followed by a lower-case character or number.
74
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
75
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the timeout, or the namespace is
76
+ * overridden with an incompatible object
77
+ */
78
+ export async function sendSessionPropertyEvent(fields, timeout = 10_000) {
79
+ const dynatrace = await waitForAgent(timeout);
80
+ dynatrace.sendSessionPropertyEvent(fields);
81
+ }
82
+ /**
83
+ * Async wrapper for {@link dynatrace.sendExceptionEvent}.
84
+ * This function is only available if the Error module is enabled
85
+ *
86
+ * @param error Must be a valid instance of the Error class. If an invalid value is provided, the error will not be processed or sent.
87
+ * @param fields Optional: Must be a valid JSON object and cannot contain functions, undefined, Infinity and NaN as
88
+ * values, otherwise they will be replaced with null. The `fields` need to be serializable
89
+ * using JSON.stringify. The resulting event will contain the provided `fields`, and is
90
+ * modified with additional properties, thus also empty objects are valid. Only properties
91
+ * prefixed with `event_properties.`, the `duration` property and the `start_time` property are
92
+ * allowed. String properties are limited to 5000 characters, exceeding characters are cut off.
93
+ * All event property keys must contain only alphabetic characters, numbers,
94
+ * underscores or dots. Each dot must be followed by an alphabetic character. Each underscore
95
+ * must be followed by an alphabetic character or number.
96
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript to be available (default: 10000)
97
+ * @throws A {@link DynatraceError} if the RUM JavaScript is not available within the timeout, or the namespace is
98
+ * overridden with an incompatible object
99
+ */
100
+ export async function sendExceptionEvent(error, fields, timeout = 10_000) {
101
+ const sendExceptionEventGuarded = await waitForSendExceptionEvent(timeout);
102
+ sendExceptionEventGuarded(error, fields);
103
+ }
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvYXBpL3Byb21pc2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUUvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FBQyxNQUFzQyxFQUFFLFlBQXNCLEVBQUUsVUFBa0IsTUFBTTtJQUNwSCxNQUFNLFNBQVMsR0FBRyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsYUFBZ0csRUFBRSxVQUFrQixNQUFNO0lBQzdKLE1BQU0sU0FBUyxHQUFHLE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLE9BQU8sU0FBUyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUFDLE1BQTBCLEVBQUUsVUFBa0IsTUFBTTtJQUNyRixNQUFNLFNBQVMsR0FBRyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxPQUFPLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FBQyxLQUFhLEVBQUUsVUFBa0IsTUFBTTtJQUN0RSxNQUFNLFNBQVMsR0FBRyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsd0JBQXdCLENBQUMsTUFBd0MsRUFBRSxVQUFrQixNQUFNO0lBQzdHLE1BQU0sU0FBUyxHQUFHLE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxLQUFZLEVBQUUsTUFBdUMsRUFBRSxVQUFrQixNQUFNO0lBQ3BILE1BQU0seUJBQXlCLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzRSx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgICBBcGlDcmVhdGVkRXZlbnRQcm9wZXJ0aWVzRXZlbnQsXG4gICAgQXBpQ3JlYXRlZFNlc3Npb25Qcm9wZXJ0aWVzRXZlbnQsXG4gICAgRXZlbnRDb250ZXh0LFxuICAgIEpTT05FdmVudFxufSBmcm9tIFwiLi4vLi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgICBIZWFsdGhDaGVja0NvbmZpZyxcbiAgICBVbnN1YnNjcmliZXJcbn0gZnJvbSBcIi4uLy4uL3R5cGVzL2FwaS9keW5hdHJhY2UtYXBpLXR5cGVzLmpzXCI7XG5pbXBvcnQgeyB3YWl0Rm9yQWdlbnQgfSBmcm9tIFwiLi93YWl0LWZvci1hZ2VudC5qc1wiO1xuaW1wb3J0IHsgd2FpdEZvclNlbmRFeGNlcHRpb25FdmVudCB9IGZyb20gXCIuL3dhaXQtZm9yLXNlbmQtZXhjZXB0aW9uLWV2ZW50LmpzXCI7XG5cbmV4cG9ydCB7IER5bmF0cmFjZUVycm9yIH0gZnJvbSBcIi4uL2R5bmF0cmFjZS1lcnJvci5qc1wiO1xuXG4vKipcbiAqIEFzeW5jIHdyYXBwZXIgZm9yIHtAbGluayBkeW5hdHJhY2Uuc2VuZEV2ZW50fS5cbiAqXG4gKiBAcGFyYW0gZmllbGRzICAgICAgIE11c3QgYmUgYSB2YWxpZCBKU09OIG9iamVjdCBhbmQgY2Fubm90IGNvbnRhaW4gZnVuY3Rpb25zLCB1bmRlZmluZWQsIEluZmluaXR5IGFuZCBOYU4gYXNcbiAqICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLCBvdGhlcndpc2UgdGhleSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggbnVsbC4gVGhlIGBmaWVsZHNgIG5lZWQgdG8gYmUgc2VyaWFsaXphYmxlXG4gKiAgICAgICAgICAgICAgICAgICAgIHVzaW5nIEpTT04uc3RyaW5naWZ5LiBUaGUgcmVzdWx0aW5nIGV2ZW50IHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggYGZpZWxkc2AgcGFyYW1ldGVyLCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgd2l0aCBhZGRpdGlvbmFsIHByb3BlcnRpZXMsIHRodXMgYWxzbyBlbXB0eSBvYmplY3RzIGFyZSB2YWxpZC4gT25seSBwcm9wZXJ0aWVzXG4gKiAgICAgICAgICAgICAgICAgICAgIHByZWZpeGVkIHdpdGggYGV2ZW50X3Byb3BlcnRpZXMuYCwgdGhlIGBkdXJhdGlvbmAgcHJvcGVydHkgYW5kIHRoZSBgc3RhcnRfdGltZWAgcHJvcGVydHkgYXJlXG4gKiAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQuXG4gKiBAcGFyYW0gZXZlbnRDb250ZXh0IEFuIG9wdGlvbmFsIGNvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZVxuICogICAgICAgICAgICAgICAgICAgICByZXN1bHQgZXZlbnQgd2l0aGluIHRoZSBtb2RpZmljYXRpb24gY2FsbGJhY2suXG4gKiBAcGFyYW0gdGltZW91dCAgICAgIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSBSVU0gSmF2YVNjcmlwdCB0byBiZSBhdmFpbGFibGUgKGRlZmF1bHQ6IDEwMDAwKVxuICogQHRocm93cyAgICAgICAgICAgICBBIHtAbGluayBEeW5hdHJhY2VFcnJvcn0gaWYgdGhlIFJVTSBKYXZhU2NyaXB0IGlzIG5vdCBhdmFpbGFibGUgd2l0aGluIHRoZSB0aW1lb3V0LCBvciB0aGUgbmFtZXNwYWNlIGlzXG4gKiAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRkZW4gd2l0aCBhbiBpbmNvbXBhdGlibGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kRXZlbnQoZmllbGRzOiBBcGlDcmVhdGVkRXZlbnRQcm9wZXJ0aWVzRXZlbnQsIGV2ZW50Q29udGV4dD86IHVua25vd24sIHRpbWVvdXQ6IG51bWJlciA9IDEwXzAwMCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGR5bmF0cmFjZSA9IGF3YWl0IHdhaXRGb3JBZ2VudCh0aW1lb3V0KTtcbiAgICBkeW5hdHJhY2Uuc2VuZEV2ZW50KGZpZWxkcywgZXZlbnRDb250ZXh0KTtcbn1cblxuLyoqXG4gKiBBc3luYyB3cmFwcGVyIGZvciB7QGxpbmsgZHluYXRyYWNlLmFkZEV2ZW50TW9kaWZpZXJ9LlxuICpcbiAqIEBwYXJhbSBldmVudE1vZGlmaWVyIFRoZSBtb2RpZmllciBmdW5jdGlvbiB0byBtb2RpZnkgYSBnaXZlbiAocmVhZG9ubHkpIEpTT05FdmVudC4gSXQgcmVjZWl2ZXMgYW4gb3B0aW9uYWwgY29udGV4dFxuICogICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGV2ZW50LCBpZiBhdmFpbGFibGUuIFRoZSByZXR1cm5lZCBldmVudCBtdXN0IGJlIGEgbmV3IG9iamVjdCwgb3RoZXJ3aXNlXG4gKiAgICAgICAgICAgICAgICAgICAgICBtb2RpZmljYXRpb24gd2lsbCBiZSBpZ25vcmVkLlxuICogQHBhcmFtIHRpbWVvdXQgICAgICAgVGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIFJVTSBKYXZhU2NyaXB0IHRvIGJlIGF2YWlsYWJsZSAoZGVmYXVsdDogMTAwMDApXG4gKiBAcmV0dXJucyAgICAgICAgICAgICBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdW5zdWJzY3JpYmVyIGZ1bmN0aW9uIHRvIHR1cm4gb2ZmIGV2ZW50IG1vZGlmaWNhdGlvbi5cbiAqIEB0aHJvd3MgICAgICAgICAgICAgIEEge0BsaW5rIER5bmF0cmFjZUVycm9yfSBpZiB0aGUgUlVNIEphdmFTY3JpcHQgaXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGhlIHRpbWVvdXQsIG9yIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlIGlzIG92ZXJyaWRkZW4gd2l0aCBhbiBpbmNvbXBhdGlibGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFdmVudE1vZGlmaWVyKGV2ZW50TW9kaWZpZXI6IChqc29uRXZlbnQ6IFJlYWRvbmx5PEpTT05FdmVudD4sIGV2ZW50Q29udGV4dD86IEV2ZW50Q29udGV4dCkgPT4gSlNPTkV2ZW50IHwgbnVsbCwgdGltZW91dDogbnVtYmVyID0gMTBfMDAwKTogUHJvbWlzZTxVbnN1YnNjcmliZXI+IHtcbiAgICBjb25zdCBkeW5hdHJhY2UgPSBhd2FpdCB3YWl0Rm9yQWdlbnQodGltZW91dCk7XG4gICAgcmV0dXJuIGR5bmF0cmFjZS5hZGRFdmVudE1vZGlmaWVyKGV2ZW50TW9kaWZpZXIpO1xufVxuXG4vKipcbiAqIEFzeW5jIHdyYXBwZXIgZm9yIHtAbGluayBkeW5hdHJhY2UucnVuSGVhbHRoQ2hlY2t9LlxuICpcbiAqIEBwYXJhbSBjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGhlYWx0aCBjaGVjay5cbiAqIEBwYXJhbSBjb25maWcubG9nVmVyYm9zZSAgICAgICAgICAgICAgIElmIHRydWUsIHZlcmJvc2UgaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIGhlYWx0aCBjaGVjay5cbiAqIEBwYXJhbSBjb25maWcucmV0dXJuRGlhZ25vc3RpY0RhdGEgICAgIElmIHRydWUsIHRoZSBkaWFnbm9zdGljIGRhdGEgaXMgcmV0dXJuZWQgYXMgYXJyYXkgaW5zdGVhZCBvZiBqdXN0IGJlaW5nIGxvZ2dlZC5cbiAqIEBwYXJhbSBjb25maWcucnVuRGV0YWlsZWRPdmVycmlkZUNoZWNrIElmIHRydWUsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gd2lsbCBiZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGUgZm9yIG92ZXJyaWRkZW4gbmF0aXZlIEFQSXMuXG4gKiBAcGFyYW0gdGltZW91dCAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgUlVNIEphdmFTY3JpcHQgdG8gYmUgYXZhaWxhYmxlIChkZWZhdWx0OiAxMDAwMClcbiAqIEByZXR1cm5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgcHJvbWlzZSB0aGF0IHNldHRsZXMgYXMgc29vbiBhcyB0aGUgaGVhbHRoIGNoZWNrIGhhcyBiZWVuIHBlcmZvcm1lZC5cbiAqIEB0aHJvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEge0BsaW5rIER5bmF0cmFjZUVycm9yfSBpZiB0aGUgUlVNIEphdmFTY3JpcHQgaXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LCBvciB0aGUgbmFtZXNwYWNlIGlzIG92ZXJyaWRkZW4gd2l0aCBhbiBpbmNvbXBhdGlibGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5IZWFsdGhDaGVjayhjb25maWc/OiBIZWFsdGhDaGVja0NvbmZpZywgdGltZW91dDogbnVtYmVyID0gMTBfMDAwKTogUHJvbWlzZTx1bmtub3duW10gfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBkeW5hdHJhY2UgPSBhd2FpdCB3YWl0Rm9yQWdlbnQodGltZW91dCk7XG4gICAgcmV0dXJuIGR5bmF0cmFjZS5ydW5IZWFsdGhDaGVjayhjb25maWcpO1xufVxuXG4vKipcbiAqIEFzeW5jIHdyYXBwZXIgZm9yIHtAbGluayBkeW5hdHJhY2UuaWRlbnRpZnlVc2VyfS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgICBUaGUgbmFtZSBvZiB0aGUgdXNlci4gRm9yIGV4YW1wbGUsIHVzZSBhIG5hbWUsIHVzZXJpZCwgb3IgeW91ciB1c2VyJ3MgZW1haWwgYWRkcmVzcy5cbiAqIEBwYXJhbSB0aW1lb3V0IFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSBSVU0gSmF2YVNjcmlwdCB0byBiZSBhdmFpbGFibGUgKGRlZmF1bHQ6IDEwMDAwKVxuICogQHRocm93cyAgICAgICAgQSB7QGxpbmsgRHluYXRyYWNlRXJyb3J9IGlmIHRoZSBSVU0gSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlIHdpdGhpbiB0aGUgdGltZW91dCwgb3IgdGhlIG5hbWVzcGFjZSBpc1xuICogICAgICAgICAgICAgICAgb3ZlcnJpZGRlbiB3aXRoIGFuIGluY29tcGF0aWJsZSBvYmplY3RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlkZW50aWZ5VXNlcih2YWx1ZTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIgPSAxMF8wMDApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkeW5hdHJhY2UgPSBhd2FpdCB3YWl0Rm9yQWdlbnQodGltZW91dCk7XG4gICAgZHluYXRyYWNlLmlkZW50aWZ5VXNlcih2YWx1ZSk7XG59XG5cbi8qKlxuICogQXN5bmMgd3JhcHBlciBmb3Ige0BsaW5rIGR5bmF0cmFjZS5zZW5kU2Vzc2lvblByb3BlcnR5RXZlbnR9LlxuICpcbiAqIEBwYXJhbSBmaWVsZHMgIE11c3QgYmUgYSB2YWxpZCBKU09OIG9iamVjdCBhbmQgY2Fubm90IGNvbnRhaW4gZnVuY3Rpb25zLCB1bmRlZmluZWQsIEluZmluaXR5IGFuZCBOYU4gYXNcbiAqICAgICAgICAgICAgICAgIHZhbHVlcywgb3RoZXJ3aXNlIHRoZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG51bGwuIFRoZSBgZmllbGRzYCBuZWVkIHRvIGJlIHNlcmlhbGl6YWJsZVxuICogICAgICAgICAgICAgICAgdXNpbmcgSlNPTi5zdHJpbmdpZnkuIEFsbCBrZXlzIG11c3QgYmUgcHJlZml4ZWQgd2l0aCBcInNlc3Npb25fcHJvcGVydGllcy4qXCIgYW5kIG11c3QgY29udGFpbiBvbmx5XG4gKiAgICAgICAgICAgICAgICBsb3dlci1jYXNlIGNoYXJhY3RlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIG9yIGRvdHMuIEVhY2ggZG90IG11c3QgYmUgZm9sbG93ZWQgYnkgYSBsb3dlci1jYXNlXG4gKiAgICAgICAgICAgICAgICBjaGFyYWN0ZXIuIEVhY2ggdW5kZXJzY29yZSBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgbG93ZXItY2FzZSBjaGFyYWN0ZXIgb3IgbnVtYmVyLlxuICogQHBhcmFtIHRpbWVvdXQgVGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIFJVTSBKYXZhU2NyaXB0IHRvIGJlIGF2YWlsYWJsZSAoZGVmYXVsdDogMTAwMDApXG4gKiBAdGhyb3dzICAgICAgICBBIHtAbGluayBEeW5hdHJhY2VFcnJvcn0gaWYgdGhlIFJVTSBKYXZhU2NyaXB0IGlzIG5vdCBhdmFpbGFibGUgd2l0aGluIHRoZSB0aW1lb3V0LCBvciB0aGUgbmFtZXNwYWNlIGlzXG4gKiAgICAgICAgICAgICAgICBvdmVycmlkZGVuIHdpdGggYW4gaW5jb21wYXRpYmxlIG9iamVjdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFNlc3Npb25Qcm9wZXJ0eUV2ZW50KGZpZWxkczogQXBpQ3JlYXRlZFNlc3Npb25Qcm9wZXJ0aWVzRXZlbnQsIHRpbWVvdXQ6IG51bWJlciA9IDEwXzAwMCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGR5bmF0cmFjZSA9IGF3YWl0IHdhaXRGb3JBZ2VudCh0aW1lb3V0KTtcbiAgICBkeW5hdHJhY2Uuc2VuZFNlc3Npb25Qcm9wZXJ0eUV2ZW50KGZpZWxkcyk7XG59XG5cbi8qKlxuICogQXN5bmMgd3JhcHBlciBmb3Ige0BsaW5rIGR5bmF0cmFjZS5zZW5kRXhjZXB0aW9uRXZlbnR9LlxuICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgRXJyb3IgbW9kdWxlIGlzIGVuYWJsZWRcbiAqXG4gKiBAcGFyYW0gZXJyb3IgICBNdXN0IGJlIGEgdmFsaWQgaW5zdGFuY2Ugb2YgdGhlIEVycm9yIGNsYXNzLiBJZiBhbiBpbnZhbGlkIHZhbHVlIGlzIHByb3ZpZGVkLCB0aGUgZXJyb3Igd2lsbCBub3QgYmUgcHJvY2Vzc2VkIG9yIHNlbnQuXG4gKiBAcGFyYW0gZmllbGRzICBPcHRpb25hbDogTXVzdCBiZSBhIHZhbGlkIEpTT04gb2JqZWN0IGFuZCBjYW5ub3QgY29udGFpbiBmdW5jdGlvbnMsIHVuZGVmaW5lZCwgSW5maW5pdHkgYW5kIE5hTiBhc1xuICogICAgICAgICAgICAgICAgdmFsdWVzLCBvdGhlcndpc2UgdGhleSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggbnVsbC4gVGhlIGBmaWVsZHNgIG5lZWQgdG8gYmUgc2VyaWFsaXphYmxlXG4gKiAgICAgICAgICAgICAgICB1c2luZyBKU09OLnN0cmluZ2lmeS4gVGhlIHJlc3VsdGluZyBldmVudCB3aWxsIGNvbnRhaW4gdGhlIHByb3ZpZGVkIGBmaWVsZHNgLCBhbmQgaXNcbiAqICAgICAgICAgICAgICAgIG1vZGlmaWVkIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzLCB0aHVzIGFsc28gZW1wdHkgb2JqZWN0cyBhcmUgdmFsaWQuIE9ubHkgcHJvcGVydGllc1xuICogICAgICAgICAgICAgICAgcHJlZml4ZWQgd2l0aCBgZXZlbnRfcHJvcGVydGllcy5gLCB0aGUgYGR1cmF0aW9uYCBwcm9wZXJ0eSBhbmQgdGhlIGBzdGFydF90aW1lYCBwcm9wZXJ0eSBhcmVcbiAqICAgICAgICAgICAgICAgIGFsbG93ZWQuIFN0cmluZyBwcm9wZXJ0aWVzIGFyZSBsaW1pdGVkIHRvIDUwMDAgY2hhcmFjdGVycywgZXhjZWVkaW5nIGNoYXJhY3RlcnMgYXJlIGN1dCBvZmYuXG4gKiAgICAgICAgICAgICAgICBBbGwgZXZlbnQgcHJvcGVydHkga2V5cyBtdXN0IGNvbnRhaW4gb25seSBhbHBoYWJldGljIGNoYXJhY3RlcnMsIG51bWJlcnMsXG4gKiAgICAgICAgICAgICAgICB1bmRlcnNjb3JlcyBvciBkb3RzLiBFYWNoIGRvdCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyLiBFYWNoIHVuZGVyc2NvcmVcbiAqICAgICAgICAgICAgICAgIG11c3QgYmUgZm9sbG93ZWQgYnkgYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIgb3IgbnVtYmVyLlxuICogQHBhcmFtIHRpbWVvdXQgVGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIFJVTSBKYXZhU2NyaXB0IHRvIGJlIGF2YWlsYWJsZSAoZGVmYXVsdDogMTAwMDApXG4gKiBAdGhyb3dzICAgICAgICBBIHtAbGluayBEeW5hdHJhY2VFcnJvcn0gaWYgdGhlIFJVTSBKYXZhU2NyaXB0IGlzIG5vdCBhdmFpbGFibGUgd2l0aGluIHRoZSB0aW1lb3V0LCBvciB0aGUgbmFtZXNwYWNlIGlzXG4gKiAgICAgICAgICAgICAgICBvdmVycmlkZGVuIHdpdGggYW4gaW5jb21wYXRpYmxlIG9iamVjdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZEV4Y2VwdGlvbkV2ZW50KGVycm9yOiBFcnJvciwgZmllbGRzPzogQXBpQ3JlYXRlZEV2ZW50UHJvcGVydGllc0V2ZW50LCB0aW1lb3V0OiBudW1iZXIgPSAxMF8wMDApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzZW5kRXhjZXB0aW9uRXZlbnRHdWFyZGVkID0gYXdhaXQgd2FpdEZvclNlbmRFeGNlcHRpb25FdmVudCh0aW1lb3V0KTtcbiAgICBzZW5kRXhjZXB0aW9uRXZlbnRHdWFyZGVkKGVycm9yLCBmaWVsZHMpO1xufVxuIl19
@@ -0,0 +1,35 @@
1
+ import type { UserActionStartOptions, UserActionTracker } from "../../types/index.js";
2
+ /**
3
+ * Async wrapper for {@link dynatrace.userActions.create}.
4
+ *
5
+ * @param options An optional options object to configure the user action.
6
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript and user actions module to be available (default: 10000)
7
+ * @returns A promise that resolves to a `UserActionTracker` object.
8
+ * @throws A {@link DynatraceError} if the RUM JavaScript or user actions module is not available within the timeout
9
+ */
10
+ export declare function create(options?: UserActionStartOptions, timeout?: number): Promise<UserActionTracker>;
11
+ /**
12
+ * Async wrapper for {@link dynatrace.userActions.subscribe}.
13
+ *
14
+ * @param subscriber A callback function that is called whenever Dynatrace creates a new user action.
15
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript and user actions module to be available (default: 10000)
16
+ * @returns A promise that resolves to an unsubscriber function.
17
+ * @throws A {@link DynatraceError} if the RUM JavaScript or user actions module is not available within the timeout
18
+ */
19
+ export declare function subscribe(subscriber: (userAction: UserActionTracker) => void, timeout?: number): Promise<() => void>;
20
+ /**
21
+ * Async wrapper for {@link dynatrace.userActions.setAutomaticDetection}.
22
+ *
23
+ * @param automaticDetection If false, disables automatic user action detection, otherwise enables it.
24
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript and user actions module to be available (default: 10000)
25
+ * @throws A {@link DynatraceError} if the RUM JavaScript or user actions module is not available within the timeout
26
+ */
27
+ export declare function setAutomaticDetection(automaticDetection: boolean, timeout?: number): Promise<void>;
28
+ /**
29
+ * Async wrapper for {@link dynatrace.userActions.current}.
30
+ *
31
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript and user actions module to be available (default: 10000)
32
+ * @returns A promise that resolves to the current user action, or `undefined` if no user action is in progress.
33
+ * @throws A {@link DynatraceError} if the RUM JavaScript or user actions module is not available within the timeout
34
+ */
35
+ export declare function getCurrent(timeout?: number): Promise<UserActionTracker | undefined>;
@@ -0,0 +1,48 @@
1
+ import { waitForUserActions } from "./wait-for-user-actions.js";
2
+ /**
3
+ * Async wrapper for {@link dynatrace.userActions.create}.
4
+ *
5
+ * @param options An optional options object to configure the user action.
6
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript and user actions module to be available (default: 10000)
7
+ * @returns A promise that resolves to a `UserActionTracker` object.
8
+ * @throws A {@link DynatraceError} if the RUM JavaScript or user actions module is not available within the timeout
9
+ */
10
+ export async function create(options, timeout = 10_000) {
11
+ const userActions = await waitForUserActions(timeout);
12
+ return userActions.create(options);
13
+ }
14
+ /**
15
+ * Async wrapper for {@link dynatrace.userActions.subscribe}.
16
+ *
17
+ * @param subscriber A callback function that is called whenever Dynatrace creates a new user action.
18
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript and user actions module to be available (default: 10000)
19
+ * @returns A promise that resolves to an unsubscriber function.
20
+ * @throws A {@link DynatraceError} if the RUM JavaScript or user actions module is not available within the timeout
21
+ */
22
+ export async function subscribe(subscriber, timeout = 10_000) {
23
+ const userActions = await waitForUserActions(timeout);
24
+ return userActions.subscribe(subscriber);
25
+ }
26
+ /**
27
+ * Async wrapper for {@link dynatrace.userActions.setAutomaticDetection}.
28
+ *
29
+ * @param automaticDetection If false, disables automatic user action detection, otherwise enables it.
30
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript and user actions module to be available (default: 10000)
31
+ * @throws A {@link DynatraceError} if the RUM JavaScript or user actions module is not available within the timeout
32
+ */
33
+ export async function setAutomaticDetection(automaticDetection, timeout = 10_000) {
34
+ const userActions = await waitForUserActions(timeout);
35
+ userActions.setAutomaticDetection(automaticDetection);
36
+ }
37
+ /**
38
+ * Async wrapper for {@link dynatrace.userActions.current}.
39
+ *
40
+ * @param timeout Timeout in milliseconds to wait for the RUM JavaScript and user actions module to be available (default: 10000)
41
+ * @returns A promise that resolves to the current user action, or `undefined` if no user action is in progress.
42
+ * @throws A {@link DynatraceError} if the RUM JavaScript or user actions module is not available within the timeout
43
+ */
44
+ export async function getCurrent(timeout = 10_000) {
45
+ const userActions = await waitForUserActions(timeout);
46
+ return userActions.current;
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc291cmNlL2FwaS9wcm9taXNlcy91c2VyLWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTSxDQUFDLE9BQWdDLEVBQUUsVUFBa0IsTUFBTTtJQUNuRixNQUFNLFdBQVcsR0FBRyxNQUFNLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsU0FBUyxDQUFDLFVBQW1ELEVBQUUsVUFBa0IsTUFBTTtJQUN6RyxNQUFNLFdBQVcsR0FBRyxNQUFNLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxrQkFBMkIsRUFBRSxVQUFrQixNQUFNO0lBQzdGLE1BQU0sV0FBVyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsV0FBVyxDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsVUFBVSxDQUFDLFVBQWtCLE1BQU07SUFDckQsTUFBTSxXQUFXLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RCxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgICBVc2VyQWN0aW9uU3RhcnRPcHRpb25zLFxuICAgIFVzZXJBY3Rpb25UcmFja2VyXG59IGZyb20gXCIuLi8uLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJBY3Rpb25zIH0gZnJvbSBcIi4vd2FpdC1mb3ItdXNlci1hY3Rpb25zLmpzXCI7XG5cbi8qKlxuICogQXN5bmMgd3JhcHBlciBmb3Ige0BsaW5rIGR5bmF0cmFjZS51c2VyQWN0aW9ucy5jcmVhdGV9LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIEFuIG9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRvIGNvbmZpZ3VyZSB0aGUgdXNlciBhY3Rpb24uXG4gKiBAcGFyYW0gdGltZW91dCBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgUlVNIEphdmFTY3JpcHQgYW5kIHVzZXIgYWN0aW9ucyBtb2R1bGUgdG8gYmUgYXZhaWxhYmxlIChkZWZhdWx0OiAxMDAwMClcbiAqIEByZXR1cm5zICAgICAgIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYFVzZXJBY3Rpb25UcmFja2VyYCBvYmplY3QuXG4gKiBAdGhyb3dzICAgICAgICBBIHtAbGluayBEeW5hdHJhY2VFcnJvcn0gaWYgdGhlIFJVTSBKYXZhU2NyaXB0IG9yIHVzZXIgYWN0aW9ucyBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGhlIHRpbWVvdXRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZShvcHRpb25zPzogVXNlckFjdGlvblN0YXJ0T3B0aW9ucywgdGltZW91dDogbnVtYmVyID0gMTBfMDAwKTogUHJvbWlzZTxVc2VyQWN0aW9uVHJhY2tlcj4ge1xuICAgIGNvbnN0IHVzZXJBY3Rpb25zID0gYXdhaXQgd2FpdEZvclVzZXJBY3Rpb25zKHRpbWVvdXQpO1xuICAgIHJldHVybiB1c2VyQWN0aW9ucy5jcmVhdGUob3B0aW9ucyk7XG59XG5cbi8qKlxuICogQXN5bmMgd3JhcHBlciBmb3Ige0BsaW5rIGR5bmF0cmFjZS51c2VyQWN0aW9ucy5zdWJzY3JpYmV9LlxuICpcbiAqIEBwYXJhbSBzdWJzY3JpYmVyIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbmV2ZXIgRHluYXRyYWNlIGNyZWF0ZXMgYSBuZXcgdXNlciBhY3Rpb24uXG4gKiBAcGFyYW0gdGltZW91dCAgICBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgUlVNIEphdmFTY3JpcHQgYW5kIHVzZXIgYWN0aW9ucyBtb2R1bGUgdG8gYmUgYXZhaWxhYmxlIChkZWZhdWx0OiAxMDAwMClcbiAqIEByZXR1cm5zICAgICAgICAgIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIHVuc3Vic2NyaWJlciBmdW5jdGlvbi5cbiAqIEB0aHJvd3MgICAgICAgICAgIEEge0BsaW5rIER5bmF0cmFjZUVycm9yfSBpZiB0aGUgUlVNIEphdmFTY3JpcHQgb3IgdXNlciBhY3Rpb25zIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlIHdpdGhpbiB0aGUgdGltZW91dFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3Vic2NyaWJlKHN1YnNjcmliZXI6ICh1c2VyQWN0aW9uOiBVc2VyQWN0aW9uVHJhY2tlcikgPT4gdm9pZCwgdGltZW91dDogbnVtYmVyID0gMTBfMDAwKTogUHJvbWlzZTwoKSA9PiB2b2lkPiB7XG4gICAgY29uc3QgdXNlckFjdGlvbnMgPSBhd2FpdCB3YWl0Rm9yVXNlckFjdGlvbnModGltZW91dCk7XG4gICAgcmV0dXJuIHVzZXJBY3Rpb25zLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbn1cblxuLyoqXG4gKiBBc3luYyB3cmFwcGVyIGZvciB7QGxpbmsgZHluYXRyYWNlLnVzZXJBY3Rpb25zLnNldEF1dG9tYXRpY0RldGVjdGlvbn0uXG4gKlxuICogQHBhcmFtIGF1dG9tYXRpY0RldGVjdGlvbiBJZiBmYWxzZSwgZGlzYWJsZXMgYXV0b21hdGljIHVzZXIgYWN0aW9uIGRldGVjdGlvbiwgb3RoZXJ3aXNlIGVuYWJsZXMgaXQuXG4gKiBAcGFyYW0gdGltZW91dCAgICAgICAgICAgIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSBSVU0gSmF2YVNjcmlwdCBhbmQgdXNlciBhY3Rpb25zIG1vZHVsZSB0byBiZSBhdmFpbGFibGUgKGRlZmF1bHQ6IDEwMDAwKVxuICogQHRocm93cyAgICAgICAgICAgICAgICAgICBBIHtAbGluayBEeW5hdHJhY2VFcnJvcn0gaWYgdGhlIFJVTSBKYXZhU2NyaXB0IG9yIHVzZXIgYWN0aW9ucyBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGhlIHRpbWVvdXRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldEF1dG9tYXRpY0RldGVjdGlvbihhdXRvbWF0aWNEZXRlY3Rpb246IGJvb2xlYW4sIHRpbWVvdXQ6IG51bWJlciA9IDEwXzAwMCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVzZXJBY3Rpb25zID0gYXdhaXQgd2FpdEZvclVzZXJBY3Rpb25zKHRpbWVvdXQpO1xuICAgIHVzZXJBY3Rpb25zLnNldEF1dG9tYXRpY0RldGVjdGlvbihhdXRvbWF0aWNEZXRlY3Rpb24pO1xufVxuXG4vKipcbiAqIEFzeW5jIHdyYXBwZXIgZm9yIHtAbGluayBkeW5hdHJhY2UudXNlckFjdGlvbnMuY3VycmVudH0uXG4gKlxuICogQHBhcmFtIHRpbWVvdXQgVGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIFJVTSBKYXZhU2NyaXB0IGFuZCB1c2VyIGFjdGlvbnMgbW9kdWxlIHRvIGJlIGF2YWlsYWJsZSAoZGVmYXVsdDogMTAwMDApXG4gKiBAcmV0dXJucyAgICAgICBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3VycmVudCB1c2VyIGFjdGlvbiwgb3IgYHVuZGVmaW5lZGAgaWYgbm8gdXNlciBhY3Rpb24gaXMgaW4gcHJvZ3Jlc3MuXG4gKiBAdGhyb3dzICAgICAgICBBIHtAbGluayBEeW5hdHJhY2VFcnJvcn0gaWYgdGhlIFJVTSBKYXZhU2NyaXB0IG9yIHVzZXIgYWN0aW9ucyBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGhlIHRpbWVvdXRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnQodGltZW91dDogbnVtYmVyID0gMTBfMDAwKTogUHJvbWlzZTxVc2VyQWN0aW9uVHJhY2tlciB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHVzZXJBY3Rpb25zID0gYXdhaXQgd2FpdEZvclVzZXJBY3Rpb25zKHRpbWVvdXQpO1xuICAgIHJldHVybiB1c2VyQWN0aW9ucy5jdXJyZW50O1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ import type { dynatrace as DtApi } from "../../types/api/dynatrace-api-types.js";
2
+ export declare function waitForAgent(timeout?: number): Promise<typeof DtApi>;
@@ -0,0 +1,77 @@
1
+ import { log, warn } from "../logging.js";
2
+ import { DynatraceError } from "../dynatrace-error.js";
3
+ import { getGlobal } from "../global-adapter.js";
4
+ import { isValidAgent } from "../type-guards/is-valid-agent.js";
5
+ const INVALID_ASSIGNMENT_MESSAGE = "An invalid object was assigned to the `dynatrace` namespace. This can lead to unexpected behavior when using the API. The assigned object: ";
6
+ const setupPropertyListenerOnce = once(setupPropertyListener);
7
+ const waitingPromises = new Map();
8
+ let nextPromiseId = 0;
9
+ let currentAgent = void 0;
10
+ function setupPropertyListener() {
11
+ Object.defineProperty(globalThis, "dynatrace", {
12
+ set: (value) => {
13
+ if (isValidAgent(value)) {
14
+ log("RUM JavaScript available, continuing API execution.");
15
+ currentAgent = value;
16
+ resolveAllWaitingPromises(value);
17
+ }
18
+ else if (value) {
19
+ rejectAllWaitingPromises(new DynatraceError(INVALID_ASSIGNMENT_MESSAGE, value));
20
+ }
21
+ },
22
+ get: () => {
23
+ return currentAgent;
24
+ },
25
+ configurable: true
26
+ });
27
+ }
28
+ function resolveAllWaitingPromises(agent) {
29
+ waitingPromises.forEach((promise) => {
30
+ clearTimeout(promise.timeoutId);
31
+ promise.resolve(agent);
32
+ });
33
+ waitingPromises.clear();
34
+ }
35
+ function rejectAllWaitingPromises(error) {
36
+ waitingPromises.forEach((promise) => {
37
+ clearTimeout(promise.timeoutId);
38
+ promise.reject(error);
39
+ });
40
+ waitingPromises.clear();
41
+ }
42
+ function removeWaitingPromise(promiseId) {
43
+ waitingPromises.delete(promiseId);
44
+ }
45
+ export function waitForAgent(timeout = 10_000) {
46
+ const globalDt = getGlobal("dynatrace");
47
+ if (isValidAgent(globalDt)) {
48
+ return Promise.resolve(globalDt);
49
+ }
50
+ else if (globalDt) {
51
+ return Promise.reject(new DynatraceError(INVALID_ASSIGNMENT_MESSAGE, globalDt));
52
+ }
53
+ setupPropertyListenerOnce();
54
+ warn("RUM JavaScript is not available yet. API execution halted until it is.");
55
+ return new Promise((resolve, reject) => {
56
+ const promiseId = nextPromiseId++;
57
+ const timeoutId = setTimeout(() => {
58
+ removeWaitingPromise(promiseId);
59
+ reject(new DynatraceError("Timeout waiting for RUM JavaScript."));
60
+ }, timeout);
61
+ waitingPromises.set(promiseId, { resolve, reject, timeoutId });
62
+ });
63
+ }
64
+ /**
65
+ * @param fn the function to be only called once
66
+ * @returns the once wrapper function that calls either the given function the first time or does nothing otherwise
67
+ */
68
+ function once(fn) {
69
+ let callable = function (...args) {
70
+ callable = () => void 0;
71
+ return fn.apply(this, args);
72
+ };
73
+ return function (...args) {
74
+ return callable.apply(this, args);
75
+ };
76
+ }
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1mb3ItYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvYXBpL3Byb21pc2VzL3dhaXQtZm9yLWFnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDSCxHQUFHLEVBQ0gsSUFBSSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBUWhFLE1BQU0sMEJBQTBCLEdBQUcsNklBQTZJLENBQUM7QUFFakwsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUU5RCxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztBQUMxRCxJQUFJLGFBQWEsR0FBVyxDQUFDLENBQUM7QUFDOUIsSUFBSSxZQUFZLEdBQTZCLEtBQUssQ0FBQyxDQUFDO0FBRXBELFNBQVMscUJBQXFCO0lBQzFCLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRTtRQUMzQyxHQUFHLEVBQUUsQ0FBQyxLQUFjLEVBQUUsRUFBRTtZQUNwQixJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN0QixHQUFHLENBQUMscURBQXFELENBQUMsQ0FBQztnQkFDM0QsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDckIseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztpQkFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNmLHdCQUF3QixDQUFDLElBQUksY0FBYyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDcEYsQ0FBQztRQUNMLENBQUM7UUFDRCxHQUFHLEVBQUUsR0FBRyxFQUFFO1lBQ04sT0FBTyxZQUFZLENBQUM7UUFDeEIsQ0FBQztRQUNELFlBQVksRUFBRSxJQUFJO0tBQ3JCLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFDLEtBQW1CO0lBQ2xELGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNoQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDSCxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDNUIsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUMsS0FBcUI7SUFDbkQsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2hDLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztJQUNILGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxTQUFpQjtJQUMzQyxlQUFlLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLFVBQWtCLE1BQU07SUFDakQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXhDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7U0FBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGNBQWMsQ0FBQywwQkFBMEIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCx5QkFBeUIsRUFBRSxDQUFDO0lBRTVCLElBQUksQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO0lBRS9FLE9BQU8sSUFBSSxPQUFPLENBQWUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDakQsTUFBTSxTQUFTLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFFbEMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUM5QixvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsSUFBSSxjQUFjLENBQUMscUNBQXFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVaLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsSUFBSSxDQUNULEVBQTZCO0lBRTdCLElBQUksUUFBUSxHQUFHLFVBQW1CLEdBQUcsSUFBTztRQUN4QyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFFRixPQUFPLFVBQW1CLEdBQUcsSUFBTztRQUNoQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IGR5bmF0cmFjZSBhcyBEdEFwaSB9IGZyb20gXCIuLi8uLi90eXBlcy9hcGkvZHluYXRyYWNlLWFwaS10eXBlcy5qc1wiO1xuaW1wb3J0IHtcbiAgICBsb2csXG4gICAgd2FyblxufSBmcm9tIFwiLi4vbG9nZ2luZy5qc1wiO1xuaW1wb3J0IHsgRHluYXRyYWNlRXJyb3IgfSBmcm9tIFwiLi4vZHluYXRyYWNlLWVycm9yLmpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vZ2xvYmFsLWFkYXB0ZXIuanNcIjtcbmltcG9ydCB7IGlzVmFsaWRBZ2VudCB9IGZyb20gXCIuLi90eXBlLWd1YXJkcy9pcy12YWxpZC1hZ2VudC5qc1wiO1xuXG5pbnRlcmZhY2UgV2FpdGluZ1Byb21pc2Uge1xuICAgIHJlc29sdmU6IChhZ2VudDogdHlwZW9mIER0QXBpKSA9PiB2b2lkO1xuICAgIHJlamVjdDogKGVycm9yOiBEeW5hdHJhY2VFcnJvcikgPT4gdm9pZDtcbiAgICB0aW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xufVxuXG5jb25zdCBJTlZBTElEX0FTU0lHTk1FTlRfTUVTU0FHRSA9IFwiQW4gaW52YWxpZCBvYmplY3Qgd2FzIGFzc2lnbmVkIHRvIHRoZSBgZHluYXRyYWNlYCBuYW1lc3BhY2UuIFRoaXMgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciB3aGVuIHVzaW5nIHRoZSBBUEkuIFRoZSBhc3NpZ25lZCBvYmplY3Q6IFwiO1xuXG5jb25zdCBzZXR1cFByb3BlcnR5TGlzdGVuZXJPbmNlID0gb25jZShzZXR1cFByb3BlcnR5TGlzdGVuZXIpO1xuXG5jb25zdCB3YWl0aW5nUHJvbWlzZXMgPSBuZXcgTWFwPG51bWJlciwgV2FpdGluZ1Byb21pc2U+KCk7XG5sZXQgbmV4dFByb21pc2VJZDogbnVtYmVyID0gMDtcbmxldCBjdXJyZW50QWdlbnQ6IHR5cGVvZiBEdEFwaSB8IHVuZGVmaW5lZCA9IHZvaWQgMDtcblxuZnVuY3Rpb24gc2V0dXBQcm9wZXJ0eUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBcImR5bmF0cmFjZVwiLCB7XG4gICAgICAgIHNldDogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZEFnZW50KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGxvZyhcIlJVTSBKYXZhU2NyaXB0IGF2YWlsYWJsZSwgY29udGludWluZyBBUEkgZXhlY3V0aW9uLlwiKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50QWdlbnQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICByZXNvbHZlQWxsV2FpdGluZ1Byb21pc2VzKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZWplY3RBbGxXYWl0aW5nUHJvbWlzZXMobmV3IER5bmF0cmFjZUVycm9yKElOVkFMSURfQVNTSUdOTUVOVF9NRVNTQUdFLCB2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50QWdlbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQWxsV2FpdGluZ1Byb21pc2VzKGFnZW50OiB0eXBlb2YgRHRBcGkpOiB2b2lkIHtcbiAgICB3YWl0aW5nUHJvbWlzZXMuZm9yRWFjaCgocHJvbWlzZSkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQocHJvbWlzZS50aW1lb3V0SWQpO1xuICAgICAgICBwcm9taXNlLnJlc29sdmUoYWdlbnQpO1xuICAgIH0pO1xuICAgIHdhaXRpbmdQcm9taXNlcy5jbGVhcigpO1xufVxuXG5mdW5jdGlvbiByZWplY3RBbGxXYWl0aW5nUHJvbWlzZXMoZXJyb3I6IER5bmF0cmFjZUVycm9yKTogdm9pZCB7XG4gICAgd2FpdGluZ1Byb21pc2VzLmZvckVhY2goKHByb21pc2UpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHByb21pc2UudGltZW91dElkKTtcbiAgICAgICAgcHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH0pO1xuICAgIHdhaXRpbmdQcm9taXNlcy5jbGVhcigpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVXYWl0aW5nUHJvbWlzZShwcm9taXNlSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHdhaXRpbmdQcm9taXNlcy5kZWxldGUocHJvbWlzZUlkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhaXRGb3JBZ2VudCh0aW1lb3V0OiBudW1iZXIgPSAxMF8wMDApOiBQcm9taXNlPHR5cGVvZiBEdEFwaT4ge1xuICAgIGNvbnN0IGdsb2JhbER0ID0gZ2V0R2xvYmFsKFwiZHluYXRyYWNlXCIpO1xuXG4gICAgaWYgKGlzVmFsaWRBZ2VudChnbG9iYWxEdCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShnbG9iYWxEdCk7XG4gICAgfSBlbHNlIGlmIChnbG9iYWxEdCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IER5bmF0cmFjZUVycm9yKElOVkFMSURfQVNTSUdOTUVOVF9NRVNTQUdFLCBnbG9iYWxEdCkpO1xuICAgIH1cblxuICAgIHNldHVwUHJvcGVydHlMaXN0ZW5lck9uY2UoKTtcblxuICAgIHdhcm4oXCJSVU0gSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlIHlldC4gQVBJIGV4ZWN1dGlvbiBoYWx0ZWQgdW50aWwgaXQgaXMuXCIpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHR5cGVvZiBEdEFwaT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9taXNlSWQgPSBuZXh0UHJvbWlzZUlkKys7XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZW1vdmVXYWl0aW5nUHJvbWlzZShwcm9taXNlSWQpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBEeW5hdHJhY2VFcnJvcihcIlRpbWVvdXQgd2FpdGluZyBmb3IgUlVNIEphdmFTY3JpcHQuXCIpKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG5cbiAgICAgICAgd2FpdGluZ1Byb21pc2VzLnNldChwcm9taXNlSWQsIHsgcmVzb2x2ZSwgcmVqZWN0LCB0aW1lb3V0SWQgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGZuIHRoZSBmdW5jdGlvbiB0byBiZSBvbmx5IGNhbGxlZCBvbmNlXG4gKiBAcmV0dXJucyAgdGhlIG9uY2Ugd3JhcHBlciBmdW5jdGlvbiB0aGF0IGNhbGxzIGVpdGhlciB0aGUgZ2l2ZW4gZnVuY3Rpb24gdGhlIGZpcnN0IHRpbWUgb3IgZG9lcyBub3RoaW5nIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBvbmNlPEEgZXh0ZW5kcyBhbnlbXSwgUiwgVD4oXG4gICAgZm46ICh0aGlzOiBULCAuLi5hcmc6IEEpID0+IFJcbik6ICgodGhpczogVCwgLi4uYXJnOiBBKSA9PiBSIHwgdW5kZWZpbmVkKSB7XG4gICAgbGV0IGNhbGxhYmxlID0gZnVuY3Rpb24gKHRoaXM6IFQsIC4uLmFyZ3M6IEEpOiBSIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY2FsbGFibGUgPSAoKSA9PiB2b2lkIDA7XG4gICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBULCAuLi5hcmdzOiBBKTogUiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBjYWxsYWJsZS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xufVxuIl19
@@ -0,0 +1,9 @@
1
+ import type { sendExceptionEvent } from "../index.js";
2
+ /**
3
+ * Waits for the RUM JavaScript and error module to become available.
4
+ *
5
+ * @param timeout Timeout in milliseconds to wait for the error module to be available (default: 10000)
6
+ * @returns A promise that resolves to the error module
7
+ * @throws A {@link DynatraceError} if the RUM JavaScript or error module is not available within the timeout
8
+ */
9
+ export declare function waitForSendExceptionEvent(timeout?: number): Promise<typeof sendExceptionEvent>;
@@ -0,0 +1,18 @@
1
+ import { DynatraceError } from "../dynatrace-error.js";
2
+ import { waitForAgent } from "./wait-for-agent.js";
3
+ /**
4
+ * Waits for the RUM JavaScript and error module to become available.
5
+ *
6
+ * @param timeout Timeout in milliseconds to wait for the error module to be available (default: 10000)
7
+ * @returns A promise that resolves to the error module
8
+ * @throws A {@link DynatraceError} if the RUM JavaScript or error module is not available within the timeout
9
+ */
10
+ export async function waitForSendExceptionEvent(timeout = 10_000) {
11
+ const dynatrace = await waitForAgent(timeout);
12
+ if (dynatrace.sendExceptionEvent) {
13
+ return dynatrace.sendExceptionEvent;
14
+ }
15
+ // If not immediately available, it means the module is disabled
16
+ throw new DynatraceError("The `dynatrace.sendExceptionEvent` function is not available. Ensure the Error module is enabled in your RUM configuration.");
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1mb3Itc2VuZC1leGNlcHRpb24tZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvYXBpL3Byb21pc2VzL3dhaXQtZm9yLXNlbmQtZXhjZXB0aW9uLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxVQUFrQixNQUFNO0lBQ3BFLE1BQU0sU0FBUyxHQUFHLE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTlDLElBQUksU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0IsT0FBTyxTQUFTLENBQUMsa0JBQWtCLENBQUM7SUFDeEMsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxNQUFNLElBQUksY0FBYyxDQUFDLDZIQUE2SCxDQUFDLENBQUM7QUFDNUosQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgc2VuZEV4Y2VwdGlvbkV2ZW50IH0gZnJvbSBcIi4uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBEeW5hdHJhY2VFcnJvciB9IGZyb20gXCIuLi9keW5hdHJhY2UtZXJyb3IuanNcIjtcbmltcG9ydCB7IHdhaXRGb3JBZ2VudCB9IGZyb20gXCIuL3dhaXQtZm9yLWFnZW50LmpzXCI7XG5cbi8qKlxuICogV2FpdHMgZm9yIHRoZSBSVU0gSmF2YVNjcmlwdCBhbmQgZXJyb3IgbW9kdWxlIHRvIGJlY29tZSBhdmFpbGFibGUuXG4gKlxuICogQHBhcmFtIHRpbWVvdXQgVGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIGVycm9yIG1vZHVsZSB0byBiZSBhdmFpbGFibGUgKGRlZmF1bHQ6IDEwMDAwKVxuICogQHJldHVybnMgICAgICAgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGVycm9yIG1vZHVsZVxuICogQHRocm93cyAgICAgICAgQSB7QGxpbmsgRHluYXRyYWNlRXJyb3J9IGlmIHRoZSBSVU0gSmF2YVNjcmlwdCBvciBlcnJvciBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGhlIHRpbWVvdXRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JTZW5kRXhjZXB0aW9uRXZlbnQodGltZW91dDogbnVtYmVyID0gMTBfMDAwKTogUHJvbWlzZTx0eXBlb2Ygc2VuZEV4Y2VwdGlvbkV2ZW50PiB7XG4gICAgY29uc3QgZHluYXRyYWNlID0gYXdhaXQgd2FpdEZvckFnZW50KHRpbWVvdXQpO1xuXG4gICAgaWYgKGR5bmF0cmFjZS5zZW5kRXhjZXB0aW9uRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGR5bmF0cmFjZS5zZW5kRXhjZXB0aW9uRXZlbnQ7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgaXQgbWVhbnMgdGhlIG1vZHVsZSBpcyBkaXNhYmxlZFxuICAgIHRocm93IG5ldyBEeW5hdHJhY2VFcnJvcihcIlRoZSBgZHluYXRyYWNlLnNlbmRFeGNlcHRpb25FdmVudGAgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gRW5zdXJlIHRoZSBFcnJvciBtb2R1bGUgaXMgZW5hYmxlZCBpbiB5b3VyIFJVTSBjb25maWd1cmF0aW9uLlwiKTtcbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ import type { UserActions } from "../../types/index.js";
2
+ /**
3
+ * Waits for the RUM JavaScript and user actions module to become available.
4
+ *
5
+ * @param timeout Timeout in milliseconds to wait for the user actions module to be available (default: 10000)
6
+ * @returns A promise that resolves to the user actions module
7
+ * @throws A {@link DynatraceError} if the RUM JavaScript or user actions module is not available within the timeout
8
+ */
9
+ export declare function waitForUserActions(timeout?: number): Promise<UserActions>;
@@ -0,0 +1,18 @@
1
+ import { DynatraceError } from "../dynatrace-error.js";
2
+ import { waitForAgent } from "./wait-for-agent.js";
3
+ /**
4
+ * Waits for the RUM JavaScript and user actions module to become available.
5
+ *
6
+ * @param timeout Timeout in milliseconds to wait for the user actions module to be available (default: 10000)
7
+ * @returns A promise that resolves to the user actions module
8
+ * @throws A {@link DynatraceError} if the RUM JavaScript or user actions module is not available within the timeout
9
+ */
10
+ export async function waitForUserActions(timeout = 10_000) {
11
+ const dynatrace = await waitForAgent(timeout);
12
+ if (dynatrace.userActions) {
13
+ return dynatrace.userActions;
14
+ }
15
+ // If not immediately available, it means the module is disabled
16
+ throw new DynatraceError("The `dynatrace.userActions` module is not available. Ensure the User Actions module is enabled in your RUM configuration.");
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1mb3ItdXNlci1hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc291cmNlL2FwaS9wcm9taXNlcy93YWl0LWZvci11c2VyLWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUFDLFVBQWtCLE1BQU07SUFDN0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFOUMsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEIsT0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsTUFBTSxJQUFJLGNBQWMsQ0FBQywySEFBMkgsQ0FBQyxDQUFDO0FBQzFKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFVzZXJBY3Rpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBEeW5hdHJhY2VFcnJvciB9IGZyb20gXCIuLi9keW5hdHJhY2UtZXJyb3IuanNcIjtcbmltcG9ydCB7IHdhaXRGb3JBZ2VudCB9IGZyb20gXCIuL3dhaXQtZm9yLWFnZW50LmpzXCI7XG5cbi8qKlxuICogV2FpdHMgZm9yIHRoZSBSVU0gSmF2YVNjcmlwdCBhbmQgdXNlciBhY3Rpb25zIG1vZHVsZSB0byBiZWNvbWUgYXZhaWxhYmxlLlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0IFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSB1c2VyIGFjdGlvbnMgbW9kdWxlIHRvIGJlIGF2YWlsYWJsZSAoZGVmYXVsdDogMTAwMDApXG4gKiBAcmV0dXJucyAgICAgICBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdXNlciBhY3Rpb25zIG1vZHVsZVxuICogQHRocm93cyAgICAgICAgQSB7QGxpbmsgRHluYXRyYWNlRXJyb3J9IGlmIHRoZSBSVU0gSmF2YVNjcmlwdCBvciB1c2VyIGFjdGlvbnMgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUgd2l0aGluIHRoZSB0aW1lb3V0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yVXNlckFjdGlvbnModGltZW91dDogbnVtYmVyID0gMTBfMDAwKTogUHJvbWlzZTxVc2VyQWN0aW9ucz4ge1xuICAgIGNvbnN0IGR5bmF0cmFjZSA9IGF3YWl0IHdhaXRGb3JBZ2VudCh0aW1lb3V0KTtcblxuICAgIGlmIChkeW5hdHJhY2UudXNlckFjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGR5bmF0cmFjZS51c2VyQWN0aW9ucztcbiAgICB9XG5cbiAgICAvLyBJZiBub3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLCBpdCBtZWFucyB0aGUgbW9kdWxlIGlzIGRpc2FibGVkXG4gICAgdGhyb3cgbmV3IER5bmF0cmFjZUVycm9yKFwiVGhlIGBkeW5hdHJhY2UudXNlckFjdGlvbnNgIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlLiBFbnN1cmUgdGhlIFVzZXIgQWN0aW9ucyBtb2R1bGUgaXMgZW5hYmxlZCBpbiB5b3VyIFJVTSBjb25maWd1cmF0aW9uLlwiKTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import type { dynatrace as DtApi } from "../../types/api/dynatrace-api-types.js";
2
+ export declare function isValidAgent(agent: unknown): agent is typeof DtApi;