UNPKG

bugsplat

Version:
101 lines 3.71 kB
import { validateResponseBody, } from './bugsplat-response'; import { isFormDataParamString } from './form-data-param'; export function createStandardizedCallStack(error) { if (!error.stack?.includes('Error:')) { return `Error: ${error.message}\n${error.stack}`; } return error.stack; } export async function tryParseResponseJson(response) { let parsed; try { parsed = await response.json(); } catch (_) { parsed = {}; } return parsed; } const isError = (val) => Boolean(val?.stack); export class BugSplat { database; application; version; _formData = () => new FormData(); _appKey = ''; _description = ''; _email = ''; _user = ''; constructor(database, application, version) { this.database = database; this.application = application; this.version = version; } async post(errorToPost, options) { options = options || {}; const appKey = options.appKey || this._appKey; const user = options.user || this._user; const email = options.email || this._email; const description = options.description || this._description; const additionalFormDataParams = options.additionalFormDataParams || []; const callstack = createStandardizedCallStack(isError(errorToPost) ? errorToPost : new Error(errorToPost)); const url = 'https://' + this.database + '.bugsplat.com/post/js/'; const method = 'POST'; const body = this._formData(); body.append('database', this.database); body.append('appName', this.application); body.append('appVersion', this.version); body.append('appKey', appKey); body.append('user', user); body.append('email', email); body.append('description', description); body.append('callstack', callstack); additionalFormDataParams.forEach((param) => { if (isFormDataParamString(param)) { body.append(param.key, param.value); } else { body.append(param.key, param.value, param.filename); } }); console.log('BugSplat Error:', errorToPost); console.log('BugSplat Url:', url); const response = await globalThis.fetch(url, { method, body }); const json = await tryParseResponseJson(response); console.log('BugSplat POST status code:', response.status); console.log('BugSplat POST response body:', json); if (response.status === 400) { return this._createReturnValue(new Error('BugSplat Error: Bad request'), json, errorToPost); } if (response.status === 429) { return this._createReturnValue(new Error('BugSplat Error: Rate limit of one crash per second exceeded'), json, errorToPost); } if (!response.ok) { return this._createReturnValue(new Error('BugSplat Error: Unknown error'), json, errorToPost); } if (!validateResponseBody(json)) { return this._createReturnValue(new Error('BugSplat Error: Invalid response received'), json, errorToPost); } return this._createReturnValue(null, json, errorToPost); } setDefaultAppKey(appKey) { this._appKey = appKey; } setDefaultDescription(description) { this._description = description; } setDefaultEmail(email) { this._email = email; } setDefaultUser(user) { this._user = user; } _createReturnValue(error, response, original) { return { error, response, original, }; } } //# sourceMappingURL=bugsplat.js.map