@oaknational/google-classroom-addon 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,8 @@
1
- "use strict";var o=function(){};exports.OakGoogleClassroomAddOn=o;
1
+ "use strict";var e=require("crypto"),t=require("google-auth-library");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=r(e);function i(e,t,r,n){return new(r||(r=Promise))(function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(s,a)}c((n=n.apply(e,t||[])).next())})}function o(e,t){var r,n,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},s=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return s.next=a(0),s.throw=a(1),s.return=a(2),"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(a){return function(c){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;s&&(s=0,a[0]&&(o=0)),o;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,n=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=[6,e],n=0}finally{r=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,c])}}}"function"==typeof SuppressedError&&SuppressedError;var s,a={};
2
+ /*!
3
+ * cookie
4
+ * Copyright(c) 2012-2014 Roman Shtylman
5
+ * Copyright(c) 2015 Douglas Christopher Wilson
6
+ * MIT Licensed
7
+ */!function(){if(s)return a;s=1,a.parse=function(e,r){if("string"!=typeof e)throw new TypeError("argument str must be a string");var n={},i=e.length;if(i<2)return n;var o=r&&r.decode||u,s=0,a=0,f=0;do{if(-1===(a=e.indexOf("=",s)))break;if(-1===(f=e.indexOf(";",s)))f=i;else if(a>f){s=e.lastIndexOf(";",a-1)+1;continue}var d=c(e,s,a),p=l(e,a,d),w=e.slice(d,p);if(!t.call(n,w)){var y=c(e,a+1,f),g=l(e,f,y);34===e.charCodeAt(y)&&34===e.charCodeAt(g-1)&&(y++,g--);var m=e.slice(y,g);n[w]=h(m,o)}s=f+1}while(s<i);return n},a.serialize=function(t,s,a){var c=a&&a.encode||encodeURIComponent;if("function"!=typeof c)throw new TypeError("option encode is invalid");if(!r.test(t))throw new TypeError("argument name is invalid");var l=c(s);if(!n.test(l))throw new TypeError("argument val is invalid");var u=t+"="+l;if(!a)return u;if(null!=a.maxAge){var h=Math.floor(a.maxAge);if(!isFinite(h))throw new TypeError("option maxAge is invalid");u+="; Max-Age="+h}if(a.domain){if(!i.test(a.domain))throw new TypeError("option domain is invalid");u+="; Domain="+a.domain}if(a.path){if(!o.test(a.path))throw new TypeError("option path is invalid");u+="; Path="+a.path}if(a.expires){var f=a.expires;if(!function(t){return"[object Date]"===e.call(t)}(f)||isNaN(f.valueOf()))throw new TypeError("option expires is invalid");u+="; Expires="+f.toUTCString()}a.httpOnly&&(u+="; HttpOnly");a.secure&&(u+="; Secure");a.partitioned&&(u+="; Partitioned");if(a.priority){switch("string"==typeof a.priority?a.priority.toLowerCase():a.priority){case"low":u+="; Priority=Low";break;case"medium":u+="; Priority=Medium";break;case"high":u+="; Priority=High";break;default:throw new TypeError("option priority is invalid")}}if(a.sameSite){switch("string"==typeof a.sameSite?a.sameSite.toLowerCase():a.sameSite){case!0:u+="; SameSite=Strict";break;case"lax":u+="; SameSite=Lax";break;case"strict":u+="; SameSite=Strict";break;case"none":u+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}}return u};var e=Object.prototype.toString,t=Object.prototype.hasOwnProperty,r=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,n=/^("?)[\u0021\u0023-\u002B\u002D-\u003A\u003C-\u005B\u005D-\u007E]*\1$/,i=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,o=/^[\u0020-\u003A\u003D-\u007E]*$/;function c(e,t,r){do{var n=e.charCodeAt(t);if(32!==n&&9!==n)return t}while(++t<r);return r}function l(e,t,r){for(;t>r;){var n=e.charCodeAt(--t);if(32!==n&&9!==n)return t+1}return r}function u(e){return-1!==e.indexOf("%")?decodeURIComponent(e):e}function h(e,t){try{return t(e)}catch(t){return e}}}();var c={},l=Array.from({length:64});for(let e=0,t="A".charCodeAt(0),r="Z".charCodeAt(0);e+t<=r;e++){const r=String.fromCharCode(e+t);c[r]=e,l[e]=r}for(let e=0,t="a".charCodeAt(0),r="z".charCodeAt(0);e+t<=r;e++){const r=String.fromCharCode(e+t),n=e+26;c[r]=n,l[n]=r}for(let e=0;e<10;e++){c[e.toString(10)]=e+52;const t=e.toString(10),r=e+52;c[t]=r,l[r]=t}c["-"]=62,l[62]="-",c._=63,l[63]="_";var u=e=>(new TextEncoder).encode(e),h=e=>{const t=e+"=".repeat((4-e.length%4)%4);let r=t.length/4*3;t.endsWith("==")?r-=2:t.endsWith("=")&&r--;const n=new ArrayBuffer(r),i=new DataView(n);for(let e=0;e<t.length;e+=4){let r=0,n=0;for(let i=e,o=e+3;i<=o;i++)if("="===t[i])r>>=6;else{if(!(t[i]in c))throw new TypeError(`Invalid character ${t[i]} in base64 string.`);r|=c[t[i]]<<6*(o-i),n+=6}const o=e/4*3;r>>=n%8;const s=Math.floor(n/8);for(let e=0;e<s;e++){const t=8*(s-e-1);i.setUint8(o+e,(r&255<<t)>>t)}}return new Uint8Array(n)},f=e=>{const t="string"==typeof e?u(e):e;let r="";for(let e=0;e<t.length;e+=3){let n=0,i=0;for(let r=e,o=Math.min(e+3,t.length);r<o;r++)n|=t[r]<<8*(o-r-1),i+=8;const o=Math.ceil(i/6);n<<=6*o-i;for(let e=1;e<=o;e++){const t=6*(o-e);r+=l[(n&63<<t)>>t]}}return r},d={encryption:{saltBits:256,algorithm:"aes-256-cbc",iterations:1,minPasswordlength:32},integrity:{saltBits:256,algorithm:"sha256",iterations:1,minPasswordlength:32},ttl:0,timestampSkewSec:60,localtimeOffsetMsec:0},p=e=>({...e,encryption:{...e.encryption},integrity:{...e.integrity}}),w={"aes-128-ctr":{keyBits:128,ivBits:128,name:"AES-CTR"},"aes-256-cbc":{keyBits:256,ivBits:128,name:"AES-CBC"},sha256:{keyBits:256,name:"SHA-256"}},y="Fe26.2",g=(e,t)=>{if(t<1)throw new Error("Invalid random bits count");return((e,t)=>{const r=new Uint8Array(t);return e.getRandomValues(r),r})(e,Math.ceil(t/8))},m=async(e,t,r)=>{var n;if(!(null==t?void 0:t.length))throw new Error("Empty password");if(null==r||"object"!=typeof r)throw new Error("Bad options");if(!(r.algorithm in w))throw new Error(`Unknown algorithm: ${r.algorithm}`);const i=w[r.algorithm],o={},s=null!=(n=r.hmac)&&n,a=s?{name:"HMAC",hash:i.name}:{name:i.name},c=s?["sign","verify"]:["encrypt","decrypt"];if("string"==typeof t){if(t.length<r.minPasswordlength)throw new Error(`Password string too short (min ${r.minPasswordlength} characters required)`);let{salt:n=""}=r;if(!n){const{saltBits:t=0}=r;if(!t)throw new Error("Missing salt and saltBits options");const i=g(e,t);n=[...new Uint8Array(i)].map(e=>e.toString(16).padStart(2,"0")).join("")}const s=await(async(e,t,r,n,i,o)=>{const s=u(t),a=await e.subtle.importKey("raw",s,{name:"PBKDF2"},!1,["deriveBits"]),c={name:"PBKDF2",hash:o,salt:u(r),iterations:n};return await e.subtle.deriveBits(c,a,8*i)})(e,t,n,r.iterations,i.keyBits/8,"SHA-1"),l=await e.subtle.importKey("raw",s,a,!1,c);o.key=l,o.salt=n}else{if(t.length<i.keyBits/8)throw new Error("Key buffer (password) too small");o.key=await e.subtle.importKey("raw",t,a,!1,c),o.salt=""}return r.iv?o.iv=r.iv:"ivBits"in i&&(o.iv=g(e,i.ivBits)),o},v=(e,t,r)=>["aes-128-ctr"===e?{name:"AES-CTR",counter:t.iv,length:128}:{name:"AES-CBC",iv:t.iv},t.key,"string"==typeof r?u(r):r],E=async(e,t,r,n)=>{const i=await m(e,t,r),o=await e.subtle.decrypt(...v(r.algorithm,i,n));return s=new Uint8Array(o),(new TextDecoder).decode(s);var s},S=async(e,t,r,n)=>{const i=await m(e,t,{...r,hmac:!0}),o=u(n),s=await e.subtle.sign({name:"HMAC"},i.key,o);return{digest:f(new Uint8Array(s)),salt:i.salt}},C=e=>"string"==typeof e||e instanceof Uint8Array?{encryption:e,integrity:e}:"secret"in e?{id:e.id,encryption:e.secret,integrity:e.secret}:{id:e.id,encryption:e.encryption,integrity:e.integrity},b=async(e,t,r,n)=>{if(!r)throw new Error("Empty password");const i=p(n),o=Date.now()+(i.localtimeOffsetMsec||0),s=JSON.stringify(t),a=C(r),{id:c="",encryption:l,integrity:u}=a;if(c&&!/^\w+$/.test(c))throw new Error("Invalid password id");const{encrypted:h,key:d}=await(async(e,t,r,n)=>{const i=await m(e,t,r),o=await e.subtle.encrypt(...v(r.algorithm,i,n));return{encrypted:new Uint8Array(o),key:i}})(e,l,i.encryption,s),w=f(new Uint8Array(h)),g=f(d.iv),E=i.ttl?o+i.ttl:"",b=`${y}*${c}*${d.salt}*${g}*${w}*${E}`,A=await S(e,u,i.integrity,b);return`${b}*${A.salt}*${A.digest}`};const A=globalThis.crypto,k=A.subtle,T=()=>A.randomUUID(),_=e=>A.getRandomValues(e),O={randomUUID:T,getRandomValues:_,subtle:k};var U=Object.freeze({__proto__:null,default:O,getRandomValues:_,randomUUID:T,subtle:k});function I(e){return"string"==typeof e?{1:e}:e}var x,N=function(e){return async function(t,{password:r,ttl:n=1209600}){const i=I(r),o=Math.max(...Object.keys(i).map(Number)),s={id:o.toString(),secret:i[o]};return`${await b(e,t,s,{...d,ttl:1e3*n})}~2`}}(U),R=function(e){return async function(t,{password:r,ttl:n=1209600}){const i=I(r),{sealWithoutVersion:o,tokenVersion:s}=function(e){const[t,r]=e.split("~");return{sealWithoutVersion:t,tokenVersion:null==r?null:parseInt(r,10)}}(t);try{const t=await(async(e,t,r,n)=>{if(!r)throw new Error("Empty password");const i=p(n),o=Date.now()+(i.localtimeOffsetMsec||0),s=t.split("*");if(8!==s.length)throw new Error("Incorrect number of sealed components");const a=s[0];let c=s[1];const l=s[2],u=s[3],f=s[4],d=s[5],w=s[6],g=s[7],m=`${a}*${c}*${l}*${u}*${f}*${d}`;if(y!==a)throw new Error("Wrong mac prefix");if(d){if(!/^\d+$/.test(d))throw new Error("Invalid expiration");if(Number.parseInt(d,10)<=o-1e3*i.timestampSkewSec)throw new Error("Expired seal")}let v="";if(c=c||"default","string"==typeof r||r instanceof Uint8Array)v=r;else{if(!(c in r))throw new Error(`Cannot find password: ${c}`);v=r[c]}v=C(v);const b=i.integrity;if(b.salt=w,!((e,t)=>{let r=e.length===t.length?0:1;r&&(t=e);for(let n=0;n<e.length;n+=1)r|=e.charCodeAt(n)^t.charCodeAt(n);return 0===r})((await S(e,v.integrity,b,m)).digest,g))throw new Error("Bad hmac value");const A=h(f),k=i.encryption;k.salt=l,k.iv=h(u);const T=await E(e,v.encryption,k,A);return T?JSON.parse(T):null})(e,o,i,{...d,ttl:1e3*n})??{};return 2===s?t:{...t.persistent}}catch(e){if(e instanceof Error&&/^(Expired seal|Bad hmac value|Cannot find password|Incorrect number of sealed components)/.test(e.message))return{};throw e}}}(U),B=function(){function e(e){this.encryptionSecret=e,this.ENCRYPTION_SECRET=e}return e.prototype.encryptString=function(t){var r=n.default.randomBytes(e.SALT_BYTES).toString("hex"),i=n.default.randomBytes(e.IV_LENGTH),o=n.default.scryptSync(this.ENCRYPTION_SECRET,r,e.ENCRYPTION_KEY_LENGTH),s=n.default.createCipheriv(e.ALGORITHM,o,i),a=s.update(t,"utf8","hex");return a+=s.final("hex"),"".concat(i.toString("hex"),":").concat(a,":").concat(r)},e.prototype.decryptString=function(t){var r=function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,o=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return s}(t.split(":"),3),i=r[0],o=r[1],s=r[2];if(!i||!o||!s)throw new Error("Invalid encrypted string");var a=Buffer.from(i,"hex"),c=n.default.scryptSync(this.ENCRYPTION_SECRET,s,e.ENCRYPTION_KEY_LENGTH),l=n.default.createDecipheriv(e.ALGORITHM,c,a),u=l.update(o,"hex","utf8");return u+=l.final("utf8")},e.ALGORITHM="aes-256-cbc",e.IV_LENGTH=16,e.SALT_BYTES=16,e.ENCRYPTION_KEY_LENGTH=32,e}();!function(e){e.CONNECTED_USERS_CREDENTIALS="connectedUsersCredentials"}(x||(x={}));var P=function(){function e(e){this.firestore=e,this._firestore=e}return e.prototype.getConnectedUserCredentials=function(e){return i(this,void 0,void 0,function(){var t;return o(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,this._firestore.collection(x.CONNECTED_USERS_CREDENTIALS).doc(e).get()];case 1:return[2,r.sent()];case 2:throw t=r.sent(),console.error(t),new Error("Failed to save users credentials");case 3:return[2]}})})},e.prototype.upsertConnectedUserCredentials=function(e){return i(this,void 0,void 0,function(){var t;return o(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),this._firestore.settings({ignoreUndefinedProperties:!0}),[4,this._firestore.collection(x.CONNECTED_USERS_CREDENTIALS).doc(e.loginHint).set(e)];case 1:return r.sent(),[3,3];case 2:throw t=r.sent(),console.error(t),new Error("Failed to upsert users credentials");case 3:return[2]}})})},e}(),$=function(){function e(e,r,n,s,a){var c=this;if(this.googleClientId=e,this.googleClientSecret=r,this.callbackUrl=n,this.accessToken=s,this.refreshToken=a,!e)throw new Error("Google Client ID is missing");if(!r)throw new Error("Google Client Secret is missing");if(!n)throw new Error("Google OAuth Callback URL is missing");var l=new t.OAuth2Client({clientId:e,clientSecret:r,redirectUri:n,forceRefreshOnFailure:!1});"true"===process.env.GOOGLE_CLASSROOM_DEV_MODE&&s&&(l.refreshHandler=function(){return i(c,void 0,void 0,function(){return o(this,function(e){return[2,{access_token:s,expiry_date:(new Date).getTime()+36e5}]})})}),(s||a)&&l.setCredentials({access_token:s,refresh_token:a}),this.client=l,this.clientId=e}return e.prototype.getAuthenticateUrl=function(e,t){void 0===t&&(t=!1);try{return this.client.generateAuthUrl({access_type:"offline",include_granted_scopes:!0,scope:["https://www.googleapis.com/auth/userinfo.profile","https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/classroom.courses.readonly","https://www.googleapis.com/auth/classroom.addons.student","https://www.googleapis.com/auth/classroom.addons.teacher"],loginHint:e,subscribeToNewsletter:t})}catch(e){return console.error(e),null}},e.prototype.exchangeCodeForTokens=function(e){return i(this,void 0,void 0,function(){var t,r,n,i;return o(this,function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,this.client.getToken(e)];case 1:return t=o.sent().tokens,[4,this.client.verifyIdToken({idToken:t.id_token,audience:this.clientId})];case 2:if(r=o.sent(),n=r.getPayload(),!t.access_token)throw new Error("Access token is missing");if(!(null==n?void 0:n.sub))throw new Error("User sub is missing");return[2,{accessToken:t.access_token,loginHint:n.sub,refreshToken:t.refresh_token,profilePictureUrl:null==n?void 0:n.picture,email:n.email}];case 3:return i=o.sent(),console.error(i),[2,null];case 4:return[2]}})})},e.prototype.refreshAccessToken=function(e){return i(this,void 0,void 0,function(){var t,r;return o(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),this.client.setCredentials({refresh_token:e}),[4,this.client.getAccessToken()];case 1:if(!(t=n.sent()).token)throw new Error("Unable to refresh access token");return[2,t.token];case 2:return r=n.sent(),console.error(r),[2,null];case 3:return[2]}})})},e.prototype.isAuthenticated=function(e){return i(this,void 0,void 0,function(){var t,r;return o(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,this.client.getTokenInfo(e)];case 1:return t=n.sent(),t.expiry_date<Date.now()?[2,!0]:[2,!1];case 2:return r=n.sent(),console.error(r),[2,!1];case 3:return[2]}})})},e}(),D=function(){function e(e,t,r,n,i,o){this.encryptionSecret=e,this.firestore=t,this.googleOAuthClientId=r,this.googleOAuthClientSecret=n,this.googleOAuthCallbackApiRoute=i,this.sessionSecret=o,this.encryptionService=new B(e),this.firestoreClient=new P(t),this._googleOAuthClientId=r,this._googleOAuthClientSecret=n,this._googleOAuthCallbackApiRoute=i,this._sessionSecret=o}return e.prototype.getOAuthClient=function(e,t){return new $(this._googleOAuthClientId,this._googleOAuthClientSecret,this._googleOAuthCallbackApiRoute,e,t)},e.prototype.getGoogleSignInUrl=function(e){return i(this,arguments,void 0,function(e,t){var r,n;return void 0===t&&(t=!1),o(this,function(i){if(r=this.getOAuthClient(),!(n=r.getAuthenticateUrl(e,t)))throw new Error("Failed to get Google Authentication URL");return[2,n]})})},e.prototype.handleGoogleSignInCallback=function(e,t){return i(this,void 0,void 0,function(){var r,n,i,s;return o(this,function(o){switch(o.label){case 0:return[4,this.getOAuthClient().exchangeCodeForTokens(e)];case 1:if(!(r=o.sent()))throw new Error("Failed to authenticate Google sign-in");return n=r.refreshToken?this.encryptionService.encryptString(r.refreshToken):void 0,i=r.profilePictureUrl?this.encryptionService.encryptString(r.profilePictureUrl):void 0,[4,this.firestoreClient.upsertConnectedUserCredentials({refreshToken:n,profilePictureUrl:i,loginHint:r.loginHint})];case 2:return o.sent(),[4,N({loginHint:r.loginHint,accessToken:r.accessToken},{password:this._sessionSecret})];case 3:return s=o.sent(),t&&r.email?[4,t(r.email)]:[3,5];case 4:o.sent(),o.label=5;case 5:return[2,{encryptedSession:s,profilePictureUrl:r.profilePictureUrl}]}})})},e.prototype.verifyAuthSession=function(e){return i(this,void 0,void 0,function(){var t,r,n,i;return o(this,function(o){switch(o.label){case 0:return[4,R(e,{password:this._sessionSecret})];case 1:return(null==(t=o.sent())?void 0:t.accessToken)&&(null==t?void 0:t.loginHint)?[4,this.firestoreClient.getConnectedUserCredentials(t.loginHint)]:[2,null];case 2:return(r=o.sent())?[4,(n=this.getOAuthClient(t.accessToken,r.refreshToken)).isAuthenticated(t.accessToken)]:[2,null];case 3:return o.sent()?[2,e]:[4,n.refreshAccessToken(r.refreshToken)];case 4:return(i=o.sent())?[4,N({loginHint:t.loginHint,accessToken:i},{password:this._sessionSecret})]:[3,6];case 5:return[2,o.sent()];case 6:return[2,null]}})})},e}();exports.OakGoogleClassroomAddOn=D;
2
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/OakGoogleClassroom.ts"],"sourcesContent":["export class OakGoogleClassroomAddOn {\n constructor() {}\n}\n"],"names":["OakGoogleClassroomAddOn"],"mappings":"aAAA,IAAAA,EACE,WAAe"}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../node_modules/cookie/index.js","../../../node_modules/iron-webcrypto/dist/index.js","../../../node_modules/uncrypto/dist/crypto.web.mjs","../../../node_modules/iron-session/dist/index.js","../../../src/services/FirestoreClient/FirestoreClient.ts","../../../src/services/Encryption/EncryptionService.ts","../../../src/services/GoogleOAuth/GoogleOAuthClient.ts","../../../src/services/OakGoogleClassroom.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\nvar __hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name = token\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n * \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n * \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n */\n\nvar cookieNameRegExp = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n * ; US-ASCII characters excluding CTLs,\n * ; whitespace DQUOTE, comma, semicolon,\n * ; and backslash\n */\n\nvar cookieValueRegExp = /^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/;\n\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value = <subdomain>\n * ; defined in [RFC1034], Section 3.5, as\n * ; enhanced by [RFC1123], Section 2.1\n * <subdomain> = <label> | <subdomain> \".\" <label>\n * <label> = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n * Labels must be 63 characters or less.\n * 'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str> = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp> = <let-dig> | \"-\"\n * <let-dig> = <letter> | <digit>\n * <letter> = any one of the 52 alphabetic characters A through Z in\n * upper case and a through z in lower case\n * <digit> = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\n\nvar domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value = <any CHAR except CTLs or \";\">\n * CHAR = %x01-7F\n * ; defined in RFC 5234 appendix B.1\n */\n\nvar pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [opt]\n * @return {object}\n * @public\n */\n\nfunction parse(str, opt) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {};\n var len = str.length;\n // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n if (len < 2) return obj;\n\n var dec = (opt && opt.decode) || decode;\n var index = 0;\n var eqIdx = 0;\n var endIdx = 0;\n\n do {\n eqIdx = str.indexOf('=', index);\n if (eqIdx === -1) break; // No more cookie pairs.\n\n endIdx = str.indexOf(';', index);\n\n if (endIdx === -1) {\n endIdx = len;\n } else if (eqIdx > endIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1;\n continue;\n }\n\n var keyStartIdx = startIndex(str, index, eqIdx);\n var keyEndIdx = endIndex(str, eqIdx, keyStartIdx);\n var key = str.slice(keyStartIdx, keyEndIdx);\n\n // only assign once\n if (!__hasOwnProperty.call(obj, key)) {\n var valStartIdx = startIndex(str, eqIdx + 1, endIdx);\n var valEndIdx = endIndex(str, endIdx, valStartIdx);\n\n if (str.charCodeAt(valStartIdx) === 0x22 /* \" */ && str.charCodeAt(valEndIdx - 1) === 0x22 /* \" */) {\n valStartIdx++;\n valEndIdx--;\n }\n\n var val = str.slice(valStartIdx, valEndIdx);\n obj[key] = tryDecode(val, dec);\n }\n\n index = endIdx + 1\n } while (index < len);\n\n return obj;\n}\n\nfunction startIndex(str, index, max) {\n do {\n var code = str.charCodeAt(index);\n if (code !== 0x20 /* */ && code !== 0x09 /* \\t */) return index;\n } while (++index < max);\n return max;\n}\n\nfunction endIndex(str, index, min) {\n while (index > min) {\n var code = str.charCodeAt(--index);\n if (code !== 0x20 /* */ && code !== 0x09 /* \\t */) return index + 1;\n }\n return min;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize a name value pair into a cookie string suitable for\n * http headers. An optional options object specifies cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [opt]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, opt) {\n var enc = (opt && opt.encode) || encodeURIComponent;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!cookieNameRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (!cookieValueRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n if (!opt) return str;\n\n if (null != opt.maxAge) {\n var maxAge = Math.floor(opt.maxAge);\n\n if (!isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + maxAge;\n }\n\n if (opt.domain) {\n if (!domainValueRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!pathValueRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n var expires = opt.expires\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString()\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.partitioned) {\n str += '; Partitioned'\n }\n\n if (opt.priority) {\n var priority = typeof opt.priority === 'string'\n ? opt.priority.toLowerCase() : opt.priority;\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low'\n break\n case 'medium':\n str += '; Priority=Medium'\n break\n case 'high':\n str += '; Priority=High'\n break\n default:\n throw new TypeError('option priority is invalid')\n }\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n return str.indexOf('%') !== -1\n ? decodeURIComponent(str)\n : str\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n return __toString.call(val) === '[object Date]';\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n","// src/utils.ts\nvar alphabetByEncoding = {};\nvar alphabetByValue = Array.from({ length: 64 });\nfor (let i = 0, start = \"A\".charCodeAt(0), limit = \"Z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n alphabetByEncoding[char] = i;\n alphabetByValue[i] = char;\n}\nfor (let i = 0, start = \"a\".charCodeAt(0), limit = \"z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n const index = i + 26;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nfor (let i = 0; i < 10; i++) {\n alphabetByEncoding[i.toString(10)] = i + 52;\n const char = i.toString(10);\n const index = i + 52;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nalphabetByEncoding[\"-\"] = 62;\nalphabetByValue[62] = \"-\";\nalphabetByEncoding[\"_\"] = 63;\nalphabetByValue[63] = \"_\";\nvar bitsPerLetter = 6;\nvar bitsPerByte = 8;\nvar maxLetterValue = 63;\nvar stringToBuffer = (value) => {\n return new TextEncoder().encode(value);\n};\nvar bufferToString = (value) => {\n return new TextDecoder().decode(value);\n};\nvar base64urlDecode = (_input) => {\n const input = _input + \"=\".repeat((4 - _input.length % 4) % 4);\n let totalByteLength = input.length / 4 * 3;\n if (input.endsWith(\"==\")) {\n totalByteLength -= 2;\n } else if (input.endsWith(\"=\")) {\n totalByteLength--;\n }\n const out = new ArrayBuffer(totalByteLength);\n const dataView = new DataView(out);\n for (let i = 0; i < input.length; i += 4) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = i + 3; j <= limit; j++) {\n if (input[j] === \"=\") {\n bits >>= bitsPerLetter;\n } else {\n if (!(input[j] in alphabetByEncoding)) {\n throw new TypeError(`Invalid character ${input[j]} in base64 string.`);\n }\n bits |= alphabetByEncoding[input[j]] << (limit - j) * bitsPerLetter;\n bitLength += bitsPerLetter;\n }\n }\n const chunkOffset = i / 4 * 3;\n bits >>= bitLength % bitsPerByte;\n const byteLength = Math.floor(bitLength / bitsPerByte);\n for (let k = 0; k < byteLength; k++) {\n const offset = (byteLength - k - 1) * bitsPerByte;\n dataView.setUint8(chunkOffset + k, (bits & 255 << offset) >> offset);\n }\n }\n return new Uint8Array(out);\n};\nvar base64urlEncode = (_input) => {\n const input = typeof _input === \"string\" ? stringToBuffer(_input) : _input;\n let str = \"\";\n for (let i = 0; i < input.length; i += 3) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = Math.min(i + 3, input.length); j < limit; j++) {\n bits |= input[j] << (limit - j - 1) * bitsPerByte;\n bitLength += bitsPerByte;\n }\n const bitClusterCount = Math.ceil(bitLength / bitsPerLetter);\n bits <<= bitClusterCount * bitsPerLetter - bitLength;\n for (let k = 1; k <= bitClusterCount; k++) {\n const offset = (bitClusterCount - k) * bitsPerLetter;\n str += alphabetByValue[(bits & maxLetterValue << offset) >> offset];\n }\n }\n return str;\n};\n\n// src/index.ts\nvar defaults = {\n encryption: { saltBits: 256, algorithm: \"aes-256-cbc\", iterations: 1, minPasswordlength: 32 },\n integrity: { saltBits: 256, algorithm: \"sha256\", iterations: 1, minPasswordlength: 32 },\n ttl: 0,\n timestampSkewSec: 60,\n localtimeOffsetMsec: 0\n};\nvar clone = (options) => ({\n ...options,\n encryption: { ...options.encryption },\n integrity: { ...options.integrity }\n});\nvar algorithms = {\n \"aes-128-ctr\": { keyBits: 128, ivBits: 128, name: \"AES-CTR\" },\n \"aes-256-cbc\": { keyBits: 256, ivBits: 128, name: \"AES-CBC\" },\n sha256: { keyBits: 256, name: \"SHA-256\" }\n};\nvar macFormatVersion = \"2\";\nvar macPrefix = \"Fe26.2\";\nvar randomBytes = (_crypto, size) => {\n const bytes = new Uint8Array(size);\n _crypto.getRandomValues(bytes);\n return bytes;\n};\nvar randomBits = (_crypto, bits) => {\n if (bits < 1)\n throw new Error(\"Invalid random bits count\");\n const bytes = Math.ceil(bits / 8);\n return randomBytes(_crypto, bytes);\n};\nvar pbkdf2 = async (_crypto, password, salt, iterations, keyLength, hash) => {\n const passwordBuffer = stringToBuffer(password);\n const importedKey = await _crypto.subtle.importKey(\n \"raw\",\n passwordBuffer,\n { name: \"PBKDF2\" },\n false,\n [\"deriveBits\"]\n );\n const saltBuffer = stringToBuffer(salt);\n const params = { name: \"PBKDF2\", hash, salt: saltBuffer, iterations };\n const derivation = await _crypto.subtle.deriveBits(params, importedKey, keyLength * 8);\n return derivation;\n};\nvar generateKey = async (_crypto, password, options) => {\n var _a;\n if (!(password == null ? void 0 : password.length))\n throw new Error(\"Empty password\");\n if (options == null || typeof options !== \"object\")\n throw new Error(\"Bad options\");\n if (!(options.algorithm in algorithms))\n throw new Error(`Unknown algorithm: ${options.algorithm}`);\n const algorithm = algorithms[options.algorithm];\n const result = {};\n const hmac = (_a = options.hmac) != null ? _a : false;\n const id = hmac ? { name: \"HMAC\", hash: algorithm.name } : { name: algorithm.name };\n const usage = hmac ? [\"sign\", \"verify\"] : [\"encrypt\", \"decrypt\"];\n if (typeof password === \"string\") {\n if (password.length < options.minPasswordlength)\n throw new Error(\n `Password string too short (min ${options.minPasswordlength} characters required)`\n );\n let { salt = \"\" } = options;\n if (!salt) {\n const { saltBits = 0 } = options;\n if (!saltBits)\n throw new Error(\"Missing salt and saltBits options\");\n const randomSalt = randomBits(_crypto, saltBits);\n salt = [...new Uint8Array(randomSalt)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n }\n const derivedKey = await pbkdf2(\n _crypto,\n password,\n salt,\n options.iterations,\n algorithm.keyBits / 8,\n \"SHA-1\"\n );\n const importedEncryptionKey = await _crypto.subtle.importKey(\n \"raw\",\n derivedKey,\n id,\n false,\n usage\n );\n result.key = importedEncryptionKey;\n result.salt = salt;\n } else {\n if (password.length < algorithm.keyBits / 8)\n throw new Error(\"Key buffer (password) too small\");\n result.key = await _crypto.subtle.importKey(\"raw\", password, id, false, usage);\n result.salt = \"\";\n }\n if (options.iv)\n result.iv = options.iv;\n else if (\"ivBits\" in algorithm)\n result.iv = randomBits(_crypto, algorithm.ivBits);\n return result;\n};\nvar getEncryptParams = (algorithm, key, data) => {\n return [\n algorithm === \"aes-128-ctr\" ? { name: \"AES-CTR\", counter: key.iv, length: 128 } : { name: \"AES-CBC\", iv: key.iv },\n key.key,\n typeof data === \"string\" ? stringToBuffer(data) : data\n ];\n};\nvar encrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const encrypted = await _crypto.subtle.encrypt(...getEncryptParams(options.algorithm, key, data));\n return { encrypted: new Uint8Array(encrypted), key };\n};\nvar decrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const decrypted = await _crypto.subtle.decrypt(...getEncryptParams(options.algorithm, key, data));\n return bufferToString(new Uint8Array(decrypted));\n};\nvar hmacWithPassword = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, { ...options, hmac: true });\n const textBuffer = stringToBuffer(data);\n const signed = await _crypto.subtle.sign({ name: \"HMAC\" }, key.key, textBuffer);\n const digest = base64urlEncode(new Uint8Array(signed));\n return { digest, salt: key.salt };\n};\nvar normalizePassword = (password) => {\n if (typeof password === \"string\" || password instanceof Uint8Array)\n return { encryption: password, integrity: password };\n if (\"secret\" in password)\n return { id: password.id, encryption: password.secret, integrity: password.secret };\n return { id: password.id, encryption: password.encryption, integrity: password.integrity };\n};\nvar seal = async (_crypto, object, password, options) => {\n if (!password)\n throw new Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const objectString = JSON.stringify(object);\n const pass = normalizePassword(password);\n const { id = \"\", encryption, integrity } = pass;\n if (id && !/^\\w+$/.test(id))\n throw new Error(\"Invalid password id\");\n const { encrypted, key } = await encrypt(_crypto, encryption, opts.encryption, objectString);\n const encryptedB64 = base64urlEncode(new Uint8Array(encrypted));\n const iv = base64urlEncode(key.iv);\n const expiration = opts.ttl ? now + opts.ttl : \"\";\n const macBaseString = `${macPrefix}*${id}*${key.salt}*${iv}*${encryptedB64}*${expiration}`;\n const mac = await hmacWithPassword(_crypto, integrity, opts.integrity, macBaseString);\n const sealed = `${macBaseString}*${mac.salt}*${mac.digest}`;\n return sealed;\n};\nvar fixedTimeComparison = (a, b) => {\n let mismatch = a.length === b.length ? 0 : 1;\n if (mismatch)\n b = a;\n for (let i = 0; i < a.length; i += 1)\n mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return mismatch === 0;\n};\nvar unseal = async (_crypto, sealed, password, options) => {\n if (!password)\n throw new Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const parts = sealed.split(\"*\");\n if (parts.length !== 8)\n throw new Error(\"Incorrect number of sealed components\");\n const prefix = parts[0];\n let passwordId = parts[1];\n const encryptionSalt = parts[2];\n const encryptionIv = parts[3];\n const encryptedB64 = parts[4];\n const expiration = parts[5];\n const hmacSalt = parts[6];\n const hmac = parts[7];\n const macBaseString = `${prefix}*${passwordId}*${encryptionSalt}*${encryptionIv}*${encryptedB64}*${expiration}`;\n if (macPrefix !== prefix)\n throw new Error(\"Wrong mac prefix\");\n if (expiration) {\n if (!/^\\d+$/.test(expiration))\n throw new Error(\"Invalid expiration\");\n const exp = Number.parseInt(expiration, 10);\n if (exp <= now - opts.timestampSkewSec * 1e3)\n throw new Error(\"Expired seal\");\n }\n let pass = \"\";\n passwordId = passwordId || \"default\";\n if (typeof password === \"string\" || password instanceof Uint8Array)\n pass = password;\n else if (passwordId in password) {\n pass = password[passwordId];\n } else {\n throw new Error(`Cannot find password: ${passwordId}`);\n }\n pass = normalizePassword(pass);\n const macOptions = opts.integrity;\n macOptions.salt = hmacSalt;\n const mac = await hmacWithPassword(_crypto, pass.integrity, macOptions, macBaseString);\n if (!fixedTimeComparison(mac.digest, hmac))\n throw new Error(\"Bad hmac value\");\n const encrypted = base64urlDecode(encryptedB64);\n const decryptOptions = opts.encryption;\n decryptOptions.salt = encryptionSalt;\n decryptOptions.iv = base64urlDecode(encryptionIv);\n const decrypted = await decrypt(_crypto, pass.encryption, decryptOptions, encrypted);\n if (decrypted)\n return JSON.parse(decrypted);\n return null;\n};\n\nexport { algorithms, base64urlDecode, base64urlEncode, bufferToString, clone, decrypt, defaults, encrypt, generateKey, hmacWithPassword, macFormatVersion, macPrefix, randomBits, seal, stringToBuffer, unseal };\n","const webCrypto = globalThis.crypto;\nconst subtle = webCrypto.subtle;\nconst randomUUID = () => {\n return webCrypto.randomUUID();\n};\nconst getRandomValues = (array) => {\n return webCrypto.getRandomValues(array);\n};\nconst _crypto = {\n randomUUID,\n getRandomValues,\n subtle\n};\n\nexport { _crypto as default, getRandomValues, randomUUID, subtle };\n","import { serialize, parse } from 'cookie';\nimport { seal, defaults, unseal } from 'iron-webcrypto';\nimport * as crypto from 'uncrypto';\n\n// src/core.ts\nvar timestampSkewSec = 60;\nvar fourteenDaysInSeconds = 14 * 24 * 3600;\nvar currentMajorVersion = 2;\nvar versionDelimiter = \"~\";\nvar defaultOptions = {\n ttl: fourteenDaysInSeconds,\n cookieOptions: { httpOnly: true, secure: true, sameSite: \"lax\", path: \"/\" }\n};\nfunction normalizeStringPasswordToMap(password) {\n return typeof password === \"string\" ? { 1: password } : password;\n}\nfunction parseSeal(seal) {\n const [sealWithoutVersion, tokenVersionAsString] = seal.split(versionDelimiter);\n const tokenVersion = tokenVersionAsString == null ? null : parseInt(tokenVersionAsString, 10);\n return { sealWithoutVersion, tokenVersion };\n}\nfunction computeCookieMaxAge(ttl) {\n if (ttl === 0) {\n return 2147483647;\n }\n return ttl - timestampSkewSec;\n}\nfunction getCookie(req, cookieName) {\n return parse(\n (\"headers\" in req && typeof req.headers.get === \"function\" ? req.headers.get(\"cookie\") : req.headers.cookie) ?? \"\"\n )[cookieName] ?? \"\";\n}\nfunction getServerActionCookie(cookieName, cookieHandler) {\n const cookieObject = cookieHandler.get(cookieName);\n const cookie = cookieObject?.value;\n if (typeof cookie === \"string\") {\n return cookie;\n }\n return \"\";\n}\nfunction setCookie(res, cookieValue) {\n if (\"headers\" in res && typeof res.headers.append === \"function\") {\n res.headers.append(\"set-cookie\", cookieValue);\n return;\n }\n let existingSetCookie = res.getHeader(\"set-cookie\") ?? [];\n if (!Array.isArray(existingSetCookie)) {\n existingSetCookie = [existingSetCookie.toString()];\n }\n res.setHeader(\"set-cookie\", [\n ...existingSetCookie,\n cookieValue\n ]);\n}\nfunction createSealData(_crypto) {\n return async function sealData2(data, {\n password,\n ttl = fourteenDaysInSeconds\n }) {\n const passwordsMap = normalizeStringPasswordToMap(password);\n const mostRecentPasswordId = Math.max(\n ...Object.keys(passwordsMap).map(Number)\n );\n const passwordForSeal = {\n id: mostRecentPasswordId.toString(),\n secret: passwordsMap[mostRecentPasswordId]\n };\n const seal$1 = await seal(_crypto, data, passwordForSeal, {\n ...defaults,\n ttl: ttl * 1e3\n });\n return `${seal$1}${versionDelimiter}${currentMajorVersion}`;\n };\n}\nfunction createUnsealData(_crypto) {\n return async function unsealData2(seal, {\n password,\n ttl = fourteenDaysInSeconds\n }) {\n const passwordsMap = normalizeStringPasswordToMap(password);\n const { sealWithoutVersion, tokenVersion } = parseSeal(seal);\n try {\n const data = await unseal(_crypto, sealWithoutVersion, passwordsMap, {\n ...defaults,\n ttl: ttl * 1e3\n }) ?? {};\n if (tokenVersion === 2) {\n return data;\n }\n return { ...data.persistent };\n } catch (error) {\n if (error instanceof Error && /^(Expired seal|Bad hmac value|Cannot find password|Incorrect number of sealed components)/.test(\n error.message\n )) {\n return {};\n }\n throw error;\n }\n };\n}\nfunction getSessionConfig(sessionOptions) {\n const options = {\n ...defaultOptions,\n ...sessionOptions,\n cookieOptions: {\n ...defaultOptions.cookieOptions,\n ...sessionOptions.cookieOptions || {}\n }\n };\n if (sessionOptions.cookieOptions && \"maxAge\" in sessionOptions.cookieOptions) {\n if (sessionOptions.cookieOptions.maxAge === void 0) {\n options.ttl = 0;\n }\n } else {\n options.cookieOptions.maxAge = computeCookieMaxAge(options.ttl);\n }\n return options;\n}\nvar badUsageMessage = \"iron-session: Bad usage: use getIronSession(req, res, options) or getIronSession(cookieStore, options).\";\nfunction createGetIronSession(sealData2, unsealData2) {\n return getIronSession2;\n async function getIronSession2(reqOrCookieStore, resOrsessionOptions, sessionOptions) {\n if (!reqOrCookieStore) {\n throw new Error(badUsageMessage);\n }\n if (!resOrsessionOptions) {\n throw new Error(badUsageMessage);\n }\n if (!sessionOptions) {\n return getIronSessionFromCookieStore(\n reqOrCookieStore,\n resOrsessionOptions,\n sealData2,\n unsealData2\n );\n }\n const req = reqOrCookieStore;\n const res = resOrsessionOptions;\n if (!sessionOptions) {\n throw new Error(badUsageMessage);\n }\n if (!sessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n if (!sessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n const passwordsMap = normalizeStringPasswordToMap(sessionOptions.password);\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\"\n );\n }\n let sessionConfig = getSessionConfig(sessionOptions);\n const sealFromCookies = getCookie(req, sessionConfig.cookieName);\n const session = sealFromCookies ? await unsealData2(sealFromCookies, {\n password: passwordsMap,\n ttl: sessionConfig.ttl\n }) : {};\n Object.defineProperties(session, {\n updateConfig: {\n value: function updateConfig(newSessionOptions) {\n sessionConfig = getSessionConfig(newSessionOptions);\n }\n },\n save: {\n value: async function save() {\n if (\"headersSent\" in res && res.headersSent) {\n throw new Error(\n \"iron-session: Cannot set session cookie: session.save() was called after headers were sent. Make sure to call it before any res.send() or res.end()\"\n );\n }\n const seal = await sealData2(session, {\n password: passwordsMap,\n ttl: sessionConfig.ttl\n });\n const cookieValue = serialize(\n sessionConfig.cookieName,\n seal,\n sessionConfig.cookieOptions\n );\n if (cookieValue.length > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieValue.length} bytes), browsers will refuse it. Try to remove some data.`\n );\n }\n setCookie(res, cookieValue);\n }\n },\n destroy: {\n value: function destroy() {\n Object.keys(session).forEach((key) => {\n delete session[key];\n });\n const cookieValue = serialize(sessionConfig.cookieName, \"\", {\n ...sessionConfig.cookieOptions,\n maxAge: 0\n });\n setCookie(res, cookieValue);\n }\n }\n });\n return session;\n }\n}\nasync function getIronSessionFromCookieStore(cookieStore, sessionOptions, sealData2, unsealData2) {\n if (!sessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n if (!sessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n const passwordsMap = normalizeStringPasswordToMap(sessionOptions.password);\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\"\n );\n }\n let sessionConfig = getSessionConfig(sessionOptions);\n const sealFromCookies = getServerActionCookie(\n sessionConfig.cookieName,\n cookieStore\n );\n const session = sealFromCookies ? await unsealData2(sealFromCookies, {\n password: passwordsMap,\n ttl: sessionConfig.ttl\n }) : {};\n Object.defineProperties(session, {\n updateConfig: {\n value: function updateConfig(newSessionOptions) {\n sessionConfig = getSessionConfig(newSessionOptions);\n }\n },\n save: {\n value: async function save() {\n const seal = await sealData2(session, {\n password: passwordsMap,\n ttl: sessionConfig.ttl\n });\n const cookieLength = sessionConfig.cookieName.length + seal.length + JSON.stringify(sessionConfig.cookieOptions).length;\n if (cookieLength > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieLength} bytes), browsers will refuse it. Try to remove some data.`\n );\n }\n cookieStore.set(\n sessionConfig.cookieName,\n seal,\n sessionConfig.cookieOptions\n );\n }\n },\n destroy: {\n value: function destroy() {\n Object.keys(session).forEach((key) => {\n delete session[key];\n });\n const cookieOptions = { ...sessionConfig.cookieOptions, maxAge: 0 };\n cookieStore.set(sessionConfig.cookieName, \"\", cookieOptions);\n }\n }\n });\n return session;\n}\nvar sealData = createSealData(crypto);\nvar unsealData = createUnsealData(crypto);\nvar getIronSession = createGetIronSession(sealData, unsealData);\n\nexport { getIronSession, sealData, unsealData };\n//# sourceMappingURL=index.js.map\n//# sourceMappingURL=index.js.map","import type { Firestore } from \"@google-cloud/firestore\";\n\nexport type UserCredentialsEntity = {\n loginHint: string;\n refreshToken: string;\n profilePictureUrl?: string;\n};\n\nenum FirestoreCollections {\n CONNECTED_USERS_CREDENTIALS = \"connectedUsersCredentials\",\n}\n\nexport class FirestoreClient {\n private _firestore: Firestore;\n\n constructor(private readonly firestore: Firestore) {\n this._firestore = firestore;\n }\n\n public async getConnectedUserCredentials(\n loginHint: string,\n ): Promise<UserCredentialsEntity | null> {\n try {\n const doc = await this._firestore\n .collection(FirestoreCollections.CONNECTED_USERS_CREDENTIALS)\n .doc(loginHint)\n .get();\n // todo: zod schema validation\n return doc as unknown as UserCredentialsEntity; // can remove cast with zod\n } catch (error) {\n console.error(error);\n throw new Error(\"Failed to save users credentials\");\n }\n }\n\n public async upsertConnectedUserCredentials(\n credentials: Omit<UserCredentialsEntity, \"refreshToken\"> & {\n refreshToken?: string;\n },\n ): Promise<void> {\n try {\n // todo: zod schema validation\n this._firestore.settings({ ignoreUndefinedProperties: true });\n await this._firestore\n .collection(FirestoreCollections.CONNECTED_USERS_CREDENTIALS)\n .doc(credentials.loginHint)\n .set(credentials);\n } catch (error) {\n console.error(error);\n throw new Error(\"Failed to upsert users credentials\");\n }\n }\n}\n","import crypto from \"crypto\";\n\nexport class EncryptionService {\n private static ALGORITHM = \"aes-256-cbc\";\n private static IV_LENGTH = 16; // For AES, this is always 16\n private static SALT_BYTES = 16;\n private static ENCRYPTION_KEY_LENGTH = 32;\n private ENCRYPTION_SECRET: string;\n\n constructor(private readonly encryptionSecret: string) {\n this.ENCRYPTION_SECRET = encryptionSecret;\n }\n\n public encryptString(value: string): string {\n const salt = crypto\n .randomBytes(EncryptionService.SALT_BYTES)\n .toString(\"hex\");\n const iv = crypto.randomBytes(EncryptionService.IV_LENGTH);\n const encryptionKey = crypto.scryptSync(\n this.ENCRYPTION_SECRET,\n salt,\n EncryptionService.ENCRYPTION_KEY_LENGTH,\n );\n const cipher = crypto.createCipheriv(\n EncryptionService.ALGORITHM,\n encryptionKey,\n iv,\n );\n let encrypted = cipher.update(value, \"utf8\", \"hex\");\n encrypted += cipher.final(\"hex\");\n return `${iv.toString(\"hex\")}:${encrypted}:${salt}`;\n }\n\n public decryptString(value: string): string {\n const [ivHex, encryptedText, salt] = value.split(\":\");\n if (!ivHex || !encryptedText || !salt)\n throw new Error(`Invalid encrypted string`);\n\n const iv = Buffer.from(ivHex, \"hex\");\n const encryptionKey = crypto.scryptSync(\n this.ENCRYPTION_SECRET,\n salt,\n EncryptionService.ENCRYPTION_KEY_LENGTH,\n );\n\n const decipher = crypto.createDecipheriv(\n EncryptionService.ALGORITHM,\n encryptionKey,\n iv,\n );\n\n let decrypted = decipher.update(encryptedText, \"hex\", \"utf8\");\n decrypted += decipher.final(\"utf8\");\n\n return decrypted;\n }\n}\n","import { LoginTicket, OAuth2Client, TokenPayload } from \"google-auth-library\";\nimport { AccessTokenResponse } from \"google-auth-library/build/src/auth/oauth2client\";\n\nexport type GoogleOAuthUser = {\n accessToken: string;\n loginHint: string;\n refreshToken?: string;\n profilePictureUrl?: string;\n email?: string;\n};\n\nexport class GoogleOAuthClient {\n private client: OAuth2Client;\n private clientId: string;\n\n constructor(\n private readonly googleClientId: string,\n private readonly googleClientSecret: string,\n private readonly callbackUrl: string,\n private readonly accessToken?: string,\n private readonly refreshToken?: string,\n ) {\n if (!googleClientId) throw new Error(\"Google Client ID is missing\");\n if (!googleClientSecret) throw new Error(\"Google Client Secret is missing\");\n if (!callbackUrl) throw new Error(\"Google OAuth Callback URL is missing\");\n const client = new OAuth2Client({\n clientId: googleClientId,\n clientSecret: googleClientSecret,\n redirectUri: callbackUrl,\n forceRefreshOnFailure: false,\n });\n\n if (process.env.GOOGLE_CLASSROOM_DEV_MODE === \"true\" && accessToken) {\n client.refreshHandler = async (): Promise<AccessTokenResponse> => ({\n access_token: accessToken,\n expiry_date: new Date().getTime() + 1000 * 60 * 60, // now + 1 hour,\n });\n }\n\n if (accessToken || refreshToken)\n client.setCredentials({\n access_token: accessToken,\n refresh_token: refreshToken,\n });\n this.client = client;\n this.clientId = googleClientId;\n }\n\n /**\n * Returns the URL that the user should be redirected to in order to connect their Google account\n */\n public getAuthenticateUrl(\n loginHint?: string,\n subscribeToNewsletter: boolean = false,\n ): string | null {\n try {\n const scope: string[] = [\n \"https://www.googleapis.com/auth/userinfo.profile\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n \"https://www.googleapis.com/auth/classroom.courses.readonly\",\n \"https://www.googleapis.com/auth/classroom.addons.student\",\n \"https://www.googleapis.com/auth/classroom.addons.teacher\",\n ];\n\n return this.client.generateAuthUrl({\n access_type: \"offline\",\n include_granted_scopes: true,\n scope,\n loginHint,\n subscribeToNewsletter,\n });\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n /**\n * Returns user info and auth tokens by exchanging a Google OAuth\n * @param code - Code supplied by Google from OAuth callback redirection\n */\n public async exchangeCodeForTokens(\n code: string,\n ): Promise<GoogleOAuthUser | null> {\n try {\n const { tokens } = await this.client.getToken(code);\n\n // Verify the tokens we received.\n const ticket: LoginTicket = await this.client.verifyIdToken({\n idToken: tokens.id_token!,\n audience: this.clientId,\n });\n\n // After verifying the token, we can access the payload.\n const info: TokenPayload | undefined = ticket.getPayload();\n\n // todo: use zod\n if (!tokens.access_token) throw new Error(\"Access token is missing\");\n if (!info?.sub) throw new Error(\"User sub is missing\");\n\n return {\n accessToken: tokens.access_token,\n loginHint: info.sub,\n refreshToken: tokens.refresh_token!, // only received if first time signing in\n profilePictureUrl: info?.picture,\n email: info.email,\n };\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n /**\n * Attempts to generate a new access token from a supplied refresh token and returns it\n * @param refreshToken - A Google OAuth 2.0 refresh token\n */\n public async refreshAccessToken(\n refreshToken: string,\n ): Promise<string | null> {\n try {\n this.client.setCredentials({ refresh_token: refreshToken });\n const accessToken = await this.client.getAccessToken();\n // todo: use zod\n if (!accessToken.token) throw new Error(\"Unable to refresh access token\");\n return accessToken.token;\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n /**\n * Checks if the access token attached to the auth client exists and has not expired.\n * (The access token being tested is optionally supplied when the GoogleOAuthClient is constructed)\n */\n public async isAuthenticated(accessToken: string): Promise<boolean> {\n try {\n const tokenInfo = await this.client.getTokenInfo(accessToken);\n const tokenHasExpired = tokenInfo.expiry_date < Date.now();\n if (!tokenHasExpired) return false;\n\n return true;\n } catch (error) {\n console.error(error);\n return false;\n }\n }\n}\n","import type { Firestore } from \"@google-cloud/firestore\";\nimport { sealData, unsealData } from \"iron-session\";\n\nimport { EncryptionService } from \"@/services/Encryption\";\nimport { FirestoreClient } from \"@/services/FirestoreClient\";\nimport { GoogleOAuthClient } from \"@/services/GoogleOAuth\";\n\nexport type OakGoogleSignInCallback = {\n encryptedSession: string;\n profilePictureUrl?: string;\n};\n\ntype EncryptedSession = {\n loginHint: string;\n accessToken: string;\n};\n\nexport class OakGoogleClassroomAddOn {\n private encryptionService: EncryptionService;\n private firestoreClient: FirestoreClient;\n private _googleOAuthClientId: string;\n private _googleOAuthClientSecret: string;\n private _googleOAuthCallbackApiRoute: string;\n private _sessionSecret: string;\n\n constructor(\n private readonly encryptionSecret: string,\n private readonly firestore: Firestore,\n private readonly googleOAuthClientId: string,\n private readonly googleOAuthClientSecret: string,\n private readonly googleOAuthCallbackApiRoute: string,\n private readonly sessionSecret: string,\n ) {\n this.encryptionService = new EncryptionService(encryptionSecret);\n this.firestoreClient = new FirestoreClient(firestore);\n this._googleOAuthClientId = googleOAuthClientId;\n this._googleOAuthClientSecret = googleOAuthClientSecret;\n this._googleOAuthCallbackApiRoute = googleOAuthCallbackApiRoute;\n this._sessionSecret = sessionSecret;\n }\n\n private getOAuthClient(\n accessToken?: string,\n refreshToken?: string,\n ): GoogleOAuthClient {\n return new GoogleOAuthClient(\n this._googleOAuthClientId,\n this._googleOAuthClientSecret,\n this._googleOAuthCallbackApiRoute,\n accessToken,\n refreshToken,\n );\n }\n\n public async getGoogleSignInUrl(\n loginHint?: string,\n subscribeToNewsletter: boolean = false,\n ): Promise<string> {\n const oauthClient = this.getOAuthClient();\n const url: string | null = oauthClient.getAuthenticateUrl(\n loginHint,\n subscribeToNewsletter,\n );\n if (!url) throw new Error(\"Failed to get Google Authentication URL\");\n return url;\n }\n\n public async handleGoogleSignInCallback(\n code: string,\n subscribeToNewsletterFn?: (email: string) => Promise<void>,\n ): Promise<OakGoogleSignInCallback> {\n const oauthClient = this.getOAuthClient();\n const user = await oauthClient.exchangeCodeForTokens(code);\n if (!user) throw new Error(\"Failed to authenticate Google sign-in\");\n const encryptedRefreshToken = user.refreshToken\n ? this.encryptionService.encryptString(user.refreshToken)\n : undefined;\n const encryptedProfileUrl = user.profilePictureUrl\n ? this.encryptionService.encryptString(user.profilePictureUrl)\n : undefined;\n await this.firestoreClient.upsertConnectedUserCredentials({\n refreshToken: encryptedRefreshToken,\n profilePictureUrl: encryptedProfileUrl,\n loginHint: user.loginHint,\n });\n const encryptedSession = await sealData(\n {\n loginHint: user.loginHint,\n accessToken: user.accessToken,\n } as EncryptedSession,\n { password: this._sessionSecret },\n );\n if (subscribeToNewsletterFn && user.email)\n await subscribeToNewsletterFn(user.email);\n return {\n encryptedSession,\n profilePictureUrl: user.profilePictureUrl,\n };\n }\n\n /**\n * Checks if session exists and is authenticated. It will automatically attempt\n * to refresh the session if it has expired.\n * Returns null for an invalid session.\n * Returns the encrypted session (original or refreshed) if valid.\n */\n public async verifyAuthSession(\n encryptedSession: string,\n ): Promise<string | null> {\n const decryptedSession = await unsealData<EncryptedSession>(\n encryptedSession,\n {\n password: this._sessionSecret,\n },\n );\n if (!decryptedSession?.accessToken || !decryptedSession?.loginHint)\n return null;\n\n // Check active session for the user exists\n const connectedUser =\n await this.firestoreClient.getConnectedUserCredentials(\n decryptedSession.loginHint,\n );\n if (!connectedUser) return null;\n\n // Check if the access token is still valid\n const oauthClient = this.getOAuthClient(\n decryptedSession.accessToken,\n connectedUser.refreshToken,\n );\n const isTokenValid = await oauthClient.isAuthenticated(\n decryptedSession.accessToken,\n );\n if (isTokenValid) return encryptedSession;\n\n // Attempt to refresh expired access token\n const refreshedToken = await oauthClient.refreshAccessToken(\n connectedUser.refreshToken,\n );\n if (refreshedToken) {\n const newEncryptedSession = await sealData(\n {\n loginHint: decryptedSession.loginHint,\n accessToken: refreshedToken,\n } as EncryptedSession,\n { password: this._sessionSecret },\n );\n return newEncryptedSession;\n }\n\n return null;\n }\n}\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","_","label","sent","trys","ops","g","Object","create","Iterator","prototype","verb","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","SuppressedError","cookie","parse","str","opt","obj","len","dec","decode","index","eqIdx","endIdx","indexOf","lastIndexOf","keyStartIdx","startIndex","keyEndIdx","endIndex","key","slice","__hasOwnProperty","valStartIdx","valEndIdx","charCodeAt","val","tryDecode","serialize","name","enc","encode","encodeURIComponent","cookieNameRegExp","test","cookieValueRegExp","maxAge","Math","floor","isFinite","domain","domainValueRegExp","path","pathValueRegExp","expires","__toString","isDate","isNaN","valueOf","toUTCString","httpOnly","secure","partitioned","priority","toLowerCase","sameSite","toString","hasOwnProperty","max","code","min","decodeURIComponent","alphabetByEncoding","alphabetByValue","Array","from","i","start","limit","char","String","fromCharCode","stringToBuffer","TextEncoder","base64urlDecode","_input","input","repeat","totalByteLength","endsWith","out","ArrayBuffer","dataView","DataView","bits","bitLength","j","chunkOffset","byteLength","k","offset","setUint8","Uint8Array","base64urlEncode","bitClusterCount","ceil","defaults","encryption","saltBits","algorithm","iterations","minPasswordlength","integrity","ttl","timestampSkewSec","localtimeOffsetMsec","clone","options","algorithms","keyBits","ivBits","sha256","macPrefix","randomBits","_crypto","Error","size","bytes","getRandomValues","randomBytes","generateKey","async","password","_a","hmac","id","hash","usage","salt","randomSalt","map","x","padStart","join","derivedKey","keyLength","passwordBuffer","importedKey","subtle","importKey","params","deriveBits","pbkdf2","importedEncryptionKey","iv","getEncryptParams","data","counter","decrypt","decrypted","TextDecoder","hmacWithPassword","textBuffer","signed","sign","digest","normalizePassword","secret","seal","object","opts","now","Date","objectString","JSON","stringify","pass","encrypted","encrypt","encryptedB64","expiration","macBaseString","mac","webCrypto","globalThis","crypto","randomUUID","array","normalizeStringPasswordToMap","FirestoreCollections","sealData","fourteenDaysInSeconds","passwordsMap","mostRecentPasswordId","keys","Number","passwordForSeal","createSealData","unsealData","sealWithoutVersion","tokenVersion","tokenVersionAsString","split","parseInt","parseSeal","sealed","parts","prefix","passwordId","encryptionSalt","encryptionIv","hmacSalt","macOptions","a","b","mismatch","fixedTimeComparison","decryptOptions","unseal","persistent","error","message","createUnsealData","EncryptionService","encryptionSecret","ENCRYPTION_SECRET","encryptString","SALT_BYTES","IV_LENGTH","encryptionKey","scryptSync","ENCRYPTION_KEY_LENGTH","cipher","createCipheriv","ALGORITHM","update","final","concat","decryptString","o","m","r","ar","__read","ivHex","encryptedText","Buffer","decipher","createDecipheriv","FirestoreClient","firestore","_firestore","getConnectedUserCredentials","loginHint","collection","CONNECTED_USERS_CREDENTIALS","doc","get","console","error_1","upsertConnectedUserCredentials","credentials","settings","ignoreUndefinedProperties","set","error_2","GoogleOAuthClient","googleClientId","googleClientSecret","callbackUrl","accessToken","refreshToken","_this","client","OAuth2Client","clientId","clientSecret","redirectUri","forceRefreshOnFailure","process","env","GOOGLE_CLASSROOM_DEV_MODE","refreshHandler","access_token","expiry_date","getTime","setCredentials","refresh_token","getAuthenticateUrl","subscribeToNewsletter","generateAuthUrl","access_type","include_granted_scopes","scope","exchangeCodeForTokens","getToken","tokens","verifyIdToken","idToken","id_token","audience","ticket","info","getPayload","sub","profilePictureUrl","picture","email","refreshAccessToken","getAccessToken","token","isAuthenticated","getTokenInfo","tokenInfo","error_3","OakGoogleClassroomAddOn","googleOAuthClientId","googleOAuthClientSecret","googleOAuthCallbackApiRoute","sessionSecret","encryptionService","firestoreClient","_googleOAuthClientId","_googleOAuthClientSecret","_googleOAuthCallbackApiRoute","_sessionSecret","getOAuthClient","getGoogleSignInUrl","loginHint_1","arguments","oauthClient","url","handleGoogleSignInCallback","subscribeToNewsletterFn","user","encryptedRefreshToken","undefined","encryptedProfileUrl","encryptedSession","verifyAuthSession","decryptedSession","connectedUser","refreshedToken"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("react"),t=require("@oaknational/oak-components");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=n(e),a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e},a.apply(this,arguments)};function o(e,t,n,r){return new(n||(n=Promise))(function(a,o){function l(e){try{c(r.next(e))}catch(e){o(e)}}function i(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(l,i)}c((r=r.apply(e,t||[])).next())})}function l(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return l.next=i(0),l.throw=i(1),l.return=i(2),"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(i){return function(c){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;l&&(l=0,i[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=o.trys,(a=a.length>0&&a[a.length-1])||6!==i[0]&&2!==i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,o=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)l.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(a)throw a.error}}return l}"function"==typeof SuppressedError&&SuppressedError;var c=function(){return r.default.createElement("svg",{version:"1.1",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",xmlnsXlink:"http://www.w3.org/1999/xlink",style:{display:"block"},width:19,height:19},r.default.createElement("path",{fill:"#EA4335",d:"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"}),r.default.createElement("path",{fill:"#4285F4",d:"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"}),r.default.createElement("path",{fill:"#FBBC05",d:"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"}),r.default.createElement("path",{fill:"#34A853",d:"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"}),r.default.createElement("path",{fill:"none",d:"M0 0h48v48H0z"}))},u=function(e){var n=i(r.default.useState(!1),2),o=n[0],l=n[1];return r.default.createElement(t.OakLink,a({},e,{element:"button",style:{textDecoration:"none"},onMouseEnter:function(){return l(!0)},onMouseLeave:function(){return l(!1)},"aria-label":"Sign in with Google"}),r.default.createElement(t.OakFlex,{$pa:"inner-padding-m",$width:"100%",$gap:"space-between-xs",$alignItems:"center",$justifyContent:"center",$borderRadius:"border-radius-s",$ba:"border-solid-s",$borderColor:"border-neutral",$background:o&&"grey20"},r.default.createElement(c,null),r.default.createElement(t.OakSpan,{$font:"body-2-bold",$color:"text-primary",$hoverColor:"text-primary"},"Sign-in with Google")))},s=function(e){var t=e.color,n=void 0===t?"#222222":t;return r.default.createElement("svg",{width:"30",height:"40",viewBox:"0 0 30 40",fill:"none",xmlns:"http://www.w3.org/2000/svg"},r.default.createElement("path",{d:"M16.432 6.8134C17.2641 6.9574 17.9812 7.04602 18.6836 7.20479C21.7484 7.8766 24.5021 9.54441 26.5115 11.9458C28.4836 14.2363 29.6739 17.092 29.9102 20.1005C29.9584 20.6543 29.9899 21.2082 29.9992 21.7621C30.0103 22.3621 29.9158 22.4673 29.345 22.5504C27.2042 22.8558 25.0222 22.6855 22.9552 22.0519C21.6282 21.65 20.3666 21.0586 19.2099 20.2962C17.7721 19.3386 16.5419 18.1031 15.5925 16.6629C14.5377 15.0887 13.8529 13.2977 13.5892 11.4234C13.4854 10.744 13.4687 10.0535 13.4039 9.28915C11.091 9.66233 8.93039 10.6771 7.16974 12.2172C4.60492 14.4327 3.11311 17.2481 2.57568 20.6322C3.09458 20.7356 3.57085 20.8463 4.05823 20.922C4.49003 20.9885 4.74391 21.1547 4.75874 21.6476C4.80258 23.232 5.09201 24.8001 5.61677 26.2963C6.14643 27.7501 6.78768 29.1611 7.53482 30.5167C8.61709 32.5413 10.1406 34.2988 11.9936 35.6602C12.9644 36.3603 14.0068 36.9562 15.1032 37.4381C15.4739 37.6006 16.0854 37.3384 16.5376 37.1501C18.6647 36.296 20.5308 34.9029 21.9508 33.1088C22.7588 32.0805 23.4 30.9044 24.0023 29.7376C24.7324 28.3216 25.0308 26.7616 25.2198 25.1886C25.2569 24.8803 25.3643 24.7548 25.6849 24.7843C26.0679 24.8221 26.4531 24.8332 26.8376 24.8175C27.2954 24.7935 27.49 25.0298 27.4307 25.4268C27.2453 26.6822 27.1341 27.9671 26.782 29.1782C25.998 31.8118 24.5512 34.202 22.579 36.1218C20.8099 37.9148 18.6124 39.2305 16.1929 39.9453C15.7055 40.0893 15.2978 39.9194 14.866 39.7773C12.1771 38.8948 9.96435 37.2941 8.09819 35.2172C7.21482 34.2352 6.4035 33.1913 5.67051 32.0934C4.80076 30.7727 4.09919 29.3495 3.58196 27.8564C3.01314 26.3167 2.6632 24.7054 2.54233 23.0692C2.52168 22.9981 2.48437 22.9328 2.43346 22.8789C2.38255 22.825 2.31951 22.7839 2.24952 22.759C1.67689 22.5744 1.09128 22.447 0.513084 22.2882C0.432981 22.2769 0.356021 22.2495 0.286881 22.2077C0.217741 22.1658 0.157865 22.1104 0.110891 22.0448C0.0639177 21.9792 0.0308281 21.9047 0.0136336 21.826C-0.00356099 21.7472 -0.00450137 21.6658 0.0108695 21.5867C0.159848 19.1412 0.87059 16.7625 2.08829 14.6339C3.11333 12.8409 4.48597 11.2689 6.12639 10.0092C7.92657 8.6205 10.0163 7.65149 12.2419 7.1734C12.3432 7.13614 12.4493 7.11314 12.557 7.10509C13.6374 7.20294 13.9153 6.50323 14.1841 5.64291C14.8392 3.56486 16.0754 1.71595 17.7477 0.312931C18.2314 -0.10431 18.2926 -0.10431 18.7244 0.312931C18.9764 0.560321 19.2192 0.818789 19.4545 1.08095C19.8048 1.47234 19.8048 1.64773 19.4082 2.00405C18.4924 2.85935 17.7341 3.86784 17.1677 4.98381C16.8914 5.58083 16.6459 6.19149 16.432 6.8134ZM27.6104 20.4457C27.5789 20.2796 27.5474 20.1485 27.5289 20.0156C27.2709 18.1548 26.6074 16.3728 25.5849 14.7945C24.3948 12.9165 22.7197 11.3919 20.7351 10.3802C19.3935 9.71621 17.939 9.30796 16.4468 9.17653C16.1836 9.14699 16.041 9.22084 16.0465 9.51992C16.1003 11.8387 16.7248 13.9859 18.098 15.8635C19.3807 17.629 21.1515 18.9844 23.1943 19.7645C24.6119 20.3183 26.076 20.4845 27.6104 20.4457Z",fill:n}))};exports.GoogleSignInView=function(e){var n=e.getGoogleSignInLink,a=e.onSuccessfulSignIn,c=e.privacyPolicyUrl,f=r.default.useRef(null),d=i(r.default.useState(!1),2),p=d[0],C=d[1],h=r.default.useCallback(function(e){var t;e.data&&"oak-google-classroom-auth-complete"===e.data.type&&(f.current&&(f.current.close(),f.current=null),e.data.success&&e.data.session&&(null===(t=null===window||void 0===window?void 0:window.cookieStore)||void 0===t||t.set({name:"oak-gclassroom-auth",value:e.data.session,partitioned:!0,sameSite:"none",path:"/"}),a(p)))},[a,p]);return r.default.useEffect(function(){return window.addEventListener("message",h),function(){window.removeEventListener("message",h)}},[h]),r.default.createElement(t.OakMaxWidth,{$pa:"inner-padding-xl3",$maxWidth:"all-spacing-21",$ma:"auto"},r.default.createElement(t.OakFlex,{$flexDirection:"column",$rowGap:"space-between-m"},r.default.createElement(s,null),r.default.createElement(t.OakHeading,{tag:"h1",$font:"heading-6"},"Sign in to Oak National Academy"),r.default.createElement(t.OakP,{$font:"body-2"},"Welcome back! Please sign-in to continue"),r.default.createElement(u,{onClick:function(){return o(void 0,void 0,void 0,function(){var e;return l(this,function(t){switch(t.label){case 0:return[4,n()];case 1:if(!(e=t.sent()))throw new Error("Could not get Google Sign In link");return new RegExp(/^(https):/).test(e)?f.current=window.open(e,"popUpWindow","height=500,width=500,left=100,top=100,resizable=no,scrollbars=yes,toolbar=yes,menubar=no,location=yes,directories=no,status=yes"):console.error("getGoogleSignInLink did not return a valid URL"),[2]}})})}}),r.default.createElement(t.OakFlex,{$columnGap:"space-between-xs",$alignItems:"flex-start"},r.default.createElement(t.OakCheckBox,{id:"google-sign-in-newsletter-checkbox",value:"",checked:p,onChange:function(e){return C(e.target.checked)}}),r.default.createElement(t.OakBox,null,r.default.createElement(t.OakLabel,{$font:"body-2",htmlFor:"google-sign-in-newsletter-checkbox"},"Sign up to receive helpful content via email. Unsubscribe at any time. Read our"," "),r.default.createElement(t.OakLink,{href:c,isTrailingIcon:!0,iconName:"external",target:"_blank"},"privacy policy"),"."))))};
1
+ "use strict";var e=require("react"),t=require("@oaknational/oak-components"),n=require("next/navigation");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=a(e),r=function(){return r=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)};function l(e,t,n,a){return new(n||(n=Promise))(function(o,r){function l(e){try{u(a.next(e))}catch(e){r(e)}}function i(e){try{u(a.throw(e))}catch(e){r(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(l,i)}u((a=a.apply(e,t||[])).next())})}function i(e,t){var n,a,o,r={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return l.next=i(0),l.throw=i(1),l.return=i(2),"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;l&&(l=0,i[0]&&(r=0)),r;)try{if(n=1,a&&(o=2&i[0]?a.return:i[0]?a.throw||((o=a.return)&&o.call(a),0):a.next)&&!(o=o.call(a,i[1])).done)return o;switch(a=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return r.label++,{value:i[1],done:!1};case 5:r.label++,a=i[1],i=[0];continue;case 7:i=r.ops.pop(),r.trys.pop();continue;default:if(!(o=r.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){r=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){r.label=i[1];break}if(6===i[0]&&r.label<o[1]){r.label=o[1],o=i;break}if(o&&r.label<o[2]){r.label=o[2],r.ops.push(i);break}o[2]&&r.ops.pop(),r.trys.pop();continue}i=t.call(e,r)}catch(e){i=[6,e],a=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}function u(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var a,o,r=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(a=r.next()).done;)l.push(a.value)}catch(e){o={error:e}}finally{try{a&&!a.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return l}"function"==typeof SuppressedError&&SuppressedError;var c=function(){return o.default.createElement("svg",{version:"1.1",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",xmlnsXlink:"http://www.w3.org/1999/xlink",style:{display:"block"},width:19,height:19},o.default.createElement("path",{fill:"#EA4335",d:"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"}),o.default.createElement("path",{fill:"#4285F4",d:"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"}),o.default.createElement("path",{fill:"#FBBC05",d:"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"}),o.default.createElement("path",{fill:"#34A853",d:"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"}),o.default.createElement("path",{fill:"none",d:"M0 0h48v48H0z"}))},s=function(e){var n=u(o.default.useState(!1),2),a=n[0],l=n[1];return o.default.createElement(t.OakLink,r({},e,{element:"button",style:{textDecoration:"none"},onMouseEnter:function(){return l(!0)},onMouseLeave:function(){return l(!1)},"aria-label":"Sign in with Google"}),o.default.createElement(t.OakFlex,{$pa:"inner-padding-m",$width:"100%",$gap:"space-between-xs",$alignItems:"center",$justifyContent:"center",$borderRadius:"border-radius-s",$ba:"border-solid-s",$borderColor:"border-neutral",$background:a&&"grey20"},o.default.createElement(c,null),o.default.createElement(t.OakSpan,{$font:"body-2-bold",$color:"text-primary",$hoverColor:"text-primary"},"Sign-in with Google")))},d=function(e){var t=e.color,n=void 0===t?"#222222":t;return o.default.createElement("svg",{width:"30",height:"40",viewBox:"0 0 30 40",fill:"none",xmlns:"http://www.w3.org/2000/svg"},o.default.createElement("path",{d:"M16.432 6.8134C17.2641 6.9574 17.9812 7.04602 18.6836 7.20479C21.7484 7.8766 24.5021 9.54441 26.5115 11.9458C28.4836 14.2363 29.6739 17.092 29.9102 20.1005C29.9584 20.6543 29.9899 21.2082 29.9992 21.7621C30.0103 22.3621 29.9158 22.4673 29.345 22.5504C27.2042 22.8558 25.0222 22.6855 22.9552 22.0519C21.6282 21.65 20.3666 21.0586 19.2099 20.2962C17.7721 19.3386 16.5419 18.1031 15.5925 16.6629C14.5377 15.0887 13.8529 13.2977 13.5892 11.4234C13.4854 10.744 13.4687 10.0535 13.4039 9.28915C11.091 9.66233 8.93039 10.6771 7.16974 12.2172C4.60492 14.4327 3.11311 17.2481 2.57568 20.6322C3.09458 20.7356 3.57085 20.8463 4.05823 20.922C4.49003 20.9885 4.74391 21.1547 4.75874 21.6476C4.80258 23.232 5.09201 24.8001 5.61677 26.2963C6.14643 27.7501 6.78768 29.1611 7.53482 30.5167C8.61709 32.5413 10.1406 34.2988 11.9936 35.6602C12.9644 36.3603 14.0068 36.9562 15.1032 37.4381C15.4739 37.6006 16.0854 37.3384 16.5376 37.1501C18.6647 36.296 20.5308 34.9029 21.9508 33.1088C22.7588 32.0805 23.4 30.9044 24.0023 29.7376C24.7324 28.3216 25.0308 26.7616 25.2198 25.1886C25.2569 24.8803 25.3643 24.7548 25.6849 24.7843C26.0679 24.8221 26.4531 24.8332 26.8376 24.8175C27.2954 24.7935 27.49 25.0298 27.4307 25.4268C27.2453 26.6822 27.1341 27.9671 26.782 29.1782C25.998 31.8118 24.5512 34.202 22.579 36.1218C20.8099 37.9148 18.6124 39.2305 16.1929 39.9453C15.7055 40.0893 15.2978 39.9194 14.866 39.7773C12.1771 38.8948 9.96435 37.2941 8.09819 35.2172C7.21482 34.2352 6.4035 33.1913 5.67051 32.0934C4.80076 30.7727 4.09919 29.3495 3.58196 27.8564C3.01314 26.3167 2.6632 24.7054 2.54233 23.0692C2.52168 22.9981 2.48437 22.9328 2.43346 22.8789C2.38255 22.825 2.31951 22.7839 2.24952 22.759C1.67689 22.5744 1.09128 22.447 0.513084 22.2882C0.432981 22.2769 0.356021 22.2495 0.286881 22.2077C0.217741 22.1658 0.157865 22.1104 0.110891 22.0448C0.0639177 21.9792 0.0308281 21.9047 0.0136336 21.826C-0.00356099 21.7472 -0.00450137 21.6658 0.0108695 21.5867C0.159848 19.1412 0.87059 16.7625 2.08829 14.6339C3.11333 12.8409 4.48597 11.2689 6.12639 10.0092C7.92657 8.6205 10.0163 7.65149 12.2419 7.1734C12.3432 7.13614 12.4493 7.11314 12.557 7.10509C13.6374 7.20294 13.9153 6.50323 14.1841 5.64291C14.8392 3.56486 16.0754 1.71595 17.7477 0.312931C18.2314 -0.10431 18.2926 -0.10431 18.7244 0.312931C18.9764 0.560321 19.2192 0.818789 19.4545 1.08095C19.8048 1.47234 19.8048 1.64773 19.4082 2.00405C18.4924 2.85935 17.7341 3.86784 17.1677 4.98381C16.8914 5.58083 16.6459 6.19149 16.432 6.8134ZM27.6104 20.4457C27.5789 20.2796 27.5474 20.1485 27.5289 20.0156C27.2709 18.1548 26.6074 16.3728 25.5849 14.7945C24.3948 12.9165 22.7197 11.3919 20.7351 10.3802C19.3935 9.71621 17.939 9.30796 16.4468 9.17653C16.1836 9.14699 16.041 9.22084 16.0465 9.51992C16.1003 11.8387 16.7248 13.9859 18.098 15.8635C19.3807 17.629 21.1515 18.9844 23.1943 19.7645C24.6119 20.3183 26.076 20.4845 27.6104 20.4457Z",fill:n}))};exports.GoogleClassroomAuthSuccessView=function(e){var n=e.session;return o.default.useEffect(function(){var e;null===(e=null===window||void 0===window?void 0:window.opener)||void 0===e||e.postMessage({type:"oak-google-classroom-auth-complete",success:!0,session:n},"*"),setTimeout(function(){window.close()},3e3)},[n]),o.default.createElement(o.default.Fragment,null,o.default.createElement(t.OakHeading,{tag:"h1"},"Authentication Successful"),o.default.createElement(t.OakP,null,"This window will automatically close..."))},exports.GoogleClassroomBrowseView=function(){return o.default.createElement(o.default.Fragment,null,o.default.createElement(t.OakHeading,{tag:"h1"},"Browsing curriculum content"),o.default.createElement(t.OakP,null,"This page is a work in progress..."))},exports.GoogleSignInView=function(e){var n=e.getGoogleSignInLink,a=e.onSuccessfulSignIn,r=e.privacyPolicyUrl,c=o.default.useRef(null),f=u(o.default.useState(!1),2),p=f[0],g=f[1],h=o.default.useCallback(function(e){var t;e.data&&"oak-google-classroom-auth-complete"===e.data.type&&(c.current&&(c.current.close(),c.current=null),e.data.success&&e.data.session&&(null===(t=null===window||void 0===window?void 0:window.cookieStore)||void 0===t||t.set({name:"oak-gclassroom-auth",value:e.data.session,partitioned:!0,sameSite:"none",path:"/"}),a(p)))},[a,p]);return o.default.useEffect(function(){return window.addEventListener("message",h),function(){window.removeEventListener("message",h)}},[h]),o.default.createElement(t.OakMaxWidth,{$pa:"inner-padding-xl3",$maxWidth:"all-spacing-21",$ma:"auto"},o.default.createElement(t.OakFlex,{$flexDirection:"column",$rowGap:"space-between-m"},o.default.createElement(d,null),o.default.createElement(t.OakHeading,{tag:"h1",$font:"heading-6"},"Sign in to Oak National Academy"),o.default.createElement(t.OakP,{$font:"body-2"},"Welcome back! Please sign-in to continue"),o.default.createElement(s,{onClick:function(){return l(void 0,void 0,void 0,function(){var e;return i(this,function(t){switch(t.label){case 0:return[4,n()];case 1:if(!(e=t.sent()))throw new Error("Could not get Google Sign In link");return new RegExp(/^(https):/).test(e)?c.current=window.open(e,"popUpWindow","height=500,width=500,left=100,top=100,resizable=no,scrollbars=yes,toolbar=yes,menubar=no,location=yes,directories=no,status=yes"):console.error("getGoogleSignInLink did not return a valid URL"),[2]}})})}}),o.default.createElement(t.OakFlex,{$columnGap:"space-between-xs",$alignItems:"flex-start"},o.default.createElement(t.OakCheckBox,{id:"google-sign-in-newsletter-checkbox",value:"",checked:p,onChange:function(e){return g(e.target.checked)}}),o.default.createElement(t.OakBox,null,o.default.createElement(t.OakLabel,{$font:"body-2",htmlFor:"google-sign-in-newsletter-checkbox"},"Sign up to receive helpful content via email. Unsubscribe at any time. Read our"," "),o.default.createElement(t.OakLink,{href:r,isTrailingIcon:!0,iconName:"external",target:"_blank"},"privacy policy"),"."))))},exports.WithGoogleClassroomAuth=function(e){var a=e.children,r=e.verifySessionAction,c=e.signInUrl,s=n.useRouter(),d=n.useSearchParams(),f=u(o.default.useState(!1),2),p=f[0],g=f[1];return o.default.useEffect(function(){g(!1),l(void 0,void 0,void 0,function(){var e,t,n;return i(this,function(a){switch(a.label){case 0:return e=function(){var e,t=null!==(e=null==d?void 0:d.toString())&&void 0!==e?e:"";s.push("".concat(c,"?").concat(t))},[4,window.cookieStore.get("oak-gclassroom-auth")];case 1:return(t=null===(n=a.sent())||void 0===n?void 0:n.value)?[4,r(t)]:(e(),[2]);case 2:return a.sent().authenticated?(g(!0),[2]):(e(),[2])}})})},[]),p?o.default.createElement(o.default.Fragment,null,a):o.default.createElement(t.OakFlex,{$justifyContent:"center",$alignItems:"center"},o.default.createElement(t.OakLoadingSpinner,{$width:"all-spacing-15",$color:"oakGreen"}))};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../src/components/GoogleSignInButton/GoogleSignInButtonIcon.tsx","../../../src/components/GoogleSignInButton/GoogleSignInButton.tsx","../../../src/components/OakAcornIcon/OakAcornIcon.tsx","../../../src/views/GoogleSignInView/GoogleSignInView.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React from \"react\";\n\nexport const GoogleSignInButtonIcon = () => {\n return (\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 48 48\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n style={{ display: \"block\" }}\n width={19}\n height={19}\n >\n <path\n fill=\"#EA4335\"\n d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"\n />\n <path\n fill=\"#4285F4\"\n d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"\n />\n <path fill=\"none\" d=\"M0 0h48v48H0z\" />\n </svg>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { OakFlex, OakLink, OakSpan } from \"@oaknational/oak-components\";\n\nimport { GoogleSignInButtonIcon } from \"./GoogleSignInButtonIcon\";\n\ntype Props = {\n onClick?: () => void;\n};\nexport const GoogleSignInButton: React.FC<Props> = (props) => {\n const [isHovered, setIsHovered] = React.useState<boolean>(false);\n return (\n <OakLink\n {...props}\n element=\"button\"\n style={{\n textDecoration: \"none\",\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n aria-label={\"Sign in with Google\"}\n >\n <OakFlex\n $pa={\"inner-padding-m\"}\n $width={\"100%\"}\n $gap={\"space-between-xs\"}\n $alignItems={\"center\"}\n $justifyContent={\"center\"}\n $borderRadius={\"border-radius-s\"}\n $ba={\"border-solid-s\"}\n $borderColor={\"border-neutral\"}\n $background={isHovered && \"grey20\"}\n >\n <GoogleSignInButtonIcon />\n <OakSpan\n $font={\"body-2-bold\"}\n $color={\"text-primary\"}\n $hoverColor={\"text-primary\"}\n >\n Sign-in with Google\n </OakSpan>\n </OakFlex>\n </OakLink>\n );\n};\n","import React from \"react\";\n\ntype Props = {\n color?: string;\n};\nexport const OakAcornIcon: React.FC<Props> = ({ color = \"#222222\" }) => {\n return (\n <svg\n width=\"30\"\n height=\"40\"\n viewBox=\"0 0 30 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.432 6.8134C17.2641 6.9574 17.9812 7.04602 18.6836 7.20479C21.7484 7.8766 24.5021 9.54441 26.5115 11.9458C28.4836 14.2363 29.6739 17.092 29.9102 20.1005C29.9584 20.6543 29.9899 21.2082 29.9992 21.7621C30.0103 22.3621 29.9158 22.4673 29.345 22.5504C27.2042 22.8558 25.0222 22.6855 22.9552 22.0519C21.6282 21.65 20.3666 21.0586 19.2099 20.2962C17.7721 19.3386 16.5419 18.1031 15.5925 16.6629C14.5377 15.0887 13.8529 13.2977 13.5892 11.4234C13.4854 10.744 13.4687 10.0535 13.4039 9.28915C11.091 9.66233 8.93039 10.6771 7.16974 12.2172C4.60492 14.4327 3.11311 17.2481 2.57568 20.6322C3.09458 20.7356 3.57085 20.8463 4.05823 20.922C4.49003 20.9885 4.74391 21.1547 4.75874 21.6476C4.80258 23.232 5.09201 24.8001 5.61677 26.2963C6.14643 27.7501 6.78768 29.1611 7.53482 30.5167C8.61709 32.5413 10.1406 34.2988 11.9936 35.6602C12.9644 36.3603 14.0068 36.9562 15.1032 37.4381C15.4739 37.6006 16.0854 37.3384 16.5376 37.1501C18.6647 36.296 20.5308 34.9029 21.9508 33.1088C22.7588 32.0805 23.4 30.9044 24.0023 29.7376C24.7324 28.3216 25.0308 26.7616 25.2198 25.1886C25.2569 24.8803 25.3643 24.7548 25.6849 24.7843C26.0679 24.8221 26.4531 24.8332 26.8376 24.8175C27.2954 24.7935 27.49 25.0298 27.4307 25.4268C27.2453 26.6822 27.1341 27.9671 26.782 29.1782C25.998 31.8118 24.5512 34.202 22.579 36.1218C20.8099 37.9148 18.6124 39.2305 16.1929 39.9453C15.7055 40.0893 15.2978 39.9194 14.866 39.7773C12.1771 38.8948 9.96435 37.2941 8.09819 35.2172C7.21482 34.2352 6.4035 33.1913 5.67051 32.0934C4.80076 30.7727 4.09919 29.3495 3.58196 27.8564C3.01314 26.3167 2.6632 24.7054 2.54233 23.0692C2.52168 22.9981 2.48437 22.9328 2.43346 22.8789C2.38255 22.825 2.31951 22.7839 2.24952 22.759C1.67689 22.5744 1.09128 22.447 0.513084 22.2882C0.432981 22.2769 0.356021 22.2495 0.286881 22.2077C0.217741 22.1658 0.157865 22.1104 0.110891 22.0448C0.0639177 21.9792 0.0308281 21.9047 0.0136336 21.826C-0.00356099 21.7472 -0.00450137 21.6658 0.0108695 21.5867C0.159848 19.1412 0.87059 16.7625 2.08829 14.6339C3.11333 12.8409 4.48597 11.2689 6.12639 10.0092C7.92657 8.6205 10.0163 7.65149 12.2419 7.1734C12.3432 7.13614 12.4493 7.11314 12.557 7.10509C13.6374 7.20294 13.9153 6.50323 14.1841 5.64291C14.8392 3.56486 16.0754 1.71595 17.7477 0.312931C18.2314 -0.10431 18.2926 -0.10431 18.7244 0.312931C18.9764 0.560321 19.2192 0.818789 19.4545 1.08095C19.8048 1.47234 19.8048 1.64773 19.4082 2.00405C18.4924 2.85935 17.7341 3.86784 17.1677 4.98381C16.8914 5.58083 16.6459 6.19149 16.432 6.8134ZM27.6104 20.4457C27.5789 20.2796 27.5474 20.1485 27.5289 20.0156C27.2709 18.1548 26.6074 16.3728 25.5849 14.7945C24.3948 12.9165 22.7197 11.3919 20.7351 10.3802C19.3935 9.71621 17.939 9.30796 16.4468 9.17653C16.1836 9.14699 16.041 9.22084 16.0465 9.51992C16.1003 11.8387 16.7248 13.9859 18.098 15.8635C19.3807 17.629 21.1515 18.9844 23.1943 19.7645C24.6119 20.3183 26.076 20.4845 27.6104 20.4457Z\"\n fill={color}\n />\n </svg>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n OakBox,\n OakCheckBox,\n OakFlex,\n OakHeading,\n OakLabel,\n OakLink,\n OakMaxWidth,\n OakP,\n} from \"@oaknational/oak-components\";\n\nimport { GoogleSignInButton, OakAcornIcon } from \"@/components\";\n\ntype Props = {\n getGoogleSignInLink: () => Promise<string | null>;\n onSuccessfulSignIn: (signUpToNewsletter: boolean) => Promise<void> | void;\n privacyPolicyUrl: string;\n};\nexport const GoogleSignInView = ({\n getGoogleSignInLink,\n onSuccessfulSignIn,\n privacyPolicyUrl,\n}: Props) => {\n const popupRef = React.useRef<Window | null>(null);\n const [isNewsletterChecked, setIsNewsletterChecked] = React.useState(false);\n\n const onSignInClick = async () => {\n const signInLink = await getGoogleSignInLink();\n if (!signInLink) throw new Error(\"Could not get Google Sign In link\");\n const validLinkRegex = new RegExp(/^(https):/);\n if (validLinkRegex.test(signInLink)) {\n popupRef.current = window.open(\n signInLink,\n \"popUpWindow\",\n \"height=500,width=500,left=100,top=100,resizable=no,\" +\n \"scrollbars=yes,toolbar=yes,menubar=no,location=yes,\" +\n \"directories=no,status=yes\",\n );\n } else {\n // todo: show error toast\n console.error(\"getGoogleSignInLink did not return a valid URL\");\n }\n };\n const handleAuthMessage = React.useCallback(\n (event: MessageEvent) => {\n if (\n event.data &&\n event.data.type === \"oak-google-classroom-auth-complete\"\n ) {\n if (popupRef.current) {\n popupRef.current.close();\n popupRef.current = null;\n }\n if (event.data.success && event.data.session) {\n window?.cookieStore?.set({\n name: \"oak-gclassroom-auth\",\n value: event.data.session,\n partitioned: true,\n sameSite: \"none\",\n path: \"/\",\n });\n onSuccessfulSignIn(isNewsletterChecked);\n }\n }\n },\n [onSuccessfulSignIn, isNewsletterChecked],\n );\n\n React.useEffect(() => {\n window.addEventListener(\"message\", handleAuthMessage);\n return () => {\n window.removeEventListener(\"message\", handleAuthMessage);\n };\n }, [handleAuthMessage]);\n\n return (\n <OakMaxWidth\n $pa={\"inner-padding-xl3\"}\n $maxWidth={\"all-spacing-21\"}\n $ma={\"auto\"}\n >\n <OakFlex $flexDirection=\"column\" $rowGap={\"space-between-m\"}>\n <OakAcornIcon />\n <OakHeading tag={\"h1\"} $font={\"heading-6\"}>\n Sign in to Oak National Academy\n </OakHeading>\n <OakP $font={\"body-2\"}>Welcome back! Please sign-in to continue</OakP>\n <GoogleSignInButton onClick={onSignInClick} />\n <OakFlex $columnGap={\"space-between-xs\"} $alignItems={\"flex-start\"}>\n <OakCheckBox\n id={\"google-sign-in-newsletter-checkbox\"}\n value=\"\"\n checked={isNewsletterChecked}\n onChange={(e) => setIsNewsletterChecked(e.target.checked)}\n />\n <OakBox>\n <OakLabel\n $font={\"body-2\"}\n htmlFor={\"google-sign-in-newsletter-checkbox\"}\n >\n Sign up to receive helpful content via email. Unsubscribe at any\n time. Read our{\" \"}\n </OakLabel>\n <OakLink\n href={privacyPolicyUrl}\n isTrailingIcon={true}\n iconName={\"external\"}\n target={\"_blank\"}\n >\n privacy policy\n </OakLink>\n .\n </OakBox>\n </OakFlex>\n </OakFlex>\n </OakMaxWidth>\n );\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","create","Iterator","verb","Symbol","iterator","v","op","TypeError","pop","push","__read","o","m","r","ar","error","SuppressedError","GoogleSignInButtonIcon","React","createElement","version","xmlns","viewBox","xmlnsXlink","style","display","width","height","fill","d","GoogleSignInButton","props","_a","useState","isHovered","setIsHovered","OakLink","element","textDecoration","onMouseEnter","onMouseLeave","OakFlex","$width","$gap","$justifyContent","$borderRadius","$borderColor","$background","OakSpan","$font","$color","$hoverColor","OakAcornIcon","_b","color","getGoogleSignInLink","onSuccessfulSignIn","privacyPolicyUrl","popupRef","useRef","isNewsletterChecked","setIsNewsletterChecked","handleAuthMessage","useCallback","event","data","type","current","close","success","session","window","cookieStore","set","name","partitioned","sameSite","path","useEffect","addEventListener","removeEventListener","OakMaxWidth","$pa","$maxWidth","$flexDirection","$rowGap","OakHeading","tag","OakP","onClick","signInLink","Error","RegExp","test","open","console","$columnGap","$alignItems","OakCheckBox","id","checked","onChange","target","OakBox","OakLabel","htmlFor","href","isTrailingIcon","iconName"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../src/components/GoogleSignInButton/GoogleSignInButtonIcon.tsx","../../../src/components/GoogleSignInButton/GoogleSignInButton.tsx","../../../src/components/OakAcornIcon/OakAcornIcon.tsx","../../../src/views/GoogleClassroomAuthSuccessView/GoogleClassroomAuthSuccessView.tsx","../../../src/views/GoogleClassroomBrowseView/GoogleClassroomBrowseView.tsx","../../../src/views/GoogleSignInView/GoogleSignInView.tsx","../../../src/views/WithGoogleClassroomAuth/WithGoogleClassroomAuth.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React from \"react\";\n\nexport const GoogleSignInButtonIcon = () => {\n return (\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 48 48\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n style={{ display: \"block\" }}\n width={19}\n height={19}\n >\n <path\n fill=\"#EA4335\"\n d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"\n />\n <path\n fill=\"#4285F4\"\n d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"\n />\n <path fill=\"none\" d=\"M0 0h48v48H0z\" />\n </svg>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { OakFlex, OakLink, OakSpan } from \"@oaknational/oak-components\";\n\nimport { GoogleSignInButtonIcon } from \"./GoogleSignInButtonIcon\";\n\ntype Props = {\n onClick?: () => void;\n};\nexport const GoogleSignInButton: React.FC<Props> = (props) => {\n const [isHovered, setIsHovered] = React.useState<boolean>(false);\n return (\n <OakLink\n {...props}\n element=\"button\"\n style={{\n textDecoration: \"none\",\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n aria-label={\"Sign in with Google\"}\n >\n <OakFlex\n $pa={\"inner-padding-m\"}\n $width={\"100%\"}\n $gap={\"space-between-xs\"}\n $alignItems={\"center\"}\n $justifyContent={\"center\"}\n $borderRadius={\"border-radius-s\"}\n $ba={\"border-solid-s\"}\n $borderColor={\"border-neutral\"}\n $background={isHovered && \"grey20\"}\n >\n <GoogleSignInButtonIcon />\n <OakSpan\n $font={\"body-2-bold\"}\n $color={\"text-primary\"}\n $hoverColor={\"text-primary\"}\n >\n Sign-in with Google\n </OakSpan>\n </OakFlex>\n </OakLink>\n );\n};\n","import React from \"react\";\n\ntype Props = {\n color?: string;\n};\nexport const OakAcornIcon: React.FC<Props> = ({ color = \"#222222\" }) => {\n return (\n <svg\n width=\"30\"\n height=\"40\"\n viewBox=\"0 0 30 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.432 6.8134C17.2641 6.9574 17.9812 7.04602 18.6836 7.20479C21.7484 7.8766 24.5021 9.54441 26.5115 11.9458C28.4836 14.2363 29.6739 17.092 29.9102 20.1005C29.9584 20.6543 29.9899 21.2082 29.9992 21.7621C30.0103 22.3621 29.9158 22.4673 29.345 22.5504C27.2042 22.8558 25.0222 22.6855 22.9552 22.0519C21.6282 21.65 20.3666 21.0586 19.2099 20.2962C17.7721 19.3386 16.5419 18.1031 15.5925 16.6629C14.5377 15.0887 13.8529 13.2977 13.5892 11.4234C13.4854 10.744 13.4687 10.0535 13.4039 9.28915C11.091 9.66233 8.93039 10.6771 7.16974 12.2172C4.60492 14.4327 3.11311 17.2481 2.57568 20.6322C3.09458 20.7356 3.57085 20.8463 4.05823 20.922C4.49003 20.9885 4.74391 21.1547 4.75874 21.6476C4.80258 23.232 5.09201 24.8001 5.61677 26.2963C6.14643 27.7501 6.78768 29.1611 7.53482 30.5167C8.61709 32.5413 10.1406 34.2988 11.9936 35.6602C12.9644 36.3603 14.0068 36.9562 15.1032 37.4381C15.4739 37.6006 16.0854 37.3384 16.5376 37.1501C18.6647 36.296 20.5308 34.9029 21.9508 33.1088C22.7588 32.0805 23.4 30.9044 24.0023 29.7376C24.7324 28.3216 25.0308 26.7616 25.2198 25.1886C25.2569 24.8803 25.3643 24.7548 25.6849 24.7843C26.0679 24.8221 26.4531 24.8332 26.8376 24.8175C27.2954 24.7935 27.49 25.0298 27.4307 25.4268C27.2453 26.6822 27.1341 27.9671 26.782 29.1782C25.998 31.8118 24.5512 34.202 22.579 36.1218C20.8099 37.9148 18.6124 39.2305 16.1929 39.9453C15.7055 40.0893 15.2978 39.9194 14.866 39.7773C12.1771 38.8948 9.96435 37.2941 8.09819 35.2172C7.21482 34.2352 6.4035 33.1913 5.67051 32.0934C4.80076 30.7727 4.09919 29.3495 3.58196 27.8564C3.01314 26.3167 2.6632 24.7054 2.54233 23.0692C2.52168 22.9981 2.48437 22.9328 2.43346 22.8789C2.38255 22.825 2.31951 22.7839 2.24952 22.759C1.67689 22.5744 1.09128 22.447 0.513084 22.2882C0.432981 22.2769 0.356021 22.2495 0.286881 22.2077C0.217741 22.1658 0.157865 22.1104 0.110891 22.0448C0.0639177 21.9792 0.0308281 21.9047 0.0136336 21.826C-0.00356099 21.7472 -0.00450137 21.6658 0.0108695 21.5867C0.159848 19.1412 0.87059 16.7625 2.08829 14.6339C3.11333 12.8409 4.48597 11.2689 6.12639 10.0092C7.92657 8.6205 10.0163 7.65149 12.2419 7.1734C12.3432 7.13614 12.4493 7.11314 12.557 7.10509C13.6374 7.20294 13.9153 6.50323 14.1841 5.64291C14.8392 3.56486 16.0754 1.71595 17.7477 0.312931C18.2314 -0.10431 18.2926 -0.10431 18.7244 0.312931C18.9764 0.560321 19.2192 0.818789 19.4545 1.08095C19.8048 1.47234 19.8048 1.64773 19.4082 2.00405C18.4924 2.85935 17.7341 3.86784 17.1677 4.98381C16.8914 5.58083 16.6459 6.19149 16.432 6.8134ZM27.6104 20.4457C27.5789 20.2796 27.5474 20.1485 27.5289 20.0156C27.2709 18.1548 26.6074 16.3728 25.5849 14.7945C24.3948 12.9165 22.7197 11.3919 20.7351 10.3802C19.3935 9.71621 17.939 9.30796 16.4468 9.17653C16.1836 9.14699 16.041 9.22084 16.0465 9.51992C16.1003 11.8387 16.7248 13.9859 18.098 15.8635C19.3807 17.629 21.1515 18.9844 23.1943 19.7645C24.6119 20.3183 26.076 20.4845 27.6104 20.4457Z\"\n fill={color}\n />\n </svg>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { OakHeading, OakP } from \"@oaknational/oak-components\";\n\ntype Props = {\n session: string;\n};\nexport const GoogleClassroomAuthSuccessView: React.FC<Props> = ({\n session,\n}) => {\n React.useEffect(() => {\n window?.opener?.postMessage(\n {\n type: \"oak-google-classroom-auth-complete\",\n success: true,\n session,\n },\n \"*\",\n );\n setTimeout(() => {\n window.close();\n }, 3000);\n }, [session]);\n return (\n <>\n <OakHeading tag=\"h1\">Authentication Successful</OakHeading>\n <OakP>This window will automatically close...</OakP>\n </>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { OakHeading, OakP } from \"@oaknational/oak-components\";\n\nexport const GoogleClassroomBrowseView = () => {\n return (\n <>\n <OakHeading tag=\"h1\">Browsing curriculum content</OakHeading>\n <OakP>This page is a work in progress...</OakP>\n </>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n OakBox,\n OakCheckBox,\n OakFlex,\n OakHeading,\n OakLabel,\n OakLink,\n OakMaxWidth,\n OakP,\n} from \"@oaknational/oak-components\";\n\nimport { GoogleSignInButton, OakAcornIcon } from \"@/components\";\n\ntype Props = {\n getGoogleSignInLink: () => Promise<string | null>;\n onSuccessfulSignIn: (signUpToNewsletter: boolean) => Promise<void> | void;\n privacyPolicyUrl: string;\n};\nexport const GoogleSignInView = ({\n getGoogleSignInLink,\n onSuccessfulSignIn,\n privacyPolicyUrl,\n}: Props) => {\n const popupRef = React.useRef<Window | null>(null);\n const [isNewsletterChecked, setIsNewsletterChecked] = React.useState(false);\n\n const onSignInClick = async () => {\n const signInLink = await getGoogleSignInLink();\n if (!signInLink) throw new Error(\"Could not get Google Sign In link\");\n const validLinkRegex = new RegExp(/^(https):/);\n if (validLinkRegex.test(signInLink)) {\n popupRef.current = window.open(\n signInLink,\n \"popUpWindow\",\n \"height=500,width=500,left=100,top=100,resizable=no,\" +\n \"scrollbars=yes,toolbar=yes,menubar=no,location=yes,\" +\n \"directories=no,status=yes\",\n );\n } else {\n // todo: show error toast\n console.error(\"getGoogleSignInLink did not return a valid URL\");\n }\n };\n const handleAuthMessage = React.useCallback(\n (event: MessageEvent) => {\n if (\n event.data &&\n event.data.type === \"oak-google-classroom-auth-complete\"\n ) {\n if (popupRef.current) {\n popupRef.current.close();\n popupRef.current = null;\n }\n if (event.data.success && event.data.session) {\n window?.cookieStore?.set({\n name: \"oak-gclassroom-auth\",\n value: event.data.session,\n partitioned: true,\n sameSite: \"none\",\n path: \"/\",\n });\n onSuccessfulSignIn(isNewsletterChecked);\n }\n }\n },\n [onSuccessfulSignIn, isNewsletterChecked],\n );\n\n React.useEffect(() => {\n window.addEventListener(\"message\", handleAuthMessage);\n return () => {\n window.removeEventListener(\"message\", handleAuthMessage);\n };\n }, [handleAuthMessage]);\n\n return (\n <OakMaxWidth\n $pa={\"inner-padding-xl3\"}\n $maxWidth={\"all-spacing-21\"}\n $ma={\"auto\"}\n >\n <OakFlex $flexDirection=\"column\" $rowGap={\"space-between-m\"}>\n <OakAcornIcon />\n <OakHeading tag={\"h1\"} $font={\"heading-6\"}>\n Sign in to Oak National Academy\n </OakHeading>\n <OakP $font={\"body-2\"}>Welcome back! Please sign-in to continue</OakP>\n <GoogleSignInButton onClick={onSignInClick} />\n <OakFlex $columnGap={\"space-between-xs\"} $alignItems={\"flex-start\"}>\n <OakCheckBox\n id={\"google-sign-in-newsletter-checkbox\"}\n value=\"\"\n checked={isNewsletterChecked}\n onChange={(e) => setIsNewsletterChecked(e.target.checked)}\n />\n <OakBox>\n <OakLabel\n $font={\"body-2\"}\n htmlFor={\"google-sign-in-newsletter-checkbox\"}\n >\n Sign up to receive helpful content via email. Unsubscribe at any\n time. Read our{\" \"}\n </OakLabel>\n <OakLink\n href={privacyPolicyUrl}\n isTrailingIcon={true}\n iconName={\"external\"}\n target={\"_blank\"}\n >\n privacy policy\n </OakLink>\n .\n </OakBox>\n </OakFlex>\n </OakFlex>\n </OakMaxWidth>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { useRouter, useSearchParams } from \"next/navigation\";\nimport { OakFlex, OakLoadingSpinner } from \"@oaknational/oak-components\";\n\ntype Props = {\n children: React.ReactNode;\n verifySessionAction: (session: string) => Promise<{ authenticated: boolean }>;\n signInUrl: string;\n};\nexport const WithGoogleClassroomAuth: React.FC<Props> = ({\n children,\n verifySessionAction,\n signInUrl,\n}) => {\n const router = useRouter();\n const searchParams = useSearchParams();\n const [hasCheckedAuth, setHasCheckedAuth] = React.useState(false);\n\n const checkAuthenticated = async () => {\n const redirectToSignIn = () => {\n const currentParams = searchParams?.toString() ?? \"\";\n router.push(`${signInUrl}?${currentParams}`);\n };\n const session = (await window.cookieStore.get(\"oak-gclassroom-auth\"))\n ?.value;\n if (!session) {\n redirectToSignIn();\n return;\n }\n const { authenticated } = await verifySessionAction(session);\n if (!authenticated) {\n redirectToSignIn();\n return;\n }\n setHasCheckedAuth(true);\n };\n\n React.useEffect(() => {\n setHasCheckedAuth(false);\n checkAuthenticated();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!hasCheckedAuth)\n return (\n <OakFlex $justifyContent={\"center\"} $alignItems={\"center\"}>\n <OakLoadingSpinner $width={\"all-spacing-15\"} $color={\"oakGreen\"} />\n </OakFlex>\n );\n return <>{children}</>;\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","create","Iterator","verb","Symbol","iterator","v","op","TypeError","pop","push","__read","o","m","r","ar","error","SuppressedError","GoogleSignInButtonIcon","React","createElement","version","xmlns","viewBox","xmlnsXlink","style","display","width","height","fill","d","GoogleSignInButton","props","_a","useState","isHovered","setIsHovered","OakLink","element","textDecoration","onMouseEnter","onMouseLeave","OakFlex","$width","$gap","$justifyContent","$borderRadius","$borderColor","$background","OakSpan","$font","$color","$hoverColor","OakAcornIcon","_b","color","session","useEffect","window","opener","postMessage","type","success","setTimeout","close","Fragment","OakHeading","tag","OakP","getGoogleSignInLink","onSuccessfulSignIn","privacyPolicyUrl","popupRef","useRef","isNewsletterChecked","setIsNewsletterChecked","handleAuthMessage","useCallback","event","data","current","cookieStore","set","name","partitioned","sameSite","path","addEventListener","removeEventListener","OakMaxWidth","$pa","$maxWidth","$flexDirection","$rowGap","onClick","signInLink","Error","RegExp","test","open","console","$columnGap","$alignItems","OakCheckBox","id","checked","onChange","target","OakBox","OakLabel","htmlFor","href","isTrailingIcon","iconName","children","verifySessionAction","signInUrl","router","useRouter","searchParams","useSearchParams","hasCheckedAuth","setHasCheckedAuth","redirectToSignIn","currentParams","toString","concat","get","authenticated","OakLoadingSpinner"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,2 +1,8 @@
1
- var n=function(){};export{n as OakGoogleClassroomAddOn};
1
+ import e from"crypto";import{OAuth2Client as t}from"google-auth-library";function r(e,t,r,n){return new(r||(r=Promise))(function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(s,a)}c((n=n.apply(e,t||[])).next())})}function n(e,t){var r,n,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},s=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return s.next=a(0),s.throw=a(1),s.return=a(2),"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(a){return function(c){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;s&&(s=0,a[0]&&(o=0)),o;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,n=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=[6,e],n=0}finally{r=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,c])}}}"function"==typeof SuppressedError&&SuppressedError;var i,o={};
2
+ /*!
3
+ * cookie
4
+ * Copyright(c) 2012-2014 Roman Shtylman
5
+ * Copyright(c) 2015 Douglas Christopher Wilson
6
+ * MIT Licensed
7
+ */!function(){if(i)return o;i=1,o.parse=function(e,r){if("string"!=typeof e)throw new TypeError("argument str must be a string");var n={},i=e.length;if(i<2)return n;var o=r&&r.decode||u,s=0,a=0,f=0;do{if(-1===(a=e.indexOf("=",s)))break;if(-1===(f=e.indexOf(";",s)))f=i;else if(a>f){s=e.lastIndexOf(";",a-1)+1;continue}var p=c(e,s,a),d=l(e,a,p),w=e.slice(p,d);if(!t.call(n,w)){var y=c(e,a+1,f),g=l(e,f,y);34===e.charCodeAt(y)&&34===e.charCodeAt(g-1)&&(y++,g--);var m=e.slice(y,g);n[w]=h(m,o)}s=f+1}while(s<i);return n},o.serialize=function(t,i,o){var c=o&&o.encode||encodeURIComponent;if("function"!=typeof c)throw new TypeError("option encode is invalid");if(!r.test(t))throw new TypeError("argument name is invalid");var l=c(i);if(!n.test(l))throw new TypeError("argument val is invalid");var u=t+"="+l;if(!o)return u;if(null!=o.maxAge){var h=Math.floor(o.maxAge);if(!isFinite(h))throw new TypeError("option maxAge is invalid");u+="; Max-Age="+h}if(o.domain){if(!s.test(o.domain))throw new TypeError("option domain is invalid");u+="; Domain="+o.domain}if(o.path){if(!a.test(o.path))throw new TypeError("option path is invalid");u+="; Path="+o.path}if(o.expires){var f=o.expires;if(!function(t){return"[object Date]"===e.call(t)}(f)||isNaN(f.valueOf()))throw new TypeError("option expires is invalid");u+="; Expires="+f.toUTCString()}o.httpOnly&&(u+="; HttpOnly");o.secure&&(u+="; Secure");o.partitioned&&(u+="; Partitioned");if(o.priority){switch("string"==typeof o.priority?o.priority.toLowerCase():o.priority){case"low":u+="; Priority=Low";break;case"medium":u+="; Priority=Medium";break;case"high":u+="; Priority=High";break;default:throw new TypeError("option priority is invalid")}}if(o.sameSite){switch("string"==typeof o.sameSite?o.sameSite.toLowerCase():o.sameSite){case!0:u+="; SameSite=Strict";break;case"lax":u+="; SameSite=Lax";break;case"strict":u+="; SameSite=Strict";break;case"none":u+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}}return u};var e=Object.prototype.toString,t=Object.prototype.hasOwnProperty,r=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,n=/^("?)[\u0021\u0023-\u002B\u002D-\u003A\u003C-\u005B\u005D-\u007E]*\1$/,s=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,a=/^[\u0020-\u003A\u003D-\u007E]*$/;function c(e,t,r){do{var n=e.charCodeAt(t);if(32!==n&&9!==n)return t}while(++t<r);return r}function l(e,t,r){for(;t>r;){var n=e.charCodeAt(--t);if(32!==n&&9!==n)return t+1}return r}function u(e){return-1!==e.indexOf("%")?decodeURIComponent(e):e}function h(e,t){try{return t(e)}catch(t){return e}}}();var s={},a=Array.from({length:64});for(let e=0,t="A".charCodeAt(0),r="Z".charCodeAt(0);e+t<=r;e++){const r=String.fromCharCode(e+t);s[r]=e,a[e]=r}for(let e=0,t="a".charCodeAt(0),r="z".charCodeAt(0);e+t<=r;e++){const r=String.fromCharCode(e+t),n=e+26;s[r]=n,a[n]=r}for(let e=0;e<10;e++){s[e.toString(10)]=e+52;const t=e.toString(10),r=e+52;s[t]=r,a[r]=t}s["-"]=62,a[62]="-",s._=63,a[63]="_";var c=e=>(new TextEncoder).encode(e),l=e=>{const t=e+"=".repeat((4-e.length%4)%4);let r=t.length/4*3;t.endsWith("==")?r-=2:t.endsWith("=")&&r--;const n=new ArrayBuffer(r),i=new DataView(n);for(let e=0;e<t.length;e+=4){let r=0,n=0;for(let i=e,o=e+3;i<=o;i++)if("="===t[i])r>>=6;else{if(!(t[i]in s))throw new TypeError(`Invalid character ${t[i]} in base64 string.`);r|=s[t[i]]<<6*(o-i),n+=6}const o=e/4*3;r>>=n%8;const a=Math.floor(n/8);for(let e=0;e<a;e++){const t=8*(a-e-1);i.setUint8(o+e,(r&255<<t)>>t)}}return new Uint8Array(n)},u=e=>{const t="string"==typeof e?c(e):e;let r="";for(let e=0;e<t.length;e+=3){let n=0,i=0;for(let r=e,o=Math.min(e+3,t.length);r<o;r++)n|=t[r]<<8*(o-r-1),i+=8;const o=Math.ceil(i/6);n<<=6*o-i;for(let e=1;e<=o;e++){const t=6*(o-e);r+=a[(n&63<<t)>>t]}}return r},h={encryption:{saltBits:256,algorithm:"aes-256-cbc",iterations:1,minPasswordlength:32},integrity:{saltBits:256,algorithm:"sha256",iterations:1,minPasswordlength:32},ttl:0,timestampSkewSec:60,localtimeOffsetMsec:0},f=e=>({...e,encryption:{...e.encryption},integrity:{...e.integrity}}),p={"aes-128-ctr":{keyBits:128,ivBits:128,name:"AES-CTR"},"aes-256-cbc":{keyBits:256,ivBits:128,name:"AES-CBC"},sha256:{keyBits:256,name:"SHA-256"}},d="Fe26.2",w=(e,t)=>{if(t<1)throw new Error("Invalid random bits count");return((e,t)=>{const r=new Uint8Array(t);return e.getRandomValues(r),r})(e,Math.ceil(t/8))},y=async(e,t,r)=>{var n;if(!(null==t?void 0:t.length))throw new Error("Empty password");if(null==r||"object"!=typeof r)throw new Error("Bad options");if(!(r.algorithm in p))throw new Error(`Unknown algorithm: ${r.algorithm}`);const i=p[r.algorithm],o={},s=null!=(n=r.hmac)&&n,a=s?{name:"HMAC",hash:i.name}:{name:i.name},l=s?["sign","verify"]:["encrypt","decrypt"];if("string"==typeof t){if(t.length<r.minPasswordlength)throw new Error(`Password string too short (min ${r.minPasswordlength} characters required)`);let{salt:n=""}=r;if(!n){const{saltBits:t=0}=r;if(!t)throw new Error("Missing salt and saltBits options");const i=w(e,t);n=[...new Uint8Array(i)].map(e=>e.toString(16).padStart(2,"0")).join("")}const s=await(async(e,t,r,n,i,o)=>{const s=c(t),a=await e.subtle.importKey("raw",s,{name:"PBKDF2"},!1,["deriveBits"]),l={name:"PBKDF2",hash:o,salt:c(r),iterations:n};return await e.subtle.deriveBits(l,a,8*i)})(e,t,n,r.iterations,i.keyBits/8,"SHA-1"),u=await e.subtle.importKey("raw",s,a,!1,l);o.key=u,o.salt=n}else{if(t.length<i.keyBits/8)throw new Error("Key buffer (password) too small");o.key=await e.subtle.importKey("raw",t,a,!1,l),o.salt=""}return r.iv?o.iv=r.iv:"ivBits"in i&&(o.iv=w(e,i.ivBits)),o},g=(e,t,r)=>["aes-128-ctr"===e?{name:"AES-CTR",counter:t.iv,length:128}:{name:"AES-CBC",iv:t.iv},t.key,"string"==typeof r?c(r):r],m=async(e,t,r,n)=>{const i=await y(e,t,r),o=await e.subtle.decrypt(...g(r.algorithm,i,n));return s=new Uint8Array(o),(new TextDecoder).decode(s);var s},v=async(e,t,r,n)=>{const i=await y(e,t,{...r,hmac:!0}),o=c(n),s=await e.subtle.sign({name:"HMAC"},i.key,o);return{digest:u(new Uint8Array(s)),salt:i.salt}},E=e=>"string"==typeof e||e instanceof Uint8Array?{encryption:e,integrity:e}:"secret"in e?{id:e.id,encryption:e.secret,integrity:e.secret}:{id:e.id,encryption:e.encryption,integrity:e.integrity},S=async(e,t,r,n)=>{if(!r)throw new Error("Empty password");const i=f(n),o=Date.now()+(i.localtimeOffsetMsec||0),s=JSON.stringify(t),a=E(r),{id:c="",encryption:l,integrity:h}=a;if(c&&!/^\w+$/.test(c))throw new Error("Invalid password id");const{encrypted:p,key:w}=await(async(e,t,r,n)=>{const i=await y(e,t,r),o=await e.subtle.encrypt(...g(r.algorithm,i,n));return{encrypted:new Uint8Array(o),key:i}})(e,l,i.encryption,s),m=u(new Uint8Array(p)),S=u(w.iv),C=i.ttl?o+i.ttl:"",b=`${d}*${c}*${w.salt}*${S}*${m}*${C}`,A=await v(e,h,i.integrity,b);return`${b}*${A.salt}*${A.digest}`};const C=globalThis.crypto,b=C.subtle,A=()=>C.randomUUID(),k=e=>C.getRandomValues(e),T={randomUUID:A,getRandomValues:k,subtle:b};var _=Object.freeze({__proto__:null,default:T,getRandomValues:k,randomUUID:A,subtle:b});function O(e){return"string"==typeof e?{1:e}:e}var U,I=function(e){return async function(t,{password:r,ttl:n=1209600}){const i=O(r),o=Math.max(...Object.keys(i).map(Number)),s={id:o.toString(),secret:i[o]};return`${await S(e,t,s,{...h,ttl:1e3*n})}~2`}}(_),x=function(e){return async function(t,{password:r,ttl:n=1209600}){const i=O(r),{sealWithoutVersion:o,tokenVersion:s}=function(e){const[t,r]=e.split("~");return{sealWithoutVersion:t,tokenVersion:null==r?null:parseInt(r,10)}}(t);try{const t=await(async(e,t,r,n)=>{if(!r)throw new Error("Empty password");const i=f(n),o=Date.now()+(i.localtimeOffsetMsec||0),s=t.split("*");if(8!==s.length)throw new Error("Incorrect number of sealed components");const a=s[0];let c=s[1];const u=s[2],h=s[3],p=s[4],w=s[5],y=s[6],g=s[7],S=`${a}*${c}*${u}*${h}*${p}*${w}`;if(d!==a)throw new Error("Wrong mac prefix");if(w){if(!/^\d+$/.test(w))throw new Error("Invalid expiration");if(Number.parseInt(w,10)<=o-1e3*i.timestampSkewSec)throw new Error("Expired seal")}let C="";if(c=c||"default","string"==typeof r||r instanceof Uint8Array)C=r;else{if(!(c in r))throw new Error(`Cannot find password: ${c}`);C=r[c]}C=E(C);const b=i.integrity;if(b.salt=y,!((e,t)=>{let r=e.length===t.length?0:1;r&&(t=e);for(let n=0;n<e.length;n+=1)r|=e.charCodeAt(n)^t.charCodeAt(n);return 0===r})((await v(e,C.integrity,b,S)).digest,g))throw new Error("Bad hmac value");const A=l(p),k=i.encryption;k.salt=u,k.iv=l(h);const T=await m(e,C.encryption,k,A);return T?JSON.parse(T):null})(e,o,i,{...h,ttl:1e3*n})??{};return 2===s?t:{...t.persistent}}catch(e){if(e instanceof Error&&/^(Expired seal|Bad hmac value|Cannot find password|Incorrect number of sealed components)/.test(e.message))return{};throw e}}}(_),N=function(){function t(e){this.encryptionSecret=e,this.ENCRYPTION_SECRET=e}return t.prototype.encryptString=function(r){var n=e.randomBytes(t.SALT_BYTES).toString("hex"),i=e.randomBytes(t.IV_LENGTH),o=e.scryptSync(this.ENCRYPTION_SECRET,n,t.ENCRYPTION_KEY_LENGTH),s=e.createCipheriv(t.ALGORITHM,o,i),a=s.update(r,"utf8","hex");return a+=s.final("hex"),"".concat(i.toString("hex"),":").concat(a,":").concat(n)},t.prototype.decryptString=function(r){var n=function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,o=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return s}(r.split(":"),3),i=n[0],o=n[1],s=n[2];if(!i||!o||!s)throw new Error("Invalid encrypted string");var a=Buffer.from(i,"hex"),c=e.scryptSync(this.ENCRYPTION_SECRET,s,t.ENCRYPTION_KEY_LENGTH),l=e.createDecipheriv(t.ALGORITHM,c,a),u=l.update(o,"hex","utf8");return u+=l.final("utf8")},t.ALGORITHM="aes-256-cbc",t.IV_LENGTH=16,t.SALT_BYTES=16,t.ENCRYPTION_KEY_LENGTH=32,t}();!function(e){e.CONNECTED_USERS_CREDENTIALS="connectedUsersCredentials"}(U||(U={}));var R=function(){function e(e){this.firestore=e,this._firestore=e}return e.prototype.getConnectedUserCredentials=function(e){return r(this,void 0,void 0,function(){var t;return n(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,this._firestore.collection(U.CONNECTED_USERS_CREDENTIALS).doc(e).get()];case 1:return[2,r.sent()];case 2:throw t=r.sent(),console.error(t),new Error("Failed to save users credentials");case 3:return[2]}})})},e.prototype.upsertConnectedUserCredentials=function(e){return r(this,void 0,void 0,function(){var t;return n(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),this._firestore.settings({ignoreUndefinedProperties:!0}),[4,this._firestore.collection(U.CONNECTED_USERS_CREDENTIALS).doc(e.loginHint).set(e)];case 1:return r.sent(),[3,3];case 2:throw t=r.sent(),console.error(t),new Error("Failed to upsert users credentials");case 3:return[2]}})})},e}(),B=function(){function e(e,i,o,s,a){var c=this;if(this.googleClientId=e,this.googleClientSecret=i,this.callbackUrl=o,this.accessToken=s,this.refreshToken=a,!e)throw new Error("Google Client ID is missing");if(!i)throw new Error("Google Client Secret is missing");if(!o)throw new Error("Google OAuth Callback URL is missing");var l=new t({clientId:e,clientSecret:i,redirectUri:o,forceRefreshOnFailure:!1});"true"===process.env.GOOGLE_CLASSROOM_DEV_MODE&&s&&(l.refreshHandler=function(){return r(c,void 0,void 0,function(){return n(this,function(e){return[2,{access_token:s,expiry_date:(new Date).getTime()+36e5}]})})}),(s||a)&&l.setCredentials({access_token:s,refresh_token:a}),this.client=l,this.clientId=e}return e.prototype.getAuthenticateUrl=function(e,t){void 0===t&&(t=!1);try{return this.client.generateAuthUrl({access_type:"offline",include_granted_scopes:!0,scope:["https://www.googleapis.com/auth/userinfo.profile","https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/classroom.courses.readonly","https://www.googleapis.com/auth/classroom.addons.student","https://www.googleapis.com/auth/classroom.addons.teacher"],loginHint:e,subscribeToNewsletter:t})}catch(e){return console.error(e),null}},e.prototype.exchangeCodeForTokens=function(e){return r(this,void 0,void 0,function(){var t,r,i,o;return n(this,function(n){switch(n.label){case 0:return n.trys.push([0,3,,4]),[4,this.client.getToken(e)];case 1:return t=n.sent().tokens,[4,this.client.verifyIdToken({idToken:t.id_token,audience:this.clientId})];case 2:if(r=n.sent(),i=r.getPayload(),!t.access_token)throw new Error("Access token is missing");if(!(null==i?void 0:i.sub))throw new Error("User sub is missing");return[2,{accessToken:t.access_token,loginHint:i.sub,refreshToken:t.refresh_token,profilePictureUrl:null==i?void 0:i.picture,email:i.email}];case 3:return o=n.sent(),console.error(o),[2,null];case 4:return[2]}})})},e.prototype.refreshAccessToken=function(e){return r(this,void 0,void 0,function(){var t,r;return n(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),this.client.setCredentials({refresh_token:e}),[4,this.client.getAccessToken()];case 1:if(!(t=n.sent()).token)throw new Error("Unable to refresh access token");return[2,t.token];case 2:return r=n.sent(),console.error(r),[2,null];case 3:return[2]}})})},e.prototype.isAuthenticated=function(e){return r(this,void 0,void 0,function(){var t,r;return n(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,this.client.getTokenInfo(e)];case 1:return t=n.sent(),t.expiry_date<Date.now()?[2,!0]:[2,!1];case 2:return r=n.sent(),console.error(r),[2,!1];case 3:return[2]}})})},e}(),P=function(){function e(e,t,r,n,i,o){this.encryptionSecret=e,this.firestore=t,this.googleOAuthClientId=r,this.googleOAuthClientSecret=n,this.googleOAuthCallbackApiRoute=i,this.sessionSecret=o,this.encryptionService=new N(e),this.firestoreClient=new R(t),this._googleOAuthClientId=r,this._googleOAuthClientSecret=n,this._googleOAuthCallbackApiRoute=i,this._sessionSecret=o}return e.prototype.getOAuthClient=function(e,t){return new B(this._googleOAuthClientId,this._googleOAuthClientSecret,this._googleOAuthCallbackApiRoute,e,t)},e.prototype.getGoogleSignInUrl=function(e){return r(this,arguments,void 0,function(e,t){var r,i;return void 0===t&&(t=!1),n(this,function(n){if(r=this.getOAuthClient(),!(i=r.getAuthenticateUrl(e,t)))throw new Error("Failed to get Google Authentication URL");return[2,i]})})},e.prototype.handleGoogleSignInCallback=function(e,t){return r(this,void 0,void 0,function(){var r,i,o,s;return n(this,function(n){switch(n.label){case 0:return[4,this.getOAuthClient().exchangeCodeForTokens(e)];case 1:if(!(r=n.sent()))throw new Error("Failed to authenticate Google sign-in");return i=r.refreshToken?this.encryptionService.encryptString(r.refreshToken):void 0,o=r.profilePictureUrl?this.encryptionService.encryptString(r.profilePictureUrl):void 0,[4,this.firestoreClient.upsertConnectedUserCredentials({refreshToken:i,profilePictureUrl:o,loginHint:r.loginHint})];case 2:return n.sent(),[4,I({loginHint:r.loginHint,accessToken:r.accessToken},{password:this._sessionSecret})];case 3:return s=n.sent(),t&&r.email?[4,t(r.email)]:[3,5];case 4:n.sent(),n.label=5;case 5:return[2,{encryptedSession:s,profilePictureUrl:r.profilePictureUrl}]}})})},e.prototype.verifyAuthSession=function(e){return r(this,void 0,void 0,function(){var t,r,i,o;return n(this,function(n){switch(n.label){case 0:return[4,x(e,{password:this._sessionSecret})];case 1:return(null==(t=n.sent())?void 0:t.accessToken)&&(null==t?void 0:t.loginHint)?[4,this.firestoreClient.getConnectedUserCredentials(t.loginHint)]:[2,null];case 2:return(r=n.sent())?[4,(i=this.getOAuthClient(t.accessToken,r.refreshToken)).isAuthenticated(t.accessToken)]:[2,null];case 3:return n.sent()?[2,e]:[4,i.refreshAccessToken(r.refreshToken)];case 4:return(o=n.sent())?[4,I({loginHint:t.loginHint,accessToken:o},{password:this._sessionSecret})]:[3,6];case 5:return[2,n.sent()];case 6:return[2,null]}})})},e}();export{P as OakGoogleClassroomAddOn};
2
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/OakGoogleClassroom.ts"],"sourcesContent":["export class OakGoogleClassroomAddOn {\n constructor() {}\n}\n"],"names":["OakGoogleClassroomAddOn"],"mappings":"AAAA,IAAAA,EACE,WAAe"}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../node_modules/cookie/index.js","../../../node_modules/iron-webcrypto/dist/index.js","../../../node_modules/uncrypto/dist/crypto.web.mjs","../../../node_modules/iron-session/dist/index.js","../../../src/services/FirestoreClient/FirestoreClient.ts","../../../src/services/Encryption/EncryptionService.ts","../../../src/services/GoogleOAuth/GoogleOAuthClient.ts","../../../src/services/OakGoogleClassroom.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\nvar __hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name = token\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n * \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n * \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n */\n\nvar cookieNameRegExp = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n * ; US-ASCII characters excluding CTLs,\n * ; whitespace DQUOTE, comma, semicolon,\n * ; and backslash\n */\n\nvar cookieValueRegExp = /^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/;\n\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value = <subdomain>\n * ; defined in [RFC1034], Section 3.5, as\n * ; enhanced by [RFC1123], Section 2.1\n * <subdomain> = <label> | <subdomain> \".\" <label>\n * <label> = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n * Labels must be 63 characters or less.\n * 'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str> = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp> = <let-dig> | \"-\"\n * <let-dig> = <letter> | <digit>\n * <letter> = any one of the 52 alphabetic characters A through Z in\n * upper case and a through z in lower case\n * <digit> = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\n\nvar domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value = <any CHAR except CTLs or \";\">\n * CHAR = %x01-7F\n * ; defined in RFC 5234 appendix B.1\n */\n\nvar pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [opt]\n * @return {object}\n * @public\n */\n\nfunction parse(str, opt) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {};\n var len = str.length;\n // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n if (len < 2) return obj;\n\n var dec = (opt && opt.decode) || decode;\n var index = 0;\n var eqIdx = 0;\n var endIdx = 0;\n\n do {\n eqIdx = str.indexOf('=', index);\n if (eqIdx === -1) break; // No more cookie pairs.\n\n endIdx = str.indexOf(';', index);\n\n if (endIdx === -1) {\n endIdx = len;\n } else if (eqIdx > endIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1;\n continue;\n }\n\n var keyStartIdx = startIndex(str, index, eqIdx);\n var keyEndIdx = endIndex(str, eqIdx, keyStartIdx);\n var key = str.slice(keyStartIdx, keyEndIdx);\n\n // only assign once\n if (!__hasOwnProperty.call(obj, key)) {\n var valStartIdx = startIndex(str, eqIdx + 1, endIdx);\n var valEndIdx = endIndex(str, endIdx, valStartIdx);\n\n if (str.charCodeAt(valStartIdx) === 0x22 /* \" */ && str.charCodeAt(valEndIdx - 1) === 0x22 /* \" */) {\n valStartIdx++;\n valEndIdx--;\n }\n\n var val = str.slice(valStartIdx, valEndIdx);\n obj[key] = tryDecode(val, dec);\n }\n\n index = endIdx + 1\n } while (index < len);\n\n return obj;\n}\n\nfunction startIndex(str, index, max) {\n do {\n var code = str.charCodeAt(index);\n if (code !== 0x20 /* */ && code !== 0x09 /* \\t */) return index;\n } while (++index < max);\n return max;\n}\n\nfunction endIndex(str, index, min) {\n while (index > min) {\n var code = str.charCodeAt(--index);\n if (code !== 0x20 /* */ && code !== 0x09 /* \\t */) return index + 1;\n }\n return min;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize a name value pair into a cookie string suitable for\n * http headers. An optional options object specifies cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [opt]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, opt) {\n var enc = (opt && opt.encode) || encodeURIComponent;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!cookieNameRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (!cookieValueRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n if (!opt) return str;\n\n if (null != opt.maxAge) {\n var maxAge = Math.floor(opt.maxAge);\n\n if (!isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + maxAge;\n }\n\n if (opt.domain) {\n if (!domainValueRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!pathValueRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n var expires = opt.expires\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString()\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.partitioned) {\n str += '; Partitioned'\n }\n\n if (opt.priority) {\n var priority = typeof opt.priority === 'string'\n ? opt.priority.toLowerCase() : opt.priority;\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low'\n break\n case 'medium':\n str += '; Priority=Medium'\n break\n case 'high':\n str += '; Priority=High'\n break\n default:\n throw new TypeError('option priority is invalid')\n }\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n return str.indexOf('%') !== -1\n ? decodeURIComponent(str)\n : str\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n return __toString.call(val) === '[object Date]';\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n","// src/utils.ts\nvar alphabetByEncoding = {};\nvar alphabetByValue = Array.from({ length: 64 });\nfor (let i = 0, start = \"A\".charCodeAt(0), limit = \"Z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n alphabetByEncoding[char] = i;\n alphabetByValue[i] = char;\n}\nfor (let i = 0, start = \"a\".charCodeAt(0), limit = \"z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n const index = i + 26;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nfor (let i = 0; i < 10; i++) {\n alphabetByEncoding[i.toString(10)] = i + 52;\n const char = i.toString(10);\n const index = i + 52;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nalphabetByEncoding[\"-\"] = 62;\nalphabetByValue[62] = \"-\";\nalphabetByEncoding[\"_\"] = 63;\nalphabetByValue[63] = \"_\";\nvar bitsPerLetter = 6;\nvar bitsPerByte = 8;\nvar maxLetterValue = 63;\nvar stringToBuffer = (value) => {\n return new TextEncoder().encode(value);\n};\nvar bufferToString = (value) => {\n return new TextDecoder().decode(value);\n};\nvar base64urlDecode = (_input) => {\n const input = _input + \"=\".repeat((4 - _input.length % 4) % 4);\n let totalByteLength = input.length / 4 * 3;\n if (input.endsWith(\"==\")) {\n totalByteLength -= 2;\n } else if (input.endsWith(\"=\")) {\n totalByteLength--;\n }\n const out = new ArrayBuffer(totalByteLength);\n const dataView = new DataView(out);\n for (let i = 0; i < input.length; i += 4) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = i + 3; j <= limit; j++) {\n if (input[j] === \"=\") {\n bits >>= bitsPerLetter;\n } else {\n if (!(input[j] in alphabetByEncoding)) {\n throw new TypeError(`Invalid character ${input[j]} in base64 string.`);\n }\n bits |= alphabetByEncoding[input[j]] << (limit - j) * bitsPerLetter;\n bitLength += bitsPerLetter;\n }\n }\n const chunkOffset = i / 4 * 3;\n bits >>= bitLength % bitsPerByte;\n const byteLength = Math.floor(bitLength / bitsPerByte);\n for (let k = 0; k < byteLength; k++) {\n const offset = (byteLength - k - 1) * bitsPerByte;\n dataView.setUint8(chunkOffset + k, (bits & 255 << offset) >> offset);\n }\n }\n return new Uint8Array(out);\n};\nvar base64urlEncode = (_input) => {\n const input = typeof _input === \"string\" ? stringToBuffer(_input) : _input;\n let str = \"\";\n for (let i = 0; i < input.length; i += 3) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = Math.min(i + 3, input.length); j < limit; j++) {\n bits |= input[j] << (limit - j - 1) * bitsPerByte;\n bitLength += bitsPerByte;\n }\n const bitClusterCount = Math.ceil(bitLength / bitsPerLetter);\n bits <<= bitClusterCount * bitsPerLetter - bitLength;\n for (let k = 1; k <= bitClusterCount; k++) {\n const offset = (bitClusterCount - k) * bitsPerLetter;\n str += alphabetByValue[(bits & maxLetterValue << offset) >> offset];\n }\n }\n return str;\n};\n\n// src/index.ts\nvar defaults = {\n encryption: { saltBits: 256, algorithm: \"aes-256-cbc\", iterations: 1, minPasswordlength: 32 },\n integrity: { saltBits: 256, algorithm: \"sha256\", iterations: 1, minPasswordlength: 32 },\n ttl: 0,\n timestampSkewSec: 60,\n localtimeOffsetMsec: 0\n};\nvar clone = (options) => ({\n ...options,\n encryption: { ...options.encryption },\n integrity: { ...options.integrity }\n});\nvar algorithms = {\n \"aes-128-ctr\": { keyBits: 128, ivBits: 128, name: \"AES-CTR\" },\n \"aes-256-cbc\": { keyBits: 256, ivBits: 128, name: \"AES-CBC\" },\n sha256: { keyBits: 256, name: \"SHA-256\" }\n};\nvar macFormatVersion = \"2\";\nvar macPrefix = \"Fe26.2\";\nvar randomBytes = (_crypto, size) => {\n const bytes = new Uint8Array(size);\n _crypto.getRandomValues(bytes);\n return bytes;\n};\nvar randomBits = (_crypto, bits) => {\n if (bits < 1)\n throw new Error(\"Invalid random bits count\");\n const bytes = Math.ceil(bits / 8);\n return randomBytes(_crypto, bytes);\n};\nvar pbkdf2 = async (_crypto, password, salt, iterations, keyLength, hash) => {\n const passwordBuffer = stringToBuffer(password);\n const importedKey = await _crypto.subtle.importKey(\n \"raw\",\n passwordBuffer,\n { name: \"PBKDF2\" },\n false,\n [\"deriveBits\"]\n );\n const saltBuffer = stringToBuffer(salt);\n const params = { name: \"PBKDF2\", hash, salt: saltBuffer, iterations };\n const derivation = await _crypto.subtle.deriveBits(params, importedKey, keyLength * 8);\n return derivation;\n};\nvar generateKey = async (_crypto, password, options) => {\n var _a;\n if (!(password == null ? void 0 : password.length))\n throw new Error(\"Empty password\");\n if (options == null || typeof options !== \"object\")\n throw new Error(\"Bad options\");\n if (!(options.algorithm in algorithms))\n throw new Error(`Unknown algorithm: ${options.algorithm}`);\n const algorithm = algorithms[options.algorithm];\n const result = {};\n const hmac = (_a = options.hmac) != null ? _a : false;\n const id = hmac ? { name: \"HMAC\", hash: algorithm.name } : { name: algorithm.name };\n const usage = hmac ? [\"sign\", \"verify\"] : [\"encrypt\", \"decrypt\"];\n if (typeof password === \"string\") {\n if (password.length < options.minPasswordlength)\n throw new Error(\n `Password string too short (min ${options.minPasswordlength} characters required)`\n );\n let { salt = \"\" } = options;\n if (!salt) {\n const { saltBits = 0 } = options;\n if (!saltBits)\n throw new Error(\"Missing salt and saltBits options\");\n const randomSalt = randomBits(_crypto, saltBits);\n salt = [...new Uint8Array(randomSalt)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n }\n const derivedKey = await pbkdf2(\n _crypto,\n password,\n salt,\n options.iterations,\n algorithm.keyBits / 8,\n \"SHA-1\"\n );\n const importedEncryptionKey = await _crypto.subtle.importKey(\n \"raw\",\n derivedKey,\n id,\n false,\n usage\n );\n result.key = importedEncryptionKey;\n result.salt = salt;\n } else {\n if (password.length < algorithm.keyBits / 8)\n throw new Error(\"Key buffer (password) too small\");\n result.key = await _crypto.subtle.importKey(\"raw\", password, id, false, usage);\n result.salt = \"\";\n }\n if (options.iv)\n result.iv = options.iv;\n else if (\"ivBits\" in algorithm)\n result.iv = randomBits(_crypto, algorithm.ivBits);\n return result;\n};\nvar getEncryptParams = (algorithm, key, data) => {\n return [\n algorithm === \"aes-128-ctr\" ? { name: \"AES-CTR\", counter: key.iv, length: 128 } : { name: \"AES-CBC\", iv: key.iv },\n key.key,\n typeof data === \"string\" ? stringToBuffer(data) : data\n ];\n};\nvar encrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const encrypted = await _crypto.subtle.encrypt(...getEncryptParams(options.algorithm, key, data));\n return { encrypted: new Uint8Array(encrypted), key };\n};\nvar decrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const decrypted = await _crypto.subtle.decrypt(...getEncryptParams(options.algorithm, key, data));\n return bufferToString(new Uint8Array(decrypted));\n};\nvar hmacWithPassword = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, { ...options, hmac: true });\n const textBuffer = stringToBuffer(data);\n const signed = await _crypto.subtle.sign({ name: \"HMAC\" }, key.key, textBuffer);\n const digest = base64urlEncode(new Uint8Array(signed));\n return { digest, salt: key.salt };\n};\nvar normalizePassword = (password) => {\n if (typeof password === \"string\" || password instanceof Uint8Array)\n return { encryption: password, integrity: password };\n if (\"secret\" in password)\n return { id: password.id, encryption: password.secret, integrity: password.secret };\n return { id: password.id, encryption: password.encryption, integrity: password.integrity };\n};\nvar seal = async (_crypto, object, password, options) => {\n if (!password)\n throw new Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const objectString = JSON.stringify(object);\n const pass = normalizePassword(password);\n const { id = \"\", encryption, integrity } = pass;\n if (id && !/^\\w+$/.test(id))\n throw new Error(\"Invalid password id\");\n const { encrypted, key } = await encrypt(_crypto, encryption, opts.encryption, objectString);\n const encryptedB64 = base64urlEncode(new Uint8Array(encrypted));\n const iv = base64urlEncode(key.iv);\n const expiration = opts.ttl ? now + opts.ttl : \"\";\n const macBaseString = `${macPrefix}*${id}*${key.salt}*${iv}*${encryptedB64}*${expiration}`;\n const mac = await hmacWithPassword(_crypto, integrity, opts.integrity, macBaseString);\n const sealed = `${macBaseString}*${mac.salt}*${mac.digest}`;\n return sealed;\n};\nvar fixedTimeComparison = (a, b) => {\n let mismatch = a.length === b.length ? 0 : 1;\n if (mismatch)\n b = a;\n for (let i = 0; i < a.length; i += 1)\n mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return mismatch === 0;\n};\nvar unseal = async (_crypto, sealed, password, options) => {\n if (!password)\n throw new Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const parts = sealed.split(\"*\");\n if (parts.length !== 8)\n throw new Error(\"Incorrect number of sealed components\");\n const prefix = parts[0];\n let passwordId = parts[1];\n const encryptionSalt = parts[2];\n const encryptionIv = parts[3];\n const encryptedB64 = parts[4];\n const expiration = parts[5];\n const hmacSalt = parts[6];\n const hmac = parts[7];\n const macBaseString = `${prefix}*${passwordId}*${encryptionSalt}*${encryptionIv}*${encryptedB64}*${expiration}`;\n if (macPrefix !== prefix)\n throw new Error(\"Wrong mac prefix\");\n if (expiration) {\n if (!/^\\d+$/.test(expiration))\n throw new Error(\"Invalid expiration\");\n const exp = Number.parseInt(expiration, 10);\n if (exp <= now - opts.timestampSkewSec * 1e3)\n throw new Error(\"Expired seal\");\n }\n let pass = \"\";\n passwordId = passwordId || \"default\";\n if (typeof password === \"string\" || password instanceof Uint8Array)\n pass = password;\n else if (passwordId in password) {\n pass = password[passwordId];\n } else {\n throw new Error(`Cannot find password: ${passwordId}`);\n }\n pass = normalizePassword(pass);\n const macOptions = opts.integrity;\n macOptions.salt = hmacSalt;\n const mac = await hmacWithPassword(_crypto, pass.integrity, macOptions, macBaseString);\n if (!fixedTimeComparison(mac.digest, hmac))\n throw new Error(\"Bad hmac value\");\n const encrypted = base64urlDecode(encryptedB64);\n const decryptOptions = opts.encryption;\n decryptOptions.salt = encryptionSalt;\n decryptOptions.iv = base64urlDecode(encryptionIv);\n const decrypted = await decrypt(_crypto, pass.encryption, decryptOptions, encrypted);\n if (decrypted)\n return JSON.parse(decrypted);\n return null;\n};\n\nexport { algorithms, base64urlDecode, base64urlEncode, bufferToString, clone, decrypt, defaults, encrypt, generateKey, hmacWithPassword, macFormatVersion, macPrefix, randomBits, seal, stringToBuffer, unseal };\n","const webCrypto = globalThis.crypto;\nconst subtle = webCrypto.subtle;\nconst randomUUID = () => {\n return webCrypto.randomUUID();\n};\nconst getRandomValues = (array) => {\n return webCrypto.getRandomValues(array);\n};\nconst _crypto = {\n randomUUID,\n getRandomValues,\n subtle\n};\n\nexport { _crypto as default, getRandomValues, randomUUID, subtle };\n","import { serialize, parse } from 'cookie';\nimport { seal, defaults, unseal } from 'iron-webcrypto';\nimport * as crypto from 'uncrypto';\n\n// src/core.ts\nvar timestampSkewSec = 60;\nvar fourteenDaysInSeconds = 14 * 24 * 3600;\nvar currentMajorVersion = 2;\nvar versionDelimiter = \"~\";\nvar defaultOptions = {\n ttl: fourteenDaysInSeconds,\n cookieOptions: { httpOnly: true, secure: true, sameSite: \"lax\", path: \"/\" }\n};\nfunction normalizeStringPasswordToMap(password) {\n return typeof password === \"string\" ? { 1: password } : password;\n}\nfunction parseSeal(seal) {\n const [sealWithoutVersion, tokenVersionAsString] = seal.split(versionDelimiter);\n const tokenVersion = tokenVersionAsString == null ? null : parseInt(tokenVersionAsString, 10);\n return { sealWithoutVersion, tokenVersion };\n}\nfunction computeCookieMaxAge(ttl) {\n if (ttl === 0) {\n return 2147483647;\n }\n return ttl - timestampSkewSec;\n}\nfunction getCookie(req, cookieName) {\n return parse(\n (\"headers\" in req && typeof req.headers.get === \"function\" ? req.headers.get(\"cookie\") : req.headers.cookie) ?? \"\"\n )[cookieName] ?? \"\";\n}\nfunction getServerActionCookie(cookieName, cookieHandler) {\n const cookieObject = cookieHandler.get(cookieName);\n const cookie = cookieObject?.value;\n if (typeof cookie === \"string\") {\n return cookie;\n }\n return \"\";\n}\nfunction setCookie(res, cookieValue) {\n if (\"headers\" in res && typeof res.headers.append === \"function\") {\n res.headers.append(\"set-cookie\", cookieValue);\n return;\n }\n let existingSetCookie = res.getHeader(\"set-cookie\") ?? [];\n if (!Array.isArray(existingSetCookie)) {\n existingSetCookie = [existingSetCookie.toString()];\n }\n res.setHeader(\"set-cookie\", [\n ...existingSetCookie,\n cookieValue\n ]);\n}\nfunction createSealData(_crypto) {\n return async function sealData2(data, {\n password,\n ttl = fourteenDaysInSeconds\n }) {\n const passwordsMap = normalizeStringPasswordToMap(password);\n const mostRecentPasswordId = Math.max(\n ...Object.keys(passwordsMap).map(Number)\n );\n const passwordForSeal = {\n id: mostRecentPasswordId.toString(),\n secret: passwordsMap[mostRecentPasswordId]\n };\n const seal$1 = await seal(_crypto, data, passwordForSeal, {\n ...defaults,\n ttl: ttl * 1e3\n });\n return `${seal$1}${versionDelimiter}${currentMajorVersion}`;\n };\n}\nfunction createUnsealData(_crypto) {\n return async function unsealData2(seal, {\n password,\n ttl = fourteenDaysInSeconds\n }) {\n const passwordsMap = normalizeStringPasswordToMap(password);\n const { sealWithoutVersion, tokenVersion } = parseSeal(seal);\n try {\n const data = await unseal(_crypto, sealWithoutVersion, passwordsMap, {\n ...defaults,\n ttl: ttl * 1e3\n }) ?? {};\n if (tokenVersion === 2) {\n return data;\n }\n return { ...data.persistent };\n } catch (error) {\n if (error instanceof Error && /^(Expired seal|Bad hmac value|Cannot find password|Incorrect number of sealed components)/.test(\n error.message\n )) {\n return {};\n }\n throw error;\n }\n };\n}\nfunction getSessionConfig(sessionOptions) {\n const options = {\n ...defaultOptions,\n ...sessionOptions,\n cookieOptions: {\n ...defaultOptions.cookieOptions,\n ...sessionOptions.cookieOptions || {}\n }\n };\n if (sessionOptions.cookieOptions && \"maxAge\" in sessionOptions.cookieOptions) {\n if (sessionOptions.cookieOptions.maxAge === void 0) {\n options.ttl = 0;\n }\n } else {\n options.cookieOptions.maxAge = computeCookieMaxAge(options.ttl);\n }\n return options;\n}\nvar badUsageMessage = \"iron-session: Bad usage: use getIronSession(req, res, options) or getIronSession(cookieStore, options).\";\nfunction createGetIronSession(sealData2, unsealData2) {\n return getIronSession2;\n async function getIronSession2(reqOrCookieStore, resOrsessionOptions, sessionOptions) {\n if (!reqOrCookieStore) {\n throw new Error(badUsageMessage);\n }\n if (!resOrsessionOptions) {\n throw new Error(badUsageMessage);\n }\n if (!sessionOptions) {\n return getIronSessionFromCookieStore(\n reqOrCookieStore,\n resOrsessionOptions,\n sealData2,\n unsealData2\n );\n }\n const req = reqOrCookieStore;\n const res = resOrsessionOptions;\n if (!sessionOptions) {\n throw new Error(badUsageMessage);\n }\n if (!sessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n if (!sessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n const passwordsMap = normalizeStringPasswordToMap(sessionOptions.password);\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\"\n );\n }\n let sessionConfig = getSessionConfig(sessionOptions);\n const sealFromCookies = getCookie(req, sessionConfig.cookieName);\n const session = sealFromCookies ? await unsealData2(sealFromCookies, {\n password: passwordsMap,\n ttl: sessionConfig.ttl\n }) : {};\n Object.defineProperties(session, {\n updateConfig: {\n value: function updateConfig(newSessionOptions) {\n sessionConfig = getSessionConfig(newSessionOptions);\n }\n },\n save: {\n value: async function save() {\n if (\"headersSent\" in res && res.headersSent) {\n throw new Error(\n \"iron-session: Cannot set session cookie: session.save() was called after headers were sent. Make sure to call it before any res.send() or res.end()\"\n );\n }\n const seal = await sealData2(session, {\n password: passwordsMap,\n ttl: sessionConfig.ttl\n });\n const cookieValue = serialize(\n sessionConfig.cookieName,\n seal,\n sessionConfig.cookieOptions\n );\n if (cookieValue.length > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieValue.length} bytes), browsers will refuse it. Try to remove some data.`\n );\n }\n setCookie(res, cookieValue);\n }\n },\n destroy: {\n value: function destroy() {\n Object.keys(session).forEach((key) => {\n delete session[key];\n });\n const cookieValue = serialize(sessionConfig.cookieName, \"\", {\n ...sessionConfig.cookieOptions,\n maxAge: 0\n });\n setCookie(res, cookieValue);\n }\n }\n });\n return session;\n }\n}\nasync function getIronSessionFromCookieStore(cookieStore, sessionOptions, sealData2, unsealData2) {\n if (!sessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n if (!sessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n const passwordsMap = normalizeStringPasswordToMap(sessionOptions.password);\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\"\n );\n }\n let sessionConfig = getSessionConfig(sessionOptions);\n const sealFromCookies = getServerActionCookie(\n sessionConfig.cookieName,\n cookieStore\n );\n const session = sealFromCookies ? await unsealData2(sealFromCookies, {\n password: passwordsMap,\n ttl: sessionConfig.ttl\n }) : {};\n Object.defineProperties(session, {\n updateConfig: {\n value: function updateConfig(newSessionOptions) {\n sessionConfig = getSessionConfig(newSessionOptions);\n }\n },\n save: {\n value: async function save() {\n const seal = await sealData2(session, {\n password: passwordsMap,\n ttl: sessionConfig.ttl\n });\n const cookieLength = sessionConfig.cookieName.length + seal.length + JSON.stringify(sessionConfig.cookieOptions).length;\n if (cookieLength > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieLength} bytes), browsers will refuse it. Try to remove some data.`\n );\n }\n cookieStore.set(\n sessionConfig.cookieName,\n seal,\n sessionConfig.cookieOptions\n );\n }\n },\n destroy: {\n value: function destroy() {\n Object.keys(session).forEach((key) => {\n delete session[key];\n });\n const cookieOptions = { ...sessionConfig.cookieOptions, maxAge: 0 };\n cookieStore.set(sessionConfig.cookieName, \"\", cookieOptions);\n }\n }\n });\n return session;\n}\nvar sealData = createSealData(crypto);\nvar unsealData = createUnsealData(crypto);\nvar getIronSession = createGetIronSession(sealData, unsealData);\n\nexport { getIronSession, sealData, unsealData };\n//# sourceMappingURL=index.js.map\n//# sourceMappingURL=index.js.map","import type { Firestore } from \"@google-cloud/firestore\";\n\nexport type UserCredentialsEntity = {\n loginHint: string;\n refreshToken: string;\n profilePictureUrl?: string;\n};\n\nenum FirestoreCollections {\n CONNECTED_USERS_CREDENTIALS = \"connectedUsersCredentials\",\n}\n\nexport class FirestoreClient {\n private _firestore: Firestore;\n\n constructor(private readonly firestore: Firestore) {\n this._firestore = firestore;\n }\n\n public async getConnectedUserCredentials(\n loginHint: string,\n ): Promise<UserCredentialsEntity | null> {\n try {\n const doc = await this._firestore\n .collection(FirestoreCollections.CONNECTED_USERS_CREDENTIALS)\n .doc(loginHint)\n .get();\n // todo: zod schema validation\n return doc as unknown as UserCredentialsEntity; // can remove cast with zod\n } catch (error) {\n console.error(error);\n throw new Error(\"Failed to save users credentials\");\n }\n }\n\n public async upsertConnectedUserCredentials(\n credentials: Omit<UserCredentialsEntity, \"refreshToken\"> & {\n refreshToken?: string;\n },\n ): Promise<void> {\n try {\n // todo: zod schema validation\n this._firestore.settings({ ignoreUndefinedProperties: true });\n await this._firestore\n .collection(FirestoreCollections.CONNECTED_USERS_CREDENTIALS)\n .doc(credentials.loginHint)\n .set(credentials);\n } catch (error) {\n console.error(error);\n throw new Error(\"Failed to upsert users credentials\");\n }\n }\n}\n","import crypto from \"crypto\";\n\nexport class EncryptionService {\n private static ALGORITHM = \"aes-256-cbc\";\n private static IV_LENGTH = 16; // For AES, this is always 16\n private static SALT_BYTES = 16;\n private static ENCRYPTION_KEY_LENGTH = 32;\n private ENCRYPTION_SECRET: string;\n\n constructor(private readonly encryptionSecret: string) {\n this.ENCRYPTION_SECRET = encryptionSecret;\n }\n\n public encryptString(value: string): string {\n const salt = crypto\n .randomBytes(EncryptionService.SALT_BYTES)\n .toString(\"hex\");\n const iv = crypto.randomBytes(EncryptionService.IV_LENGTH);\n const encryptionKey = crypto.scryptSync(\n this.ENCRYPTION_SECRET,\n salt,\n EncryptionService.ENCRYPTION_KEY_LENGTH,\n );\n const cipher = crypto.createCipheriv(\n EncryptionService.ALGORITHM,\n encryptionKey,\n iv,\n );\n let encrypted = cipher.update(value, \"utf8\", \"hex\");\n encrypted += cipher.final(\"hex\");\n return `${iv.toString(\"hex\")}:${encrypted}:${salt}`;\n }\n\n public decryptString(value: string): string {\n const [ivHex, encryptedText, salt] = value.split(\":\");\n if (!ivHex || !encryptedText || !salt)\n throw new Error(`Invalid encrypted string`);\n\n const iv = Buffer.from(ivHex, \"hex\");\n const encryptionKey = crypto.scryptSync(\n this.ENCRYPTION_SECRET,\n salt,\n EncryptionService.ENCRYPTION_KEY_LENGTH,\n );\n\n const decipher = crypto.createDecipheriv(\n EncryptionService.ALGORITHM,\n encryptionKey,\n iv,\n );\n\n let decrypted = decipher.update(encryptedText, \"hex\", \"utf8\");\n decrypted += decipher.final(\"utf8\");\n\n return decrypted;\n }\n}\n","import { LoginTicket, OAuth2Client, TokenPayload } from \"google-auth-library\";\nimport { AccessTokenResponse } from \"google-auth-library/build/src/auth/oauth2client\";\n\nexport type GoogleOAuthUser = {\n accessToken: string;\n loginHint: string;\n refreshToken?: string;\n profilePictureUrl?: string;\n email?: string;\n};\n\nexport class GoogleOAuthClient {\n private client: OAuth2Client;\n private clientId: string;\n\n constructor(\n private readonly googleClientId: string,\n private readonly googleClientSecret: string,\n private readonly callbackUrl: string,\n private readonly accessToken?: string,\n private readonly refreshToken?: string,\n ) {\n if (!googleClientId) throw new Error(\"Google Client ID is missing\");\n if (!googleClientSecret) throw new Error(\"Google Client Secret is missing\");\n if (!callbackUrl) throw new Error(\"Google OAuth Callback URL is missing\");\n const client = new OAuth2Client({\n clientId: googleClientId,\n clientSecret: googleClientSecret,\n redirectUri: callbackUrl,\n forceRefreshOnFailure: false,\n });\n\n if (process.env.GOOGLE_CLASSROOM_DEV_MODE === \"true\" && accessToken) {\n client.refreshHandler = async (): Promise<AccessTokenResponse> => ({\n access_token: accessToken,\n expiry_date: new Date().getTime() + 1000 * 60 * 60, // now + 1 hour,\n });\n }\n\n if (accessToken || refreshToken)\n client.setCredentials({\n access_token: accessToken,\n refresh_token: refreshToken,\n });\n this.client = client;\n this.clientId = googleClientId;\n }\n\n /**\n * Returns the URL that the user should be redirected to in order to connect their Google account\n */\n public getAuthenticateUrl(\n loginHint?: string,\n subscribeToNewsletter: boolean = false,\n ): string | null {\n try {\n const scope: string[] = [\n \"https://www.googleapis.com/auth/userinfo.profile\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n \"https://www.googleapis.com/auth/classroom.courses.readonly\",\n \"https://www.googleapis.com/auth/classroom.addons.student\",\n \"https://www.googleapis.com/auth/classroom.addons.teacher\",\n ];\n\n return this.client.generateAuthUrl({\n access_type: \"offline\",\n include_granted_scopes: true,\n scope,\n loginHint,\n subscribeToNewsletter,\n });\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n /**\n * Returns user info and auth tokens by exchanging a Google OAuth\n * @param code - Code supplied by Google from OAuth callback redirection\n */\n public async exchangeCodeForTokens(\n code: string,\n ): Promise<GoogleOAuthUser | null> {\n try {\n const { tokens } = await this.client.getToken(code);\n\n // Verify the tokens we received.\n const ticket: LoginTicket = await this.client.verifyIdToken({\n idToken: tokens.id_token!,\n audience: this.clientId,\n });\n\n // After verifying the token, we can access the payload.\n const info: TokenPayload | undefined = ticket.getPayload();\n\n // todo: use zod\n if (!tokens.access_token) throw new Error(\"Access token is missing\");\n if (!info?.sub) throw new Error(\"User sub is missing\");\n\n return {\n accessToken: tokens.access_token,\n loginHint: info.sub,\n refreshToken: tokens.refresh_token!, // only received if first time signing in\n profilePictureUrl: info?.picture,\n email: info.email,\n };\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n /**\n * Attempts to generate a new access token from a supplied refresh token and returns it\n * @param refreshToken - A Google OAuth 2.0 refresh token\n */\n public async refreshAccessToken(\n refreshToken: string,\n ): Promise<string | null> {\n try {\n this.client.setCredentials({ refresh_token: refreshToken });\n const accessToken = await this.client.getAccessToken();\n // todo: use zod\n if (!accessToken.token) throw new Error(\"Unable to refresh access token\");\n return accessToken.token;\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n /**\n * Checks if the access token attached to the auth client exists and has not expired.\n * (The access token being tested is optionally supplied when the GoogleOAuthClient is constructed)\n */\n public async isAuthenticated(accessToken: string): Promise<boolean> {\n try {\n const tokenInfo = await this.client.getTokenInfo(accessToken);\n const tokenHasExpired = tokenInfo.expiry_date < Date.now();\n if (!tokenHasExpired) return false;\n\n return true;\n } catch (error) {\n console.error(error);\n return false;\n }\n }\n}\n","import type { Firestore } from \"@google-cloud/firestore\";\nimport { sealData, unsealData } from \"iron-session\";\n\nimport { EncryptionService } from \"@/services/Encryption\";\nimport { FirestoreClient } from \"@/services/FirestoreClient\";\nimport { GoogleOAuthClient } from \"@/services/GoogleOAuth\";\n\nexport type OakGoogleSignInCallback = {\n encryptedSession: string;\n profilePictureUrl?: string;\n};\n\ntype EncryptedSession = {\n loginHint: string;\n accessToken: string;\n};\n\nexport class OakGoogleClassroomAddOn {\n private encryptionService: EncryptionService;\n private firestoreClient: FirestoreClient;\n private _googleOAuthClientId: string;\n private _googleOAuthClientSecret: string;\n private _googleOAuthCallbackApiRoute: string;\n private _sessionSecret: string;\n\n constructor(\n private readonly encryptionSecret: string,\n private readonly firestore: Firestore,\n private readonly googleOAuthClientId: string,\n private readonly googleOAuthClientSecret: string,\n private readonly googleOAuthCallbackApiRoute: string,\n private readonly sessionSecret: string,\n ) {\n this.encryptionService = new EncryptionService(encryptionSecret);\n this.firestoreClient = new FirestoreClient(firestore);\n this._googleOAuthClientId = googleOAuthClientId;\n this._googleOAuthClientSecret = googleOAuthClientSecret;\n this._googleOAuthCallbackApiRoute = googleOAuthCallbackApiRoute;\n this._sessionSecret = sessionSecret;\n }\n\n private getOAuthClient(\n accessToken?: string,\n refreshToken?: string,\n ): GoogleOAuthClient {\n return new GoogleOAuthClient(\n this._googleOAuthClientId,\n this._googleOAuthClientSecret,\n this._googleOAuthCallbackApiRoute,\n accessToken,\n refreshToken,\n );\n }\n\n public async getGoogleSignInUrl(\n loginHint?: string,\n subscribeToNewsletter: boolean = false,\n ): Promise<string> {\n const oauthClient = this.getOAuthClient();\n const url: string | null = oauthClient.getAuthenticateUrl(\n loginHint,\n subscribeToNewsletter,\n );\n if (!url) throw new Error(\"Failed to get Google Authentication URL\");\n return url;\n }\n\n public async handleGoogleSignInCallback(\n code: string,\n subscribeToNewsletterFn?: (email: string) => Promise<void>,\n ): Promise<OakGoogleSignInCallback> {\n const oauthClient = this.getOAuthClient();\n const user = await oauthClient.exchangeCodeForTokens(code);\n if (!user) throw new Error(\"Failed to authenticate Google sign-in\");\n const encryptedRefreshToken = user.refreshToken\n ? this.encryptionService.encryptString(user.refreshToken)\n : undefined;\n const encryptedProfileUrl = user.profilePictureUrl\n ? this.encryptionService.encryptString(user.profilePictureUrl)\n : undefined;\n await this.firestoreClient.upsertConnectedUserCredentials({\n refreshToken: encryptedRefreshToken,\n profilePictureUrl: encryptedProfileUrl,\n loginHint: user.loginHint,\n });\n const encryptedSession = await sealData(\n {\n loginHint: user.loginHint,\n accessToken: user.accessToken,\n } as EncryptedSession,\n { password: this._sessionSecret },\n );\n if (subscribeToNewsletterFn && user.email)\n await subscribeToNewsletterFn(user.email);\n return {\n encryptedSession,\n profilePictureUrl: user.profilePictureUrl,\n };\n }\n\n /**\n * Checks if session exists and is authenticated. It will automatically attempt\n * to refresh the session if it has expired.\n * Returns null for an invalid session.\n * Returns the encrypted session (original or refreshed) if valid.\n */\n public async verifyAuthSession(\n encryptedSession: string,\n ): Promise<string | null> {\n const decryptedSession = await unsealData<EncryptedSession>(\n encryptedSession,\n {\n password: this._sessionSecret,\n },\n );\n if (!decryptedSession?.accessToken || !decryptedSession?.loginHint)\n return null;\n\n // Check active session for the user exists\n const connectedUser =\n await this.firestoreClient.getConnectedUserCredentials(\n decryptedSession.loginHint,\n );\n if (!connectedUser) return null;\n\n // Check if the access token is still valid\n const oauthClient = this.getOAuthClient(\n decryptedSession.accessToken,\n connectedUser.refreshToken,\n );\n const isTokenValid = await oauthClient.isAuthenticated(\n decryptedSession.accessToken,\n );\n if (isTokenValid) return encryptedSession;\n\n // Attempt to refresh expired access token\n const refreshedToken = await oauthClient.refreshAccessToken(\n connectedUser.refreshToken,\n );\n if (refreshedToken) {\n const newEncryptedSession = await sealData(\n {\n loginHint: decryptedSession.loginHint,\n accessToken: refreshedToken,\n } as EncryptedSession,\n { password: this._sessionSecret },\n );\n return newEncryptedSession;\n }\n\n return null;\n }\n}\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","_","label","sent","trys","ops","g","Object","create","Iterator","prototype","verb","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","SuppressedError","cookie","parse","str","opt","obj","len","dec","decode","index","eqIdx","endIdx","indexOf","lastIndexOf","keyStartIdx","startIndex","keyEndIdx","endIndex","key","slice","__hasOwnProperty","valStartIdx","valEndIdx","charCodeAt","val","tryDecode","serialize","name","enc","encode","encodeURIComponent","cookieNameRegExp","test","cookieValueRegExp","maxAge","Math","floor","isFinite","domain","domainValueRegExp","path","pathValueRegExp","expires","__toString","isDate","isNaN","valueOf","toUTCString","httpOnly","secure","partitioned","priority","toLowerCase","sameSite","toString","hasOwnProperty","max","code","min","decodeURIComponent","alphabetByEncoding","alphabetByValue","Array","from","i","start","limit","char","String","fromCharCode","stringToBuffer","TextEncoder","base64urlDecode","_input","input","repeat","totalByteLength","endsWith","out","ArrayBuffer","dataView","DataView","bits","bitLength","j","chunkOffset","byteLength","k","offset","setUint8","Uint8Array","base64urlEncode","bitClusterCount","ceil","defaults","encryption","saltBits","algorithm","iterations","minPasswordlength","integrity","ttl","timestampSkewSec","localtimeOffsetMsec","clone","options","algorithms","keyBits","ivBits","sha256","macPrefix","randomBits","_crypto","Error","size","bytes","getRandomValues","randomBytes","generateKey","async","password","_a","hmac","id","hash","usage","salt","randomSalt","map","x","padStart","join","derivedKey","keyLength","passwordBuffer","importedKey","subtle","importKey","params","deriveBits","pbkdf2","importedEncryptionKey","iv","getEncryptParams","data","counter","decrypt","decrypted","TextDecoder","hmacWithPassword","textBuffer","signed","sign","digest","normalizePassword","secret","seal","object","opts","now","Date","objectString","JSON","stringify","pass","encrypted","encrypt","encryptedB64","expiration","macBaseString","mac","webCrypto","globalThis","crypto","randomUUID","array","normalizeStringPasswordToMap","FirestoreCollections","sealData","fourteenDaysInSeconds","passwordsMap","mostRecentPasswordId","keys","Number","passwordForSeal","createSealData","unsealData","sealWithoutVersion","tokenVersion","tokenVersionAsString","split","parseInt","parseSeal","sealed","parts","prefix","passwordId","encryptionSalt","encryptionIv","hmacSalt","macOptions","a","b","mismatch","fixedTimeComparison","decryptOptions","unseal","persistent","error","message","createUnsealData","EncryptionService","encryptionSecret","ENCRYPTION_SECRET","encryptString","SALT_BYTES","IV_LENGTH","encryptionKey","scryptSync","ENCRYPTION_KEY_LENGTH","cipher","createCipheriv","ALGORITHM","update","final","concat","decryptString","o","m","r","ar","__read","ivHex","encryptedText","Buffer","decipher","createDecipheriv","FirestoreClient","firestore","_firestore","getConnectedUserCredentials","loginHint","collection","CONNECTED_USERS_CREDENTIALS","doc","get","console","error_1","upsertConnectedUserCredentials","credentials","settings","ignoreUndefinedProperties","set","error_2","GoogleOAuthClient","googleClientId","googleClientSecret","callbackUrl","accessToken","refreshToken","_this","client","OAuth2Client","clientId","clientSecret","redirectUri","forceRefreshOnFailure","process","env","GOOGLE_CLASSROOM_DEV_MODE","refreshHandler","access_token","expiry_date","getTime","setCredentials","refresh_token","getAuthenticateUrl","subscribeToNewsletter","generateAuthUrl","access_type","include_granted_scopes","scope","exchangeCodeForTokens","getToken","tokens","verifyIdToken","idToken","id_token","audience","ticket","info","getPayload","sub","profilePictureUrl","picture","email","refreshAccessToken","getAccessToken","token","isAuthenticated","getTokenInfo","tokenInfo","error_3","OakGoogleClassroomAddOn","googleOAuthClientId","googleOAuthClientSecret","googleOAuthCallbackApiRoute","sessionSecret","encryptionService","firestoreClient","_googleOAuthClientId","_googleOAuthClientSecret","_googleOAuthCallbackApiRoute","_sessionSecret","getOAuthClient","getGoogleSignInUrl","loginHint_1","arguments","oauthClient","url","handleGoogleSignInCallback","subscribeToNewsletterFn","user","encryptedRefreshToken","undefined","encryptedProfileUrl","encryptedSession","verifyAuthSession","decryptedSession","connectedUser","refreshedToken"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
@@ -1,2 +1,2 @@
1
- import e from"react";import{OakLink as t,OakFlex as n,OakSpan as r,OakMaxWidth as o,OakHeading as a,OakP as l,OakCheckBox as i,OakBox as c,OakLabel as u}from"@oaknational/oak-components";var s=function(){return s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},s.apply(this,arguments)};function f(e,t,n,r){return new(n||(n=Promise))(function(o,a){function l(e){try{c(r.next(e))}catch(e){a(e)}}function i(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(l,i)}c((r=r.apply(e,t||[])).next())})}function p(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return l.next=i(0),l.throw=i(1),l.return=i(2),"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(i){return function(c){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;l&&(l=0,i[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}function d(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)l.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return l}"function"==typeof SuppressedError&&SuppressedError;var C=function(){return e.createElement("svg",{version:"1.1",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",xmlnsXlink:"http://www.w3.org/1999/xlink",style:{display:"block"},width:19,height:19},e.createElement("path",{fill:"#EA4335",d:"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"}),e.createElement("path",{fill:"#4285F4",d:"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"}),e.createElement("path",{fill:"#FBBC05",d:"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"}),e.createElement("path",{fill:"#34A853",d:"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"}),e.createElement("path",{fill:"none",d:"M0 0h48v48H0z"}))},h=function(o){var a=d(e.useState(!1),2),l=a[0],i=a[1];return e.createElement(t,s({},o,{element:"button",style:{textDecoration:"none"},onMouseEnter:function(){return i(!0)},onMouseLeave:function(){return i(!1)},"aria-label":"Sign in with Google"}),e.createElement(n,{$pa:"inner-padding-m",$width:"100%",$gap:"space-between-xs",$alignItems:"center",$justifyContent:"center",$borderRadius:"border-radius-s",$ba:"border-solid-s",$borderColor:"border-neutral",$background:l&&"grey20"},e.createElement(C,null),e.createElement(r,{$font:"body-2-bold",$color:"text-primary",$hoverColor:"text-primary"},"Sign-in with Google")))},m=function(t){var n=t.color,r=void 0===n?"#222222":n;return e.createElement("svg",{width:"30",height:"40",viewBox:"0 0 30 40",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e.createElement("path",{d:"M16.432 6.8134C17.2641 6.9574 17.9812 7.04602 18.6836 7.20479C21.7484 7.8766 24.5021 9.54441 26.5115 11.9458C28.4836 14.2363 29.6739 17.092 29.9102 20.1005C29.9584 20.6543 29.9899 21.2082 29.9992 21.7621C30.0103 22.3621 29.9158 22.4673 29.345 22.5504C27.2042 22.8558 25.0222 22.6855 22.9552 22.0519C21.6282 21.65 20.3666 21.0586 19.2099 20.2962C17.7721 19.3386 16.5419 18.1031 15.5925 16.6629C14.5377 15.0887 13.8529 13.2977 13.5892 11.4234C13.4854 10.744 13.4687 10.0535 13.4039 9.28915C11.091 9.66233 8.93039 10.6771 7.16974 12.2172C4.60492 14.4327 3.11311 17.2481 2.57568 20.6322C3.09458 20.7356 3.57085 20.8463 4.05823 20.922C4.49003 20.9885 4.74391 21.1547 4.75874 21.6476C4.80258 23.232 5.09201 24.8001 5.61677 26.2963C6.14643 27.7501 6.78768 29.1611 7.53482 30.5167C8.61709 32.5413 10.1406 34.2988 11.9936 35.6602C12.9644 36.3603 14.0068 36.9562 15.1032 37.4381C15.4739 37.6006 16.0854 37.3384 16.5376 37.1501C18.6647 36.296 20.5308 34.9029 21.9508 33.1088C22.7588 32.0805 23.4 30.9044 24.0023 29.7376C24.7324 28.3216 25.0308 26.7616 25.2198 25.1886C25.2569 24.8803 25.3643 24.7548 25.6849 24.7843C26.0679 24.8221 26.4531 24.8332 26.8376 24.8175C27.2954 24.7935 27.49 25.0298 27.4307 25.4268C27.2453 26.6822 27.1341 27.9671 26.782 29.1782C25.998 31.8118 24.5512 34.202 22.579 36.1218C20.8099 37.9148 18.6124 39.2305 16.1929 39.9453C15.7055 40.0893 15.2978 39.9194 14.866 39.7773C12.1771 38.8948 9.96435 37.2941 8.09819 35.2172C7.21482 34.2352 6.4035 33.1913 5.67051 32.0934C4.80076 30.7727 4.09919 29.3495 3.58196 27.8564C3.01314 26.3167 2.6632 24.7054 2.54233 23.0692C2.52168 22.9981 2.48437 22.9328 2.43346 22.8789C2.38255 22.825 2.31951 22.7839 2.24952 22.759C1.67689 22.5744 1.09128 22.447 0.513084 22.2882C0.432981 22.2769 0.356021 22.2495 0.286881 22.2077C0.217741 22.1658 0.157865 22.1104 0.110891 22.0448C0.0639177 21.9792 0.0308281 21.9047 0.0136336 21.826C-0.00356099 21.7472 -0.00450137 21.6658 0.0108695 21.5867C0.159848 19.1412 0.87059 16.7625 2.08829 14.6339C3.11333 12.8409 4.48597 11.2689 6.12639 10.0092C7.92657 8.6205 10.0163 7.65149 12.2419 7.1734C12.3432 7.13614 12.4493 7.11314 12.557 7.10509C13.6374 7.20294 13.9153 6.50323 14.1841 5.64291C14.8392 3.56486 16.0754 1.71595 17.7477 0.312931C18.2314 -0.10431 18.2926 -0.10431 18.7244 0.312931C18.9764 0.560321 19.2192 0.818789 19.4545 1.08095C19.8048 1.47234 19.8048 1.64773 19.4082 2.00405C18.4924 2.85935 17.7341 3.86784 17.1677 4.98381C16.8914 5.58083 16.6459 6.19149 16.432 6.8134ZM27.6104 20.4457C27.5789 20.2796 27.5474 20.1485 27.5289 20.0156C27.2709 18.1548 26.6074 16.3728 25.5849 14.7945C24.3948 12.9165 22.7197 11.3919 20.7351 10.3802C19.3935 9.71621 17.939 9.30796 16.4468 9.17653C16.1836 9.14699 16.041 9.22084 16.0465 9.51992C16.1003 11.8387 16.7248 13.9859 18.098 15.8635C19.3807 17.629 21.1515 18.9844 23.1943 19.7645C24.6119 20.3183 26.076 20.4845 27.6104 20.4457Z",fill:r}))},g=function(r){var s=r.getGoogleSignInLink,C=r.onSuccessfulSignIn,g=r.privacyPolicyUrl,w=e.useRef(null),b=d(e.useState(!1),2),v=b[0],y=b[1],E=e.useCallback(function(e){var t;e.data&&"oak-google-classroom-auth-complete"===e.data.type&&(w.current&&(w.current.close(),w.current=null),e.data.success&&e.data.session&&(null===(t=null===window||void 0===window?void 0:window.cookieStore)||void 0===t||t.set({name:"oak-gclassroom-auth",value:e.data.session,partitioned:!0,sameSite:"none",path:"/"}),C(v)))},[C,v]);return e.useEffect(function(){return window.addEventListener("message",E),function(){window.removeEventListener("message",E)}},[E]),e.createElement(o,{$pa:"inner-padding-xl3",$maxWidth:"all-spacing-21",$ma:"auto"},e.createElement(n,{$flexDirection:"column",$rowGap:"space-between-m"},e.createElement(m,null),e.createElement(a,{tag:"h1",$font:"heading-6"},"Sign in to Oak National Academy"),e.createElement(l,{$font:"body-2"},"Welcome back! Please sign-in to continue"),e.createElement(h,{onClick:function(){return f(void 0,void 0,void 0,function(){var e;return p(this,function(t){switch(t.label){case 0:return[4,s()];case 1:if(!(e=t.sent()))throw new Error("Could not get Google Sign In link");return new RegExp(/^(https):/).test(e)?w.current=window.open(e,"popUpWindow","height=500,width=500,left=100,top=100,resizable=no,scrollbars=yes,toolbar=yes,menubar=no,location=yes,directories=no,status=yes"):console.error("getGoogleSignInLink did not return a valid URL"),[2]}})})}}),e.createElement(n,{$columnGap:"space-between-xs",$alignItems:"flex-start"},e.createElement(i,{id:"google-sign-in-newsletter-checkbox",value:"",checked:v,onChange:function(e){return y(e.target.checked)}}),e.createElement(c,null,e.createElement(u,{$font:"body-2",htmlFor:"google-sign-in-newsletter-checkbox"},"Sign up to receive helpful content via email. Unsubscribe at any time. Read our"," "),e.createElement(t,{href:g,isTrailingIcon:!0,iconName:"external",target:"_blank"},"privacy policy"),"."))))};export{g as GoogleSignInView};
1
+ import e from"react";import{OakLink as t,OakFlex as n,OakSpan as o,OakMaxWidth as r,OakHeading as a,OakP as l,OakCheckBox as i,OakBox as c,OakLabel as u,OakLoadingSpinner as s}from"@oaknational/oak-components";import{useRouter as f,useSearchParams as d}from"next/navigation";var p=function(){return p=Object.assign||function(e){for(var t,n=1,o=arguments.length;n<o;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},p.apply(this,arguments)};function m(e,t,n,o){return new(n||(n=Promise))(function(r,a){function l(e){try{c(o.next(e))}catch(e){a(e)}}function i(e){try{c(o.throw(e))}catch(e){a(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(l,i)}c((o=o.apply(e,t||[])).next())})}function g(e,t){var n,o,r,a={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return l.next=i(0),l.throw=i(1),l.return=i(2),"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(i){return function(c){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;l&&(l=0,i[0]&&(a=0)),a;)try{if(n=1,o&&(r=2&i[0]?o.return:i[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,i[1])).done)return r;switch(o=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,o=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(r=a.trys,(r=r.length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){a.label=i[1];break}if(6===i[0]&&a.label<r[1]){a.label=r[1],r=i;break}if(r&&a.label<r[2]){a.label=r[2],a.ops.push(i);break}r[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],o=0}finally{n=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}function h(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var o,r,a=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(o=a.next()).done;)l.push(o.value)}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return l}"function"==typeof SuppressedError&&SuppressedError;var w=function(){return e.createElement("svg",{version:"1.1",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",xmlnsXlink:"http://www.w3.org/1999/xlink",style:{display:"block"},width:19,height:19},e.createElement("path",{fill:"#EA4335",d:"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"}),e.createElement("path",{fill:"#4285F4",d:"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"}),e.createElement("path",{fill:"#FBBC05",d:"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"}),e.createElement("path",{fill:"#34A853",d:"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"}),e.createElement("path",{fill:"none",d:"M0 0h48v48H0z"}))},C=function(r){var a=h(e.useState(!1),2),l=a[0],i=a[1];return e.createElement(t,p({},r,{element:"button",style:{textDecoration:"none"},onMouseEnter:function(){return i(!0)},onMouseLeave:function(){return i(!1)},"aria-label":"Sign in with Google"}),e.createElement(n,{$pa:"inner-padding-m",$width:"100%",$gap:"space-between-xs",$alignItems:"center",$justifyContent:"center",$borderRadius:"border-radius-s",$ba:"border-solid-s",$borderColor:"border-neutral",$background:l&&"grey20"},e.createElement(w,null),e.createElement(o,{$font:"body-2-bold",$color:"text-primary",$hoverColor:"text-primary"},"Sign-in with Google")))},v=function(t){var n=t.color,o=void 0===n?"#222222":n;return e.createElement("svg",{width:"30",height:"40",viewBox:"0 0 30 40",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e.createElement("path",{d:"M16.432 6.8134C17.2641 6.9574 17.9812 7.04602 18.6836 7.20479C21.7484 7.8766 24.5021 9.54441 26.5115 11.9458C28.4836 14.2363 29.6739 17.092 29.9102 20.1005C29.9584 20.6543 29.9899 21.2082 29.9992 21.7621C30.0103 22.3621 29.9158 22.4673 29.345 22.5504C27.2042 22.8558 25.0222 22.6855 22.9552 22.0519C21.6282 21.65 20.3666 21.0586 19.2099 20.2962C17.7721 19.3386 16.5419 18.1031 15.5925 16.6629C14.5377 15.0887 13.8529 13.2977 13.5892 11.4234C13.4854 10.744 13.4687 10.0535 13.4039 9.28915C11.091 9.66233 8.93039 10.6771 7.16974 12.2172C4.60492 14.4327 3.11311 17.2481 2.57568 20.6322C3.09458 20.7356 3.57085 20.8463 4.05823 20.922C4.49003 20.9885 4.74391 21.1547 4.75874 21.6476C4.80258 23.232 5.09201 24.8001 5.61677 26.2963C6.14643 27.7501 6.78768 29.1611 7.53482 30.5167C8.61709 32.5413 10.1406 34.2988 11.9936 35.6602C12.9644 36.3603 14.0068 36.9562 15.1032 37.4381C15.4739 37.6006 16.0854 37.3384 16.5376 37.1501C18.6647 36.296 20.5308 34.9029 21.9508 33.1088C22.7588 32.0805 23.4 30.9044 24.0023 29.7376C24.7324 28.3216 25.0308 26.7616 25.2198 25.1886C25.2569 24.8803 25.3643 24.7548 25.6849 24.7843C26.0679 24.8221 26.4531 24.8332 26.8376 24.8175C27.2954 24.7935 27.49 25.0298 27.4307 25.4268C27.2453 26.6822 27.1341 27.9671 26.782 29.1782C25.998 31.8118 24.5512 34.202 22.579 36.1218C20.8099 37.9148 18.6124 39.2305 16.1929 39.9453C15.7055 40.0893 15.2978 39.9194 14.866 39.7773C12.1771 38.8948 9.96435 37.2941 8.09819 35.2172C7.21482 34.2352 6.4035 33.1913 5.67051 32.0934C4.80076 30.7727 4.09919 29.3495 3.58196 27.8564C3.01314 26.3167 2.6632 24.7054 2.54233 23.0692C2.52168 22.9981 2.48437 22.9328 2.43346 22.8789C2.38255 22.825 2.31951 22.7839 2.24952 22.759C1.67689 22.5744 1.09128 22.447 0.513084 22.2882C0.432981 22.2769 0.356021 22.2495 0.286881 22.2077C0.217741 22.1658 0.157865 22.1104 0.110891 22.0448C0.0639177 21.9792 0.0308281 21.9047 0.0136336 21.826C-0.00356099 21.7472 -0.00450137 21.6658 0.0108695 21.5867C0.159848 19.1412 0.87059 16.7625 2.08829 14.6339C3.11333 12.8409 4.48597 11.2689 6.12639 10.0092C7.92657 8.6205 10.0163 7.65149 12.2419 7.1734C12.3432 7.13614 12.4493 7.11314 12.557 7.10509C13.6374 7.20294 13.9153 6.50323 14.1841 5.64291C14.8392 3.56486 16.0754 1.71595 17.7477 0.312931C18.2314 -0.10431 18.2926 -0.10431 18.7244 0.312931C18.9764 0.560321 19.2192 0.818789 19.4545 1.08095C19.8048 1.47234 19.8048 1.64773 19.4082 2.00405C18.4924 2.85935 17.7341 3.86784 17.1677 4.98381C16.8914 5.58083 16.6459 6.19149 16.432 6.8134ZM27.6104 20.4457C27.5789 20.2796 27.5474 20.1485 27.5289 20.0156C27.2709 18.1548 26.6074 16.3728 25.5849 14.7945C24.3948 12.9165 22.7197 11.3919 20.7351 10.3802C19.3935 9.71621 17.939 9.30796 16.4468 9.17653C16.1836 9.14699 16.041 9.22084 16.0465 9.51992C16.1003 11.8387 16.7248 13.9859 18.098 15.8635C19.3807 17.629 21.1515 18.9844 23.1943 19.7645C24.6119 20.3183 26.076 20.4845 27.6104 20.4457Z",fill:o}))},y=function(o){var s=o.getGoogleSignInLink,f=o.onSuccessfulSignIn,d=o.privacyPolicyUrl,p=e.useRef(null),w=h(e.useState(!1),2),y=w[0],b=w[1],E=e.useCallback(function(e){var t;e.data&&"oak-google-classroom-auth-complete"===e.data.type&&(p.current&&(p.current.close(),p.current=null),e.data.success&&e.data.session&&(null===(t=null===window||void 0===window?void 0:window.cookieStore)||void 0===t||t.set({name:"oak-gclassroom-auth",value:e.data.session,partitioned:!0,sameSite:"none",path:"/"}),f(y)))},[f,y]);return e.useEffect(function(){return window.addEventListener("message",E),function(){window.removeEventListener("message",E)}},[E]),e.createElement(r,{$pa:"inner-padding-xl3",$maxWidth:"all-spacing-21",$ma:"auto"},e.createElement(n,{$flexDirection:"column",$rowGap:"space-between-m"},e.createElement(v,null),e.createElement(a,{tag:"h1",$font:"heading-6"},"Sign in to Oak National Academy"),e.createElement(l,{$font:"body-2"},"Welcome back! Please sign-in to continue"),e.createElement(C,{onClick:function(){return m(void 0,void 0,void 0,function(){var e;return g(this,function(t){switch(t.label){case 0:return[4,s()];case 1:if(!(e=t.sent()))throw new Error("Could not get Google Sign In link");return new RegExp(/^(https):/).test(e)?p.current=window.open(e,"popUpWindow","height=500,width=500,left=100,top=100,resizable=no,scrollbars=yes,toolbar=yes,menubar=no,location=yes,directories=no,status=yes"):console.error("getGoogleSignInLink did not return a valid URL"),[2]}})})}}),e.createElement(n,{$columnGap:"space-between-xs",$alignItems:"flex-start"},e.createElement(i,{id:"google-sign-in-newsletter-checkbox",value:"",checked:y,onChange:function(e){return b(e.target.checked)}}),e.createElement(c,null,e.createElement(u,{$font:"body-2",htmlFor:"google-sign-in-newsletter-checkbox"},"Sign up to receive helpful content via email. Unsubscribe at any time. Read our"," "),e.createElement(t,{href:d,isTrailingIcon:!0,iconName:"external",target:"_blank"},"privacy policy"),"."))))},b=function(t){var n=t.session;return e.useEffect(function(){var e;null===(e=null===window||void 0===window?void 0:window.opener)||void 0===e||e.postMessage({type:"oak-google-classroom-auth-complete",success:!0,session:n},"*"),setTimeout(function(){window.close()},3e3)},[n]),e.createElement(e.Fragment,null,e.createElement(a,{tag:"h1"},"Authentication Successful"),e.createElement(l,null,"This window will automatically close..."))},E=function(){return e.createElement(e.Fragment,null,e.createElement(a,{tag:"h1"},"Browsing curriculum content"),e.createElement(l,null,"This page is a work in progress..."))},k=function(t){var o=t.children,r=t.verifySessionAction,a=t.signInUrl,l=f(),i=d(),c=h(e.useState(!1),2),u=c[0],p=c[1];return e.useEffect(function(){p(!1),m(void 0,void 0,void 0,function(){var e,t,n;return g(this,function(o){switch(o.label){case 0:return e=function(){var e,t=null!==(e=null==i?void 0:i.toString())&&void 0!==e?e:"";l.push("".concat(a,"?").concat(t))},[4,window.cookieStore.get("oak-gclassroom-auth")];case 1:return(t=null===(n=o.sent())||void 0===n?void 0:n.value)?[4,r(t)]:(e(),[2]);case 2:return o.sent().authenticated?(p(!0),[2]):(e(),[2])}})})},[]),u?e.createElement(e.Fragment,null,o):e.createElement(n,{$justifyContent:"center",$alignItems:"center"},e.createElement(s,{$width:"all-spacing-15",$color:"oakGreen"}))};export{b as GoogleClassroomAuthSuccessView,E as GoogleClassroomBrowseView,y as GoogleSignInView,k as WithGoogleClassroomAuth};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../src/components/GoogleSignInButton/GoogleSignInButtonIcon.tsx","../../../src/components/GoogleSignInButton/GoogleSignInButton.tsx","../../../src/components/OakAcornIcon/OakAcornIcon.tsx","../../../src/views/GoogleSignInView/GoogleSignInView.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React from \"react\";\n\nexport const GoogleSignInButtonIcon = () => {\n return (\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 48 48\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n style={{ display: \"block\" }}\n width={19}\n height={19}\n >\n <path\n fill=\"#EA4335\"\n d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"\n />\n <path\n fill=\"#4285F4\"\n d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"\n />\n <path fill=\"none\" d=\"M0 0h48v48H0z\" />\n </svg>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { OakFlex, OakLink, OakSpan } from \"@oaknational/oak-components\";\n\nimport { GoogleSignInButtonIcon } from \"./GoogleSignInButtonIcon\";\n\ntype Props = {\n onClick?: () => void;\n};\nexport const GoogleSignInButton: React.FC<Props> = (props) => {\n const [isHovered, setIsHovered] = React.useState<boolean>(false);\n return (\n <OakLink\n {...props}\n element=\"button\"\n style={{\n textDecoration: \"none\",\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n aria-label={\"Sign in with Google\"}\n >\n <OakFlex\n $pa={\"inner-padding-m\"}\n $width={\"100%\"}\n $gap={\"space-between-xs\"}\n $alignItems={\"center\"}\n $justifyContent={\"center\"}\n $borderRadius={\"border-radius-s\"}\n $ba={\"border-solid-s\"}\n $borderColor={\"border-neutral\"}\n $background={isHovered && \"grey20\"}\n >\n <GoogleSignInButtonIcon />\n <OakSpan\n $font={\"body-2-bold\"}\n $color={\"text-primary\"}\n $hoverColor={\"text-primary\"}\n >\n Sign-in with Google\n </OakSpan>\n </OakFlex>\n </OakLink>\n );\n};\n","import React from \"react\";\n\ntype Props = {\n color?: string;\n};\nexport const OakAcornIcon: React.FC<Props> = ({ color = \"#222222\" }) => {\n return (\n <svg\n width=\"30\"\n height=\"40\"\n viewBox=\"0 0 30 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.432 6.8134C17.2641 6.9574 17.9812 7.04602 18.6836 7.20479C21.7484 7.8766 24.5021 9.54441 26.5115 11.9458C28.4836 14.2363 29.6739 17.092 29.9102 20.1005C29.9584 20.6543 29.9899 21.2082 29.9992 21.7621C30.0103 22.3621 29.9158 22.4673 29.345 22.5504C27.2042 22.8558 25.0222 22.6855 22.9552 22.0519C21.6282 21.65 20.3666 21.0586 19.2099 20.2962C17.7721 19.3386 16.5419 18.1031 15.5925 16.6629C14.5377 15.0887 13.8529 13.2977 13.5892 11.4234C13.4854 10.744 13.4687 10.0535 13.4039 9.28915C11.091 9.66233 8.93039 10.6771 7.16974 12.2172C4.60492 14.4327 3.11311 17.2481 2.57568 20.6322C3.09458 20.7356 3.57085 20.8463 4.05823 20.922C4.49003 20.9885 4.74391 21.1547 4.75874 21.6476C4.80258 23.232 5.09201 24.8001 5.61677 26.2963C6.14643 27.7501 6.78768 29.1611 7.53482 30.5167C8.61709 32.5413 10.1406 34.2988 11.9936 35.6602C12.9644 36.3603 14.0068 36.9562 15.1032 37.4381C15.4739 37.6006 16.0854 37.3384 16.5376 37.1501C18.6647 36.296 20.5308 34.9029 21.9508 33.1088C22.7588 32.0805 23.4 30.9044 24.0023 29.7376C24.7324 28.3216 25.0308 26.7616 25.2198 25.1886C25.2569 24.8803 25.3643 24.7548 25.6849 24.7843C26.0679 24.8221 26.4531 24.8332 26.8376 24.8175C27.2954 24.7935 27.49 25.0298 27.4307 25.4268C27.2453 26.6822 27.1341 27.9671 26.782 29.1782C25.998 31.8118 24.5512 34.202 22.579 36.1218C20.8099 37.9148 18.6124 39.2305 16.1929 39.9453C15.7055 40.0893 15.2978 39.9194 14.866 39.7773C12.1771 38.8948 9.96435 37.2941 8.09819 35.2172C7.21482 34.2352 6.4035 33.1913 5.67051 32.0934C4.80076 30.7727 4.09919 29.3495 3.58196 27.8564C3.01314 26.3167 2.6632 24.7054 2.54233 23.0692C2.52168 22.9981 2.48437 22.9328 2.43346 22.8789C2.38255 22.825 2.31951 22.7839 2.24952 22.759C1.67689 22.5744 1.09128 22.447 0.513084 22.2882C0.432981 22.2769 0.356021 22.2495 0.286881 22.2077C0.217741 22.1658 0.157865 22.1104 0.110891 22.0448C0.0639177 21.9792 0.0308281 21.9047 0.0136336 21.826C-0.00356099 21.7472 -0.00450137 21.6658 0.0108695 21.5867C0.159848 19.1412 0.87059 16.7625 2.08829 14.6339C3.11333 12.8409 4.48597 11.2689 6.12639 10.0092C7.92657 8.6205 10.0163 7.65149 12.2419 7.1734C12.3432 7.13614 12.4493 7.11314 12.557 7.10509C13.6374 7.20294 13.9153 6.50323 14.1841 5.64291C14.8392 3.56486 16.0754 1.71595 17.7477 0.312931C18.2314 -0.10431 18.2926 -0.10431 18.7244 0.312931C18.9764 0.560321 19.2192 0.818789 19.4545 1.08095C19.8048 1.47234 19.8048 1.64773 19.4082 2.00405C18.4924 2.85935 17.7341 3.86784 17.1677 4.98381C16.8914 5.58083 16.6459 6.19149 16.432 6.8134ZM27.6104 20.4457C27.5789 20.2796 27.5474 20.1485 27.5289 20.0156C27.2709 18.1548 26.6074 16.3728 25.5849 14.7945C24.3948 12.9165 22.7197 11.3919 20.7351 10.3802C19.3935 9.71621 17.939 9.30796 16.4468 9.17653C16.1836 9.14699 16.041 9.22084 16.0465 9.51992C16.1003 11.8387 16.7248 13.9859 18.098 15.8635C19.3807 17.629 21.1515 18.9844 23.1943 19.7645C24.6119 20.3183 26.076 20.4845 27.6104 20.4457Z\"\n fill={color}\n />\n </svg>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n OakBox,\n OakCheckBox,\n OakFlex,\n OakHeading,\n OakLabel,\n OakLink,\n OakMaxWidth,\n OakP,\n} from \"@oaknational/oak-components\";\n\nimport { GoogleSignInButton, OakAcornIcon } from \"@/components\";\n\ntype Props = {\n getGoogleSignInLink: () => Promise<string | null>;\n onSuccessfulSignIn: (signUpToNewsletter: boolean) => Promise<void> | void;\n privacyPolicyUrl: string;\n};\nexport const GoogleSignInView = ({\n getGoogleSignInLink,\n onSuccessfulSignIn,\n privacyPolicyUrl,\n}: Props) => {\n const popupRef = React.useRef<Window | null>(null);\n const [isNewsletterChecked, setIsNewsletterChecked] = React.useState(false);\n\n const onSignInClick = async () => {\n const signInLink = await getGoogleSignInLink();\n if (!signInLink) throw new Error(\"Could not get Google Sign In link\");\n const validLinkRegex = new RegExp(/^(https):/);\n if (validLinkRegex.test(signInLink)) {\n popupRef.current = window.open(\n signInLink,\n \"popUpWindow\",\n \"height=500,width=500,left=100,top=100,resizable=no,\" +\n \"scrollbars=yes,toolbar=yes,menubar=no,location=yes,\" +\n \"directories=no,status=yes\",\n );\n } else {\n // todo: show error toast\n console.error(\"getGoogleSignInLink did not return a valid URL\");\n }\n };\n const handleAuthMessage = React.useCallback(\n (event: MessageEvent) => {\n if (\n event.data &&\n event.data.type === \"oak-google-classroom-auth-complete\"\n ) {\n if (popupRef.current) {\n popupRef.current.close();\n popupRef.current = null;\n }\n if (event.data.success && event.data.session) {\n window?.cookieStore?.set({\n name: \"oak-gclassroom-auth\",\n value: event.data.session,\n partitioned: true,\n sameSite: \"none\",\n path: \"/\",\n });\n onSuccessfulSignIn(isNewsletterChecked);\n }\n }\n },\n [onSuccessfulSignIn, isNewsletterChecked],\n );\n\n React.useEffect(() => {\n window.addEventListener(\"message\", handleAuthMessage);\n return () => {\n window.removeEventListener(\"message\", handleAuthMessage);\n };\n }, [handleAuthMessage]);\n\n return (\n <OakMaxWidth\n $pa={\"inner-padding-xl3\"}\n $maxWidth={\"all-spacing-21\"}\n $ma={\"auto\"}\n >\n <OakFlex $flexDirection=\"column\" $rowGap={\"space-between-m\"}>\n <OakAcornIcon />\n <OakHeading tag={\"h1\"} $font={\"heading-6\"}>\n Sign in to Oak National Academy\n </OakHeading>\n <OakP $font={\"body-2\"}>Welcome back! Please sign-in to continue</OakP>\n <GoogleSignInButton onClick={onSignInClick} />\n <OakFlex $columnGap={\"space-between-xs\"} $alignItems={\"flex-start\"}>\n <OakCheckBox\n id={\"google-sign-in-newsletter-checkbox\"}\n value=\"\"\n checked={isNewsletterChecked}\n onChange={(e) => setIsNewsletterChecked(e.target.checked)}\n />\n <OakBox>\n <OakLabel\n $font={\"body-2\"}\n htmlFor={\"google-sign-in-newsletter-checkbox\"}\n >\n Sign up to receive helpful content via email. Unsubscribe at any\n time. Read our{\" \"}\n </OakLabel>\n <OakLink\n href={privacyPolicyUrl}\n isTrailingIcon={true}\n iconName={\"external\"}\n target={\"_blank\"}\n >\n privacy policy\n </OakLink>\n .\n </OakBox>\n </OakFlex>\n </OakFlex>\n </OakMaxWidth>\n );\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","create","Iterator","verb","Symbol","iterator","v","op","TypeError","pop","push","__read","o","m","r","ar","error","SuppressedError","GoogleSignInButtonIcon","React","createElement","version","xmlns","viewBox","xmlnsXlink","style","display","width","height","fill","d","GoogleSignInButton","props","_a","useState","isHovered","setIsHovered","OakLink","element","textDecoration","onMouseEnter","onMouseLeave","OakFlex","$width","$gap","$justifyContent","$borderRadius","$borderColor","$background","OakSpan","$font","$color","$hoverColor","OakAcornIcon","_b","color","GoogleSignInView","getGoogleSignInLink","onSuccessfulSignIn","privacyPolicyUrl","popupRef","useRef","isNewsletterChecked","setIsNewsletterChecked","handleAuthMessage","useCallback","event","data","type","current","close","success","session","window","cookieStore","set","name","partitioned","sameSite","path","useEffect","addEventListener","removeEventListener","OakMaxWidth","$pa","$maxWidth","$flexDirection","$rowGap","OakHeading","tag","OakP","onClick","signInLink","Error","RegExp","test","open","console","$columnGap","$alignItems","OakCheckBox","id","checked","onChange","target","OakBox","OakLabel","htmlFor","href","isTrailingIcon","iconName"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../src/components/GoogleSignInButton/GoogleSignInButtonIcon.tsx","../../../src/components/GoogleSignInButton/GoogleSignInButton.tsx","../../../src/components/OakAcornIcon/OakAcornIcon.tsx","../../../src/views/GoogleSignInView/GoogleSignInView.tsx","../../../src/views/GoogleClassroomAuthSuccessView/GoogleClassroomAuthSuccessView.tsx","../../../src/views/GoogleClassroomBrowseView/GoogleClassroomBrowseView.tsx","../../../src/views/WithGoogleClassroomAuth/WithGoogleClassroomAuth.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React from \"react\";\n\nexport const GoogleSignInButtonIcon = () => {\n return (\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 48 48\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n style={{ display: \"block\" }}\n width={19}\n height={19}\n >\n <path\n fill=\"#EA4335\"\n d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"\n />\n <path\n fill=\"#4285F4\"\n d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"\n />\n <path fill=\"none\" d=\"M0 0h48v48H0z\" />\n </svg>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { OakFlex, OakLink, OakSpan } from \"@oaknational/oak-components\";\n\nimport { GoogleSignInButtonIcon } from \"./GoogleSignInButtonIcon\";\n\ntype Props = {\n onClick?: () => void;\n};\nexport const GoogleSignInButton: React.FC<Props> = (props) => {\n const [isHovered, setIsHovered] = React.useState<boolean>(false);\n return (\n <OakLink\n {...props}\n element=\"button\"\n style={{\n textDecoration: \"none\",\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n aria-label={\"Sign in with Google\"}\n >\n <OakFlex\n $pa={\"inner-padding-m\"}\n $width={\"100%\"}\n $gap={\"space-between-xs\"}\n $alignItems={\"center\"}\n $justifyContent={\"center\"}\n $borderRadius={\"border-radius-s\"}\n $ba={\"border-solid-s\"}\n $borderColor={\"border-neutral\"}\n $background={isHovered && \"grey20\"}\n >\n <GoogleSignInButtonIcon />\n <OakSpan\n $font={\"body-2-bold\"}\n $color={\"text-primary\"}\n $hoverColor={\"text-primary\"}\n >\n Sign-in with Google\n </OakSpan>\n </OakFlex>\n </OakLink>\n );\n};\n","import React from \"react\";\n\ntype Props = {\n color?: string;\n};\nexport const OakAcornIcon: React.FC<Props> = ({ color = \"#222222\" }) => {\n return (\n <svg\n width=\"30\"\n height=\"40\"\n viewBox=\"0 0 30 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.432 6.8134C17.2641 6.9574 17.9812 7.04602 18.6836 7.20479C21.7484 7.8766 24.5021 9.54441 26.5115 11.9458C28.4836 14.2363 29.6739 17.092 29.9102 20.1005C29.9584 20.6543 29.9899 21.2082 29.9992 21.7621C30.0103 22.3621 29.9158 22.4673 29.345 22.5504C27.2042 22.8558 25.0222 22.6855 22.9552 22.0519C21.6282 21.65 20.3666 21.0586 19.2099 20.2962C17.7721 19.3386 16.5419 18.1031 15.5925 16.6629C14.5377 15.0887 13.8529 13.2977 13.5892 11.4234C13.4854 10.744 13.4687 10.0535 13.4039 9.28915C11.091 9.66233 8.93039 10.6771 7.16974 12.2172C4.60492 14.4327 3.11311 17.2481 2.57568 20.6322C3.09458 20.7356 3.57085 20.8463 4.05823 20.922C4.49003 20.9885 4.74391 21.1547 4.75874 21.6476C4.80258 23.232 5.09201 24.8001 5.61677 26.2963C6.14643 27.7501 6.78768 29.1611 7.53482 30.5167C8.61709 32.5413 10.1406 34.2988 11.9936 35.6602C12.9644 36.3603 14.0068 36.9562 15.1032 37.4381C15.4739 37.6006 16.0854 37.3384 16.5376 37.1501C18.6647 36.296 20.5308 34.9029 21.9508 33.1088C22.7588 32.0805 23.4 30.9044 24.0023 29.7376C24.7324 28.3216 25.0308 26.7616 25.2198 25.1886C25.2569 24.8803 25.3643 24.7548 25.6849 24.7843C26.0679 24.8221 26.4531 24.8332 26.8376 24.8175C27.2954 24.7935 27.49 25.0298 27.4307 25.4268C27.2453 26.6822 27.1341 27.9671 26.782 29.1782C25.998 31.8118 24.5512 34.202 22.579 36.1218C20.8099 37.9148 18.6124 39.2305 16.1929 39.9453C15.7055 40.0893 15.2978 39.9194 14.866 39.7773C12.1771 38.8948 9.96435 37.2941 8.09819 35.2172C7.21482 34.2352 6.4035 33.1913 5.67051 32.0934C4.80076 30.7727 4.09919 29.3495 3.58196 27.8564C3.01314 26.3167 2.6632 24.7054 2.54233 23.0692C2.52168 22.9981 2.48437 22.9328 2.43346 22.8789C2.38255 22.825 2.31951 22.7839 2.24952 22.759C1.67689 22.5744 1.09128 22.447 0.513084 22.2882C0.432981 22.2769 0.356021 22.2495 0.286881 22.2077C0.217741 22.1658 0.157865 22.1104 0.110891 22.0448C0.0639177 21.9792 0.0308281 21.9047 0.0136336 21.826C-0.00356099 21.7472 -0.00450137 21.6658 0.0108695 21.5867C0.159848 19.1412 0.87059 16.7625 2.08829 14.6339C3.11333 12.8409 4.48597 11.2689 6.12639 10.0092C7.92657 8.6205 10.0163 7.65149 12.2419 7.1734C12.3432 7.13614 12.4493 7.11314 12.557 7.10509C13.6374 7.20294 13.9153 6.50323 14.1841 5.64291C14.8392 3.56486 16.0754 1.71595 17.7477 0.312931C18.2314 -0.10431 18.2926 -0.10431 18.7244 0.312931C18.9764 0.560321 19.2192 0.818789 19.4545 1.08095C19.8048 1.47234 19.8048 1.64773 19.4082 2.00405C18.4924 2.85935 17.7341 3.86784 17.1677 4.98381C16.8914 5.58083 16.6459 6.19149 16.432 6.8134ZM27.6104 20.4457C27.5789 20.2796 27.5474 20.1485 27.5289 20.0156C27.2709 18.1548 26.6074 16.3728 25.5849 14.7945C24.3948 12.9165 22.7197 11.3919 20.7351 10.3802C19.3935 9.71621 17.939 9.30796 16.4468 9.17653C16.1836 9.14699 16.041 9.22084 16.0465 9.51992C16.1003 11.8387 16.7248 13.9859 18.098 15.8635C19.3807 17.629 21.1515 18.9844 23.1943 19.7645C24.6119 20.3183 26.076 20.4845 27.6104 20.4457Z\"\n fill={color}\n />\n </svg>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n OakBox,\n OakCheckBox,\n OakFlex,\n OakHeading,\n OakLabel,\n OakLink,\n OakMaxWidth,\n OakP,\n} from \"@oaknational/oak-components\";\n\nimport { GoogleSignInButton, OakAcornIcon } from \"@/components\";\n\ntype Props = {\n getGoogleSignInLink: () => Promise<string | null>;\n onSuccessfulSignIn: (signUpToNewsletter: boolean) => Promise<void> | void;\n privacyPolicyUrl: string;\n};\nexport const GoogleSignInView = ({\n getGoogleSignInLink,\n onSuccessfulSignIn,\n privacyPolicyUrl,\n}: Props) => {\n const popupRef = React.useRef<Window | null>(null);\n const [isNewsletterChecked, setIsNewsletterChecked] = React.useState(false);\n\n const onSignInClick = async () => {\n const signInLink = await getGoogleSignInLink();\n if (!signInLink) throw new Error(\"Could not get Google Sign In link\");\n const validLinkRegex = new RegExp(/^(https):/);\n if (validLinkRegex.test(signInLink)) {\n popupRef.current = window.open(\n signInLink,\n \"popUpWindow\",\n \"height=500,width=500,left=100,top=100,resizable=no,\" +\n \"scrollbars=yes,toolbar=yes,menubar=no,location=yes,\" +\n \"directories=no,status=yes\",\n );\n } else {\n // todo: show error toast\n console.error(\"getGoogleSignInLink did not return a valid URL\");\n }\n };\n const handleAuthMessage = React.useCallback(\n (event: MessageEvent) => {\n if (\n event.data &&\n event.data.type === \"oak-google-classroom-auth-complete\"\n ) {\n if (popupRef.current) {\n popupRef.current.close();\n popupRef.current = null;\n }\n if (event.data.success && event.data.session) {\n window?.cookieStore?.set({\n name: \"oak-gclassroom-auth\",\n value: event.data.session,\n partitioned: true,\n sameSite: \"none\",\n path: \"/\",\n });\n onSuccessfulSignIn(isNewsletterChecked);\n }\n }\n },\n [onSuccessfulSignIn, isNewsletterChecked],\n );\n\n React.useEffect(() => {\n window.addEventListener(\"message\", handleAuthMessage);\n return () => {\n window.removeEventListener(\"message\", handleAuthMessage);\n };\n }, [handleAuthMessage]);\n\n return (\n <OakMaxWidth\n $pa={\"inner-padding-xl3\"}\n $maxWidth={\"all-spacing-21\"}\n $ma={\"auto\"}\n >\n <OakFlex $flexDirection=\"column\" $rowGap={\"space-between-m\"}>\n <OakAcornIcon />\n <OakHeading tag={\"h1\"} $font={\"heading-6\"}>\n Sign in to Oak National Academy\n </OakHeading>\n <OakP $font={\"body-2\"}>Welcome back! Please sign-in to continue</OakP>\n <GoogleSignInButton onClick={onSignInClick} />\n <OakFlex $columnGap={\"space-between-xs\"} $alignItems={\"flex-start\"}>\n <OakCheckBox\n id={\"google-sign-in-newsletter-checkbox\"}\n value=\"\"\n checked={isNewsletterChecked}\n onChange={(e) => setIsNewsletterChecked(e.target.checked)}\n />\n <OakBox>\n <OakLabel\n $font={\"body-2\"}\n htmlFor={\"google-sign-in-newsletter-checkbox\"}\n >\n Sign up to receive helpful content via email. Unsubscribe at any\n time. Read our{\" \"}\n </OakLabel>\n <OakLink\n href={privacyPolicyUrl}\n isTrailingIcon={true}\n iconName={\"external\"}\n target={\"_blank\"}\n >\n privacy policy\n </OakLink>\n .\n </OakBox>\n </OakFlex>\n </OakFlex>\n </OakMaxWidth>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { OakHeading, OakP } from \"@oaknational/oak-components\";\n\ntype Props = {\n session: string;\n};\nexport const GoogleClassroomAuthSuccessView: React.FC<Props> = ({\n session,\n}) => {\n React.useEffect(() => {\n window?.opener?.postMessage(\n {\n type: \"oak-google-classroom-auth-complete\",\n success: true,\n session,\n },\n \"*\",\n );\n setTimeout(() => {\n window.close();\n }, 3000);\n }, [session]);\n return (\n <>\n <OakHeading tag=\"h1\">Authentication Successful</OakHeading>\n <OakP>This window will automatically close...</OakP>\n </>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { OakHeading, OakP } from \"@oaknational/oak-components\";\n\nexport const GoogleClassroomBrowseView = () => {\n return (\n <>\n <OakHeading tag=\"h1\">Browsing curriculum content</OakHeading>\n <OakP>This page is a work in progress...</OakP>\n </>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { useRouter, useSearchParams } from \"next/navigation\";\nimport { OakFlex, OakLoadingSpinner } from \"@oaknational/oak-components\";\n\ntype Props = {\n children: React.ReactNode;\n verifySessionAction: (session: string) => Promise<{ authenticated: boolean }>;\n signInUrl: string;\n};\nexport const WithGoogleClassroomAuth: React.FC<Props> = ({\n children,\n verifySessionAction,\n signInUrl,\n}) => {\n const router = useRouter();\n const searchParams = useSearchParams();\n const [hasCheckedAuth, setHasCheckedAuth] = React.useState(false);\n\n const checkAuthenticated = async () => {\n const redirectToSignIn = () => {\n const currentParams = searchParams?.toString() ?? \"\";\n router.push(`${signInUrl}?${currentParams}`);\n };\n const session = (await window.cookieStore.get(\"oak-gclassroom-auth\"))\n ?.value;\n if (!session) {\n redirectToSignIn();\n return;\n }\n const { authenticated } = await verifySessionAction(session);\n if (!authenticated) {\n redirectToSignIn();\n return;\n }\n setHasCheckedAuth(true);\n };\n\n React.useEffect(() => {\n setHasCheckedAuth(false);\n checkAuthenticated();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!hasCheckedAuth)\n return (\n <OakFlex $justifyContent={\"center\"} $alignItems={\"center\"}>\n <OakLoadingSpinner $width={\"all-spacing-15\"} $color={\"oakGreen\"} />\n </OakFlex>\n );\n return <>{children}</>;\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","create","Iterator","verb","Symbol","iterator","v","op","TypeError","pop","push","__read","o","m","r","ar","error","SuppressedError","GoogleSignInButtonIcon","React","createElement","version","xmlns","viewBox","xmlnsXlink","style","display","width","height","fill","d","GoogleSignInButton","props","_a","useState","isHovered","setIsHovered","OakLink","element","textDecoration","onMouseEnter","onMouseLeave","OakFlex","$width","$gap","$justifyContent","$borderRadius","$borderColor","$background","OakSpan","$font","$color","$hoverColor","OakAcornIcon","_b","color","GoogleSignInView","getGoogleSignInLink","onSuccessfulSignIn","privacyPolicyUrl","popupRef","useRef","isNewsletterChecked","setIsNewsletterChecked","handleAuthMessage","useCallback","event","data","type","current","close","success","session","window","cookieStore","set","name","partitioned","sameSite","path","useEffect","addEventListener","removeEventListener","OakMaxWidth","$pa","$maxWidth","$flexDirection","$rowGap","OakHeading","tag","OakP","onClick","signInLink","Error","RegExp","test","open","console","$columnGap","$alignItems","OakCheckBox","id","checked","onChange","target","OakBox","OakLabel","htmlFor","href","isTrailingIcon","iconName","GoogleClassroomAuthSuccessView","opener","postMessage","setTimeout","Fragment","GoogleClassroomBrowseView","WithGoogleClassroomAuth","children","verifySessionAction","signInUrl","router","useRouter","searchParams","useSearchParams","hasCheckedAuth","setHasCheckedAuth","redirectToSignIn","currentParams","toString","concat","get","authenticated","OakLoadingSpinner"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,5 +1,34 @@
1
+ import { Firestore } from '@google-cloud/firestore';
2
+
3
+ type OakGoogleSignInCallback = {
4
+ encryptedSession: string;
5
+ profilePictureUrl?: string;
6
+ };
1
7
  declare class OakGoogleClassroomAddOn {
2
- constructor();
8
+ private readonly encryptionSecret;
9
+ private readonly firestore;
10
+ private readonly googleOAuthClientId;
11
+ private readonly googleOAuthClientSecret;
12
+ private readonly googleOAuthCallbackApiRoute;
13
+ private readonly sessionSecret;
14
+ private encryptionService;
15
+ private firestoreClient;
16
+ private _googleOAuthClientId;
17
+ private _googleOAuthClientSecret;
18
+ private _googleOAuthCallbackApiRoute;
19
+ private _sessionSecret;
20
+ constructor(encryptionSecret: string, firestore: Firestore, googleOAuthClientId: string, googleOAuthClientSecret: string, googleOAuthCallbackApiRoute: string, sessionSecret: string);
21
+ private getOAuthClient;
22
+ getGoogleSignInUrl(loginHint?: string, subscribeToNewsletter?: boolean): Promise<string>;
23
+ handleGoogleSignInCallback(code: string, subscribeToNewsletterFn?: (email: string) => Promise<void>): Promise<OakGoogleSignInCallback>;
24
+ /**
25
+ * Checks if session exists and is authenticated. It will automatically attempt
26
+ * to refresh the session if it has expired.
27
+ * Returns null for an invalid session.
28
+ * Returns the encrypted session (original or refreshed) if valid.
29
+ */
30
+ verifyAuthSession(encryptedSession: string): Promise<string | null>;
3
31
  }
4
32
 
5
33
  export { OakGoogleClassroomAddOn };
34
+ export type { OakGoogleSignInCallback };
package/dist/views.d.ts CHANGED
@@ -1,10 +1,26 @@
1
1
  import React from 'react';
2
2
 
3
- type Props = {
3
+ type Props$2 = {
4
4
  getGoogleSignInLink: () => Promise<string | null>;
5
5
  onSuccessfulSignIn: (signUpToNewsletter: boolean) => Promise<void> | void;
6
6
  privacyPolicyUrl: string;
7
7
  };
8
- declare const GoogleSignInView: ({ getGoogleSignInLink, onSuccessfulSignIn, privacyPolicyUrl, }: Props) => React.JSX.Element;
8
+ declare const GoogleSignInView: ({ getGoogleSignInLink, onSuccessfulSignIn, privacyPolicyUrl, }: Props$2) => React.JSX.Element;
9
+
10
+ type Props$1 = {
11
+ session: string;
12
+ };
13
+ declare const GoogleClassroomAuthSuccessView: React.FC<Props$1>;
14
+
15
+ declare const GoogleClassroomBrowseView: () => React.JSX.Element;
16
+
17
+ type Props = {
18
+ children: React.ReactNode;
19
+ verifySessionAction: (session: string) => Promise<{
20
+ authenticated: boolean;
21
+ }>;
22
+ signInUrl: string;
23
+ };
24
+ declare const WithGoogleClassroomAuth: React.FC<Props>;
9
25
 
10
- export { GoogleSignInView };
26
+ export { GoogleClassroomAuthSuccessView, GoogleClassroomBrowseView, GoogleSignInView, WithGoogleClassroomAuth };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oaknational/google-classroom-addon",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "description": "Components and helpers for the Oak Google Classroom Add-on",
5
5
  "exports": {
6
6
  "./ui": {
@@ -49,11 +49,14 @@
49
49
  "peerDependencies": {
50
50
  "@google-cloud/firestore": ">=7.11.2",
51
51
  "@oaknational/oak-components": ">=1.144.0",
52
- "google-auth-library": ">=10.4.0",
52
+ "google-auth-library": ">=9.15.1",
53
53
  "next": ">=15.4.3",
54
54
  "react": ">=18.3.1",
55
55
  "react-dom": ">=18.3.1"
56
56
  },
57
+ "dependencies": {
58
+ "iron-session": "^8.0.4"
59
+ },
57
60
  "devDependencies": {
58
61
  "@commitlint/cli": "^19.8.1",
59
62
  "@commitlint/config-conventional": "^19.8.1",