@duckbug/js 0.1.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +348 -73
- package/dist/cjs/DuckBug/DuckBugHelper.cjs +136 -0
- package/dist/cjs/DuckBug/DuckBugProvider.cjs +82 -13
- package/dist/cjs/DuckBug/DuckBugService.cjs +158 -17
- package/dist/cjs/DuckBug/Pond.cjs +44 -0
- package/dist/cjs/DuckBug/ensureEventId.cjs +47 -0
- package/dist/cjs/DuckBug/finalizeIngestEvent.cjs +54 -0
- package/dist/cjs/DuckBug/index.cjs +18 -2
- package/dist/cjs/DuckBug/parseDuckBugDsn.cjs +82 -0
- package/dist/cjs/DuckBug/sanitizeIngestPayload.cjs +67 -0
- package/dist/cjs/DuckBug/stripIngestSections.cjs +43 -0
- package/dist/cjs/DuckBug/transportTypes.cjs +18 -0
- package/dist/cjs/SDK/DuckSDK.cjs +131 -12
- package/dist/cjs/SDK/index.cjs +5 -2
- package/dist/cjs/contract/index.cjs +18 -0
- package/dist/cjs/contract/ingestEvents.cjs +18 -0
- package/dist/cjs/index.cjs +24 -6
- package/dist/cjs/integrations/node.cjs +54 -0
- package/dist/cjs/sdkIdentity.cjs +47 -0
- package/dist/esm/DuckBug/DuckBugHelper.js +99 -0
- package/dist/esm/DuckBug/DuckBugProvider.js +82 -13
- package/dist/esm/DuckBug/DuckBugService.js +156 -15
- package/dist/esm/DuckBug/Pond.js +10 -0
- package/dist/esm/DuckBug/ensureEventId.js +13 -0
- package/dist/esm/DuckBug/finalizeIngestEvent.js +20 -0
- package/dist/esm/DuckBug/index.js +5 -1
- package/dist/esm/DuckBug/parseDuckBugDsn.js +36 -0
- package/dist/esm/DuckBug/sanitizeIngestPayload.js +33 -0
- package/dist/esm/DuckBug/stripIngestSections.js +9 -0
- package/dist/esm/DuckBug/transportTypes.js +0 -0
- package/dist/esm/SDK/DuckSDK.js +127 -11
- package/dist/esm/SDK/index.js +2 -2
- package/dist/esm/contract/index.js +0 -0
- package/dist/esm/contract/ingestEvents.js +0 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/integrations/node.js +20 -0
- package/dist/esm/sdkIdentity.js +7 -0
- package/dist/types/DuckBug/DuckBugConfig.d.ts +28 -0
- package/dist/types/DuckBug/DuckBugHelper.d.ts +22 -0
- package/dist/types/DuckBug/DuckBugProvider.d.ts +12 -1
- package/dist/types/DuckBug/DuckBugService.d.ts +30 -8
- package/dist/types/DuckBug/Log.d.ts +1 -7
- package/dist/types/DuckBug/Pond.d.ts +9 -0
- package/dist/types/DuckBug/ensureEventId.d.ts +4 -0
- package/dist/types/DuckBug/finalizeIngestEvent.d.ts +11 -0
- package/dist/types/DuckBug/index.d.ts +7 -1
- package/dist/types/DuckBug/parseDuckBugDsn.d.ts +17 -0
- package/dist/types/DuckBug/sanitizeIngestPayload.d.ts +4 -0
- package/dist/types/DuckBug/stripIngestSections.d.ts +4 -0
- package/dist/types/DuckBug/transportTypes.d.ts +7 -0
- package/dist/types/SDK/DuckSDK.d.ts +31 -4
- package/dist/types/SDK/Provider.d.ts +11 -3
- package/dist/types/SDK/index.d.ts +3 -2
- package/dist/types/contract/index.d.ts +1 -0
- package/dist/types/contract/ingestEvents.d.ts +58 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/integrations/node.d.ts +12 -0
- package/dist/types/sdkIdentity.d.ts +7 -0
- package/package.json +23 -7
- package/schemas/error-event.schema.json +147 -0
- package/schemas/log-event.schema.json +126 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
stripIngestSections: ()=>stripIngestSections
|
|
28
|
+
});
|
|
29
|
+
function stripIngestSections(event, sections) {
|
|
30
|
+
if (void 0 === sections || 0 === sections.length) return event;
|
|
31
|
+
const o = {
|
|
32
|
+
...event
|
|
33
|
+
};
|
|
34
|
+
for (const s of sections)delete o[s];
|
|
35
|
+
return o;
|
|
36
|
+
}
|
|
37
|
+
exports.stripIngestSections = __webpack_exports__.stripIngestSections;
|
|
38
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
39
|
+
"stripIngestSections"
|
|
40
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
41
|
+
Object.defineProperty(exports, '__esModule', {
|
|
42
|
+
value: true
|
|
43
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.r = (exports1)=>{
|
|
5
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
6
|
+
value: 'Module'
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
9
|
+
value: true
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
})();
|
|
13
|
+
var __webpack_exports__ = {};
|
|
14
|
+
__webpack_require__.r(__webpack_exports__);
|
|
15
|
+
for(var __webpack_i__ in __webpack_exports__)exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
16
|
+
Object.defineProperty(exports, '__esModule', {
|
|
17
|
+
value: true
|
|
18
|
+
});
|
package/dist/cjs/SDK/DuckSDK.cjs
CHANGED
|
@@ -24,37 +24,156 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
DuckSDK: ()=>DuckSDK
|
|
27
|
+
DuckSDK: ()=>DuckSDK,
|
|
28
|
+
Duck: ()=>Duck
|
|
28
29
|
});
|
|
29
|
-
const
|
|
30
|
+
const DuckBugHelper_cjs_namespaceObject = require("../DuckBug/DuckBugHelper.cjs");
|
|
31
|
+
const finalizeIngestEvent_cjs_namespaceObject = require("../DuckBug/finalizeIngestEvent.cjs");
|
|
32
|
+
const external_sdkIdentity_cjs_namespaceObject = require("../sdkIdentity.cjs");
|
|
33
|
+
const external_LogLevel_cjs_namespaceObject = require("./LogLevel.cjs");
|
|
34
|
+
const external_LogProvider_cjs_namespaceObject = require("./LogProvider.cjs");
|
|
35
|
+
function isPromiseLike(v) {
|
|
36
|
+
return null !== v && "object" == typeof v && "then" in v && "function" == typeof v.then;
|
|
37
|
+
}
|
|
30
38
|
class DuckSDK {
|
|
31
39
|
providers;
|
|
32
|
-
|
|
40
|
+
scope = {};
|
|
41
|
+
beforeSendHook;
|
|
42
|
+
extraSensitiveKeys;
|
|
43
|
+
stripSections;
|
|
44
|
+
constructor(providers, logProviderConfig, options){
|
|
33
45
|
this.providers = providers;
|
|
34
|
-
|
|
46
|
+
this.beforeSendHook = options?.beforeSend;
|
|
47
|
+
this.extraSensitiveKeys = options?.extraSensitiveKeys;
|
|
48
|
+
this.stripSections = options?.stripSections;
|
|
49
|
+
new external_LogProvider_cjs_namespaceObject.LogProvider(providers, logProviderConfig);
|
|
50
|
+
}
|
|
51
|
+
setScope(scope) {
|
|
52
|
+
this.scope = {
|
|
53
|
+
...this.scope,
|
|
54
|
+
...scope
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
flush() {
|
|
58
|
+
return Promise.all(this.providers.map((p)=>{
|
|
59
|
+
const f = p.flush;
|
|
60
|
+
return f ? Promise.resolve(f.call(p)) : Promise.resolve();
|
|
61
|
+
})).then(()=>void 0);
|
|
35
62
|
}
|
|
36
63
|
log(tag, payload) {
|
|
37
|
-
this.
|
|
64
|
+
this.emitLog(external_LogLevel_cjs_namespaceObject.logLevel.DEBUG, tag, payload);
|
|
38
65
|
}
|
|
39
66
|
error(tag, payload) {
|
|
40
|
-
this.
|
|
67
|
+
this.emitLog(external_LogLevel_cjs_namespaceObject.logLevel.ERROR, tag, payload);
|
|
41
68
|
}
|
|
42
69
|
debug(tag, payload) {
|
|
43
|
-
this.
|
|
70
|
+
this.emitLog(external_LogLevel_cjs_namespaceObject.logLevel.DEBUG, tag, payload);
|
|
44
71
|
}
|
|
45
72
|
warn(tag, payload) {
|
|
46
|
-
this.
|
|
73
|
+
this.emitLog(external_LogLevel_cjs_namespaceObject.logLevel.WARN, tag, payload);
|
|
47
74
|
}
|
|
48
75
|
fatal(tag, payload) {
|
|
49
|
-
this.
|
|
76
|
+
this.emitLog(external_LogLevel_cjs_namespaceObject.logLevel.FATAL, tag, payload);
|
|
77
|
+
}
|
|
78
|
+
quack(tag, error) {
|
|
79
|
+
const time = Date.now();
|
|
80
|
+
const built = (0, DuckBugHelper_cjs_namespaceObject.processError)(error, tag, time);
|
|
81
|
+
const merged = this.mergeScope(built);
|
|
82
|
+
const finalized = (0, finalizeIngestEvent_cjs_namespaceObject.finalizeIngestEvent)(merged, {
|
|
83
|
+
extraSensitiveKeys: this.extraSensitiveKeys,
|
|
84
|
+
stripSections: this.stripSections
|
|
85
|
+
});
|
|
86
|
+
if (!this.beforeSendHook) {
|
|
87
|
+
for (const p of this.providers)p.sendError(finalized, {
|
|
88
|
+
skipPrivacyPipeline: true
|
|
89
|
+
});
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const arg = {
|
|
93
|
+
kind: "error",
|
|
94
|
+
event: finalized
|
|
95
|
+
};
|
|
96
|
+
const out = this.beforeSendHook(arg);
|
|
97
|
+
if (isPromiseLike(out)) return void out.then((resolved)=>{
|
|
98
|
+
const after = this.normalizeBeforeSendError(resolved, finalized);
|
|
99
|
+
if (null === after) return;
|
|
100
|
+
for (const p of this.providers)p.sendError(after, {
|
|
101
|
+
skipPrivacyPipeline: true
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
const after = this.normalizeBeforeSendError(out, finalized);
|
|
105
|
+
if (null === after) return;
|
|
106
|
+
for (const p of this.providers)p.sendError(after, {
|
|
107
|
+
skipPrivacyPipeline: true
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
normalizeBeforeSendLog(out, fallback) {
|
|
111
|
+
if (null === out) return null;
|
|
112
|
+
if (void 0 === out) return fallback;
|
|
113
|
+
return out;
|
|
50
114
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
115
|
+
normalizeBeforeSendError(out, fallback) {
|
|
116
|
+
if (null === out) return null;
|
|
117
|
+
if (void 0 === out) return fallback;
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
emitLog(level, message, payload) {
|
|
121
|
+
const event = this.mergeScope({
|
|
122
|
+
time: Date.now(),
|
|
123
|
+
level,
|
|
124
|
+
message,
|
|
125
|
+
platform: "node",
|
|
126
|
+
sdk: {
|
|
127
|
+
...external_sdkIdentity_cjs_namespaceObject.SDK_IDENTITY
|
|
128
|
+
},
|
|
129
|
+
...void 0 !== payload ? {
|
|
130
|
+
context: payload
|
|
131
|
+
} : {}
|
|
132
|
+
});
|
|
133
|
+
const finalized = (0, finalizeIngestEvent_cjs_namespaceObject.finalizeIngestEvent)(event, {
|
|
134
|
+
extraSensitiveKeys: this.extraSensitiveKeys,
|
|
135
|
+
stripSections: this.stripSections
|
|
136
|
+
});
|
|
137
|
+
if (!this.beforeSendHook) {
|
|
138
|
+
for (const p of this.providers)p.sendLog(finalized, {
|
|
139
|
+
skipPrivacyPipeline: true
|
|
140
|
+
});
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const arg = {
|
|
144
|
+
kind: "log",
|
|
145
|
+
event: finalized
|
|
146
|
+
};
|
|
147
|
+
const out = this.beforeSendHook(arg);
|
|
148
|
+
if (isPromiseLike(out)) return void out.then((resolved)=>{
|
|
149
|
+
const after = this.normalizeBeforeSendLog(resolved, finalized);
|
|
150
|
+
if (null === after) return;
|
|
151
|
+
for (const p of this.providers)p.sendLog(after, {
|
|
152
|
+
skipPrivacyPipeline: true
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
const after = this.normalizeBeforeSendLog(out, finalized);
|
|
156
|
+
if (null === after) return;
|
|
157
|
+
for (const p of this.providers)p.sendLog(after, {
|
|
158
|
+
skipPrivacyPipeline: true
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
mergeScope(event) {
|
|
162
|
+
return {
|
|
163
|
+
...this.scope,
|
|
164
|
+
...event
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
class Duck extends DuckSDK {
|
|
169
|
+
captureException(error, tag) {
|
|
170
|
+
this.quack(tag ?? "error", error);
|
|
54
171
|
}
|
|
55
172
|
}
|
|
173
|
+
exports.Duck = __webpack_exports__.Duck;
|
|
56
174
|
exports.DuckSDK = __webpack_exports__.DuckSDK;
|
|
57
175
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
176
|
+
"Duck",
|
|
58
177
|
"DuckSDK"
|
|
59
178
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
60
179
|
Object.defineProperty(exports, '__esModule', {
|
package/dist/cjs/SDK/index.cjs
CHANGED
|
@@ -24,17 +24,20 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
|
|
27
|
+
Duck: ()=>external_DuckSDK_cjs_namespaceObject.Duck,
|
|
28
28
|
logLevel: ()=>external_LogLevel_cjs_namespaceObject.logLevel,
|
|
29
|
-
DuckSDK: ()=>external_DuckSDK_cjs_namespaceObject.DuckSDK
|
|
29
|
+
DuckSDK: ()=>external_DuckSDK_cjs_namespaceObject.DuckSDK,
|
|
30
|
+
LogProvider: ()=>external_LogProvider_cjs_namespaceObject.LogProvider
|
|
30
31
|
});
|
|
31
32
|
const external_DuckSDK_cjs_namespaceObject = require("./DuckSDK.cjs");
|
|
32
33
|
const external_LogLevel_cjs_namespaceObject = require("./LogLevel.cjs");
|
|
33
34
|
const external_LogProvider_cjs_namespaceObject = require("./LogProvider.cjs");
|
|
35
|
+
exports.Duck = __webpack_exports__.Duck;
|
|
34
36
|
exports.DuckSDK = __webpack_exports__.DuckSDK;
|
|
35
37
|
exports.LogProvider = __webpack_exports__.LogProvider;
|
|
36
38
|
exports.logLevel = __webpack_exports__.logLevel;
|
|
37
39
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
40
|
+
"Duck",
|
|
38
41
|
"DuckSDK",
|
|
39
42
|
"LogProvider",
|
|
40
43
|
"logLevel"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.r = (exports1)=>{
|
|
5
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
6
|
+
value: 'Module'
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
9
|
+
value: true
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
})();
|
|
13
|
+
var __webpack_exports__ = {};
|
|
14
|
+
__webpack_require__.r(__webpack_exports__);
|
|
15
|
+
for(var __webpack_i__ in __webpack_exports__)exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
16
|
+
Object.defineProperty(exports, '__esModule', {
|
|
17
|
+
value: true
|
|
18
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.r = (exports1)=>{
|
|
5
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
6
|
+
value: 'Module'
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
9
|
+
value: true
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
})();
|
|
13
|
+
var __webpack_exports__ = {};
|
|
14
|
+
__webpack_require__.r(__webpack_exports__);
|
|
15
|
+
for(var __webpack_i__ in __webpack_exports__)exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
16
|
+
Object.defineProperty(exports, '__esModule', {
|
|
17
|
+
value: true
|
|
18
|
+
});
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -5,6 +5,12 @@ var __webpack_modules__ = {
|
|
|
5
5
|
},
|
|
6
6
|
"./SDK": function(module) {
|
|
7
7
|
module.exports = require("./SDK/index.cjs");
|
|
8
|
+
},
|
|
9
|
+
"./contract": function(module) {
|
|
10
|
+
module.exports = require("./contract/index.cjs");
|
|
11
|
+
},
|
|
12
|
+
"./integrations/node": function(module) {
|
|
13
|
+
module.exports = require("./integrations/node.cjs");
|
|
8
14
|
}
|
|
9
15
|
};
|
|
10
16
|
var __webpack_module_cache__ = {};
|
|
@@ -50,16 +56,28 @@ function __webpack_require__(moduleId) {
|
|
|
50
56
|
var __webpack_exports__ = {};
|
|
51
57
|
(()=>{
|
|
52
58
|
__webpack_require__.r(__webpack_exports__);
|
|
53
|
-
var
|
|
59
|
+
var _contract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./contract");
|
|
60
|
+
var __WEBPACK_REEXPORT_OBJECT__ = {};
|
|
61
|
+
for(var __WEBPACK_IMPORT_KEY__ in _contract__WEBPACK_IMPORTED_MODULE_0__)if ("default" !== __WEBPACK_IMPORT_KEY__) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
|
|
62
|
+
return _contract__WEBPACK_IMPORTED_MODULE_0__[key];
|
|
63
|
+
}).bind(0, __WEBPACK_IMPORT_KEY__);
|
|
64
|
+
__webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
|
|
65
|
+
var _DuckBug__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./DuckBug");
|
|
66
|
+
var __WEBPACK_REEXPORT_OBJECT__ = {};
|
|
67
|
+
for(var __WEBPACK_IMPORT_KEY__ in _DuckBug__WEBPACK_IMPORTED_MODULE_1__)if ("default" !== __WEBPACK_IMPORT_KEY__) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
|
|
68
|
+
return _DuckBug__WEBPACK_IMPORTED_MODULE_1__[key];
|
|
69
|
+
}).bind(0, __WEBPACK_IMPORT_KEY__);
|
|
70
|
+
__webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
|
|
71
|
+
var _integrations_node__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./integrations/node");
|
|
54
72
|
var __WEBPACK_REEXPORT_OBJECT__ = {};
|
|
55
|
-
for(var __WEBPACK_IMPORT_KEY__ in
|
|
56
|
-
return
|
|
73
|
+
for(var __WEBPACK_IMPORT_KEY__ in _integrations_node__WEBPACK_IMPORTED_MODULE_2__)if ("default" !== __WEBPACK_IMPORT_KEY__) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
|
|
74
|
+
return _integrations_node__WEBPACK_IMPORTED_MODULE_2__[key];
|
|
57
75
|
}).bind(0, __WEBPACK_IMPORT_KEY__);
|
|
58
76
|
__webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
|
|
59
|
-
var
|
|
77
|
+
var _SDK__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./SDK");
|
|
60
78
|
var __WEBPACK_REEXPORT_OBJECT__ = {};
|
|
61
|
-
for(var __WEBPACK_IMPORT_KEY__ in
|
|
62
|
-
return
|
|
79
|
+
for(var __WEBPACK_IMPORT_KEY__ in _SDK__WEBPACK_IMPORTED_MODULE_3__)if ("default" !== __WEBPACK_IMPORT_KEY__) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
|
|
80
|
+
return _SDK__WEBPACK_IMPORTED_MODULE_3__[key];
|
|
63
81
|
}).bind(0, __WEBPACK_IMPORT_KEY__);
|
|
64
82
|
__webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
|
|
65
83
|
})();
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
registerNodeGlobalErrorHandlers: ()=>registerNodeGlobalErrorHandlers
|
|
28
|
+
});
|
|
29
|
+
function registerNodeGlobalErrorHandlers(options) {
|
|
30
|
+
const rejectionTag = options.rejectionTag ?? "unhandledRejection";
|
|
31
|
+
const exceptionTag = options.exceptionTag ?? "uncaughtException";
|
|
32
|
+
const onRejection = (reason)=>{
|
|
33
|
+
const err = reason instanceof Error ? reason : new Error("string" == typeof reason ? reason : JSON.stringify(reason));
|
|
34
|
+
options.duck.quack(rejectionTag, err);
|
|
35
|
+
options.duck.flush();
|
|
36
|
+
};
|
|
37
|
+
const onException = (err)=>{
|
|
38
|
+
options.duck.quack(exceptionTag, err);
|
|
39
|
+
options.duck.flush();
|
|
40
|
+
};
|
|
41
|
+
process.on("unhandledRejection", onRejection);
|
|
42
|
+
process.on("uncaughtException", onException);
|
|
43
|
+
return ()=>{
|
|
44
|
+
process.off("unhandledRejection", onRejection);
|
|
45
|
+
process.off("uncaughtException", onException);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
exports.registerNodeGlobalErrorHandlers = __webpack_exports__.registerNodeGlobalErrorHandlers;
|
|
49
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
50
|
+
"registerNodeGlobalErrorHandlers"
|
|
51
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
52
|
+
Object.defineProperty(exports, '__esModule', {
|
|
53
|
+
value: true
|
|
54
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
SDK_IDENTITY: ()=>SDK_IDENTITY,
|
|
28
|
+
SDK_NAME: ()=>SDK_NAME,
|
|
29
|
+
SDK_VERSION: ()=>SDK_VERSION
|
|
30
|
+
});
|
|
31
|
+
const SDK_NAME = "@duckbug/js";
|
|
32
|
+
const SDK_VERSION = "0.1.3";
|
|
33
|
+
const SDK_IDENTITY = {
|
|
34
|
+
name: SDK_NAME,
|
|
35
|
+
version: SDK_VERSION
|
|
36
|
+
};
|
|
37
|
+
exports.SDK_IDENTITY = __webpack_exports__.SDK_IDENTITY;
|
|
38
|
+
exports.SDK_NAME = __webpack_exports__.SDK_NAME;
|
|
39
|
+
exports.SDK_VERSION = __webpack_exports__.SDK_VERSION;
|
|
40
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
41
|
+
"SDK_IDENTITY",
|
|
42
|
+
"SDK_NAME",
|
|
43
|
+
"SDK_VERSION"
|
|
44
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
45
|
+
Object.defineProperty(exports, '__esModule', {
|
|
46
|
+
value: true
|
|
47
|
+
});
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { SDK_IDENTITY } from "../sdkIdentity.js";
|
|
2
|
+
function tryJsonObjectFromMessage(message) {
|
|
3
|
+
const trimmed = message.trim();
|
|
4
|
+
if (!trimmed.startsWith("{") && !trimmed.startsWith("[")) return null;
|
|
5
|
+
try {
|
|
6
|
+
const v = JSON.parse(message);
|
|
7
|
+
if (null !== v && "object" == typeof v) return v;
|
|
8
|
+
} catch {}
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
function parseStacktrace(stack) {
|
|
12
|
+
let file = "unknown";
|
|
13
|
+
let line = 0;
|
|
14
|
+
let stacktrace;
|
|
15
|
+
if (stack) {
|
|
16
|
+
const stackLines = stack.split("\n");
|
|
17
|
+
let firstStackLineWithFile = null;
|
|
18
|
+
for(let i = 1; i < stackLines.length; i++){
|
|
19
|
+
const lineStr = stackLines[i];
|
|
20
|
+
if (-1 !== lineStr.indexOf("at ") && (-1 !== lineStr.indexOf(":") || -1 !== lineStr.indexOf("("))) {
|
|
21
|
+
firstStackLineWithFile = lineStr;
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (firstStackLineWithFile) {
|
|
26
|
+
const match = firstStackLineWithFile.match(/\(([^)]+):(\d+):(\d+)\)/) || firstStackLineWithFile.match(/at\s+.*?\(([^)]+):(\d+):(\d+)\)/) || firstStackLineWithFile.match(/([^:()\s]+):(\d+):(\d+)/);
|
|
27
|
+
if (match?.[1]) {
|
|
28
|
+
file = match[1].replace(/^file:\/\//, "").replace(/^\/+/, "");
|
|
29
|
+
line = parseInt(match[2] || "0", 10);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
stacktrace = {
|
|
33
|
+
raw: stack,
|
|
34
|
+
frames: stackLines.filter((lineStr)=>lineStr.trim()).map((lineStr, index)=>({
|
|
35
|
+
index,
|
|
36
|
+
content: lineStr.trim()
|
|
37
|
+
}))
|
|
38
|
+
};
|
|
39
|
+
} else {
|
|
40
|
+
stacktrace = {
|
|
41
|
+
raw: "",
|
|
42
|
+
frames: []
|
|
43
|
+
};
|
|
44
|
+
file = "unknown";
|
|
45
|
+
line = 0;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
file,
|
|
49
|
+
line,
|
|
50
|
+
stacktrace
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function parseContext(contextStr) {
|
|
54
|
+
if (!contextStr) return null;
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse(contextStr);
|
|
57
|
+
} catch {
|
|
58
|
+
return {
|
|
59
|
+
message: contextStr
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function parseError(error) {
|
|
64
|
+
const { file, line, stacktrace } = parseStacktrace(error.stack);
|
|
65
|
+
const context = parseContext(error.message);
|
|
66
|
+
return {
|
|
67
|
+
file,
|
|
68
|
+
line,
|
|
69
|
+
stacktrace,
|
|
70
|
+
context
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function processError(error, tag, time) {
|
|
74
|
+
const parsed = parseError(error);
|
|
75
|
+
const message = "string" == typeof error.message && error.message.length > 0 ? error.message : "Error";
|
|
76
|
+
const event = {
|
|
77
|
+
time,
|
|
78
|
+
message,
|
|
79
|
+
stacktrace: parsed.stacktrace,
|
|
80
|
+
stacktraceAsString: error.stack ?? "",
|
|
81
|
+
file: parsed.file,
|
|
82
|
+
line: parsed.line,
|
|
83
|
+
exception: {
|
|
84
|
+
type: error.name,
|
|
85
|
+
message: error.message
|
|
86
|
+
},
|
|
87
|
+
platform: "node",
|
|
88
|
+
sdk: {
|
|
89
|
+
...SDK_IDENTITY
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
if (tag.length > 0) event.dTags = [
|
|
93
|
+
tag
|
|
94
|
+
];
|
|
95
|
+
const fromJson = tryJsonObjectFromMessage(error.message);
|
|
96
|
+
if (fromJson) event.extra = fromJson;
|
|
97
|
+
return event;
|
|
98
|
+
}
|
|
99
|
+
export { parseError, processError };
|
|
@@ -1,48 +1,117 @@
|
|
|
1
1
|
import { logLevel } from "../SDK/index.js";
|
|
2
|
+
import { processError } from "./DuckBugHelper.js";
|
|
2
3
|
import { DuckBugService } from "./DuckBugService.js";
|
|
4
|
+
import { finalizeIngestEvent } from "./finalizeIngestEvent.js";
|
|
3
5
|
class DuckBugProvider {
|
|
4
6
|
service;
|
|
7
|
+
ingestConfig;
|
|
5
8
|
constructor(config){
|
|
9
|
+
this.ingestConfig = config;
|
|
6
10
|
this.service = new DuckBugService(config);
|
|
7
11
|
}
|
|
12
|
+
static fromDSN(dsn) {
|
|
13
|
+
return new DuckBugProvider({
|
|
14
|
+
dsn
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
flush() {
|
|
18
|
+
return this.service.flush();
|
|
19
|
+
}
|
|
20
|
+
sendLog(event, meta) {
|
|
21
|
+
if (meta?.skipPrivacyPipeline) return void this.service.sendLog(event);
|
|
22
|
+
if (this.ingestConfig.beforeSend) return void this.sendLogAsync(event, meta);
|
|
23
|
+
const prepared = finalizeIngestEvent(event, {
|
|
24
|
+
extraSensitiveKeys: this.ingestConfig.extraSensitiveKeys,
|
|
25
|
+
stripSections: this.ingestConfig.stripSections
|
|
26
|
+
});
|
|
27
|
+
this.service.sendLog(prepared);
|
|
28
|
+
}
|
|
29
|
+
sendError(event, meta) {
|
|
30
|
+
if (meta?.skipPrivacyPipeline) return void this.service.sendError(event);
|
|
31
|
+
if (this.ingestConfig.beforeSend) return void this.sendErrorAsync(event, meta);
|
|
32
|
+
const prepared = finalizeIngestEvent(event, {
|
|
33
|
+
extraSensitiveKeys: this.ingestConfig.extraSensitiveKeys,
|
|
34
|
+
stripSections: this.ingestConfig.stripSections
|
|
35
|
+
});
|
|
36
|
+
this.service.sendError(prepared);
|
|
37
|
+
}
|
|
38
|
+
async sendLogAsync(event, _meta) {
|
|
39
|
+
const prepared = finalizeIngestEvent(event, {
|
|
40
|
+
extraSensitiveKeys: this.ingestConfig.extraSensitiveKeys,
|
|
41
|
+
stripSections: this.ingestConfig.stripSections
|
|
42
|
+
});
|
|
43
|
+
const r = await this.ingestConfig.beforeSend?.({
|
|
44
|
+
kind: "log",
|
|
45
|
+
event: prepared
|
|
46
|
+
});
|
|
47
|
+
if (null === r) return;
|
|
48
|
+
const toSend = r ?? prepared;
|
|
49
|
+
this.service.sendLog(toSend);
|
|
50
|
+
}
|
|
51
|
+
async sendErrorAsync(event, _meta) {
|
|
52
|
+
const prepared = finalizeIngestEvent(event, {
|
|
53
|
+
extraSensitiveKeys: this.ingestConfig.extraSensitiveKeys,
|
|
54
|
+
stripSections: this.ingestConfig.stripSections
|
|
55
|
+
});
|
|
56
|
+
const r = await this.ingestConfig.beforeSend?.({
|
|
57
|
+
kind: "error",
|
|
58
|
+
event: prepared
|
|
59
|
+
});
|
|
60
|
+
if (null === r) return;
|
|
61
|
+
const toSend = r ?? prepared;
|
|
62
|
+
this.service.sendError(toSend);
|
|
63
|
+
}
|
|
8
64
|
warn(...args) {
|
|
9
|
-
this.
|
|
65
|
+
this.sendLog({
|
|
10
66
|
time: this.getTimeStamp(),
|
|
11
67
|
level: logLevel.WARN,
|
|
12
68
|
message: this.convertArgsToString(args[0]),
|
|
13
|
-
|
|
69
|
+
...this.normalizedContextPayload(args.slice(1))
|
|
14
70
|
});
|
|
15
71
|
}
|
|
16
72
|
error(...args) {
|
|
17
|
-
this.
|
|
73
|
+
this.sendLog({
|
|
18
74
|
time: this.getTimeStamp(),
|
|
19
75
|
level: logLevel.ERROR,
|
|
20
76
|
message: this.convertArgsToString(args[0]),
|
|
21
|
-
|
|
77
|
+
...this.normalizedContextPayload(args.slice(1))
|
|
22
78
|
});
|
|
23
79
|
}
|
|
24
80
|
log(...args) {
|
|
25
|
-
this.
|
|
81
|
+
this.sendLog({
|
|
26
82
|
time: this.getTimeStamp(),
|
|
27
83
|
level: logLevel.INFO,
|
|
28
84
|
message: this.convertArgsToString(args[0]),
|
|
29
|
-
|
|
85
|
+
...this.normalizedContextPayload(args.slice(1))
|
|
30
86
|
});
|
|
31
87
|
}
|
|
32
88
|
report(tag, level, payload) {
|
|
33
|
-
this.
|
|
89
|
+
this.sendLog({
|
|
34
90
|
time: this.getTimeStamp(),
|
|
35
91
|
level,
|
|
36
92
|
message: tag,
|
|
37
|
-
|
|
93
|
+
...void 0 !== payload ? {
|
|
94
|
+
context: payload
|
|
95
|
+
} : {}
|
|
38
96
|
});
|
|
39
97
|
}
|
|
40
98
|
quack(tag, error) {
|
|
41
|
-
this.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
99
|
+
const errorRequest = processError(error, tag, this.getTimeStamp());
|
|
100
|
+
this.sendError(errorRequest);
|
|
101
|
+
}
|
|
102
|
+
normalizedContextPayload(rest) {
|
|
103
|
+
if (0 === rest.length) return {};
|
|
104
|
+
if (1 === rest.length) {
|
|
105
|
+
const v = rest[0];
|
|
106
|
+
return {
|
|
107
|
+
context: v
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
context: {
|
|
112
|
+
args: rest
|
|
113
|
+
}
|
|
114
|
+
};
|
|
46
115
|
}
|
|
47
116
|
convertArgsToString(...args) {
|
|
48
117
|
return args.map((arg)=>"object" == typeof arg ? JSON.stringify(arg) : String(arg)).join(" ");
|