diff --git a/.babelrc.js b/.babelrc.js deleted file mode 100644 index 48226a6..0000000 --- a/.babelrc.js +++ /dev/null @@ -1,40 +0,0 @@ -const ignore = [ - '**/__test__/**', -] -const presets = [ - ["@babel/flow"], - ["@babel/react"], - ["@babel/env"], -] -const plugins = [ - "@babel/plugin-transform-runtime", - "@babel/plugin-proposal-object-rest-spread", - "@babel/plugin-proposal-class-properties", -] - -module.exports = { - env: { - development: { - ignore, - presets, - plugins, - }, - production: { - ignore, - presets, - plugins, - }, - test: { - presets, - plugins, - }, - module: { - ignore, - presets: [ - ["@babel/flow"], - ["@babel/env", { targets: '', modules: false }], - ], - plugins, - }, - } -} diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index 9d47586..0000000 --- a/.browserslistrc +++ /dev/null @@ -1,8 +0,0 @@ -# Build for Node -node 8 -# Build for most browsers -> 1% - -# No generator support -not ie <= 11 -not operamini all diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 9adf46f..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "extends": ["standard", "prettier", "plugin:jest/recommended"], - "plugins": ["flowtype", "prettier", "react"], - "parser": "babel-eslint", - "parserOptions": { - "jsx": true - }, - "rules": { - "react/jsx-uses-react": 2, - "react/jsx-uses-vars": 2, - "flowtype/define-flow-type": 2, - "prettier/prettier": [ - "error", - { - "parser": "flow", - "singleQuote": true, - "bracketSpacing": true, - "semi": false - } - ] - } -} diff --git a/.flowconfig b/.flowconfig deleted file mode 100644 index 5b5e774..0000000 --- a/.flowconfig +++ /dev/null @@ -1,8 +0,0 @@ -[ignore] -.*.json$ - -[include] - -[libs] - -[options] diff --git a/.gitignore b/.gitignore deleted file mode 100644 index f27d450..0000000 --- a/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -browser -coverage -dist-lib -dist-popup -lib -module -node_modules diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index f599e28..0000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -10 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 17c0cd7..0000000 --- a/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -language: node_js -node_js: - - 10 - - 12 - - node - - lts/* -env: - - DEFAULT_NODE_VERSION=10 -script: - - npm test -after_success: - - if [ "$TRAVIS_NODE_VERSION" == "$DEFAULT_NODE_VERSION" ]; then - npm install coveralls; - node_modules/.bin/jest --coverage --coverageReporters=text-lcov | - node_modules/.bin/coveralls; - ./.travis_publish; - fi diff --git a/.travis_publish b/.travis_publish deleted file mode 100755 index f3931f5..0000000 --- a/.travis_publish +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -REPO_NAME="solid/solid-auth-client" -PUBLICATION_BRANCH=gh-pages - -# Only publish from the main repository's master branch -if [ "$TRAVIS_REPO_SLUG" != "$REPO_NAME" ] || [ "$TRAVIS_BRANCH" != "master" ] || [ "$TRAVIS_PULL_REQUEST" != "false" ]; then exit; fi -echo -e "Building $PUBLICATION_BRANCH...\n" - -# Checkout the branch -REPO_PATH=$PWD -pushd $HOME -git clone --quiet --depth=1 --branch=$PUBLICATION_BRANCH https://${GH_TOKEN}@github.com/$REPO_NAME publish 2>&1 > /dev/null -cd publish - -# Don't update if already at the latest version -if [[ `git log -1 --pretty=%B` == *$TRAVIS_COMMIT* ]]; then exit; fi - -# Update pages -rm -r * 2> /dev/null -mkdir dist -cp $REPO_PATH/README* . -cp -r $REPO_PATH/dist-lib/* dist -cp -r $REPO_PATH/dist-popup/* dist - -# Commit and push latest version -git add . -git config user.name "Travis" -git config user.email "travis@travis-ci.org" -git commit -m "Update to $TRAVIS_COMMIT." -git push -fq origin $PUBLICATION_BRANCH 2>&1 > /dev/null -popd diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 5d7c4c9..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 - present - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index a8b4264..42271d7 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,10 @@ a [Node Solid Server](https://github.com/solid/node-solid-server/). or [solid-auth-fetcher](https://github.com/solid/solid-auth-fetcher) instead, which leverage the secure DPoP authentication mechanism from the current [Solid specification](https://solid.github.io/authentication-panel/solid-oidc/), -as implemented by [all the various Solid server implementations](https://github.com/solid/test-suite).** +as implemented by +the [Community Solid Server](https://github.com/solid/community-server/) +and +the [Enterprise Solid Server](https://inrupt.com/products/enterprise-solid-server/).** ## Usage In the browser, the library is accessible through `solid.auth`: diff --git a/bin/solid-auth-client.js b/bin/solid-auth-client.js deleted file mode 100755 index 3d9b6e9..0000000 --- a/bin/solid-auth-client.js +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env node - -const fs = require('fs') -const path = require('path') - -const program = require('commander') - -const { version } = require('../package.json') - -// helpers - -function ns(fn) { - return function (...args) { - fn('[solid-auth-client]', ...args) - } -} - -const log = ns(console.log) -const warn = ns(console.log) - -const issueUrl = 'https://github.com/solid/solid-auth-client/issues' - -// CLI - -program - .version(version) - .command('generate-popup [app-name] [filename]') - .description( - 'build a secure login app named for your application. ' + - '[app-name] is the name of your app. (default "the application") ' + - '[filename] is the name of the popup html file. (default "popup.html").' - ) - .action(generatePopup) - -program.parse(process.argv) - -// Show help if called with no arguments -if (!process.argv.slice(2).length) { - program.outputHelp() -} - -// generatePopup command - -function generatePopup(appName = '', filename = 'popup.html') { - log(`Generating "${filename}" with app name "${appName}".`) - - const templateFilename = path.resolve( - __dirname, - '..', - 'dist-popup/popup-template.html' - ) - if (!fs.existsSync(templateFilename)) { - warn( - `Could not find popup template. Expected it to be located at "${templateFilename}". Please file a bug at ${issueUrl}` - ) - return - } - - let popupTemplateBuffer - try { - popupTemplateBuffer = fs.readFileSync(templateFilename) - } catch (err) { - warn(`Could not read the popup template. Please file a bug at ${issueUrl}`) - console.error(err) - return - } - - const popupBuffer = popupTemplateBuffer - .toString() - .replace(/['"]{{APP_NAME}}['"]/g, JSON.stringify(appName)) - - try { - fs.writeFileSync(filename, popupBuffer) - } catch (err) { - warn(`Could not write the popup to "${filename}".`) - console.error(err) - return - } - - log(`Popup is generated and available at "${filename}"!`) -} diff --git a/demo/components/App.js b/demo/components/App.js deleted file mode 100644 index 4bcf427..0000000 --- a/demo/components/App.js +++ /dev/null @@ -1,21 +0,0 @@ -// @flow -import React from 'react' - -import AuthButtons from './AuthButtons' -import Copy from './Copy' -import PersonalInfo from './PersonalInfo' -import Footer from './Footer' - -const App = () => ( -
- - - -
-) - -export default App diff --git a/demo/components/AuthButtons.js b/demo/components/AuthButtons.js deleted file mode 100644 index 13bdb6a..0000000 --- a/demo/components/AuthButtons.js +++ /dev/null @@ -1,41 +0,0 @@ -// @flow -import React from 'react' -import auth from '../../src/' - -const popupUri = process.env.POPUP_URI - -export default class AuthButtons extends React.Component { - constructor(props: {}) { - super(props) - auth.trackSession((session) => this.setState({ loggedIn: !!session })) - } - - logout() { - auth.logout() - } - - login() { - const idp = window.prompt( - 'What is the URL of your identity provider?', - 'https://solidcommunity.net/' - ) - if (idp) { - auth.login(idp) - } - } - - popupLogin() { - auth.popupLogin({ popupUri }) - } - - render() { - return this.state.loggedIn ? ( - - ) : ( -
- - -
- ) - } -} diff --git a/demo/components/Copy.js b/demo/components/Copy.js deleted file mode 100644 index ee735d9..0000000 --- a/demo/components/Copy.js +++ /dev/null @@ -1,22 +0,0 @@ -// @flow -import React from 'react' - -import auth from '../../src/' - -export default class Copy extends React.Component { - componentWillMount() { - auth.trackSession((session) => - this.setState({ webId: session && session.webId }) - ) - } - - render() { - const { webId } = this.state - return ( -

- This is a simple demo of the Solid Auth Client. You're currently - {webId ? ' logged in' : ' anonymous'}. -

- ) - } -} diff --git a/demo/components/Footer.js b/demo/components/Footer.js deleted file mode 100644 index 97131c4..0000000 --- a/demo/components/Footer.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react' - -const Footer = () => ( -

- - Source on GitHub - -

-) - -export default Footer diff --git a/demo/components/PersonalInfo.js b/demo/components/PersonalInfo.js deleted file mode 100644 index e7d4445..0000000 --- a/demo/components/PersonalInfo.js +++ /dev/null @@ -1,25 +0,0 @@ -// @flow -import React from 'react' - -import auth from '../../src/' - -export default class PersonalInfo extends React.Component { - componentWillMount() { - auth.trackSession((session) => - this.setState({ webId: session && session.webId }) - ) - } - - render() { - const { webId } = this.state - return webId ? ( -

- Your WebID is{' '} - - {webId} - - . -

- ) : null - } -} diff --git a/demo/index.css b/demo/index.css deleted file mode 100644 index 933e5f7..0000000 --- a/demo/index.css +++ /dev/null @@ -1,34 +0,0 @@ -body, button { - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-size: 11pt; - line-height: 1.4; -} - -body { - max-width: 800px; - margin: 0 auto; - padding: 1em; -} - -nav { - display: flex; - align-items: center; -} - -nav h1 { - flex-grow: 1; - margin: 0; -} - -nav button { - border: 1px solid #999999; - border-radius: .5em; - margin-right: .5em; - padding: .25em .5em; - background-color: #eeeeee; - cursor: pointer; - font-weight: bold; -} -nav button:hover { - background-color: #f9f9f9; -} diff --git a/demo/index.js b/demo/index.js deleted file mode 100644 index 5e3b0d7..0000000 --- a/demo/index.js +++ /dev/null @@ -1,25 +0,0 @@ -// @flow -import React from 'react' -import ReactDOM from 'react-dom' - -import './index.css' - -import App from './components/App' - -import auth from '../src' - -// for demo/debug purposes -window.solid = { auth } -console.log('Welcome to the solid-auth-client demo!') -console.log( - 'Check out window.solid.auth to explore the interface at the code level.' -) -console.log( - 'If you find a bug please file it at https://github.com/solid/solid-auth-client/issues/' -) - -const container = document.createElement('div') -if (document.body) { - document.body.appendChild(container) -} -ReactDOM.render(, container) diff --git a/dist/popup-template.html b/dist/popup-template.html new file mode 100644 index 0000000..0c648da --- /dev/null +++ b/dist/popup-template.html @@ -0,0 +1,10139 @@ + + + + Select your Identity Provider + + + + +
+ + diff --git a/dist/popup.bundle.js.map b/dist/popup.bundle.js.map new file mode 100644 index 0000000..792915d --- /dev/null +++ b/dist/popup.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./popup-app/index.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/preact/compat/dist/compat.module.js","webpack:///./node_modules/preact/hooks/dist/hooks.module.js","webpack:///./node_modules/preact/dist/preact.module.js","webpack:///./src/ipc.js","webpack:///./src/storage.js","webpack:///./popup-app/components/IdpCallback.js","webpack:///./src/index.js","webpack:///./src/solid-auth-client.js","webpack:///./node_modules/events/events.js","webpack:///./src/authn-fetch.js","webpack:///external \"fetch\"","webpack:///./src/url-util.js","webpack:///./src/host.js","webpack:///./src/session.js","webpack:///./src/webid-oidc.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///./node_modules/auth-header/dist/index.js","webpack:///./node_modules/auth-header/dist/format.js","webpack:///./node_modules/auth-header/dist/util.js","webpack:///./node_modules/auth-header/dist/parse.js","webpack:///./node_modules/@solid/oidc-rp/src/index.js","webpack:///./node_modules/@solid/oidc-rp/src/RelyingParty.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/assert/assert.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/util/util.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/util/node_modules/inherits/inherits_browser.js","webpack:///external \"window\"","webpack:///./node_modules/@solid/jose/src/index.js","webpack:///./node_modules/@solid/jose/src/crypto.js","webpack:///./node_modules/isomorphic-webcrypto/src/browser.mjs","webpack:///./node_modules/isomorphic-webcrypto/src/webcrypto-shim.mjs","webpack:///./node_modules/@solid/jose/src/jose/JWA.js","webpack:///./node_modules/@solid/jose/src/algorithms/index.js","webpack:///./node_modules/@solid/jose/src/algorithms/NONE.js","webpack:///./node_modules/@solid/jose/src/algorithms/HMAC.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/base64url/index.js","webpack:///./node_modules/base64url/dist/base64url.js","webpack:///./node_modules/base64url/dist/pad-string.js","webpack:///./node_modules/@solid/jose/src/text-encoder/index.js","webpack:///@sinonjs/text-encoding (ignored)","webpack:///./node_modules/@solid/jose/src/algorithms/RSASSA-PKCS1-v1_5.js","webpack:///./node_modules/@solid/jose/src/algorithms/SupportedAlgorithms.js","webpack:///./node_modules/@solid/jose/src/errors/NotSupportedError.js","webpack:///./node_modules/@solid/jose/src/errors/index.js","webpack:///./node_modules/@solid/jose/src/errors/DataError.js","webpack:///./node_modules/@solid/jose/src/jose/JWK.js","webpack:///./node_modules/@solid/jose/src/jose/JWKSet.js","webpack:///./node_modules/@solid/jose/src/jose/JWT.js","webpack:///./node_modules/@solid/jose/src/jose/JWS.js","webpack:///./node_modules/@solid/jose/src/jose/JOSEHeader.js","webpack:///./node_modules/@solid/oidc-rp/src/AuthenticationRequest.js","webpack:///./node_modules/@solid/oidc-rp/src/FormUrlEncoded.js","webpack:///./node_modules/@solid/oidc-rp/src/AuthenticationResponse.js","webpack:///./node_modules/@solid/oidc-rp/src/IDToken.js","webpack:///./node_modules/@solid/oidc-rp/src/Session.js","webpack:///./node_modules/@solid/oidc-rp/src/onHttpError.js","webpack:///./node_modules/@solid/oidc-rp/src/PoPToken.js","webpack:///./node_modules/standard-http-error/index.js","webpack:///./node_modules/standard-error/index.js","webpack:///./src/popup.js","webpack:///./popup-app/components/IdpSelect.js","webpack:///./popup-app/components/IdpSelect.css?72c3","webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///./popup-app/components/IdpSelect.css","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./popup-app/components/NoParent.js","webpack:///./popup-app/index.css?0423","webpack:///./popup-app/index.css"],"names":["findAppOrigin","then","appOrigin","baseUrl","window","location","href","replace","host","appName","process","trim","element","hash","setTimeout","close","idps","defaultIdps","some","idp","url","unshift","displayName","ReactDOM","render","document","getElementById","catch","error","alert","opener","getStoredAppOrigin","client","Client","request","storeAppOrigin","getData","sessionStorage","origin","updateStorage","data","NAMESPACE","Server","constructor","clientWindow","clientOrigin","handle","_clientWindow","_clientOrigin","_handler","_messageListener","event","_handleMessage","console","warn","req","method","id","args","ret","postMessage","start","addEventListener","stop","removeEventListener","serverWindow","serverOrigin","_serverWindow","_serverOrigin","Math","random","Promise","resolve","reject","responseListener","timeout","Error","resp","hasOwnProperty","clearTimeout","defaultStorage","hasLocalStorage","asyncStorage","localStorage","memStorage","store","serialized","getItem","JSON","parse","e","update","currentData","newData","setItem","stringify","storage","key","val","removeItem","ipcStorage","IdpCallback","Component","loggedIn","props","componentDidMount","session","auth","currentSession","setState","componentDidUpdate","afterLoggedIn","state","message","SolidAuthClient","Object","getOwnPropertyNames","prototype","forEach","property","value","bind","warned","defineProperty","enumerable","get","globalFetch","fetch","EventEmitter","input","options","emit","toUrlString","authnFetch","login","defaultLoginOptions","currentUrlNoParams","WebIdOidc","popupLogin","test","popupUri","URL","toString","callbackUri","popup","openIdpPopup","obtainSession","_pendingSession","getSession","err","saveSession","trackSession","callback","on","stopTrackSession","removeListener","logout","clearSession","split","headers","copyHeaders","shouldShareCredentials","fetchWithCredentials","status","updateHostFromResponse","requestHost","getHost","requiresAuth","origHeaders","getLocation","pathname","currentUrl","navigateTo","originOf","hosts","saveHost","rp","getRegisteredRp","saveAppHashFragment","sendAuthRequest","getStoredRp","restoreAppHashFragment","storeData","validateResponse","webId","idClaims","sub","issuer","credentials","info","provider","registration","redirect_uris","includes","registerRp","storeRp","rpConfig","RelyingParty","from","opts","responseType","clientNameI18n","entries","filter","_","startsWith","supplementaryOptions","logo_uri","logoUri","contacts","client_name","clientName","grant_types","response_types","scope","defaults","authenticate","redirect_uri","response_type","display","register","createRequest","appHashFragment","wwwAuthHeader","authorization","scheme","params","popToken","PoPToken","issueFor","module","exports","require","assert","Headers","global","JWKSet","AuthenticationRequest","AuthenticationResponse","onHttpError","FormUrlEncoded","validation","validate","valid","jwks","importKeys","idpId","oobRegistration","assign","discover","configuration","registration_endpoint","getRegistration","response","json","uri","body","serialize","jwks_uri","create","match","redirect","authResponse","userinfo","accessToken","userinfo_endpoint","access_token","logoutRequest","id_token_hint","post_logout_redirect_uri","end_session_endpoint","log","search","encode","undefined","SESSION_PRIVATE_KEY","popTokenFor","idToken","base64url","crypto","JWT","endpoint","authorization_endpoint","client_id","Array","getRandomValues","Uint8Array","nonce","all","subtle","digest","name","digests","Buffer","generateSessionKeys","sessionKeys","storeSessionKeys","request_parameter_supported","encodeRequestParams","encodedParams","generateKey","modulusLength","publicExponent","keyPair","exportKey","publicKey","privateKey","jwkPair","publicJwk","privateJwk","public","private","excludeParams","keysToEncode","keys","payload","requestParamJwt","header","alg","requestParamCompact","newParams","pairs","push","encodeURIComponent","join","decode","obj","pair","decodeURIComponent","IDToken","Session","HttpError","mode","parseResponse","errorResponse","matchRequest","validateStateParam","validateResponseMode","validateResponseParams","exchangeAuthorizationCode","validateIDToken","fromAuthResponse","substring","errorCode","errorParams","octets","encoded","expectedParams","code","id_token","token_type","secret","token_endpoint","bodyContents","authMethod","set","tokenResponse","decryptIDToken","decodeIDToken","validateIssuer","validateAudience","resolveKeys","verifySignature","validateExpires","verifyNonce","validateAcr","validateAuthTime","validateAccessTokenHash","validateAuthorizationCodeHash","jwt","decoded","decodeError","cause","iss","aud","azp","isArray","isFreshJwks","expectedAlgorithm","verify","verified","exp","floor","Date","now","REQUIRED_CLAIMS","TokenClaimsSet","iat","nbf","jti","auth_time","acr","amr","claim","validationError","payloadResult","credentialType","sessionKey","accessClaims","rpAuthOptions","refresh_token","hasCredentials","bearerTokenFor","token","errorMessage","statusText","statusCode","JWK","DEFAULT_MAX_AGE","resourceServerUri","jwk","importKey","importedSessionJwk","issue","max","cryptoKey","width","height","left","screenX","innerWidth","top","screenY","innerHeight","settings","open","popupServer","popupHandler","foundSessionCb","IdpSelect","React","target","preventDefault","loginOptions","getClient","getStorage","idpInput","focus","handleSelectIdp","handleChangeIdp","handleBlurIdp","map","NoParent"],"mappings":"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A;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AA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CA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;ACnBA,8CAAa;;AAEb,mBAAmB,mBAAO,CAAC,EAAe;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,EAAO;AAC1B;AACA;AACA;AACA,0BAA0B;AAC1B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,8BAA8B;AAC9B;AACA,mDAAmD;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,gDAAgD;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gCAAgC,oBAAoB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACzfA;AACA;AACA;AACA;AACA;;AAEa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,uBAAuB,SAAS;AAChC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,KAAK;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAO,CAAC,EAAoB;;AAE/C;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA,WAAW,SAAS;AACpB;AACA,mBAAmB,mBAAO,CAAC,EAAU;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kCAAkC;AAC7D,2BAA2B,mDAAmD;AAC9E;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9rBA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;ACvLtC;AACA;AACA;AACA;AACA;AACA,C;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtBA,wB;;;;;;ACAA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,EAAU;AACjC,YAAY,mBAAO,CAAC,EAAY;AAChC,YAAY,mBAAO,CAAC,EAAY;AAChC,eAAe,mBAAO,CAAC,EAAe;AACtC,YAAY,mBAAO,CAAC,EAAY;AAChC,YAAY,mBAAO,CAAC,EAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpBA,iBAAiB,mBAAO,CAAC,EAAsB;;AAE/C;;;;;;;;ACFA;AAAA;AAA6B;AACd,4EAAa;;;;;;;;ACD5B;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC,sCAAsC,SAAI;AAC3C;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,wBAAwB;AACjC;;AAEA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,8FAA8F,8BAA8B;AAC5H;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wDAAwD;AACxD,mBAAmB;AACnB;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA,2FAA2F;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,iDAAiD;AACjD;AACA;;AAEA,mBAAmB,yCAAyC;AAC5D,mBAAmB;;AAEnB;AACA;AACA,2BAA2B;;AAE3B;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,OAAO;AACtC;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,eAAe;AAC7D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,yBAAyB;;AAEzB,0CAA0C;AAC1C;AACA,4BAA4B,SAAS;AACrC;AACA,gDAAgD;AAChD;AACA,4BAA4B,SAAS;AACrC;AACA,kCAAkC;AAClC;AACA;AACA,+DAA+D;AAC/D;AACA;AACA,4BAA4B,SAAS;AACrC;AACA,0CAA0C;AAC1C,4BAA4B,gBAAgB;AAC5C;AACA;AACA,qGAAqG;AACrG;AACA,wBAAwB,iBAAiB,SAAS;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C,iEAAiE;AAC/G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA,4DAA4D;AAC5D;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wDAAwD;AACxD,wDAAwD;AACxD,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qEAAqE;AACrE;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wDAAwD;AACxD,wDAAwD;AACxD,qBAAqB;AACrB;;AAEA;AACA;AACA,6EAA6E;AAC7E;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gDAAgD;AAChD,gDAAgD;AAChD,aAAa;;AAEb;AACA;;AAEA;AACA,8BAA8B,wBAAwB,oCAAoC,EAAE;AAC5F,8BAA8B,iBAAiB;AAC/C,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAgB,iEAAE;;;;;;;ACnmBlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAO,CAAC,EAAe;AACnD,OAAO,kBAAkB,GAAG,mBAAO,CAAC,EAAW;;AAE/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,cAAc;AAC3B;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB,aAAa,cAAc;AAC3B,aAAa,cAAc;AAC3B;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AChGA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,EAAQ;AAC7B,aAAa,mBAAO,CAAC,EAAQ;AAC7B,0BAA0B,mBAAO,CAAC,EAAqB;AACvD,4BAA4B,mBAAO,CAAC,EAAuB;;AAE3D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;;AAEhD;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;;AAElD;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;;;;;;;;ACnJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;ACtBA,8CAAY;;AAEZ;AACA;AACA;AACA;AACA,kBAAkB,mBAAO,CAAC,EAAW;AACrC,eAAe,mBAAO,CAAC,EAAsB;AAC7C,oBAAoB,mBAAO,CAAC,EAAiB;;AAE7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB,aAAa,OAAO;AACpB;AACA,eAAe;AACf;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,aAAa,mBAAO,CAAC,EAAW;AAChC,cAAc,mBAAO,CAAC,EAAS;AAC/B,cAAc,mBAAO,CAAC,EAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,QAAQ;AAChC;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;AC5vDY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,UAAU;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,QAAQ,WAAW;;AAEnB;AACA;AACA,QAAQ,UAAU;;AAElB;AACA;;;;;;;ACnFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;ACJA,iBAAiB,mBAAO,CAAC,EAAkB;AAC3C;;;;;;;;ACDA,8CAAa;AACb,8CAA8C,cAAc;AAC5D,mBAAmB,mBAAO,CAAC,EAAc;AACzC;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACpCA,8CAAa;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnBA;AACA;AACA,IAAI,mBAAO,CAAC,EAAwB;AACpC;;;;;;;;ACHA,e;;;;;;;ACAA,8CAAY;;AAEZ;AACA;AACA;AACA;AACA,kBAAkB,mBAAO,CAAC,EAAW;AACrC,aAAa,mBAAO,CAAC,EAAW;AAChC,oBAAoB,mBAAO,CAAC,EAAiB;;AAE7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB,aAAa,aAAa;AAC1B;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB,aAAa,aAAa;AAC1B,aAAa,aAAa;AAC1B;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa,IAAI;AACjB,eAAe;AACf;AACA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;ACzHA;AACA;AACA;AACA,0BAA0B,mBAAO,CAAC,EAA6B;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,IAAI;AAC1B;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACbA;AACA,aAAa,mBAAO,CAAC,EAAa;AAClC,qBAAqB,mBAAO,CAAC,EAAqB;AAClD;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;ACZY;;AAEZ;AACA;AACA;AACA;AACA,YAAY,mBAAO,CAAC,EAAO;;AAE3B;AACA;AACA;AACA;AACA,gBAAgB,6CAA6C,KAAK;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;ACvCY;;AAEZ;AACA;AACA;AACA,YAAY,mBAAO,CAAC,EAAO;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO,KAAK;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AC/CA;AACA;AACA;AACA,kBAAkB,mBAAO,CAAC,EAAW;AACrC,YAAY,mBAAO,CAAC,EAAO;AAC3B,kBAAkB,mBAAO,CAAC,EAAqB;AAC/C,mBAAmB,mBAAO,CAAC,EAAc;;AAEzC;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA,wCAAwC;AACxC,OAAO;AACP;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA,mCAAmC,gBAAgB;;AAEnD;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,4DAA4D;AAC3E,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,aAAa,UAAU;AACvB;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB,aAAa,OAAO;AACpB;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACrOA;AACA;AACA;AACA,kBAAkB,mBAAO,CAAC,EAAW;AACrC,YAAY,mBAAO,CAAC,EAAO;AAC3B,OAAO,YAAY,GAAG,mBAAO,CAAC,EAAW;AACzC,mBAAmB,mBAAO,CAAC,EAAc;;AAEzC;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe;AA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","file":"popup.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/* global sessionStorage */\nimport React from 'react'\nimport ReactDOM from 'react-dom'\n\nimport { Client } from '../src/ipc'\nimport { getData, updateStorage } from '../src/storage'\n\nimport IdpCallback from './components/IdpCallback'\nimport IdpSelect from './components/IdpSelect'\nimport NoParent from './components/NoParent'\n\nimport defaultIdps from './idps.json'\n\nimport './index.css'\n\nfindAppOrigin()\n .then((appOrigin) => {\n const baseUrl = window.location.href.replace(/(\\/\\/[^/]*\\/).*/, '$1')\n const host = baseUrl.replace(/^[^:]+:|\\//g, '')\n const appName = process.env.APP_NAME.trim() || host\n\n let element\n if (!appOrigin) {\n element = \n } else if (window.location.hash) {\n element = (\n setTimeout(window.close, 750)}\n />\n )\n } else {\n const idps = [...defaultIdps]\n if (!idps.some((idp) => idp.url === baseUrl)) {\n idps.unshift({ displayName: host, url: baseUrl })\n }\n element = (\n \n )\n }\n\n ReactDOM.render(element, document.getElementById('app-container'))\n })\n .catch((error) => {\n window.alert(error)\n window.close()\n })\n\nasync function findAppOrigin() {\n if (!window.opener) {\n return null\n }\n let appOrigin = await getStoredAppOrigin()\n if (appOrigin) {\n return appOrigin\n }\n const client = new Client(window.opener, '*')\n appOrigin = await client.request('getAppOrigin')\n await storeAppOrigin(appOrigin)\n return appOrigin\n}\n\nasync function getStoredAppOrigin() {\n const { appOrigin } = await getData(sessionStorage)\n return appOrigin\n}\n\nfunction storeAppOrigin(origin) {\n return updateStorage(sessionStorage, (data) => ({\n ...data,\n appOrigin: origin,\n }))\n}\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","import{useState as n,useReducer as t,useEffect as e,useLayoutEffect as r,useRef as u,useImperativeHandle as o,useMemo as i,useCallback as c,useContext as l,useDebugValue as f}from\"preact/hooks\";export*from\"preact/hooks\";import{Component as a,createElement as s,options as h,toChildArray as v,Fragment as p,hydrate as d,render as m,__u as y,cloneElement as b,createRef as _,createContext as E}from\"preact\";export{createElement,createContext,createRef,Fragment,Component}from\"preact\";function S(n,t){for(var e in t)n[e]=t[e];return n}function g(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function w(n){this.props=n}function C(n,t){function e(n){var e=this.props.ref,r=e==n.ref;return!r&&e&&(e.call?e(null):e.current=null),t?!t(this.props,n)||!r:g(this.props,n)}function r(t){return this.shouldComponentUpdate=e,s(n,t)}return r.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",r.prototype.isReactComponent=!0,r.__f=!0,r}(w.prototype=new a).isPureReactComponent=!0,w.prototype.shouldComponentUpdate=function(n,t){return g(this.props,n)||g(this.state,t)};var R=h.__b;h.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),R&&R(n)};var x=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function k(n){function t(t,e){var r=S({},t);return delete r.ref,n(r,(e=t.ref||e)&&(\"object\"!=typeof e||\"current\"in e)?e:null)}return t.$$typeof=x,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var A=function(n,t){return null==n?null:v(v(n).map(t))},N={map:A,forEach:A,count:function(n){return n?v(n).length:0},only:function(n){var t=v(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:v},O=h.__e;function L(n){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),(n=S({},n)).__c=null,n.__k=n.__k&&n.__k.map(L)),n}function U(n){return n&&(n.__v=null,n.__k=n.__k&&n.__k.map(U)),n}function F(){this.__u=0,this.t=null,this.__b=null}function M(n){var t=n.__.__c;return t&&t.__e&&t.__e(n)}function D(n){var t,e,r;function u(u){if(t||(t=n()).then(function(n){e=n.default||n},function(n){r=n}),r)throw r;if(!e)throw t;return s(e,u)}return u.displayName=\"Lazy\",u.__f=!0,u}function I(){this.u=null,this.o=null}h.__e=function(n,t,e){if(n.then)for(var r,u=t;u=u.__;)if((r=u.__c)&&r.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),r.__c(n,t.__c);O(n,t,e)},(F.prototype=new a).__c=function(n,t){var e=this;null==e.t&&(e.t=[]),e.t.push(t);var r=M(e.__v),u=!1,o=function(){u||(u=!0,t.componentWillUnmount=t.__c,r?r(i):i())};t.__c=t.componentWillUnmount,t.componentWillUnmount=function(){o(),t.__c&&t.__c()};var i=function(){var n;if(!--e.__u)for(e.__v.__k[0]=U(e.state.__e),e.setState({__e:e.__b=null});n=e.t.pop();)n.forceUpdate()},c=e.__v;c&&!0===c.__h||e.__u++||e.setState({__e:e.__b=e.__v.__k[0]}),n.then(o,o)},F.prototype.componentWillUnmount=function(){this.t=[]},F.prototype.render=function(n,t){this.__b&&(this.__v.__k&&(this.__v.__k[0]=L(this.__b)),this.__b=null);var e=t.__e&&s(p,null,n.fallback);return e&&(e.__h=null),[s(p,null,t.__e?null:n.children),e]};var T=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]=i.__.length&&i.__.push({}),i.__[t]}function m(n){return o=1,p(k,n)}function p(n,r,o){var i=v(t++,2);return i.t=n,i.__c||(i.__=[o?o(r):k(void 0,r),function(n){var t=i.t(i.__[0],n);i.__[0]!==t&&(i.__=[t,i.__[1]],i.__c.setState({}))}],i.__c=u),i.__}function y(r,o){var i=v(t++,3);!n.__s&&j(i.__H,o)&&(i.__=r,i.__H=o,u.__H.__h.push(i))}function l(r,o){var i=v(t++,4);!n.__s&&j(i.__H,o)&&(i.__=r,i.__H=o,u.__h.push(i))}function h(n){return o=5,_(function(){return{current:n}},[])}function s(n,t,u){o=6,l(function(){\"function\"==typeof n?n(t()):n&&(n.current=t())},null==u?u:u.concat(n))}function _(n,u){var r=v(t++,7);return j(r.__H,u)&&(r.__=n(),r.__H=u,r.__h=n),r.__}function A(n,t){return o=8,_(function(){return n},t)}function F(n){var r=u.context[n.__c],o=v(t++,9);return o.__c=n,r?(null==o.__&&(o.__=!0,r.sub(u)),r.props.value):n.__}function T(t,u){n.useDebugValue&&n.useDebugValue(u?u(t):t)}function d(n){var r=v(t++,10),o=m();return r.__=n,u.componentDidCatch||(u.componentDidCatch=function(n){r.__&&r.__(n),o[1](n)}),[o[0],function(){o[1](void 0)}]}function q(){i.forEach(function(t){if(t.__P)try{t.__H.__h.forEach(b),t.__H.__h.forEach(g),t.__H.__h=[]}catch(u){t.__H.__h=[],n.__e(u,t.__v)}}),i=[]}n.__r=function(n){c&&c(n),t=0;var r=(u=n.__c).__H;r&&(r.__h.forEach(b),r.__h.forEach(g),r.__h=[])},n.diffed=function(t){f&&f(t);var u=t.__c;u&&u.__H&&u.__H.__h.length&&(1!==i.push(u)&&r===n.requestAnimationFrame||((r=n.requestAnimationFrame)||function(n){var t,u=function(){clearTimeout(r),x&&cancelAnimationFrame(t),setTimeout(n)},r=setTimeout(u,100);x&&(t=requestAnimationFrame(u))})(q))},n.__c=function(t,u){u.some(function(t){try{t.__h.forEach(b),t.__h=t.__h.filter(function(n){return!n.__||g(n)})}catch(r){u.some(function(n){n.__h&&(n.__h=[])}),u=[],n.__e(r,t.__v)}}),e&&e(t,u)},n.unmount=function(t){a&&a(t);var u=t.__c;if(u&&u.__H)try{u.__H.__.forEach(b)}catch(t){n.__e(t,u.__v)}};var x=\"function\"==typeof requestAnimationFrame;function b(n){\"function\"==typeof n.__c&&n.__c()}function g(n){n.__c=n.__()}function j(n,t){return!n||n.length!==t.length||t.some(function(t,u){return t!==n[u]})}function k(n,t){return\"function\"==typeof t?t(n):t}export{m as useState,p as useReducer,y as useEffect,l as useLayoutEffect,h as useRef,s as useImperativeHandle,_ as useMemo,A as useCallback,F as useContext,T as useDebugValue,d as useErrorBoundary};\n//# sourceMappingURL=hooks.module.js.map\n","var n,l,u,i,t,o,r,f={},e=[],c=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function s(n,l){for(var u in l)n[u]=l[u];return n}function a(n){var l=n.parentNode;l&&l.removeChild(n)}function h(n,l,u){var i,t,o,r=arguments,f={};for(o in l)\"key\"==o?i=l[o]:\"ref\"==o?t=l[o]:f[o]=l[o];if(arguments.length>3)for(u=[u],o=3;o1&&T(t,l,u),l=x(u,t,t,n.__k,null,t.__e,l),\"function\"==typeof n.type&&(n.__d=l)))}function $(l,u,i,t,o,r,f,e,c){var a,h,v,y,_,w,k,g,b,x,A,P=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,r=[e]),(a=n.__b)&&a(u);try{n:if(\"function\"==typeof P){if(g=u.props,b=(a=P.contextType)&&t[a.__c],x=a?b?b.props.value:a.__:t,i.__c?k=(h=u.__c=i.__c).__=h.__E:(\"prototype\"in P&&P.prototype.render?u.__c=h=new P(g,x):(u.__c=h=new d(g,x),h.constructor=P,h.render=M),b&&b.sub(h),h.props=g,h.state||(h.state={}),h.context=x,h.__n=t,v=h.__d=!0,h.__h=[]),null==h.__s&&(h.__s=h.state),null!=P.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=s({},h.__s)),s(h.__s,P.getDerivedStateFromProps(g,h.__s))),y=h.props,_=h.state,v)null==P.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(null==P.getDerivedStateFromProps&&g!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(g,x),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(g,h.__s,x)||u.__v===i.__v){h.props=g,h.state=h.__s,u.__v!==i.__v&&(h.__d=!1),h.__v=u,u.__e=i.__e,u.__k=i.__k,h.__h.length&&f.push(h),T(u,e,l);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(g,h.__s,x),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,_,w)})}h.context=x,h.props=g,h.state=h.__s,(a=n.__r)&&a(u),h.__d=!1,h.__v=u,h.__P=l,a=h.render(h.props,h.state,h.context),h.state=h.__s,null!=h.getChildContext&&(t=s(s({},t),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(w=h.getSnapshotBeforeUpdate(y,_)),A=null!=a&&a.type==p&&null==a.key?a.props.children:a,m(l,Array.isArray(A)?A:[A],u,i,t,o,r,f,e,c),h.base=u.__e,u.__h=null,h.__h.length&&f.push(h),k&&(h.__E=h.__=null),h.__e=!1}else null==r&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=H(i.__e,u,i,t,o,r,f,c);(a=n.diffed)&&a(u)}catch(l){u.__v=null,(c||null!=r)&&(u.__e=e,u.__h=!!c,r[r.indexOf(e)]=null),n.__e(l,u,i)}return u.__e}function j(l,u){n.__c&&n.__c(u,l),l.some(function(u){try{l=u.__h,u.__h=[],l.some(function(n){n.call(u)})}catch(l){n.__e(l,u.__v)}})}function H(n,l,u,i,t,o,r,c){var s,a,h,v,y,p=u.props,d=l.props;if(t=\"svg\"===l.type||t,null!=o)for(s=0;s3)for(u=[u],o=3;o ?Promise\n\nconst NAMESPACE = 'solid-auth-client'\n\n/**\n * Receives and handles remote procedure calls.\n */\nexport class Server {\n _clientWindow: window\n _clientOrigin: string\n _handler: handler\n _messageListener: (MessageEvent) => Promise\n\n constructor(clientWindow: window, clientOrigin: string, handle: handler) {\n this._clientWindow = clientWindow\n this._clientOrigin = clientOrigin\n this._handler = handle\n this._messageListener = (event) => this._handleMessage(event)\n }\n\n async _handleMessage({ data, origin }: MessageEvent) {\n // Ensure we can post to the origin\n if (origin !== this._clientOrigin) {\n console.warn(\n `solid-auth-client is listening to ${this._clientOrigin} ` +\n `so ignored a message received from ${origin}.`\n )\n return\n }\n\n // Parse the request and send it to the handler\n const req = data && (data: any)[NAMESPACE]\n if (req && req.method) {\n const { id, method, args } = (req: any)\n const ret = await this._handler(method, ...args)\n this._clientWindow.postMessage(\n { [NAMESPACE]: { id, ret } },\n this._clientOrigin\n )\n }\n }\n\n start() {\n window.addEventListener('message', this._messageListener)\n }\n\n stop() {\n window.removeEventListener('message', this._messageListener)\n }\n}\n\n/**\n * Makes remote procedure calls.\n */\nexport class Client {\n _serverWindow: window\n _serverOrigin: string\n\n constructor(serverWindow: window, serverOrigin: string) {\n this._serverWindow = serverWindow\n this._serverOrigin = serverOrigin\n }\n\n request(method: string, ...args: any[]): Promise {\n // Send the request as a message to the server window\n const id = Math.random()\n this._serverWindow.postMessage(\n { [NAMESPACE]: { id, method, args } },\n this._serverOrigin\n )\n\n // Create a promise that resolves to the request's return value\n return new Promise((resolve, reject) => {\n // Listen for responses to the request\n window.addEventListener('message', responseListener)\n\n // Cancel if the response takes too long\n const timeout = setTimeout(() => {\n reject(new Error('Could not connect to main window.'))\n window.removeEventListener('message', responseListener)\n }, 2000)\n\n // Processes a possible response to the request\n function responseListener({ data }) {\n const resp = data && data[NAMESPACE]\n // eslint-disable-next-line no-prototype-builtins\n if (resp && resp.id === id && resp.hasOwnProperty('ret')) {\n resolve(resp.ret)\n clearTimeout(timeout)\n window.removeEventListener('message', responseListener)\n }\n }\n })\n }\n}\n","// @flow\nimport { Client } from './ipc'\n\nexport const NAMESPACE = 'solid-auth-client'\n\nexport interface AsyncStorage {\n getItem(key: string): Promise;\n setItem(key: string, val: string): Promise;\n removeItem(key: string): Promise;\n}\n\nexport type Storage = Storage | AsyncStorage\n\nexport const defaultStorage = () => {\n const hasLocalStorage =\n typeof window !== 'undefined' && 'localStorage' in window\n return asyncStorage(hasLocalStorage ? window.localStorage : memStorage())\n}\n\n/**\n * Gets the deserialized stored data\n */\nexport async function getData(store: Storage): Promise {\n let serialized\n let data\n try {\n serialized = await store.getItem(NAMESPACE)\n data = JSON.parse(serialized || '{}')\n } catch (e) {\n console.warn('Could not deserialize data:', serialized)\n console.error(e)\n data = {}\n }\n return data\n}\n\n/**\n * Updates a Storage object without mutating its intermediate representation.\n */\nexport async function updateStorage(\n store: Storage,\n update: (Object) => Object\n): Promise {\n const currentData = await getData(store)\n const newData = update(currentData)\n await store.setItem(NAMESPACE, JSON.stringify(newData))\n return newData\n}\n\n/**\n * Takes a synchronous storage interface and wraps it with an async interface.\n */\nexport function asyncStorage(storage: Storage): AsyncStorage {\n return {\n getItem: (key: string): Promise => {\n return Promise.resolve(storage.getItem(key))\n },\n\n setItem: (key: string, val: string): Promise => {\n return Promise.resolve(storage.setItem(key, val))\n },\n\n removeItem: (key: string): Promise => {\n return Promise.resolve(storage.removeItem(key))\n },\n }\n}\n\nexport const memStorage = (): Storage => {\n const store = {}\n return {\n getItem: (key: string): ?string => {\n if (typeof store[key] === 'undefined') return null\n return store[key]\n },\n setItem: (key: string, val: string): void => {\n store[key] = val\n },\n removeItem: (key: string): void => {\n delete store[key]\n },\n }\n}\n\nexport function ipcStorage(client: Client): AsyncStorage {\n return {\n getItem: (key: string): Promise =>\n client.request('storage/getItem', key),\n\n setItem: (key: string, val: string): Promise =>\n client.request('storage/setItem', key, val),\n\n removeItem: (key: string): Promise =>\n client.request('storage/removeItem', key),\n }\n}\n","import React, { Component } from 'react'\n\nimport auth from '../../src'\nimport { Client } from '../../src/ipc'\nimport { ipcStorage } from '../../src/storage'\n\nexport default class IdpCallback extends Component {\n state = { loggedIn: false }\n client = new Client(window.opener, this.props.appOrigin)\n\n async componentDidMount() {\n const storage = ipcStorage(this.client)\n const session = await auth.currentSession(storage)\n await this.client.request('foundSession', session)\n this.setState({ loggedIn: true })\n }\n\n componentDidUpdate() {\n const { afterLoggedIn } = this.props\n if (this.state.loggedIn) {\n afterLoggedIn()\n }\n }\n\n render() {\n const message = this.state.loggedIn ? 'Logged in!' : 'Logging in…'\n return

{message}

\n }\n}\n","import SolidAuthClient from './solid-auth-client'\n\n// Export a singleton instance of SolidAuthClient\nconst auth = new SolidAuthClient()\nexport default auth\n\n// Bind methods to instance, so they can be invoked as regular functions\n// (e.g., to pass around the fetch function)\nObject.getOwnPropertyNames(SolidAuthClient.prototype).forEach((property) => {\n const value = auth[property]\n if (typeof value === 'function') {\n auth[property] = value.bind(auth)\n }\n})\n\n// Expose window.SolidAuthClient for backward compatibility\nif (typeof window !== 'undefined') {\n if ('SolidAuthClient' in window) {\n console.warn('Caution: multiple versions of solid-auth-client active.')\n } else {\n let warned = false\n Object.defineProperty(window, 'SolidAuthClient', {\n enumerable: true,\n get: () => {\n if (!warned) {\n warned = true\n console.warn('window.SolidAuthClient has been deprecated.')\n console.warn('Please use window.solid.auth instead.')\n }\n return auth\n },\n })\n }\n}\n","// @flow\n/* global fetch */\nimport EventEmitter from 'events'\nimport { authnFetch } from './authn-fetch'\nimport { openIdpPopup, obtainSession } from './popup'\nimport type { Session } from './session'\nimport { getSession, saveSession, clearSession } from './session'\nimport type { AsyncStorage } from './storage'\nimport { defaultStorage } from './storage'\nimport { toUrlString, currentUrlNoParams } from './url-util'\nimport * as WebIdOidc from './webid-oidc'\n\n// Store the global fetch, so the user is free to override it\nconst globalFetch = fetch\n\nexport type loginOptions = {\n callbackUri: string,\n clientName?: string,\n contacts?: Array,\n logoUri?: string,\n popupUri: string,\n storage: AsyncStorage,\n}\n\nexport default class SolidAuthClient extends EventEmitter {\n _pendingSession: ?Promise\n\n fetch(input: RequestInfo, options?: RequestOptions): Promise {\n this.emit('request', toUrlString(input))\n return authnFetch(defaultStorage(), globalFetch, input, options)\n }\n\n login(idp: string, options: loginOptions): Promise {\n options = { ...defaultLoginOptions(currentUrlNoParams()), ...options }\n return WebIdOidc.login(idp, options)\n }\n\n async popupLogin(options: loginOptions): Promise {\n options = { ...defaultLoginOptions(), ...options }\n if (!/https?:/.test(options.popupUri)) {\n options.popupUri = new URL(\n options.popupUri || '/.well-known/solid/login',\n window.location\n ).toString()\n }\n if (!options.callbackUri) {\n options.callbackUri = options.popupUri\n }\n const popup = openIdpPopup(options.popupUri)\n const session = await obtainSession(options.storage, popup, options)\n this.emit('login', session)\n this.emit('session', session)\n return session\n }\n\n async currentSession(\n storage: AsyncStorage = defaultStorage()\n ): Promise {\n // Try to obtain a stored or pending session\n let session = this._pendingSession || (await getSession(storage))\n\n // If none found, attempt to create a new session\n if (!session) {\n // Try to create a new OIDC session from stored tokens\n try {\n this._pendingSession = WebIdOidc.currentSession(storage)\n session = await this._pendingSession\n } catch (err) {\n console.error(err)\n }\n\n // Save the new session and emit session events\n if (session) {\n await saveSession(storage)(session)\n this.emit('login', session)\n this.emit('session', session)\n }\n delete this._pendingSession\n }\n return session\n }\n\n async trackSession(callback: Function): Promise {\n /* eslint-disable standard/no-callback-literal */\n callback(await this.currentSession())\n this.on('session', callback)\n }\n\n stopTrackSession(callback: Function): void {\n this.removeListener('session', callback)\n }\n\n async logout(storage: AsyncStorage = defaultStorage()): Promise {\n const session = await getSession(storage)\n if (session) {\n try {\n await WebIdOidc.logout(storage, globalFetch)\n this.emit('logout')\n this.emit('session', null)\n } catch (err) {\n console.warn('Error logging out:')\n console.error(err)\n }\n await clearSession(storage)\n }\n }\n}\n\nfunction defaultLoginOptions(url: ?string): loginOptions {\n return {\n callbackUri: url ? url.split('#')[0] : '',\n popupUri: '',\n storage: defaultStorage(),\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n","// @flow\nimport 'isomorphic-fetch'\n\nimport { toUrlString } from './url-util'\nimport { getHost, updateHostFromResponse } from './host'\nimport { getSession } from './session'\nimport type { AsyncStorage } from './storage'\nimport { fetchWithCredentials } from './webid-oidc'\n\nexport async function authnFetch(\n storage: AsyncStorage,\n fetch: Function,\n input: RequestInfo,\n options?: RequestOptions\n): Promise {\n // Copy headers into a modifiable object\n if (options) {\n const headers = copyHeaders((options: any).headers)\n options = { ...options, headers }\n }\n\n // If not authenticated, perform a regular fetch\n const session = await getSession(storage)\n if (!session) {\n return fetch(input, options)\n }\n\n // If we know the server expects credentials, send them\n if (await shouldShareCredentials(storage, input)) {\n return fetchWithCredentials(session, fetch, input, options)\n }\n\n // If we don't know for sure, try a regular fetch first\n let resp = await fetch(input, options)\n\n // If the server then requests credentials, send them\n if (resp.status === 401) {\n await updateHostFromResponse(storage)(resp)\n if (await shouldShareCredentials(storage, input)) {\n resp = fetchWithCredentials(session, fetch, input, options)\n }\n }\n return resp\n}\n\nasync function shouldShareCredentials(\n storage: AsyncStorage,\n input: RequestInfo\n): Promise {\n const requestHost = await getHost(storage)(toUrlString(input))\n return requestHost != null && requestHost.requiresAuth\n}\n\nfunction copyHeaders(origHeaders: any) {\n const headers = {}\n if (origHeaders) {\n if (typeof origHeaders.forEach === 'function') {\n origHeaders.forEach((value, key) => {\n headers[key] = value\n })\n } else {\n for (const key in origHeaders) {\n headers[key] = origHeaders[key]\n }\n }\n }\n return headers\n}\n","module.exports = fetch;","// @flow\n/* eslint-env browser */\n\nfunction getLocation() {\n return typeof window !== 'undefined'\n ? window.location\n : { href: 'https://example.org/', pathname: '/', origin: 'example.org' }\n}\n\nexport const currentUrl = (): string => getLocation().href\n\nexport const currentUrlNoParams = (): string =>\n getLocation().origin + getLocation().pathname\n\nexport const navigateTo = (url: string) => {\n getLocation().href = url\n}\n\nexport const originOf = (url: string): string => new URL(url).origin\n\nexport const toUrlString = (url: any): string => {\n if (typeof url !== 'string') {\n url = 'url' in url ? url.url : url.toString()\n }\n return new URL(url, currentUrl()).toString()\n}\n","// @flow\n/* globalRequest, Response, URL */\nimport { getSession } from './session'\nimport type { AsyncStorage } from './storage'\nimport { getData, updateStorage } from './storage'\nimport * as WebIdOidc from './webid-oidc'\n\nexport type host = {\n url: string,\n requiresAuth: boolean,\n}\n\nexport function getHost(storage: AsyncStorage): (string) => Promise {\n return async (url) => {\n const { host } = new URL(url)\n const session = await getSession(storage)\n if (session && host === new URL(session.idp).host) {\n return { url: host, requiresAuth: true }\n }\n const { hosts } = await getData(storage)\n return hosts && hosts[host]\n }\n}\n\nexport function saveHost(storage: AsyncStorage): (host) => Promise {\n return async ({ url, requiresAuth }) => {\n await updateStorage(storage, (data) => ({\n ...data,\n hosts: {\n ...data.hosts,\n [url]: { requiresAuth },\n },\n }))\n }\n}\n\nexport function updateHostFromResponse(\n storage: AsyncStorage\n): (Response) => Promise {\n return async (resp) => {\n if (WebIdOidc.requiresAuth(resp)) {\n const { host } = new URL(resp.url)\n await saveHost(storage)({ url: host, requiresAuth: true })\n }\n }\n}\n","// @flow\n\nimport type { AsyncStorage } from './storage'\nimport { getData, updateStorage } from './storage'\n\nexport type webIdOidcSession = {\n idp: string,\n webId: string,\n accessToken: string,\n idToken: string,\n clientId: string,\n sessionKey: string,\n}\n\nexport type Session = webIdOidcSession\n\nexport async function getSession(storage: AsyncStorage): Promise {\n const data = await getData(storage)\n return data.session || null\n}\n\nexport function saveSession(\n storage: AsyncStorage\n): (session: Session) => Promise {\n return async (session) => {\n const data = await updateStorage(storage, (data) => ({ ...data, session }))\n return data.session\n }\n}\n\nexport async function clearSession(storage: AsyncStorage): Promise {\n await updateStorage(storage, (data) => ({ ...data, session: null }))\n}\n","// @flow\n/* global Response */\nimport * as authorization from 'auth-header'\n\nimport RelyingParty from '@solid/oidc-rp'\nimport PoPToken from '@solid/oidc-rp/src/PoPToken'\n\nimport type { loginOptions } from './solid-auth-client'\nimport { currentUrl, navigateTo, toUrlString } from './url-util'\nimport type { webIdOidcSession } from './session'\nimport type { AsyncStorage } from './storage'\nimport { defaultStorage, getData, updateStorage } from './storage'\n\nexport async function login(\n idp: string,\n options: loginOptions\n): Promise {\n try {\n const rp = await getRegisteredRp(idp, options)\n await saveAppHashFragment(options.storage)\n return sendAuthRequest(rp, options)\n } catch (err) {\n console.warn('Error logging in with WebID-OIDC')\n console.error(err)\n return null\n }\n}\n\nexport async function currentSession(\n storage: AsyncStorage = defaultStorage()\n): Promise {\n try {\n // Obtain the Relying Party\n const rp = await getStoredRp(storage)\n if (!rp) {\n return null\n }\n\n // Obtain and clear the OIDC URL fragment\n const url = currentUrl()\n if (!/#(.*&)?access_token=/.test(url)) {\n return null\n }\n window.location.hash = ''\n await restoreAppHashFragment(storage)\n\n // Obtain a session from the Relying Party\n const storeData = await getData(storage)\n const session = await rp.validateResponse(url, storeData)\n if (!session) {\n return null\n }\n return {\n ...session,\n webId: session.idClaims.sub,\n idp: session.issuer,\n }\n } catch (err) {\n console.warn('Error finding a WebID-OIDC session')\n console.error(err)\n return null\n }\n}\n\nexport async function logout(\n storage: AsyncStorage,\n fetch: Function\n): Promise {\n const rp = await getStoredRp(storage)\n if (rp) {\n try {\n // First log out from the IDP\n await rp.logout()\n // Then, log out from the RP\n try {\n await fetch('/.well-known/solid/logout', { credentials: 'include' })\n } catch (e) {\n // Ignore errors for when we are not on a Solid pod\n // But tell users it is harmless because they will see the GET failure in the console\n console.info(\n \"Couldn't find /.well-known/solid/logout, this is harmless.\"\n )\n }\n } catch (err) {\n console.warn('Error logging out of the WebID-OIDC session')\n console.error(err)\n }\n }\n}\n\nexport async function getRegisteredRp(\n idp: string,\n options: loginOptions\n): Promise {\n // To reuse a possible previous RP,\n // it be for the same IDP and redirect URI\n let rp = await getStoredRp(options.storage)\n if (\n !rp ||\n rp.provider.url !== idp ||\n !rp.registration.redirect_uris.includes(options.callbackUri)\n ) {\n // Register a new RP\n rp = await registerRp(idp, options)\n await storeRp(options.storage, idp, rp)\n }\n return rp\n}\n\nasync function getStoredRp(storage: AsyncStorage): Promise {\n const data = await getData(storage)\n const { rpConfig } = data\n if (rpConfig) {\n rpConfig.store = storage\n return RelyingParty.from(rpConfig)\n } else {\n return null\n }\n}\n\nasync function storeRp(\n storage: AsyncStorage,\n idp: string,\n rp: RelyingParty\n): Promise {\n await updateStorage(storage, (data) => ({\n ...data,\n rpConfig: rp,\n }))\n return rp\n}\n\nfunction registerRp(idp: string, opts: loginOptions): Promise {\n const { storage, callbackUri } = opts\n const responseType = 'id_token token'\n\n const clientNameI18n = {}\n Object.entries(opts)\n .filter(([key, _]) => key.startsWith('clientName#'))\n .forEach(\n ([key, value]) =>\n (clientNameI18n[key.replace('clientName#', 'client_name#')] = value)\n )\n\n const supplementaryOptions = {\n logo_uri: opts.logoUri,\n contacts: opts.contacts,\n client_name: opts.clientName,\n }\n\n const registration = {\n issuer: idp,\n grant_types: ['implicit'],\n redirect_uris: [callbackUri],\n response_types: [responseType],\n scope: 'openid profile',\n ...clientNameI18n,\n ...supplementaryOptions,\n }\n\n // Note that overrides @solid/oidc-rp/RelyingParty defaults (i.e. not merged)\n const options = {\n defaults: {\n authenticate: {\n redirect_uri: callbackUri,\n response_type: responseType,\n display: 'page',\n scope: ['openid'],\n },\n },\n store: storage,\n }\n\n return RelyingParty.register(idp, registration, options)\n}\n\nasync function sendAuthRequest(\n rp: RelyingParty,\n { callbackUri, storage }: loginOptions\n): Promise {\n const data = await getData(storage)\n const url = await rp.createRequest({ redirect_uri: callbackUri }, data)\n await updateStorage(storage, () => data)\n return navigateTo(url)\n}\n\nasync function saveAppHashFragment(store: AsyncStorage): Promise {\n await updateStorage(store, (data) => ({\n ...data,\n appHashFragment: window.location.hash,\n }))\n}\n\nasync function restoreAppHashFragment(store: AsyncStorage): Promise {\n await updateStorage(store, ({ appHashFragment = '', ...data }) => {\n window.location.hash = appHashFragment\n return data\n })\n}\n\n/**\n * Answers whether a HTTP response requires WebID-OIDC authentication.\n */\nexport function requiresAuth(resp: Response): boolean {\n if (resp.status !== 401) {\n return false\n }\n const wwwAuthHeader = resp.headers.get('www-authenticate')\n if (!wwwAuthHeader) {\n return false\n }\n const auth = authorization.parse(wwwAuthHeader)\n return (\n auth.scheme === 'Bearer' &&\n auth.params &&\n auth.params.scope === 'openid webid'\n )\n}\n\n/**\n * Fetches a resource, providing the WebID-OIDC ID Token as authentication.\n * Assumes that the resource has requested those tokens in a previous response.\n */\nexport async function fetchWithCredentials(\n session: webIdOidcSession,\n fetch: Function,\n input: any,\n options?: RequestOptions\n): Promise {\n // Add Authorization header (assuming a modifiable headers object)\n const headers: any = (options ? options.headers : input.headers) || {}\n const popToken = await PoPToken.issueFor(toUrlString(input), session)\n headers.authorization = `Bearer ${popToken}`\n return fetch(input, { ...options, credentials: 'include', headers })\n}\n","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties;","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"format\", {\n enumerable: true,\n get: function get() {\n return _format.default;\n }\n});\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function get() {\n return _parse.default;\n }\n});\n\nvar _format = _interopRequireDefault(require(\"./format\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n//# sourceMappingURL=index.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = require(\"./util\");\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar xxx = function xxx(key) {\n return function (value) {\n return `${key}=${value && !(0, _util.isToken)(value) ? (0, _util.quote)(value) : value}`;\n };\n};\n\nvar build = function build(params) {\n return params.reduce(function (prev, _ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n values = _ref2[1];\n\n var transform = xxx(key);\n\n if (!(0, _util.isToken)(key)) {\n throw new TypeError();\n }\n\n if (Array.isArray(values)) {\n return _toConsumableArray(prev).concat(_toConsumableArray(values.map(transform)));\n }\n\n return _toConsumableArray(prev).concat([transform(values)]);\n }, []);\n};\n\nvar challenge = function challenge(params, options) {\n if (Array.isArray(params)) {\n return build(params);\n } else if (typeof params === 'object') {\n var entries = params;\n return challenge(Object.keys(params).map(function (key) {\n return [key, entries[key]];\n }), options);\n }\n\n throw new TypeError();\n};\n\nvar _default = function _default(scheme, token, params) {\n var obj = typeof scheme === 'string' ? {\n scheme,\n token,\n params\n } : scheme;\n\n if (typeof obj !== 'object') {\n throw new TypeError();\n } else if (!(0, _util.isScheme)(obj.scheme)) {\n throw new TypeError('Invalid scheme.');\n }\n\n return [obj.scheme].concat(_toConsumableArray(typeof obj.token !== 'undefined' ? [obj.token] : []), _toConsumableArray(typeof obj.params !== 'undefined' ? challenge(obj.params) : [])).join(' ');\n};\n\nexports.default = _default;\n//# sourceMappingURL=format.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.unquote = exports.quote = exports.isScheme = exports.isToken = void 0;\nvar token = /^[^\\u0000-\\u001F\\u007F()<>@,;:\\\\\"/?={}\\[\\]\\u0020\\u0009]+$/;\n\nvar isToken = function isToken(str) {\n return typeof str === 'string' && token.test(str);\n};\n\nexports.isToken = isToken;\nvar isScheme = isToken;\nexports.isScheme = isScheme;\n\nvar quote = function quote(str) {\n return `\"${str.replace(/\"/g, '\\\\\"')}\"`;\n};\n\nexports.quote = quote;\n\nvar unquote = function unquote(str) {\n return str.substr(1, str.length - 2).replace(/\\\\\"/g, '\"');\n};\n\nexports.unquote = unquote;\n//# sourceMappingURL=util.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = require(\"./util\");\n\n// lol dis\nvar body = /((?:[a-zA-Z0-9._~+\\/-]+=*(?:\\s+|$))|[^\\u0000-\\u001F\\u007F()<>@,;:\\\\\"/?={}\\[\\]\\u0020\\u0009]+)(?:=([^\\\\\"=\\s,]+|\"(?:[^\"\\\\]|\\\\.)*\"))?/g; // eslint-disable-line\n\nvar normalize = function normalize(prev, _cur) {\n // Fixup quoted strings and tokens with spaces around them\n var cur = _cur.charAt(0) === '\"' ? (0, _util.unquote)(_cur) : _cur.trim(); // Marshal\n\n if (Array.isArray(prev)) {\n return prev.concat(cur);\n } else if (typeof prev === 'string') {\n return [prev, cur];\n }\n\n return cur;\n};\n\nvar parseProperties = function parseProperties(scheme, string) {\n var token = null;\n var params = {}; // eslint-disable-next-line no-constant-condition\n\n while (true) {\n var res = body.exec(string);\n\n if (res === null) {\n break;\n }\n\n if (res[2]) {\n params[res[1]] = normalize(params[res[1]], res[2]);\n } else {\n token = normalize(token, res[1]);\n }\n }\n\n return {\n scheme,\n params,\n token\n };\n};\n\nvar _default = function _default(str) {\n if (typeof str !== 'string') {\n throw new TypeError('Header value must be a string.');\n }\n\n var start = str.indexOf(' ');\n var scheme = str.substr(0, start);\n\n if (!(0, _util.isScheme)(scheme)) {\n throw new TypeError(`Invalid scheme ${scheme}`);\n }\n\n return parseProperties(scheme, str.substr(start));\n};\n\nexports.default = _default;\n//# sourceMappingURL=parse.js.map","'use strict'\n\nmodule.exports = require('./RelyingParty')\n","/**\n * Dependencies\n */\nconst assert = require('assert')\nconst fetch = require('node-fetch')\nconst { URL } = require('whatwg-url')\nconst Headers = fetch.Headers ? fetch.Headers : global.Headers\nconst {JWKSet} = require('@solid/jose')\nconst AuthenticationRequest = require('./AuthenticationRequest')\nconst AuthenticationResponse = require('./AuthenticationResponse')\nconst onHttpError = require('./onHttpError')\nconst FormUrlEncoded = require('./FormUrlEncoded')\n\n/**\n * RelyingParty\n *\n * @class\n * Client interface for OpenID Connect Relying Party.\n *\n * @example\n * let client = RelyingParty({\n * provider: {\n * name: 'Anvil Research, Inc.',\n * url: 'https://forge.anvil.io'\n * // configuration\n * // jwks\n * },\n * defaults: {\n * popToken: false,\n * authenticate: {\n * response_type: 'code',\n * display: 'popup',\n * scope: 'openid profile email'\n * },\n * register: {\n * client_name: 'Example',\n * client_uri: 'https://example.com',\n * logo_uri: 'https://example.com/assets/logo.png',\n * redirect_uris: ['https://app.example.com/callback'],\n * response_types: ['code', 'code id_token token'],\n * grant_types: ['authorization_code'],\n * default_max_age: 7200,\n * post_logout_redirect_uris: ['https://app.example.com']\n * },\n * },\n * registration: {\n * // if you have it saved somewhere\n * },\n * store: localStorage || req.session\n * })\n *\n * client.discover() => Promise\n * client.jwks() => Promise\n * client.authenticate()\n * client.authenticateUri()\n * client.validateResponse(uri) => Promise\n * client.userinfo() => Promise\n * client.logout()\n */\nclass RelyingParty {\n constructor ({ provider = {}, defaults, registration = {}, store = {} } = {}) {\n this.provider = provider\n this.defaults = defaults || {\n popToken: false,\n authenticate: {\n response_type: 'id_token token',\n display: 'page',\n scope: ['openid']\n }\n }\n this.registration = registration\n this.store = store\n }\n\n /**\n * from\n *\n * @description\n * Create a RelyingParty instance from a previously registered client.\n *\n * @param {Object} data\n * @returns {Promise}\n */\n static async from (data) {\n const rp = new RelyingParty(data)\n const validation = rp.validate()\n\n // schema validation\n if (!validation.valid) {\n throw validation.error\n }\n\n const jwks = rp.provider.jwks\n\n // request the JWK Set if missing\n if (!jwks) {\n return rp.jwks().then(() => rp)\n }\n\n // otherwise import the JWK Set to webcrypto\n return JWKSet.importKeys(jwks).then(jwks => {\n rp.provider.jwks = jwks\n return rp\n })\n }\n\n /**\n * register\n *\n * @param issuer {string} Provider URL\n * @param registration {Object} Client dynamic registration options\n * @param options {Object}\n * @param options.defaults\n * @param [options.store] {Session|Storage}\n * @param [oobRegistration] {Object} Object providing getRegistration(key) function for out-of-band registrations\n * @param [idpId] {string} A tag identifying the provider used for looking up out-of-band registration data.\n * @returns {Promise} RelyingParty instance, registered.\n */\n static register (issuer, registration, options, idpId, oobRegistration) {\n const rp = new RelyingParty({\n provider: { url: issuer },\n defaults: Object.assign({}, options.defaults),\n store: options.store\n })\n\n return Promise.resolve()\n .then(() => rp.discover())\n .then(() => rp.jwks())\n .then(() => {\n assert(rp.provider.configuration, 'OpenID Configuration is not initialized.')\n return rp.provider.configuration.registration_endpoint ? rp.register(registration) : rp.getRegistration(registration, idpId, oobRegistration)\n })\n .then(() => rp)\n }\n\n validate () {\n if (!this.provider || !this.provider.url) {\n return {\n valid: false,\n error: new Error('Provider url is required.')\n }\n }\n\n return { valid: true }\n }\n\n /**\n * Discover\n *\n * @description Fetches the issuer's OpenID Configuration.\n * @returns {Promise} Resolves with the provider configuration response\n */\n discover () {\n try {\n let issuer = this.provider.url\n\n assert(issuer, 'RelyingParty provider must define \"url\"')\n\n let url = new URL(issuer)\n url.pathname = '.well-known/openid-configuration'\n\n return fetch(url.toString())\n .then(onHttpError('Error fetching openid configuration'))\n .then(response => {\n return response.json().then(json => this.provider.configuration = json)\n })\n\n } catch (error) {\n return Promise.reject(error)\n }\n }\n\n /**\n * Register\n *\n * @description Register's a client with provider as a Relying Party\n *\n * @param options {Object}\n * @returns {Promise} Resolves with the registration response object\n */\n register (options) {\n try {\n let configuration = this.provider.configuration\n\n assert(configuration, 'OpenID Configuration is not initialized.')\n assert(configuration.registration_endpoint, 'OpenID Configuration is missing registration_endpoint.')\n\n let uri = configuration.registration_endpoint\n let method = 'post'\n let headers = new Headers({ 'Content-Type': 'application/json' })\n let params = this.defaults.register\n let body = JSON.stringify(Object.assign({}, params, options))\n\n return fetch(uri, {method, headers, body})\n .then(onHttpError('Error registering client'))\n .then(response => {\n return response.json().then(json => this.registration = json)\n })\n\n } catch (error) {\n return Promise.reject(error)\n }\n }\n\n serialize () {\n return JSON.stringify(this)\n }\n\n /**\n * @description\n * Retrieves an existing Relying Party registration for a provider which does\n * not support dynamic registration and which requires pre-registration by\n * some 'out of band' method.\n *\n * @param options {Object}\n * @param idp {string} Key identifying which registration data should be retrieved.\n * @returns {Promise} Resolves with the registration response object.\n */\n getRegistration (options, idp, oobRegistration) {\n return Promise.resolve()\n .then(() => {\n return this.registration = oobRegistration.getRegistration(idp)\n })\n .catch(error => {\n throw error\n })\n }\n\n /**\n * jwks\n *\n * @description Promises the issuer's JWK Set.\n * @returns {Promise}\n */\n jwks () {\n try {\n let configuration = this.provider.configuration\n\n assert(configuration, 'OpenID Configuration is not initialized.')\n assert(configuration.jwks_uri, 'OpenID Configuration is missing jwks_uri.')\n\n let uri = configuration.jwks_uri\n\n return fetch(uri)\n .then(onHttpError('Error resolving provider keys'))\n .then(response => {\n return response\n .json()\n .then(json => JWKSet.importKeys(json))\n .then(jwks => this.provider.jwks = jwks)\n })\n\n } catch (error) {\n return Promise.reject(error)\n }\n }\n\n /**\n * createRequest\n *\n * @param options {Object} Authn request options hashmap\n * @param options.redirect_uri {string}\n * @param options.response_type {string} e.g. 'code' or 'id_token token'\n * @param session {Session|Storage} req.session or localStorage\n * @returns {Promise} Authn request URL\n */\n createRequest (options, session) {\n return AuthenticationRequest.create(this, options, session || this.store)\n }\n\n /**\n * Validate Response\n *\n * @param response {string} req.query or req.body.text\n * @param session {Session|Storage} req.session or localStorage or similar\n *\n * @returns {Promise}\n */\n validateResponse (response, session = this.store) {\n let options\n\n if (response.match(/^http(s?):\\/\\//)) {\n options = { rp: this, redirect: response, session }\n } else {\n options = { rp: this, body: response, session }\n }\n\n const authResponse = new AuthenticationResponse(options)\n\n return AuthenticationResponse.validateResponse(authResponse)\n }\n\n /**\n * userinfo\n *\n * @description\n * Promises the authenticated user's claims.\n * access_token can be supplied directly. If not, it is retrieved from storage, if available.\n * Depending on when userinfo is called, access_token may not yet have been saved to storage.\n *\n * @param accessToken {string=} Optional access token from current user session for use against the User Info endpoint\n * @returns {Promise}\n */\n userinfo (accessToken) {\n try {\n let configuration = this.provider.configuration\n\n assert(configuration, 'OpenID Configuration is not initialized.')\n assert(configuration.userinfo_endpoint, 'OpenID Configuration is missing userinfo_endpoint.')\n\n accessToken = accessToken || this.store.access_token\n assert(accessToken, 'Missing access token.')\n\n let uri = configuration.userinfo_endpoint\n let headers = new Headers({\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${accessToken}`\n })\n\n return fetch(uri, {headers})\n .then(onHttpError('Error fetching userinfo'))\n .then(response => response.json())\n\n } catch (error) {\n return Promise.reject(error)\n }\n }\n\n /**\n * logoutRequest\n *\n * Composes and returns the logout request URI, based on the OP's\n * `end_session_endpoint`, with appropriate parameters.\n *\n * Note: Calling client code has the responsibility to clear the local\n * session state (for example, by calling `rp.clearSession()`). In addition,\n * some IdPs (such as Google) may not provide an `end_session_endpoint`,\n * in which case, this method will return null.\n *\n * @see https://openid.net/specs/openid-connect-session-1_0.html#RPLogout\n *\n * @throws {Error} If provider config is not initialized\n *\n * @throws {Error} If `post_logout_redirect_uri` was provided without a\n * corresponding `id_token_hint`\n *\n * @param [options={}] {object}\n *\n * @param [options.id_token_hint] {string} RECOMMENDED.\n * Previously issued ID Token passed to the logout endpoint as\n * a hint about the End-User's current authenticated session with the\n * Client. This is used as an indication of the identity of the End-User\n * that the RP is requesting be logged out by the OP. The OP *need not* be\n * listed as an audience of the ID Token when it is used as an\n * `id_token_hint` value.\n *\n * @param [options.post_logout_redirect_uri] {string} OPTIONAL. URL to which\n * the RP is requesting that the End-User's User Agent be redirected after\n * a logout has been performed. The value MUST have been previously\n * registered with the OP, either using the `post_logout_redirect_uris`\n * Registration parameter or via another mechanism. If supplied, the OP\n * SHOULD honor this request following the logout.\n *\n * Note: The requirement to validate the uri for previous registration means\n * that, in practice, the `id_token_hint` is REQUIRED if\n * `post_logout_redirect_uri` is used. Otherwise, the OP has no way to get\n * the `client_id` to load the saved client registration, to validate the\n * uri. The only way it can get it is by decoding the `id_token_hint`.\n *\n * @param [options.state] {string} OPTIONAL. Opaque value used by the RP to\n * maintain state between the logout request and the callback to the\n * endpoint specified by the `post_logout_redirect_uri` query parameter. If\n * included in the logout request, the OP passes this value back to the RP\n * using the `state` query parameter when redirecting the User Agent back to\n * the RP.\n *\n * TODO: In the future, consider adding `response_mode` param, for the OP to\n * determine how to return the `state` back the RP.\n * @see http://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#ResponseModes\n *\n * TODO: Handle special cases for popular providers (Google, MSFT)\n *\n * @returns {string|null} Logout uri (or null if no end_session_endpoint was\n * provided in the IdP config)\n */\n logoutRequest (options = {}) {\n const { id_token_hint, post_logout_redirect_uri, state } = options\n let configuration\n\n assert(this.provider, 'OpenID Configuration is not initialized')\n configuration = this.provider.configuration\n assert(configuration, 'OpenID Configuration is not initialized')\n\n if (!configuration.end_session_endpoint) {\n console.log(`OpenId Configuration for ` +\n `${configuration.issuer} is missing end_session_endpoint`)\n return null\n }\n\n if (post_logout_redirect_uri && !id_token_hint) {\n throw new Error('id_token_hint is required when using post_logout_redirect_uri')\n }\n\n const params = {}\n\n if (id_token_hint) {\n params.id_token_hint = id_token_hint\n }\n if (post_logout_redirect_uri) {\n params.post_logout_redirect_uri = post_logout_redirect_uri\n }\n if (state) {\n params.state = state\n }\n\n const url = new URL(configuration.end_session_endpoint)\n url.search = FormUrlEncoded.encode(params)\n\n return url.href\n }\n\n /**\n * Logout\n *\n * @deprecated\n *\n * TODO: Add deprecation warnings, then remove. Client code should\n * use `logoutRequest()` instead\n *\n * @returns {Promise}\n */\n logout () {\n let configuration\n try {\n assert(this.provider, 'OpenID Configuration is not initialized.')\n configuration = this.provider.configuration\n assert(configuration, 'OpenID Configuration is not initialized.')\n } catch (error) {\n return Promise.reject(error)\n }\n\n if (!configuration.end_session_endpoint) {\n this.clearSession()\n return Promise.resolve(undefined)\n }\n\n let uri = configuration.end_session_endpoint\n let method = 'get'\n\n return fetch(uri, {method, credentials: 'include'})\n .then(onHttpError('Error logging out'))\n .then(() => this.clearSession())\n\n // TODO: Validate `frontchannel_logout_uri` if necessary\n /**\n * frontchannel_logout_uri - OPTIONAL. RP URL that will cause the RP to log\n * itself out when rendered in an iframe by the OP.\n *\n * An `iss` (issuer) query parameter and a `sid`\n * (session ID) query parameter MAY be included by the OP to enable the RP\n * to validate the request and to determine which of the potentially\n * multiple sessions is to be logged out. If a sid (session ID) query\n * parameter is included, an iss (issuer) query parameter MUST also be\n * included.\n * @see https://openid.net/specs/openid-connect-frontchannel-1_0.html#RPLogout\n */\n }\n\n clearSession () {\n let session = this.store\n\n if (!session) { return }\n\n delete session[SESSION_PRIVATE_KEY]\n }\n\n /**\n * @param uri {string} Target Resource Server URI\n * @param idToken {IDToken} ID Token to be embedded in the PoP token\n *\n * @returns {Promise}\n */\n popTokenFor (uri, idToken) {\n return PoPToken.issueFor(uri, idToken)\n }\n}\n\nconst SESSION_PRIVATE_KEY = 'oidc.session.privateKey'\n\nRelyingParty.SESSION_PRIVATE_KEY = SESSION_PRIVATE_KEY\n\nmodule.exports = RelyingParty\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","module.exports = window;","/**\n * @module JSON Object Signing and Encryption (JOSE)\n */\nconst crypto = require('./crypto')\nconst JWA = require('./jose/JWA')\nconst JWK = require('./jose/JWK')\nconst JWKSet = require('./jose/JWKSet')\nconst JWT = require('./jose/JWT')\nconst JWS = require('./jose/JWS')\n\n/**\n * Export\n */\nmodule.exports = {\n crypto,\n JWA,\n JWK,\n JWKSet,\n JWT,\n JWS\n}\n","const imported = require('isomorphic-webcrypto')\n\nmodule.exports = (imported.default ? imported.default : imported)\n","import './webcrypto-shim.mjs'\nexport default window.crypto\n","/**\n * @file Web Cryptography API shim\n * @author Artem S Vybornov \n * @license MIT\n */\n(function (global, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], function () {\n return factory(global);\n });\n } else if (typeof module === 'object' && module.exports) {\n // CommonJS-like environments that support module.exports\n module.exports = factory(global);\n } else {\n factory(global);\n }\n}(typeof self !== 'undefined' ? self : this, function (global) {\n 'use strict';\n\n if ( typeof Promise !== 'function' )\n throw \"Promise support required\";\n\n var _crypto = global.crypto || global.msCrypto;\n if ( !_crypto ) return;\n\n var _subtle = _crypto.subtle || _crypto.webkitSubtle;\n if ( !_subtle ) return;\n\n var _Crypto = global.Crypto || _crypto.constructor || Object,\n _SubtleCrypto = global.SubtleCrypto || _subtle.constructor || Object,\n _CryptoKey = global.CryptoKey || global.Key || Object;\n\n var isEdge = global.navigator.userAgent.indexOf('Edge/') > -1;\n var isIE = !!global.msCrypto && !isEdge;\n var isWebkit = !_crypto.subtle && !!_crypto.webkitSubtle;\n if ( !isIE && !isWebkit ) return;\n\n function s2a ( s ) {\n return btoa(s).replace(/\\=+$/, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n }\n\n function a2s ( s ) {\n s += '===', s = s.slice( 0, -s.length % 4 );\n return atob( s.replace(/-/g, '+').replace(/_/g, '/') );\n }\n\n function s2b ( s ) {\n var b = new Uint8Array(s.length);\n for ( var i = 0; i < s.length; i++ ) b[i] = s.charCodeAt(i);\n return b;\n }\n\n function b2s ( b ) {\n if ( b instanceof ArrayBuffer ) b = new Uint8Array(b);\n return String.fromCharCode.apply( String, b );\n }\n\n function alg ( a ) {\n var r = { 'name': (a.name || a || '').toUpperCase().replace('V','v') };\n switch ( r.name ) {\n case 'SHA-1':\n case 'SHA-256':\n case 'SHA-384':\n case 'SHA-512':\n break;\n case 'AES-CBC':\n case 'AES-GCM':\n case 'AES-KW':\n if ( a.length ) r['length'] = a.length;\n break;\n case 'HMAC':\n if ( a.hash ) r['hash'] = alg(a.hash);\n if ( a.length ) r['length'] = a.length;\n break;\n case 'RSAES-PKCS1-v1_5':\n if ( a.publicExponent ) r['publicExponent'] = new Uint8Array(a.publicExponent);\n if ( a.modulusLength ) r['modulusLength'] = a.modulusLength;\n break;\n case 'RSASSA-PKCS1-v1_5':\n case 'RSA-OAEP':\n if ( a.hash ) r['hash'] = alg(a.hash);\n if ( a.publicExponent ) r['publicExponent'] = new Uint8Array(a.publicExponent);\n if ( a.modulusLength ) r['modulusLength'] = a.modulusLength;\n break;\n default:\n throw new SyntaxError(\"Bad algorithm name\");\n }\n return r;\n };\n\n function jwkAlg ( a ) {\n return {\n 'HMAC': {\n 'SHA-1': 'HS1',\n 'SHA-256': 'HS256',\n 'SHA-384': 'HS384',\n 'SHA-512': 'HS512',\n },\n 'RSASSA-PKCS1-v1_5': {\n 'SHA-1': 'RS1',\n 'SHA-256': 'RS256',\n 'SHA-384': 'RS384',\n 'SHA-512': 'RS512',\n },\n 'RSAES-PKCS1-v1_5': {\n '': 'RSA1_5',\n },\n 'RSA-OAEP': {\n 'SHA-1': 'RSA-OAEP',\n 'SHA-256': 'RSA-OAEP-256',\n },\n 'AES-KW': {\n '128': 'A128KW',\n '192': 'A192KW',\n '256': 'A256KW',\n },\n 'AES-GCM': {\n '128': 'A128GCM',\n '192': 'A192GCM',\n '256': 'A256GCM',\n },\n 'AES-CBC': {\n '128': 'A128CBC',\n '192': 'A192CBC',\n '256': 'A256CBC',\n },\n }[a.name][ ( a.hash || {} ).name || a.length || '' ];\n }\n\n function b2jwk ( k ) {\n if ( k instanceof ArrayBuffer || k instanceof Uint8Array ) k = JSON.parse( decodeURIComponent( escape( b2s(k) ) ) );\n var jwk = { 'kty': k.kty, 'alg': k.alg, 'ext': k.ext || k.extractable };\n switch ( jwk.kty ) {\n case 'oct':\n jwk.k = k.k;\n case 'RSA':\n [ 'n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi', 'oth' ].forEach( function ( x ) { if ( x in k ) jwk[x] = k[x] } );\n break;\n default:\n throw new TypeError(\"Unsupported key type\");\n }\n return jwk;\n }\n\n function jwk2b ( k ) {\n var jwk = b2jwk(k);\n if ( isIE ) jwk['extractable'] = jwk.ext, delete jwk.ext;\n return s2b( unescape( encodeURIComponent( JSON.stringify(jwk) ) ) ).buffer;\n }\n\n function pkcs2jwk ( k ) {\n var info = b2der(k), prv = false;\n if ( info.length > 2 ) prv = true, info.shift(); // remove version from PKCS#8 PrivateKeyInfo structure\n var jwk = { 'ext': true };\n switch ( info[0][0] ) {\n case '1.2.840.113549.1.1.1':\n var rsaComp = [ 'n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi' ],\n rsaKey = b2der( info[1] );\n if ( prv ) rsaKey.shift(); // remove version from PKCS#1 RSAPrivateKey structure\n for ( var i = 0; i < rsaKey.length; i++ ) {\n if ( !rsaKey[i][0] ) rsaKey[i] = rsaKey[i].subarray(1);\n jwk[ rsaComp[i] ] = s2a( b2s( rsaKey[i] ) );\n }\n jwk['kty'] = 'RSA';\n break;\n default:\n throw new TypeError(\"Unsupported key type\");\n }\n return jwk;\n }\n\n function jwk2pkcs ( k ) {\n var key, info = [ [ '', null ] ], prv = false;\n switch ( k.kty ) {\n case 'RSA':\n var rsaComp = [ 'n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi' ],\n rsaKey = [];\n for ( var i = 0; i < rsaComp.length; i++ ) {\n if ( !( rsaComp[i] in k ) ) break;\n var b = rsaKey[i] = s2b( a2s( k[ rsaComp[i] ] ) );\n if ( b[0] & 0x80 ) rsaKey[i] = new Uint8Array(b.length + 1), rsaKey[i].set( b, 1 );\n }\n if ( rsaKey.length > 2 ) prv = true, rsaKey.unshift( new Uint8Array([0]) ); // add version to PKCS#1 RSAPrivateKey structure\n info[0][0] = '1.2.840.113549.1.1.1';\n key = rsaKey;\n break;\n default:\n throw new TypeError(\"Unsupported key type\");\n }\n info.push( new Uint8Array( der2b(key) ).buffer );\n if ( !prv ) info[1] = { 'tag': 0x03, 'value': info[1] };\n else info.unshift( new Uint8Array([0]) ); // add version to PKCS#8 PrivateKeyInfo structure\n return new Uint8Array( der2b(info) ).buffer;\n }\n\n var oid2str = { 'KoZIhvcNAQEB': '1.2.840.113549.1.1.1' },\n str2oid = { '1.2.840.113549.1.1.1': 'KoZIhvcNAQEB' };\n\n function b2der ( buf, ctx ) {\n if ( buf instanceof ArrayBuffer ) buf = new Uint8Array(buf);\n if ( !ctx ) ctx = { pos: 0, end: buf.length };\n\n if ( ctx.end - ctx.pos < 2 || ctx.end > buf.length ) throw new RangeError(\"Malformed DER\");\n\n var tag = buf[ctx.pos++],\n len = buf[ctx.pos++];\n\n if ( len >= 0x80 ) {\n len &= 0x7f;\n if ( ctx.end - ctx.pos < len ) throw new RangeError(\"Malformed DER\");\n for ( var xlen = 0; len--; ) xlen <<= 8, xlen |= buf[ctx.pos++];\n len = xlen;\n }\n\n if ( ctx.end - ctx.pos < len ) throw new RangeError(\"Malformed DER\");\n\n var rv;\n\n switch ( tag ) {\n case 0x02: // Universal Primitive INTEGER\n rv = buf.subarray( ctx.pos, ctx.pos += len );\n break;\n case 0x03: // Universal Primitive BIT STRING\n if ( buf[ctx.pos++] ) throw new Error( \"Unsupported bit string\" );\n len--;\n case 0x04: // Universal Primitive OCTET STRING\n rv = new Uint8Array( buf.subarray( ctx.pos, ctx.pos += len ) ).buffer;\n break;\n case 0x05: // Universal Primitive NULL\n rv = null;\n break;\n case 0x06: // Universal Primitive OBJECT IDENTIFIER\n var oid = btoa( b2s( buf.subarray( ctx.pos, ctx.pos += len ) ) );\n if ( !( oid in oid2str ) ) throw new Error( \"Unsupported OBJECT ID \" + oid );\n rv = oid2str[oid];\n break;\n case 0x30: // Universal Constructed SEQUENCE\n rv = [];\n for ( var end = ctx.pos + len; ctx.pos < end; ) rv.push( b2der( buf, ctx ) );\n break;\n default:\n throw new Error( \"Unsupported DER tag 0x\" + tag.toString(16) );\n }\n\n return rv;\n }\n\n function der2b ( val, buf ) {\n if ( !buf ) buf = [];\n\n var tag = 0, len = 0,\n pos = buf.length + 2;\n\n buf.push( 0, 0 ); // placeholder\n\n if ( val instanceof Uint8Array ) { // Universal Primitive INTEGER\n tag = 0x02, len = val.length;\n for ( var i = 0; i < len; i++ ) buf.push( val[i] );\n }\n else if ( val instanceof ArrayBuffer ) { // Universal Primitive OCTET STRING\n tag = 0x04, len = val.byteLength, val = new Uint8Array(val);\n for ( var i = 0; i < len; i++ ) buf.push( val[i] );\n }\n else if ( val === null ) { // Universal Primitive NULL\n tag = 0x05, len = 0;\n }\n else if ( typeof val === 'string' && val in str2oid ) { // Universal Primitive OBJECT IDENTIFIER\n var oid = s2b( atob( str2oid[val] ) );\n tag = 0x06, len = oid.length;\n for ( var i = 0; i < len; i++ ) buf.push( oid[i] );\n }\n else if ( val instanceof Array ) { // Universal Constructed SEQUENCE\n for ( var i = 0; i < val.length; i++ ) der2b( val[i], buf );\n tag = 0x30, len = buf.length - pos;\n }\n else if ( typeof val === 'object' && val.tag === 0x03 && val.value instanceof ArrayBuffer ) { // Tag hint\n val = new Uint8Array(val.value), tag = 0x03, len = val.byteLength;\n buf.push(0); for ( var i = 0; i < len; i++ ) buf.push( val[i] );\n len++;\n }\n else {\n throw new Error( \"Unsupported DER value \" + val );\n }\n\n if ( len >= 0x80 ) {\n var xlen = len, len = 4;\n buf.splice( pos, 0, (xlen >> 24) & 0xff, (xlen >> 16) & 0xff, (xlen >> 8) & 0xff, xlen & 0xff );\n while ( len > 1 && !(xlen >> 24) ) xlen <<= 8, len--;\n if ( len < 4 ) buf.splice( pos, 4 - len );\n len |= 0x80;\n }\n\n buf.splice( pos - 2, 2, tag, len );\n\n return buf;\n }\n\n function CryptoKey ( key, alg, ext, use ) {\n Object.defineProperties( this, {\n _key: {\n value: key\n },\n type: {\n value: key.type,\n enumerable: true,\n },\n extractable: {\n value: (ext === undefined) ? key.extractable : ext,\n enumerable: true,\n },\n algorithm: {\n value: (alg === undefined) ? key.algorithm : alg,\n enumerable: true,\n },\n usages: {\n value: (use === undefined) ? key.usages : use,\n enumerable: true,\n },\n });\n }\n\n function isPubKeyUse ( u ) {\n return u === 'verify' || u === 'encrypt' || u === 'wrapKey';\n }\n\n function isPrvKeyUse ( u ) {\n return u === 'sign' || u === 'decrypt' || u === 'unwrapKey';\n }\n\n [ 'generateKey', 'importKey', 'unwrapKey' ]\n .forEach( function ( m ) {\n var _fn = _subtle[m];\n\n _subtle[m] = function ( a, b, c ) {\n var args = [].slice.call(arguments),\n ka, kx, ku;\n\n switch ( m ) {\n case 'generateKey':\n ka = alg(a), kx = b, ku = c;\n break;\n case 'importKey':\n ka = alg(c), kx = args[3], ku = args[4];\n if ( a === 'jwk' ) {\n b = b2jwk(b);\n if ( !b.alg ) b.alg = jwkAlg(ka);\n if ( !b.key_ops ) b.key_ops = ( b.kty !== 'oct' ) ? ( 'd' in b ) ? ku.filter(isPrvKeyUse) : ku.filter(isPubKeyUse) : ku.slice();\n args[1] = jwk2b(b);\n }\n break;\n case 'unwrapKey':\n ka = args[4], kx = args[5], ku = args[6];\n args[2] = c._key;\n break;\n }\n\n if ( m === 'generateKey' && ka.name === 'HMAC' && ka.hash ) {\n ka.length = ka.length || { 'SHA-1': 512, 'SHA-256': 512, 'SHA-384': 1024, 'SHA-512': 1024 }[ka.hash.name];\n return _subtle.importKey( 'raw', _crypto.getRandomValues( new Uint8Array( (ka.length+7)>>3 ) ), ka, kx, ku );\n }\n\n if ( isWebkit && m === 'generateKey' && ka.name === 'RSASSA-PKCS1-v1_5' && ( !ka.modulusLength || ka.modulusLength >= 2048 ) ) {\n a = alg(a), a.name = 'RSAES-PKCS1-v1_5', delete a.hash;\n return _subtle.generateKey( a, true, [ 'encrypt', 'decrypt' ] )\n .then( function ( k ) {\n return Promise.all([\n _subtle.exportKey( 'jwk', k.publicKey ),\n _subtle.exportKey( 'jwk', k.privateKey ),\n ]);\n })\n .then( function ( keys ) {\n keys[0].alg = keys[1].alg = jwkAlg(ka);\n keys[0].key_ops = ku.filter(isPubKeyUse), keys[1].key_ops = ku.filter(isPrvKeyUse);\n return Promise.all([\n _subtle.importKey( 'jwk', keys[0], ka, true, keys[0].key_ops ),\n _subtle.importKey( 'jwk', keys[1], ka, kx, keys[1].key_ops ),\n ]);\n })\n .then( function ( keys ) {\n return {\n publicKey: keys[0],\n privateKey: keys[1],\n };\n });\n }\n\n if ( ( isWebkit || ( isIE && ( ka.hash || {} ).name === 'SHA-1' ) )\n && m === 'importKey' && a === 'jwk' && ka.name === 'HMAC' && b.kty === 'oct' ) {\n return _subtle.importKey( 'raw', s2b( a2s(b.k) ), c, args[3], args[4] );\n }\n\n if ( isWebkit && m === 'importKey' && ( a === 'spki' || a === 'pkcs8' ) ) {\n return _subtle.importKey( 'jwk', pkcs2jwk(b), c, args[3], args[4] );\n }\n\n if ( isIE && m === 'unwrapKey' ) {\n return _subtle.decrypt( args[3], c, b )\n .then( function ( k ) {\n return _subtle.importKey( a, k, args[4], args[5], args[6] );\n });\n }\n\n var op;\n try {\n op = _fn.apply( _subtle, args );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n if ( isIE ) {\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) { rej(e) };\n op.oncomplete = function ( r ) { res(r.target.result) };\n });\n }\n\n op = op.then( function ( k ) {\n if ( ka.name === 'HMAC' ) {\n if ( !ka.length ) ka.length = 8 * k.algorithm.length;\n }\n if ( ka.name.search('RSA') == 0 ) {\n if ( !ka.modulusLength ) ka.modulusLength = (k.publicKey || k).algorithm.modulusLength;\n if ( !ka.publicExponent ) ka.publicExponent = (k.publicKey || k).algorithm.publicExponent;\n }\n if ( k.publicKey && k.privateKey ) {\n k = {\n publicKey: new CryptoKey( k.publicKey, ka, kx, ku.filter(isPubKeyUse) ),\n privateKey: new CryptoKey( k.privateKey, ka, kx, ku.filter(isPrvKeyUse) ),\n };\n }\n else {\n k = new CryptoKey( k, ka, kx, ku );\n }\n return k;\n });\n\n return op;\n }\n });\n\n [ 'exportKey', 'wrapKey' ]\n .forEach( function ( m ) {\n var _fn = _subtle[m];\n\n _subtle[m] = function ( a, b, c ) {\n var args = [].slice.call(arguments);\n\n switch ( m ) {\n case 'exportKey':\n args[1] = b._key;\n break;\n case 'wrapKey':\n args[1] = b._key, args[2] = c._key;\n break;\n }\n\n if ( ( isWebkit || ( isIE && ( b.algorithm.hash || {} ).name === 'SHA-1' ) )\n && m === 'exportKey' && a === 'jwk' && b.algorithm.name === 'HMAC' ) {\n args[0] = 'raw';\n }\n\n if ( isWebkit && m === 'exportKey' && ( a === 'spki' || a === 'pkcs8' ) ) {\n args[0] = 'jwk';\n }\n\n if ( isIE && m === 'wrapKey' ) {\n return _subtle.exportKey( a, b )\n .then( function ( k ) {\n if ( a === 'jwk' ) k = s2b( unescape( encodeURIComponent( JSON.stringify( b2jwk(k) ) ) ) );\n return _subtle.encrypt( args[3], c, k );\n });\n }\n\n var op;\n try {\n op = _fn.apply( _subtle, args );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n if ( isIE ) {\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) { rej(e) };\n op.oncomplete = function ( r ) { res(r.target.result) };\n });\n }\n\n if ( m === 'exportKey' && a === 'jwk' ) {\n op = op.then( function ( k ) {\n if ( ( isWebkit || ( isIE && ( b.algorithm.hash || {} ).name === 'SHA-1' ) )\n && b.algorithm.name === 'HMAC') {\n return { 'kty': 'oct', 'alg': jwkAlg(b.algorithm), 'key_ops': b.usages.slice(), 'ext': true, 'k': s2a( b2s(k) ) };\n }\n k = b2jwk(k);\n if ( !k.alg ) k['alg'] = jwkAlg(b.algorithm);\n if ( !k.key_ops ) k['key_ops'] = ( b.type === 'public' ) ? b.usages.filter(isPubKeyUse) : ( b.type === 'private' ) ? b.usages.filter(isPrvKeyUse) : b.usages.slice();\n return k;\n });\n }\n\n if ( isWebkit && m === 'exportKey' && ( a === 'spki' || a === 'pkcs8' ) ) {\n op = op.then( function ( k ) {\n k = jwk2pkcs( b2jwk(k) );\n return k;\n });\n }\n\n return op;\n }\n });\n\n [ 'encrypt', 'decrypt', 'sign', 'verify' ]\n .forEach( function ( m ) {\n var _fn = _subtle[m];\n\n _subtle[m] = function ( a, b, c, d ) {\n if ( isIE && ( !c.byteLength || ( d && !d.byteLength ) ) )\n throw new Error(\"Empy input is not allowed\");\n\n var args = [].slice.call(arguments),\n ka = alg(a);\n\n if ( isIE && m === 'decrypt' && ka.name === 'AES-GCM' ) {\n var tl = a.tagLength >> 3;\n args[2] = (c.buffer || c).slice( 0, c.byteLength - tl ),\n a.tag = (c.buffer || c).slice( c.byteLength - tl );\n }\n\n args[1] = b._key;\n\n var op;\n try {\n op = _fn.apply( _subtle, args );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n if ( isIE ) {\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) {\n rej(e);\n };\n\n op.oncomplete = function ( r ) {\n var r = r.target.result;\n\n if ( m === 'encrypt' && r instanceof AesGcmEncryptResult ) {\n var c = r.ciphertext, t = r.tag;\n r = new Uint8Array( c.byteLength + t.byteLength );\n r.set( new Uint8Array(c), 0 );\n r.set( new Uint8Array(t), c.byteLength );\n r = r.buffer;\n }\n\n res(r);\n };\n });\n }\n\n return op;\n }\n });\n\n if ( isIE ) {\n var _digest = _subtle.digest;\n\n _subtle['digest'] = function ( a, b ) {\n if ( !b.byteLength )\n throw new Error(\"Empy input is not allowed\");\n\n var op;\n try {\n op = _digest.call( _subtle, a, b );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) { rej(e) };\n op.oncomplete = function ( r ) { res(r.target.result) };\n });\n\n return op;\n };\n\n global.crypto = Object.create( _crypto, {\n getRandomValues: { value: function ( a ) { return _crypto.getRandomValues(a) } },\n subtle: { value: _subtle },\n });\n\n global.CryptoKey = CryptoKey;\n }\n\n if ( isWebkit ) {\n _crypto.subtle = _subtle;\n\n global.Crypto = _Crypto;\n global.SubtleCrypto = _SubtleCrypto;\n global.CryptoKey = CryptoKey;\n }\n}));\n\n export default {} // section modified by isomorphic-webcrypto build \n","/**\n * Dependencies\n *\n * TODO\n * - switch between Node.js webcrypto package and browser implementation\n */\n// const base64url = require('base64url')\nconst supportedAlgorithms = require('../algorithms')\nconst {NotSupportedError} = require('../errors')\n\n/**\n * JWA\n * https://tools.ietf.org/html/rfc7518\n */\nclass JWA {\n\n /**\n * Sign\n *\n * @description\n * Create a digital signature.\n *\n * @param {string} alg\n * @param {CryptoKey} key\n * @param {string|Buffer} data\n *\n * @return {Promise}\n */\n static async sign (alg, key, data) {\n // normalize the algorithm\n let normalizedAlgorithm = supportedAlgorithms.normalize('sign', alg)\n\n // validate algorithm is supported\n if (normalizedAlgorithm instanceof Error) {\n return Promise.reject(new NotSupportedError(alg))\n }\n\n // validate type of key\n // TODO\n // - is the key suitable for the algorithm?\n // - does that get validated in webcrypto?\n //if (key instanceof CryptoKey) {\n // return Promise.reject(new InvalidKeyError())\n //}\n\n // sign the data\n return normalizedAlgorithm.sign(key, data)\n }\n\n /**\n * Verify\n *\n * @description\n * Verify a digital signature.\n *\n * @param {string} alg\n * @param {CryptoKey} privateKey\n * @param {string|Buffer} signature\n * @param {string|Buffer} data\n *\n * @return {Promise}\n */\n static async verify (alg, key, signature, data) {\n let normalizedAlgorithm = supportedAlgorithms.normalize('verify', alg)\n\n if (normalizedAlgorithm instanceof Error) {\n return Promise.reject(new NotSupportedError(alg))\n }\n\n // TODO\n // validate publicKey\n\n // verify the signature\n return normalizedAlgorithm.verify(key, signature, data)\n }\n\n /**\n * Encrypt\n */\n\n /**\n * Decrypt\n */\n\n /**\n * Import\n */\n static async importKey (key) {\n let normalizedAlgorithm = supportedAlgorithms.normalize('importKey', key.alg)\n return normalizedAlgorithm.importKey(key)\n }\n}\n\n/**\n * Export\n */\nmodule.exports = JWA\n","/**\n * Local dependencies\n */\nconst None = require('./NONE')\nconst HMAC = require('./HMAC')\nconst RSASSA_PKCS1_v1_5 = require('./RSASSA-PKCS1-v1_5')\nconst SupportedAlgorithms = require('./SupportedAlgorithms')\n\n/**\n * Register Supported Algorithms\n */\nconst supportedAlgorithms = new SupportedAlgorithms\n\n/**\n * Sign\n */\nsupportedAlgorithms.define('HS256', 'sign', new HMAC({\n name: 'HMAC',\n hash: {\n name: 'SHA-256'\n }\n}))\n\nsupportedAlgorithms.define('HS384', 'sign', new HMAC({\n name: 'HMAC',\n hash: {\n name: 'SHA-384'\n }\n}))\n\nsupportedAlgorithms.define('HS512', 'sign', new HMAC({\n name: 'HMAC',\n hash: {\n name: 'SHA-512'\n }\n}))\n\nsupportedAlgorithms.define('RS256', 'sign', new RSASSA_PKCS1_v1_5({\n name: 'RSASSA-PKCS1-v1_5',\n hash: {\n name: 'SHA-256'\n }\n}))\n\nsupportedAlgorithms.define('RS384', 'sign', new RSASSA_PKCS1_v1_5({\n name: 'RSASSA-PKCS1-v1_5',\n hash: {\n name: 'SHA-384'\n }\n}))\n\nsupportedAlgorithms.define('RS512', 'sign', new RSASSA_PKCS1_v1_5({\n name: 'RSASSA-PKCS1-v1_5',\n hash: {\n name: 'SHA-512'\n }\n}))\n//supportedAlgorithms.define('ES256', 'sign', {})\n//supportedAlgorithms.define('ES384', 'sign', {})\n//supportedAlgorithms.define('ES512', 'sign', {})\n//supportedAlgorithms.define('PS256', 'sign', {})\n//supportedAlgorithms.define('PS384', 'sign', {})\n//supportedAlgorithms.define('PS512', 'sign', {})\n\nsupportedAlgorithms.define('none', 'sign', new None({\n // nothing goes here\n}))\n\n/**\n * Verify\n */\nsupportedAlgorithms.define('HS256', 'verify', new HMAC({\n name: 'HMAC',\n hash: {\n name: 'SHA-256'\n }\n}))\n\nsupportedAlgorithms.define('HS384', 'verify', new HMAC({\n name: 'HMAC',\n hash: {\n name: 'SHA-384'\n }\n}))\n\nsupportedAlgorithms.define('HS512', 'verify', new HMAC({\n name: 'HMAC',\n hash: {\n name: 'SHA-512'\n }\n}))\n\nsupportedAlgorithms.define('RS256', 'verify', new RSASSA_PKCS1_v1_5({\n name: 'RSASSA-PKCS1-v1_5',\n hash: {\n name: 'SHA-256'\n }\n}))\n\nsupportedAlgorithms.define('RS384', 'verify', new RSASSA_PKCS1_v1_5({\n name: 'RSASSA-PKCS1-v1_5',\n hash: {\n name: 'SHA-384'\n }\n}))\n\nsupportedAlgorithms.define('RS512', 'verify', new RSASSA_PKCS1_v1_5({\n name: 'RSASSA-PKCS1-v1_5',\n hash: {\n name: 'SHA-512'\n }\n}))\n//supportedAlgorithms.define('ES256', 'verify', {})\n//supportedAlgorithms.define('ES384', 'verify', {})\n//supportedAlgorithms.define('ES512', 'verify', {})\n//supportedAlgorithms.define('PS256', 'verify', {})\n//supportedAlgorithms.define('PS384', 'verify', {})\n//supportedAlgorithms.define('PS512', 'verify', {})\n\nsupportedAlgorithms.define('none', 'verify', new None({\n // nothing goes here\n}))\n\nsupportedAlgorithms.define('RS256', 'importKey', new RSASSA_PKCS1_v1_5({\n name: 'RSASSA-PKCS1-v1_5',\n hash: {\n name: 'SHA-256'\n }\n}))\n\nsupportedAlgorithms.define('RS384', 'importKey', new RSASSA_PKCS1_v1_5({\n name: 'RSASSA-PKCS1-v1_5',\n hash: {\n name: 'SHA-384'\n }\n}))\n\nsupportedAlgorithms.define('RS512', 'importKey', new RSASSA_PKCS1_v1_5({\n name: 'RSASSA-PKCS1-v1_5',\n hash: {\n name: 'SHA-512'\n }\n}))\n\n/**\n * Export\n */\nmodule.exports = supportedAlgorithms\n\n\n","/**\n * None\n */\nclass None {\n /**\n * sign\n */\n sign () {\n return Promise.resolve('')\n }\n\n /**\n * verify\n */\n verify () {\n // this will never get called. but you looked.\n }\n}\n\n/**\n * Export\n */\nmodule.exports = None\n","'use strict'\n\n/**\n * Dependencies\n * @ignore\n */\nconst base64url = require('base64url')\nconst crypto = require('isomorphic-webcrypto')\nconst TextEncoder = require('../text-encoder')\n\n/**\n * HMAC with SHA-2 Functions\n */\nclass HMAC {\n\n /**\n * Constructor\n *\n * @param {string} bitlength\n */\n constructor (params) {\n this.params = params\n }\n\n /**\n * Sign\n *\n * @description\n * Generate a hash-based message authentication code for a\n * given input and key. Enforce the key length is equal to\n * or greater than the bitlength.\n *\n * @param {CryptoKey} key\n * @param {string} data\n *\n * @returns {string}\n */\n sign (key, data) {\n let algorithm = this.params\n\n // TODO: validate key length\n\n data = new TextEncoder().encode(data)\n\n return crypto.subtle\n .sign(algorithm, key, data)\n .then(signature => base64url(Buffer.from(signature)))\n }\n\n /**\n * Verify\n *\n * @description\n * Verify a digital signature for a given input and private key.\n *\n * @param {CryptoKey} key\n * @param {string} signature\n * @param {string} data\n *\n * @returns {Boolean}\n */\n verify (key, signature, data) {\n let algorithm = this.params\n\n if (typeof signature === 'string') {\n signature = Uint8Array.from(base64url.toBuffer(signature))\n }\n\n if (typeof data === 'string') {\n data = new TextEncoder().encode(data)\n }\n\n return crypto.subtle.verify(algorithm, key, signature, data)\n }\n\n /**\n * Assert Sufficient Key Length\n *\n * @description Assert that the key length is sufficient\n * @param {string} key\n */\n assertSufficientKeyLength (key) {\n if (key.length < this.bitlength) {\n throw new Error('The key is too short.')\n }\n }\n}\n\n/**\n * Export\n */\nmodule.exports = HMAC\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","module.exports = require('./dist/base64url').default;\nmodule.exports.default = module.exports;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar pad_string_1 = require(\"./pad-string\");\nfunction encode(input, encoding) {\n if (encoding === void 0) { encoding = \"utf8\"; }\n if (Buffer.isBuffer(input)) {\n return fromBase64(input.toString(\"base64\"));\n }\n return fromBase64(Buffer.from(input, encoding).toString(\"base64\"));\n}\n;\nfunction decode(base64url, encoding) {\n if (encoding === void 0) { encoding = \"utf8\"; }\n return Buffer.from(toBase64(base64url), \"base64\").toString(encoding);\n}\nfunction toBase64(base64url) {\n base64url = base64url.toString();\n return pad_string_1.default(base64url)\n .replace(/\\-/g, \"+\")\n .replace(/_/g, \"/\");\n}\nfunction fromBase64(base64) {\n return base64\n .replace(/=/g, \"\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\");\n}\nfunction toBuffer(base64url) {\n return Buffer.from(toBase64(base64url), \"base64\");\n}\nvar base64url = encode;\nbase64url.encode = encode;\nbase64url.decode = decode;\nbase64url.toBase64 = toBase64;\nbase64url.fromBase64 = fromBase64;\nbase64url.toBuffer = toBuffer;\nexports.default = base64url;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction padString(input) {\n var segmentLength = 4;\n var stringLength = input.length;\n var diff = stringLength % segmentLength;\n if (!diff) {\n return input;\n }\n var position = stringLength;\n var padLength = segmentLength - diff;\n var paddedStringLength = stringLength + padLength;\n var buffer = Buffer.alloc(paddedStringLength);\n buffer.write(input);\n while (padLength--) {\n buffer.write(\"=\", position++);\n }\n return buffer.toString();\n}\nexports.default = padString;\n","const TextEncoder = global.TextEncoder\n ? global.TextEncoder // browser\n : require('@sinonjs/text-encoding').TextEncoder // node shim\nmodule.exports = TextEncoder\n","/* (ignored) */","'use strict'\n\n/**\n * Dependencies\n * @ignore\n */\nconst base64url = require('base64url')\nlet crypto = require('../crypto')\nconst TextEncoder = require('../text-encoder')\n\n/**\n * RSASSA-PKCS1-v1_5\n */\nclass RSASSA_PKCS1_v1_5 {\n\n /**\n * constructor\n *\n * @param {string} bitlength\n */\n constructor (params) {\n this.params = params\n }\n\n /**\n * sign\n *\n * @description\n * Generate a digital signature for a given input and private key.\n *\n * @param {CryptoKey} key\n * @param {BufferSource} data\n *\n * @returns {Promise}\n */\n sign (key, data) {\n let algorithm = this.params\n\n // TODO\n //if (!this.sufficientKeySize()) {\n // return Promise.reject(\n // new Error(\n // 'A key size of 2048 bits or larger must be used with RSASSA-PKCS1-v1_5'\n // )\n // )\n //}\n\n data = new TextEncoder().encode(data)\n\n return crypto.subtle\n .sign(algorithm, key, data)\n .then(signature => base64url(Buffer.from(signature)))\n }\n\n /**\n * verify\n *\n * @description\n * Verify a digital signature for a given input and private key.\n *\n * @param {CryptoKey} key\n * @param {BufferSource} signature\n * @param {BufferSource} data\n *\n * @returns {Promise}\n */\n verify (key, signature, data) {\n let algorithm = this.params\n\n if (typeof signature === 'string') {\n signature = Uint8Array.from(base64url.toBuffer(signature))\n }\n\n if (typeof data === 'string') {\n data = new TextEncoder().encode(data)\n }\n // ...\n\n return crypto.subtle.verify(algorithm, key, signature, data)\n }\n\n /**\n * importKey\n *\n * @param {JWK} key\n * @returns {Promise}\n */\n async importKey (key) {\n let jwk = Object.assign({}, key)\n let algorithm = this.params\n let usages = key['key_ops'] || []\n\n if (key.use === 'sig') {\n usages.push('verify')\n }\n\n if (key.use === 'enc') {\n // TODO: handle encryption keys\n return Promise.resolve(key)\n }\n\n if (key.key_ops) {\n usages = key.key_ops\n }\n\n return crypto.subtle\n .importKey('jwk', jwk, algorithm, true, usages)\n .then(cryptoKey => {\n Object.defineProperty(jwk, 'cryptoKey', {\n enumerable: false,\n value: cryptoKey\n })\n\n return jwk\n })\n }\n}\n\n/**\n * Export\n */\nmodule.exports = RSASSA_PKCS1_v1_5\n","/**\n * Dependencies\n */\nconst NotSupportedError = require('../errors/NotSupportedError')\n\n/**\n * Operations\n */\nconst operations = [\n 'sign',\n 'verify',\n 'encrypt',\n 'decrypt',\n 'importKey'\n]\n\n/**\n * SupportedAlgorithms\n */\nclass SupportedAlgorithms {\n\n /**\n * constructor\n */\n constructor () {\n operations.forEach(op => {\n this[op] = {}\n })\n }\n\n /**\n * Supported Operations\n */\n static get operations () {\n return operations\n }\n\n /**\n * define\n *\n * @description\n * Register Web Crypto API algorithm parameter for an algorithm\n * and operation.\n *\n * @param {string} alg\n * @param {string} op\n * @param {Object} argument\n */\n define (alg, op, argument) {\n let registeredAlgorithms = this[op]\n registeredAlgorithms[alg] = argument\n }\n\n /**\n * normalize\n *\n * @description\n * Map JWA alg name to Web Crypto API algorithm parameter\n *\n * @param {string} op\n * @param {Object} alg\n *\n * @returns {Object}\n */\n normalize (op, alg) {\n let registeredAlgorithms = this[op]\n\n if (!registeredAlgorithms) {\n return new SyntaxError() // what kind of error should this be?\n }\n\n let argument = registeredAlgorithms[alg]\n\n if (!argument) {\n return new NotSupportedError(alg)\n }\n\n return argument\n }\n}\n\n/**\n * Export\n */\nmodule.exports = SupportedAlgorithms\n","/**\n * NotSupportedError\n */\nclass NotSupportedError extends Error {\n constructor (alg) {\n super()\n this.message = `${alg} is not a supported algorithm`\n }\n}\n\n/**\n * Export\n */\nmodule.exports = NotSupportedError\n","module.exports = {\n DataError: require('./DataError'),\n NotSupportedError: require('./NotSupportedError')\n}\n","/**\n * DataError\n */\nclass DataError extends Error {\n constructor (message) {\n super(message)\n }\n}\n\n/**\n * Export\n */\nmodule.exports = DataError\n","'use strict'\n\n/**\n * Dependencies\n * @ignore\n */\nconst JWA = require('./JWA')\n\n/**\n * JWK Class\n */\nclass JWK {\n constructor ({ kty, use, key_ops, alg, kid, x5u, x5c, x5t } = {}) {\n this.kty = kty\n this.use = use\n this.key_ops = key_ops\n this.alg = alg\n this.kid = kid\n this.x5u = x5u\n this.x5c = x5c\n this.x5t = x5t\n }\n\n /**\n * importKey\n *\n * TODO:\n * - should this be on JWA?\n */\n static async importKey (jwk) {\n return JWA.importKey(jwk)\n }\n\n\n}\n\n/**\n * Export\n */\nmodule.exports = JWK\n","'use strict'\n\n/**\n * Dependencies\n */\nconst JWK = require('./JWK')\n\n/**\n * JWKSet\n *\n * @class\n * JWKSet represents a JSON Web Key Set as described in Section 5 of RFC 7517:\n * https://tools.ietf.org/html/rfc7517#section-5\n */\nclass JWKSet {\n constructor ({ keys } = {}) {\n this.keys = keys\n }\n\n /**\n * importKeys\n */\n static async importKeys (jwks) {\n if (!jwks.keys) {\n return Promise.reject(new Error('Cannot import JWKSet: keys property is empty'))\n }\n\n let imported, importing\n\n try {\n imported = new JWKSet(jwks)\n importing = jwks.keys.map(key => JWK.importKey(key))\n } catch (err) {\n return Promise.reject(err)\n }\n\n return Promise.all(importing)\n .then(keys => {\n imported.keys = keys\n return imported\n })\n }\n}\n\n/**\n * Export\n */\nmodule.exports = JWKSet\n","/**\n * Dependencies\n */\nconst base64url = require('base64url')\nconst JWS = require('./JWS')\nconst DataError = require('../errors/DataError')\nconst JOSEHeader = require('./JOSEHeader')\n\n/**\n * JWT\n */\nclass JWT {\n constructor (data = {}) {\n this.type = data.type\n this.segments = data.segments\n this.header = new JOSEHeader(data.header)\n this.protected = data.protected\n this.unprotected = data.unprotected\n this.iv = data.iv\n this.aad = data.aad\n this.ciphertext = data.ciphertext\n this.tag = data.tag\n this.recipients = data.recipients\n this.payload = data.payload\n this.signatures = data.signatures\n this.signature = data.signature\n this.key = data.key\n this.serialization = data.serialization || 'compact' // default\n }\n\n /**\n * decode\n *\n * @description\n * Decode a JSON Web Token\n *\n * @param {string} data\n * @returns {JWT}\n */\n static decode (data) {\n let ExtendedJWT = this\n let jwt\n\n if (typeof data !== 'string') {\n throw new DataError('JWT must be a string')\n }\n\n // JSON of Flattened JSON Serialization\n if (data.startsWith('{')) {\n try {\n data = JSON.parse(data, () => {})\n } catch (error) {\n throw new DataError('Invalid JWT serialization')\n }\n\n if (data.signatures || data.recipients) {\n data.serialization = 'json'\n } else {\n data.serialization = 'flattened'\n }\n\n jwt = new ExtendedJWT(data, { filter: false })\n\n // Compact Serialization\n } else {\n try {\n let serialization = 'compact'\n let segments = data.split('.')\n let length = segments.length\n\n if (length !== 3 && length !== 5) {\n throw new Error('Malformed JWT')\n }\n\n let header = JSON.parse(base64url.decode(segments[0]))\n\n // JSON Web Signature\n if (length === 3) {\n let type = 'JWS'\n let payload = JSON.parse(base64url.decode(segments[1]))\n let signature = segments[2]\n\n jwt = new ExtendedJWT(\n { type, segments, header, payload, signature, serialization },\n { filter: false }\n )\n }\n\n // JSON Web Encryption\n if (length === 5) {\n //let type = 'JWE'\n //let [protected, encryption_key, iv, ciphertext, tag] = segments\n\n //jwt = new ExtendedJWT({\n // type,\n // protected: base64url.decode(JSON.parse(protected)),\n // encryption_key,\n // iv,\n // ciphertext,\n // tag,\n // serialization\n //})\n }\n } catch (error) {\n throw new DataError('Invalid JWT compact serialization')\n }\n }\n\n return jwt\n }\n\n /**\n * encode\n *\n * @description\n * Encode a JSON Web Token\n *\n * @param {Object} header\n * @param {Object} payload\n * @param {CryptoKey} key\n *\n * @returns {Promise}\n */\n static encode (header, payload, key) {\n let jwt = new JWT(header, payload)\n return jwt.encode(key)\n }\n\n\n /**\n * verify\n *\n * @description\n *\n * @param {CryptoKey} key\n * @param {string} token\n *\n * @returns {Promise}\n */\n static async verify (key, token) {\n let jwt = JWT.decode(token)\n jwt.key = key\n return jwt.verify().then(verified => jwt)\n }\n\n /**\n * isJWE\n */\n isJWE () {\n return !!this.header.enc\n }\n\n /**\n * resolveKeys\n */\n resolveKeys (jwks) {\n let kid = this.header.kid\n let keys, match\n\n // treat an array as the \"keys\" property of a JWK Set\n if (Array.isArray(jwks)) {\n keys = jwks\n }\n\n // presence of keys indicates object is a JWK Set\n if (jwks.keys) {\n keys = jwks.keys\n }\n\n // wrap a plain object they is not a JWK Set in Array\n if (!jwks.keys && typeof jwks === 'object') {\n keys = [jwks]\n }\n\n // ensure there are keys to search\n if (!keys) {\n throw new DataError('Invalid JWK argument')\n }\n\n // match by \"kid\" or \"use\" header\n if (kid) {\n match = keys.find(jwk => jwk.kid === kid)\n } else {\n match = keys.find(jwk => jwk.use === 'sig')\n }\n\n // assign matching key to JWT and return a boolean\n if (match) {\n this.key = match.cryptoKey\n return true\n } else {\n return false\n }\n }\n\n /**\n * encode\n *\n * @description\n * Encode a JWT instance\n *\n * @returns {Promise}\n */\n async encode () {\n let token = this\n\n if (this.isJWE()) {\n return JWE.encrypt(token)\n } else {\n return JWS.sign(token)\n }\n }\n\n /**\n * verify\n *\n * @description\n * Verify a decoded JWT instance\n *\n * @returns {Promise}\n */\n async verify () {\n return JWS.verify(this)\n }\n}\n\n/**\n * Export\n */\nmodule.exports = JWT\n","/**\n * Dependencies\n */\nconst base64url = require('base64url')\nconst JWA = require('./JWA')\nconst { DataError } = require('../errors')\nconst JOSEHeader = require('./JOSEHeader')\n\n/**\n * JWS\n */\nclass JWS {\n constructor (data = {}) {\n // compact\n this.header = new JOSEHeader(data.header)\n this.payload = data.payload || {}\n this.signature = data.signature\n\n // flattened\n this.protected = data.protected\n\n // JSON serialization\n this.signatures = data.signatures\n\n this.verified = false\n }\n\n /**\n * sign\n *\n * @description\n * Encode a JWT instance\n *\n * @param {Object} token\n * @returns {Promise}\n */\n static async sign (token) {\n let payload = base64url(JSON.stringify(token.payload))\n\n // compact serialization\n if (token.serialization === 'compact') {\n let {key, header: {alg}} = token\n let header = base64url(JSON.stringify(token.header))\n let data = `${header}.${payload}`\n\n return JWA.sign(alg, key, data).then(signature => `${data}.${signature}`)\n }\n\n // JSON serialization\n if (token.serialization === 'json') {\n\n }\n\n // Flattened serialization\n if (token.serialization === 'flattened') {\n\n }\n\n return Promise.reject(new DataError('Unsupported serialization'))\n }\n\n /**\n * verify\n */\n static async verify (jwt) {\n // multiple signatures\n if (jwt.signatures) {\n // ...\n }\n\n let {key, signature, header: {alg}} = jwt\n\n // one signature\n if (jwt.signature) {\n let [header, payload] = jwt.segments\n let data = `${header}.${payload}`\n\n if (alg === 'none') {\n return Promise.reject(new DataError('Signature provided to verify with alg: none'))\n }\n\n return JWA.verify(alg, key, signature, data).then(verified => {\n jwt.verified = verified\n return verified\n })\n }\n\n if (alg === 'none') {\n if (!key && !signature) {\n jwt.verified = true\n\n return Promise.resolve(true)\n }\n\n if (key) {\n return Promise.reject(new DataError('Key provided to verify signature with alg: none'))\n }\n }\n\n // no signatures to verify\n return Promise.reject(new DataError('Missing signature(s)'))\n }\n}\n\n/**\n * Export\n */\nmodule.exports = JWS\n","/**\n * Header\n */\nclass JOSEHeader {\n constructor ({ typ, cty, alg, jku, kid, x5u, x5c, x5t, crit, enc, zip } = {}) {\n this.typ = typ\n this.cty = cty\n this.alg = alg\n this.jku = jku\n this.kid = kid\n this.x5u = x5u\n this.x5c = x5c\n this.x5t = x5t\n this.crit = crit\n this.enc = enc\n this.zip = zip\n }\n\n /**\n * isJWS\n */\n isJWS () {}\n\n /**\n * isJWE\n */\n isJWE () {}\n}\n\n/**\n * Export\n */\nmodule.exports = JOSEHeader\n","/**\n * Dependencies\n */\nconst assert = require('assert')\nconst base64url = require('base64url')\nconst { crypto, JWT } = require('@solid/jose')\nconst FormUrlEncoded = require('./FormUrlEncoded')\nconst { URL } = require('whatwg-url')\n\n/**\n * Authentication Request\n */\nclass AuthenticationRequest {\n /**\n * create\n *\n * @description\n * Create a new authentication request with generated state and nonce,\n * validate presence of required parameters, serialize the request data and\n * persist it to the session, and return a promise for an authentication\n * request URI.\n *\n * @param {RelyingParty} rp – instance of RelyingParty\n * @param {Object} options - optional request parameters\n * @param {Object} session – reference to localStorage or other session object\n *\n * @returns {Promise}\n */\n static create (rp, options, session) {\n const {provider, defaults, registration} = rp\n\n let issuer, endpoint, client, params\n\n return Promise.resolve()\n .then(() => {\n // validate presence of OP configuration, RP client registration,\n // and default parameters\n assert(provider.configuration,\n 'RelyingParty provider OpenID Configuration is missing')\n\n assert(defaults.authenticate,\n 'RelyingParty default authentication parameters are missing')\n\n assert(registration,\n 'RelyingParty client registration is missing')\n\n // define basic elements of the request\n issuer = provider.configuration.issuer\n endpoint = provider.configuration.authorization_endpoint\n client = { client_id: registration.client_id}\n params = Object.assign(defaults.authenticate, client, options)\n\n // validate presence of required configuration and parameters\n assert(issuer,\n 'Missing issuer in provider OpenID Configuration')\n\n assert(endpoint,\n 'Missing authorization_endpoint in provider OpenID Configuration')\n\n assert(params.scope,\n 'Missing scope parameter in authentication request')\n\n assert(params.response_type,\n 'Missing response_type parameter in authentication request')\n\n assert(params.client_id,\n 'Missing client_id parameter in authentication request')\n\n assert(params.redirect_uri,\n 'Missing redirect_uri parameter in authentication request')\n\n // generate state and nonce random octets\n params.state = Array.from(crypto.getRandomValues(new Uint8Array(16)))\n params.nonce = Array.from(crypto.getRandomValues(new Uint8Array(16)))\n\n // hash the state and nonce parameter values\n return Promise.all([\n crypto.subtle.digest({ name: 'SHA-256' }, new Uint8Array(params.state)),\n crypto.subtle.digest({ name: 'SHA-256' }, new Uint8Array(params.nonce))\n ])\n })\n\n // serialize the request with original values, store in session by\n // encoded state param, and replace state/nonce octets with encoded\n // digests\n .then(digests => {\n let state = base64url(Buffer.from(digests[0]))\n let nonce = base64url(Buffer.from(digests[1]))\n let key = `${issuer}/requestHistory/${state}`\n\n // store the request params for response validation\n // with serialized octet values for state and nonce\n session[key] = JSON.stringify(params)\n\n // replace state and nonce octets with base64url encoded digests\n params.state = state\n params.nonce = nonce\n })\n\n .then(() => AuthenticationRequest.generateSessionKeys())\n\n .then(sessionKeys => {\n AuthenticationRequest.storeSessionKeys(sessionKeys, params, session)\n })\n\n // optionally encode a JWT with the request parameters\n // and replace params with `{ request: }\n .then(() => {\n if (provider.configuration.request_parameter_supported) {\n return AuthenticationRequest.encodeRequestParams(params)\n\n .then(encodedParams => { params = encodedParams })\n }\n })\n\n // render the request URI and terminate the algorithm\n .then(() => {\n let url = new URL(endpoint)\n url.search = FormUrlEncoded.encode(params)\n\n return url.href\n })\n }\n\n static generateSessionKeys () {\n return crypto.subtle.generateKey(\n {\n name: \"RSASSA-PKCS1-v1_5\",\n modulusLength: 2048,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n hash: { name: \"SHA-256\" },\n },\n true,\n [\"sign\", \"verify\"]\n )\n .then((keyPair) => {\n // returns a keypair object\n return Promise.all([\n crypto.subtle.exportKey('jwk', keyPair.publicKey),\n crypto.subtle.exportKey('jwk', keyPair.privateKey)\n ])\n })\n .then(jwkPair => {\n let [ publicJwk, privateJwk ] = jwkPair\n\n return { public: publicJwk, private: privateJwk }\n })\n }\n\n static storeSessionKeys (sessionKeys, params, session) {\n // store the private one in session, public one goes into params\n session['oidc.session.privateKey'] = JSON.stringify(sessionKeys.private)\n params.key = sessionKeys.public\n }\n\n static encodeRequestParams (params) {\n const excludeParams = ['scope', 'client_id', 'response_type', 'state']\n\n const keysToEncode = Object.keys(params).filter(key => !excludeParams.includes(key))\n\n let payload = {}\n\n keysToEncode.forEach(key => {\n payload[key] = params[key]\n })\n\n let requestParamJwt = new JWT({\n header: { alg: 'none' },\n payload\n }, { filter: false })\n\n return requestParamJwt.encode()\n .then(requestParamCompact => {\n let newParams = {\n scope: params['scope'],\n client_id: params['client_id'],\n response_type: params['response_type'],\n request: requestParamCompact,\n state: params['state']\n }\n\n return newParams\n })\n }\n}\n\n/**\n * Export\n */\nmodule.exports = AuthenticationRequest\n","/**\n * Dependencies\n */\n\n/**\n * FormUrlEncoded\n */\nclass FormUrlEncoded {\n\n /**\n * Encode\n *\n * @description\n * Represent an object as x-www-form-urlencoded string.\n *\n * @param {Object} data\n * @returns {string}\n */\n static encode (data) {\n let pairs = []\n\n Object.keys(data).forEach(function (key) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]))\n })\n\n return pairs.join('&')\n }\n\n /**\n * Decode\n *\n * @description\n * Parse a x-www-form-urlencoded into an object.\n *\n * @param {string} data\n * @returns {Object}\n */\n static decode (data) {\n let obj = {}\n\n data.split('&').forEach(function (property) {\n let pair = property.split('=')\n let key = decodeURIComponent(pair[0])\n let val = decodeURIComponent(pair[1])\n\n obj[key] = val\n })\n\n return obj\n }\n}\n\n/**\n * Export\n */\nmodule.exports = FormUrlEncoded\n","/**\n * Dependencies\n */\nconst { URL } = require('whatwg-url')\nconst assert = require('assert')\nconst { crypto } = require('@solid/jose')\nconst base64url = require('base64url')\nconst fetch = require('node-fetch')\nconst Headers = fetch.Headers ? fetch.Headers : global.Headers\nconst FormUrlEncoded = require('./FormUrlEncoded')\nconst IDToken = require('./IDToken')\nconst Session = require('./Session')\nconst onHttpError = require('./onHttpError')\nconst HttpError = require('standard-http-error')\n\n/**\n * AuthenticationResponse\n */\nclass AuthenticationResponse {\n /**\n * @param rp {RelyingParty}\n * @param [redirect] {string} req.query\n * @param [body] {string} req.body.text\n * @param session {Session|Storage} req.session or localStorage or similar\n * @param params {object} hashmap\n * @param mode {string} 'query'/'fragment'/'form_post',\n * determined in `parseResponse()`\n */\n constructor ({rp, redirect, body, session, mode, params = {}}) {\n this.rp = rp\n this.redirect = redirect\n this.body = body\n this.session = session\n this.mode = mode\n this.params = params\n }\n\n /**\n * validateResponse\n *\n * @description\n * Authentication response validation.\n *\n * @param {string|Object} response\n *\n * @returns {Promise}\n */\n static validateResponse (response) {\n return Promise.resolve(response)\n .then(this.parseResponse)\n .then(this.errorResponse)\n .then(this.matchRequest)\n .then(this.validateStateParam)\n .then(this.validateResponseMode)\n .then(this.validateResponseParams)\n .then(this.exchangeAuthorizationCode)\n .then(this.validateIDToken)\n .then(Session.fromAuthResponse)\n }\n\n /**\n * parseResponse\n *\n * @param {object} response\n *\n * @returns {object}\n */\n static parseResponse (response) {\n let {redirect, body} = response\n\n // response must be either a redirect uri or request body, but not both\n if ((redirect && body) || (!redirect && !body)) {\n throw new HttpError(400, 'Invalid response mode')\n }\n\n // parse redirect uri\n if (redirect) {\n let url = new URL(redirect)\n let {search, hash} = url\n\n if ((search && hash) || (!search && !hash)) {\n throw new HttpError(400, 'Invalid response mode')\n }\n\n if (search) {\n response.params = FormUrlEncoded.decode(search.substring(1))\n response.mode = 'query'\n }\n\n if (hash) {\n response.params = FormUrlEncoded.decode(hash.substring(1))\n response.mode = 'fragment'\n }\n }\n\n // parse request form body\n if (body) {\n response.params = FormUrlEncoded.decode(body)\n response.mode = 'form_post'\n }\n\n return response\n }\n\n /**\n * errorResponse\n *\n * @param {AuthenticationResponse} response\n *\n * @throws {Error} If response params include the OAuth2 'error' param,\n * throws an error based on it.\n *\n * @returns {AuthenticationResponse} Chainable\n *\n * @todo Figure out HTTP status code (typically 400, 401 or 403)\n * based on the OAuth2/OIDC `error` code, probably using an external library\n */\n static errorResponse (response) {\n const errorCode = response.params.error\n\n if (errorCode) {\n const errorParams = {}\n errorParams['error'] = errorCode\n errorParams['error_description'] = response.params['error_description']\n errorParams['error_uri'] = response.params['error_uri']\n errorParams['state'] = response.params['state']\n\n const error = new Error(`AuthenticationResponse error: ${errorCode}`)\n error.info = errorParams\n throw error\n }\n\n return response\n }\n\n /**\n * matchRequest\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static matchRequest (response) {\n let {rp, params, session} = response\n let state = params.state\n let issuer = rp.provider.configuration.issuer\n\n if (!state) {\n throw new Error(\n 'Missing state parameter in authentication response')\n }\n\n let key = `${issuer}/requestHistory/${state}`\n let request = session[key]\n\n if (!request) {\n throw new Error(\n 'Mismatching state parameter in authentication response')\n }\n\n response.request = JSON.parse(request)\n return response\n }\n\n /**\n * validateStateParam\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static validateStateParam (response) {\n let octets = new Uint8Array(response.request.state)\n let encoded = response.params.state\n\n return crypto.subtle.digest({ name: 'SHA-256' }, octets).then(digest => {\n if (encoded !== base64url(Buffer.from(digest))) {\n throw new Error(\n 'Mismatching state parameter in authentication response')\n }\n\n return response\n })\n }\n\n /**\n * validateResponseMode\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static validateResponseMode (response) {\n if (response.request.response_type !== 'code' && response.mode === 'query') {\n throw new Error('Invalid response mode')\n }\n\n return response\n }\n\n /**\n * validateResponseParams\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static validateResponseParams (response) {\n let {request, params} = response\n let expectedParams = request.response_type.split(' ')\n\n if (expectedParams.includes('code')) {\n assert(params.code,\n 'Missing authorization code in authentication response')\n // TODO assert novelty of code\n }\n\n if (expectedParams.includes('id_token')) {\n assert(params.id_token,\n 'Missing id_token in authentication response')\n }\n\n if (expectedParams.includes('token')) {\n assert(params.access_token,\n 'Missing access_token in authentication response')\n\n assert(params.token_type,\n 'Missing token_type in authentication response')\n }\n\n return response\n }\n\n /**\n * exchangeAuthorizationCode\n *\n * @param {Object} response\n * @returns {Promise} response object\n */\n static exchangeAuthorizationCode (response) {\n let {rp, params, request} = response\n let code = params.code\n\n // only exchange the authorization code when the response type is \"code\"\n if (!code || request['response_type'] !== 'code') {\n return Promise.resolve(response)\n }\n\n let {provider, registration} = rp\n let id = registration['client_id']\n let secret = registration['client_secret']\n\n // verify the client is not public\n if (!secret) {\n return Promise.reject(new Error(\n 'Client cannot exchange authorization code because ' +\n 'it is not a confidential client'))\n }\n\n // initialize token request arguments\n let endpoint = provider.configuration.token_endpoint\n let method = 'POST'\n\n // initialize headers\n let headers = new Headers({\n 'Content-Type': 'application/x-www-form-urlencoded'\n })\n\n // initialize the token request parameters\n let bodyContents = {\n 'grant_type': 'authorization_code',\n 'code': code,\n 'redirect_uri': request['redirect_uri']\n }\n\n // determine client authentication method\n let authMethod = registration['token_endpoint_auth_method']\n || 'client_secret_basic'\n\n // client secret basic authentication\n if (authMethod === 'client_secret_basic') {\n let credentials = new Buffer(`${id}:${secret}`).toString('base64')\n headers.set('Authorization', `Basic ${credentials}`)\n }\n\n // client secret post authentication\n if (authMethod === 'client_secret_post') {\n bodyContents['client_id'] = id\n bodyContents['client_secret'] = secret\n }\n\n let body = FormUrlEncoded.encode(bodyContents)\n\n // TODO\n // client_secret_jwt authentication\n // private_key_jwt\n\n // make the token request\n\n return fetch(endpoint, {method, headers, body})\n .then(onHttpError('Error exchanging authorization code'))\n .then(tokenResponse => tokenResponse.json())\n .then(tokenResponse => {\n assert(tokenResponse['access_token'],\n 'Missing access_token in token response')\n\n assert(tokenResponse['token_type'],\n 'Missing token_type in token response')\n\n assert(tokenResponse['id_token'],\n 'Missing id_token in token response')\n\n // anything else?\n\n // IS THIS THE RIGHT THING TO DO HERE?\n response.params = Object.assign(response.params, tokenResponse)\n return response\n })\n }\n\n\n /**\n * validateIDToken\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static validateIDToken (response) {\n // only validate the ID Token if present in the response\n if (!response.params.id_token) {\n return Promise.resolve(response)\n }\n\n return Promise.resolve(response)\n .then(AuthenticationResponse.decryptIDToken)\n .then(AuthenticationResponse.decodeIDToken)\n .then(AuthenticationResponse.validateIssuer)\n .then(AuthenticationResponse.validateAudience)\n .then(AuthenticationResponse.resolveKeys)\n .then(AuthenticationResponse.verifySignature)\n .then(AuthenticationResponse.validateExpires)\n .then(AuthenticationResponse.verifyNonce)\n .then(AuthenticationResponse.validateAcr)\n .then(AuthenticationResponse.validateAuthTime)\n .then(AuthenticationResponse.validateAccessTokenHash)\n .then(AuthenticationResponse.validateAuthorizationCodeHash)\n }\n\n /**\n * decryptIDToken\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static decryptIDToken (response) {\n // TODO\n return Promise.resolve(response)\n }\n\n /**\n * decodeIDToken\n *\n * Note: If the `id_token` is not present in params, this method does not\n * get called (short-circuited in `validateIDToken()`).\n *\n * @param response {AuthenticationResponse}\n * @param response.params {object}\n * @param [response.params.id_token] {string} IDToken encoded as a JWT\n *\n * @returns {AuthenticationResponse} Chainable\n */\n static decodeIDToken (response) {\n let jwt = response.params.id_token\n\n try {\n response.decoded = IDToken.decode(jwt)\n } catch (decodeError) {\n const error = new HttpError(400, 'Error decoding ID Token')\n error.cause = decodeError\n error.info = { id_token: jwt }\n throw error\n }\n\n return response\n }\n\n\n /**\n * validateIssuer\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static validateIssuer (response) {\n let configuration = response.rp.provider.configuration\n let payload = response.decoded.payload\n\n // validate issuer of token matches this relying party's provider\n if (payload.iss !== configuration.issuer) {\n throw new Error('Mismatching issuer in ID Token')\n }\n\n return response\n }\n\n /**\n * validateAudience\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static validateAudience (response) {\n let registration = response.rp.registration\n let {aud, azp} = response.decoded.payload\n\n // validate audience includes this relying party\n if (typeof aud === 'string' && aud !== registration['client_id']) {\n throw new Error('Mismatching audience in id_token')\n }\n\n // validate audience includes this relying party\n if (Array.isArray(aud) && !aud.includes(registration['client_id'])) {\n throw new Error('Mismatching audience in id_token')\n }\n\n // validate authorized party is present if required\n if (Array.isArray(aud) && !azp) {\n throw new Error('Missing azp claim in id_token')\n }\n\n // validate authorized party is this relying party\n if (azp && azp !== registration['client_id']) {\n throw new Error('Mismatching azp claim in id_token')\n }\n\n return response\n }\n\n\n /**\n * resolveKeys\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static resolveKeys (response) {\n let rp = response.rp\n let provider = rp.provider\n let decoded = response.decoded\n let isFreshJwks = false\n\n return Promise.resolve(provider.jwks)\n\n .then(jwks => jwks ? jwks : (isFreshJwks = true, rp.jwks()))\n\n .then(jwks => {\n if (decoded.resolveKeys(jwks)) {\n return Promise.resolve(response)\n }\n\n if (!isFreshJwks) {\n // The OP JWK Set cached by the RP may be stale due to key rotation by the OP.\n return rp.jwks().then(jwks => {\n if (decoded.resolveKeys(jwks)) {\n return Promise.resolve(response)\n }\n throw new Error('Cannot resolve signing key for ID Token')\n })\n }\n\n throw new Error('Cannot resolve signing key for ID Token')\n })\n }\n\n /**\n * verifySignature\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static verifySignature (response) {\n let alg = response.decoded.header.alg\n let registration = response.rp.registration\n let expectedAlgorithm = registration['id_token_signed_response_alg'] || 'RS256'\n\n // validate signing algorithm matches expectation\n if (alg !== expectedAlgorithm) {\n throw new Error(\n `Expected ID Token to be signed with ${expectedAlgorithm}`)\n }\n\n return response.decoded.verify().then(verified => {\n if (!verified) {\n throw new Error('Invalid ID Token signature')\n }\n\n return response\n })\n }\n\n /**\n * validateExpires\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static validateExpires (response) {\n let exp = response.decoded.payload.exp\n\n // validate expiration of token\n if (exp <= Math.floor(Date.now() / 1000)) {\n throw new Error('Expired ID Token')\n }\n\n return response\n }\n\n /**\n * verifyNonce\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static verifyNonce (response) {\n let octets = new Uint8Array(response.request.nonce)\n let nonce = response.decoded.payload.nonce\n\n if (!nonce) {\n throw new Error('Missing nonce in ID Token')\n }\n\n return crypto.subtle.digest({ name: 'SHA-256' }, octets).then(digest => {\n if (nonce !== base64url(Buffer.from(digest))) {\n throw new Error('Mismatching nonce in ID Token')\n }\n\n return response\n })\n }\n\n /**\n * validateAcr\n *\n * @param {Object} response\n * @returns {Object}\n */\n static validateAcr (response) {\n // TODO\n return response\n }\n\n /**\n * validateAuthTime\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static validateAuthTime (response) {\n // TODO\n return response\n }\n\n /**\n * validateAccessTokenHash\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static validateAccessTokenHash (response) {\n // TODO\n return response\n }\n\n /**\n * validateAuthorizationCodeHash\n *\n * @param {Object} response\n * @returns {Promise}\n */\n static validateAuthorizationCodeHash (response) {\n // TODO\n return response\n }\n}\n\n/**\n * Export\n */\nmodule.exports = AuthenticationResponse\n","/**\n * Local dependencies\n */\nconst {JWT} = require('@solid/jose')\n\nconst REQUIRED_CLAIMS = ['iss', 'sub', 'aud', 'exp', 'iat']\n\nclass TokenClaimsSet {\n /**\n * Claims inherited from JWT:\n * @param iss {string} Issuer URL\n * @param sub {string} Subject identifier\n * @param aud {string|Array} Audience\n * @param exp {number} Expiration (seconds since epoch, RFC3339)\n * @param iat {number} Expiration (seconds since epoch, RFC3339)\n * @param [nbf] {number} Not Before (seconds since epoch, RFC3339)\n * @param [jti] {string} JWT Identifier\n *\n * Claims specific to ID Token:\n * @param [auth_time] {number} Time when user authn occurred (RFC3339)\n * @param [nonce] {string}\n * @param [acr] {string} Authentication Context Class Reference\n * @param [amr] {string} Authentication Methods References\n * @param [azp] {string} Authorized party\n */\n constructor ({ iss, sub, aud, exp, iat, nbf, jti, auth_time, nonce, acr, amr } = {}) {\n this.iss = iss\n this.sub = sub\n this.aud = aud\n this.exp = exp\n this.iat = iat\n this.nbf = nbf\n this.jti = jti\n this.auth_time = auth_time\n this.nonce = nonce\n this.acr = acr\n this.amr = amr\n }\n\n validate () {\n let valid = true\n let error\n try {\n for (const claim of REQUIRED_CLAIMS) {\n if (!this[claim]) {\n valid = false\n throw new Error(`Required claim ${claim} is missing.`)\n }\n }\n } catch (validationError) {\n error = validationError\n }\n return { valid, error }\n }\n}\n\n/**\n * IDToken\n */\nclass IDToken extends JWT {\n constructor (data = {}) {\n super(data)\n this.payload = new TokenClaimsSet(data.payload)\n }\n\n validate () {\n const payloadResult = this.payload.validate()\n if (!payloadResult.valid) {\n return payloadResult\n }\n\n let valid = true\n let error\n\n return { valid, error }\n }\n}\n\n/**\n * Export\n */\nmodule.exports = IDToken\nmodule.exports.TokenClaimsSet = TokenClaimsSet\n","'use strict'\n\nconst fetch = require('node-fetch')\nconst onHttpError = require('./onHttpError')\nconst PoPToken = require('./PoPToken')\n\nclass Session {\n /**\n * @param options {Object}\n *\n * @param options.credentialType {string} 'access_token' or 'pop_token'\n *\n * @param options.issuer {string} Identity provider (issuer of ID/Access Token)\n *\n * @param options.authorization {object}\n * @param options.authorization.client_id {string} OIDC/OAuth2 client id\n * @param [options.authorization.id_token] {string} Compact-serialized id_token param\n * @param [options.authorization.access_token] {string} Compact-serialized access_token param\n * @param [options.authorization.refresh_token] {string} Compact-serialized refresh_token\n *\n * @param [options.sessionKey] {string} Serialized client session key generated\n * during the Authentication Request, used to issue PoPTokens\n *\n * @param [options.idClaims] {object} Decoded/verified ID Token JWT payload\n *\n * @param [options.accessClaims] {object} Decoded/verified Access Token JWT payload\n */\n constructor (options) {\n this.credentialType = options.credentialType || 'access_token'\n\n this.issuer = options.issuer\n\n this.authorization = options.authorization || {}\n\n this.sessionKey = options.sessionKey\n\n this.idClaims = options.idClaims\n this.accessClaims = options.accessClaims\n }\n\n static from (options) {\n return new Session(options)\n }\n\n /**\n * @param response {AuthenticationResponse}\n *\n * @returns {Session} RelyingParty Session object\n */\n static fromAuthResponse (response) {\n const RelyingParty = require('./RelyingParty') // import here due to circular dep\n\n let idClaims = response.decoded && response.decoded.payload || {}\n\n let { rp } = response\n\n let registration = rp.registration\n let rpAuthOptions = rp.defaults.authenticate || {}\n\n let credentialType = rpAuthOptions['credential_type'] ||\n rp.defaults.popToken ? 'pop_token' : 'access_token'\n\n let sessionKey = response.session[RelyingParty.SESSION_PRIVATE_KEY]\n\n let options = {\n credentialType,\n sessionKey,\n issuer: idClaims.iss,\n idClaims,\n authorization: {\n client_id: registration['client_id'],\n access_token: response.params['access_token'],\n id_token: response.params['id_token'],\n refresh_token: response.params['refresh_token']\n }\n }\n\n return Session.from(options)\n }\n\n /**\n * Authenticated fetch() getter\n *\n * @returns {function}\n */\n get fetch () {\n /**\n * fetch() function signature\n *\n * @param url {RequestInfo|string}\n * @param options {object}\n *\n * @returns {Function>}\n */\n return (url, options) => {\n return Promise.resolve()\n\n .then(() => {\n if (this.hasCredentials()) {\n return this.fetchWithCredentials(url, options)\n } else {\n return fetch(url, options)\n }\n })\n\n .then(onHttpError('Error while fetching resource'))\n }\n }\n\n /**\n * bearerTokenFor\n *\n * @param url {string}\n *\n * @returns {Promise}\n */\n bearerTokenFor (url) {\n switch (this.credentialType) {\n case 'pop_token':\n return PoPToken.issueFor(url, this)\n\n default: // 'access_token' etc\n return Promise.resolve(this.authorization[this.credentialType])\n }\n }\n\n /**\n * hasCredentials\n *\n * @returns {boolean}\n */\n hasCredentials () {\n switch (this.credentialType) {\n case 'pop_token':\n return !!this.authorization['id_token']\n\n default: // 'access_token' etc\n return !!this.authorization[this.credentialType]\n }\n }\n\n /**\n * fetchWithCredentials\n *\n * @param url {RequestInfo|string}\n * @param options {object}\n *\n * @returns {Promise}\n */\n fetchWithCredentials (url, options = {}) {\n options.headers = options.headers || {}\n\n return this.bearerTokenFor(url)\n\n .then(token => {\n options.headers.authorization = `Bearer ${token}`\n\n return fetch(url, options)\n })\n }\n}\n\nmodule.exports = Session\n","'use strict'\n\n/**\n * Throws an error when a fetch response status code indicates a 400 or 500\n * HTTP error. (The whatwg fetch api does not normally reject on http error\n * responses).\n *\n * Usage:\n *\n * ```\n * return fetch(url)\n * .then(onHttpError('Error while fetching resource')\n * .catch(err => console.log(err))\n *\n * // -> 'Error while fetching resource: 404 Not Found' error\n * // if a 404 response is encountered\n * ```\n *\n * @param [message] {string} Optional error message to clarify context\n *\n * @throws {Error} For http status codes > 300\n *\n * @return {Object} fetch response object (passed through if no error)\n */\nfunction onHttpError (message = 'fetch error') {\n return (response) => {\n if (response.status >= 200 && response.status < 300) {\n return response\n }\n\n let errorMessage = `${message}: ${response.status} ${response.statusText}`\n let error = new Error(errorMessage)\n error.response = response\n error.statusCode = response.status\n throw error\n }\n}\n\nmodule.exports = onHttpError\n","'use strict'\n\nconst { URL } = require('whatwg-url')\nconst {JWT, JWK} = require('@solid/jose')\n\nconst DEFAULT_MAX_AGE = 3600 // Default token expiration, in seconds\n\nclass PoPToken extends JWT {\n /**\n * @param resourceServerUri {string} RS URI for which this token is intended\n *\n * @param session {Session}\n * @param session.sessionKey {string}\n * @param session.authorization.client_id {string}\n * @param session.authorization.id_token {string}\n *\n * @returns {Promise} PoPToken, encoded as compact JWT\n */\n static issueFor (resourceServerUri, session) {\n if (!resourceServerUri) {\n throw new Error('Cannot issue PoPToken - missing resource server URI')\n }\n\n if (!session.sessionKey) {\n throw new Error('Cannot issue PoPToken - missing session key')\n }\n\n if (!session.authorization.id_token) {\n throw new Error('Cannot issue PoPToken - missing id token')\n }\n\n let jwk = JSON.parse(session.sessionKey)\n\n return JWK.importKey(jwk)\n .then(importedSessionJwk => {\n let options = {\n aud: (new URL(resourceServerUri)).origin,\n key: importedSessionJwk,\n iss: session.authorization.client_id,\n id_token: session.authorization.id_token\n }\n\n return PoPToken.issue(options)\n })\n .then(jwt => {\n return jwt.encode()\n })\n }\n\n /**\n * issue\n *\n * @param options {Object}\n * @param options.iss {string} Token issuer (RP client_id)\n * @param options.aud {string|Array} Audience for the token\n * (such as the Resource Server url)\n * @param options.key {JWK} Proof of Possession (private) signing key, see\n * https://tools.ietf.org/html/rfc7800#section-3.1\n *\n * @param options.id_token {string} JWT compact encoded ID Token\n *\n * Optional:\n * @param [options.iat] {number} Issued at timestamp (in seconds)\n * @param [options.max] {number} Max token lifetime in seconds\n *\n * @returns {PoPToken} Proof of Possession Token (JWT instance)\n */\n static issue (options) {\n let { aud, iss, key } = options\n\n let alg = key.alg\n let iat = options.iat || Math.floor(Date.now() / 1000)\n let max = options.max || DEFAULT_MAX_AGE\n\n let exp = iat + max // token expiration\n\n let header = { alg }\n let payload = { iss, aud, exp, iat, id_token: options.id_token, token_type: 'pop' }\n\n let jwt = new PoPToken({ header, payload, key: key.cryptoKey }, { filter: false })\n\n return jwt\n }\n}\n\nmodule.exports = PoPToken\n","exports = module.exports = HttpError\nvar StandardError = require(\"standard-error\")\nvar STATUS_CODE_TO_NAME = require(\"./codes\")\nvar STATUS_NAME_TO_CODE = exports\n\nfunction HttpError(code, msg, props) {\n if (typeof code == \"string\") code = STATUS_NAME_TO_CODE[code]\n if (typeof code != \"number\") throw new TypeError(\"Non-numeric HTTP code\")\n if (typeof msg == \"object\" && msg != null) { props = msg; msg = null }\n StandardError.call(this, msg || STATUS_CODE_TO_NAME[code], props)\n this.code = code\n}\n\nHttpError.prototype = Object.create(StandardError.prototype, {\n constructor: {value: HttpError, configurable: true, writable: true}\n})\n\n// Set name explicitly for when the code gets minified.\nHttpError.prototype.name = \"HttpError\"\n\nObject.defineProperties(HttpError.prototype, {\n statusCode: alias(\"code\"),\n statusMessage: alias(\"message\"),\n\n status: {\n configurable: true,\n get: function() { return this.code },\n set: function(value) {\n Object.defineProperty(this, \"status\", {\n value: value, configurable: true, enumerable: true, writable: true\n })\n }\n }\n})\n\nHttpError.prototype.toString = function() {\n return this.name + \": \" + this.code + \" \" + this.message\n}\n\nfor (var code in STATUS_CODE_TO_NAME) {\n var name = STATUS_CODE_TO_NAME[code]\n exports[name.replace(\"'\", \"\").replace(/[- ]/g, \"_\").toUpperCase()] = +code\n}\n\nfunction alias(name) {\n return {\n configurable: true,\n get: function() { return this[name] },\n set: function(value) { return this[name] = value }\n }\n}\n","var has = Object.hasOwnProperty\nvar proto = Object.getPrototypeOf\nvar trace = Error.captureStackTrace\nmodule.exports = StandardError\n\nfunction StandardError(msg, props) {\n // Let all properties be enumerable for easier serialization.\n if (msg && typeof msg == \"object\") props = msg, msg = undefined\n else this.message = msg\n\n // Name has to be an own property (or on the prototype a single step up) for\n // the stack to be printed with the correct name.\n if (props) for (var key in props) this[key] = props[key]\n if (!has.call(this, \"name\"))\n this.name = has.call(proto(this), \"name\")? this.name : this.constructor.name\n\n if (trace && !(\"stack\" in this)) trace(this, this.constructor)\n}\n\nStandardError.prototype = Object.create(Error.prototype, {\n constructor: {value: StandardError, configurable: true, writable: true}\n})\n\n// Set name explicitly for when the code gets minified.\nStandardError.prototype.name = \"StandardError\"\n","// @flow\nimport type { loginOptions } from './solid-auth-client'\nimport { Server } from './ipc'\nimport type { Session } from './session'\nimport type { AsyncStorage } from './storage'\nimport { originOf } from './url-util'\n\nexport function openIdpPopup(popupUri: string): window {\n const width = 650\n const height = 400\n const left = window.screenX + (window.innerWidth - width) / 2\n const top = window.screenY + (window.innerHeight - height) / 2\n const settings = `width=${width},height=${height},left=${left},top=${top}`\n return window.open(popupUri, 'solid-auth-client', settings)\n}\n\nexport function obtainSession(\n store: AsyncStorage,\n popup: window,\n options: loginOptions\n): Promise {\n return new Promise((resolve, reject) => {\n const popupServer = new Server(\n popup,\n originOf(options.popupUri || ''),\n popupHandler(store, options, (session: Session) => {\n popupServer.stop()\n resolve(session)\n })\n )\n popupServer.start()\n })\n}\n\nexport function popupHandler(\n store: AsyncStorage,\n { popupUri, callbackUri }: loginOptions,\n foundSessionCb: (Session) => void\n) {\n return async (method: string, ...args: any[]) => {\n switch (method) {\n // Origin\n case 'getAppOrigin':\n return window.location.origin\n\n // Storage\n case 'storage/getItem':\n return store.getItem(...args)\n case 'storage/setItem':\n return store.setItem(...args)\n case 'storage/removeItem':\n return store.removeItem(...args)\n\n // Login\n case 'getLoginOptions':\n return { popupUri, callbackUri }\n case 'foundSession':\n foundSessionCb(...args)\n }\n }\n}\n","import React from 'react'\n\nimport auth from '../../src'\nimport { Client } from '../../src/ipc'\nimport { ipcStorage, getData } from '../../src/storage'\n\nimport './IdpSelect.css'\n\nexport default class IdpSelect extends React.Component {\n state = { idp: '', error: null }\n\n handleChangeIdp = (event) => {\n let idp = event.target.value\n // Auto-prepend https: if the user is not typing it\n if (!/^($|h$|ht)/.test(idp)) idp = `https://${idp}`\n this.setState({ idp })\n }\n\n handleBlurIdp = (event) => {\n let idp = event.target.value\n // Auto-prepend https: if not present\n if (!/^(https?:\\/\\/|$)/.test(idp))\n idp = idp.replace(/^([a-z]*:\\/*)?/, 'https://')\n this.setState({ idp })\n }\n\n handleSelectIdp = (idp) => async (event) => {\n event.preventDefault()\n this.setState({ idp })\n if (!window.opener) {\n console.warn('No parent window')\n this.setState({\n error:\n \"Couldn't find the application window. \" +\n 'Try closing this popup window and logging in again.',\n })\n return\n }\n const loginOptions = {\n ...(await this.getClient().request('getLoginOptions')),\n storage: this.getStorage(),\n }\n await auth.login(idp, loginOptions)\n }\n\n getClient() {\n return new Client(window.opener, this.props.appOrigin)\n }\n\n getStorage() {\n return ipcStorage(this.getClient())\n }\n\n async componentDidMount() {\n const { rpConfig } = await getData(this.getStorage())\n if (rpConfig) {\n this.setState({ idp: rpConfig.provider.url })\n }\n this.idpInput.focus()\n }\n\n render() {\n const { appName, idps } = this.props\n const { idp, error } = this.state\n return (\n
\n

\n Log in to {appName}\n

\n {error &&

{error}

}\n

Please enter your WebID or the URL of your identity provider:

\n
\n (this.idpInput = input)}\n type=\"url\"\n placeholder=\"https://my-identity.provider\"\n value={idp}\n onChange={this.handleChangeIdp}\n onBlur={this.handleBlurIdp}\n />\n \n \n

Or pick an identity provider from the list below:

\n
\n {idps.map((idp) => (\n \n {idp.displayName}\n \n ))}\n
\n
\n )\n }\n}\n","var api = require(\"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../node_modules/css-loader/dist/cjs.js!./IdpSelect.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of