From 80c3f6565e586589aa0e51f72aa98f88949802cd Mon Sep 17 00:00:00 2001 From: James Cook Date: Tue, 24 May 2022 22:02:27 +0100 Subject: [PATCH] fix: login --- build/classcharts-api.js | 2 +- build/classcharts-api.map | 2 +- package.json | 8 ++++++-- src/studentClient.ts | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/build/classcharts-api.js b/build/classcharts-api.js index 37e2b46..1fc0505 100644 --- a/build/classcharts-api.js +++ b/build/classcharts-api.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.classchartsapi=t():e.classchartsapi=t()}(self,(function(){return e={669:(e,t,r)=>{e.exports=r(609)},448:(e,t,r)=>{"use strict";var n=r(867),s=r(26),o=r(372),i=r(327),a=r(97),u=r(109),c=r(985),d=r(61),f=r(874),l=r(263);e.exports=function(e){return new Promise((function(t,r){var p,h=e.data,m=e.headers,g=e.responseType;function v(){e.cancelToken&&e.cancelToken.unsubscribe(p),e.signal&&e.signal.removeEventListener("abort",p)}n.isFormData(h)&&delete m["Content-Type"];var y=new XMLHttpRequest;if(e.auth){var w=e.auth.username||"",S=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";m.Authorization="Basic "+btoa(w+":"+S)}var b=a(e.baseURL,e.url);function E(){if(y){var n="getAllResponseHeaders"in y?u(y.getAllResponseHeaders()):null,o={data:g&&"text"!==g&&"json"!==g?y.response:y.responseText,status:y.status,statusText:y.statusText,headers:n,config:e,request:y};s((function(e){t(e),v()}),(function(e){r(e),v()}),o),y=null}}if(y.open(e.method.toUpperCase(),i(b,e.params,e.paramsSerializer),!0),y.timeout=e.timeout,"onloadend"in y?y.onloadend=E:y.onreadystatechange=function(){y&&4===y.readyState&&(0!==y.status||y.responseURL&&0===y.responseURL.indexOf("file:"))&&setTimeout(E)},y.onabort=function(){y&&(r(d("Request aborted",e,"ECONNABORTED",y)),y=null)},y.onerror=function(){r(d("Network Error",e,null,y)),y=null},y.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||f;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(d(t,e,n.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",y)),y=null},n.isStandardBrowserEnv()){var x=(e.withCredentials||c(b))&&e.xsrfCookieName?o.read(e.xsrfCookieName):void 0;x&&(m[e.xsrfHeaderName]=x)}"setRequestHeader"in y&&n.forEach(m,(function(e,t){void 0===h&&"content-type"===t.toLowerCase()?delete m[t]:y.setRequestHeader(t,e)})),n.isUndefined(e.withCredentials)||(y.withCredentials=!!e.withCredentials),g&&"json"!==g&&(y.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&y.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&y.upload&&y.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(p=function(e){y&&(r(!e||e&&e.type?new l("canceled"):e),y.abort(),y=null)},e.cancelToken&&e.cancelToken.subscribe(p),e.signal&&(e.signal.aborted?p():e.signal.addEventListener("abort",p))),h||(h=null),y.send(h)}))}},609:(e,t,r)=>{"use strict";var n=r(867),s=r(849),o=r(321),i=r(185),a=function e(t){var r=new o(t),a=s(o.prototype.request,r);return n.extend(a,o.prototype,r),n.extend(a,r),a.create=function(r){return e(i(t,r))},a}(r(546));a.Axios=o,a.Cancel=r(263),a.CancelToken=r(972),a.isCancel=r(502),a.VERSION=r(288).version,a.all=function(e){return Promise.all(e)},a.spread=r(713),a.isAxiosError=r(268),e.exports=a,e.exports.default=a},263:e=>{"use strict";function t(e){this.message=e}t.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},t.prototype.__CANCEL__=!0,e.exports=t},972:(e,t,r)=>{"use strict";var n=r(263);function s(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;this.promise.then((function(e){if(r._listeners){var t,n=r._listeners.length;for(t=0;t{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,t,r)=>{"use strict";var n=r(867),s=r(327),o=r(782),i=r(572),a=r(185),u=r(875),c=u.validators;function d(e){this.defaults=e,this.interceptors={request:new o,response:new o}}d.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=a(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var r=t.transitional;void 0!==r&&u.assertOptions(r,{silentJSONParsing:c.transitional(c.boolean),forcedJSONParsing:c.transitional(c.boolean),clarifyTimeoutError:c.transitional(c.boolean)},!1);var n=[],s=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var o,d=[];if(this.interceptors.response.forEach((function(e){d.push(e.fulfilled,e.rejected)})),!s){var f=[i,void 0];for(Array.prototype.unshift.apply(f,n),f=f.concat(d),o=Promise.resolve(t);f.length;)o=o.then(f.shift(),f.shift());return o}for(var l=t;n.length;){var p=n.shift(),h=n.shift();try{l=p(l)}catch(e){h(e);break}}try{o=i(l)}catch(e){return Promise.reject(e)}for(;d.length;)o=o.then(d.shift(),d.shift());return o},d.prototype.getUri=function(e){return e=a(this.defaults,e),s(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},n.forEach(["delete","get","head","options"],(function(e){d.prototype[e]=function(t,r){return this.request(a(r||{},{method:e,url:t,data:(r||{}).data}))}})),n.forEach(["post","put","patch"],(function(e){d.prototype[e]=function(t,r,n){return this.request(a(n||{},{method:e,url:t,data:r}))}})),e.exports=d},782:(e,t,r)=>{"use strict";var n=r(867);function s(){this.handlers=[]}s.prototype.use=function(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1},s.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},s.prototype.forEach=function(e){n.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=s},97:(e,t,r)=>{"use strict";var n=r(793),s=r(303);e.exports=function(e,t){return e&&!n(t)?s(e,t):t}},61:(e,t,r)=>{"use strict";var n=r(481);e.exports=function(e,t,r,s,o){var i=new Error(e);return n(i,t,r,s,o)}},572:(e,t,r)=>{"use strict";var n=r(867),s=r(527),o=r(502),i=r(546),a=r(263);function u(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new a("canceled")}e.exports=function(e){return u(e),e.headers=e.headers||{},e.data=s.call(e,e.data,e.headers,e.transformRequest),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),n.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||i.adapter)(e).then((function(t){return u(e),t.data=s.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return o(t)||(u(e),t&&t.response&&(t.response.data=s.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},481:e=>{"use strict";e.exports=function(e,t,r,n,s){return e.config=t,r&&(e.code=r),e.request=n,e.response=s,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},e}},185:(e,t,r)=>{"use strict";var n=r(867);e.exports=function(e,t){t=t||{};var r={};function s(e,t){return n.isPlainObject(e)&&n.isPlainObject(t)?n.merge(e,t):n.isPlainObject(t)?n.merge({},t):n.isArray(t)?t.slice():t}function o(r){return n.isUndefined(t[r])?n.isUndefined(e[r])?void 0:s(void 0,e[r]):s(e[r],t[r])}function i(e){if(!n.isUndefined(t[e]))return s(void 0,t[e])}function a(r){return n.isUndefined(t[r])?n.isUndefined(e[r])?void 0:s(void 0,e[r]):s(void 0,t[r])}function u(r){return r in t?s(e[r],t[r]):r in e?s(void 0,e[r]):void 0}var c={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:u};return n.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=c[e]||o,s=t(e);n.isUndefined(s)&&t!==u||(r[e]=s)})),r}},26:(e,t,r)=>{"use strict";var n=r(61);e.exports=function(e,t,r){var s=r.config.validateStatus;r.status&&s&&!s(r.status)?t(n("Request failed with status code "+r.status,r.config,null,r.request,r)):e(r)}},527:(e,t,r)=>{"use strict";var n=r(867),s=r(546);e.exports=function(e,t,r){var o=this||s;return n.forEach(r,(function(r){e=r.call(o,e,t)})),e}},546:(e,t,r)=>{"use strict";var n=r(867),s=r(16),o=r(481),i=r(874),a={"Content-Type":"application/x-www-form-urlencoded"};function u(e,t){!n.isUndefined(e)&&n.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var c,d={transitional:i,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(c=r(448)),c),transformRequest:[function(e,t){return s(t,"Accept"),s(t,"Content-Type"),n.isFormData(e)||n.isArrayBuffer(e)||n.isBuffer(e)||n.isStream(e)||n.isFile(e)||n.isBlob(e)?e:n.isArrayBufferView(e)?e.buffer:n.isURLSearchParams(e)?(u(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):n.isObject(e)||t&&"application/json"===t["Content-Type"]?(u(t,"application/json"),function(e,t,r){if(n.isString(e))try{return(0,JSON.parse)(e),n.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||d.transitional,r=t&&t.silentJSONParsing,s=t&&t.forcedJSONParsing,i=!r&&"json"===this.responseType;if(i||s&&n.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(i){if("SyntaxError"===e.name)throw o(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],(function(e){d.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){d.headers[e]=n.merge(a)})),e.exports=d},874:e=>{"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},288:e=>{e.exports={version:"0.26.1"}},849:e=>{"use strict";e.exports=function(e,t){return function(){for(var r=new Array(arguments.length),n=0;n{"use strict";var n=r(867);function s(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,r){if(!t)return e;var o;if(r)o=r(t);else if(n.isURLSearchParams(t))o=t.toString();else{var i=[];n.forEach(t,(function(e,t){null!=e&&(n.isArray(e)?t+="[]":e=[e],n.forEach(e,(function(e){n.isDate(e)?e=e.toISOString():n.isObject(e)&&(e=JSON.stringify(e)),i.push(s(t)+"="+s(e))})))})),o=i.join("&")}if(o){var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}},303:e=>{"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},372:(e,t,r)=>{"use strict";var n=r(867);e.exports=n.isStandardBrowserEnv()?{write:function(e,t,r,s,o,i){var a=[];a.push(e+"="+encodeURIComponent(t)),n.isNumber(r)&&a.push("expires="+new Date(r).toGMTString()),n.isString(s)&&a.push("path="+s),n.isString(o)&&a.push("domain="+o),!0===i&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},793:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},268:(e,t,r)=>{"use strict";var n=r(867);e.exports=function(e){return n.isObject(e)&&!0===e.isAxiosError}},985:(e,t,r)=>{"use strict";var n=r(867);e.exports=n.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a");function s(e){var n=e;return t&&(r.setAttribute("href",n),n=r.href),r.setAttribute("href",n),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:"/"===r.pathname.charAt(0)?r.pathname:"/"+r.pathname}}return e=s(window.location.href),function(t){var r=n.isString(t)?s(t):t;return r.protocol===e.protocol&&r.host===e.host}}():function(){return!0}},16:(e,t,r)=>{"use strict";var n=r(867);e.exports=function(e,t){n.forEach(e,(function(r,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=r,delete e[n])}))}},109:(e,t,r)=>{"use strict";var n=r(867),s=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,r,o,i={};return e?(n.forEach(e.split("\n"),(function(e){if(o=e.indexOf(":"),t=n.trim(e.substr(0,o)).toLowerCase(),r=n.trim(e.substr(o+1)),t){if(i[t]&&s.indexOf(t)>=0)return;i[t]="set-cookie"===t?(i[t]?i[t]:[]).concat([r]):i[t]?i[t]+", "+r:r}})),i):i}},713:e=>{"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},875:(e,t,r)=>{"use strict";var n=r(288).version,s={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){s[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));var o={};s.transitional=function(e,t,r){function s(e,t){return"[Axios v"+n+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return function(r,n,i){if(!1===e)throw new Error(s(n," has been removed"+(t?" in "+t:"")));return t&&!o[n]&&(o[n]=!0,console.warn(s(n," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,n,i)}},e.exports={assertOptions:function(e,t,r){if("object"!=typeof e)throw new TypeError("options must be an object");for(var n=Object.keys(e),s=n.length;s-- >0;){var o=n[s],i=t[o];if(i){var a=e[o],u=void 0===a||i(a,o,e);if(!0!==u)throw new TypeError("option "+o+" must be "+u)}else if(!0!==r)throw Error("Unknown option "+o)}},validators:s}},867:(e,t,r)=>{"use strict";var n=r(849),s=Object.prototype.toString;function o(e){return Array.isArray(e)}function i(e){return void 0===e}function a(e){return"[object ArrayBuffer]"===s.call(e)}function u(e){return null!==e&&"object"==typeof e}function c(e){if("[object Object]"!==s.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function d(e){return"[object Function]"===s.call(e)}function f(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),o(e))for(var r=0,n=e.length;r!0},n=(await this.axios.request(r)).data;if(0==n.success)throw new Error(n.error);return n.data}async getStudentInfo(){return(await this.makeAuthedRequest(this.API_BASE+"/ping",{method:"POST",data:"include_data=true"}))?.user}async getActivity(e){const t=new URLSearchParams;return e?.from&&t.append("from",e?.from),e?.to&&t.append("to",e?.to),e?.last_id&&t.append("last_id",e?.last_id),this.makeAuthedRequest(this.API_BASE+"/activity/"+this.studentId+"?"+t.toString(),{method:"GET"})}async getFullActivity(e){let t,r=[],n=!0;for(;n;){const s={from:e.from,to:e.to};t&&(s.last_id=String(t));const o=await this.getActivity(s);o&&o.length?(r=r.concat(o),t=o[o.length-1].id):n=!1}return r}async getBehaviour(e){const t=new URLSearchParams;return e?.from&&t.append("from",e?.from),e?.to&&t.append("to",e?.to),await this.makeAuthedRequest(this.API_BASE+"/behaviour/"+this.studentId+"?"+t.toString(),{method:"GET"})}async listHomeworks(e){const t=new URLSearchParams;e?.displayDate&&t.append("display_date",String(e?.displayDate)),e?.fromDate&&t.append("from",String(e?.fromDate)),e?.toDate&&t.append("to",String(e?.toDate));const r=await this.makeAuthedRequest(this.API_BASE+"/homeworks/"+this.studentId+"?"+t.toString(),{method:"GET"});for(let e=0;e]+)>)/gi,""),r[e].description=r[e].description.replace(/ /g,""),r[e].description=r[e].description.trim();return r}async getLessons(e){if(!e?.date)throw new Error("No date specified");const t=new URLSearchParams;return t.append("date",String(e?.date)),await this.makeAuthedRequest(this.API_BASE+"/timetable/"+this.studentId+"?"+t.toString(),{method:"GET"})}async getBadges(){return await this.makeAuthedRequest(this.API_BASE+"/eventbadges/"+this.studentId,{method:"GET"})}async listAnnouncements(){return await this.makeAuthedRequest(this.API_BASE+"/announcements/"+this.studentId,{method:"GET"})}async getDetentions(){return await this.makeAuthedRequest(this.API_BASE+"/detentions/"+this.studentId,{method:"GET"})}}},312:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.API_BASE_PARENT=t.API_BASE_STUDENT=t.BASE_URL=void 0,t.BASE_URL="https://www.classcharts.com",t.API_BASE_STUDENT=`${t.BASE_URL}/apiv2student`,t.API_BASE_PARENT=`${t.BASE_URL}/apiv2parent`},607:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var s=Object.getOwnPropertyDescriptor(t,r);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,s)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),s(r(133),t),s(r(374),t),s(r(699),t)},133:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ClasschartsParentClient=void 0;const n=r(405),s=r(312);class o extends n.ClasschartsClient{constructor(e,t,r){super(s.API_BASE_PARENT,r),this.password="",this.email="",this.email=String(e),this.password=String(t)}async login(){if(!this.email)throw new Error("Email not inputted");const e=new URLSearchParams;e.append("_method","POST"),e.append("email",this.email),e.append("logintype","existing"),e.append("password",this.password),e.append("recaptcha-token","no-token-avaliable");const t=await this.axios.request({url:s.BASE_URL+"/parent/login",method:"POST",data:e.toString(),maxRedirects:0,headers:{"Content-Type":"application/x-www-form-urlencoded"},validateStatus:()=>!0});if(302!=t.status||!t.headers["set-cookie"])throw new Error("Unauthenticated: Classcharts returned an error");const r=t.headers["set-cookie"];for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ClasschartsStudentClient=void 0;const n=r(312),s=r(405);class o extends s.ClasschartsClient{constructor(e,t,r){super(n.API_BASE_STUDENT,r),this.studentCode="",this.dateOfBirth="",this.studentCode=String(e),this.dateOfBirth=String(t)}async login(){if(!this.studentCode)throw new Error("Student Code not inputted");const e=new URLSearchParams;e.append("_method","POST"),e.append("code",this.studentCode.toUpperCase()),e.append("dob",this.dateOfBirth),e.append("remember_me","1"),e.append("recaptcha-token","no-token-avaliable");const t=await this.axios.request({url:n.BASE_URL+"/student/login",method:"POST",data:e.toString(),maxRedirects:0,headers:{"Content-Type":"application/x-www-form-urlencoded"},validateStatus:()=>!0});if(302!=t.status||!t.headers["set-cookie"])throw new Error("Unauthenticated: Classcharts returned an error");const r=t.headers["set-cookie"];for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0})}},t={},function r(n){var s=t[n];if(void 0!==s)return s.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}(607);var e,t})); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.classchartsapi=t():e.classchartsapi=t()}(self,(function(){return e={669:(e,t,r)=>{e.exports=r(609)},448:(e,t,r)=>{"use strict";var n=r(867),s=r(26),o=r(372),i=r(327),a=r(97),u=r(109),c=r(985),d=r(61),f=r(874),l=r(263);e.exports=function(e){return new Promise((function(t,r){var p,h=e.data,m=e.headers,g=e.responseType;function v(){e.cancelToken&&e.cancelToken.unsubscribe(p),e.signal&&e.signal.removeEventListener("abort",p)}n.isFormData(h)&&delete m["Content-Type"];var y=new XMLHttpRequest;if(e.auth){var w=e.auth.username||"",S=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";m.Authorization="Basic "+btoa(w+":"+S)}var b=a(e.baseURL,e.url);function E(){if(y){var n="getAllResponseHeaders"in y?u(y.getAllResponseHeaders()):null,o={data:g&&"text"!==g&&"json"!==g?y.response:y.responseText,status:y.status,statusText:y.statusText,headers:n,config:e,request:y};s((function(e){t(e),v()}),(function(e){r(e),v()}),o),y=null}}if(y.open(e.method.toUpperCase(),i(b,e.params,e.paramsSerializer),!0),y.timeout=e.timeout,"onloadend"in y?y.onloadend=E:y.onreadystatechange=function(){y&&4===y.readyState&&(0!==y.status||y.responseURL&&0===y.responseURL.indexOf("file:"))&&setTimeout(E)},y.onabort=function(){y&&(r(d("Request aborted",e,"ECONNABORTED",y)),y=null)},y.onerror=function(){r(d("Network Error",e,null,y)),y=null},y.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||f;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(d(t,e,n.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",y)),y=null},n.isStandardBrowserEnv()){var x=(e.withCredentials||c(b))&&e.xsrfCookieName?o.read(e.xsrfCookieName):void 0;x&&(m[e.xsrfHeaderName]=x)}"setRequestHeader"in y&&n.forEach(m,(function(e,t){void 0===h&&"content-type"===t.toLowerCase()?delete m[t]:y.setRequestHeader(t,e)})),n.isUndefined(e.withCredentials)||(y.withCredentials=!!e.withCredentials),g&&"json"!==g&&(y.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&y.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&y.upload&&y.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(p=function(e){y&&(r(!e||e&&e.type?new l("canceled"):e),y.abort(),y=null)},e.cancelToken&&e.cancelToken.subscribe(p),e.signal&&(e.signal.aborted?p():e.signal.addEventListener("abort",p))),h||(h=null),y.send(h)}))}},609:(e,t,r)=>{"use strict";var n=r(867),s=r(849),o=r(321),i=r(185),a=function e(t){var r=new o(t),a=s(o.prototype.request,r);return n.extend(a,o.prototype,r),n.extend(a,r),a.create=function(r){return e(i(t,r))},a}(r(546));a.Axios=o,a.Cancel=r(263),a.CancelToken=r(972),a.isCancel=r(502),a.VERSION=r(288).version,a.all=function(e){return Promise.all(e)},a.spread=r(713),a.isAxiosError=r(268),e.exports=a,e.exports.default=a},263:e=>{"use strict";function t(e){this.message=e}t.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},t.prototype.__CANCEL__=!0,e.exports=t},972:(e,t,r)=>{"use strict";var n=r(263);function s(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;this.promise.then((function(e){if(r._listeners){var t,n=r._listeners.length;for(t=0;t{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,t,r)=>{"use strict";var n=r(867),s=r(327),o=r(782),i=r(572),a=r(185),u=r(875),c=u.validators;function d(e){this.defaults=e,this.interceptors={request:new o,response:new o}}d.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=a(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var r=t.transitional;void 0!==r&&u.assertOptions(r,{silentJSONParsing:c.transitional(c.boolean),forcedJSONParsing:c.transitional(c.boolean),clarifyTimeoutError:c.transitional(c.boolean)},!1);var n=[],s=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var o,d=[];if(this.interceptors.response.forEach((function(e){d.push(e.fulfilled,e.rejected)})),!s){var f=[i,void 0];for(Array.prototype.unshift.apply(f,n),f=f.concat(d),o=Promise.resolve(t);f.length;)o=o.then(f.shift(),f.shift());return o}for(var l=t;n.length;){var p=n.shift(),h=n.shift();try{l=p(l)}catch(e){h(e);break}}try{o=i(l)}catch(e){return Promise.reject(e)}for(;d.length;)o=o.then(d.shift(),d.shift());return o},d.prototype.getUri=function(e){return e=a(this.defaults,e),s(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},n.forEach(["delete","get","head","options"],(function(e){d.prototype[e]=function(t,r){return this.request(a(r||{},{method:e,url:t,data:(r||{}).data}))}})),n.forEach(["post","put","patch"],(function(e){d.prototype[e]=function(t,r,n){return this.request(a(n||{},{method:e,url:t,data:r}))}})),e.exports=d},782:(e,t,r)=>{"use strict";var n=r(867);function s(){this.handlers=[]}s.prototype.use=function(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1},s.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},s.prototype.forEach=function(e){n.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=s},97:(e,t,r)=>{"use strict";var n=r(793),s=r(303);e.exports=function(e,t){return e&&!n(t)?s(e,t):t}},61:(e,t,r)=>{"use strict";var n=r(481);e.exports=function(e,t,r,s,o){var i=new Error(e);return n(i,t,r,s,o)}},572:(e,t,r)=>{"use strict";var n=r(867),s=r(527),o=r(502),i=r(546),a=r(263);function u(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new a("canceled")}e.exports=function(e){return u(e),e.headers=e.headers||{},e.data=s.call(e,e.data,e.headers,e.transformRequest),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),n.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||i.adapter)(e).then((function(t){return u(e),t.data=s.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return o(t)||(u(e),t&&t.response&&(t.response.data=s.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},481:e=>{"use strict";e.exports=function(e,t,r,n,s){return e.config=t,r&&(e.code=r),e.request=n,e.response=s,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},e}},185:(e,t,r)=>{"use strict";var n=r(867);e.exports=function(e,t){t=t||{};var r={};function s(e,t){return n.isPlainObject(e)&&n.isPlainObject(t)?n.merge(e,t):n.isPlainObject(t)?n.merge({},t):n.isArray(t)?t.slice():t}function o(r){return n.isUndefined(t[r])?n.isUndefined(e[r])?void 0:s(void 0,e[r]):s(e[r],t[r])}function i(e){if(!n.isUndefined(t[e]))return s(void 0,t[e])}function a(r){return n.isUndefined(t[r])?n.isUndefined(e[r])?void 0:s(void 0,e[r]):s(void 0,t[r])}function u(r){return r in t?s(e[r],t[r]):r in e?s(void 0,e[r]):void 0}var c={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:u};return n.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=c[e]||o,s=t(e);n.isUndefined(s)&&t!==u||(r[e]=s)})),r}},26:(e,t,r)=>{"use strict";var n=r(61);e.exports=function(e,t,r){var s=r.config.validateStatus;r.status&&s&&!s(r.status)?t(n("Request failed with status code "+r.status,r.config,null,r.request,r)):e(r)}},527:(e,t,r)=>{"use strict";var n=r(867),s=r(546);e.exports=function(e,t,r){var o=this||s;return n.forEach(r,(function(r){e=r.call(o,e,t)})),e}},546:(e,t,r)=>{"use strict";var n=r(867),s=r(16),o=r(481),i=r(874),a={"Content-Type":"application/x-www-form-urlencoded"};function u(e,t){!n.isUndefined(e)&&n.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var c,d={transitional:i,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(c=r(448)),c),transformRequest:[function(e,t){return s(t,"Accept"),s(t,"Content-Type"),n.isFormData(e)||n.isArrayBuffer(e)||n.isBuffer(e)||n.isStream(e)||n.isFile(e)||n.isBlob(e)?e:n.isArrayBufferView(e)?e.buffer:n.isURLSearchParams(e)?(u(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):n.isObject(e)||t&&"application/json"===t["Content-Type"]?(u(t,"application/json"),function(e,t,r){if(n.isString(e))try{return(0,JSON.parse)(e),n.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||d.transitional,r=t&&t.silentJSONParsing,s=t&&t.forcedJSONParsing,i=!r&&"json"===this.responseType;if(i||s&&n.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(i){if("SyntaxError"===e.name)throw o(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],(function(e){d.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){d.headers[e]=n.merge(a)})),e.exports=d},874:e=>{"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},288:e=>{e.exports={version:"0.26.1"}},849:e=>{"use strict";e.exports=function(e,t){return function(){for(var r=new Array(arguments.length),n=0;n{"use strict";var n=r(867);function s(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,r){if(!t)return e;var o;if(r)o=r(t);else if(n.isURLSearchParams(t))o=t.toString();else{var i=[];n.forEach(t,(function(e,t){null!=e&&(n.isArray(e)?t+="[]":e=[e],n.forEach(e,(function(e){n.isDate(e)?e=e.toISOString():n.isObject(e)&&(e=JSON.stringify(e)),i.push(s(t)+"="+s(e))})))})),o=i.join("&")}if(o){var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}},303:e=>{"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},372:(e,t,r)=>{"use strict";var n=r(867);e.exports=n.isStandardBrowserEnv()?{write:function(e,t,r,s,o,i){var a=[];a.push(e+"="+encodeURIComponent(t)),n.isNumber(r)&&a.push("expires="+new Date(r).toGMTString()),n.isString(s)&&a.push("path="+s),n.isString(o)&&a.push("domain="+o),!0===i&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},793:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},268:(e,t,r)=>{"use strict";var n=r(867);e.exports=function(e){return n.isObject(e)&&!0===e.isAxiosError}},985:(e,t,r)=>{"use strict";var n=r(867);e.exports=n.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a");function s(e){var n=e;return t&&(r.setAttribute("href",n),n=r.href),r.setAttribute("href",n),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:"/"===r.pathname.charAt(0)?r.pathname:"/"+r.pathname}}return e=s(window.location.href),function(t){var r=n.isString(t)?s(t):t;return r.protocol===e.protocol&&r.host===e.host}}():function(){return!0}},16:(e,t,r)=>{"use strict";var n=r(867);e.exports=function(e,t){n.forEach(e,(function(r,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=r,delete e[n])}))}},109:(e,t,r)=>{"use strict";var n=r(867),s=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,r,o,i={};return e?(n.forEach(e.split("\n"),(function(e){if(o=e.indexOf(":"),t=n.trim(e.substr(0,o)).toLowerCase(),r=n.trim(e.substr(o+1)),t){if(i[t]&&s.indexOf(t)>=0)return;i[t]="set-cookie"===t?(i[t]?i[t]:[]).concat([r]):i[t]?i[t]+", "+r:r}})),i):i}},713:e=>{"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},875:(e,t,r)=>{"use strict";var n=r(288).version,s={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){s[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));var o={};s.transitional=function(e,t,r){function s(e,t){return"[Axios v"+n+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return function(r,n,i){if(!1===e)throw new Error(s(n," has been removed"+(t?" in "+t:"")));return t&&!o[n]&&(o[n]=!0,console.warn(s(n," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,n,i)}},e.exports={assertOptions:function(e,t,r){if("object"!=typeof e)throw new TypeError("options must be an object");for(var n=Object.keys(e),s=n.length;s-- >0;){var o=n[s],i=t[o];if(i){var a=e[o],u=void 0===a||i(a,o,e);if(!0!==u)throw new TypeError("option "+o+" must be "+u)}else if(!0!==r)throw Error("Unknown option "+o)}},validators:s}},867:(e,t,r)=>{"use strict";var n=r(849),s=Object.prototype.toString;function o(e){return Array.isArray(e)}function i(e){return void 0===e}function a(e){return"[object ArrayBuffer]"===s.call(e)}function u(e){return null!==e&&"object"==typeof e}function c(e){if("[object Object]"!==s.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function d(e){return"[object Function]"===s.call(e)}function f(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),o(e))for(var r=0,n=e.length;r!0},n=(await this.axios.request(r)).data;if(0==n.success)throw new Error(n.error);return n.data}async getStudentInfo(){return(await this.makeAuthedRequest(this.API_BASE+"/ping",{method:"POST",data:"include_data=true"}))?.user}async getActivity(e){const t=new URLSearchParams;return e?.from&&t.append("from",e?.from),e?.to&&t.append("to",e?.to),e?.last_id&&t.append("last_id",e?.last_id),this.makeAuthedRequest(this.API_BASE+"/activity/"+this.studentId+"?"+t.toString(),{method:"GET"})}async getFullActivity(e){let t,r=[],n=!0;for(;n;){const s={from:e.from,to:e.to};t&&(s.last_id=String(t));const o=await this.getActivity(s);o&&o.length?(r=r.concat(o),t=o[o.length-1].id):n=!1}return r}async getBehaviour(e){const t=new URLSearchParams;return e?.from&&t.append("from",e?.from),e?.to&&t.append("to",e?.to),await this.makeAuthedRequest(this.API_BASE+"/behaviour/"+this.studentId+"?"+t.toString(),{method:"GET"})}async listHomeworks(e){const t=new URLSearchParams;e?.displayDate&&t.append("display_date",String(e?.displayDate)),e?.fromDate&&t.append("from",String(e?.fromDate)),e?.toDate&&t.append("to",String(e?.toDate));const r=await this.makeAuthedRequest(this.API_BASE+"/homeworks/"+this.studentId+"?"+t.toString(),{method:"GET"});for(let e=0;e]+)>)/gi,""),r[e].description=r[e].description.replace(/ /g,""),r[e].description=r[e].description.trim();return r}async getLessons(e){if(!e?.date)throw new Error("No date specified");const t=new URLSearchParams;return t.append("date",String(e?.date)),await this.makeAuthedRequest(this.API_BASE+"/timetable/"+this.studentId+"?"+t.toString(),{method:"GET"})}async getBadges(){return await this.makeAuthedRequest(this.API_BASE+"/eventbadges/"+this.studentId,{method:"GET"})}async listAnnouncements(){return await this.makeAuthedRequest(this.API_BASE+"/announcements/"+this.studentId,{method:"GET"})}async getDetentions(){return await this.makeAuthedRequest(this.API_BASE+"/detentions/"+this.studentId,{method:"GET"})}}},312:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.API_BASE_PARENT=t.API_BASE_STUDENT=t.BASE_URL=void 0,t.BASE_URL="https://www.classcharts.com",t.API_BASE_STUDENT=`${t.BASE_URL}/apiv2student`,t.API_BASE_PARENT=`${t.BASE_URL}/apiv2parent`},607:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var s=Object.getOwnPropertyDescriptor(t,r);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,s)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),s(r(133),t),s(r(374),t),s(r(699),t)},133:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ClasschartsParentClient=void 0;const n=r(405),s=r(312);class o extends n.ClasschartsClient{constructor(e,t,r){super(s.API_BASE_PARENT,r),this.password="",this.email="",this.email=String(e),this.password=String(t)}async login(){if(!this.email)throw new Error("Email not inputted");const e=new URLSearchParams;e.append("_method","POST"),e.append("email",this.email),e.append("logintype","existing"),e.append("password",this.password),e.append("recaptcha-token","no-token-avaliable");const t=await this.axios.request({url:s.BASE_URL+"/parent/login",method:"POST",data:e.toString(),maxRedirects:0,headers:{"Content-Type":"application/x-www-form-urlencoded"},validateStatus:()=>!0});if(302!=t.status||!t.headers["set-cookie"])throw new Error("Unauthenticated: Classcharts returned an error");const r=t.headers["set-cookie"];for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ClasschartsStudentClient=void 0;const n=r(312),s=r(405);class o extends s.ClasschartsClient{constructor(e,t,r){super(n.API_BASE_STUDENT,r),this.studentCode="",this.dateOfBirth="",this.studentCode=String(e),this.dateOfBirth=String(t)}async login(){if(!this.studentCode)throw new Error("Student Code not inputted");const e=new URLSearchParams;e.append("_method","POST"),e.append("code",this.studentCode.toUpperCase()),e.append("dob",this.dateOfBirth),e.append("remember_me","1"),e.append("recaptcha-token","no-token-avaliable");const t=await this.axios.request({url:n.BASE_URL+"/student/login",method:"POST",data:e.toString(),maxRedirects:0,headers:{"Content-Type":"application/x-www-form-urlencoded"},validateStatus:()=>!0});if(302!=t.status||!t.headers["set-cookie"])throw new Error("Unauthenticated: Classcharts returned an error");const r=t.headers["set-cookie"];for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0})}},t={},function r(n){var s=t[n];if(void 0!==s)return s.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}(607);var e,t})); //# sourceMappingURL=classcharts-api.map \ No newline at end of file diff --git a/build/classcharts-api.map b/build/classcharts-api.map index 617aed1..c332c8b 100644 --- a/build/classcharts-api.map +++ b/build/classcharts-api.map @@ -1 +1 @@ -{"version":3,"file":"classcharts-api.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAwB,eAAID,IAE5BD,EAAqB,eAAIC,IAR3B,CASGK,MAAM,WACT,O,iBCVAH,EAAOD,QAAU,EAAjB,M,2BCEA,IAAIK,EAAQ,EAAQ,KAChBC,EAAS,EAAQ,IACjBC,EAAU,EAAQ,KAClBC,EAAW,EAAQ,KACnBC,EAAgB,EAAQ,IACxBC,EAAe,EAAQ,KACvBC,EAAkB,EAAQ,KAC1BC,EAAc,EAAQ,IACtBC,EAAuB,EAAQ,KAC/BC,EAAS,EAAQ,KAErBb,EAAOD,QAAU,SAAoBe,GACnC,OAAO,IAAIC,SAAQ,SAA4BC,EAASC,GACtD,IAGIC,EAHAC,EAAcL,EAAOM,KACrBC,EAAiBP,EAAOQ,QACxBC,EAAeT,EAAOS,aAE1B,SAASC,IACHV,EAAOW,aACTX,EAAOW,YAAYC,YAAYR,GAG7BJ,EAAOa,QACTb,EAAOa,OAAOC,oBAAoB,QAASV,GAI3Cd,EAAMyB,WAAWV,WACZE,EAAe,gBAGxB,IAAIS,EAAU,IAAIC,eAGlB,GAAIjB,EAAOkB,KAAM,CACf,IAAIC,EAAWnB,EAAOkB,KAAKC,UAAY,GACnCC,EAAWpB,EAAOkB,KAAKE,SAAWC,SAASC,mBAAmBtB,EAAOkB,KAAKE,WAAa,GAC3Fb,EAAegB,cAAgB,SAAWC,KAAKL,EAAW,IAAMC,GAGlE,IAAIK,EAAW/B,EAAcM,EAAO0B,QAAS1B,EAAO2B,KAMpD,SAASC,IACP,GAAKZ,EAAL,CAIA,IAAIa,EAAkB,0BAA2Bb,EAAUrB,EAAaqB,EAAQc,yBAA2B,KAGvGC,EAAW,CACbzB,KAHkBG,GAAiC,SAAjBA,GAA6C,SAAjBA,EACvCO,EAAQe,SAA/Bf,EAAQgB,aAGRC,OAAQjB,EAAQiB,OAChBC,WAAYlB,EAAQkB,WACpB1B,QAASqB,EACT7B,OAAQA,EACRgB,QAASA,GAGXzB,GAAO,SAAkB4C,GACvBjC,EAAQiC,GACRzB,OACC,SAAiB0B,GAClBjC,EAAOiC,GACP1B,MACCqB,GAGHf,EAAU,MAoEZ,GAnGAA,EAAQqB,KAAKrC,EAAOsC,OAAOC,cAAe9C,EAASgC,EAAUzB,EAAOwC,OAAQxC,EAAOyC,mBAAmB,GAGtGzB,EAAQ0B,QAAU1C,EAAO0C,QA+BrB,cAAe1B,EAEjBA,EAAQY,UAAYA,EAGpBZ,EAAQ2B,mBAAqB,WACtB3B,GAAkC,IAAvBA,EAAQ4B,aAQD,IAAnB5B,EAAQiB,QAAkBjB,EAAQ6B,aAAwD,IAAzC7B,EAAQ6B,YAAYC,QAAQ,WAKjFC,WAAWnB,IAKfZ,EAAQgC,QAAU,WACXhC,IAILb,EAAON,EAAY,kBAAmBG,EAAQ,eAAgBgB,IAG9DA,EAAU,OAIZA,EAAQiC,QAAU,WAGhB9C,EAAON,EAAY,gBAAiBG,EAAQ,KAAMgB,IAGlDA,EAAU,MAIZA,EAAQkC,UAAY,WAClB,IAAIC,EAAsBnD,EAAO0C,QAAU,cAAgB1C,EAAO0C,QAAU,cAAgB,mBACxFU,EAAepD,EAAOoD,cAAgBtD,EACtCE,EAAOmD,sBACTA,EAAsBnD,EAAOmD,qBAE/BhD,EAAON,EACLsD,EACAnD,EACAoD,EAAaC,oBAAsB,YAAc,eACjDrC,IAGFA,EAAU,MAMR1B,EAAMgE,uBAAwB,CAEhC,IAAIC,GAAavD,EAAOwD,iBAAmB5D,EAAgB6B,KAAczB,EAAOyD,eAC9EjE,EAAQkE,KAAK1D,EAAOyD,qBACpBE,EAEEJ,IACFhD,EAAeP,EAAO4D,gBAAkBL,GAKxC,qBAAsBvC,GACxB1B,EAAMuE,QAAQtD,GAAgB,SAA0BuD,EAAKC,QAChC,IAAhB1D,GAAqD,iBAAtB0D,EAAIC,qBAErCzD,EAAewD,GAGtB/C,EAAQiD,iBAAiBF,EAAKD,MAM/BxE,EAAM4E,YAAYlE,EAAOwD,mBAC5BxC,EAAQwC,kBAAoBxD,EAAOwD,iBAIjC/C,GAAiC,SAAjBA,IAClBO,EAAQP,aAAeT,EAAOS,cAIS,mBAA9BT,EAAOmE,oBAChBnD,EAAQoD,iBAAiB,WAAYpE,EAAOmE,oBAIP,mBAA5BnE,EAAOqE,kBAAmCrD,EAAQsD,QAC3DtD,EAAQsD,OAAOF,iBAAiB,WAAYpE,EAAOqE,mBAGjDrE,EAAOW,aAAeX,EAAOa,UAG/BT,EAAa,SAASmE,GACfvD,IAGLb,GAAQoE,GAAWA,GAAUA,EAAOC,KAAQ,IAAIzE,EAAO,YAAcwE,GACrEvD,EAAQyD,QACRzD,EAAU,OAGZhB,EAAOW,aAAeX,EAAOW,YAAY+D,UAAUtE,GAC/CJ,EAAOa,SACTb,EAAOa,OAAO8D,QAAUvE,IAAeJ,EAAOa,OAAOuD,iBAAiB,QAAShE,KAI9EC,IACHA,EAAc,MAIhBW,EAAQ4D,KAAKvE,Q,2BC/MjB,IAAIf,EAAQ,EAAQ,KAChBuF,EAAO,EAAQ,KACfC,EAAQ,EAAQ,KAChBC,EAAc,EAAQ,KA4BtBC,EAnBJ,SAASC,EAAeC,GACtB,IAAIC,EAAU,IAAIL,EAAMI,GACpBE,EAAWP,EAAKC,EAAMO,UAAUrE,QAASmE,GAa7C,OAVA7F,EAAMgG,OAAOF,EAAUN,EAAMO,UAAWF,GAGxC7F,EAAMgG,OAAOF,EAAUD,GAGvBC,EAASG,OAAS,SAAgBC,GAChC,OAAOP,EAAeF,EAAYG,EAAeM,KAG5CJ,EAIGH,CA3BG,EAAQ,MA8BvBD,EAAMF,MAAQA,EAGdE,EAAMjF,OAAS,EAAQ,KACvBiF,EAAMS,YAAc,EAAQ,KAC5BT,EAAMU,SAAW,EAAQ,KACzBV,EAAMW,QAAU,eAGhBX,EAAMY,IAAM,SAAaC,GACvB,OAAO5F,QAAQ2F,IAAIC,IAErBb,EAAMc,OAAS,EAAQ,KAGvBd,EAAMe,aAAe,EAAQ,KAE7B7G,EAAOD,QAAU+F,EAGjB9F,EAAOD,QAAP,QAAyB+F,G,qBChDzB,SAASjF,EAAOiG,GACdC,KAAKD,QAAUA,EAGjBjG,EAAOsF,UAAUa,SAAW,WAC1B,MAAO,UAAYD,KAAKD,QAAU,KAAOC,KAAKD,QAAU,KAG1DjG,EAAOsF,UAAUc,YAAa,EAE9BjH,EAAOD,QAAUc,G,2BChBjB,IAAIA,EAAS,EAAQ,KAQrB,SAAS0F,EAAYW,GACnB,GAAwB,mBAAbA,EACT,MAAM,IAAIC,UAAU,gCAGtB,IAAIC,EAEJL,KAAKM,QAAU,IAAItG,SAAQ,SAAyBC,GAClDoG,EAAiBpG,KAGnB,IAAIsG,EAAQP,KAGZA,KAAKM,QAAQE,MAAK,SAASlC,GACzB,GAAKiC,EAAME,WAAX,CAEA,IAAIC,EACAC,EAAIJ,EAAME,WAAWG,OAEzB,IAAKF,EAAI,EAAGA,EAAIC,EAAGD,IACjBH,EAAME,WAAWC,GAAGpC,GAEtBiC,EAAME,WAAa,SAIrBT,KAAKM,QAAQE,KAAO,SAASK,GAC3B,IAAIC,EAEAR,EAAU,IAAItG,SAAQ,SAASC,GACjCsG,EAAM9B,UAAUxE,GAChB6G,EAAW7G,KACVuG,KAAKK,GAMR,OAJAP,EAAQhC,OAAS,WACfiC,EAAM5F,YAAYmG,IAGbR,GAGTH,GAAS,SAAgBJ,GACnBQ,EAAMQ,SAKVR,EAAMQ,OAAS,IAAIjH,EAAOiG,GAC1BM,EAAeE,EAAMQ,YAOzBvB,EAAYJ,UAAU4B,iBAAmB,WACvC,GAAIhB,KAAKe,OACP,MAAMf,KAAKe,QAQfvB,EAAYJ,UAAUX,UAAY,SAAmBwC,GAC/CjB,KAAKe,OACPE,EAASjB,KAAKe,QAIZf,KAAKS,WACPT,KAAKS,WAAWS,KAAKD,GAErBjB,KAAKS,WAAa,CAACQ,IAQvBzB,EAAYJ,UAAUzE,YAAc,SAAqBsG,GACvD,GAAKjB,KAAKS,WAAV,CAGA,IAAIU,EAAQnB,KAAKS,WAAW5D,QAAQoE,IACrB,IAAXE,GACFnB,KAAKS,WAAWW,OAAOD,EAAO,KAQlC3B,EAAY6B,OAAS,WACnB,IAAI/C,EAIJ,MAAO,CACLiC,MAJU,IAAIf,GAAY,SAAkB8B,GAC5ChD,EAASgD,KAIThD,OAAQA,IAIZrF,EAAOD,QAAUwG,G,qBCpHjBvG,EAAOD,QAAU,SAAkBkD,GACjC,SAAUA,IAASA,EAAMgE,c,2BCD3B,IAAI7G,EAAQ,EAAQ,KAChBG,EAAW,EAAQ,KACnB+H,EAAqB,EAAQ,KAC7BC,EAAkB,EAAQ,KAC1B1C,EAAc,EAAQ,KACtB2C,EAAY,EAAQ,KAEpBC,EAAaD,EAAUC,WAM3B,SAAS7C,EAAMU,GACbS,KAAK2B,SAAWpC,EAChBS,KAAK4B,aAAe,CAClB7G,QAAS,IAAIwG,EACbzF,SAAU,IAAIyF,GASlB1C,EAAMO,UAAUrE,QAAU,SAAiB8G,EAAa9H,GAG3B,iBAAhB8H,GACT9H,EAASA,GAAU,IACZ2B,IAAMmG,EAEb9H,EAAS8H,GAAe,IAG1B9H,EAAS+E,EAAYkB,KAAK2B,SAAU5H,IAGzBsC,OACTtC,EAAOsC,OAAStC,EAAOsC,OAAO0B,cACrBiC,KAAK2B,SAAStF,OACvBtC,EAAOsC,OAAS2D,KAAK2B,SAAStF,OAAO0B,cAErChE,EAAOsC,OAAS,MAGlB,IAAIc,EAAepD,EAAOoD,kBAELO,IAAjBP,GACFsE,EAAUK,cAAc3E,EAAc,CACpC4E,kBAAmBL,EAAWvE,aAAauE,EAAWM,SACtDC,kBAAmBP,EAAWvE,aAAauE,EAAWM,SACtD5E,oBAAqBsE,EAAWvE,aAAauE,EAAWM,WACvD,GAIL,IAAIE,EAA0B,GAC1BC,GAAiC,EACrCnC,KAAK4B,aAAa7G,QAAQ6C,SAAQ,SAAoCwE,GACjC,mBAAxBA,EAAYC,UAA0D,IAAhCD,EAAYC,QAAQtI,KAIrEoI,EAAiCA,GAAkCC,EAAYE,YAE/EJ,EAAwBK,QAAQH,EAAYI,UAAWJ,EAAYK,cAGrE,IAKInC,EALAoC,EAA2B,GAO/B,GANA1C,KAAK4B,aAAa9F,SAAS8B,SAAQ,SAAkCwE,GACnEM,EAAyBxB,KAAKkB,EAAYI,UAAWJ,EAAYK,cAK9DN,EAAgC,CACnC,IAAIQ,EAAQ,CAACnB,OAAiB9D,GAM9B,IAJAkF,MAAMxD,UAAUmD,QAAQM,MAAMF,EAAOT,GACrCS,EAAQA,EAAMG,OAAOJ,GAErBpC,EAAUtG,QAAQC,QAAQF,GACnB4I,EAAM/B,QACXN,EAAUA,EAAQE,KAAKmC,EAAMI,QAASJ,EAAMI,SAG9C,OAAOzC,EAKT,IADA,IAAI0C,EAAYjJ,EACTmI,EAAwBtB,QAAQ,CACrC,IAAIqC,EAAcf,EAAwBa,QACtCG,EAAahB,EAAwBa,QACzC,IACEC,EAAYC,EAAYD,GACxB,MAAOG,GACPD,EAAWC,GACX,OAIJ,IACE7C,EAAUkB,EAAgBwB,GAC1B,MAAOG,GACP,OAAOnJ,QAAQE,OAAOiJ,GAGxB,KAAOT,EAAyB9B,QAC9BN,EAAUA,EAAQE,KAAKkC,EAAyBK,QAASL,EAAyBK,SAGpF,OAAOzC,GAGTzB,EAAMO,UAAUgE,OAAS,SAAgBrJ,GAEvC,OADAA,EAAS+E,EAAYkB,KAAK2B,SAAU5H,GAC7BP,EAASO,EAAO2B,IAAK3B,EAAOwC,OAAQxC,EAAOyC,kBAAkB6G,QAAQ,MAAO,KAIrFhK,EAAMuE,QAAQ,CAAC,SAAU,MAAO,OAAQ,YAAY,SAA6BvB,GAE/EwC,EAAMO,UAAU/C,GAAU,SAASX,EAAK3B,GACtC,OAAOiG,KAAKjF,QAAQ+D,EAAY/E,GAAU,GAAI,CAC5CsC,OAAQA,EACRX,IAAKA,EACLrB,MAAON,GAAU,IAAIM,YAK3BhB,EAAMuE,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BvB,GAErEwC,EAAMO,UAAU/C,GAAU,SAASX,EAAKrB,EAAMN,GAC5C,OAAOiG,KAAKjF,QAAQ+D,EAAY/E,GAAU,GAAI,CAC5CsC,OAAQA,EACRX,IAAKA,EACLrB,KAAMA,SAKZpB,EAAOD,QAAU6F,G,2BCjJjB,IAAIxF,EAAQ,EAAQ,KAEpB,SAASkI,IACPvB,KAAKsD,SAAW,GAWlB/B,EAAmBnC,UAAUmE,IAAM,SAAaf,EAAWC,EAAUe,GAOnE,OANAxD,KAAKsD,SAASpC,KAAK,CACjBsB,UAAWA,EACXC,SAAUA,EACVH,cAAakB,GAAUA,EAAQlB,YAC/BD,QAASmB,EAAUA,EAAQnB,QAAU,OAEhCrC,KAAKsD,SAAS1C,OAAS,GAQhCW,EAAmBnC,UAAUqE,MAAQ,SAAeC,GAC9C1D,KAAKsD,SAASI,KAChB1D,KAAKsD,SAASI,GAAM,OAYxBnC,EAAmBnC,UAAUxB,QAAU,SAAiB+F,GACtDtK,EAAMuE,QAAQoC,KAAKsD,UAAU,SAAwBM,GACzC,OAANA,GACFD,EAAGC,OAKT3K,EAAOD,QAAUuI,G,0BCnDjB,IAAIsC,EAAgB,EAAQ,KACxBC,EAAc,EAAQ,KAW1B7K,EAAOD,QAAU,SAAuByC,EAASsI,GAC/C,OAAItI,IAAYoI,EAAcE,GACrBD,EAAYrI,EAASsI,GAEvBA,I,0BChBT,IAAIC,EAAe,EAAQ,KAY3B/K,EAAOD,QAAU,SAAqB+G,EAAShG,EAAQkK,EAAMlJ,EAASe,GACpE,IAAIqH,EAAQ,IAAIe,MAAMnE,GACtB,OAAOiE,EAAab,EAAOpJ,EAAQkK,EAAMlJ,EAASe,K,2BCdpD,IAAIzC,EAAQ,EAAQ,KAChB8K,EAAgB,EAAQ,KACxB1E,EAAW,EAAQ,KACnBkC,EAAW,EAAQ,KACnB7H,EAAS,EAAQ,KAKrB,SAASsK,EAA6BrK,GAKpC,GAJIA,EAAOW,aACTX,EAAOW,YAAYsG,mBAGjBjH,EAAOa,QAAUb,EAAOa,OAAO8D,QACjC,MAAM,IAAI5E,EAAO,YAUrBb,EAAOD,QAAU,SAAyBe,GA8BxC,OA7BAqK,EAA6BrK,GAG7BA,EAAOQ,QAAUR,EAAOQ,SAAW,GAGnCR,EAAOM,KAAO8J,EAAcE,KAC1BtK,EACAA,EAAOM,KACPN,EAAOQ,QACPR,EAAOuK,kBAITvK,EAAOQ,QAAUlB,EAAMkL,MACrBxK,EAAOQ,QAAQiK,QAAU,GACzBzK,EAAOQ,QAAQR,EAAOsC,SAAW,GACjCtC,EAAOQ,SAGTlB,EAAMuE,QACJ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,WAClD,SAA2BvB,UAClBtC,EAAOQ,QAAQ8B,OAIZtC,EAAO0K,SAAW9C,EAAS8C,SAE1B1K,GAAQyG,MAAK,SAA6B1E,GAWvD,OAVAsI,EAA6BrK,GAG7B+B,EAASzB,KAAO8J,EAAcE,KAC5BtK,EACA+B,EAASzB,KACTyB,EAASvB,QACTR,EAAO2K,mBAGF5I,KACN,SAA4BiF,GAe7B,OAdKtB,EAASsB,KACZqD,EAA6BrK,GAGzBgH,GAAUA,EAAOjF,WACnBiF,EAAOjF,SAASzB,KAAO8J,EAAcE,KACnCtK,EACAgH,EAAOjF,SAASzB,KAChB0G,EAAOjF,SAASvB,QAChBR,EAAO2K,qBAKN1K,QAAQE,OAAO6G,Q,qBCxE1B9H,EAAOD,QAAU,SAAsBmK,EAAOpJ,EAAQkK,EAAMlJ,EAASe,GA6BnE,OA5BAqH,EAAMpJ,OAASA,EACXkK,IACFd,EAAMc,KAAOA,GAGfd,EAAMpI,QAAUA,EAChBoI,EAAMrH,SAAWA,EACjBqH,EAAMrD,cAAe,EAErBqD,EAAMwB,OAAS,WACb,MAAO,CAEL5E,QAASC,KAAKD,QACd6E,KAAM5E,KAAK4E,KAEXC,YAAa7E,KAAK6E,YAClBC,OAAQ9E,KAAK8E,OAEbC,SAAU/E,KAAK+E,SACfC,WAAYhF,KAAKgF,WACjBC,aAAcjF,KAAKiF,aACnBC,MAAOlF,KAAKkF,MAEZnL,OAAQiG,KAAKjG,OACbkK,KAAMjE,KAAKiE,KACXjI,OAAQgE,KAAKlE,UAAYkE,KAAKlE,SAASE,OAASgE,KAAKlE,SAASE,OAAS,OAGpEmH,I,2BCvCT,IAAI9J,EAAQ,EAAQ,KAUpBJ,EAAOD,QAAU,SAAqBmM,EAASC,GAE7CA,EAAUA,GAAW,GACrB,IAAIrL,EAAS,GAEb,SAASsL,EAAeC,EAAQjE,GAC9B,OAAIhI,EAAMkM,cAAcD,IAAWjM,EAAMkM,cAAclE,GAC9ChI,EAAMkL,MAAMe,EAAQjE,GAClBhI,EAAMkM,cAAclE,GACtBhI,EAAMkL,MAAM,GAAIlD,GACdhI,EAAMmM,QAAQnE,GAChBA,EAAOoE,QAETpE,EAIT,SAASqE,EAAoBC,GAC3B,OAAKtM,EAAM4E,YAAYmH,EAAQO,IAEnBtM,EAAM4E,YAAYkH,EAAQQ,SAA/B,EACEN,OAAe3H,EAAWyH,EAAQQ,IAFlCN,EAAeF,EAAQQ,GAAOP,EAAQO,IAOjD,SAASC,EAAiBD,GACxB,IAAKtM,EAAM4E,YAAYmH,EAAQO,IAC7B,OAAON,OAAe3H,EAAW0H,EAAQO,IAK7C,SAASE,EAAiBF,GACxB,OAAKtM,EAAM4E,YAAYmH,EAAQO,IAEnBtM,EAAM4E,YAAYkH,EAAQQ,SAA/B,EACEN,OAAe3H,EAAWyH,EAAQQ,IAFlCN,OAAe3H,EAAW0H,EAAQO,IAO7C,SAASG,EAAgBH,GACvB,OAAIA,KAAQP,EACHC,EAAeF,EAAQQ,GAAOP,EAAQO,IACpCA,KAAQR,EACVE,OAAe3H,EAAWyH,EAAQQ,SADpC,EAKT,IAAII,EAAW,CACb,IAAOH,EACP,OAAUA,EACV,KAAQA,EACR,QAAWC,EACX,iBAAoBA,EACpB,kBAAqBA,EACrB,iBAAoBA,EACpB,QAAWA,EACX,eAAkBA,EAClB,gBAAmBA,EACnB,QAAWA,EACX,aAAgBA,EAChB,eAAkBA,EAClB,eAAkBA,EAClB,iBAAoBA,EACpB,mBAAsBA,EACtB,WAAcA,EACd,iBAAoBA,EACpB,cAAiBA,EACjB,UAAaA,EACb,UAAaA,EACb,WAAcA,EACd,YAAeA,EACf,WAAcA,EACd,iBAAoBA,EACpB,eAAkBC,GASpB,OANAzM,EAAMuE,QAAQoI,OAAOC,KAAKd,GAASrC,OAAOkD,OAAOC,KAAKb,KAAW,SAA4BO,GAC3F,IAAIpB,EAAQwB,EAASJ,IAASD,EAC1BQ,EAAc3B,EAAMoB,GACvBtM,EAAM4E,YAAYiI,IAAgB3B,IAAUuB,IAAqB/L,EAAO4L,GAAQO,MAG5EnM,I,0BC/FT,IAAIH,EAAc,EAAQ,IAS1BX,EAAOD,QAAU,SAAgBiB,EAASC,EAAQ4B,GAChD,IAAIqK,EAAiBrK,EAAS/B,OAAOoM,eAChCrK,EAASE,QAAWmK,IAAkBA,EAAerK,EAASE,QAGjE9B,EAAON,EACL,mCAAqCkC,EAASE,OAC9CF,EAAS/B,OACT,KACA+B,EAASf,QACTe,IAPF7B,EAAQ6B,K,2BCZZ,IAAIzC,EAAQ,EAAQ,KAChBsI,EAAW,EAAQ,KAUvB1I,EAAOD,QAAU,SAAuBqB,EAAME,EAAS6L,GACrD,IAAIlH,EAAUc,MAAQ2B,EAMtB,OAJAtI,EAAMuE,QAAQwI,GAAK,SAAmBzC,GACpCtJ,EAAOsJ,EAAGU,KAAKnF,EAAS7E,EAAME,MAGzBF,I,2BClBT,IAAIhB,EAAQ,EAAQ,KAChBgN,EAAsB,EAAQ,IAC9BrC,EAAe,EAAQ,KACvBnK,EAAuB,EAAQ,KAE/ByM,EAAuB,CACzB,eAAgB,qCAGlB,SAASC,EAAsBhM,EAAS2B,IACjC7C,EAAM4E,YAAY1D,IAAYlB,EAAM4E,YAAY1D,EAAQ,mBAC3DA,EAAQ,gBAAkB2B,GA+B9B,IA1BMuI,EA0BF9C,EAAW,CAEbxE,aAActD,EAEd4K,UA7B8B,oBAAnBzJ,gBAGmB,oBAAZwL,SAAuE,qBAA5CR,OAAO5G,UAAUa,SAASoE,KAAKmC,YAD1E/B,EAAU,EAAQ,MAKbA,GAwBPH,iBAAkB,CAAC,SAA0BjK,EAAME,GAIjD,OAHA8L,EAAoB9L,EAAS,UAC7B8L,EAAoB9L,EAAS,gBAEzBlB,EAAMyB,WAAWT,IACnBhB,EAAMoN,cAAcpM,IACpBhB,EAAMqN,SAASrM,IACfhB,EAAMsN,SAAStM,IACfhB,EAAMuN,OAAOvM,IACbhB,EAAMwN,OAAOxM,GAENA,EAELhB,EAAMyN,kBAAkBzM,GACnBA,EAAK0M,OAEV1N,EAAM2N,kBAAkB3M,IAC1BkM,EAAsBhM,EAAS,mDACxBF,EAAK4F,YAEV5G,EAAM4N,SAAS5M,IAAUE,GAAuC,qBAA5BA,EAAQ,iBAC9CgM,EAAsBhM,EAAS,oBA1CrC,SAAyB2M,EAAUC,EAAQC,GACzC,GAAI/N,EAAMgO,SAASH,GACjB,IAEE,OADA,EAAWI,KAAKC,OAAOL,GAChB7N,EAAMmO,KAAKN,GAClB,MAAOO,GACP,GAAe,gBAAXA,EAAE7C,KACJ,MAAM6C,EAKZ,OAAO,EAAYH,KAAKI,WAAWR,GA+BxBS,CAAgBtN,IAElBA,IAGTqK,kBAAmB,CAAC,SAA2BrK,GAC7C,IAAI8C,EAAe6C,KAAK7C,cAAgBwE,EAASxE,aAC7C4E,EAAoB5E,GAAgBA,EAAa4E,kBACjDE,EAAoB9E,GAAgBA,EAAa8E,kBACjD2F,GAAqB7F,GAA2C,SAAtB/B,KAAKxF,aAEnD,GAAIoN,GAAsB3F,GAAqB5I,EAAMgO,SAAShN,IAASA,EAAKuG,OAC1E,IACE,OAAO0G,KAAKC,MAAMlN,GAClB,MAAOoN,GACP,GAAIG,EAAmB,CACrB,GAAe,gBAAXH,EAAE7C,KACJ,MAAMZ,EAAayD,EAAGzH,KAAM,gBAE9B,MAAMyH,GAKZ,OAAOpN,IAOToC,QAAS,EAETe,eAAgB,aAChBG,eAAgB,eAEhBkK,kBAAmB,EACnBC,eAAgB,EAEhB3B,eAAgB,SAAwBnK,GACtC,OAAOA,GAAU,KAAOA,EAAS,KAGnCzB,QAAS,CACPiK,OAAQ,CACN,OAAU,uCAKhBnL,EAAMuE,QAAQ,CAAC,SAAU,MAAO,SAAS,SAA6BvB,GACpEsF,EAASpH,QAAQ8B,GAAU,MAG7BhD,EAAMuE,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BvB,GACrEsF,EAASpH,QAAQ8B,GAAUhD,EAAMkL,MAAM+B,MAGzCrN,EAAOD,QAAU2I,G,qBChIjB1I,EAAOD,QAAU,CACf+I,mBAAmB,EACnBE,mBAAmB,EACnB7E,qBAAqB,I,QCLvBnE,EAAOD,QAAU,CACf,QAAW,W,qBCCbC,EAAOD,QAAU,SAAc2K,EAAIoE,GACjC,OAAO,WAEL,IADA,IAAIC,EAAO,IAAIpF,MAAMqF,UAAUrH,QACtBF,EAAI,EAAGA,EAAIsH,EAAKpH,OAAQF,IAC/BsH,EAAKtH,GAAKuH,UAAUvH,GAEtB,OAAOiD,EAAGd,MAAMkF,EAASC,M,2BCN7B,IAAI3O,EAAQ,EAAQ,KAEpB,SAAS6O,EAAOrK,GACd,OAAOxC,mBAAmBwC,GACxBwF,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KAUrBpK,EAAOD,QAAU,SAAkB0C,EAAKa,EAAQC,GAE9C,IAAKD,EACH,OAAOb,EAGT,IAAIyM,EACJ,GAAI3L,EACF2L,EAAmB3L,EAAiBD,QAC/B,GAAIlD,EAAM2N,kBAAkBzK,GACjC4L,EAAmB5L,EAAO0D,eACrB,CACL,IAAImI,EAAQ,GAEZ/O,EAAMuE,QAAQrB,GAAQ,SAAmBsB,EAAKC,GACxCD,MAAAA,IAIAxE,EAAMmM,QAAQ3H,GAChBC,GAAY,KAEZD,EAAM,CAACA,GAGTxE,EAAMuE,QAAQC,GAAK,SAAoBwK,GACjChP,EAAMiP,OAAOD,GACfA,EAAIA,EAAEE,cACGlP,EAAM4N,SAASoB,KACxBA,EAAIf,KAAKI,UAAUW,IAErBD,EAAMlH,KAAKgH,EAAOpK,GAAO,IAAMoK,EAAOG,WAI1CF,EAAmBC,EAAMI,KAAK,KAGhC,GAAIL,EAAkB,CACpB,IAAIM,EAAgB/M,EAAImB,QAAQ,MACT,IAAnB4L,IACF/M,EAAMA,EAAI+J,MAAM,EAAGgD,IAGrB/M,KAA8B,IAAtBA,EAAImB,QAAQ,KAAc,IAAM,KAAOsL,EAGjD,OAAOzM,I,qBC3DTzC,EAAOD,QAAU,SAAqByC,EAASiN,GAC7C,OAAOA,EACHjN,EAAQ4H,QAAQ,OAAQ,IAAM,IAAMqF,EAAYrF,QAAQ,OAAQ,IAChE5H,I,2BCVN,IAAIpC,EAAQ,EAAQ,KAEpBJ,EAAOD,QACLK,EAAMgE,uBAIK,CACLsL,MAAO,SAAe/D,EAAM1I,EAAO0M,EAASC,EAAMC,EAAQC,GACxD,IAAIC,EAAS,GACbA,EAAO9H,KAAK0D,EAAO,IAAMvJ,mBAAmBa,IAExC7C,EAAM4P,SAASL,IACjBI,EAAO9H,KAAK,WAAa,IAAIgI,KAAKN,GAASO,eAGzC9P,EAAMgO,SAASwB,IACjBG,EAAO9H,KAAK,QAAU2H,GAGpBxP,EAAMgO,SAASyB,IACjBE,EAAO9H,KAAK,UAAY4H,IAGX,IAAXC,GACFC,EAAO9H,KAAK,UAGdkI,SAASJ,OAASA,EAAOR,KAAK,OAGhC/K,KAAM,SAAcmH,GAClB,IAAIyE,EAAQD,SAASJ,OAAOK,MAAM,IAAIC,OAAO,aAAe1E,EAAO,cACnE,OAAQyE,EAAQE,mBAAmBF,EAAM,IAAM,MAGjDG,OAAQ,SAAgB5E,GACtB5E,KAAK2I,MAAM/D,EAAM,GAAIsE,KAAKO,MAAQ,SAO/B,CACLd,MAAO,aACPlL,KAAM,WAAkB,OAAO,MAC/B+L,OAAQ,e,qBCzChBvQ,EAAOD,QAAU,SAAuB0C,GAItC,MAAO,8BAA8BgO,KAAKhO,K,2BCV5C,IAAIrC,EAAQ,EAAQ,KAQpBJ,EAAOD,QAAU,SAAsB2Q,GACrC,OAAOtQ,EAAM4N,SAAS0C,KAAsC,IAAzBA,EAAQ7J,e,2BCT7C,IAAIzG,EAAQ,EAAQ,KAEpBJ,EAAOD,QACLK,EAAMgE,uBAIJ,WACE,IAEIuM,EAFAC,EAAO,kBAAkBH,KAAKI,UAAUC,WACxCC,EAAiBZ,SAASa,cAAc,KAS5C,SAASC,EAAWxO,GAClB,IAAIyO,EAAOzO,EAWX,OATImO,IAEFG,EAAeI,aAAa,OAAQD,GACpCA,EAAOH,EAAeG,MAGxBH,EAAeI,aAAa,OAAQD,GAG7B,CACLA,KAAMH,EAAeG,KACrBE,SAAUL,EAAeK,SAAWL,EAAeK,SAAShH,QAAQ,KAAM,IAAM,GAChFiH,KAAMN,EAAeM,KACrBC,OAAQP,EAAeO,OAASP,EAAeO,OAAOlH,QAAQ,MAAO,IAAM,GAC3EmH,KAAMR,EAAeQ,KAAOR,EAAeQ,KAAKnH,QAAQ,KAAM,IAAM,GACpEoH,SAAUT,EAAeS,SACzBC,KAAMV,EAAeU,KACrBC,SAAiD,MAAtCX,EAAeW,SAASC,OAAO,GACxCZ,EAAeW,SACf,IAAMX,EAAeW,UAY3B,OARAf,EAAYM,EAAWW,OAAOC,SAASX,MAQhC,SAAyBY,GAC9B,IAAIC,EAAU3R,EAAMgO,SAAS0D,GAAeb,EAAWa,GAAcA,EACrE,OAAQC,EAAOX,WAAaT,EAAUS,UAClCW,EAAOV,OAASV,EAAUU,MAhDlC,GAsDS,WACL,OAAO,I,0BC9Df,IAAIjR,EAAQ,EAAQ,KAEpBJ,EAAOD,QAAU,SAA6BuB,EAAS0Q,GACrD5R,EAAMuE,QAAQrD,GAAS,SAAuB2B,EAAO0I,GAC/CA,IAASqG,GAAkBrG,EAAKtI,gBAAkB2O,EAAe3O,gBACnE/B,EAAQ0Q,GAAkB/O,SACnB3B,EAAQqK,S,2BCNrB,IAAIvL,EAAQ,EAAQ,KAIhB6R,EAAoB,CACtB,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,cAgB5BjS,EAAOD,QAAU,SAAsBuB,GACrC,IACIuD,EACAD,EACA6C,EAHAsK,EAAS,GAKb,OAAKzQ,GAELlB,EAAMuE,QAAQrD,EAAQ4Q,MAAM,OAAO,SAAgBC,GAKjD,GAJA1K,EAAI0K,EAAKvO,QAAQ,KACjBiB,EAAMzE,EAAMmO,KAAK4D,EAAKC,OAAO,EAAG3K,IAAI3C,cACpCF,EAAMxE,EAAMmO,KAAK4D,EAAKC,OAAO3K,EAAI,IAE7B5C,EAAK,CACP,GAAIkN,EAAOlN,IAAQoN,EAAkBrO,QAAQiB,IAAQ,EACnD,OAGAkN,EAAOlN,GADG,eAARA,GACakN,EAAOlN,GAAOkN,EAAOlN,GAAO,IAAIgF,OAAO,CAACjF,IAEzCmN,EAAOlN,GAAOkN,EAAOlN,GAAO,KAAOD,EAAMA,MAKtDmN,GAnBgBA,I,qBCVzB/R,EAAOD,QAAU,SAAgBsS,GAC/B,OAAO,SAAcC,GACnB,OAAOD,EAASzI,MAAM,KAAM0I,M,2BCtBhC,IAAI7L,EAAU,eAEVgC,EAAa,GAGjB,CAAC,SAAU,UAAW,SAAU,WAAY,SAAU,UAAU9D,SAAQ,SAASW,EAAMmC,GACrFgB,EAAWnD,GAAQ,SAAmBiN,GACpC,cAAcA,IAAUjN,GAAQ,KAAOmC,EAAI,EAAI,KAAO,KAAOnC,MAIjE,IAAIkN,EAAqB,GASzB/J,EAAWvE,aAAe,SAAsBsE,EAAWiK,EAAS3L,GAClE,SAAS4L,EAAcC,EAAKC,GAC1B,MAAO,WAAanM,EAAU,0BAA6BkM,EAAM,IAAOC,GAAQ9L,EAAU,KAAOA,EAAU,IAI7G,OAAO,SAAS7D,EAAO0P,EAAKE,GAC1B,IAAkB,IAAdrK,EACF,MAAM,IAAIyC,MAAMyH,EAAcC,EAAK,qBAAuBF,EAAU,OAASA,EAAU,MAczF,OAXIA,IAAYD,EAAmBG,KACjCH,EAAmBG,IAAO,EAE1BG,QAAQC,KACNL,EACEC,EACA,+BAAiCF,EAAU,8CAK1CjK,GAAYA,EAAUvF,EAAO0P,EAAKE,KAkC7C7S,EAAOD,QAAU,CACf8I,cAxBF,SAAuB0B,EAASyI,EAAQC,GACtC,GAAuB,iBAAZ1I,EACT,MAAM,IAAIpD,UAAU,6BAItB,IAFA,IAAI6F,EAAOD,OAAOC,KAAKzC,GACnB9C,EAAIuF,EAAKrF,OACNF,KAAM,GAAG,CACd,IAAIkL,EAAM3F,EAAKvF,GACXe,EAAYwK,EAAOL,GACvB,GAAInK,EAAJ,CACE,IAAIvF,EAAQsH,EAAQoI,GAChBO,OAAmBzO,IAAVxB,GAAuBuF,EAAUvF,EAAO0P,EAAKpI,GAC1D,IAAe,IAAX2I,EACF,MAAM,IAAI/L,UAAU,UAAYwL,EAAM,YAAcO,QAIxD,IAAqB,IAAjBD,EACF,MAAMhI,MAAM,kBAAoB0H,KAOpClK,WAAYA,I,2BC9Ed,IAAI9C,EAAO,EAAQ,KAIfqB,EAAW+F,OAAO5G,UAAUa,SAQhC,SAASuF,EAAQ3H,GACf,OAAO+E,MAAM4C,QAAQ3H,GASvB,SAASI,EAAYJ,GACnB,YAAsB,IAARA,EAoBhB,SAAS4I,EAAc5I,GACrB,MAA8B,yBAAvBoC,EAASoE,KAAKxG,GAuDvB,SAASoJ,EAASpJ,GAChB,OAAe,OAARA,GAA+B,iBAARA,EAShC,SAAS0H,EAAc1H,GACrB,GAA2B,oBAAvBoC,EAASoE,KAAKxG,GAChB,OAAO,EAGT,IAAIuB,EAAY4G,OAAOoG,eAAevO,GACtC,OAAqB,OAAduB,GAAsBA,IAAc4G,OAAO5G,UAuCpD,SAASiN,EAAWxO,GAClB,MAA8B,sBAAvBoC,EAASoE,KAAKxG,GAwEvB,SAASD,EAAQ0O,EAAK3I,GAEpB,GAAI2I,MAAAA,EAUJ,GALmB,iBAARA,IAETA,EAAM,CAACA,IAGL9G,EAAQ8G,GAEV,IAAK,IAAI5L,EAAI,EAAGC,EAAI2L,EAAI1L,OAAQF,EAAIC,EAAGD,IACrCiD,EAAGU,KAAK,KAAMiI,EAAI5L,GAAIA,EAAG4L,QAI3B,IAAK,IAAIxO,KAAOwO,EACVtG,OAAO5G,UAAUmN,eAAelI,KAAKiI,EAAKxO,IAC5C6F,EAAGU,KAAK,KAAMiI,EAAIxO,GAAMA,EAAKwO,GA2ErCrT,EAAOD,QAAU,CACfwM,QAASA,EACTiB,cAAeA,EACfC,SAtSF,SAAkB7I,GAChB,OAAe,OAARA,IAAiBI,EAAYJ,IAA4B,OAApBA,EAAI2O,cAAyBvO,EAAYJ,EAAI2O,cAChD,mBAA7B3O,EAAI2O,YAAY9F,UAA2B7I,EAAI2O,YAAY9F,SAAS7I,IAqShF/C,WAlRF,SAAoB+C,GAClB,MAA8B,sBAAvBoC,EAASoE,KAAKxG,IAkRrBiJ,kBAzQF,SAA2BjJ,GAOzB,MAL4B,oBAAhB4O,aAAiCA,YAAkB,OACpDA,YAAYC,OAAO7O,GAEnB,GAAUA,EAAU,QAAM4I,EAAc5I,EAAIkJ,SAqQvDM,SA1PF,SAAkBxJ,GAChB,MAAsB,iBAARA,GA0PdoL,SAjPF,SAAkBpL,GAChB,MAAsB,iBAARA,GAiPdoJ,SAAUA,EACV1B,cAAeA,EACftH,YAAaA,EACbqK,OAlNF,SAAgBzK,GACd,MAA8B,kBAAvBoC,EAASoE,KAAKxG,IAkNrB+I,OAzMF,SAAgB/I,GACd,MAA8B,kBAAvBoC,EAASoE,KAAKxG,IAyMrBgJ,OAhMF,SAAgBhJ,GACd,MAA8B,kBAAvBoC,EAASoE,KAAKxG,IAgMrBwO,WAAYA,EACZ1F,SA9KF,SAAkB9I,GAChB,OAAOoJ,EAASpJ,IAAQwO,EAAWxO,EAAI8O,OA8KvC3F,kBArKF,SAA2BnJ,GACzB,MAA8B,6BAAvBoC,EAASoE,KAAKxG,IAqKrBR,qBAzIF,WACE,OAAyB,oBAAdyM,WAAoD,gBAAtBA,UAAU8C,SACY,iBAAtB9C,UAAU8C,SACY,OAAtB9C,UAAU8C,UAI/B,oBAAX/B,QACa,oBAAbzB,UAkITxL,QAASA,EACT2G,MAvEF,SAASA,IACP,IAAI4H,EAAS,GACb,SAASU,EAAYhP,EAAKC,GACpByH,EAAc4G,EAAOrO,KAASyH,EAAc1H,GAC9CsO,EAAOrO,GAAOyG,EAAM4H,EAAOrO,GAAMD,GACxB0H,EAAc1H,GACvBsO,EAAOrO,GAAOyG,EAAM,GAAI1G,GACf2H,EAAQ3H,GACjBsO,EAAOrO,GAAOD,EAAI4H,QAElB0G,EAAOrO,GAAOD,EAIlB,IAAK,IAAI6C,EAAI,EAAGC,EAAIsH,UAAUrH,OAAQF,EAAIC,EAAGD,IAC3C9C,EAAQqK,UAAUvH,GAAImM,GAExB,OAAOV,GAuDP9M,OA5CF,SAAgByN,EAAGC,EAAGhF,GAQpB,OAPAnK,EAAQmP,GAAG,SAAqBlP,EAAKC,GAEjCgP,EAAEhP,GADAiK,GAA0B,mBAARlK,EACXe,EAAKf,EAAKkK,GAEVlK,KAGNiP,GAqCPtF,KAhKF,SAAcwF,GACZ,OAAOA,EAAIxF,KAAOwF,EAAIxF,OAASwF,EAAI3J,QAAQ,aAAc,KAgKzD4J,SA7BF,SAAkBC,GAIhB,OAH8B,QAA1BA,EAAQC,WAAW,KACrBD,EAAUA,EAAQzH,MAAM,IAEnByH,K,iMClUT,kBAqBA,0BAWEV,YAAYY,EAAkBC,GAVpB,KAAAC,UAAY,EACZ,KAAAC,YAAc,GAEd,KAAAC,UAAY,GACZ,KAAAJ,SAAW,GAOnBpN,KAAKoN,SAAWA,EAChBpN,KAAKjB,MAAQ,UAAMO,OAAO+N,GAErBI,wBACL5E,EACArF,GAEA,IAAKxD,KAAK0N,YAAa,MAAM,IAAIxJ,MAAM,qBACvC,MAAMyJ,EAAqC,IACtCnK,EACH9H,IAAKmN,EACLtO,QAAS,IACJiJ,EAAQjJ,QACXqT,OAAQ5N,KAAK0N,YAAYlF,KAAK,KAC9BqF,cAAe,SAAW7N,KAAKwN,WAEjCrH,eAAgB,KAAM,GAGlB2H,SADgB9N,KAAKjB,MAAMhE,QAAQ4S,IACZtT,KAC7B,GAA4B,GAAxByT,EAAaC,QACf,MAAM,IAAI7J,MAAM4J,EAAa3K,OAE/B,OAAO2K,EAAazT,KAOtBoT,uBAME,aALmBzN,KAAKgO,kBAAkBhO,KAAKoN,SAAW,QAAS,CACjE/Q,OAAQ,OACRhC,KAAM,wBAGK4T,KAOfR,kBAAkBjK,GAChB,MAAMjH,EAAS,IAAI2R,gBAInB,OAHA1K,GAAS2K,MAAQ5R,EAAO6R,OAAO,OAAQ5K,GAAS2K,MAChD3K,GAAS6K,IAAM9R,EAAO6R,OAAO,KAAM5K,GAAS6K,IAC5C7K,GAAS8K,SAAW/R,EAAO6R,OAAO,UAAW5K,GAAS8K,SAC/CtO,KAAKgO,kBACVhO,KAAKoN,SAAW,aAAepN,KAAKsN,UAAY,IAAM/Q,EAAO0D,WAC7D,CACE5D,OAAQ,QASdoR,sBACEjK,GAEA,IACI+K,EADAlU,EAAyB,GAEzBmU,GAAU,EACd,KAAOA,GAAS,CACd,MAAMjS,EAA6B,CACjC4R,KAAM3K,EAAQ2K,KACdE,GAAI7K,EAAQ6K,IAEVE,IACFhS,EAAO+R,QAAUG,OAAOF,IAE1B,MAAMG,QAAiB1O,KAAK2O,YAAYpS,GACnCmS,GAAaA,EAAS9N,QAGzBvG,EAAOA,EAAKyI,OAAO4L,GACnBH,EAAWG,EAASA,EAAS9N,OAAS,GAAG8C,IAHzC8K,GAAU,EAMd,OAAOnU,EAOToT,mBACEjK,GAEA,MAAMjH,EAAS,IAAI2R,gBAGnB,OAFA1K,GAAS2K,MAAQ5R,EAAO6R,OAAO,OAAQ5K,GAAS2K,MAChD3K,GAAS6K,IAAM9R,EAAO6R,OAAO,KAAM5K,GAAS6K,UAC/BrO,KAAKgO,kBAChBhO,KAAKoN,SAAW,cAAgBpN,KAAKsN,UAAY,IAAM/Q,EAAO0D,WAC9D,CACE5D,OAAQ,QASdoR,oBACEjK,GAEA,MAAMjH,EAAS,IAAI2R,gBACf1K,GAASoL,aACXrS,EAAO6R,OAAO,eAAgBK,OAAOjL,GAASoL,cAEhDpL,GAASqL,UAAYtS,EAAO6R,OAAO,OAAQK,OAAOjL,GAASqL,WAC3DrL,GAASsL,QAAUvS,EAAO6R,OAAO,KAAMK,OAAOjL,GAASsL,SACvD,MAAMzU,QAA8B2F,KAAKgO,kBACvChO,KAAKoN,SAAW,cAAgBpN,KAAKsN,UAAY,IAAM/Q,EAAO0D,WAC9D,CACE5D,OAAQ,QAIZ,IAAK,IAAIqE,EAAI,EAAGA,EAAIrG,EAAKuG,OAAQF,IAC/BrG,EAAKqG,GAAGqO,gBAAkB1U,EAAKqG,GAAGmE,YAGlCxK,EAAKqG,GAAGmE,YAAcxK,EAAKqG,GAAGmE,YAAYxB,QAAQ,gBAAiB,IACnEhJ,EAAKqG,GAAGmE,YAAcxK,EAAKqG,GAAGmE,YAAYxB,QAAQ,UAAW,IAC7DhJ,EAAKqG,GAAGmE,YAAcxK,EAAKqG,GAAGmE,YAAY2C,OAE5C,OAAOnN,EAOToT,iBAAiBjK,GACf,IAAKA,GAASwL,KAAM,MAAM,IAAI9K,MAAM,qBACpC,MAAM3H,EAAS,IAAI2R,gBAEnB,OADA3R,EAAO6R,OAAO,OAAQK,OAAOjL,GAASwL,aACzBhP,KAAKgO,kBAChBhO,KAAKoN,SAAW,cAAgBpN,KAAKsN,UAAY,IAAM/Q,EAAO0D,WAC9D,CACE5D,OAAQ,QAQdoR,kBACE,aAAazN,KAAKgO,kBAChBhO,KAAKoN,SAAW,gBAAkBpN,KAAKsN,UACvC,CACEjR,OAAQ,QAQdoR,0BACE,aAAazN,KAAKgO,kBAChBhO,KAAKoN,SAAW,kBAAoBpN,KAAKsN,UACzC,CACEjR,OAAQ,QAQdoR,sBACE,aAAazN,KAAKgO,kBAChBhO,KAAKoN,SAAW,eAAiBpN,KAAKsN,UACtC,CACEjR,OAAQ,W,iICtNH,EAAA4S,SAAW,8BACX,EAAAC,iBAAmB,GAAG,EAAAD,wBACtB,EAAAE,gBAAkB,GAAG,EAAAF,wB,sgBCFlC,YACA,YACA,a,6GCCA,eACA,SAIA,MAAaG,UAAgC,EAAAC,kBAU3C7C,YACE8C,EACAnU,EACAkS,GAEAkC,MAAM,EAAAJ,gBAAiB9B,GAdjB,KAAAlS,SAAW,GACX,KAAAmU,MAAQ,GAcdtP,KAAKsP,MAAQb,OAAOa,GACpBtP,KAAK7E,SAAWsT,OAAOtT,GAMzBsS,cACE,IAAKzN,KAAKsP,MAAO,MAAM,IAAIpL,MAAM,sBACjC,MAAMsL,EAAW,IAAItB,gBACrBsB,EAASpB,OAAO,UAAW,QAC3BoB,EAASpB,OAAO,QAASpO,KAAKsP,OAC9BE,EAASpB,OAAO,YAAa,YAC7BoB,EAASpB,OAAO,WAAYpO,KAAK7E,UACjCqU,EAASpB,OAAO,kBAAmB,sBAEnC,MAAMrT,QAAgBiF,KAAKjB,MAAMhE,QAAQ,CACvCW,IAAK,EAAAuT,SAAW,gBAChB5S,OAAQ,OACRhC,KAAMmV,EAASvP,WACfwP,aAAc,EACdlV,QAAS,CACP,eAAgB,qCAElB4L,eAAgB,KAAM,IAExB,GAAsB,KAAlBpL,EAAQiB,SAAkBjB,EAAQR,QAAQ,cAC5C,MAAM,IAAI2J,MAAM,kDAElB,MAAM3K,EAAUwB,EAAQR,QAAQ,cAChC,IAAK,IAAImG,EAAI,EAAGA,EAAInH,EAAQqH,OAAQF,IAClCnH,EAAQmH,GAAKnH,EAAQmH,GAAGgP,UAAU,EAAGnW,EAAQmH,GAAG7D,QAAQ,MAG1DmD,KAAK0N,YAAcnU,EAEnB,IAAIoW,EAAiBC,UAAUrW,EAAQ,IACpC8J,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,KAMnB,GALAsM,EAAYrI,KAAKC,MACfoI,EAAUD,UAAUC,EAAU9S,QAAQ,KAAM8S,EAAU/O,SAExDZ,KAAKwN,UAAYmC,EAAUE,WAC3B7P,KAAK8P,aAAe9P,KAAK+P,aACpB/P,KAAK8P,OAAQ,MAAM,IAAI5L,MAAM,kCAClClE,KAAKsN,UAAYtN,KAAK8P,OAAO,GAAGpM,GAChC1D,KAAKuN,YAAcvN,KAAK8P,OAAO,GAAGlL,KAMpC6I,kBACE,OAAOzN,KAAKgO,kBAAkBhO,KAAKoN,SAAW,UAAW,CACvD/Q,OAAQ,QAOZoR,kBAAkBuC,GAChB,IAAKA,EAAS,MAAM,IAAI9L,MAAM,yBAC9B,MAAM4L,EAAS9P,KAAK8P,OACpB,IAAK,IAAIpP,EAAI,EAAGA,EAAIoP,EAAOlP,OAAQF,IAAK,CACtC,MAAMuP,EAAQH,EAAOpP,GACrB,GAAIuP,EAAMvM,IAAMsM,EAGd,OAFAhQ,KAAKsN,UAAY2C,EAAMvM,QACvB1D,KAAKuN,YAAc0C,EAAMrL,MAI7B,MAAM,IAAIV,MAAM,wCAxFpB,6B,8GCNA,eACA,SAKA,MAAagM,UAAiC,EAAAb,kBAS5C7C,YACE2D,EACAC,EACA/C,GAEAkC,MAAM,EAAAL,iBAAkB7B,GAbnB,KAAA8C,YAAc,GACd,KAAAC,YAAc,GAanBpQ,KAAKmQ,YAAc1B,OAAO0B,GAC1BnQ,KAAKoQ,YAAc3B,OAAO2B,GAM5B3C,cACE,IAAKzN,KAAKmQ,YAAa,MAAM,IAAIjM,MAAM,6BACvC,MAAMsL,EAAW,IAAItB,gBACrBsB,EAASpB,OAAO,UAAW,QAC3BoB,EAASpB,OAAO,OAAQpO,KAAKmQ,YAAY7T,eACzCkT,EAASpB,OAAO,MAAOpO,KAAKoQ,aAC5BZ,EAASpB,OAAO,cAAe,KAC/BoB,EAASpB,OAAO,kBAAmB,sBACnC,MAAMrT,QAAgBiF,KAAKjB,MAAMhE,QAAQ,CACvCW,IAAK,EAAAuT,SAAW,iBAChB5S,OAAQ,OACRhC,KAAMmV,EAASvP,WACfwP,aAAc,EACdlV,QAAS,CACP,eAAgB,qCAElB4L,eAAgB,KAAM,IAExB,GAAsB,KAAlBpL,EAAQiB,SAAkBjB,EAAQR,QAAQ,cAC5C,MAAM,IAAI2J,MAAM,kDAClB,MAAM3K,EAAUwB,EAAQR,QAAQ,cAChC,IAAK,IAAImG,EAAI,EAAGA,EAAInH,EAAQqH,OAAQF,IAClCnH,EAAQmH,GAAKnH,EAAQmH,GAAGgP,UAAU,EAAGnW,EAAQmH,GAAG7D,QAAQ,MAE1DmD,KAAK0N,YAAcnU,EAEnB,IAAIoW,EAAiBC,UAAUrW,EAAQ,IACpC8J,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,KACnBsM,EAAYrI,KAAKC,MACfoI,EAAUD,UAAUC,EAAU9S,QAAQ,KAAM8S,EAAU/O,SAExDZ,KAAKwN,UAAYmC,EAAUE,WAC3B,MAAM5B,QAAajO,KAAKqQ,iBACxBrQ,KAAKsN,UAAYW,EAAKvK,GACtB1D,KAAKuN,YAAcU,EAAKrJ,MAzD5B,8B,4ECPI0L,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB9S,IAAjB+S,EACH,OAAOA,EAAazX,QAGrB,IAAIC,EAASqX,EAAyBE,GAAY,CAGjDxX,QAAS,IAOV,OAHA0X,EAAoBF,GAAUnM,KAAKpL,EAAOD,QAASC,EAAQA,EAAOD,QAASuX,GAGpEtX,EAAOD,QClBWuX,CAAoB,K,MDF1CD","sources":["webpack://classchartsapi/webpack/universalModuleDefinition","webpack://classchartsapi/./node_modules/axios/index.js","webpack://classchartsapi/./node_modules/axios/lib/adapters/xhr.js","webpack://classchartsapi/./node_modules/axios/lib/axios.js","webpack://classchartsapi/./node_modules/axios/lib/cancel/Cancel.js","webpack://classchartsapi/./node_modules/axios/lib/cancel/CancelToken.js","webpack://classchartsapi/./node_modules/axios/lib/cancel/isCancel.js","webpack://classchartsapi/./node_modules/axios/lib/core/Axios.js","webpack://classchartsapi/./node_modules/axios/lib/core/InterceptorManager.js","webpack://classchartsapi/./node_modules/axios/lib/core/buildFullPath.js","webpack://classchartsapi/./node_modules/axios/lib/core/createError.js","webpack://classchartsapi/./node_modules/axios/lib/core/dispatchRequest.js","webpack://classchartsapi/./node_modules/axios/lib/core/enhanceError.js","webpack://classchartsapi/./node_modules/axios/lib/core/mergeConfig.js","webpack://classchartsapi/./node_modules/axios/lib/core/settle.js","webpack://classchartsapi/./node_modules/axios/lib/core/transformData.js","webpack://classchartsapi/./node_modules/axios/lib/defaults/index.js","webpack://classchartsapi/./node_modules/axios/lib/defaults/transitional.js","webpack://classchartsapi/./node_modules/axios/lib/env/data.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/bind.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/buildURL.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/combineURLs.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/cookies.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/spread.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/validator.js","webpack://classchartsapi/./node_modules/axios/lib/utils.js","webpack://classchartsapi/./src/baseClient.ts","webpack://classchartsapi/./src/consts.ts","webpack://classchartsapi/./src/index.ts","webpack://classchartsapi/./src/parentClient.ts","webpack://classchartsapi/./src/studentClient.ts","webpack://classchartsapi/webpack/bootstrap","webpack://classchartsapi/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"classchartsapi\"] = factory();\n\telse\n\t\troot[\"classchartsapi\"] = factory();\n})(self, function() {\nreturn ","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar transitionalDefaults = require('../defaults/transitional');\nvar Cancel = require('../cancel/Cancel');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new Cancel('canceled');\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar enhanceError = require('../core/enhanceError');\nvar transitionalDefaults = require('./transitional');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","module.exports = {\n \"version\": \"0.26.1\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar VERSION = require('../env/data').version;\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return toString.call(val) === '[object URLSearchParams]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","import axios from \"axios\";\r\nimport type { AxiosRequestConfig, AxiosInstance } from \"axios\";\r\nimport type {\r\n ActivityResponse,\r\n AnnouncementsResponse,\r\n BadgesResponse,\r\n BehaviourResponse,\r\n DetentionsResponse,\r\n GetActivityOptions,\r\n GetBehaviourOptions,\r\n GetFullActivityOptions,\r\n GetHomeworkOptions,\r\n GetLessonsOptions,\r\n Homework,\r\n HomeworksResponse,\r\n LessonsResponse,\r\n Student,\r\n} from \"./types\";\r\n/**\r\n * The base client\r\n */\r\nexport class ClasschartsClient {\r\n protected studentId = 0;\r\n protected studentName = \"\";\r\n protected authCookies: Array | undefined;\r\n protected sessionId = \"\";\r\n protected API_BASE = \"\";\r\n protected axios: AxiosInstance;\r\n /**\r\n *\r\n * @param API_BASE Base API URL, this is different depending if its called as a parent or student\r\n */\r\n constructor(API_BASE: string, axiosConfig?: AxiosRequestConfig) {\r\n this.API_BASE = API_BASE;\r\n this.axios = axios.create(axiosConfig);\r\n }\r\n public async makeAuthedRequest(\r\n path: string,\r\n options: Omit\r\n ) {\r\n if (!this.authCookies) throw new Error(\"Not authenticated\");\r\n const requestOptions: AxiosRequestConfig = {\r\n ...options,\r\n url: path,\r\n headers: {\r\n ...options.headers,\r\n Cookie: this.authCookies.join(\";\"),\r\n authorization: \"Basic \" + this.sessionId,\r\n },\r\n validateStatus: () => true,\r\n };\r\n const request = await this.axios.request(requestOptions);\r\n const responseJSON = request.data;\r\n if (responseJSON.success == 0) {\r\n throw new Error(responseJSON.error);\r\n }\r\n return responseJSON.data;\r\n }\r\n\r\n /**\r\n * Gets general information about the logged in student\r\n * @returns Student object\r\n */\r\n async getStudentInfo(): Promise {\r\n const data = await this.makeAuthedRequest(this.API_BASE + \"/ping\", {\r\n method: \"POST\",\r\n data: \"include_data=true\",\r\n });\r\n\r\n return data?.user;\r\n }\r\n /**\r\n * This function is only used for pagination, you likely want client.getFullActivity\r\n * @param options GetActivityOptions\r\n * @returns Activity data\r\n */\r\n async getActivity(options?: GetActivityOptions): Promise {\r\n const params = new URLSearchParams();\r\n options?.from && params.append(\"from\", options?.from);\r\n options?.to && params.append(\"to\", options?.to);\r\n options?.last_id && params.append(\"last_id\", options?.last_id);\r\n return this.makeAuthedRequest(\r\n this.API_BASE + \"/activity/\" + this.studentId + \"?\" + params.toString(),\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n /**\r\n * Helper function for getActivity, returns all the data from the selected dates\r\n * @param options GetFullActivityOptions\r\n * @returns Activity Data\r\n */\r\n async getFullActivity(\r\n options: GetFullActivityOptions\r\n ): Promise {\r\n let data: ActivityResponse = [];\r\n let prevLast: number | undefined;\r\n let gotData = true;\r\n while (gotData) {\r\n const params: GetActivityOptions = {\r\n from: options.from,\r\n to: options.to,\r\n };\r\n if (prevLast) {\r\n params.last_id = String(prevLast);\r\n }\r\n const fragment = await this.getActivity(params);\r\n if (!fragment || !fragment.length) {\r\n gotData = false;\r\n } else {\r\n data = data.concat(fragment);\r\n prevLast = fragment[fragment.length - 1].id;\r\n }\r\n }\r\n return data;\r\n }\r\n /**\r\n * Gets the logged in students behaviour points\r\n * @param options GetBehaviourOptions\r\n * @returns Array of behaviour points\r\n */\r\n async getBehaviour(\r\n options?: GetBehaviourOptions\r\n ): Promise {\r\n const params = new URLSearchParams();\r\n options?.from && params.append(\"from\", options?.from);\r\n options?.to && params.append(\"to\", options?.to);\r\n return await this.makeAuthedRequest(\r\n this.API_BASE + \"/behaviour/\" + this.studentId + \"?\" + params.toString(),\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n /**\r\n * Gets a list of the logged in student's homeworks\r\n * @param options GetHomeworkOptions\r\n * @returns Array of homeworks\r\n */\r\n async listHomeworks(\r\n options?: GetHomeworkOptions\r\n ): Promise {\r\n const params = new URLSearchParams();\r\n if (options?.displayDate)\r\n params.append(\"display_date\", String(options?.displayDate));\r\n\r\n options?.fromDate && params.append(\"from\", String(options?.fromDate));\r\n options?.toDate && params.append(\"to\", String(options?.toDate));\r\n const data: Array = await this.makeAuthedRequest(\r\n this.API_BASE + \"/homeworks/\" + this.studentId + \"?\" + params.toString(),\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n data[i].description_raw = data[i].description;\r\n\r\n // homework.lesson.replace(/\\\\/g, '')\r\n data[i].description = data[i].description.replace(/(<([^>]+)>)/gi, \"\");\r\n data[i].description = data[i].description.replace(/ /g, \"\");\r\n data[i].description = data[i].description.trim();\r\n }\r\n return data;\r\n }\r\n /**\r\n * Gets the logged in student's lessons for a day\r\n * @param options GetLessonsOptions\r\n * @returns Array of lessons\r\n */\r\n async getLessons(options?: GetLessonsOptions): Promise {\r\n if (!options?.date) throw new Error(\"No date specified\");\r\n const params = new URLSearchParams();\r\n params.append(\"date\", String(options?.date));\r\n return await this.makeAuthedRequest(\r\n this.API_BASE + \"/timetable/\" + this.studentId + \"?\" + params.toString(),\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n /**\r\n * Gets a list of the students badges\r\n * @returns Array of badges\r\n */\r\n async getBadges(): Promise {\r\n return await this.makeAuthedRequest(\r\n this.API_BASE + \"/eventbadges/\" + this.studentId,\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n /**\r\n * Lists the logged in student's announcements\r\n * @returns Array of announcements\r\n */\r\n async listAnnouncements(): Promise {\r\n return await this.makeAuthedRequest(\r\n this.API_BASE + \"/announcements/\" + this.studentId,\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n /**\r\n * Gets the logged in student's detentions\r\n * @returns Array of detentions\r\n */\r\n async getDetentions(): Promise {\r\n return await this.makeAuthedRequest(\r\n this.API_BASE + \"/detentions/\" + this.studentId,\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n}\r\n","export const BASE_URL = \"https://www.classcharts.com\";\nexport const API_BASE_STUDENT = `${BASE_URL}/apiv2student`;\nexport const API_BASE_PARENT = `${BASE_URL}/apiv2parent`;\n","export * from \"./parentClient\";\r\nexport * from \"./studentClient\";\r\nexport * from \"./types\";\r\n","import axios, { AxiosInstance, AxiosRequestConfig } from \"axios\";\r\nimport type { GetPupilsResponse } from \"./types\";\r\n\r\nimport { ClasschartsClient } from \"./baseClient\";\r\nimport { API_BASE_PARENT, BASE_URL } from \"./consts\";\r\n/**\r\n * The base client\r\n */\r\nexport class ClasschartsParentClient extends ClasschartsClient {\r\n private password = \"\";\r\n private email = \"\";\r\n // @ts-expect-error Init in .login\r\n public pupils: GetPupilsResponse;\r\n /**\r\n *\r\n * @param email Parents email address\r\n * @param password Parents password\r\n */\r\n constructor(\r\n email: string,\r\n password: string,\r\n axiosConfig?: AxiosRequestConfig\r\n ) {\r\n super(API_BASE_PARENT, axiosConfig);\r\n this.email = String(email);\r\n this.password = String(password);\r\n }\r\n\r\n /**\r\n * Logs the user in the client and authenticates with classcharts\r\n */\r\n async login(): Promise {\r\n if (!this.email) throw new Error(\"Email not inputted\");\r\n const formData = new URLSearchParams();\r\n formData.append(\"_method\", \"POST\");\r\n formData.append(\"email\", this.email);\r\n formData.append(\"logintype\", \"existing\");\r\n formData.append(\"password\", this.password);\r\n formData.append(\"recaptcha-token\", \"no-token-avaliable\");\r\n\r\n const request = await this.axios.request({\r\n url: BASE_URL + \"/parent/login\",\r\n method: \"POST\",\r\n data: formData.toString(),\r\n maxRedirects: 0,\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n validateStatus: () => true,\r\n });\r\n if (request.status != 302 || !request.headers[\"set-cookie\"])\r\n throw new Error(\"Unauthenticated: Classcharts returned an error\");\r\n\r\n const cookies = request.headers[\"set-cookie\"];\r\n for (let i = 0; i < cookies.length; i++) {\r\n cookies[i] = cookies[i].substring(0, cookies[i].indexOf(\";\"));\r\n }\r\n\r\n this.authCookies = cookies;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let sessionID: any = decodeURI(cookies[2])\r\n .replace(/%3A/g, \":\")\r\n .replace(/%2C/g, \",\");\r\n sessionID = JSON.parse(\r\n sessionID.substring(sessionID.indexOf(\"{\"), sessionID.length)\r\n );\r\n this.sessionId = sessionID.session_id;\r\n this.pupils = await this.getPupils();\r\n if (!this.pupils) throw new Error(\"Account has no pupils attached\");\r\n this.studentId = this.pupils[0].id;\r\n this.studentName = this.pupils[0].name;\r\n }\r\n /**\r\n * Get Pupil details\r\n * @returns an array fo Pupils connected to this parent's account\r\n */\r\n async getPupils(): Promise {\r\n return this.makeAuthedRequest(this.API_BASE + \"/pupils\", {\r\n method: \"GET\",\r\n });\r\n }\r\n /**\r\n * Selects a pupil to be used with API requests\r\n * @param pupilId Pupil ID obtained from this.pupils or getPupils\r\n */\r\n async selectPupil(pupilId: number): Promise {\r\n if (!pupilId) throw new Error(\"No pupil ID specified\");\r\n const pupils = this.pupils;\r\n for (let i = 0; i < pupils.length; i++) {\r\n const pupil = pupils[i];\r\n if (pupil.id == pupilId) {\r\n this.studentId = pupil.id;\r\n this.studentName = pupil.name;\r\n return;\r\n }\r\n }\r\n throw new Error(\"No pupil with specified ID returned\");\r\n }\r\n}\r\n","import axios from \"axios\";\r\nimport type { AxiosRequestConfig } from \"axios\";\r\nimport { API_BASE_STUDENT, BASE_URL } from \"./consts\";\r\nimport { ClasschartsClient } from \"./baseClient\";\r\n/**\r\n * The base client\r\n */\r\n\r\nexport class ClasschartsStudentClient extends ClasschartsClient {\r\n public studentCode = \"\";\r\n public dateOfBirth = \"\";\r\n\r\n /**\r\n *\r\n * @param studentCode Classcharts student code\r\n * @param dateOfBirth Student's date of birth\r\n */\r\n constructor(\r\n studentCode: string,\r\n dateOfBirth?: string,\r\n axiosConfig?: AxiosRequestConfig\r\n ) {\r\n super(API_BASE_STUDENT, axiosConfig);\r\n this.studentCode = String(studentCode);\r\n this.dateOfBirth = String(dateOfBirth);\r\n }\r\n\r\n /**\r\n * Initialises the client and authenticates with classcharts\r\n */\r\n async login(): Promise {\r\n if (!this.studentCode) throw new Error(\"Student Code not inputted\");\r\n const formData = new URLSearchParams();\r\n formData.append(\"_method\", \"POST\");\r\n formData.append(\"code\", this.studentCode.toUpperCase());\r\n formData.append(\"dob\", this.dateOfBirth);\r\n formData.append(\"remember_me\", \"1\");\r\n formData.append(\"recaptcha-token\", \"no-token-avaliable\");\r\n const request = await this.axios.request({\r\n url: BASE_URL + \"/student/login\",\r\n method: \"POST\",\r\n data: formData.toString(),\r\n maxRedirects: 0,\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n validateStatus: () => true,\r\n });\r\n if (request.status != 302 || !request.headers[\"set-cookie\"])\r\n throw new Error(\"Unauthenticated: Classcharts returned an error\");\r\n const cookies = request.headers[\"set-cookie\"];\r\n for (let i = 0; i < cookies.length; i++) {\r\n cookies[i] = cookies[i].substring(0, cookies[i].indexOf(\";\"));\r\n }\r\n this.authCookies = cookies;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let sessionID: any = decodeURI(cookies[2])\r\n .replace(/%3A/g, \":\")\r\n .replace(/%2C/g, \",\");\r\n sessionID = JSON.parse(\r\n sessionID.substring(sessionID.indexOf(\"{\"), sessionID.length)\r\n );\r\n this.sessionId = sessionID.session_id;\r\n const user = await this.getStudentInfo();\r\n this.studentId = user.id;\r\n this.studentName = user.name;\r\n }\r\n}\r\n","// 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","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(607);\n"],"names":["root","factory","exports","module","define","amd","self","utils","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","transitionalDefaults","Cancel","config","Promise","resolve","reject","onCanceled","requestData","data","requestHeaders","headers","responseType","done","cancelToken","unsubscribe","signal","removeEventListener","isFormData","request","XMLHttpRequest","auth","username","password","unescape","encodeURIComponent","Authorization","btoa","fullPath","baseURL","url","onloadend","responseHeaders","getAllResponseHeaders","response","responseText","status","statusText","value","err","open","method","toUpperCase","params","paramsSerializer","timeout","onreadystatechange","readyState","responseURL","indexOf","setTimeout","onabort","onerror","ontimeout","timeoutErrorMessage","transitional","clarifyTimeoutError","isStandardBrowserEnv","xsrfValue","withCredentials","xsrfCookieName","read","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isUndefined","onDownloadProgress","addEventListener","onUploadProgress","upload","cancel","type","abort","subscribe","aborted","send","bind","Axios","mergeConfig","axios","createInstance","defaultConfig","context","instance","prototype","extend","create","instanceConfig","CancelToken","isCancel","VERSION","all","promises","spread","isAxiosError","message","this","toString","__CANCEL__","executor","TypeError","resolvePromise","promise","token","then","_listeners","i","l","length","onfulfilled","_resolve","reason","throwIfRequested","listener","push","index","splice","source","c","InterceptorManager","dispatchRequest","validator","validators","defaults","interceptors","configOrUrl","assertOptions","silentJSONParsing","boolean","forcedJSONParsing","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","unshift","fulfilled","rejected","responseInterceptorChain","chain","Array","apply","concat","shift","newConfig","onFulfilled","onRejected","error","getUri","replace","handlers","use","options","eject","id","fn","h","isAbsoluteURL","combineURLs","requestedURL","enhanceError","code","Error","transformData","throwIfCancellationRequested","call","transformRequest","merge","common","adapter","transformResponse","toJSON","name","description","number","fileName","lineNumber","columnNumber","stack","config1","config2","getMergedValue","target","isPlainObject","isArray","slice","mergeDeepProperties","prop","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","Object","keys","configValue","validateStatus","fns","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","process","isArrayBuffer","isBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","isObject","rawValue","parser","encoder","isString","JSON","parse","trim","e","stringify","stringifySafely","strictJSONParsing","maxContentLength","maxBodyLength","thisArg","args","arguments","encode","serializedParams","parts","v","isDate","toISOString","join","hashmarkIndex","relativeURL","write","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","document","match","RegExp","decodeURIComponent","remove","now","test","payload","originURL","msie","navigator","userAgent","urlParsingNode","createElement","resolveURL","href","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","window","location","requestURL","parsed","normalizedName","ignoreDuplicateOf","split","line","substr","callback","arr","thing","deprecatedWarnings","version","formatMessage","opt","desc","opts","console","warn","schema","allowUnknown","result","getPrototypeOf","isFunction","obj","hasOwnProperty","constructor","ArrayBuffer","isView","pipe","product","assignValue","a","b","str","stripBOM","content","charCodeAt","API_BASE","axiosConfig","studentId","studentName","sessionId","async","authCookies","requestOptions","Cookie","authorization","responseJSON","success","makeAuthedRequest","user","URLSearchParams","from","append","to","last_id","prevLast","gotData","String","fragment","getActivity","displayDate","fromDate","toDate","description_raw","date","BASE_URL","API_BASE_STUDENT","API_BASE_PARENT","ClasschartsParentClient","ClasschartsClient","email","super","formData","maxRedirects","substring","sessionID","decodeURI","session_id","pupils","getPupils","pupilId","pupil","ClasschartsStudentClient","studentCode","dateOfBirth","getStudentInfo","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"classcharts-api.js","mappings":"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","sources":["webpack://classchartsapi/webpack/universalModuleDefinition","webpack://classchartsapi/./node_modules/axios/index.js","webpack://classchartsapi/./node_modules/axios/lib/adapters/xhr.js","webpack://classchartsapi/./node_modules/axios/lib/axios.js","webpack://classchartsapi/./node_modules/axios/lib/cancel/Cancel.js","webpack://classchartsapi/./node_modules/axios/lib/cancel/CancelToken.js","webpack://classchartsapi/./node_modules/axios/lib/cancel/isCancel.js","webpack://classchartsapi/./node_modules/axios/lib/core/Axios.js","webpack://classchartsapi/./node_modules/axios/lib/core/InterceptorManager.js","webpack://classchartsapi/./node_modules/axios/lib/core/buildFullPath.js","webpack://classchartsapi/./node_modules/axios/lib/core/createError.js","webpack://classchartsapi/./node_modules/axios/lib/core/dispatchRequest.js","webpack://classchartsapi/./node_modules/axios/lib/core/enhanceError.js","webpack://classchartsapi/./node_modules/axios/lib/core/mergeConfig.js","webpack://classchartsapi/./node_modules/axios/lib/core/settle.js","webpack://classchartsapi/./node_modules/axios/lib/core/transformData.js","webpack://classchartsapi/./node_modules/axios/lib/defaults/index.js","webpack://classchartsapi/./node_modules/axios/lib/defaults/transitional.js","webpack://classchartsapi/./node_modules/axios/lib/env/data.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/bind.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/buildURL.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/combineURLs.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/cookies.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/spread.js","webpack://classchartsapi/./node_modules/axios/lib/helpers/validator.js","webpack://classchartsapi/./node_modules/axios/lib/utils.js","webpack://classchartsapi/./src/baseClient.ts","webpack://classchartsapi/./src/consts.ts","webpack://classchartsapi/./src/index.ts","webpack://classchartsapi/./src/parentClient.ts","webpack://classchartsapi/./src/studentClient.ts","webpack://classchartsapi/webpack/bootstrap","webpack://classchartsapi/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"classchartsapi\"] = factory();\n\telse\n\t\troot[\"classchartsapi\"] = factory();\n})(self, function() {\nreturn ","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar transitionalDefaults = require('../defaults/transitional');\nvar Cancel = require('../cancel/Cancel');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new Cancel('canceled');\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar enhanceError = require('../core/enhanceError');\nvar transitionalDefaults = require('./transitional');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","module.exports = {\n \"version\": \"0.26.1\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar VERSION = require('../env/data').version;\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return toString.call(val) === '[object URLSearchParams]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","import axios from \"axios\";\r\nimport type { AxiosRequestConfig, AxiosInstance } from \"axios\";\r\nimport type {\r\n ActivityResponse,\r\n AnnouncementsResponse,\r\n BadgesResponse,\r\n BehaviourResponse,\r\n DetentionsResponse,\r\n GetActivityOptions,\r\n GetBehaviourOptions,\r\n GetFullActivityOptions,\r\n GetHomeworkOptions,\r\n GetLessonsOptions,\r\n Homework,\r\n HomeworksResponse,\r\n LessonsResponse,\r\n Student,\r\n} from \"./types\";\r\n/**\r\n * The base client\r\n */\r\nexport class ClasschartsClient {\r\n protected studentId = 0;\r\n protected studentName = \"\";\r\n protected authCookies: Array | undefined;\r\n protected sessionId = \"\";\r\n protected API_BASE = \"\";\r\n protected axios: AxiosInstance;\r\n /**\r\n *\r\n * @param API_BASE Base API URL, this is different depending if its called as a parent or student\r\n */\r\n constructor(API_BASE: string, axiosConfig?: AxiosRequestConfig) {\r\n this.API_BASE = API_BASE;\r\n this.axios = axios.create(axiosConfig);\r\n }\r\n public async makeAuthedRequest(\r\n path: string,\r\n options: Omit\r\n ) {\r\n if (!this.authCookies) throw new Error(\"Not authenticated\");\r\n const requestOptions: AxiosRequestConfig = {\r\n ...options,\r\n url: path,\r\n headers: {\r\n ...options.headers,\r\n Cookie: this.authCookies.join(\";\"),\r\n authorization: \"Basic \" + this.sessionId,\r\n },\r\n validateStatus: () => true,\r\n };\r\n const request = await this.axios.request(requestOptions);\r\n const responseJSON = request.data;\r\n if (responseJSON.success == 0) {\r\n throw new Error(responseJSON.error);\r\n }\r\n return responseJSON.data;\r\n }\r\n\r\n /**\r\n * Gets general information about the logged in student\r\n * @returns Student object\r\n */\r\n async getStudentInfo(): Promise {\r\n const data = await this.makeAuthedRequest(this.API_BASE + \"/ping\", {\r\n method: \"POST\",\r\n data: \"include_data=true\",\r\n });\r\n\r\n return data?.user;\r\n }\r\n /**\r\n * This function is only used for pagination, you likely want client.getFullActivity\r\n * @param options GetActivityOptions\r\n * @returns Activity data\r\n */\r\n async getActivity(options?: GetActivityOptions): Promise {\r\n const params = new URLSearchParams();\r\n options?.from && params.append(\"from\", options?.from);\r\n options?.to && params.append(\"to\", options?.to);\r\n options?.last_id && params.append(\"last_id\", options?.last_id);\r\n return this.makeAuthedRequest(\r\n this.API_BASE + \"/activity/\" + this.studentId + \"?\" + params.toString(),\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n /**\r\n * Helper function for getActivity, returns all the data from the selected dates\r\n * @param options GetFullActivityOptions\r\n * @returns Activity Data\r\n */\r\n async getFullActivity(\r\n options: GetFullActivityOptions\r\n ): Promise {\r\n let data: ActivityResponse = [];\r\n let prevLast: number | undefined;\r\n let gotData = true;\r\n while (gotData) {\r\n const params: GetActivityOptions = {\r\n from: options.from,\r\n to: options.to,\r\n };\r\n if (prevLast) {\r\n params.last_id = String(prevLast);\r\n }\r\n const fragment = await this.getActivity(params);\r\n if (!fragment || !fragment.length) {\r\n gotData = false;\r\n } else {\r\n data = data.concat(fragment);\r\n prevLast = fragment[fragment.length - 1].id;\r\n }\r\n }\r\n return data;\r\n }\r\n /**\r\n * Gets the logged in students behaviour points\r\n * @param options GetBehaviourOptions\r\n * @returns Array of behaviour points\r\n */\r\n async getBehaviour(\r\n options?: GetBehaviourOptions\r\n ): Promise {\r\n const params = new URLSearchParams();\r\n options?.from && params.append(\"from\", options?.from);\r\n options?.to && params.append(\"to\", options?.to);\r\n return await this.makeAuthedRequest(\r\n this.API_BASE + \"/behaviour/\" + this.studentId + \"?\" + params.toString(),\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n /**\r\n * Gets a list of the logged in student's homeworks\r\n * @param options GetHomeworkOptions\r\n * @returns Array of homeworks\r\n */\r\n async listHomeworks(\r\n options?: GetHomeworkOptions\r\n ): Promise {\r\n const params = new URLSearchParams();\r\n if (options?.displayDate)\r\n params.append(\"display_date\", String(options?.displayDate));\r\n\r\n options?.fromDate && params.append(\"from\", String(options?.fromDate));\r\n options?.toDate && params.append(\"to\", String(options?.toDate));\r\n const data: Array = await this.makeAuthedRequest(\r\n this.API_BASE + \"/homeworks/\" + this.studentId + \"?\" + params.toString(),\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n data[i].description_raw = data[i].description;\r\n\r\n // homework.lesson.replace(/\\\\/g, '')\r\n data[i].description = data[i].description.replace(/(<([^>]+)>)/gi, \"\");\r\n data[i].description = data[i].description.replace(/ /g, \"\");\r\n data[i].description = data[i].description.trim();\r\n }\r\n return data;\r\n }\r\n /**\r\n * Gets the logged in student's lessons for a day\r\n * @param options GetLessonsOptions\r\n * @returns Array of lessons\r\n */\r\n async getLessons(options?: GetLessonsOptions): Promise {\r\n if (!options?.date) throw new Error(\"No date specified\");\r\n const params = new URLSearchParams();\r\n params.append(\"date\", String(options?.date));\r\n return await this.makeAuthedRequest(\r\n this.API_BASE + \"/timetable/\" + this.studentId + \"?\" + params.toString(),\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n /**\r\n * Gets a list of the students badges\r\n * @returns Array of badges\r\n */\r\n async getBadges(): Promise {\r\n return await this.makeAuthedRequest(\r\n this.API_BASE + \"/eventbadges/\" + this.studentId,\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n /**\r\n * Lists the logged in student's announcements\r\n * @returns Array of announcements\r\n */\r\n async listAnnouncements(): Promise {\r\n return await this.makeAuthedRequest(\r\n this.API_BASE + \"/announcements/\" + this.studentId,\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n /**\r\n * Gets the logged in student's detentions\r\n * @returns Array of detentions\r\n */\r\n async getDetentions(): Promise {\r\n return await this.makeAuthedRequest(\r\n this.API_BASE + \"/detentions/\" + this.studentId,\r\n {\r\n method: \"GET\",\r\n }\r\n );\r\n }\r\n}\r\n","export const BASE_URL = \"https://www.classcharts.com\";\nexport const API_BASE_STUDENT = `${BASE_URL}/apiv2student`;\nexport const API_BASE_PARENT = `${BASE_URL}/apiv2parent`;\n","export * from \"./parentClient\";\r\nexport * from \"./studentClient\";\r\nexport * from \"./types\";\r\n","import axios, { AxiosInstance, AxiosRequestConfig } from \"axios\";\r\nimport type { GetPupilsResponse } from \"./types\";\r\n\r\nimport { ClasschartsClient } from \"./baseClient\";\r\nimport { API_BASE_PARENT, BASE_URL } from \"./consts\";\r\n/**\r\n * The base client\r\n */\r\nexport class ClasschartsParentClient extends ClasschartsClient {\r\n private password = \"\";\r\n private email = \"\";\r\n // @ts-expect-error Init in .login\r\n public pupils: GetPupilsResponse;\r\n /**\r\n *\r\n * @param email Parents email address\r\n * @param password Parents password\r\n */\r\n constructor(\r\n email: string,\r\n password: string,\r\n axiosConfig?: AxiosRequestConfig\r\n ) {\r\n super(API_BASE_PARENT, axiosConfig);\r\n this.email = String(email);\r\n this.password = String(password);\r\n }\r\n\r\n /**\r\n * Logs the user in the client and authenticates with classcharts\r\n */\r\n async login(): Promise {\r\n if (!this.email) throw new Error(\"Email not inputted\");\r\n const formData = new URLSearchParams();\r\n formData.append(\"_method\", \"POST\");\r\n formData.append(\"email\", this.email);\r\n formData.append(\"logintype\", \"existing\");\r\n formData.append(\"password\", this.password);\r\n formData.append(\"recaptcha-token\", \"no-token-avaliable\");\r\n\r\n const request = await this.axios.request({\r\n url: BASE_URL + \"/parent/login\",\r\n method: \"POST\",\r\n data: formData.toString(),\r\n maxRedirects: 0,\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n validateStatus: () => true,\r\n });\r\n if (request.status != 302 || !request.headers[\"set-cookie\"])\r\n throw new Error(\"Unauthenticated: Classcharts returned an error\");\r\n\r\n const cookies = request.headers[\"set-cookie\"];\r\n for (let i = 0; i < cookies.length; i++) {\r\n cookies[i] = cookies[i].substring(0, cookies[i].indexOf(\";\"));\r\n }\r\n\r\n this.authCookies = cookies;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let sessionID: any = decodeURI(cookies[2])\r\n .replace(/%3A/g, \":\")\r\n .replace(/%2C/g, \",\");\r\n sessionID = JSON.parse(\r\n sessionID.substring(sessionID.indexOf(\"{\"), sessionID.length)\r\n );\r\n this.sessionId = sessionID.session_id;\r\n this.pupils = await this.getPupils();\r\n if (!this.pupils) throw new Error(\"Account has no pupils attached\");\r\n this.studentId = this.pupils[0].id;\r\n this.studentName = this.pupils[0].name;\r\n }\r\n /**\r\n * Get Pupil details\r\n * @returns an array fo Pupils connected to this parent's account\r\n */\r\n async getPupils(): Promise {\r\n return this.makeAuthedRequest(this.API_BASE + \"/pupils\", {\r\n method: \"GET\",\r\n });\r\n }\r\n /**\r\n * Selects a pupil to be used with API requests\r\n * @param pupilId Pupil ID obtained from this.pupils or getPupils\r\n */\r\n async selectPupil(pupilId: number): Promise {\r\n if (!pupilId) throw new Error(\"No pupil ID specified\");\r\n const pupils = this.pupils;\r\n for (let i = 0; i < pupils.length; i++) {\r\n const pupil = pupils[i];\r\n if (pupil.id == pupilId) {\r\n this.studentId = pupil.id;\r\n this.studentName = pupil.name;\r\n return;\r\n }\r\n }\r\n throw new Error(\"No pupil with specified ID returned\");\r\n }\r\n}\r\n","import axios from \"axios\";\r\nimport type { AxiosRequestConfig } from \"axios\";\r\nimport { API_BASE_STUDENT, BASE_URL } from \"./consts\";\r\nimport { ClasschartsClient } from \"./baseClient\";\r\n/**\r\n * The base client\r\n */\r\n\r\nexport class ClasschartsStudentClient extends ClasschartsClient {\r\n public studentCode = \"\";\r\n public dateOfBirth = \"\";\r\n\r\n /**\r\n *\r\n * @param studentCode Classcharts student code\r\n * @param dateOfBirth Student's date of birth\r\n */\r\n constructor(\r\n studentCode: string,\r\n dateOfBirth?: string,\r\n axiosConfig?: AxiosRequestConfig\r\n ) {\r\n super(API_BASE_STUDENT, axiosConfig);\r\n this.studentCode = String(studentCode);\r\n this.dateOfBirth = String(dateOfBirth);\r\n }\r\n\r\n /**\r\n * Initialises the client and authenticates with classcharts\r\n */\r\n async login(): Promise {\r\n if (!this.studentCode) throw new Error(\"Student Code not inputted\");\r\n const formData = new URLSearchParams();\r\n formData.append(\"_method\", \"POST\");\r\n formData.append(\"code\", this.studentCode.toUpperCase());\r\n formData.append(\"dob\", this.dateOfBirth);\r\n formData.append(\"remember_me\", \"1\");\r\n formData.append(\"recaptcha-token\", \"no-token-avaliable\");\r\n const request = await this.axios.request({\r\n url: BASE_URL + \"/student/login\",\r\n method: \"POST\",\r\n data: formData.toString(),\r\n maxRedirects: 0,\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n validateStatus: () => true,\r\n });\r\n if (request.status != 302 || !request.headers[\"set-cookie\"])\r\n throw new Error(\"Unauthenticated: Classcharts returned an error\");\r\n const cookies = request.headers[\"set-cookie\"];\r\n for (let i = 0; i < cookies.length; i++) {\r\n cookies[i] = cookies[i].substring(0, cookies[i].indexOf(\";\"));\r\n }\r\n this.authCookies = cookies;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let sessionID: any = decodeURI(cookies[1])\r\n .replace(/%3A/g, \":\")\r\n .replace(/%2C/g, \",\");\r\n sessionID = JSON.parse(\r\n sessionID.substring(sessionID.indexOf(\"{\"), sessionID.length)\r\n );\r\n this.sessionId = sessionID.session_id;\r\n const user = await this.getStudentInfo();\r\n this.studentId = user.id;\r\n this.studentName = user.name;\r\n }\r\n}\r\n","// 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","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(607);\n"],"names":["root","factory","exports","module","define","amd","self","utils","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","transitionalDefaults","Cancel","config","Promise","resolve","reject","onCanceled","requestData","data","requestHeaders","headers","responseType","done","cancelToken","unsubscribe","signal","removeEventListener","isFormData","request","XMLHttpRequest","auth","username","password","unescape","encodeURIComponent","Authorization","btoa","fullPath","baseURL","url","onloadend","responseHeaders","getAllResponseHeaders","response","responseText","status","statusText","value","err","open","method","toUpperCase","params","paramsSerializer","timeout","onreadystatechange","readyState","responseURL","indexOf","setTimeout","onabort","onerror","ontimeout","timeoutErrorMessage","transitional","clarifyTimeoutError","isStandardBrowserEnv","xsrfValue","withCredentials","xsrfCookieName","read","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isUndefined","onDownloadProgress","addEventListener","onUploadProgress","upload","cancel","type","abort","subscribe","aborted","send","bind","Axios","mergeConfig","axios","createInstance","defaultConfig","context","instance","prototype","extend","create","instanceConfig","CancelToken","isCancel","VERSION","all","promises","spread","isAxiosError","message","this","toString","__CANCEL__","executor","TypeError","resolvePromise","promise","token","then","_listeners","i","l","length","onfulfilled","_resolve","reason","throwIfRequested","listener","push","index","splice","source","c","InterceptorManager","dispatchRequest","validator","validators","defaults","interceptors","configOrUrl","assertOptions","silentJSONParsing","boolean","forcedJSONParsing","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","unshift","fulfilled","rejected","responseInterceptorChain","chain","Array","apply","concat","shift","newConfig","onFulfilled","onRejected","error","getUri","replace","handlers","use","options","eject","id","fn","h","isAbsoluteURL","combineURLs","requestedURL","enhanceError","code","Error","transformData","throwIfCancellationRequested","call","transformRequest","merge","common","adapter","transformResponse","toJSON","name","description","number","fileName","lineNumber","columnNumber","stack","config1","config2","getMergedValue","target","isPlainObject","isArray","slice","mergeDeepProperties","prop","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","Object","keys","configValue","validateStatus","fns","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","process","isArrayBuffer","isBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","isObject","rawValue","parser","encoder","isString","JSON","parse","trim","e","stringify","stringifySafely","strictJSONParsing","maxContentLength","maxBodyLength","thisArg","args","arguments","encode","serializedParams","parts","v","isDate","toISOString","join","hashmarkIndex","relativeURL","write","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","document","match","RegExp","decodeURIComponent","remove","now","test","payload","originURL","msie","navigator","userAgent","urlParsingNode","createElement","resolveURL","href","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","window","location","requestURL","parsed","normalizedName","ignoreDuplicateOf","split","line","substr","callback","arr","thing","deprecatedWarnings","version","formatMessage","opt","desc","opts","console","warn","schema","allowUnknown","result","getPrototypeOf","isFunction","obj","hasOwnProperty","constructor","ArrayBuffer","isView","pipe","product","assignValue","a","b","str","stripBOM","content","charCodeAt","API_BASE","axiosConfig","studentId","studentName","sessionId","async","authCookies","requestOptions","Cookie","authorization","responseJSON","success","makeAuthedRequest","user","URLSearchParams","from","append","to","last_id","prevLast","gotData","String","fragment","getActivity","displayDate","fromDate","toDate","description_raw","date","BASE_URL","API_BASE_STUDENT","API_BASE_PARENT","ClasschartsParentClient","ClasschartsClient","email","super","formData","maxRedirects","substring","sessionID","decodeURI","session_id","pupils","getPupils","pupilId","pupil","ClasschartsStudentClient","studentCode","dateOfBirth","getStudentInfo","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index 9f942c6..76e0575 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,12 @@ "name": "classcharts-api", "version": "1.2.0", "description": "A javascript wrapper for getting information from the Classcharts API", - "keywords": ["node", "typescript", "classcharts", "class charts"], - "type": "module", + "keywords": [ + "node", + "typescript", + "classcharts", + "class charts" + ], "bugs": { "url": "https://github.com/Classcharts-API/js/issues" }, diff --git a/src/studentClient.ts b/src/studentClient.ts index 12165ff..5f8bcfb 100644 --- a/src/studentClient.ts +++ b/src/studentClient.ts @@ -54,7 +54,7 @@ export class ClasschartsStudentClient extends ClasschartsClient { } this.authCookies = cookies; // eslint-disable-next-line @typescript-eslint/no-explicit-any - let sessionID: any = decodeURI(cookies[2]) + let sessionID: any = decodeURI(cookies[1]) .replace(/%3A/g, ":") .replace(/%2C/g, ","); sessionID = JSON.parse(