{"version":3,"file":"member_js.js","mappings":"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","sources":["webpack://GTTS/./node_modules/base64-js/index.js","webpack://GTTS/./src/js/member/autologin.ts","webpack://GTTS/./src/js/member/courseinactivityredirect.ts","webpack://GTTS/./src/js/member/keepalive.ts","webpack://GTTS/./src/js/member/lessontimer.ts","webpack://GTTS/./src/js/member/memberlesson.ts","webpack://GTTS/./src/js/member/membertimers.ts","webpack://GTTS/./src/js/webauthn/register.ts","webpack://GTTS/./src/js/webauthn/utility.ts","webpack://GTTS/external var \"jQuery\"","webpack://GTTS/webpack/bootstrap","webpack://GTTS/./src/js/member.ts"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","import * as $ from 'jquery';\r\n\r\nexport class AutoLogin {\r\n constructor() {\r\n\r\n }\r\n\r\n tryLogin(): boolean {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const username = urlParams.get('username');\r\n const password = urlParams.get('password');\r\n\r\n if (username && password) {\r\n var $username = $('.login-name-input');\r\n var $password = $('.login-password-input');\r\n var $button = $('.login-page-btn');\r\n $username.val(username);\r\n $password.val(password);\r\n $button.trigger('click');\r\n return true;\r\n }\r\n return false;\r\n }\r\n}","/*\r\n * The class is responsible for redirection to login page after certain amount of seconds. It is used\r\n * in lessons page.\r\n * */\r\nexport class CourseInactivityRedirect {\r\n idleTimeout: number;\r\n idleDurationSeconds: number;\r\n\r\n constructor(idleDurationSeconds: number) {\r\n this.idleDurationSeconds = idleDurationSeconds;\r\n }\r\n\r\n resetIdleTimeout() {\r\n const secs = this.idleDurationSeconds * 1000;\r\n if (this.idleTimeout !== null) {\r\n window.clearTimeout(this.idleTimeout);\r\n }\r\n this.idleTimeout = window.setTimeout(() => {\r\n location.href = 'Login.aspx';\r\n }, secs);\r\n }\r\n\r\n init() {\r\n if (this.idleDurationSeconds < 1) {\r\n return;\r\n }\r\n console.log(`Start lesson inactivity timer ${this.idleDurationSeconds}.`);\r\n\r\n // Key events for reset time.\r\n this.resetIdleTimeout();\r\n window.onmousemove = this.resetIdleTimeout.bind(this);\r\n window.onkeypress = this.resetIdleTimeout.bind(this);\r\n window.onclick = this.resetIdleTimeout.bind(this);\r\n window.ontouchstart = this.resetIdleTimeout.bind(this);\r\n window.onfocus = this.resetIdleTimeout.bind(this);\r\n window.onchange = this.resetIdleTimeout.bind(this);\r\n window.onmouseover = this.resetIdleTimeout.bind(this);\r\n window.onmouseout = this.resetIdleTimeout.bind(this);\r\n window.onmousedown = this.resetIdleTimeout.bind(this);\r\n window.onmouseup = this.resetIdleTimeout.bind(this);\r\n window.onkeypress = this.resetIdleTimeout.bind(this);\r\n window.onkeydown = this.resetIdleTimeout.bind(this);\r\n window.onkeyup = this.resetIdleTimeout.bind(this);\r\n window.onsubmit = this.resetIdleTimeout.bind(this);\r\n window.onreset = this.resetIdleTimeout.bind(this);\r\n window.onselect = this.resetIdleTimeout.bind(this);\r\n window.onscroll = this.resetIdleTimeout.bind(this);\r\n }\r\n}\r\n","import * as $ from 'jquery';\r\n\r\n// Use this on a page a user sits on for a long time to ensure that we don't lose the\r\n// session or authentication\r\nexport class KeepAlive {\r\n handle: number; // set interval handle\r\n\r\n constructor() {\r\n this.handle = 0;\r\n }\r\n\r\n start() {\r\n const self = this;\r\n this.stop();\r\n this.handle = window.setInterval(() => self.ping(), 30000);\r\n }\r\n\r\n stop() {\r\n if (this.handle) {\r\n window.clearInterval(this.handle);\r\n this.handle = 0;\r\n }\r\n }\r\n\r\n ping() {\r\n $.post(\"/member/KeepAlive.ashx\", function (data) {\r\n //console.log(\"Keep Alive: \" + data);\r\n });\r\n }\r\n}\r\n\r\n","import * as $ from 'jquery';\r\n\r\nexport type TimerDoneCallback = () => void;\r\n\r\nexport class LessonTimer {\r\n seconds: number;\r\n timerid: string;\r\n timerDoneFunc: TimerDoneCallback;\r\n $element: JQuery;\r\n\r\n constructor(seconds: number, timerid: string, timerDoneFunc: TimerDoneCallback) {\r\n this.seconds = seconds;\r\n this.timerid = timerid;\r\n this.timerDoneFunc = timerDoneFunc;\r\n this.$element = $('#' + this.timerid);\r\n }\r\n\r\n start() {\r\n const self = this;\r\n (this.$element).countdown(\r\n {\r\n until: self.seconds,\r\n compact: true,\r\n description: '',\r\n format: 'HMS',\r\n onExpiry: function () {\r\n if (self.timerDoneFunc) {\r\n self.timerDoneFunc();\r\n }\r\n }\r\n }\r\n );\r\n };\r\n\r\n formatElement($el: JQuery) {\r\n if (this.$element.length) {\r\n const val = ((this.$element)).countdown('getTimes');\r\n if (val) {\r\n $el.html(val.slice(4, 7).join(':'));\r\n }\r\n }\r\n };\r\n}\r\n","import * as $ from 'jquery';\r\n\r\ndeclare var jwplayer: any;\r\ndeclare var videojs: any;\r\ndeclare var swfobject: any;\r\ndeclare function __doPostBack(eventTarget: string, eventArguments: any);\r\n\r\nimport { LessonSetup } from \"./lessonsetup\";\r\n\r\nexport class MemberLesson {\r\n timerDoneFlag: boolean;\r\n VideoDoneFlag: boolean;\r\n HasVideo: boolean;\r\n updateLessonCurrentValue: number;\r\n isWatchCourseActivity: boolean; // watching course activity?\r\n idleSeconds: number;\r\n nextButtonPostBackId: string;\r\n onTimerExpired;\r\n readonly beaconSupport: boolean; // browser supports beacons?\r\n readonly lessonSetup: LessonSetup;\r\n\r\n constructor(lessonSetup: LessonSetup, onTimerExpired = null) {\r\n this.timerDoneFlag = false;\r\n this.VideoDoneFlag = false;\r\n this.HasVideo = false;\r\n this.updateLessonCurrentValue = 0;\r\n this.isWatchCourseActivity = false;\r\n this.lessonSetup = lessonSetup;\r\n this.onTimerExpired = onTimerExpired;\r\n\r\n if (navigator.sendBeacon) {\r\n this.beaconSupport = true;\r\n } else {\r\n this.beaconSupport = false;\r\n }\r\n\r\n // this doesn't have to be in jquery ready. So don't put any jquery in here\r\n }\r\n\r\n // This must be done in jquery ready\r\n init() {\r\n const self = this;\r\n\r\n $('#enlargeText').on('click', function () {\r\n self.updateLessonFontSize(2);\r\n return false;\r\n });\r\n $('#shrinkText').on('click', function () {\r\n self.updateLessonFontSize(-2);\r\n return false;\r\n });\r\n\r\n $('#siteheader_panelNav a, div.top-links a, #navigation a').on('click', function (e) {\r\n if (!self.checkNavigateAway()) {\r\n e.preventDefault();\r\n }\r\n });\r\n if (this.lessonSetup.lessonInactivityTimerSeconds > 0) {\r\n this.addCourseActivityRestrictions();\r\n }\r\n\r\n // periodic tracking\r\n if (this.lessonSetup.trackActive) {\r\n this.doLessonTrack();\r\n }\r\n }\r\n\r\n /**\r\n * Initiates the tracking of a lesson through a SignalR hub connection.\r\n */\r\n doLessonTrack() {\r\n const lessonId = this.lessonSetup.purchaseItemSchoolLessonID;\r\n const purchaseItemId = this.lessonSetup.purchaseItemID;\r\n const connection = $.hubConnection('/signalr');\r\n const lessonHub = connection.createHubProxy('lesson');\r\n\r\n connection\r\n .start()\r\n .done(function () {\r\n setInterval(function () {\r\n lessonHub.invoke(\"trackLesson\", lessonId, purchaseItemId)\r\n }, 10000);\r\n });\r\n \r\n connection.disconnected(function () {\r\n setTimeout(function() {\r\n connection.start();\r\n }, 5000); // Restart connection after 5 seconds.\r\n })\r\n }\r\n\r\n // Add a course activity restriction\r\n addCourseActivityRestrictions() {\r\n const self = this;\r\n this.isWatchCourseActivity = true;\r\n this.idleSeconds = 0;\r\n\r\n // If we have an inactivity timer, then monitor every second\r\n if (this.lessonSetup.lessonInactivityTimerSeconds > 0) {\r\n setInterval(() => { self.inactivityTimerIncrement(); }, 1000);\r\n }\r\n $(document).on('mousemove keypress mousedown mousewheel scroll', '', function (e) {\r\n self.idleSeconds = 0;\r\n });\r\n\r\n window.addEventListener(\"unload\", () => { self.logUnload(); }, false);\r\n }\r\n\r\n // If we have an unload beacon, then add a log entry\r\n logUnload() {\r\n if (this.isWatchCourseActivity && this.beaconSupport) {\r\n // turned off if timers are elapsed\r\n let data = new FormData();\r\n data.append('pislid', this.lessonSetup.purchaseItemSchoolLessonID.toString());\r\n navigator.sendBeacon(\"/member/TrafficSchoolLessonUnload.ashx\", data);\r\n }\r\n }\r\n\r\n timerDone() {\r\n this.timerDoneFlag = true;\r\n\r\n if (this.lessonSetup.timerSeconds > 0) {\r\n this.doLessonTrack();\r\n\r\n if (this.onTimerExpired !== null) {\r\n this.onTimerExpired();\r\n }\r\n }\r\n }\r\n\r\n timerDoneMax() {\r\n window.location.href = \"TrafficSchoolMaxTime.aspx\";\r\n }\r\n\r\n timerDoneBreak() {\r\n window.location.href = \"TrafficSchoolBreak.aspx\";\r\n }\r\n\r\n timerDoneSecurityQuestions() {\r\n window.location.href = \"TrafficSchoolSecurityQuestion.aspx?timer=1&id=\" + this.lessonSetup.purchaseItemSchoolLessonID;\r\n }\r\n\r\n checkNext(): boolean {\r\n const videosnotdone = this.HasVideo && this.lessonSetup.videoRequireDone && !this.VideoDoneFlag;\r\n if (videosnotdone) {\r\n alert(\"You must watch the entire video before proceeding to the next lesson.\");\r\n return false;\r\n }\r\n\r\n if (this.timerDoneFlag) {\r\n // turn off unload beacon\r\n this.isWatchCourseActivity = false;\r\n return true;\r\n }\r\n else {\r\n const time = $('#lessontimerwarning').html().toLowerCase();\r\n alert('You must spend ' + time + ' on this page.');\r\n return false;\r\n }\r\n }\r\n\r\n videoDone() {\r\n this.VideoDoneFlag = true;\r\n if (this.lessonSetup.autoAdvanceAfterVideo) {\r\n this.clickNextButton();\r\n }\r\n }\r\n\r\n // returns true if we allow the navigation\r\n checkNavigateAway(): boolean {\r\n if (this.timerDoneFlag) {\r\n return confirm(\"You must click the Next button to receive credit for time spent on this page.\\n\\nDo you wish to exit this page anyway? (OK = Yes, Cancel = No)\");\r\n }\r\n else {\r\n if (this.isWatchCourseActivity) {\r\n // special restrictions!\r\n if (confirm(\"Do you wish to exit this page? (OK = Yes, Cancel = No)\")) {\r\n window.location.replace(\"TrafficSchoolLessonTimeout.aspx?reason=redirect\");\r\n }\r\n return false;\r\n }\r\n else {\r\n return confirm(\"Do you wish to exit this page? (OK = Yes, Cancel = No)\");\r\n }\r\n }\r\n }\r\n\r\n // Check to see if there's no activity on the page\r\n inactivityTimerIncrement() {\r\n this.idleSeconds++;\r\n $('#timers-popup').find('dd:eq(5)').html(this.idleSeconds.toString());\r\n if (this.idleSeconds > this.lessonSetup.lessonInactivityTimerSeconds) {\r\n window.location.replace(\"TrafficSchoolLessonTimeout.aspx?reason=timeout\");\r\n }\r\n }\r\n\r\n // jwplayer... obsolete\r\n showVideo(playerid: string, videofilemp4: string, videothumbnail: string, width: number, height: number) {\r\n const self = this;\r\n this.HasVideo = true;\r\n\r\n const setupvideo = {\r\n flashplayer: '/images/jwplayer/jwplayer.flash.swf',\r\n aspectratio: self.getaspectratio(width, height),\r\n width: \"100%\",\r\n image: videothumbnail,\r\n file: videofilemp4,\r\n events: {\r\n onComplete: function () {\r\n self.videoDone();\r\n }\r\n }\r\n };\r\n\r\n jwplayer(playerid).setup(setupvideo);\r\n }\r\n\r\n clickNextButton() {\r\n __doPostBack(this.nextButtonPostBackId, '');\r\n }\r\n\r\n // videojs our current player\r\n showVideoJS(playerid: string) {\r\n const self = this;\r\n this.HasVideo = true;\r\n\r\n const video = videojs(playerid).ready(function () {\r\n const player = this;\r\n\r\n player.on('ended', function () {\r\n self.videoDone();\r\n });\r\n\r\n if (self.lessonSetup.videoRequireDone) {\r\n // disable any clicks in the video control bar if we want them to watch the \r\n // whole thing.\r\n let currentTime = 0;\r\n\r\n player.on(\"seeking\", function (event) {\r\n if (currentTime < player.currentTime()) {\r\n player.currentTime(currentTime);\r\n }\r\n });\r\n\r\n player.on(\"seeked\", function (event) {\r\n if (currentTime < player.currentTime()) {\r\n player.currentTime(currentTime);\r\n }\r\n });\r\n\r\n setInterval(function () {\r\n if (!player.paused()) {\r\n currentTime = player.currentTime();\r\n }\r\n }, 1000);\r\n }\r\n });\r\n }\r\n\r\n gcd_rec(a: number, b: number): number {\r\n if (b) {\r\n return this.gcd_rec(b, a % b);\r\n } else {\r\n return Math.abs(a);\r\n }\r\n }\r\n\r\n getaspectratio(width: number, height: number): string {\r\n const gcd = this.gcd_rec(width, height);\r\n return (width / gcd).toString() + \":\" + (height / gcd).toString();\r\n }\r\n\r\n showReadalong(playerid, audiosource) {\r\n const isMobile = jwplayer.utils.isMobile();\r\n if (isMobile) {\r\n const mobileplayer = $('');\r\n $('#' + playerid).append(mobileplayer); // put it into the DOM\r\n }\r\n else {\r\n jwplayer(playerid).setup(\r\n {\r\n 'id': playerid,\r\n 'wmode': 'transparent',\r\n 'icons': 'true',\r\n 'allowscriptaccess': 'always',\r\n 'allownetworking': 'all',\r\n 'file': audiosource,\r\n 'width': '100%',\r\n 'height': '30',\r\n 'controlbar': 'bottom',\r\n 'dock': 'false',\r\n 'modes': [\r\n\r\n { type: 'flash', src: '/images/jwplayer/jwplayer.flash.swf' },\r\n {\r\n type: 'html5',\r\n config: {\r\n 'file': audiosource,\r\n 'provider': 'sound'\r\n }\r\n }\r\n ]\r\n });\r\n }\r\n }\r\n\r\n updateLessonFontSize(px: number) {\r\n if (this.updateLessonCurrentValue + px > 12 || this.updateLessonCurrentValue + px < -4) {\r\n return;\r\n }\r\n this.updateLessonCurrentValue += px;\r\n\r\n $('.LessonContent').find('div,span,p,li,h1,h2,h3,h4,h5,h6,strong,em').each(function () {\r\n const $this = $(this);\r\n const fontSize = parseFloat($this.css('font-size')) + px;\r\n const lineHeight = parseFloat($this.css('line-height')) + px;\r\n $this.css('font-size', fontSize + 'px');\r\n $this.css('line-height', lineHeight + 'px');\r\n });\r\n }\r\n\r\n setupFlashEdge() {\r\n if (typeof swfobject !== 'undefined' &&\r\n swfobject.getFlashPlayerVersion().major !== 0) {\r\n const $flashdivs = $(\".flash-container\");\r\n $flashdivs.each(function () {\r\n const medianame = $(this).data(\"medianame\");\r\n // find matching edge \r\n const $matchedge = $('.edge-container[data-medianame=\"' + medianame + '\"]');\r\n $matchedge.hide(); // maybe remove from DOM?\r\n });\r\n }\r\n else {\r\n const $edgedivs = $(\".edge-container\");\r\n $edgedivs.each(function () {\r\n const medianame = $(this).data(\"medianame\");\r\n // find matching flash \r\n const $matchflash = $('.flash-container[data-medianame=\"' + medianame + '\"]');\r\n $matchflash.hide(); // maybe remove from DOM?\r\n });\r\n }\r\n }\r\n}\r\n\r\n\r\n","import * as $ from 'jquery';\r\n\r\nimport { LessonTimer, TimerDoneCallback } from './lessontimer';\r\nimport { MemberLesson } from \"./memberlesson\";\r\n\r\nexport class MemberTimers {\r\n lessontimer: LessonTimer;\r\n maxtimer: LessonTimer;\r\n securityquestionstimer: LessonTimer;\r\n breaktimer: LessonTimer;\r\n readonly lesson: MemberLesson;\r\n $divTimersPopup: JQuery;\r\n\r\n constructor(lesson: MemberLesson) {\r\n this.lesson = lesson;\r\n }\r\n\r\n init() {\r\n $(document).on('keypress', function (e) {\r\n if (e.which === 84) { // T\r\n $('#timers-popup').toggle();\r\n }\r\n });\r\n\r\n this.setupPrimary();\r\n this.setupMax();\r\n this.setupBreak();\r\n this.setupSecurityQuestion();\r\n this.setupTexasAmi();\r\n }\r\n\r\n setupPrimary(): boolean {\r\n const seconds = this.lesson.lessonSetup.timerSeconds;\r\n\r\n const self = this;\r\n if (seconds > 0) {\r\n this.lessontimer = new LessonTimer(seconds, 'lessontimer', () => self.lesson.timerDone());\r\n this.lessontimer.start();\r\n const lessontimertop = new LessonTimer(seconds, 'lessontimertop', null);\r\n lessontimertop.start();\r\n const lessontimerwarning = new LessonTimer(seconds, 'lessontimerwarning', null);\r\n lessontimerwarning.start();\r\n const $warning = $('#lessontimerwarning');\r\n ($warning).countdown('option', 'layout', '{h<}{hn} {hl}{h>} {m<}{mn} {ml}{m>} {s<}{sn} {sl}{s>}');\r\n ($warning).countdown('option', 'format', 'hMS');\r\n ($warning).countdown('option', 'compact', false);\r\n\r\n return true;\r\n }\r\n else {\r\n $('#lessontimerarea, #lessontimerrequiredarea').hide();\r\n if (self.lesson.timerDone) {\r\n self.lesson.timerDone();\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n setupMax(): boolean {\r\n const self = this;\r\n const seconds = this.lesson.lessonSetup.maxTimerSeconds;\r\n if (seconds > 0) {\r\n this.maxtimer = new LessonTimer(seconds, 'maxtimer', ()=>self.lesson.timerDoneMax());\r\n this.maxtimer.start();\r\n return true;\r\n } else {\r\n $('#maxtimerarea').hide();\r\n return false;\r\n }\r\n }\r\n\r\n setupSecurityQuestion(): boolean {\r\n const self = this;\r\n const seconds = this.lesson.lessonSetup.securityQuestionsTimerSeconds;\r\n if (seconds > 0) {\r\n this.securityquestionstimer = new LessonTimer(seconds, 'securityquestionstimer',\r\n ()=>self.lesson.timerDoneSecurityQuestions());\r\n this.securityquestionstimer.start();\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n setupBreak(): boolean {\r\n const seconds = this.lesson.lessonSetup.breakTimerSeconds;\r\n const self = this;\r\n if (seconds > 0) {\r\n this.breaktimer = new LessonTimer(seconds, 'breaktimer', ()=>self.lesson.timerDoneBreak());\r\n this.breaktimer.start();\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n setupTexasAmi() {\r\n const self = this;\r\n const amims = this.lesson.lessonSetup.texasAmiSeconds;\r\n if (amims > 0) {\r\n setInterval(function () {\r\n const url = \"/Services/AmiTimer.ashx?ms=\" + amims + \"&pid=\" +\r\n self.lesson.lessonSetup.purchaseItemID + \"&slid=\" + self.lesson.lessonSetup.schoolLessonID;\r\n $.post(url, function (data) {\r\n\r\n });\r\n }, amims);\r\n }\r\n }\r\n\r\n setupDebugTimerPopup() {\r\n this.$divTimersPopup = $('#timers-popup');\r\n const self = this;\r\n setInterval(() => self.updateDebugTimerPopup(), 1000);\r\n }\r\n\r\n updateDebugTimerPopup() {\r\n if (!this.$divTimersPopup.is(':visible')) {\r\n return;\r\n }\r\n if (this.lessontimer) {\r\n this.lessontimer.formatElement(this.$divTimersPopup.find('dd:eq(0)'));\r\n }\r\n if (this.maxtimer) {\r\n this.maxtimer.formatElement(this.$divTimersPopup.find('dd:eq(1)'));\r\n }\r\n if (this.breaktimer) {\r\n this.breaktimer.formatElement(this.$divTimersPopup.find('dd:eq(3)'));\r\n }\r\n if (this.securityquestionstimer) {\r\n this.securityquestionstimer.formatElement(this.$divTimersPopup.find('dd:eq(4)'));\r\n }\r\n }\r\n}\r\n","import * as $ from 'jquery';\r\nimport { string2buffer, bufferEncode, coerceToArrayBuffer, coercebase64, coerceToBase64Url } from \"./utility\"\r\nvar base64js = require('base64-js');\r\n\r\ntype showerror = (msg: string, error?) => void;\r\n\r\nexport async function webAuthnLogin(makeAssertionOptions, showErrorAlert: showerror): Promise {\r\n const makeAssertionCopy = JSON.parse(JSON.stringify(makeAssertionOptions));\r\n makeAssertionCopy.challenge = coercebase64(makeAssertionCopy.challenge);\r\n makeAssertionCopy.allowCredentials.forEach(function (listItem) {\r\n listItem.id = coercebase64(listItem.id);\r\n });\r\n\r\n console.log(\"Assertion options\", makeAssertionCopy);\r\n let credential;\r\n try {\r\n credential = await navigator.credentials.get({ publicKey: makeAssertionCopy })\r\n } catch (err) {\r\n showErrorAlert(err.message ? err.message : err);\r\n return false;\r\n }\r\n console.log(\"Need to verify with server\");\r\n var result = await webAuthnVerify(credential, showErrorAlert);\r\n return result;\r\n}\r\n\r\nasync function webAuthnVerify(assertedCredential, showErrorAlert: showerror): Promise {\r\n const authData = new Uint8Array(assertedCredential.response.authenticatorData);\r\n const clientDataJSON = new Uint8Array(assertedCredential.response.clientDataJSON);\r\n const rawId = new Uint8Array(assertedCredential.rawId);\r\n const sig = new Uint8Array(assertedCredential.response.signature);\r\n const data = {\r\n id: assertedCredential.id,\r\n rawId: coerceToBase64Url(rawId),\r\n type: assertedCredential.type,\r\n extensions: assertedCredential.getClientExtensionResults(),\r\n response: {\r\n authenticatorData: coerceToBase64Url(authData),\r\n clientDataJson: coerceToBase64Url(clientDataJSON),\r\n signature: coerceToBase64Url(sig)\r\n }\r\n };\r\n\r\n let response;\r\n try {\r\n const res = await fetch(\"/services/webauthnverify.ashx\", {\r\n method: 'POST', // or 'PUT'\r\n body: JSON.stringify(data), // data can be `string` or {object}!\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n response = await res.json();\r\n //console.log(\"Verification response:\");\r\n //console.log(response);\r\n } catch (e) {\r\n showErrorAlert(\"Request to server failed\", e);\r\n return false;\r\n }\r\n\r\n // show error\r\n if (response.status !== \"ok\") {\r\n console.log(\"Error doing assertion\");\r\n console.log(response.errorMessage);\r\n showErrorAlert(response.errorMessage);\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport async function webAuthnRegister(makeCredentialOptions):Promise {\r\n // ensure we can try again if necessary\r\n const makeCredentialCopy = JSON.parse(JSON.stringify(makeCredentialOptions));\r\n\r\n // Turn the challenge back into the accepted format of padded base64\r\n makeCredentialCopy.challenge = coerceToArrayBuffer(makeCredentialOptions.challenge);\r\n // Turn ID into a UInt8Array Buffer for some reason\r\n makeCredentialCopy.user.id = coerceToArrayBuffer(makeCredentialCopy.user.id);\r\n\r\n makeCredentialCopy.excludeCredentials = makeCredentialCopy.excludeCredentials.map((c) => {\r\n c.id = coerceToArrayBuffer(c.id);\r\n return c;\r\n });\r\n\r\n console.log(\"Credential Options Formatted\");\r\n console.log(makeCredentialCopy);\r\n\r\n //fulloptions.user.id = base64url.decode(fulloptions.user.id);\r\n //fulloptions.challenge = base64url.decode(fulloptions.challenge);\r\n const cred = await navigator.credentials.create({\r\n publicKey: makeCredentialCopy,\r\n });\r\n\r\n return cred;\r\n}\r\n\r\nexport async function webAuthnSave(newCredential): Promise {\r\n const attestationObject = new Uint8Array(newCredential.response.attestationObject);\r\n const clientDataJSON = new Uint8Array(newCredential.response.clientDataJSON);\r\n const rawId = new Uint8Array(newCredential.rawId);\r\n\r\n const data = {\r\n id: newCredential.id,\r\n rawId: base64js.fromByteArray(rawId),\r\n type: newCredential.type,\r\n extensions: newCredential.getClientExtensionResults(),\r\n response: {\r\n AttestationObject: base64js.fromByteArray(attestationObject),\r\n clientDataJson: base64js.fromByteArray(clientDataJSON)\r\n }\r\n };\r\n\r\n // Set the hidden field to the credential ID so it's saved upon submission\r\n\r\n console.log(\"Sending:\")\r\n console.log(data);\r\n const response = await fetch('/services/webauthnsave.ashx', {\r\n method: 'POST', // or 'PUT'\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(data),\r\n });\r\n\r\n if (response.ok) {\r\n const responseData = await response.json();\r\n const saveData = responseData.Result.User.name;\r\n console.log(\"Saving \" + saveData);\r\n $(\"#authcred\").val(saveData);\r\n\r\n return responseData;\r\n }\r\n else {\r\n return null;\r\n }\r\n}","import * as $ from 'jquery';\r\nvar base64js = require('base64-js');\r\n\r\nexport function webAuthnDetectSupport(): boolean {\r\n if (window.PublicKeyCredential === undefined ||\r\n typeof window.PublicKeyCredential !== \"function\") {\r\n var errorMessage = \"Oh no! This browser doesn't currently support WebAuthn.\"\r\n if (window.location.protocol === \"http:\" && (window.location.hostname !== \"localhost\" && window.location.hostname !== \"127.0.0.1\")) {\r\n errorMessage = \"WebAuthn only supports secure connections. For testing over HTTP, you can use the origin \\\"localhost\\\".\"\r\n }\r\n console.log (errorMessage);\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function string2buffer(str:string): Uint8Array {\r\n return (new Uint8Array(str.length)).map(function (x, i) {\r\n return str.charCodeAt(i)\r\n });\r\n}\r\n\r\n// Encode an ArrayBuffer into a base64 string.\r\nexport function bufferEncode(value: Uint8Array):string {\r\n return base64js.fromByteArray(value)\r\n .replace(/\\+/g, \"-\")\r\n .replace(/\\//g, \"_\")\r\n .replace(/=/g, \"\");\r\n}\r\n\r\n// Don't drop any blanks\r\n// decode\r\nexport function bufferDecode(value: string): Uint8Array {\r\n return Uint8Array.from(atob(value), c => c.charCodeAt(0));\r\n}\r\n\r\nexport function buffer2string(buf):string {\r\n if (!(buf.constructor === Uint8Array)) {\r\n buf = new Uint8Array(buf);\r\n }\r\n let str = \"\";\r\n buf.map(function (x) {\r\n return str += String.fromCharCode(x)\r\n });\r\n return str;\r\n}\r\n\r\nexport function coerceToArrayBuffer(thing, name?) {\r\n if (typeof thing === \"string\") {\r\n // base64url to base64\r\n thing = thing.replace(/-/g, \"+\").replace(/_/g, \"/\");\r\n\r\n // base64 to Uint8Array\r\n var str = window.atob(thing);\r\n var bytes = new Uint8Array(str.length);\r\n for (var i = 0; i < str.length; i++) {\r\n bytes[i] = str.charCodeAt(i);\r\n }\r\n thing = bytes;\r\n }\r\n\r\n // Array to Uint8Array\r\n if (Array.isArray(thing)) {\r\n thing = new Uint8Array(thing);\r\n }\r\n\r\n // Uint8Array to ArrayBuffer\r\n if (thing instanceof Uint8Array) {\r\n thing = thing.buffer;\r\n }\r\n\r\n // error if none of the above worked\r\n if (!(thing instanceof ArrayBuffer)) {\r\n throw new TypeError(\"could not coerce '\" + name + \"' to ArrayBuffer\");\r\n }\r\n\r\n return thing;\r\n};\r\n\r\n\r\nexport function coerceToBase64Url(thing) {\r\n // Array or ArrayBuffer to Uint8Array\r\n if (Array.isArray(thing)) {\r\n thing = Uint8Array.from(thing);\r\n }\r\n\r\n if (thing instanceof ArrayBuffer) {\r\n thing = new Uint8Array(thing);\r\n }\r\n\r\n // Uint8Array to base64\r\n if (thing instanceof Uint8Array) {\r\n var str = \"\";\r\n var len = thing.byteLength;\r\n\r\n for (var i = 0; i < len; i++) {\r\n str += String.fromCharCode(thing[i]);\r\n }\r\n thing = window.btoa(str);\r\n }\r\n\r\n if (typeof thing !== \"string\") {\r\n throw new Error(\"could not coerce to string\");\r\n }\r\n\r\n // base64 to base64url\r\n // NOTE: \"=\" at the end of challenge is optional, strip it off here\r\n thing = thing.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=*$/g, \"\");\r\n\r\n return thing;\r\n};\r\n\r\n\r\n// This doesn't actually coerce anything.. assumes a string input\r\nexport function coercebase64(thing:string): Uint8Array {\r\n const challenge = thing.replace(/-/g, \"+\").replace(/_/g, \"/\");\r\n return Uint8Array.from(atob(challenge), c => c.charCodeAt(0))\r\n};\r\n\r\n","module.exports = jQuery;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","export { MemberTimers } from './member/membertimers';\r\nexport { MemberLesson } from './member/memberlesson';\r\nexport { KeepAlive } from './member/keepalive';\r\nexport { AutoLogin } from './member/autologin';\r\nexport { CourseInactivityRedirect } from './member/courseinactivityredirect';\r\n\r\n// related to biometric logins\r\nexport { webAuthnDetectSupport } from './webauthn/utility';\r\nexport { webAuthnRegister, webAuthnSave, webAuthnLogin } from './webauthn/register';\r\n\r\n//export { initCourseActivity } from './member/courseactivity';\r\n"],"names":["exports","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","tryLogin","urlParams","URLSearchParams","window","location","search","username","get","password","$username","$","$password","$button","val","trigger","AutoLogin","idleDurationSeconds","this","resetIdleTimeout","secs","idleTimeout","clearTimeout","setTimeout","href","init","console","log","onmousemove","bind","onkeypress","onclick","ontouchstart","onfocus","onchange","onmouseover","onmouseout","onmousedown","onmouseup","onkeydown","onkeyup","onsubmit","onreset","onselect","onscroll","CourseInactivityRedirect","handle","self","stop","setInterval","ping","clearInterval","post","data","KeepAlive","seconds","timerid","timerDoneFunc","$element","countdown","until","compact","description","format","onExpiry","formatElement","$el","html","slice","LessonTimer","lessonSetup","onTimerExpired","timerDoneFlag","VideoDoneFlag","HasVideo","updateLessonCurrentValue","isWatchCourseActivity","navigator","sendBeacon","beaconSupport","on","updateLessonFontSize","e","checkNavigateAway","preventDefault","lessonInactivityTimerSeconds","addCourseActivityRestrictions","trackActive","doLessonTrack","lessonId","purchaseItemSchoolLessonID","purchaseItemId","purchaseItemID","connection","hubConnection","lessonHub","createHubProxy","done","invoke","disconnected","idleSeconds","inactivityTimerIncrement","document","addEventListener","logUnload","FormData","append","toString","timerDone","timerSeconds","timerDoneMax","timerDoneBreak","timerDoneSecurityQuestions","checkNext","videoRequireDone","alert","time","toLowerCase","videoDone","autoAdvanceAfterVideo","clickNextButton","confirm","replace","find","showVideo","playerid","videofilemp4","videothumbnail","width","height","setupvideo","flashplayer","aspectratio","getaspectratio","image","file","events","onComplete","jwplayer","setup","__doPostBack","nextButtonPostBackId","showVideoJS","videojs","ready","player","event","currentTime","paused","gcd_rec","a","b","Math","abs","gcd","showReadalong","audiosource","utils","isMobile","mobileplayer","type","src","config","px","each","$this","fontSize","parseFloat","css","lineHeight","setupFlashEdge","swfobject","getFlashPlayerVersion","major","medianame","hide","MemberLesson","lesson","which","toggle","setupPrimary","setupMax","setupBreak","setupSecurityQuestion","setupTexasAmi","lessontimer","$warning","maxTimerSeconds","maxtimer","securityQuestionsTimerSeconds","securityquestionstimer","breakTimerSeconds","breaktimer","amims","texasAmiSeconds","url","schoolLessonID","setupDebugTimerPopup","$divTimersPopup","updateDebugTimerPopup","is","MemberTimers","base64js","webAuthnVerify","assertedCredential","showErrorAlert","authData","response","authenticatorData","clientDataJSON","rawId","sig","signature","id","coerceToBase64Url","extensions","getClientExtensionResults","clientDataJson","fetch","method","body","JSON","stringify","headers","json","status","errorMessage","makeAssertionOptions","makeAssertionCopy","parse","challenge","coercebase64","allowCredentials","forEach","listItem","credentials","publicKey","credential","message","makeCredentialOptions","makeCredentialCopy","coerceToArrayBuffer","user","excludeCredentials","map","c","create","newCredential","attestationObject","AttestationObject","ok","responseData","saveData","Result","User","name","undefined","PublicKeyCredential","protocol","hostname","str","x","value","from","atob","buf","constructor","String","fromCharCode","thing","bytes","isArray","buffer","ArrayBuffer","TypeError","btoa","module","jQuery","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call","webAuthnDetectSupport","webAuthnRegister","webAuthnSave","webAuthnLogin"],"sourceRoot":""}