import { Event } from './entities/event'; import { Error } from './entities/error'; import { Console } from './entities/console'; import { LogViewModel } from './entities/logViewModel'; import request from './request'; import overrideDom from './override/dom'; import overrideRequest from './override/request'; import overrideTime from './override/time'; import overrideError from './override/error'; import overrideConsole from './override/console'; import { util } from './util'; import { sendSystemInformation } from './system'; import { sendLibraryInformation } from './libraries'; let options = { }; let key = ''; let username = 'None given'; let model: LogViewModel; export function init(options: any) { if (options.apiKey && typeof options.apiKey !== 'string') { throw new Error("API key must be provided and of type string"); } key = options.apiKey; if (options.username) { username = options.username; } request(`session/Create?token=${key}&username=${username}`, data => { let parsedData = JSON.parse(data); model = new LogViewModel(parsedData.id) sendSystemInformation(parsedData.id); sendLibraryInformation(parsedData.id); overrideError(); overrideConsole(); overrideTime('setInterval'); overrideTime('setTimeout'); overrideRequest(); overrideDom('click'); overrideDom('focusout'); }); } export function onConsoleOutput(console: Console) { model.addConsoleEntry(console); } export function onEvent(event: Event) { model.addEvent(event); } export function onError(error: Error) { model.addError(error); request(`log/Create`, (data: any) => { console.log("Log successfully uploaded to the server."); model.clear(); }, model); }