@honeybadger-io/js 5.1.5-alpha-2 → 5.1.7
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/dist/browser/honeybadger-feedback-form.js +278 -0
- package/dist/browser/honeybadger.d.ts +18 -0
- package/dist/browser/honeybadger.js +2217 -0
- package/dist/browser/honeybadger.js.map +1 -0
- package/dist/browser/honeybadger.min.js +2 -0
- package/dist/browser/honeybadger.min.js.map +1 -0
- package/dist/browser/integrations/breadcrumbs.d.ts +3 -0
- package/dist/browser/integrations/event_listeners.d.ts +3 -0
- package/dist/browser/integrations/onerror.d.ts +4 -0
- package/dist/browser/integrations/onunhandledrejection.d.ts +3 -0
- package/dist/browser/integrations/timers.d.ts +3 -0
- package/dist/browser/transport.d.ts +8 -0
- package/dist/browser/util.d.ts +23 -0
- package/dist/server/async_store.d.ts +26 -0
- package/dist/server/aws_lambda.d.ts +10 -0
- package/dist/server/honeybadger.d.ts +21 -0
- package/dist/server/honeybadger.js +1891 -0
- package/dist/server/honeybadger.js.map +1 -0
- package/dist/server/integrations/uncaught_exception.d.ts +3 -0
- package/dist/server/integrations/unhandled_rejection.d.ts +3 -0
- package/dist/server/middleware.d.ts +5 -0
- package/dist/server/stacked_store.d.ts +23 -0
- package/dist/server/transport.d.ts +10 -0
- package/dist/server/util.d.ts +10 -0
- package/honeybadger.d.ts +9 -0
- package/package.json +4 -3
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
(function (window, document) {
|
|
2
|
+
// eslint-disable-next-line quotes
|
|
3
|
+
const TEMPLATE = `<style>
|
|
4
|
+
#honeybadger-feedback-wrapper {
|
|
5
|
+
display: block;
|
|
6
|
+
outline: none;
|
|
7
|
+
position: fixed;
|
|
8
|
+
z-index: 999;
|
|
9
|
+
width: 100%;
|
|
10
|
+
height: 100%;
|
|
11
|
+
text-align: center;
|
|
12
|
+
top: 0;
|
|
13
|
+
left: 0;
|
|
14
|
+
background: rgba(0, 0, 0, 0.6);
|
|
15
|
+
overflow: auto;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
#honeybadger-feedback {
|
|
19
|
+
font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
|
20
|
+
padding: 1em 3em 1em 2em;
|
|
21
|
+
max-width: 400px;
|
|
22
|
+
max-height: 80%;
|
|
23
|
+
margin: 4% auto 0;
|
|
24
|
+
text-align: left;
|
|
25
|
+
background: #1a202c;
|
|
26
|
+
color: #9CA3AF;
|
|
27
|
+
border-radius: 5px;
|
|
28
|
+
}
|
|
29
|
+
#honeybadger-feedback-name, #honeybadger-feedback-email, #honeybadger-feedback-comment { width: 100%; padding: 0.5em; }
|
|
30
|
+
#honeybadger-feedback-comment {
|
|
31
|
+
font-family: inherit;
|
|
32
|
+
height: 10em;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
#honeybadger-feedback-error {
|
|
36
|
+
color: #cc0000;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#honeybadger-feedback-error-detail {
|
|
40
|
+
font-size: small;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.honeybadger-feedback-button {
|
|
44
|
+
color: initial;
|
|
45
|
+
padding: 0.5em 1em;
|
|
46
|
+
cursor: pointer;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.honeybadger-feedback-button.plain {
|
|
50
|
+
text-decoration: underline;
|
|
51
|
+
border: none;
|
|
52
|
+
background: none;
|
|
53
|
+
color: #9CA3AF;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
#honeybadger-feedback-close {
|
|
57
|
+
padding-left: 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
#honeybadger-feedback-footer {
|
|
61
|
+
text-align: right;
|
|
62
|
+
}
|
|
63
|
+
#honeybadger-feedback-footer img {
|
|
64
|
+
vertical-align: middle;
|
|
65
|
+
}
|
|
66
|
+
#honeybadger-feedback-link {
|
|
67
|
+
text-decoration: underline;
|
|
68
|
+
color: #9CA3AF;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@media screen and (max-height: 570px) {
|
|
72
|
+
#honeybadger-feedback {
|
|
73
|
+
max-height: none;
|
|
74
|
+
margin-top: 0;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@media screen and (max-height: 660px) {
|
|
79
|
+
#honeybadger-feedback {
|
|
80
|
+
max-width: none;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
</style>
|
|
84
|
+
|
|
85
|
+
<div id="honeybadger-feedback">
|
|
86
|
+
|
|
87
|
+
<h2 id="honeybadger-feedback-heading">
|
|
88
|
+
Care to help us fix this?
|
|
89
|
+
</h2>
|
|
90
|
+
|
|
91
|
+
<p id="honeybadger-feedback-explanation">
|
|
92
|
+
Any information you can provide will help our technical team get to the bottom of this issue.
|
|
93
|
+
</p>
|
|
94
|
+
|
|
95
|
+
<div id="honeybadger-feedback-thanks" style="display:none;">
|
|
96
|
+
<p><strong>Thanks for the feedback!</strong></p>
|
|
97
|
+
<input type="button" class="honeybadger-feedback-button plain" id="honeybadger-feedback-close" value="Close">
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<form id="honeybadger-feedback-form">
|
|
101
|
+
<p>
|
|
102
|
+
<label for="honeybadger-feedback-name" id="honeybadger-feedback-label-name">
|
|
103
|
+
Name
|
|
104
|
+
</label><br>
|
|
105
|
+
<input type="text" name="name" id="honeybadger-feedback-name">
|
|
106
|
+
</p>
|
|
107
|
+
|
|
108
|
+
<p>
|
|
109
|
+
<label for="honeybadger-feedback-email" id="honeybadger-feedback-label-email">
|
|
110
|
+
Your email address
|
|
111
|
+
</label><br>
|
|
112
|
+
<input type="email" name="email" id="honeybadger-feedback-email" value="">
|
|
113
|
+
</p>
|
|
114
|
+
|
|
115
|
+
<p>
|
|
116
|
+
<label for="honeybadger-feedback-comment" id="honeybadger-feedback-label-comment">
|
|
117
|
+
Comment (required)
|
|
118
|
+
</label><br>
|
|
119
|
+
<textarea name="comment" id="honeybadger-feedback-comment" cols="50" rows="6" required></textarea>
|
|
120
|
+
</p>
|
|
121
|
+
|
|
122
|
+
<p id="honeybadger-feedback-error" style="display: none">
|
|
123
|
+
There was an error. Please try again later.
|
|
124
|
+
<br/>
|
|
125
|
+
<span id="honeybadger-feedback-error-detail"></span>
|
|
126
|
+
</p>
|
|
127
|
+
|
|
128
|
+
<p>
|
|
129
|
+
<input type="submit" class="honeybadger-feedback-button" id="honeybadger-feedback-submit" value="Send">
|
|
130
|
+
<input type="button" class="honeybadger-feedback-button plain" id="honeybadger-feedback-cancel" value="Cancel">
|
|
131
|
+
</p>
|
|
132
|
+
</form>
|
|
133
|
+
|
|
134
|
+
<p id="honeybadger-feedback-footer">
|
|
135
|
+
<a id="honeybadger-feedback-link" href="https://www.honeybadger.io/" target="_blank" title="Exception, uptime, and performance monitoring for PHP.">
|
|
136
|
+
Powered by
|
|
137
|
+
<img src="https://www.honeybadger.io/images/navbar_logo.svg?1670031500" width="100"/>
|
|
138
|
+
</a>
|
|
139
|
+
</p>
|
|
140
|
+
</div>
|
|
141
|
+
`
|
|
142
|
+
const OPTIONS_KEY = 'honeybadgerUserFeedbackOptions'
|
|
143
|
+
|
|
144
|
+
const HoneybadgerUserFeedbackForm = function () {};
|
|
145
|
+
HoneybadgerUserFeedbackForm.prototype.build = function () {
|
|
146
|
+
const self = this
|
|
147
|
+
self.element = document.createElement('div')
|
|
148
|
+
self.element.id = 'honeybadger-feedback-wrapper'
|
|
149
|
+
self.element.innerHTML = TEMPLATE
|
|
150
|
+
self.element.onclick = function (e) {
|
|
151
|
+
if (e.target !== self.element) return;
|
|
152
|
+
self.close();
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
document.body.appendChild(self.element)
|
|
156
|
+
|
|
157
|
+
self.form = self.element.getElementsByTagName('form')[0]
|
|
158
|
+
self.form.addEventListener('submit', function (e) {
|
|
159
|
+
e.preventDefault()
|
|
160
|
+
self.submit()
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
const cancelButton = document.getElementById('honeybadger-feedback-cancel')
|
|
164
|
+
cancelButton.onclick = (e) => {
|
|
165
|
+
e.preventDefault()
|
|
166
|
+
self.close()
|
|
167
|
+
}
|
|
168
|
+
const closeButton = document.getElementById('honeybadger-feedback-close')
|
|
169
|
+
closeButton.onclick = (e) => {
|
|
170
|
+
e.preventDefault()
|
|
171
|
+
self.close()
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
self.applyLabelsFromOptions()
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
HoneybadgerUserFeedbackForm.prototype.applyLabelsFromOptions = function () {
|
|
178
|
+
const self = this
|
|
179
|
+
|
|
180
|
+
const formOptions = self.getOptions()
|
|
181
|
+
const { messages = {}, buttons = {}, labels = {} } = formOptions
|
|
182
|
+
for (let key in messages) {
|
|
183
|
+
const element = document.getElementById(`honeybadger-feedback-${key}`)
|
|
184
|
+
if (element) {
|
|
185
|
+
element.innerText = messages[key]
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
for (let key in labels) {
|
|
189
|
+
const element = document.getElementById(`honeybadger-feedback-label-${key}`)
|
|
190
|
+
if (element) {
|
|
191
|
+
element.innerText = labels[key]
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
for (let key in buttons) {
|
|
195
|
+
const element = document.getElementById(`honeybadger-feedback-${key}`)
|
|
196
|
+
if (element) {
|
|
197
|
+
element.value = buttons[key]
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
HoneybadgerUserFeedbackForm.prototype.close = function () {
|
|
203
|
+
const self = this
|
|
204
|
+
self.element.parentNode.removeChild(self.element);
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
HoneybadgerUserFeedbackForm.prototype.submit = function () {
|
|
208
|
+
const self = this
|
|
209
|
+
if (self.loading) return
|
|
210
|
+
|
|
211
|
+
self.loading = true
|
|
212
|
+
document.getElementById('honeybadger-feedback-error').style.display = 'none'
|
|
213
|
+
document.getElementById('honeybadger-feedback-submit').disabled = true
|
|
214
|
+
|
|
215
|
+
const script = document.createElement('script')
|
|
216
|
+
const form = document.getElementById('honeybadger-feedback-form')
|
|
217
|
+
script.src = self.getEndpoint() +
|
|
218
|
+
'?format=js' +
|
|
219
|
+
`&api_key=${self.getApiKey()}` +
|
|
220
|
+
`&token=${self.getLastNoticeId()}` +
|
|
221
|
+
`&name=${encodeURIComponent(self.form.name.value)}` +
|
|
222
|
+
`&email=${encodeURIComponent(self.form.email.value)}` +
|
|
223
|
+
`&comment=${encodeURIComponent(self.form.comment.value)}`
|
|
224
|
+
script.onerror = function () {
|
|
225
|
+
self.loading = false
|
|
226
|
+
// unfortunately we don't get any info here about the error (i.e. HTTP 403)
|
|
227
|
+
self.onFormError('')
|
|
228
|
+
// remove script so that user can try again
|
|
229
|
+
form.removeChild(script)
|
|
230
|
+
}
|
|
231
|
+
form.appendChild(script);
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
HoneybadgerUserFeedbackForm.prototype.onSuccess = function () {
|
|
235
|
+
document.getElementById('honeybadger-feedback-thanks').style.display = 'block'
|
|
236
|
+
document.getElementById('honeybadger-feedback-form').style.display = 'none'
|
|
237
|
+
document.getElementById('honeybadger-feedback-submit').disabled = false
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
HoneybadgerUserFeedbackForm.prototype.onFormError = function (message) {
|
|
241
|
+
document.getElementById('honeybadger-feedback-error').style.display = 'block'
|
|
242
|
+
document.getElementById('honeybadger-feedback-error-detail').innerText = message
|
|
243
|
+
document.getElementById('honeybadger-feedback-submit').disabled = false
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
HoneybadgerUserFeedbackForm.prototype.getOptions = function () {
|
|
247
|
+
return window[OPTIONS_KEY]
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
HoneybadgerUserFeedbackForm.prototype.getApiKey = function () {
|
|
251
|
+
return this.getOptions().apiKey
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
HoneybadgerUserFeedbackForm.prototype.getLastNoticeId = function () {
|
|
255
|
+
return this.getOptions().noticeId
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
HoneybadgerUserFeedbackForm.prototype.getEndpoint = function () {
|
|
259
|
+
return this.getOptions().endpoint
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
const form = new HoneybadgerUserFeedbackForm()
|
|
263
|
+
form.build()
|
|
264
|
+
|
|
265
|
+
// this function needs to be defined and will be called from the feedback script submission
|
|
266
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
267
|
+
window['honeybadgerFeedbackResponse'] = function honeybadgerFeedbackResponse(data) {
|
|
268
|
+
form.loading = false
|
|
269
|
+
|
|
270
|
+
if (data['result'] === 'OK') {
|
|
271
|
+
form.onSuccess()
|
|
272
|
+
|
|
273
|
+
return
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
form.onFormError(data['error'] || 'An unknown error occurred.')
|
|
277
|
+
}
|
|
278
|
+
})(window, document)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Types, Client } from '@honeybadger-io/core';
|
|
2
|
+
export declare const getUserFeedbackScriptUrl: (version: string) => string;
|
|
3
|
+
declare class Honeybadger extends Client {
|
|
4
|
+
config: Types.BrowserConfig;
|
|
5
|
+
protected __afterNotifyHandlers: Types.AfterNotifyHandler[];
|
|
6
|
+
constructor(opts?: Partial<Types.BrowserConfig>);
|
|
7
|
+
configure(opts?: Partial<Types.BrowserConfig>): this;
|
|
8
|
+
resetMaxErrors(): number;
|
|
9
|
+
factory(opts?: Partial<Types.BrowserConfig>): this;
|
|
10
|
+
checkIn(_id: string): Promise<void>;
|
|
11
|
+
showUserFeedbackForm(options?: Types.UserFeedbackFormOptions): Promise<void>;
|
|
12
|
+
private isUserFeedbackScriptUrlAlreadyVisible;
|
|
13
|
+
private getUserFeedbackSubmitUrl;
|
|
14
|
+
}
|
|
15
|
+
export { Types } from '@honeybadger-io/core';
|
|
16
|
+
declare const _default: Honeybadger;
|
|
17
|
+
export default _default;
|
|
18
|
+
//# sourceMappingURL=browser.d.ts.map
|